diff --git a/.github/workflows/arduino_cron.yml b/.github/workflows/arduino_cron.yml
new file mode 100644
index 000000000..52ac6b0d6
--- /dev/null
+++ b/.github/workflows/arduino_cron.yml
@@ -0,0 +1,127 @@
+name: Arduino Library CI
+
+on:
+ workflow_dispatch:
+ pull_request:
+ push:
+
+
+jobs:
+ check-if-needed:
+ runs-on: ubuntu-latest
+ outputs:
+ answer: ${{ steps.is-needed.outputs.answer }}
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 2
+ - name: Check if run by adabot
+ id: check-cron
+ run: |
+ iscron=false
+ [[ "${{ github.event_name }}" == "push" && "${{ github.actor }}" == "adafruit-adabot" ]] && iscron=true
+ echo "status=$iscron" >> "$GITHUB_OUTPUT"
+ - name: Check if dispatched
+ id: check-dispatch
+ run: |
+ isdispatch=false
+ [[ "${{ github.event_name }}" == "workflow_dispatch" ]] && isdispatch=true
+ echo "status=$isdispatch" >> "$GITHUB_OUTPUT"
+ - name: Check for Arduino file updates
+ id: check-updated
+ if: ${{ steps.check-cron.outputs.status }} == false && ${{ steps.check-dispatch.outputs.status }} == false
+ run: |
+ changedfiles=$(git diff --name-only -r HEAD^1 HEAD)
+ ischanged=false
+ for changedfile in ${changedfiles[*]}; do
+ echo $changedfile
+ if [[ $changedfile == *.c ]] ||
+ [[ $changedfile == *.cpp ]] ||
+ [[ $changedfile == *.h ]] ||
+ [[ $changedfile == *.hpp ]] ||
+ [[ $changedfile == *.ino ]]; then
+ ischanged=true
+ break
+ fi
+ done
+ echo "status=$ischanged" >> "$GITHUB_OUTPUT"
+ - name: Output Arduino needed
+ id: is-needed
+ run: |
+ isneeded=false
+ if [[ ${{ steps.check-cron.outputs.status }} == true ]] ||
+ [[ ${{ steps.check-dispatch.outputs.status }} == true ]] ||
+ [[ ${{ steps.check-updated.outputs.status }} == true ]]; then
+ isneeded=true
+ fi
+ echo "answer=$isneeded" >> "$GITHUB_OUTPUT"
+
+ arduino:
+ strategy:
+ fail-fast: false
+ matrix:
+ arduino-platform: ["cpb", "cpc", "cpx_ada", "esp32", "esp8266", "feather32u4", "feather_m0_express", "feather_m4_express", "feather_rp2040", "flora", "funhouse", "gemma", "gemma_m0", "hallowing_m0", "hallowing_m4_tinyusb", "magtag", "metro_m0", "metro_m0_tinyusb", "metro_m4", "metro_m4_tinyusb", "monster_m4sk", "monster_m4sk_tinyusb", "neokeytrinkey_m0", "neotrellis_m4", "nrf52832", "nrf52840", "pycamera_s3", "protrinket_5v", "proxlighttrinkey_m0", "pybadge", "pygamer", "pyportal", "qualia_s3_rgb666", "qt2040_trinkey", "qtpy_m0", "qtpy_esp32s2", "rotarytrinkey_m0", "slidetrinkey_m0", "trinket_m0", "uno", "trinket_5v", "ledglasses_nrf52840" ]
+ runs-on: ubuntu-latest
+ if: needs.check-if-needed.outputs.answer == 'true'
+ needs: check-if-needed
+ steps:
+ - uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+ - uses: actions/checkout@v3
+ - uses: actions/checkout@v3
+ with:
+ repository: adafruit/ci-arduino
+ path: ci
+
+ - name: pre-install
+ run: bash ci/actions_install.sh
+
+ # manually install some libraries
+ - name: extra libraries
+ run: |
+ git clone --quiet https://github.com/adafruit/Cryptosuite.git /home/runner/Arduino/libraries/Cryptosuite
+ git clone --quiet https://github.com/adafruit/WiFiNINA.git /home/runner/Arduino/libraries/WiFiNINA
+ git clone --quiet https://github.com/adafruit/Adafruit_LSM303.git /home/runner/Arduino/libraries/Adafruit_LSM303
+ git clone --quiet https://github.com/moderndevice/CapSense.git /home/runner/Arduino/libraries/CapSense
+ git clone --quiet https://github.com/PaintYourDragon/ffft.git /home/runner/Arduino/libraries/ffft
+ git clone --quiet https://github.com/adafruit/RadioHead.git /home/runner/Arduino/libraries/RadioHead
+ git clone --quiet https://github.com/me-no-dev/ESPAsyncTCP /home/runner/Arduino/libraries/ESPAsyncTCP
+ git clone --quiet https://github.com/adafruit/Talkie /home/runner/Arduino/libraries/Talkie
+ git clone --quiet https://github.com/Infineon/arduino-optiga-trust-m /home/runner/Arduino/libraries/arduinoOptigaTrustM
+ git clone --quiet https://github.com/adafruit/HID /home/runner/Arduino/libraries/HID_Project
+ rm -rf /home/runner/Arduino/libraries/ArduinoHttpClient
+ git clone --quiet https://github.com/arduino-libraries/ArduinoHttpClient.git /home/runner/Arduino/libraries/ArduinoHttpClient
+
+ - name: test platforms
+ run: python3 ci/build_platform.py ${{ matrix.arduino-platform }}
+
+
+ - name: Upload build artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ github.event.repository.name }}.${{ github.sha }}
+ path: |
+ build/*.hex
+ build/*.bin
+ build/*.uf2
+
+ - name: Zip release files
+ if: startsWith(github.ref, 'refs/tags/')
+ run: |
+ if [ -d build ]; then
+ (
+ echo "Built from Adafruit Learning System Guides `git describe --tags` for ${{ matrix.arduino-platform }}"
+ echo "Source code: https://github.com/adafruit/"
+ echo "Adafruit Learning System: https://learn.adafruit.com/"
+ ) > build/README.txt
+ cd build && zip -9 -o ${{ matrix.arduino-platform }}.zip *.hex *.bin *.uf2 *.txt
+ fi
+
+ - name: Create release
+ if: startsWith(github.ref, 'refs/tags/')
+ uses: softprops/action-gh-release@v1
+ with:
+ files: build/${{ matrix.arduino-platform }}.zip
+ fail_on_unmatched_files: false
+ body: "Select the zip file corresponding to your board from the list below."
diff --git a/.github/workflows/githubci.yml b/.github/workflows/githubci.yml
index 731f6a3d5..9a8f07ade 100644
--- a/.github/workflows/githubci.yml
+++ b/.github/workflows/githubci.yml
@@ -1,4 +1,4 @@
-name: Arduino Library CI
+name: SPDX and Pylint
on: [pull_request, push, repository_dispatch]
@@ -15,75 +15,6 @@ jobs:
- name: check SPDX licensing
run: python ./SPDX.py
- arduino:
- strategy:
- fail-fast: false
- matrix:
- arduino-platform: ["cpb", "cpc", "cpx_ada", "esp32", "esp8266", "feather32u4", "feather_m0_express", "feather_m4_express", "feather_rp2040", "flora", "funhouse", "gemma", "gemma_m0", "hallowing_m0", "hallowing_m4_tinyusb", "magtag", "metro_m0", "metro_m0_tinyusb", "metro_m4", "metro_m4_tinyusb", "monster_m4sk", "monster_m4sk_tinyusb", "neokeytrinkey_m0", "neotrellis_m4", "nrf52832", "nrf52840", "protrinket_5v", "proxlighttrinkey_m0", "pybadge", "pygamer", "pyportal", "qt2040_trinkey", "qtpy_m0", "qtpy_esp32s2", "rotarytrinkey_m0", "slidetrinkey_m0", "trinket_m0", "uno", "trinket_5v", "ledglasses_nrf52840" ]
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/setup-python@v4
- with:
- python-version: "3.x"
- - uses: actions/checkout@v3
- - uses: actions/checkout@v3
- with:
- repository: adafruit/ci-arduino
- path: ci
-
- - name: pre-install
- run: bash ci/actions_install.sh
-
- # manually install some libraries
- - name: extra libraries
- run: |
- git clone --quiet https://github.com/adafruit/Cryptosuite.git /home/runner/Arduino/libraries/Cryptosuite
- git clone --quiet https://github.com/adafruit/WiFiNINA.git /home/runner/Arduino/libraries/WiFiNINA
- git clone --quiet https://github.com/adafruit/Adafruit_LSM303.git /home/runner/Arduino/libraries/Adafruit_LSM303
- git clone --quiet https://github.com/moderndevice/CapSense.git /home/runner/Arduino/libraries/CapSense
- git clone --quiet https://github.com/PaintYourDragon/ffft.git /home/runner/Arduino/libraries/ffft
- git clone --quiet https://github.com/adafruit/RadioHead.git /home/runner/Arduino/libraries/RadioHead
- git clone --quiet https://github.com/me-no-dev/ESPAsyncTCP /home/runner/Arduino/libraries/ESPAsyncTCP
- git clone --quiet https://github.com/adafruit/Talkie /home/runner/Arduino/libraries/Talkie
- git clone --quiet https://github.com/Infineon/arduino-optiga-trust-m /home/runner/Arduino/libraries/arduinoOptigaTrustM
- git clone --quiet https://github.com/adafruit/HID /home/runner/Arduino/libraries/HID_Project
- rm -rf /home/runner/Arduino/libraries/ArduinoHttpClient
- git clone --quiet https://github.com/arduino-libraries/ArduinoHttpClient.git /home/runner/Arduino/libraries/ArduinoHttpClient
-
- - name: test platforms
- run: python3 ci/build_platform.py ${{ matrix.arduino-platform }}
-
-
- - name: Upload build artifacts
- uses: actions/upload-artifact@v3
- with:
- name: ${{ github.event.repository.name }}.${{ github.sha }}
- path: |
- build/*.hex
- build/*.bin
- build/*.uf2
-
- - name: Zip release files
- if: startsWith(github.ref, 'refs/tags/')
- run: |
- if [ -d build ]; then
- (
- echo "Built from Adafruit Learning System Guides `git describe --tags` for ${{ matrix.arduino-platform }}"
- echo "Source code: https://github.com/adafruit/"
- echo "Adafruit Learning System: https://learn.adafruit.com/"
- ) > build/README.txt
- cd build && zip -9 -o ${{ matrix.arduino-platform }}.zip *.hex *.bin *.uf2 *.txt
- fi
-
- - name: Create release
- if: startsWith(github.ref, 'refs/tags/')
- uses: softprops/action-gh-release@v1
- with:
- files: build/${{ matrix.arduino-platform }}.zip
- fail_on_unmatched_files: false
- body: "Select the zip file corresponding to your board from the list below."
-
pylint:
runs-on: ubuntu-latest
steps:
diff --git a/2020_shake/.metro_m4.test.only b/16bit_hello_picowbell_dvi/.feather_rp2040.test.only
similarity index 100%
rename from 2020_shake/.metro_m4.test.only
rename to 16bit_hello_picowbell_dvi/.feather_rp2040.test.only
diff --git a/16bit_hello_picowbell_dvi/16bit_hello_picowbell_dvi.ino b/16bit_hello_picowbell_dvi/16bit_hello_picowbell_dvi.ino
new file mode 100644
index 000000000..6ccef586c
--- /dev/null
+++ b/16bit_hello_picowbell_dvi/16bit_hello_picowbell_dvi.ino
@@ -0,0 +1,622 @@
+// SPDX-FileCopyrightText: 2023 Phil B. for Adafruit Industries
+// SPDX-License-Identifier: MIT
+
+// Basic full-color PicoDVI test. Provides a 16-bit color video framebuffer to
+// which Adafruit_GFX calls can be made. It's based on the EYESPI_Test.ino sketch.
+
+#include // Core display & graphics library
+#include // A custom font
+
+// Here's how a 320x240 16-bit color framebuffer is declared. Double-buffering
+// is not an option in 16-bit color mode, just not enough RAM; all drawing
+// operations are shown as they occur. Second argument is a hardware
+// configuration -- examples are written for Adafruit Feather RP2040 DVI, but
+// that's easily switched out for boards like the Pimoroni Pico DV (use
+// 'pimoroni_demo_hdmi_cfg') or Pico DVI Sock ('pico_sock_cfg').
+DVIGFX16 display(DVI_RES_320x240p60, adafruit_dvibell_cfg);
+
+// A 400x240 mode is possible but pushes overclocking even higher than
+// 320x240 mode. SOME BOARDS MIGHT SIMPLY NOT BE COMPATIBLE WITH THIS.
+// May require selecting QSPI div4 clock (Tools menu) to slow down flash
+// accesses, may require further over-volting the CPU to 1.25 or 1.3 V.
+//DVIGFX16 display(DVI_RES_400x240p60, adafruit_feather_dvi_cfg);
+
+void setup() { // Runs once on startup
+ if (!display.begin()) { // Blink LED if insufficient RAM
+ pinMode(LED_BUILTIN, OUTPUT);
+ for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
+ }
+}
+
+#define PAUSE 2000 // Delay (milliseconds) between examples
+uint8_t rotate = 0; // Current screen orientation (0-3)
+#define CORNER_RADIUS 0
+
+void loop() {
+ // Each of these functions demonstrates a different Adafruit_GFX concept:
+ show_shapes();
+ show_charts();
+ show_basic_text();
+ show_char_map();
+ show_custom_text();
+ show_bitmap();
+ show_canvas();
+
+ if (++rotate > 3) rotate = 0; // Cycle through screen rotations 0-3
+ display.setRotation(rotate); // Takes effect on next drawing command
+}
+
+// BASIC SHAPES EXAMPLE ----------------------------------------------------
+
+void show_shapes() {
+ // Draw outlined and filled shapes. This demonstrates:
+ // - Enclosed shapes supported by GFX (points & lines are shown later).
+ // - Adapting to different-sized displays, and to rounded corners.
+
+ const int16_t cx = display.width() / 2; // Center of screen =
+ const int16_t cy = display.height() / 2; // half of width, height
+ int16_t minor = min(cx, cy); // Lesser of half width or height
+ // Shapes will be drawn in a square region centered on the screen. But one
+ // particular screen -- rounded 240x280 ST7789 -- has VERY rounded corners
+ // that would clip a couple of shapes if drawn full size. If using that
+ // screen type, reduce area by a few pixels to avoid drawing in corners.
+ if (CORNER_RADIUS > 40) minor -= 4;
+ const uint8_t pad = 5; // Space between shapes is 2X this
+ const int16_t size = minor - pad; // Shapes are this width & height
+ const int16_t half = size / 2; // 1/2 of shape size
+
+ display.fillScreen(0); // Start by clearing the screen; color 0 = black
+
+ // Draw outline version of basic shapes: rectangle, triangle, circle and
+ // rounded rectangle in different colors. Rather than hardcoded numbers
+ // for position and size, some arithmetic helps adapt to screen dimensions.
+ display.drawRect(cx - minor, cy - minor, size, size, 0xF800);
+ display.drawTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, 0x07E0);
+ display.drawCircle(cx - pad - half, cy + pad + half, half, 0x001F);
+ display.drawRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
+ delay(PAUSE);
+
+ // Draw same shapes, same positions, but filled this time.
+ display.fillRect(cx - minor, cy - minor, size, size, 0xF800);
+ display.fillTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, 0x07E0);
+ display.fillCircle(cx - pad - half, cy + pad + half, half, 0x001F);
+ display.fillRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
+ delay(PAUSE);
+} // END SHAPE EXAMPLE
+
+// CHART EXAMPLES ----------------------------------------------------------
+
+void show_charts() {
+ // Draw some graphs and charts. GFX library doesn't handle these as native
+ // object types, but it only takes a little code to build them from simple
+ // shapes. This demonstrates:
+ // - Drawing points and horizontal, vertical and arbitrary lines.
+ // - Adapting to different-sized displays.
+ // - Graphics being clipped off edge.
+ // - Use of negative values to draw shapes "backward" from an anchor point.
+ // - C technique for finding array size at runtime (vs hardcoding).
+
+ display.fillScreen(0); // Clear screen
+
+ const int16_t cx = display.width() / 2; // Center of screen =
+ const int16_t cy = display.height() / 2; // half of width, height
+ const int16_t minor = min(cx, cy); // Lesser of half width or height
+ const int16_t major = max(cx, cy); // Greater of half width or height
+
+ // Let's start with a relatively simple sine wave graph with axes.
+ // Draw graph axes centered on screen. drawFastHLine() and drawFastVLine()
+ // need fewer arguments than normal 2-point line drawing shown later.
+ display.drawFastHLine(0, cy, display.width(), 0x0210); // Dark blue
+ display.drawFastVLine(cx, 0, display.height(), 0x0210);
+
+ // Then draw some tick marks along the axes. To keep this code simple,
+ // these aren't to any particular scale, but a real program may want that.
+ // The loop here draws them from the center outward and pays no mind
+ // whether the screen is rectangular; any ticks that go off-screen will
+ // be clipped by the library.
+ for (uint8_t i=1; i<=10; i++) {
+ // The Arduino map() function scales an input value (e.g. "i") from an
+ // input range (0-10 here) to an output range (0 to major-1 here).
+ // Very handy for making graphics adjust to different screens!
+ int16_t n = map(i, 0, 10, 0, major - 1); // Tick offset relative to center point
+ display.drawFastVLine(cx - n, cy - 5, 11, 0x210);
+ display.drawFastVLine(cx + n, cy - 5, 11, 0x210);
+ display.drawFastHLine(cx - 5, cy - n, 11, 0x210);
+ display.drawFastHLine(cx - 5, cy + n, 11, 0x210);
+ }
+
+ // Then draw sine wave over this using GFX drawPixel() function.
+ for (int16_t x=0; x(str.c_str()));
+}
+
+// TEXT EXAMPLES -----------------------------------------------------------
+
+// This section demonstrates:
+// - Using the default 5x7 built-in font, including scaling in each axis.
+// - How to access all characters of this font, including symbols.
+// - Using a custom font, including alignment techniques that aren't a normal
+// part of the GFX library (uses functions above).
+
+void show_basic_text() {
+ // Show text scaling with built-in font.
+ display.fillScreen(0);
+ display.setFont(); // Use default font
+ display.setCursor(0, CORNER_RADIUS); // Initial cursor position
+ display.setTextSize(1); // Default size
+ display.println(F("Standard built-in font"));
+ display.setTextSize(2);
+ display.println(F("BIG TEXT"));
+ display.setTextSize(3);
+ // "BIGGER TEXT" won't fit on narrow screens, so abbreviate there.
+ display.println((display.width() >= 200) ? F("BIGGER TEXT") : F("BIGGER"));
+ display.setTextSize(2, 4);
+ display.println(F("TALL and"));
+ display.setTextSize(4, 2);
+ display.println(F("WIDE"));
+
+ delay(PAUSE);
+} // END BASIC TEXT EXAMPLE
+
+void show_char_map() {
+ // "Code Page 437" is a name given to the original IBM PC character set.
+ // Despite age and limited language support, still seen in small embedded
+ // settings as it has some useful symbols and accented characters. The
+ // default 5x7 pixel font of Adafruit_GFX is modeled after CP437. This
+ // function draws a table of all the characters & explains some issues.
+
+ // There are 256 characters in all. Draw table as 16 rows of 16 columns,
+ // plus hexadecimal row & column labels. How big can each cell be drawn?
+ const int cell_size = min(display.width(), display.height()) / 17;
+ if (cell_size < 8) return; // Screen is too small for table, skip example.
+ const int total_size = cell_size * 17; // 16 cells + 1 row or column label
+
+ // Set up for default 5x7 font at 1:1 scale. Custom fonts are NOT used
+ // here as most are only 128 characters to save space (the "7b" at the
+ // end of many GFX font names means "7 bits," i.e. 128 characters).
+ display.setFont();
+ display.setTextSize(1);
+
+ // Early Adafruit_GFX was missing one symbol, throwing off some indices!
+ // But fixing the library would break MANY existing sketches that relied
+ // on the degrees symbol and others. The default behavior is thus "broken"
+ // to keep older code working. New code can access the CORRECT full CP437
+ // table by calling this function like so:
+ display.cp437(true);
+
+ display.fillScreen(0);
+
+ const int16_t x = (display.width() - total_size) / 2; // Upper left corner of
+ int16_t y = (display.height() - total_size) / 2; // table centered on screen
+ if (y >= 4) { // If there's a little extra space above & below, scoot table
+ y += 4; // down a few pixels and show a message centered at top.
+ display.setCursor((display.width() - 114) / 2, 0); // 114 = pixel width
+ display.print(F("CP437 Character Map")); // of this message
+ }
+
+ const int16_t inset_x = (cell_size - 5) / 2; // To center each character within cell,
+ const int16_t inset_y = (cell_size - 8) / 2; // compute X & Y offset from corner.
+
+ for (uint8_t row=0; row<16; row++) { // 16 down...
+ // Draw row and columm headings as hexadecimal single digits. To get the
+ // hex value for a specific character, combine the left & top labels,
+ // e.g. Pi symbol is row E, column 3, thus: display.print((char)0xE3);
+ display.setCursor(x + (row + 1) * cell_size + inset_x, y + inset_y);
+ display.print(row, HEX); // This actually draws column labels
+ display.setCursor(x + inset_x, y + (row + 1) * cell_size + inset_y);
+ display.print(row, HEX); // and THIS is the row labels
+ for (uint8_t col=0; col<16; col++) { // 16 across...
+ if ((row + col) & 1) { // Fill alternating cells w/gray
+ display.fillRect(x + (col + 1) * cell_size, y + (row + 1) * cell_size,
+ cell_size, cell_size, 0x630C);
+ }
+ // drawChar() bypasses usual cursor positioning to go direct to an X/Y
+ // location. If foreground & background match, it's drawn transparent.
+ display.drawChar(x + (col + 1) * cell_size + inset_x,
+ y + (row + 1) * cell_size + inset_y, row * 16 + col,
+ 0xFFFF, 0xFFFF, 1);
+ }
+ }
+
+ delay(PAUSE * 2);
+} // END CHAR MAP EXAMPLE
+
+void show_custom_text() {
+ // Show use of custom fonts, plus how to do center or right alignment
+ // using some additional functions provided earlier.
+
+ display.fillScreen(0);
+ display.setFont(&FreeSansBold18pt7b);
+ display.setTextSize(1);
+ display.setTextWrap(false); // Allow text off edges
+
+ // Get "M height" of custom font and move initial base line there:
+ uint16_t w, h;
+ int16_t x, y;
+ display.getTextBounds("M", 0, 0, &x, &y, &w, &h);
+ // On rounded 240x280 display in tall orientation, "Custom Font" gets
+ // clipped by top corners. Scoot text down a few pixels in that one case.
+ if (CORNER_RADIUS && (display.height() == 280)) h += 20;
+ display.setCursor(display.width() / 2, h);
+
+ if (display.width() >= 200) {
+ print_aligned(display, F("Custom Font"), GFX_ALIGN_CENTER);
+ display.setCursor(0, display.getCursorY() + 10);
+ print_aligned(display, F("Align Left"), GFX_ALIGN_LEFT);
+ display.setCursor(display.width() / 2, display.getCursorY());
+ print_aligned(display, F("Centered"), GFX_ALIGN_CENTER);
+ // Small rounded screen, when oriented the wide way, "Right" gets
+ // clipped by bottom right corner. Scoot left to compensate.
+ int16_t x_offset = (CORNER_RADIUS && (display.height() < 200)) ? 15 : 0;
+ display.setCursor(display.width() - x_offset, display.getCursorY());
+ print_aligned(display, F("Align Right"), GFX_ALIGN_RIGHT);
+ } else {
+ // On narrow screens, use abbreviated messages
+ print_aligned(display, F("Font &"), GFX_ALIGN_CENTER);
+ print_aligned(display, F("Align"), GFX_ALIGN_CENTER);
+ display.setCursor(0, display.getCursorY() + 10);
+ print_aligned(display, F("Left"), GFX_ALIGN_LEFT);
+ display.setCursor(display.width() / 2, display.getCursorY());
+ print_aligned(display, F("Center"), GFX_ALIGN_CENTER);
+ display.setCursor(display.width(), display.getCursorY());
+ print_aligned(display, F("Right"), GFX_ALIGN_RIGHT);
+ }
+
+ delay(PAUSE);
+} // END CUSTOM FONT EXAMPLE
+
+// BITMAP EXAMPLE ----------------------------------------------------------
+
+// This section demonstrates:
+// - Embedding a small bitmap in the code (flash memory).
+// - Drawing that bitmap in various colors, and transparently (only '1' bits
+// are drawn; '0' bits are skipped, leaving screen contents in place).
+// - Use of the color565() function to decimate 24-bit RGB to 16 bits.
+
+#define HEX_WIDTH 16 // Bitmap width in pixels
+#define HEX_HEIGHT 16 // Bitmap height in pixels
+// Bitmap data. PROGMEM ensures it's in flash memory (not RAM). And while
+// it would be valid to leave the brackets empty here (i.e. hex_bitmap[]),
+// having dimensions with a little math makes the compiler verify the
+// correct number of bytes are present in the list.
+PROGMEM const uint8_t hex_bitmap[(HEX_WIDTH + 7) / 8 * HEX_HEIGHT] = {
+ 0b00000001, 0b10000000,
+ 0b00000111, 0b11100000,
+ 0b00011111, 0b11111000,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b00011111, 0b11111000,
+ 0b00000111, 0b11100000,
+ 0b00000001, 0b10000000,
+};
+#define Y_SPACING (HEX_HEIGHT - 2) // Used by code below for positioning
+
+void show_bitmap() {
+ display.fillScreen(0);
+
+ // Not screen center, but UL coordinates of center hexagon bitmap
+ const int16_t center_x = (display.width() - HEX_WIDTH) / 2;
+ const int16_t center_y = (display.height() - HEX_HEIGHT) / 2;
+ const uint8_t steps = min((display.height() - HEX_HEIGHT) / Y_SPACING,
+ display.width() / HEX_WIDTH - 1) / 2;
+
+ display.drawBitmap(center_x, center_y, hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ 0xFFFF); // Draw center hexagon in white
+
+ // Tile the hexagon bitmap repeatedly in a range of hues. Don't mind the
+ // bit of repetition in the math, the optimizer easily picks this up.
+ // Also, if math looks odd, keep in mind "PEMDAS" operator precedence;
+ // multiplication and division occur before addition and subtraction.
+ for (uint8_t a=0; a<=steps; a++) {
+ for (uint8_t b=1; b<=steps; b++) {
+ display.drawBitmap( // Right section centered red: a = green, b = blue
+ center_x + (a + b) * HEX_WIDTH / 2,
+ center_y + (a - b) * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255, 255 - 255 * a / steps, 255 - 255 * b / steps));
+ display.drawBitmap( // UL section centered green: a = blue, b = red
+ center_x - b * HEX_WIDTH + a * HEX_WIDTH / 2,
+ center_y - a * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255 - 255 * b / steps, 255, 255 - 255 * a / steps));
+ display.drawBitmap( // LL section centered blue: a = red, b = green
+ center_x - a * HEX_WIDTH + b * HEX_WIDTH / 2,
+ center_y + b * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255 - 255 * a / steps, 255 - 255 * b / steps, 255));
+ }
+ }
+
+ delay(PAUSE);
+} // END BITMAP EXAMPLE
+
+// CANVAS EXAMPLE ----------------------------------------------------------
+
+// This section demonstrates:
+// - How to refresh changing values onscreen without erase/redraw flicker.
+// - Using an offscreen canvas. It's similar to a bitmap above, but rather
+// than a fixed pattern in flash memory, it's drawable like the screen.
+// - More tips on text alignment, and adapting to different screen sizes.
+
+#define PADDING 6 // Pixels between axis label and value
+
+void show_canvas() {
+ // For this example, let's suppose we want to display live readings from a
+ // sensor such as a three-axis accelerometer, something like:
+ // X: (number)
+ // Y: (number)
+ // Z: (number)
+ // To look extra classy, we want a custom font, and the labels for each
+ // axis are right-aligned so the ':' characters line up...
+
+ display.setFont(&FreeSansBold18pt7b); // Use a custom font
+ display.setTextSize(1); // and reset to 1:1 scale
+
+ char *label[] = { "X:", "Y:", "Z:" }; // Labels for each axis
+ const uint16_t color[] = { 0xF800, 0x07E0, 0x001F }; // Colors for each value
+
+ // To get the labels right-aligned, one option would be simple trial and
+ // error to find a column that looks good and doesn't clip anything off.
+ // Let's do this dynamically though, so it adapts to any font or labels!
+ // Start by finding the widest of the label strings:
+ uint16_t w, h, max_w = 0;
+ int16_t x, y;
+ for (uint8_t i=0; i<3; i++) { // For each label...
+ display.getTextBounds(label[i], 0, 0, &x, &y, &w, &h);
+ if (w > max_w) max_w = w; // Keep track of widest label
+ }
+
+ // Rounded corners throwing us a curve again. If needed, scoot everything
+ // to the right a bit on wide displays, down a bit on tall ones.
+ int16_t y_offset = 0;
+ if (display.width() > display.height()) max_w += CORNER_RADIUS;
+ else y_offset = CORNER_RADIUS;
+
+ // Now we have max_w for right-aligning the labels. Before we draw them
+ // though...in order to perform flicker-free updates, the numbers we show
+ // will be rendered in either a GFXcanvas1 or GFXcanvas16 object; a 1-bit
+ // or 16-bit offscreen bitmap, RAM permitting. The correct size for this
+ // canvas could also be trial-and-errored, but again let's make this adapt
+ // automatically. The width of the canvas will span from max_w (plus a few
+ // pixels for padding) to the right edge. But the height? Looking at an
+ // uppercase 'M' can work in many situations, but some fonts have ascenders
+ // and descenders on digits, and in some locales a comma (extending below
+ // the baseline) is the decimal separator. Feed ALL the numeric chars into
+ // getTextBounds() for a cumulative height:
+ display.setTextWrap(false); // Keep on one line
+ display.getTextBounds(F("0123456789.,-"), 0, 0, &x, &y, &w, &h);
+
+ // Now declare a GFXcanvas16 object based on the computed width & height:
+ GFXcanvas16 canvas16(display.width() - max_w - PADDING, h);
+
+ // Small devices (e.g. ATmega328p) will almost certainly lack enough RAM
+ // for the canvas. Check if canvas buffer exists. If not, fall back on
+ // using a 1-bit (rather than 16-bit) canvas. Much more RAM friendly, but
+ // not as fast to draw. If a project doesn't require super interactive
+ // updates, consider just going straight for the more compact Canvas1.
+ if (canvas16.getBuffer()) {
+ // If here, 16-bit canvas allocated successfully! Point of interest,
+ // only one canvas is needed for this example, we can reuse it for all
+ // three numbers because the regions are the same size.
+
+ // display and canvas are independent drawable objects; must explicitly
+ // set the same custom font to use on the canvas now:
+ canvas16.setFont(&FreeSansBold18pt7b);
+
+ // Clear display and print labels. Once drawn, these remain untouched.
+ display.fillScreen(0);
+ display.setCursor(max_w, -y + y_offset); // Set baseline for first row
+ for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
+
+ // Last part now is to print numbers on the canvas and copy the canvas to
+ // the display, repeating for several seconds...
+ uint32_t elapsed, startTime = millis();
+ while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
+ for (uint8_t i=0; i<3; i++) { // For each label...
+ canvas16.fillScreen(0); // fillScreen() in this case clears canvas
+ canvas16.setCursor(0, -y); // Reset baseline for custom font
+ canvas16.setTextColor(color[i]);
+ // These aren't real accelerometer readings, just cool-looking numbers.
+ // Notice we print to the canvas, NOT the display:
+ canvas16.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
+ // And HERE is the secret sauce to flicker-free updates. Canvas details
+ // can be passed to the drawRGBBitmap() function, which fully overwrites
+ // prior screen contents in that area. yAdvance is font line spacing.
+ display.drawRGBBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
+ y_offset, canvas16.getBuffer(), canvas16.width(),
+ canvas16.height());
+ }
+ }
+ } else {
+ // Insufficient RAM for Canvas16. Try declaring a 1-bit canvas instead...
+ GFXcanvas1 canvas1(display.width() - max_w - PADDING, h);
+ // If even this smaller object fails, can't proceed, cancel this example.
+ if (!canvas1.getBuffer()) return;
+
+ // Remainder here is nearly identical to the code above, simply using a
+ // different canvas type. It's stripped of most comments for brevity.
+ canvas1.setFont(&FreeSansBold18pt7b);
+ display.fillScreen(0);
+ display.setCursor(max_w, -y + y_offset);
+ for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
+ uint32_t elapsed, startTime = millis();
+ while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
+ for (uint8_t i=0; i<3; i++) {
+ canvas1.fillScreen(0);
+ canvas1.setCursor(0, -y);
+ canvas1.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
+ // Here's the secret sauce to flicker-free updates with GFXcanvas1.
+ // Canvas details can be passed to the drawBitmap() function, and by
+ // specifying both a foreground AND BACKGROUND color (0), this will fully
+ // overwrite/erase prior screen contents in that area (vs transparent).
+ display.drawBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
+ y_offset, canvas1.getBuffer(), canvas1.width(),
+ canvas1.height(), color[i], 0);
+ }
+ }
+ }
+
+ // Because canvas object was declared locally to this function, it's freed
+ // automatically when the function returns; no explicit delete needed.
+} // END CANVAS EXAMPLE
diff --git a/MagTag_Arduino_Demos/button_demo/.magtag.test.only b/2020_shake/.feather_esp32s3.test.only
similarity index 100%
rename from MagTag_Arduino_Demos/button_demo/.magtag.test.only
rename to 2020_shake/.feather_esp32s3.test.only
diff --git a/MagTag_Arduino_Demos/deep_sleep/.magtag.test.only b/2020_shake/.matrixportal.test.only
similarity index 100%
rename from MagTag_Arduino_Demos/deep_sleep/.magtag.test.only
rename to 2020_shake/.matrixportal.test.only
diff --git a/2020_shake/2020_shake.ino b/2020_shake/2020_shake.ino
index eec32999d..96355cddc 100644
--- a/2020_shake/2020_shake.ino
+++ b/2020_shake/2020_shake.ino
@@ -27,11 +27,19 @@ bool show_new_year = true;
#define SHAKE_PERIOD 2000 // Period (in ms) when SHAKE_EVENTS must happen
#define SAND_TIME 6000 // Time (in ms) to run simulation before restarting
+#if defined(_VARIANT_MATRIXPORTAL_M4_) // MatrixPortal M4
uint8_t rgbPins[] = {7, 8, 9, 10, 11, 12};
-uint8_t addrPins[] = {17, 18, 19, 20};
+uint8_t addrPins[] = {17, 18, 19, 20, 21};
uint8_t clockPin = 14;
uint8_t latchPin = 15;
uint8_t oePin = 16;
+#else // MatrixPortal ESP32-S3
+uint8_t rgbPins[] = {42, 41, 40, 38, 39, 37};
+uint8_t addrPins[] = {35, 36, 48, 45, 21};
+uint8_t clockPin = 2;
+uint8_t latchPin = 47;
+uint8_t oePin = 14;
+#endif
// 64x32 pixel matrix, 6-bit depth
Adafruit_Protomatter matrix(
diff --git a/4x4_MIDI_Messenger/OCRA_small.pcf b/4x4_MIDI_Messenger/OCRA_small.pcf
new file mode 100644
index 000000000..ba2b0eb02
Binary files /dev/null and b/4x4_MIDI_Messenger/OCRA_small.pcf differ
diff --git a/4x4_MIDI_Messenger/code.py b/4x4_MIDI_Messenger/code.py
new file mode 100644
index 000000000..c2f9f2f7e
--- /dev/null
+++ b/4x4_MIDI_Messenger/code.py
@@ -0,0 +1,309 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import asyncio
+import board
+import digitalio
+from rainbowio import colorwheel
+import keypad
+import displayio
+import busio
+import adafruit_seesaw.seesaw
+import adafruit_seesaw.neopixel
+import adafruit_seesaw.rotaryio
+import adafruit_seesaw.digitalio
+from adafruit_bitmap_font import bitmap_font
+from adafruit_display_text import label
+import adafruit_displayio_ssd1306
+import adafruit_midi
+from adafruit_midi.control_change import ControlChange
+import neopixel
+
+# default MIDI channel (1-16)
+midi_in_channel = 2
+midi_out_channel = 2
+
+# MIDI CC messages, values and names assigned to each encoder
+cc_values = [
+ {'cc_val': (0, 127), 'cc_message': (14), 'cc_name': "Volume"},
+ {'cc_val': (0, 127), 'cc_message': (15), 'cc_name': "Repeats"},
+ {'cc_val': (0, 127), 'cc_message': (16), 'cc_name': "Size"},
+ {'cc_val': (0, 127), 'cc_message': (17), 'cc_name': "Mod"},
+ {'cc_val': (0, 127), 'cc_message': (18), 'cc_name': "Spread"},
+ {'cc_val': (0, 127), 'cc_message': (19), 'cc_name': "Scan"},
+ {'cc_val': (0, 127), 'cc_message': (20), 'cc_name': "Ramp"},
+ {'cc_val': (1, 3), 'cc_message': (21), 'cc_name': "Mod Number"},
+ {'cc_val': (1, 3), 'cc_message': (22), 'cc_name': "Mod Bank"},
+ {'cc_val': (1, 3), 'cc_message': (23), 'cc_name': "Mode"},
+ {'cc_val': (0, 1), 'cc_message': (102), 'cc_name': "Bypass/Engage"},
+ {'cc_val': (0, 127), 'cc_message': (93), 'cc_name': "Tap Tempo"},
+ {'cc_val': (0, 1), 'cc_message': (24), 'cc_name': "Loop (R Hold)"},
+ {'cc_val': (0, 1), 'cc_message': (25), 'cc_name': "Scan (L Hold)"},
+ {'cc_val': (0, 127), 'cc_message': (26), 'cc_name': "Clear (Both Hold)"},
+ {'cc_val': (0, 1), 'cc_message': (51), 'cc_name': "MIDI Clock Ignore"}
+ ]
+
+displayio.release_displays()
+
+oled_reset = board.D13
+
+i2c = board.STEMMA_I2C()
+# STEMMA OLED setup
+display_bus = displayio.I2CDisplay(i2c, device_address=0x3D, reset=oled_reset)
+display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=64)
+
+splash = displayio.Group()
+display.root_group = splash
+font = bitmap_font.load_font('/OCRA_small.pcf')
+# main label/MIDI message name text; centered
+main_area = label.Label(
+ font, text="4x4 MIDI Messenger", color=0xFFFFFF)
+main_area.anchor_point = (0.5, 0.0)
+main_area.anchored_position = (display.width / 2, 0)
+# MIDI message number text
+msg_area = label.Label(
+ font, text="CC Msg: 10", color=0xFFFFFF)
+msg_area.anchor_point = (0.0, 0.5)
+msg_area.anchored_position = (0, display.height / 2)
+# MIDI message value text
+val_area = label.Label(
+ font, text="CC Val: 50", color=0xFFFFFF)
+val_area.anchor_point = (0.0, 1.0)
+val_area.anchored_position = (0, display.height)
+# MIDI message status text
+status_area = label.Label(
+ font, text="Sent!", color=0xFFFFFF)
+status_area.anchor_point = (1.0, 1.0)
+status_area.anchored_position = (display.width, display.height)
+
+splash.append(main_area)
+splash.append(msg_area)
+splash.append(val_area)
+splash.append(status_area)
+# MIDI over UART setup for MIDI FeatherWing
+uart = busio.UART(board.TX, board.RX, baudrate=31250, timeout=0.001)
+midi = adafruit_midi.MIDI(
+ midi_in=uart,
+ midi_out=uart,
+ in_channel=(midi_in_channel - 1),
+ out_channel=(midi_out_channel - 1),
+ debug=False,
+)
+# quad rotary encoder setup
+ss0 = adafruit_seesaw.seesaw.Seesaw(i2c, 0x49)
+ss1 = adafruit_seesaw.seesaw.Seesaw(i2c, 0x4A)
+ss2 = adafruit_seesaw.seesaw.Seesaw(i2c, 0x4B)
+ss3 = adafruit_seesaw.seesaw.Seesaw(i2c, 0x4C)
+# button pins for the encoders
+pins = [12, 14, 17, 9]
+# interrupts for the button pins. pins are passed as a bitmask
+ss0.set_GPIO_interrupts(1 << pins[0] | 1 << pins[1] | 1 << pins[2] | 1 << pins[3], True)
+ss1.set_GPIO_interrupts(1 << pins[0] | 1 << pins[1] | 1 << pins[2] | 1 << pins[3], True)
+ss2.set_GPIO_interrupts(1 << pins[0] | 1 << pins[1] | 1 << pins[2] | 1 << pins[3], True)
+ss3.set_GPIO_interrupts(1 << pins[0] | 1 << pins[1] | 1 << pins[2] | 1 << pins[3], True)
+# arrays for the encoders and switches
+enc0 = []
+enc1 = []
+enc2 = []
+enc3 = []
+sw0 = []
+sw1 = []
+sw2 = []
+sw3 = []
+# creating encoders and switches, enabling interrupts for encoders
+for i in range(4):
+ enc0.append(adafruit_seesaw.rotaryio.IncrementalEncoder(ss0, i))
+ enc1.append(adafruit_seesaw.rotaryio.IncrementalEncoder(ss1, i))
+ enc2.append(adafruit_seesaw.rotaryio.IncrementalEncoder(ss2, i))
+ enc3.append(adafruit_seesaw.rotaryio.IncrementalEncoder(ss3, i))
+ sw0.append(adafruit_seesaw.digitalio.DigitalIO(ss0, pins[i]))
+ sw0[i].switch_to_input(digitalio.Pull.UP)
+ sw1.append(adafruit_seesaw.digitalio.DigitalIO(ss1, pins[i]))
+ sw1[i].switch_to_input(digitalio.Pull.UP)
+ sw2.append(adafruit_seesaw.digitalio.DigitalIO(ss2, pins[i]))
+ sw2[i].switch_to_input(digitalio.Pull.UP)
+ sw3.append(adafruit_seesaw.digitalio.DigitalIO(ss3, pins[i]))
+ sw3[i].switch_to_input(digitalio.Pull.UP)
+ ss0.enable_encoder_interrupt(encoder=i)
+ ss1.enable_encoder_interrupt(encoder=i)
+ ss2.enable_encoder_interrupt(encoder=i)
+ ss3.enable_encoder_interrupt(encoder=i)
+# neopixels on each PCB
+pix0 = adafruit_seesaw.neopixel.NeoPixel(ss0, 18, 4, auto_write = True)
+pix0.brightness = 0.5
+pix1 = adafruit_seesaw.neopixel.NeoPixel(ss1, 18, 4, auto_write = True)
+pix1.brightness = 0.5
+pix2 = adafruit_seesaw.neopixel.NeoPixel(ss2, 18, 4, auto_write = True)
+pix2.brightness = 0.5
+pix3 = adafruit_seesaw.neopixel.NeoPixel(ss3, 18, 4, auto_write = True)
+pix3.brightness = 0.5
+# onboard Feather neopixel
+pix_feather = neopixel.NeoPixel(board.NEOPIXEL, 1, auto_write = True)
+pix_feather.brightness = 0.5
+# encoder position arrays
+last_pos0 = [60, 60, 60, 60]
+last_pos1 = [60, 60, 60, 0]
+last_pos2 = [0, 0, 0, 120]
+last_pos3 = [0, 0, 0, 0]
+pos0 = [60, 60, 60, 60]
+pos1 = [60, 60, 60, 0]
+pos2 = [0, 0, 0, 120]
+pos3 = [0, 0, 0, 0]
+# color arrays for the neopixels
+c0 = [0, 16, 32, 48]
+c1 = [64, 80, 96, 112]
+c2 = [128, 144, 160, 176]
+c3 = [192, 208, 224, 240]
+# setting starting colors for neopixels
+for r in range(4):
+ pix0[r] = colorwheel(c0[r])
+ pix1[r] = colorwheel(c1[r])
+ pix2[r] = colorwheel(c2[r])
+ pix3[r] = colorwheel(c3[r])
+# feather neopixel color
+c_feather = 0
+pix_feather[0] = colorwheel(c_feather)
+# array of all 16 encoder positions
+encoder_posititions = [60, 60, 60, 60, 60, 60, 60, 60, 0, 0, 0, 120, 0, 0, 0, 0]
+
+class MIDI_Messages:
+ # tracks sending a message and index 0-15
+ def __init__(self):
+ self.send_msg = False
+ self.midi_index = 0
+
+class NeoPixel_Attributes:
+ # tracks color, neopixel index and seesaw
+ def __init__(self):
+ self.color = c0
+ self.index = 0
+ self.strip = pix0
+ self.feather_color = c_feather
+
+async def send_midi(midi_msg):
+ # sends MIDI message if send_msg is True/button pressed
+ while True:
+ if midi_msg.send_msg is True:
+ m = midi_msg.midi_index
+ main_area.text = f"{cc_values[m]['cc_name']}"
+ msg_area.text = f"CC Msg: {cc_values[m]['cc_message']}"
+ val_area.text = f"CC Val: {encoder_posititions[m]}"
+ midi.send(ControlChange(cc_values[m]['cc_message'], encoder_posititions[m]))
+ status_area.text = "Sent!"
+ print(f"sending midi: {m}, {encoder_posititions[m]}, {cc_values[m]['cc_message']}")
+ time.sleep(1)
+ midi_msg.send_msg = False
+ else:
+ status_area.text = " "
+ await asyncio.sleep(0)
+
+async def rainbows(the_color):
+ # Updates colors of the neopixels to scroll through rainbow
+ while True:
+ the_color.feather_color += 8
+ the_color.strip[the_color.index] = colorwheel(the_color.color[the_color.index])
+ pix_feather[0] = colorwheel(the_color.feather_color)
+ await asyncio.sleep(0)
+
+async def monitor_interrupts(pin0, pin1, pin2, pin3, the_color, midi_msg): #pylint: disable=too-many-statements
+ # function to keep encoder value pinned between CC value range
+ def normalize(val, min_v, max_v):
+ return max(min(max_v, val), min_v)
+ # read encoder function
+ def read_encoder(enc_group, pos, last_pos, pix, colors, index_diff):
+ # check all four encoders if interrupt is detected
+ for p in range(4):
+ pos[p] = enc_group[p].position
+ if pos[p] != last_pos[p]:
+ main_index = p + index_diff
+ # update CC value
+ if pos[p] > last_pos[p]:
+ colors[p] += 8
+ encoder_posititions[main_index] = encoder_posititions[main_index] + 1
+ else:
+ colors[p] -= 8
+ encoder_posititions[main_index] = encoder_posititions[main_index] - 1
+ encoder_posititions[main_index] = normalize(encoder_posititions[main_index],
+ cc_values[main_index]['cc_val'][0],
+ cc_values[main_index]['cc_val'][1])
+ colors[p] = (colors[p] + 256) % 256 # wrap around to 0-256
+ print(main_index, encoder_posititions[main_index])
+ main_area.text = f"{cc_values[main_index]['cc_name']}"
+ msg_area.text = f"CC Msg: {cc_values[main_index]['cc_message']}"
+ val_area.text = f"CC Val: {encoder_posititions[main_index]}"
+ last_pos[p] = pos[p]
+ # update NeoPixel colors
+ the_color.color = colors
+ the_color.index = p
+ the_color.strip = pix
+ # function to read button press
+ def press_switches(sw, index):
+ if not sw[index].value:
+ # signals that a MIDI message should be sent
+ midi_msg.send_msg = True
+ midi_msg.midi_index = index
+ print(f"button {index} pressed")
+ # interrupt pins are passed as a keypad
+ with keypad.Keys(
+ (pin0, pin1, pin2, pin3,), value_when_pressed=False, pull=True
+ ) as keys:
+ while True:
+ key_event = keys.events.get()
+ if key_event and key_event.pressed:
+ key_number = key_event.key_number
+ # seesaw 0
+ if key_number == 0:
+ read_encoder(enc0, pos0, last_pos0, pix0, c0, 0)
+ press_switches(sw0, 0)
+ press_switches(sw0, 1)
+ press_switches(sw0, 2)
+ press_switches(sw0, 3)
+ # seesaw 1
+ elif key_number == 1:
+ read_encoder(enc1, pos1, last_pos1, pix1, c1, 4)
+ press_switches(sw1, 0)
+ press_switches(sw1, 1)
+ press_switches(sw1, 2)
+ press_switches(sw1, 3)
+ # update index to 4-7
+ midi_msg.midi_index = midi_msg.midi_index + 4
+ # seesaw 2
+ elif key_number == 2:
+ read_encoder(enc2, pos2, last_pos2, pix2, c2, 8)
+ press_switches(sw2, 0)
+ press_switches(sw2, 1)
+ press_switches(sw2, 2)
+ press_switches(sw2, 3)
+ # update index 8-11
+ midi_msg.midi_index = midi_msg.midi_index + 8
+ # seesaw 3
+ else:
+ read_encoder(enc3, pos3, last_pos3, pix3, c3, 12)
+ press_switches(sw3, 0)
+ press_switches(sw3, 1)
+ press_switches(sw3, 2)
+ press_switches(sw3, 3)
+ # update index 12-15
+ midi_msg.midi_index = midi_msg.midi_index + 12
+ # clear interrupt flag to reset interrupt pin
+ ss0.get_GPIO_interrupt_flag()
+ ss1.get_GPIO_interrupt_flag()
+ ss2.get_GPIO_interrupt_flag()
+ ss3.get_GPIO_interrupt_flag()
+ await asyncio.sleep(0)
+
+async def main():
+ the_color = NeoPixel_Attributes()
+ midi_msg = MIDI_Messages()
+ # interrupt listener task
+ interrupt_task = asyncio.create_task(monitor_interrupts(board.D5, board.D6, board.D9,
+ board.D10, the_color, midi_msg))
+ # neopixel task
+ pixels_task = asyncio.create_task(rainbows(the_color))
+ # midi task
+ midi_task = asyncio.create_task(send_midi(midi_msg))
+
+ await asyncio.gather(interrupt_task, pixels_task, midi_task)
+
+asyncio.run(main())
diff --git a/MagTag_Arduino_Demos/neopixel_demo/.magtag.test.only b/5x5_NeoPixel_BFF_Examples/Arduino_5x5_Scrolling_Text_Demo/.feather_rp2040.test.only
similarity index 100%
rename from MagTag_Arduino_Demos/neopixel_demo/.magtag.test.only
rename to 5x5_NeoPixel_BFF_Examples/Arduino_5x5_Scrolling_Text_Demo/.feather_rp2040.test.only
diff --git a/5x5_NeoPixel_BFF_Examples/Arduino_5x5_Scrolling_Text_Demo/Arduino_5x5_Scrolling_Text_Demo.ino b/5x5_NeoPixel_BFF_Examples/Arduino_5x5_Scrolling_Text_Demo/Arduino_5x5_Scrolling_Text_Demo.ino
new file mode 100644
index 000000000..41e52f090
--- /dev/null
+++ b/5x5_NeoPixel_BFF_Examples/Arduino_5x5_Scrolling_Text_Demo/Arduino_5x5_Scrolling_Text_Demo.ino
@@ -0,0 +1,61 @@
+// SPDX-FileCopyrightText: 2022 Phil B. for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// Example for 5x5 NeoBFF - scrolls a message across the LED matrix.
+// Requires Adafruit_GFX, Adafruit_NeoPixel and Adafruit_NeoMatrix libraries.
+
+#include // Graphics library
+#include // NeoPixel library
+#include // Bridges GFX and NeoPixel
+#include // A tiny 3x5 font incl. w/GFX
+
+#define PIN A3
+
+// NeoMatrix declaration for BFF with the power and
+// Neo pins at the top (same edge as QT Py USB port):
+Adafruit_NeoMatrix matrix(5, 5, PIN,
+ NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +
+ NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
+ NEO_GRB + NEO_KHZ800);
+
+// Message to display, and a set of colors to cycle through. Because
+// the matrix is only 5 pixels tall, characters with descenders (e.g.
+// lowercase p or y) are best avoided. There are even smaller fonts
+// but these get progressively less legible. ALL CAPS helps!
+const char message[] = "HELLO BFF";
+const uint16_t colors[] = {
+ matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };
+uint16_t message_width; // Computed in setup() below
+
+void setup() {
+ matrix.begin();
+ matrix.setBrightness(40); // Turn down brightness to about 15%
+ matrix.setFont(&TomThumb); // Use custom font
+ matrix.setTextWrap(false); // Allows text to scroll off edges
+ matrix.setTextColor(colors[0]); // Start with first color in list
+ // To determine when the message has fully scrolled off the left side,
+ // get the bounding rectangle of the text. As we only need the width
+ // value, a couple of throwaway variables are passed to the bounds
+ // function for the other values:
+ int16_t d1;
+ uint16_t d2;
+ matrix.getTextBounds(message, 0, 0, &d1, &d1, &message_width, &d2);
+}
+
+int x = matrix.width(); // Start with message off right edge
+int y = matrix.height(); // With custom fonts, y is the baseline, not top
+int pass = 0; // Counts through the colors[] array
+
+void loop() {
+ matrix.fillScreen(0); // Erase message in old position.
+ matrix.setCursor(x, y); // Set new cursor position,
+ matrix.print(message); // draw the message
+ matrix.show(); // and update the matrix.
+ if(--x < -message_width) { // Move 1 pixel left. Then, if scrolled off left...
+ x = matrix.width(); // reset position off right edge and
+ if(++pass >= 3) pass = 0; // increment color in list, rolling over if needed.
+ matrix.setTextColor(colors[pass]);
+ }
+ delay(100); // 1/10 sec pause
+}
diff --git a/CircuitPython_NeoPixel_BFF/code.py b/5x5_NeoPixel_BFF_Examples/CircuitPython_Scrolling_Text/code.py
similarity index 94%
rename from CircuitPython_NeoPixel_BFF/code.py
rename to 5x5_NeoPixel_BFF_Examples/CircuitPython_Scrolling_Text/code.py
index 68a58307f..336134c80 100644
--- a/CircuitPython_NeoPixel_BFF/code.py
+++ b/5x5_NeoPixel_BFF_Examples/CircuitPython_Scrolling_Text/code.py
@@ -13,7 +13,7 @@
label = Label(text="Hello World!! Adafruit QT Py RP2040 + NeoPixel BFF ", font=font)
bitmap = label.bitmap
-pixels = neopixel.NeoPixel(board.A2, 5*5, brightness=.07, auto_write=False)
+pixels = neopixel.NeoPixel(board.A3, 5*5, brightness=.07, auto_write=False)
pixels.fill(0)
pixels.show()
colors = [0, 0]
diff --git a/CircuitPython_NeoPixel_BFF/tom-thumb.pcf b/5x5_NeoPixel_BFF_Examples/CircuitPython_Scrolling_Text/tom-thumb.pcf
similarity index 100%
rename from CircuitPython_NeoPixel_BFF/tom-thumb.pcf
rename to 5x5_NeoPixel_BFF_Examples/CircuitPython_Scrolling_Text/tom-thumb.pcf
diff --git a/5x5_NeoPixel_BFF_Examples/CircuitPython_Store_Demo/code.py b/5x5_NeoPixel_BFF_Examples/CircuitPython_Store_Demo/code.py
new file mode 100644
index 000000000..e2270ed3b
--- /dev/null
+++ b/5x5_NeoPixel_BFF_Examples/CircuitPython_Store_Demo/code.py
@@ -0,0 +1,83 @@
+# SPDX-FileCopyrightText: Copyright (c) 2022 Jeff Epler for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+import time
+import board
+import neopixel
+import fontio
+from adafruit_display_text.bitmap_label import Label
+from adafruit_bitmap_font import bitmap_font
+from displayio import Bitmap
+from rainbowio import colorwheel
+
+tom_thumb = bitmap_font.load_font("tom-thumb.pcf", Bitmap)
+
+_glyph_keys = ['bitmap', 'tile_index', 'width', 'height', 'dx', 'dy', 'shift_x', 'shift_y']
+def patch_glyph(base, **kw):
+ d = {}
+ for k in _glyph_keys:
+ d[k] = kw.get(k, getattr(base, k))
+ return fontio.Glyph(**d)
+
+class PatchedFont:
+ def __init__(self, base_font, patches):
+ self.base_font = base_font
+ self.patches = patches
+
+ def get_glyph(self, glyph):
+ g = self.base_font.get_glyph(glyph)
+ patch = self.patches.get(glyph)
+ if patch is not None:
+ print("patching", repr(chr(glyph)), g)
+ g = patch_glyph(g, **patch)
+ print("patched", g)
+ return g
+
+ def get_bounding_box(self):
+ return self.base_font.get_bounding_box()
+
+font = PatchedFont(tom_thumb,
+ {
+ 32: {'shift_x': 1, 'dx': 0},
+ 105: {'dx': 0, 'shift_x': 2},
+ 33: {'dx': 0, 'shift_x': 2},
+ })
+
+label = Label(text=" adafruit! ", font=font)
+bitmap = label.bitmap
+
+heart_bitmap = [
+ 0,1,1,0,0,
+ 1,1,1,1,0,
+ 0,1,1,1,1,
+ 1,1,1,1,0,
+ 0,1,1,0,0,
+]
+
+pixels = neopixel.NeoPixel(board.A3, 5*5, brightness=.06, auto_write=False)
+
+while True:
+ for hue in range(0, 255, 3):
+ color = colorwheel(hue)
+ pixels[:] = [pixel * color for pixel in heart_bitmap]
+ pixels.show()
+ time.sleep(.01)
+
+ hue = 0
+ for i in range(bitmap.width):
+ # Use a rainbow of colors, shifting each column of pixels
+ hue = hue + 7
+ if hue >= 256:
+ hue = hue - 256
+
+ color = colorwheel(hue)
+
+ # Scoot the old text left by 1 pixel
+ pixels[:20] = pixels[5:]
+
+ # Draw in the next line of text
+ for y in range(5):
+ # Select black or color depending on the bitmap pixel
+ pixels[20+y] = color * bitmap[i,y]
+ pixels.show()
+ time.sleep(.1)
diff --git a/5x5_NeoPixel_BFF_Examples/CircuitPython_Store_Demo/tom-thumb.pcf b/5x5_NeoPixel_BFF_Examples/CircuitPython_Store_Demo/tom-thumb.pcf
new file mode 100644
index 000000000..b9f2ae728
Binary files /dev/null and b/5x5_NeoPixel_BFF_Examples/CircuitPython_Store_Demo/tom-thumb.pcf differ
diff --git a/AHT20_OLED/code.py b/AHT20_OLED/code.py
index fce64f66f..f281abf66 100755
--- a/AHT20_OLED/code.py
+++ b/AHT20_OLED/code.py
@@ -30,7 +30,7 @@
# Make the display context
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
text = "hello world"
text_area = label.Label(terminalio.FONT, color=0xFFFF00, x=15, y=0)
diff --git a/ANO_Rotary_Encoder_Synth/code.py b/ANO_Rotary_Encoder_Synth/code.py
new file mode 100644
index 000000000..faf04a783
--- /dev/null
+++ b/ANO_Rotary_Encoder_Synth/code.py
@@ -0,0 +1,740 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+from random import randint
+import ulab.numpy as np
+import board
+import audiobusio
+import audiomixer
+import synthio
+import simpleio
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_ht16k33 import segments
+from adafruit_ht16k33.matrix import Matrix8x8x2
+from adafruit_seesaw import seesaw, rotaryio, digitalio
+
+SAMPLE_RATE = 44100
+SAMPLE_SIZE = 256
+VOLUME = 5000
+
+# waveforms, envelopes and synth setup
+
+square = np.concatenate((np.ones(SAMPLE_SIZE//2, dtype=np.int16)*VOLUME,np.ones(SAMPLE_SIZE//2,
+ dtype=np.int16)*-VOLUME))
+sine = np.array(np.sin(np.linspace(0, 4*np.pi, SAMPLE_SIZE, endpoint=False)) * VOLUME,
+ dtype=np.int16)
+saw = np.linspace(VOLUME, -VOLUME, num=SAMPLE_SIZE, dtype=np.int16)
+noise = np.array([randint(-VOLUME, VOLUME) for i in range(SAMPLE_SIZE)], dtype=np.int16)
+
+lfo = synthio.LFO(rate = .5, waveform = sine)
+
+amp_env0 = synthio.Envelope(attack_time=0.1, decay_time = 0.1, release_time=0.1,
+ attack_level=1, sustain_level=0.05)
+amp_env1 = synthio.Envelope(attack_time=0.05, decay_time = 0.1, release_time=0.1,
+ attack_level=1, sustain_level=0.05)
+
+# synth plays the notes
+synth = synthio.Synthesizer(sample_rate=SAMPLE_RATE)
+
+# these are the notes
+synth0 = synthio.Note(frequency = 0.0, envelope=amp_env0, waveform=square, ring_frequency = 0,
+ ring_bend = lfo, ring_waveform = sine)
+synth1 = synthio.Note(frequency = 0.0, envelope=amp_env1, waveform=sine, ring_frequency = 0,
+ ring_bend = lfo, ring_waveform = sine)
+synth2 = synthio.Note(frequency = 0.0, envelope=amp_env0, waveform=square, ring_frequency = 0,
+ ring_bend = lfo, ring_waveform = sine)
+synth3 = synthio.Note(frequency = 0.0, envelope=amp_env1, waveform=sine, ring_frequency = 0,
+ ring_bend = lfo, ring_waveform = sine)
+
+synths = [synth0, synth1, synth2, synth3]
+wave_names = ["SQUR", "SINE", "SAW ", "NOIZ"]
+waveforms = [square, sine, saw, noise]
+synth0_wave = 0
+synth1_wave = 1
+synth2_wave = 0
+synth3_wave = 1
+
+# i2s amp setup
+audio = audiobusio.I2SOut(bit_clock=board.D10, word_select=board.D11, data=board.D9)
+mixer = audiomixer.Mixer(voice_count=4, sample_rate=SAMPLE_RATE, channel_count=1,
+ bits_per_sample=16, samples_signed=True, buffer_size=2048 )
+audio.play(mixer)
+vol_val = 2
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.3
+
+# these are the triads, all major
+c_tones = [130.81, 164.81, 196.00]
+g_tones = [196.00, 246.94, 293.66]
+d_tones = [146.83, 185.00, 220.00]
+a_tones = [220.00, 277.18, 329.63]
+e_tones = [164.81, 207.65, 246.94]
+b_tones = [246.94, 311.13, 369.99]
+fsharp_tones = [185.00, 233.08, 277.18]
+csharp_tones = [138.59, 174.61, 207.65]
+aflat_tones = [207.65, 261.63, 311.13]
+eflat_tones = [155.56, 196.00, 233.08]
+bflat_tones = [233.08, 293.66, 349.23]
+f_tones = [174.61, 220.00, 261.63]
+
+# names for the alphanumeric displays
+chord_names = ["Cmaj", "Gmaj", "Dmaj", "Amaj", "Emaj", "Bmaj",
+ "F#ma", "C#ma", "Abma", "Ebma", "Bbma", "Fmaj"]
+chords = [c_tones, g_tones, d_tones, a_tones, e_tones, b_tones, fsharp_tones, csharp_tones,
+ aflat_tones, eflat_tones, bflat_tones, f_tones]
+
+# i2c setup
+i2c = board.I2C()
+# the encoders
+seesaw0 = seesaw.Seesaw(i2c, addr=0x49)
+seesaw1 = seesaw.Seesaw(i2c, addr=0x4A)
+seesaw2 = seesaw.Seesaw(i2c, addr=0x4B)
+seesaw3 = seesaw.Seesaw(i2c, addr=0x4C)
+menu_seesaw = seesaw.Seesaw(i2c, addr=0x4D)
+# the alphanumeric displays
+display0 = segments.Seg14x4(i2c, address=0x70)
+display1 = segments.Seg14x4(i2c, address=0x71)
+display2 = segments.Seg14x4(i2c, address=0x72)
+display3 = segments.Seg14x4(i2c, address=0x73)
+menu_display = segments.Seg14x4(i2c, address=0x74)
+# the matrix
+matrix0 = Matrix8x8x2(i2c, address=0x75)
+
+seesaws = [seesaw0, seesaw1, seesaw2, seesaw3, menu_seesaw]
+buttons0 = []
+buttons1 = []
+buttons2 = []
+buttons3 = []
+menu_buttons = []
+button0_states = []
+button1_states = []
+button2_states = []
+button3_states = []
+menu_states = []
+button0_names = ["Select", "Up", "Left", "Down", "Right"]
+
+# setup the buttons on all of the encoders
+for i in range(1, 6):
+ seesaw0.pin_mode(i, seesaw0.INPUT_PULLUP)
+ seesaw1.pin_mode(i, seesaw1.INPUT_PULLUP)
+ seesaw2.pin_mode(i, seesaw2.INPUT_PULLUP)
+ seesaw3.pin_mode(i, seesaw3.INPUT_PULLUP)
+ menu_seesaw.pin_mode(i, menu_seesaw.INPUT_PULLUP)
+ buttons0.append(digitalio.DigitalIO(seesaw0, i))
+ buttons1.append(digitalio.DigitalIO(seesaw1, i))
+ buttons2.append(digitalio.DigitalIO(seesaw2, i))
+ buttons3.append(digitalio.DigitalIO(seesaw3, i))
+ menu_buttons.append(digitalio.DigitalIO(menu_seesaw, i))
+ button0_states.append(False)
+ button1_states.append(False)
+ button2_states.append(False)
+ button3_states.append(False)
+ menu_states.append(False)
+
+# make all of the encoders
+encoder0 = rotaryio.IncrementalEncoder(seesaw0)
+last_position0 = 0
+encoder1 = rotaryio.IncrementalEncoder(seesaw1)
+last_position1 = 0
+encoder2 = rotaryio.IncrementalEncoder(seesaw2)
+last_position2 = 0
+encoder3 = rotaryio.IncrementalEncoder(seesaw3)
+last_position3 = 0
+menu_enc = rotaryio.IncrementalEncoder(menu_seesaw)
+last_menuPosition = 0
+
+# Python Implementation of Björklund's Algorithm by Brian House
+# MIT License 2011
+# https://github.com/brianhouse/bjorklund
+
+def bjorklund(steps, pulses):
+ steps = int(steps)
+ pulses = int(pulses)
+ if pulses > steps:
+ raise ValueError
+ pattern = []
+ counts = []
+ remainders = []
+ divisor = steps - pulses
+ remainders.append(pulses)
+ level = 0
+ while True:
+ counts.append(divisor // remainders[level])
+ remainders.append(divisor % remainders[level])
+ divisor = remainders[level]
+ level = level + 1
+ if remainders[level] <= 1:
+ break
+ counts.append(divisor)
+
+ def build(level):
+ if level == -1:
+ pattern.append(0)
+ elif level == -2:
+ pattern.append(1)
+ else:
+ for _ in range(0, counts[level]):
+ build(level - 1)
+ if remainders[level] != 0:
+ build(level - 2)
+
+ build(level)
+ p = pattern.index(1)
+ pattern = pattern[p:] + pattern[0:p]
+ return pattern
+
+# using ticks for time tracking
+clock = ticks_ms()
+
+# default BPM
+bpm = 120
+
+# beat divison
+beat_div = [15, 30, 60, 120, 240]
+beat_index = 2
+beat_names = ["1/16", "1/8 ", "1/4 ", "1/2 ", "HOLE"]
+delay = int((beat_div[beat_index] / bpm) * 1000)
+
+# variables for euclidean
+c0 = 0
+c1 = 0
+c2 = 0
+c3 = 0
+r0 = 0
+r1 = 0
+r2 = 0
+r3 = 0
+last_r0 = 0
+last_r1 = 0
+last_r2 = 0
+last_r3 = 0
+
+euclid0_steps = 8
+euclid0_pulses = 4
+euclid1_steps = 8
+euclid1_pulses = 4
+euclid2_steps = 8
+euclid2_pulses = 4
+euclid3_steps = 8
+euclid3_pulses = 4
+
+rhythm0 = bjorklund(euclid0_steps, euclid0_pulses)
+rhythm1 = bjorklund(euclid1_steps, euclid1_pulses)
+rhythm2 = bjorklund(euclid2_steps, euclid2_pulses)
+rhythm3 = bjorklund(euclid3_steps, euclid3_pulses)
+
+# read buttons to update Euclidean rhythms
+# pylint: disable=too-many-branches
+def read_buttons(button_array, button_states, euc, e_step, e_pulse, the_step):
+ for b in range(5):
+ if not button_array[b].value and button_states[b] is False:
+ button_states[b] = True
+ if button0_names[b] == "Select":
+ e_step = 8
+ e_pulse = 4
+ if the_step >= e_step:
+ the_step = 0
+ elif button0_names[b] == "Up":
+ if e_step > 16:
+ e_step = 16
+ else:
+ e_step += 1
+ elif button0_names[b] == "Down":
+ if e_step < 1:
+ e_step = 1
+ else:
+ e_step -= 1
+ if the_step >= e_step:
+ the_step = 0
+ elif button0_names[b] == "Left":
+ e_pulse -= 1
+ e_pulse = max(e_pulse, 1)
+ else:
+ e_pulse += 1
+ e_pulse = min(e_pulse, e_step)
+ euc = bjorklund(e_step, e_pulse)
+ if button_array[b].value and button_states[b] is True:
+ button_states[b] = False
+ if button0_names[b] in ("Select", "Up", "Down"):
+ matrix0.fill(matrix0.LED_OFF)
+ draw_steps(euclid0_steps, 0)
+ draw_steps(euclid1_steps, 2)
+ draw_steps(euclid2_steps, 4)
+ draw_steps(euclid3_steps, 6)
+ return euc, e_step, e_pulse, the_step
+
+# play euclidean rhythms and update matrix
+def play_euclidean(this_synth, n, the_rhythm, rhythm_count, last_count, c, matrix_slot):
+ if last_count <= 7:
+ matrix0[matrix_slot, last_count] = matrix0.LED_GREEN
+ else:
+ c -= 1
+ matrix0[matrix_slot + 1, (last_count - last_count) + c] = matrix0.LED_GREEN
+ c += 1
+
+ if the_rhythm[rhythm_count] == 1:
+ this_synth.frequency = n[randint(0, 2)]
+ synth.press(this_synth)
+ if rhythm_count <= 7:
+ matrix0[matrix_slot, rhythm_count] = matrix0.LED_RED
+ else:
+ matrix0[matrix_slot + 1, (rhythm_count - rhythm_count) + c] = matrix0.LED_RED
+ c += 1
+ else:
+ synth.release(this_synth)
+ if rhythm_count > 7:
+ c += 1
+ last_count = rhythm_count
+
+ rhythm_count += 1
+ if rhythm_count >= len(the_rhythm):
+ rhythm_count = 0
+ if rhythm_count == 1:
+ c = 0
+ return rhythm_count, last_count, c
+
+# initial matrix draw
+def draw_steps(euc_steps, col):
+ dif = 0
+ for m in range(euc_steps):
+ if m <= 7:
+ matrix0[col, m] = matrix0.LED_GREEN
+ else:
+ matrix0[col + 1, (m - m) + dif] = matrix0.LED_GREEN
+ dif += 1
+draw_steps(euclid0_steps, 0)
+draw_steps(euclid1_steps, 2)
+draw_steps(euclid2_steps, 4)
+draw_steps(euclid3_steps, 6)
+
+# clocks for playing euclidean and reading menu encoder
+enc_clock = ticks_ms()
+menu_clock = ticks_ms()
+
+# the modes menu
+modes = ["PLAY", "EUC ", "BPM ", "BEAT", "ADSR", "WAVE", "RING", "LFO ", "VOL "]
+mode_index = 0
+mode = modes[mode_index]
+menu_display.print(f" {mode}")
+
+# default chords
+chord0_sel = 0
+chord1_sel = 1
+chord2_sel = 0
+chord3_sel = 1
+
+display0.print(chord_names[chord0_sel])
+display1.print(chord_names[chord1_sel])
+display2.print(chord_names[chord2_sel])
+display3.print(chord_names[chord3_sel])
+
+# arrays of individual buttons
+
+select_buttons = [buttons0[0], buttons1[0], buttons2[0], buttons3[0]]
+left_buttons = [buttons0[2], buttons1[2], buttons2[2], buttons3[2]]
+right_buttons = [buttons0[4], buttons1[4], buttons2[4], buttons3[4]]
+select_states = [button0_states[0], button1_states[0], button2_states[0], button3_states[0]]
+left_states = [button0_states[2], button1_states[2], button2_states[2], button3_states[2]]
+right_states = [button0_states[4], button1_states[4], button2_states[4], button3_states[4]]
+select_index = 0
+left_index = 0
+right_index = 0
+
+# adsr mode
+adsr_names = ["A", "D", "S", "R"]
+
+synth_adsr_indexes = [0, 0, 0, 0]
+
+adsr_properties = [0, 1, 4, 2]
+
+adsr0_values = [amp_env0.attack_time, amp_env0.decay_time,
+ amp_env0.sustain_level, amp_env0.release_time]
+adsr1_values = [amp_env1.attack_time, amp_env1.decay_time,
+ amp_env1.sustain_level, amp_env1.release_time]
+adsr2_values = [amp_env0.attack_time, amp_env0.decay_time,
+ amp_env0.sustain_level, amp_env0.release_time]
+adsr3_values = [amp_env1.attack_time, amp_env1.decay_time,
+ amp_env1.sustain_level, amp_env1.release_time]
+
+all_adsr_values = [adsr0_values, adsr1_values, adsr2_values, adsr3_values]
+
+adsr0_val = int(simpleio.map_range(amp_env0.attack_time, 0.0, 1.0, 0, 19))
+
+adsr1_val = int(simpleio.map_range(amp_env0.decay_time, 0.0, 1.0, 0, 19))
+
+adsr2_val = int(simpleio.map_range(amp_env0.sustain_level, 0.0, 1.0, 0, 19))
+
+adsr3_val = int(simpleio.map_range(amp_env0.release_time, 0.0, 1.0, 0, 19))
+
+clock_stretch = False
+
+ring0_val = 0
+ring1_val = 0
+ring2_val = 0
+ring3_val = 0
+
+lfo_val = 0
+
+# used to play/pause
+play_states = [True, True, True, True]
+
+while True:
+ # rotary encoder reading
+ if ticks_diff(ticks_ms(), enc_clock) >= 100:
+ position0 = encoder0.position
+ position1 = encoder1.position
+ position2 = encoder2.position
+ position3 = encoder3.position
+ menuPosition = menu_enc.position
+ # menu changes mode
+ if menuPosition != last_menuPosition:
+ if menuPosition > last_menuPosition:
+ mode_index = (mode_index + 1) % len(modes)
+ else:
+ mode_index = (mode_index - 1) % len(modes)
+ if mode in ("EUC ", "ADSR"):
+ clock_stretch = True
+ if mode in ("PLAY", "BPM ", "BEAT", "WAVE") and clock_stretch:
+ clock = ticks_ms()
+ clock_stretch = False
+ mode = modes[mode_index]
+ menu_display.print(f" {mode}")
+ last_menuPosition = menuPosition
+ # encoder functionality depends on mode
+ # encoder 0 has most functionality
+ if position0 != last_position0:
+ if position0 > last_position0:
+ if mode == "PLAY":
+ chord0_sel = (chord0_sel + 1) % len(chords)
+ display0.print(chord_names[chord0_sel])
+ elif mode == "BEAT":
+ beat_index = (beat_index + 1) % 5
+ delay = int((beat_div[beat_index] / bpm) * 1000)
+ display0.print(f" {beat_names[beat_index]}")
+ elif mode == "BPM ":
+ bpm += 1
+ delay = int((beat_div[beat_index] / bpm) * 1000)
+ display0.print(f" {bpm}")
+ elif mode == "ADSR":
+ adsr0_val = (adsr0_val + 1) % 20
+ mapped_val = simpleio.map_range(adsr0_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[0][synth_adsr_indexes[0]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[0][0],
+ decay_time = all_adsr_values[0][1],
+ release_time=all_adsr_values[0][3],
+ attack_level=1, sustain_level=all_adsr_values[0][2])
+ synth0.envelope = the_env
+ elif mode == "WAVE":
+ synth0_wave = (synth0_wave + 1) % len(wave_names)
+ synth0.waveform = waveforms[synth0_wave]
+ elif mode == "RING":
+ ring0_val = (ring0_val + 1) % 25
+ mapped_val = simpleio.map_range(ring0_val, 0, 24, 0.0, 220.0)
+ synth0.ring_frequency = mapped_val
+ elif mode == "LFO ":
+ lfo_val = (lfo_val + 1) % 10
+ mapped_val = simpleio.map_range(lfo_val, 0, 9, 0.0, 5.0)
+ lfo.rate = mapped_val
+ elif mode == "VOL ":
+ vol_val = (vol_val + 1) % 10
+ mapped_val = simpleio.map_range(vol_val, 0, 9, 0.0, 1.0)
+ mixer.voice[0].level = mapped_val
+ else:
+ if mode == "PLAY":
+ chord0_sel = (chord0_sel - 1) % len(chords)
+ display0.print(chord_names[chord0_sel])
+ elif mode == "BEAT":
+ beat_index = (beat_index - 1) % 5
+ delay = int((beat_div[beat_index] / bpm) * 1000)
+ display0.print(f" {beat_names[beat_index]}")
+ elif mode == "BPM ":
+ bpm -= 1
+ display0.print(f" {bpm}")
+ elif mode == "ADSR":
+ adsr0_val = (adsr0_val - 1) % 20
+ mapped_val = simpleio.map_range(adsr0_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[0][synth_adsr_indexes[0]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[0][0],
+ decay_time = all_adsr_values[0][1],
+ release_time=all_adsr_values[0][3],
+ attack_level=1, sustain_level=all_adsr_values[0][2])
+ synth0.envelope = the_env
+ elif mode == "WAVE":
+ synth0_wave = (synth0_wave - 1) % len(wave_names)
+ synth0.waveform = waveforms[synth0_wave]
+ elif mode == "RING":
+ ring0_val = (ring0_val - 1) % 25
+ mapped_val = simpleio.map_range(ring0_val, 0, 24, 0.0, 220.0)
+ synth0.ring_frequency = mapped_val
+ elif mode == "LFO ":
+ lfo_val = (lfo_val - 1) % 10
+ mapped_val = simpleio.map_range(lfo_val, 0, 9, 0.0, 5.0)
+ lfo.rate = mapped_val
+ elif mode == "VOL ":
+ vol_val = (vol_val - 1) % 10
+ mapped_val = simpleio.map_range(vol_val, 0, 9, 0.0, 1.0)
+ mixer.voice[0].level = mapped_val
+ last_position0 = position0
+ if position1 != last_position1:
+ if position1 > last_position1:
+ if mode == "PLAY":
+ chord1_sel = (chord1_sel + 1) % len(chords)
+ display1.print(chord_names[chord1_sel])
+ elif mode == "ADSR":
+ adsr1_val = (adsr1_val + 1) % 20
+ mapped_val = simpleio.map_range(adsr1_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[1][synth_adsr_indexes[1]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[1][0],
+ decay_time = all_adsr_values[1][1],
+ release_time=all_adsr_values[1][3],
+ attack_level=1, sustain_level=all_adsr_values[1][2])
+ synth1.envelope = the_env
+ elif mode == "WAVE":
+ synth1_wave = (synth1_wave + 1) % len(wave_names)
+ synth1.waveform = waveforms[synth1_wave]
+ elif mode == "RING":
+ ring1_val = (ring1_val + 1) % 25
+ mapped_val = simpleio.map_range(ring1_val, 0, 24, 0.0, 220.0)
+ synth1.ring_frequency = mapped_val
+ else:
+ if mode == "PLAY":
+ chord1_sel = (chord1_sel - 1) % len(chords)
+ display1.print(chord_names[chord1_sel])
+ elif mode == "ADSR":
+ adsr1_val = (adsr1_val - 1) % 20
+ mapped_val = simpleio.map_range(adsr1_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[1][synth_adsr_indexes[1]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[1][0],
+ decay_time = all_adsr_values[1][1],
+ release_time=all_adsr_values[1][3],
+ attack_level=1, sustain_level=all_adsr_values[1][2])
+ synth1.envelope = the_env
+ elif mode == "WAVE":
+ synth1_wave = (synth1_wave - 1) % len(wave_names)
+ synth1.waveform = waveforms[synth1_wave]
+ elif mode == "RING":
+ ring1_val = (ring1_val - 1) % 25
+ mapped_val = simpleio.map_range(ring1_val, 0, 24, 0.0, 220.0)
+ synth1.ring_frequency = mapped_val
+ last_position1 = position1
+ if position2 != last_position2:
+ if position2 > last_position2:
+ if mode == "PLAY":
+ chord2_sel = (chord2_sel + 1) % len(chords)
+ elif mode == "ADSR":
+ adsr2_val = (adsr2_val + 1) % 20
+ mapped_val = simpleio.map_range(adsr2_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[2][synth_adsr_indexes[2]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[2][0],
+ decay_time = all_adsr_values[2][1],
+ release_time=all_adsr_values[2][3],
+ attack_level=1, sustain_level=all_adsr_values[2][2])
+ synth2.envelope = the_env
+ elif mode == "WAVE":
+ synth2_wave = (synth2_wave + 1) % len(wave_names)
+ synth2.waveform = waveforms[synth2_wave]
+ elif mode == "RING":
+ ring2_val = (ring2_val + 1) % 25
+ mapped_val = simpleio.map_range(ring2_val, 0, 24, 0.0, 220.0)
+ synth2.ring_frequency = mapped_val
+ else:
+ if mode == "PLAY":
+ chord2_sel = (chord2_sel - 1) % len(chords)
+ display2.print(chord_names[chord2_sel])
+ elif mode == "ADSR":
+ adsr2_val = (adsr2_val - 1) % 20
+ mapped_val = simpleio.map_range(adsr2_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[2][synth_adsr_indexes[2]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[2][0],
+ decay_time = all_adsr_values[2][1],
+ release_time=all_adsr_values[2][3],
+ attack_level=1, sustain_level=all_adsr_values[2][2])
+ synth2.envelope = the_env
+ elif mode == "WAVE":
+ synth2_wave = (synth2_wave - 1) % len(wave_names)
+ synth2.waveform = waveforms[synth2_wave]
+ elif mode == "RING":
+ ring2_val = (ring2_val - 1) % 25
+ mapped_val = simpleio.map_range(ring2_val, 0, 24, 0.0, 220.0)
+ synth2.ring_frequency = mapped_val
+ last_position2 = position2
+ if position3 != last_position3:
+ if position3 > last_position3:
+ if mode == "PLAY":
+ chord3_sel = (chord3_sel + 1) % len(chords)
+ display3.print(chord_names[chord3_sel])
+ elif mode == "ADSR":
+ adsr3_val = (adsr3_val + 1) % 20
+ mapped_val = simpleio.map_range(adsr3_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[3][synth_adsr_indexes[3]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[3][0],
+ decay_time = all_adsr_values[3][1],
+ release_time=all_adsr_values[3][3],
+ attack_level=1, sustain_level=all_adsr_values[3][2])
+ synth3.envelope = the_env
+ elif mode == "WAVE":
+ synth3_wave = (synth3_wave + 1) % len(wave_names)
+ synth3.waveform = waveforms[synth3_wave]
+ elif mode == "RING":
+ ring3_val = (ring3_val + 1) % 25
+ mapped_val = simpleio.map_range(ring3_val, 0, 24, 0.0, 220.0)
+ synth3.ring_frequency = mapped_val
+ else:
+ if mode == "PLAY":
+ chord3_sel = (chord3_sel - 1) % len(chords)
+ display3.print(chord_names[chord3_sel])
+ elif mode == "ADSR":
+ adsr3_val = (adsr3_val - 1) % 20
+ mapped_val = simpleio.map_range(adsr3_val, 0, 19, 0.0, 1.0)
+ all_adsr_values[3][synth_adsr_indexes[3]] = mapped_val
+ the_env = synthio.Envelope(attack_time=all_adsr_values[3][0],
+ decay_time = all_adsr_values[3][1],
+ release_time=all_adsr_values[3][3],
+ attack_level=1, sustain_level=all_adsr_values[3][2])
+ synth3.envelope = the_env
+ elif mode == "WAVE":
+ synth3_wave = (synth3_wave - 1) % len(wave_names)
+ synth3.waveform = waveforms[synth3_wave]
+ elif mode == "RING":
+ ring3_val = (ring3_val - 1) % 25
+ mapped_val = simpleio.map_range(ring3_val, 0, 24, 0.0, 220.0)
+ synth3.ring_frequency = mapped_val
+ last_position3 = position3
+ enc_clock = ticks_add(enc_clock, 100)
+
+ # synth plays based on ticks timing
+ if ticks_diff(ticks_ms(), clock) >= delay:
+ if play_states[0] is True:
+ r0, last_r0, c0 = play_euclidean(synth0, chords[chord0_sel],
+ rhythm0, r0, last_r0, c0, 0)
+ if play_states[1] is True:
+ r1, last_r1, c1 = play_euclidean(synth1, chords[chord1_sel],
+ rhythm1, r1, last_r1, c1, 2)
+ if play_states[2] is True:
+ r2, last_r2, c2 = play_euclidean(synth2, chords[chord2_sel],
+ rhythm2, r2, last_r2, c2, 4)
+ if play_states[3] is True:
+ r3, last_r3, c3 = play_euclidean(synth3, chords[chord3_sel],
+ rhythm3, r3, last_r3, c3, 6)
+ clock = ticks_add(clock, delay)
+ # in PLAY select button controls play/pause
+ if mode == "PLAY":
+ for i in range(4):
+ if not select_buttons[i].value and select_states[i] is False:
+ select_states[i] = True
+ if play_states[i] is True:
+ synth.release(synths[i])
+ play_states[i] = False
+ else:
+ play_states[i] = True
+ if select_buttons[i].value and select_states[i] is True:
+ select_states[i] = False
+ display0.print(chord_names[chord0_sel])
+ display1.print(chord_names[chord1_sel])
+ display2.print(chord_names[chord2_sel])
+ display3.print(chord_names[chord3_sel])
+ # EUC menu select resets cycle count
+ elif mode == "EUC ":
+ if not menu_buttons[0].value and menu_states[0] is False:
+ r0 = 0
+ r1 = 0
+ r2 = 0
+ r3 = 0
+ menu_states[0] = True
+ if menu_buttons[0].value and menu_states[0] is True:
+ menu_states[0] = False
+ rhythm0, euclid0_steps, euclid0_pulses, r0 = read_buttons(buttons0, button0_states,
+ rhythm0, euclid0_steps,
+ euclid0_pulses, r0)
+ rhythm1, euclid1_steps, euclid1_pulses, r1 = read_buttons(buttons1, button1_states,
+ rhythm1, euclid1_steps,
+ euclid1_pulses, r1)
+ rhythm2, euclid2_steps, euclid2_pulses, r2 = read_buttons(buttons2, button2_states,
+ rhythm2, euclid2_steps,
+ euclid2_pulses, r2)
+ rhythm3, euclid3_steps, euclid3_pulses, r3 = read_buttons(buttons3, button3_states,
+ rhythm3, euclid3_steps,
+ euclid3_pulses, r3)
+ display0.print(f" {euclid0_pulses}")
+ display1.print(f" {euclid1_pulses}")
+ display2.print(f" {euclid2_pulses}")
+ display3.print(f" {euclid3_pulses}")
+ # BPM is adjusted
+ elif mode == "BPM ":
+ if not select_buttons[0].value and select_states[0] is False:
+ bpm = 120
+ select_states[0] = True
+ if select_buttons[0].value and select_states[0] is True:
+ select_states[0] = False
+ display0.print(f" {bpm}")
+ display1.print(" ")
+ display2.print(" ")
+ display3.print(" ")
+ # beat division is changed
+ elif mode == "BEAT":
+ if not select_buttons[0].value and select_states[0] is False:
+ beat_names[beat_index] = 2
+ select_states[0] = True
+ if select_buttons[0].value and select_states[0] is True:
+ select_states[0] = False
+ display0.print(f" {beat_names[beat_index]}")
+ display1.print(" ")
+ display2.print(" ")
+ display3.print(" ")
+ # adsr for each voice
+ elif mode == "ADSR":
+ for i in range(4):
+ if not left_buttons[i].value and left_states[i] is False:
+ synth_adsr_indexes[i] = (synth_adsr_indexes[i] - 1) % 4
+ left_states[i] = True
+ the_synth = synths[i]
+ if left_buttons[i].value and left_states[i] is True:
+ left_states[i] = False
+ if not right_buttons[i].value and right_states[i] is False:
+ synth_adsr_indexes[i] = (synth_adsr_indexes[i] + 1) % 4
+ right_states[i] = True
+ if right_buttons[i].value and right_states[i] is True:
+ right_states[i] = False
+ if not select_buttons[i].value and select_states[i] is False:
+ the_synth = synths[i]
+ all_adsr_values[i][0] = 0.1
+ all_adsr_values[i][1] = 0.1
+ all_adsr_values[i][3] = 0.1
+ all_adsr_values[i][2] = 0.05
+ the_env = synthio.Envelope(attack_time=all_adsr_values[i][0],
+ decay_time = all_adsr_values[i][1],
+ release_time=all_adsr_values[i][3],
+ attack_level=1, sustain_level=all_adsr_values[i][2])
+ the_synth.envelope = the_env
+ select_states[i] = True
+ if select_buttons[i].value and select_states[i] is True:
+ select_states[i] = False
+ # pylint: disable=line-too-long
+ display0.print(f"{adsr_names[synth_adsr_indexes[0]]}{synth0.envelope[adsr_properties[synth_adsr_indexes[0]]]:.2f}")
+ display1.print(f"{adsr_names[synth_adsr_indexes[1]]}{synth1.envelope[adsr_properties[synth_adsr_indexes[1]]]:.2f}")
+ display2.print(f"{adsr_names[synth_adsr_indexes[2]]}{synth2.envelope[adsr_properties[synth_adsr_indexes[2]]]:.2f}")
+ display3.print(f"{adsr_names[synth_adsr_indexes[3]]}{synth3.envelope[adsr_properties[synth_adsr_indexes[3]]]:.2f}")
+ # change waveform
+ elif mode == "WAVE":
+ display0.print(f" {wave_names[synth0_wave]}")
+ display1.print(f" {wave_names[synth1_wave]}")
+ display2.print(f" {wave_names[synth2_wave]}")
+ display3.print(f" {wave_names[synth3_wave]}")
+ # adjust ring modulation
+ elif mode == "RING":
+ display0.print(f" {synth0.ring_frequency:.1f}")
+ display1.print(f" {synth1.ring_frequency:.1f}")
+ display2.print(f" {synth2.ring_frequency:.1f}")
+ display3.print(f" {synth3.ring_frequency:.1f}")
+ # adjust lfo rate used for ring modulation
+ elif mode == "LFO ":
+ display0.print("RATE")
+ display1.print(f" {lfo.rate:.1f}")
+ display2.print(" ")
+ display3.print(" ")
+ # overall volume 0.0 - 1.0
+ elif mode == "VOL ":
+ display0.print(f" {mixer.voice[0].level:.1f}")
+ display1.print(" ")
+ display2.print(" ")
+ display3.print(" ")
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/adabot.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/adabot.wav
new file mode 100644
index 000000000..cdff423be
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/adabot.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/circuits.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/circuits.wav
new file mode 100644
index 000000000..c408b0702
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/circuits.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/database.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/database.wav
new file mode 100644
index 000000000..422cd5863
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/database.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/didibreaksomething.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/didibreaksomething.wav
new file mode 100644
index 000000000..96006f7a1
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/didibreaksomething.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/doyoureadme.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/doyoureadme.wav
new file mode 100644
index 000000000..b87ff5172
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/doyoureadme.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/electrons.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/electrons.wav
new file mode 100644
index 000000000..0b3817902
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/electrons.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/excellent.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/excellent.wav
new file mode 100644
index 000000000..9fda38e28
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/excellent.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/hearsome.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/hearsome.wav
new file mode 100644
index 000000000..eba65dba0
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/hearsome.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/hello.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/hello.wav
new file mode 100644
index 000000000..52bcfd293
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/hello.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/interesting.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/interesting.wav
new file mode 100644
index 000000000..185e5493a
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/interesting.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/lemonade.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/lemonade.wav
new file mode 100644
index 000000000..9a3ad01a9
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/lemonade.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/meetyou.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/meetyou.wav
new file mode 100644
index 000000000..bed535f83
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/meetyou.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/moodmusic.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/moodmusic.wav
new file mode 100644
index 000000000..4afaa00e9
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/moodmusic.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/operational.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/operational.wav
new file mode 100644
index 000000000..bd3121ba9
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/operational.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/powerful.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/powerful.wav
new file mode 100644
index 000000000..cdb7a329b
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/powerful.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/uhoh.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/uhoh.wav
new file mode 100644
index 000000000..f065f2f4a
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/uhoh.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/whhaatt.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/whhaatt.wav
new file mode 100644
index 000000000..be9c181a6
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/whhaatt.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/WAVs/whowork.wav b/Adabot_RP2040_Prop-Maker_Feather/WAVs/whowork.wav
new file mode 100644
index 000000000..0edd0aeb5
Binary files /dev/null and b/Adabot_RP2040_Prop-Maker_Feather/WAVs/whowork.wav differ
diff --git a/Adabot_RP2040_Prop-Maker_Feather/code.py b/Adabot_RP2040_Prop-Maker_Feather/code.py
new file mode 100644
index 000000000..b1007819c
--- /dev/null
+++ b/Adabot_RP2040_Prop-Maker_Feather/code.py
@@ -0,0 +1,149 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import random
+import board
+import audiocore
+import audiobusio
+import audiomixer
+import pwmio
+import neopixel
+import adafruit_lis3dh
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from digitalio import DigitalInOut, Direction, Pull
+from adafruit_motor import servo
+from adafruit_led_animation.animation.comet import Comet
+from adafruit_led_animation.animation.pulse import Pulse
+from adafruit_led_animation.animation.sparkle import Sparkle
+from adafruit_led_animation.color import RED, BLUE, BLACK
+
+# enable external power pin
+# provides power to the external components
+external_power = DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = Direction.OUTPUT
+external_power.value = True
+
+i2c = board.I2C()
+int1 = DigitalInOut(board.ACCELEROMETER_INTERRUPT)
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1)
+lis3dh.range = adafruit_lis3dh.RANGE_2_G
+
+switch = DigitalInOut(board.EXTERNAL_BUTTON)
+switch.direction = Direction.INPUT
+switch.pull = Pull.UP
+switch_state = False
+
+wavs = []
+for filename in os.listdir('/WAVs'):
+ if filename.lower().endswith('.wav') and not filename.startswith('.'):
+ wavs.append("/WAVs/"+filename)
+
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True, buffer_size=32768)
+
+mixer.voice[0].level = 1
+track_number = 0
+wav_filename = wavs[track_number]
+wav_file = open(wav_filename, "rb")
+wave = audiocore.WaveFile(wav_file)
+audio.play(mixer)
+mixer.voice[0].play(wave)
+
+def open_audio(num):
+ n = wavs[num]
+ f = open(n, "rb")
+ w = audiocore.WaveFile(f)
+ return w
+
+PIXEL_PIN = board.EXTERNAL_NEOPIXELS
+SERVO_PIN = board.EXTERNAL_SERVO
+NUM_PIXELS = 8
+ORDER = neopixel.GRB
+BRIGHTNESS = 0.3
+
+PWM = pwmio.PWMOut(SERVO_PIN, duty_cycle=2 ** 15, frequency=50)
+SERVO = servo.Servo(PWM)
+
+pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
+pixel.brightness = 1
+
+PIXELS = neopixel.NeoPixel(PIXEL_PIN, NUM_PIXELS, auto_write=False,
+ pixel_order=ORDER)
+LARSON = Comet(PIXELS, bounce=True, speed=0.07,
+ tail_length=NUM_PIXELS//2,
+ color=(BLUE[0] * BRIGHTNESS,
+ BLUE[1] * BRIGHTNESS,
+ BLUE[2] * BRIGHTNESS))
+pulse = Pulse(PIXELS, speed=0.05,
+ color=(BLUE[0] * BRIGHTNESS,
+ BLUE[1] * BRIGHTNESS,
+ BLUE[2] * BRIGHTNESS), period=3)
+sparkle = Sparkle(PIXELS, speed=0.2,
+ color=(RED[0] * BRIGHTNESS,
+ RED[1] * BRIGHTNESS,
+ RED[2] * BRIGHTNESS), num_sparkles=10)
+
+SERVO.angle = POSITION = NEXT_POSITION = 90
+MOVING = False
+START_TIME = ticks_ms()
+DURATION = 1000
+
+adabot_talk = False
+
+clock = ticks_ms()
+prop_time = 1000
+adabot_nap = False
+
+mixer.voice[0].play(wave)
+while mixer.playing:
+ LARSON.animate()
+
+while True:
+ if ticks_diff(ticks_ms(), clock) >= prop_time:
+ x, y, z = [
+ value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration
+ ]
+ if z > 0.9:
+ adabot_nap = True
+ SERVO.angle = POSITION = NEXT_POSITION = 90
+ else:
+ adabot_nap = False
+ if not adabot_nap:
+ MOVING = not MOVING
+ if MOVING:
+ POSITION = NEXT_POSITION
+ while abs(POSITION - NEXT_POSITION) < 10:
+ NEXT_POSITION = random.uniform(0, 180)
+ DURATION = 0.2 + 0.6 * abs(POSITION - NEXT_POSITION) / 180
+ else:
+ SERVO.angle = NEXT_POSITION
+ DURATION = random.uniform(0.5, 2.5)
+ clock = ticks_add(clock, prop_time)
+ if MOVING:
+ FRACTION = 0.0 / DURATION
+ FRACTION = (3 * FRACTION ** 2) - (2 * FRACTION ** 3)
+ SERVO.angle = POSITION + (NEXT_POSITION - POSITION) * FRACTION
+ if adabot_talk:
+ wave = open_audio(random.randint(1, 17))
+ mixer.voice[0].play(wave)
+ while mixer.playing:
+ sparkle.animate()
+ if not mixer.playing:
+ adabot_talk = False
+ PIXELS.fill(BLACK)
+ PIXELS.show()
+ elif adabot_nap:
+ pulse.animate()
+ else:
+ LARSON.animate()
+
+ if not switch.value and switch_state is False:
+ PIXELS.fill(BLACK)
+ PIXELS.show()
+ adabot_talk = True
+ switch_state = True
+ if switch.value and switch_state is True:
+ switch_state = False
diff --git a/Adafruit_Feather_ESP32-S2/BME280_LC709203_Adafruit_IO/code.py b/Adafruit_Feather_ESP32-S2/BME280_LC709203_Adafruit_IO/code.py
index 89afbed03..b98723522 100644
--- a/Adafruit_Feather_ESP32-S2/BME280_LC709203_Adafruit_IO/code.py
+++ b/Adafruit_Feather_ESP32-S2/BME280_LC709203_Adafruit_IO/code.py
@@ -34,8 +34,10 @@
led.switch_to_output()
# Set up the BME280 and LC709203 sensors
-bme280 = adafruit_bme280.Adafruit_BME280_I2C(board.I2C())
-battery_monitor = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
+battery_monitor = LC709203F(i2c)
battery_monitor.pack_size = battery_pack_size
# Collect the sensor data values and format the data
diff --git a/Adafruit_Feather_ESP32-S2/BME280_LC709203_Simple_Data/code.py b/Adafruit_Feather_ESP32-S2/BME280_LC709203_Simple_Data/code.py
index 39e3099f5..5b8e69d73 100644
--- a/Adafruit_Feather_ESP32-S2/BME280_LC709203_Simple_Data/code.py
+++ b/Adafruit_Feather_ESP32-S2/BME280_LC709203_Simple_Data/code.py
@@ -9,9 +9,10 @@
from adafruit_lc709203f import LC709203F, PackSize
# Create sensor objects, using the board's default I2C bus.
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
-battery_monitor = LC709203F(board.I2C())
+battery_monitor = LC709203F(i2c)
battery_monitor.pack_size = PackSize.MAH400
# change this to match your location's pressure (hPa) at sea level
diff --git a/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_tone/code.py b/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_tone/code.py
new file mode 100644
index 000000000..55527b22b
--- /dev/null
+++ b/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_tone/code.py
@@ -0,0 +1,29 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_wav/StreetChicken.wav b/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_wav/StreetChicken.wav
new file mode 100755
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_wav/StreetChicken.wav differ
diff --git a/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_wav/code.py b/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_wav/code.py
new file mode 100644
index 000000000..9a8e429ea
--- /dev/null
+++ b/Adafruit_Feather_ESP32-S2_Reverse_TFT/i2s_wav/code.py
@@ -0,0 +1,21 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+Plays a WAV file once.
+"""
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Feather_RP2040_DVI/I2S/Tone/code.py b/Adafruit_Feather_RP2040_DVI/I2S/Tone/code.py
new file mode 100644
index 000000000..df1875ad2
--- /dev/null
+++ b/Adafruit_Feather_RP2040_DVI/I2S/Tone/code.py
@@ -0,0 +1,28 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+Plays a tone for one second on, one second off, in a loop.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Feather_RP2040_DVI/I2S/WAV/StreetChicken.wav b/Adafruit_Feather_RP2040_DVI/I2S/WAV/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Feather_RP2040_DVI/I2S/WAV/StreetChicken.wav differ
diff --git a/Adafruit_Feather_RP2040_DVI/I2S/WAV/code.py b/Adafruit_Feather_RP2040_DVI/I2S/WAV/code.py
new file mode 100644
index 000000000..6f33a81ba
--- /dev/null
+++ b/Adafruit_Feather_RP2040_DVI/I2S/WAV/code.py
@@ -0,0 +1,21 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+Plays a WAV file once.
+"""
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Feather_RP2040_DVI/Storage/code.py b/Adafruit_Feather_RP2040_DVI/Storage/code.py
new file mode 100644
index 000000000..951f87254
--- /dev/null
+++ b/Adafruit_Feather_RP2040_DVI/Storage/code.py
@@ -0,0 +1,14 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Essentials Storage CP Filesystem boot.py file
+"""
+import board
+import digitalio
+import storage
+
+button = digitalio.DigitalInOut(board.BUTTON)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+# If the button is connected to ground, the filesystem is writable by CircuitPython
+storage.remount("/", readonly=button.value)
diff --git a/Adafruit_Feather_RP2040_DVI/asyncio/code.py b/Adafruit_Feather_RP2040_DVI/asyncio/code.py
new file mode 100644
index 000000000..fccc89980
--- /dev/null
+++ b/Adafruit_Feather_RP2040_DVI/asyncio/code.py
@@ -0,0 +1,80 @@
+# SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries
+# SPDX-FileCopyrightText: Copyright (c) 2023 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython asyncio example for two NeoPixel rings and one button.
+"""
+import asyncio
+import board
+import neopixel
+import keypad
+from rainbowio import colorwheel
+
+button_pin = board.BUTTON # The pin the button is connected to.
+num_pixels = 16 # The number of NeoPixels on a single ring.
+brightness = 0.2 # The LED brightness.
+
+# Set up NeoPixel rings.
+ring_one = neopixel.NeoPixel(board.A1, num_pixels, brightness=brightness, auto_write=False)
+ring_two = neopixel.NeoPixel(board.A2, num_pixels, brightness=brightness, auto_write=False)
+
+
+class AnimationControls:
+ """The controls to allow you to vary the rainbow and blink animations."""
+ def __init__(self):
+ self.reverse = False
+ self.wait = 0.0
+ self.delay = 0.5
+
+
+async def rainbow_cycle(controls):
+ """Rainbow cycle animation on ring one."""
+ while True:
+ for j in range(255, -1, -1) if controls.reverse else range(0, 256, 1):
+ for i in range(num_pixels):
+ rc_index = (i * 256 // num_pixels) + j
+ ring_one[i] = colorwheel(rc_index & 255)
+ ring_one.show()
+ await asyncio.sleep(controls.wait)
+
+
+async def blink(controls):
+ """Blink animation on ring two."""
+ while True:
+ ring_two.fill((0, 0, 255))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ ring_two.fill((0, 0, 0))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ await asyncio.sleep(controls.wait)
+
+
+async def monitor_button(button, controls):
+ """Monitor button that reverses rainbow direction and changes blink speed.
+ Assume button is active low.
+ """
+ with keypad.Keys((button,), value_when_pressed=False, pull=True) as key:
+ while True:
+ key_event = key.events.get()
+ if key_event:
+ if key_event.pressed:
+ controls.reverse = True
+ controls.delay = 0.1
+ elif key_event.released:
+ controls.reverse = False
+ controls.delay = 0.5
+ await asyncio.sleep(0)
+
+
+async def main():
+ animation_controls = AnimationControls()
+ button_task = asyncio.create_task(monitor_button(button_pin, animation_controls))
+ animation_task = asyncio.create_task(rainbow_cycle(animation_controls))
+ blink_task = asyncio.create_task(blink(animation_controls))
+
+ # This will run forever, because no tasks ever finish.
+ await asyncio.gather(button_task, animation_task, blink_task)
+
+asyncio.run(main())
diff --git a/Adafruit_Feather_RP2040_RFM69/Capacitive_Touch/One_Pin/code.py b/Adafruit_Feather_RP2040_RFM69/Capacitive_Touch/One_Pin/code.py
new file mode 100644
index 000000000..ea1bd7d46
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/Capacitive_Touch/One_Pin/code.py
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Capacitive Touch Pin Example - Print to the serial console when one pin is touched.
+"""
+import time
+import board
+import touchio
+
+touch = touchio.TouchIn(board.A3)
+
+while True:
+ if touch.value:
+ print("Pin touched!")
+ time.sleep(0.1)
diff --git a/Adafruit_Feather_RP2040_RFM69/Capacitive_Touch/Two_Pins/code.py b/Adafruit_Feather_RP2040_RFM69/Capacitive_Touch/Two_Pins/code.py
new file mode 100644
index 000000000..3dc49f38d
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/Capacitive_Touch/Two_Pins/code.py
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Capacitive Two Touch Pin Example - Print to the serial console when a pin is touched.
+"""
+import time
+import board
+import touchio
+
+touch_one = touchio.TouchIn(board.A3)
+touch_two = touchio.TouchIn(board.D24)
+
+while True:
+ if touch_one.value:
+ print("Pin one touched!")
+ if touch_two.value:
+ print("Pin two touched!")
+ time.sleep(0.1)
diff --git a/Adafruit_Feather_RP2040_RFM69/I2S/Tone/code.py b/Adafruit_Feather_RP2040_RFM69/I2S/Tone/code.py
new file mode 100644
index 000000000..1e3725520
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/I2S/Tone/code.py
@@ -0,0 +1,29 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Feather_RP2040_RFM69/I2S/WAV/StreetChicken.wav b/Adafruit_Feather_RP2040_RFM69/I2S/WAV/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Feather_RP2040_RFM69/I2S/WAV/StreetChicken.wav differ
diff --git a/Adafruit_Feather_RP2040_RFM69/I2S/WAV/code.py b/Adafruit_Feather_RP2040_RFM69/I2S/WAV/code.py
new file mode 100644
index 000000000..6f33a81ba
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/I2S/WAV/code.py
@@ -0,0 +1,21 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+Plays a WAV file once.
+"""
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Feather_RP2040_RFM69/Send_and_Receive_Demo/Receive_Demo/code.py b/Adafruit_Feather_RP2040_RFM69/Send_and_Receive_Demo/Receive_Demo/code.py
new file mode 100755
index 000000000..99d94beb0
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/Send_and_Receive_Demo/Receive_Demo/code.py
@@ -0,0 +1,56 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Feather RP2040 RFM69 Packet Receive Demo
+
+This demo waits for a "button" packet. When the first packet is received, the NeoPixel LED
+lights up red. The next packet changes it to green. The next packet changes it to blue.
+Subsequent button packets cycle through the same colors in the same order.
+
+This example is meant to be paired with the Packet Send Demo code running
+on a second Feather RP2040 RFM69 board.
+"""
+
+import board
+import digitalio
+import neopixel
+import adafruit_rfm69
+
+# Set up NeoPixel.
+pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
+pixel.brightness = 0.5
+
+# Define the possible NeoPixel colors. You can add as many colors to this list as you like!
+# Simply follow the format shown below. Make sure you include the comma after the color tuple!
+color_values = [
+ (255, 0, 0),
+ (0, 255, 0),
+ (0, 0, 255),
+]
+
+# Define radio frequency in MHz. Must match your
+# module. Can be a value like 915.0, 433.0, etc.
+RADIO_FREQ_MHZ = 915.0
+
+# Define Chip Select and Reset pins for the radio module.
+CS = digitalio.DigitalInOut(board.RFM_CS)
+RESET = digitalio.DigitalInOut(board.RFM_RST)
+
+# Initialise RFM69 radio
+rfm69 = adafruit_rfm69.RFM69(board.SPI(), CS, RESET, RADIO_FREQ_MHZ)
+
+color_index = 0
+# Wait to receive packets.
+print("Waiting for packets...")
+while True:
+ # Look for a new packet - wait up to 5 seconds:
+ packet = rfm69.receive(timeout=5.0)
+ # If no packet was received during the timeout then None is returned.
+ if packet is not None:
+ print("Received a packet!")
+ # If the received packet is b'button'...
+ if packet == b'button':
+ # ...cycle the NeoPixel LED color through the color_values list.
+ pixel.fill(color_values[color_index])
+ color_index = (color_index + 1) % len(color_values)
diff --git a/Adafruit_Feather_RP2040_RFM69/Send_and_Receive_Demo/Send_Demo/code.py b/Adafruit_Feather_RP2040_RFM69/Send_and_Receive_Demo/Send_Demo/code.py
new file mode 100755
index 000000000..d0ec6ff0e
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/Send_and_Receive_Demo/Send_Demo/code.py
@@ -0,0 +1,36 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Feather RP2040 RFM69 Packet Send Demo
+
+This demo sends a "button" packet when the Boot button is pressed.
+
+This example is meant to be paired with the Packet Receive Demo code running
+on a second Feather RP2040 RFM69 board.
+"""
+
+import board
+import digitalio
+import keypad
+import adafruit_rfm69
+
+# Set up button using keypad module.
+button = keypad.Keys((board.BUTTON,), value_when_pressed=False)
+
+# Define radio frequency in MHz. Must match your
+# module. Can be a value like 915.0, 433.0, etc.
+RADIO_FREQ_MHZ = 915.0
+
+# Define Chip Select and Reset pins for the radio module.
+CS = digitalio.DigitalInOut(board.RFM_CS)
+RESET = digitalio.DigitalInOut(board.RFM_RST)
+
+# Initialise RFM69 radio
+rfm69 = adafruit_rfm69.RFM69(board.SPI(), CS, RESET, RADIO_FREQ_MHZ)
+
+while True:
+ button_press = button.events.get()
+ if button_press:
+ if button_press.pressed:
+ rfm69.send(bytes("button", "UTF-8"))
diff --git a/Adafruit_Feather_RP2040_RFM69/Storage/boot.py b/Adafruit_Feather_RP2040_RFM69/Storage/boot.py
new file mode 100644
index 000000000..79274e1b4
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/Storage/boot.py
@@ -0,0 +1,14 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Essentials Storage CP Filesystem boot.py file
+"""
+import board
+import digitalio
+import storage
+
+button = digitalio.DigitalInOut(board.BUTTON)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+# If the OBJECT_NAME is connected to ground, the filesystem is writable by CircuitPython
+storage.remount("/", readonly=button.value)
diff --git a/Adafruit_Feather_RP2040_RFM69/Storage/code.py b/Adafruit_Feather_RP2040_RFM69/Storage/code.py
new file mode 100644
index 000000000..f3223da73
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/Storage/code.py
@@ -0,0 +1,37 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Essentials Storage CP Filesystem code.py file
+"""
+import time
+import board
+import digitalio
+import microcontroller
+
+led = digitalio.DigitalInOut(board.LED)
+led.switch_to_output()
+
+try:
+ with open("/temperature.txt", "a") as temp_log:
+ while True:
+ # The microcontroller temperature in Celsius. Include the
+ # math to do the C to F conversion here, if desired.
+ temperature = microcontroller.cpu.temperature
+
+ # Write the temperature to the temperature.txt file every 10 seconds.
+ temp_log.write('{0:.2f}\n'.format(temperature))
+ temp_log.flush()
+
+ # Blink the LED on every write...
+ led.value = True
+ time.sleep(1) # ...for one second.
+ led.value = False # Then turn it off...
+ time.sleep(9) # ...for the other 9 seconds.
+
+except OSError as e: # When the filesystem is NOT writable by CircuitPython...
+ delay = 0.5 # ...blink the LED every half second.
+ if e.args[0] == 28: # If the file system is full...
+ delay = 0.15 # ...blink the LED every 0.15 seconds!
+ while True:
+ led.value = not led.value
+ time.sleep(delay)
diff --git a/Adafruit_Feather_RP2040_RFM69/asyncio/code.py b/Adafruit_Feather_RP2040_RFM69/asyncio/code.py
new file mode 100644
index 000000000..fccc89980
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM69/asyncio/code.py
@@ -0,0 +1,80 @@
+# SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries
+# SPDX-FileCopyrightText: Copyright (c) 2023 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython asyncio example for two NeoPixel rings and one button.
+"""
+import asyncio
+import board
+import neopixel
+import keypad
+from rainbowio import colorwheel
+
+button_pin = board.BUTTON # The pin the button is connected to.
+num_pixels = 16 # The number of NeoPixels on a single ring.
+brightness = 0.2 # The LED brightness.
+
+# Set up NeoPixel rings.
+ring_one = neopixel.NeoPixel(board.A1, num_pixels, brightness=brightness, auto_write=False)
+ring_two = neopixel.NeoPixel(board.A2, num_pixels, brightness=brightness, auto_write=False)
+
+
+class AnimationControls:
+ """The controls to allow you to vary the rainbow and blink animations."""
+ def __init__(self):
+ self.reverse = False
+ self.wait = 0.0
+ self.delay = 0.5
+
+
+async def rainbow_cycle(controls):
+ """Rainbow cycle animation on ring one."""
+ while True:
+ for j in range(255, -1, -1) if controls.reverse else range(0, 256, 1):
+ for i in range(num_pixels):
+ rc_index = (i * 256 // num_pixels) + j
+ ring_one[i] = colorwheel(rc_index & 255)
+ ring_one.show()
+ await asyncio.sleep(controls.wait)
+
+
+async def blink(controls):
+ """Blink animation on ring two."""
+ while True:
+ ring_two.fill((0, 0, 255))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ ring_two.fill((0, 0, 0))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ await asyncio.sleep(controls.wait)
+
+
+async def monitor_button(button, controls):
+ """Monitor button that reverses rainbow direction and changes blink speed.
+ Assume button is active low.
+ """
+ with keypad.Keys((button,), value_when_pressed=False, pull=True) as key:
+ while True:
+ key_event = key.events.get()
+ if key_event:
+ if key_event.pressed:
+ controls.reverse = True
+ controls.delay = 0.1
+ elif key_event.released:
+ controls.reverse = False
+ controls.delay = 0.5
+ await asyncio.sleep(0)
+
+
+async def main():
+ animation_controls = AnimationControls()
+ button_task = asyncio.create_task(monitor_button(button_pin, animation_controls))
+ animation_task = asyncio.create_task(rainbow_cycle(animation_controls))
+ blink_task = asyncio.create_task(blink(animation_controls))
+
+ # This will run forever, because no tasks ever finish.
+ await asyncio.gather(button_task, animation_task, blink_task)
+
+asyncio.run(main())
diff --git a/Adafruit_Feather_RP2040_RFM95/Send_and_Receive_Demo/Receive_Demo/code.py b/Adafruit_Feather_RP2040_RFM95/Send_and_Receive_Demo/Receive_Demo/code.py
new file mode 100644
index 000000000..e655528f3
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM95/Send_and_Receive_Demo/Receive_Demo/code.py
@@ -0,0 +1,56 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Feather RP2040 RFM95 Packet Receive Demo
+
+This demo waits for a "button" packet. When the first packet is received, the NeoPixel LED
+lights up red. The next packet changes it to green. The next packet changes it to blue.
+Subsequent button packets cycle through the same colors in the same order.
+
+This example is meant to be paired with the Packet Send Demo code running
+on a second Feather RP2040 RFM95 board.
+"""
+
+import board
+import digitalio
+import neopixel
+import adafruit_rfm9x
+
+# Set up NeoPixel.
+pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
+pixel.brightness = 0.5
+
+# Define the possible NeoPixel colors. You can add as many colors to this list as you like!
+# Simply follow the format shown below. Make sure you include the comma after the color tuple!
+color_values = [
+ (255, 0, 0),
+ (0, 255, 0),
+ (0, 0, 255),
+]
+
+# Define radio frequency in MHz. Must match your
+# module. Can be a value like 915.0, 433.0, etc.
+RADIO_FREQ_MHZ = 915.0
+
+# Define Chip Select and Reset pins for the radio module.
+CS = digitalio.DigitalInOut(board.RFM_CS)
+RESET = digitalio.DigitalInOut(board.RFM_RST)
+
+# Initialise RFM95 radio
+rfm95 = adafruit_rfm9x.RFM9x(board.SPI(), CS, RESET, RADIO_FREQ_MHZ)
+
+color_index = 0
+# Wait to receive packets.
+print("Waiting for packets...")
+while True:
+ # Look for a new packet - wait up to 5 seconds:
+ packet = rfm95.receive(timeout=5.0)
+ # If no packet was received during the timeout then None is returned.
+ if packet is not None:
+ print("Received a packet!")
+ # If the received packet is b'button'...
+ if packet == b'button':
+ # ...cycle the NeoPixel LED color through the color_values list.
+ pixel.fill(color_values[color_index])
+ color_index = (color_index + 1) % len(color_values)
diff --git a/Adafruit_Feather_RP2040_RFM95/Send_and_Receive_Demo/Send_Demo/code.py b/Adafruit_Feather_RP2040_RFM95/Send_and_Receive_Demo/Send_Demo/code.py
new file mode 100644
index 000000000..e6a3551b8
--- /dev/null
+++ b/Adafruit_Feather_RP2040_RFM95/Send_and_Receive_Demo/Send_Demo/code.py
@@ -0,0 +1,36 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Feather RP2040 RFM95 Packet Send Demo
+
+This demo sends a "button" packet when the Boot button is pressed.
+
+This example is meant to be paired with the Packet Receive Demo code running
+on a second Feather RP2040 RFM95 board.
+"""
+
+import board
+import digitalio
+import keypad
+import adafruit_rfm9x
+
+# Set up button using keypad module.
+button = keypad.Keys((board.BUTTON,), value_when_pressed=False)
+
+# Define radio frequency in MHz. Must match your
+# module. Can be a value like 915.0, 433.0, etc.
+RADIO_FREQ_MHZ = 915.0
+
+# Define Chip Select and Reset pins for the radio module.
+CS = digitalio.DigitalInOut(board.RFM_CS)
+RESET = digitalio.DigitalInOut(board.RFM_RST)
+
+# Initialise RFM95 radio
+rfm95 = adafruit_rfm9x.RFM9x(board.SPI(), CS, RESET, RADIO_FREQ_MHZ)
+
+while True:
+ button_press = button.events.get()
+ if button_press:
+ if button_press.pressed:
+ rfm95.send(bytes("button", "UTF-8"))
diff --git a/Adafruit_Feather_Sense/code.py b/Adafruit_Feather_Sense/code.py
index 568745f71..dc873af71 100755
--- a/Adafruit_Feather_Sense/code.py
+++ b/Adafruit_Feather_Sense/code.py
@@ -14,7 +14,8 @@
import adafruit_lsm6ds.lsm6ds33
import adafruit_sht31d
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
apds9960 = adafruit_apds9960.apds9960.APDS9960(i2c)
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
diff --git a/Adafruit_Feather_TFT_ESP32-S2/LC709203_Adafruit_IO/code.py b/Adafruit_Feather_TFT_ESP32-S2/LC709203_Adafruit_IO/code.py
index 0d7a306a4..1a3add4b1 100644
--- a/Adafruit_Feather_TFT_ESP32-S2/LC709203_Adafruit_IO/code.py
+++ b/Adafruit_Feather_TFT_ESP32-S2/LC709203_Adafruit_IO/code.py
@@ -33,7 +33,9 @@
led.switch_to_output()
# Set up the LC709203 sensor
-battery_monitor = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+battery_monitor = LC709203F(i2c)
battery_monitor.pack_size = battery_pack_size
# Collect the sensor data values and format the data
diff --git a/Adafruit_Feather_TFT_ESP32-S2/LC709203_Simple_Data/code.py b/Adafruit_Feather_TFT_ESP32-S2/LC709203_Simple_Data/code.py
index 9d3add860..b43f20dcd 100644
--- a/Adafruit_Feather_TFT_ESP32-S2/LC709203_Simple_Data/code.py
+++ b/Adafruit_Feather_TFT_ESP32-S2/LC709203_Simple_Data/code.py
@@ -8,7 +8,9 @@
from adafruit_lc709203f import LC709203F, PackSize
# Create sensor object, using the board's default I2C bus.
-battery_monitor = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+battery_monitor = LC709203F(i2c)
# Update to match the mAh of your battery for more accurate readings.
# Can be MAH100, MAH200, MAH400, MAH500, MAH1000, MAH2000, MAH3000.
diff --git a/Adafruit_Feather_TFT_ESP32-S2/TFT_GitHub_Stars/code.py b/Adafruit_Feather_TFT_ESP32-S2/TFT_GitHub_Stars/code.py
index b59970bc9..9e879ad02 100644
--- a/Adafruit_Feather_TFT_ESP32-S2/TFT_GitHub_Stars/code.py
+++ b/Adafruit_Feather_TFT_ESP32-S2/TFT_GitHub_Stars/code.py
@@ -35,7 +35,7 @@
text_area.x = 135
text_area.y = 90
group.append(text_area)
-display.show(group)
+display.root_group = group
# Connect to WiFi
print("Connecting to %s"%secrets["ssid"])
diff --git a/Adafruit_Feather_TFT_ESP32-S2/TFT_Hello_World/code.py b/Adafruit_Feather_TFT_ESP32-S2/TFT_Hello_World/code.py
index a44d7a228..7494dcb45 100644
--- a/Adafruit_Feather_TFT_ESP32-S2/TFT_Hello_World/code.py
+++ b/Adafruit_Feather_TFT_ESP32-S2/TFT_Hello_World/code.py
@@ -15,7 +15,7 @@
text_area = bitmap_label.Label(terminalio.FONT, text=text, scale=scale)
text_area.x = 10
text_area.y = 10
-board.DISPLAY.show(text_area)
+board.DISPLAY.root_group = text_area
while True:
pass
diff --git a/Adafruit_Feather_TFT_ESP32-S2/TFT_bitmap_display/code.py b/Adafruit_Feather_TFT_ESP32-S2/TFT_bitmap_display/code.py
index 30a65958d..ef710457e 100644
--- a/Adafruit_Feather_TFT_ESP32-S2/TFT_bitmap_display/code.py
+++ b/Adafruit_Feather_TFT_ESP32-S2/TFT_bitmap_display/code.py
@@ -12,7 +12,7 @@
tile_grid = TileGrid(bitmap=blinka_img, pixel_shader=blinka_img.pixel_shader)
main_group.append(tile_grid)
-board.DISPLAY.show(main_group)
+board.DISPLAY.root_group = main_group
tile_grid.x = board.DISPLAY.width // 2 - blinka_img.width // 2
diff --git a/Adafruit_Feather_TFT_ESP32-S2/TFT_simple_sensor_data/code.py b/Adafruit_Feather_TFT_ESP32-S2/TFT_simple_sensor_data/code.py
index 495762593..30445fcd6 100644
--- a/Adafruit_Feather_TFT_ESP32-S2/TFT_simple_sensor_data/code.py
+++ b/Adafruit_Feather_TFT_ESP32-S2/TFT_simple_sensor_data/code.py
@@ -21,11 +21,13 @@
print("LC709203F test")
print("Make sure LiPoly battery is plugged into the board!")
-sensor = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+sensor = LC709203F(i2c)
print("IC version:", hex(sensor.ic_version))
-board.DISPLAY.show(main_group)
+board.DISPLAY.root_group = main_group
while True:
text_area.text = "Battery:\n{:.1f} Volts \n{}%".format(sensor.cell_voltage, sensor.cell_percent)
diff --git a/MagTag_Arduino_Demos/quotes/.magtag.test.only b/Adafruit_I2S_BFF/Arduino/I2S_BFF_QT_Py_RP2040_Audio_Playback/.qt_py_rp2040.test.only
similarity index 100%
rename from MagTag_Arduino_Demos/quotes/.magtag.test.only
rename to Adafruit_I2S_BFF/Arduino/I2S_BFF_QT_Py_RP2040_Audio_Playback/.qt_py_rp2040.test.only
diff --git a/Adafruit_I2S_BFF/Arduino/I2S_BFF_QT_Py_RP2040_Audio_Playback/I2S_BFF_QT_Py_RP2040_Audio_Playback.ino b/Adafruit_I2S_BFF/Arduino/I2S_BFF_QT_Py_RP2040_Audio_Playback/I2S_BFF_QT_Py_RP2040_Audio_Playback.ino
new file mode 100644
index 000000000..3ac661c13
--- /dev/null
+++ b/Adafruit_I2S_BFF/Arduino/I2S_BFF_QT_Py_RP2040_Audio_Playback/I2S_BFF_QT_Py_RP2040_Audio_Playback.ino
@@ -0,0 +1,72 @@
+// SPDX-FileCopyrightText: 2023 Ladyada for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+/*
+ This example plays a 'raw' PCM file from memory to I2S
+*/
+
+#include
+
+#include "startup.h" // audio file in flash
+
+// Create the I2S port using a PIO state machine
+I2S i2s(OUTPUT);
+
+// GPIO pin numbers
+#define pBCLK A2 // QT Py BFF default BITCLOCK
+#define pWS A1 // QT Py BFF default LRCLOCK
+#define pDOUT A0 // QT Py BFF default DATA
+
+#define USERBUTTON 21 // QT Py RP2040 built in button
+
+// variable shared between cores
+volatile bool playaudio = false;
+
+void setup() {
+ Serial.begin(115200);
+ //while (!Serial) delay(10);
+ Serial.println("I2S playback demo");
+
+ pinMode(USERBUTTON, INPUT_PULLUP);
+}
+
+void loop() {
+ // on button press tell the other core to play audio clip!
+ if (!digitalRead(USERBUTTON)) {
+ playaudio = true;
+ } else {
+ playaudio = false;
+ }
+}
+
+void setup1() {
+ i2s.setBCLK(pBCLK);
+ i2s.setDATA(pDOUT);
+ i2s.setBitsPerSample(16);
+}
+
+void loop1() {
+ // the main loop will tell us when it wants us to play!
+ if (playaudio) {
+ play_i2s(startupAudioData, sizeof(startupAudioData), startupSampleRate);
+ }
+}
+
+void play_i2s(const uint8_t *data, uint32_t len, uint32_t rate) {
+ // start I2S at the sample rate with 16-bits per sample
+ if (!i2s.begin(rate)) {
+ Serial.println("Failed to initialize I2S!");
+ delay(500);
+ i2s.end();
+ return;
+ }
+
+ for(uint32_t i=0; i
+
+
+ bool setBCLK(pin_size_t pin);
+ - This assigns two adjacent pins - the pin after this one (one greater)
+ is the WS (word select) signal, which toggles before the sample for
+ each channel is sent
+
+ bool setDATA(pin_size_t pin);
+ - Sets the DOUT pin, can be any valid GPIO pin
+*/
+
+#include
+
+// Create the I2S port using a PIO state machine
+I2S i2s(OUTPUT);
+
+// GPIO pin numbers
+#define pBCLK A2 // QT Py BFF default BITCLOCK
+#define pWS A1 // QT Py BFF default LRCLOCK
+#define pDOUT A0 // QT Py BFF default DATA
+
+const int frequency = 440; // frequency of square wave in Hz
+const int amplitude = 500; // amplitude of square wave
+const int sampleRate = 16000; // 16 KHz is a good quality
+
+const int halfWavelength = (sampleRate / frequency); // half wavelength of square wave
+
+int16_t sample = amplitude; // current sample value
+int count = 0;
+
+void setup() {
+ Serial.begin(115200);
+ while (!Serial) delay(10);
+ Serial.println("I2S simple tone");
+
+ i2s.setBCLK(pBCLK);
+ i2s.setDATA(pDOUT);
+ i2s.setBitsPerSample(16);
+
+ // start I2S at the sample rate with 16-bits per sample
+ if (!i2s.begin(sampleRate)) {
+ Serial.println("Failed to initialize I2S!");
+ while (1); // do nothing
+ }
+
+}
+
+void loop() {
+ if (count % halfWavelength == 0) {
+ // invert the sample every half wavelength count multiple to generate square wave
+ sample = -1 * sample;
+ }
+
+ // write the same sample twice, once for left and once for the right channel
+ i2s.write(sample);
+ i2s.write(sample);
+
+ // increment the counter for the next sample
+ count++;
+}
diff --git a/Adafruit_I2S_BFF/CircuitPython/Tone/code.py b/Adafruit_I2S_BFF/CircuitPython/Tone/code.py
new file mode 100644
index 000000000..3ee8b8ed1
--- /dev/null
+++ b/Adafruit_I2S_BFF/CircuitPython/Tone/code.py
@@ -0,0 +1,28 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+TONE_VOLUME = 0.1 # Increase this to increase the volume of the tone.
+FREQUENCY = 440 # Set this to the Hz of the tone you want to generate.
+
+audio = audiobusio.I2SOut(board.A2, board.A1, board.A0)
+
+length = 8000 // FREQUENCY
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * TONE_VOLUME * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_I2S_BFF/CircuitPython/WAV/booploop.wav b/Adafruit_I2S_BFF/CircuitPython/WAV/booploop.wav
new file mode 100644
index 000000000..5c1503a54
Binary files /dev/null and b/Adafruit_I2S_BFF/CircuitPython/WAV/booploop.wav differ
diff --git a/Adafruit_I2S_BFF/CircuitPython/WAV/code.py b/Adafruit_I2S_BFF/CircuitPython/WAV/code.py
new file mode 100644
index 000000000..f6725b3c2
--- /dev/null
+++ b/Adafruit_I2S_BFF/CircuitPython/WAV/code.py
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+"""
+import audiocore
+import board
+import audiobusio
+
+LOOP = False # Update to True loop WAV playback. False plays once.
+
+audio = audiobusio.I2SOut(board.A2, board.A1, board.A0)
+
+with open("chikken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav, loop=LOOP)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_IO_Power_Relay/code_light_sensor/code.py b/Adafruit_IO_Power_Relay/code_light_sensor/code.py
index fd321bc09..f21e930e6 100755
--- a/Adafruit_IO_Power_Relay/code_light_sensor/code.py
+++ b/Adafruit_IO_Power_Relay/code_light_sensor/code.py
@@ -61,7 +61,8 @@
power_pin.switch_to_output()
# Set up the light sensor
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
sensor = adafruit_bh1750.BH1750(i2c)
### Feeds ###
diff --git a/Adafruit_Metro_ESP32-S3/Capacitive_Touch/One_Pin/code.py b/Adafruit_Metro_ESP32-S3/Capacitive_Touch/One_Pin/code.py
new file mode 100644
index 000000000..e0b60dce2
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/Capacitive_Touch/One_Pin/code.py
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Capacitive Touch Pin Example - Print to the serial console when one pin is touched.
+"""
+import time
+import board
+import touchio
+
+touch = touchio.TouchIn(board.A0)
+
+while True:
+ if touch.value:
+ print("Pin touched!")
+ time.sleep(0.1)
diff --git a/Adafruit_Metro_ESP32-S3/Capacitive_Touch/Two_Pins/code.py b/Adafruit_Metro_ESP32-S3/Capacitive_Touch/Two_Pins/code.py
new file mode 100644
index 000000000..5b5a97945
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/Capacitive_Touch/Two_Pins/code.py
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Capacitive Two Touch Pin Example - Print to the serial console when a pin is touched.
+"""
+import time
+import board
+import touchio
+
+touch_one = touchio.TouchIn(board.A0)
+touch_two = touchio.TouchIn(board.A5)
+
+while True:
+ if touch_one.value:
+ print("Pin one touched!")
+ if touch_two.value:
+ print("Pin two touched!")
+ time.sleep(0.1)
diff --git a/Adafruit_Metro_ESP32-S3/Digital_Input/code.py b/Adafruit_Metro_ESP32-S3/Digital_Input/code.py
new file mode 100644
index 000000000..90392739b
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/Digital_Input/code.py
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Digital Input Example - Blinking an LED using a button switch.
+"""
+import board
+import digitalio
+
+led = digitalio.DigitalInOut(board.LED)
+led.direction = digitalio.Direction.OUTPUT
+
+button = digitalio.DigitalInOut(board.A0)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+while True:
+ if not button.value:
+ led.value = True
+ else:
+ led.value = False
diff --git a/Adafruit_Metro_ESP32-S3/I2S/Tone_Playback/code.py b/Adafruit_Metro_ESP32-S3/I2S/Tone_Playback/code.py
new file mode 100644
index 000000000..55527b22b
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/I2S/Tone_Playback/code.py
@@ -0,0 +1,29 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Metro_ESP32-S3/I2S/WAV_Playback/StreetChicken.wav b/Adafruit_Metro_ESP32-S3/I2S/WAV_Playback/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Metro_ESP32-S3/I2S/WAV_Playback/StreetChicken.wav differ
diff --git a/Adafruit_Metro_ESP32-S3/I2S/WAV_Playback/code.py b/Adafruit_Metro_ESP32-S3/I2S/WAV_Playback/code.py
new file mode 100644
index 000000000..9a8e429ea
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/I2S/WAV_Playback/code.py
@@ -0,0 +1,21 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+Plays a WAV file once.
+"""
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Metro_ESP32-S3/SDCard/SD_Read/code.py b/Adafruit_Metro_ESP32-S3/SDCard/SD_Read/code.py
new file mode 100644
index 000000000..09a5ebd6e
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/SDCard/SD_Read/code.py
@@ -0,0 +1,52 @@
+# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""CircuitPython Essentials SD Card Read Demo"""
+
+import os
+import digitalio
+import board
+import storage
+import adafruit_sdcard
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.SD_CS
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+# This helper function will print the contents of the SD
+def print_directory(path, tabs=0):
+ for file in os.listdir(path):
+ stats = os.stat(path + "/" + file)
+ filesize = stats[6]
+ isdir = stats[0] & 0x4000
+
+ if filesize < 1000:
+ sizestr = str(filesize) + " bytes"
+ elif filesize < 1000000:
+ sizestr = "%0.1f KB" % (filesize / 1000)
+ else:
+ sizestr = "%0.1f MB" % (filesize / 1000000)
+
+ prettyprintname = ""
+ for _ in range(tabs):
+ prettyprintname += " "
+ prettyprintname += file
+ if isdir:
+ prettyprintname += "/"
+ print("{0:<40} Size: {1:>10}".format(prettyprintname, sizestr))
+
+ # recursively print directory contents
+ if isdir:
+ print_directory(path + "/" + file, tabs + 1)
+
+
+print("Files on filesystem:")
+print("====================")
+print_directory("/sd")
diff --git a/Adafruit_Metro_ESP32-S3/SDCard/SD_Write/code.py b/Adafruit_Metro_ESP32-S3/SDCard/SD_Write/code.py
new file mode 100644
index 000000000..cfc883039
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/SDCard/SD_Write/code.py
@@ -0,0 +1,36 @@
+# SPDX-FileCopyrightText: 2017 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Essentials SD Card Write Demo
+"""
+
+import time
+import adafruit_sdcard
+import board
+import digitalio
+import microcontroller
+import storage
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.SD_CS
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+print("Logging temperature to filesystem")
+# append to the file!
+while True:
+ # open file for append
+ with open("/sd/temperature.txt", "a") as f:
+ t = microcontroller.cpu.temperature
+ print("Temperature = %0.1f" % t)
+ f.write("%0.1f\n" % t)
+ # file is saved
+ time.sleep(1)
diff --git a/Adafruit_Metro_ESP32-S3/Storage/boot.py b/Adafruit_Metro_ESP32-S3/Storage/boot.py
new file mode 100644
index 000000000..48c2f3495
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/Storage/boot.py
@@ -0,0 +1,14 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Essentials Storage CP Filesystem boot.py file
+"""
+import board
+import digitalio
+import storage
+
+pin = digitalio.DigitalInOut(board.A0)
+pin.switch_to_input(pull=digitalio.Pull.UP)
+
+# If the pin is connected to ground, the filesystem is writable by CircuitPython
+storage.remount("/", readonly=pin.value)
diff --git a/Adafruit_Metro_ESP32-S3/Storage/code.py b/Adafruit_Metro_ESP32-S3/Storage/code.py
new file mode 100644
index 000000000..9f9a8f5be
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/Storage/code.py
@@ -0,0 +1,39 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Essentials Storage CP Filesystem code.py file
+
+For use with boards with a built-in red LED.
+"""
+import time
+import board
+import digitalio
+import microcontroller
+
+led = digitalio.DigitalInOut(board.LED)
+led.switch_to_output()
+
+try:
+ with open("/temperature.txt", "a") as temp_log:
+ while True:
+ # The microcontroller temperature in Celsius. Include the
+ # math to do the C to F conversion here, if desired.
+ temperature = microcontroller.cpu.temperature
+
+ # Write the temperature to the temperature.txt file every 10 seconds.
+ temp_log.write('{0:.2f}\n'.format(temperature))
+ temp_log.flush()
+
+ # Blink the LED on every write...
+ led.value = True
+ time.sleep(1) # ...for one second.
+ led.value = False # Then turn it off...
+ time.sleep(9) # ...for the other 9 seconds.
+
+except OSError as e: # When the filesystem is NOT writable by CircuitPython...
+ delay = 0.5 # ...blink the LED every half second.
+ if e.args[0] == 28: # If the file system is full...
+ delay = 0.15 # ...blink the LED every 0.15 seconds!
+ while True:
+ led.value = not led.value
+ time.sleep(delay)
diff --git a/Adafruit_Metro_ESP32-S3/analog_in/analog_value/code.py b/Adafruit_Metro_ESP32-S3/analog_in/analog_value/code.py
new file mode 100644
index 000000000..aa1b97d3e
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/analog_in/analog_value/code.py
@@ -0,0 +1,12 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""CircuitPython analog pin value example"""
+import time
+import board
+import analogio
+
+analog_pin = analogio.AnalogIn(board.D3)
+
+while True:
+ print(analog_pin.value)
+ time.sleep(0.1)
diff --git a/Adafruit_Metro_ESP32-S3/analog_in/get_voltage/code.py b/Adafruit_Metro_ESP32-S3/analog_in/get_voltage/code.py
new file mode 100644
index 000000000..cf06a8404
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/analog_in/get_voltage/code.py
@@ -0,0 +1,17 @@
+# SPDX-FileCopyrightText: 2022 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""CircuitPython Analog In Voltage Example for ESP32-S2"""
+import time
+import board
+import analogio
+
+analog_pin = analogio.AnalogIn(board.D3)
+
+
+def get_voltage(pin):
+ return (pin.value * 2.57) / 51000
+
+
+while True:
+ print(get_voltage(analog_pin))
+ time.sleep(0.1)
diff --git a/Adafruit_Metro_ESP32-S3/asyncio/code.py b/Adafruit_Metro_ESP32-S3/asyncio/code.py
new file mode 100644
index 000000000..c240e6335
--- /dev/null
+++ b/Adafruit_Metro_ESP32-S3/asyncio/code.py
@@ -0,0 +1,80 @@
+# SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries
+# SPDX-FileCopyrightText: Copyright (c) 2022 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython asyncio example for two NeoPixel rings and one button.
+"""
+import asyncio
+import board
+import neopixel
+import keypad
+from rainbowio import colorwheel
+
+button_pin = board.A0 # The pin the button is connected to.
+num_pixels = 16 # The number of NeoPixels on a single ring.
+brightness = 0.2 # The LED brightness.
+
+# Set up NeoPixel rings.
+ring_one = neopixel.NeoPixel(board.A1, num_pixels, brightness=brightness, auto_write=False)
+ring_two = neopixel.NeoPixel(board.A2, num_pixels, brightness=brightness, auto_write=False)
+
+
+class AnimationControls:
+ """The controls to allow you to vary the rainbow and blink animations."""
+ def __init__(self):
+ self.reverse = False
+ self.wait = 0.0
+ self.delay = 0.5
+
+
+async def rainbow_cycle(controls):
+ """Rainbow cycle animation on ring one."""
+ while True:
+ for j in range(255, -1, -1) if controls.reverse else range(0, 256, 1):
+ for i in range(num_pixels):
+ rc_index = (i * 256 // num_pixels) + j
+ ring_one[i] = colorwheel(rc_index & 255)
+ ring_one.show()
+ await asyncio.sleep(controls.wait)
+
+
+async def blink(controls):
+ """Blink animation on ring two."""
+ while True:
+ ring_two.fill((0, 0, 255))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ ring_two.fill((0, 0, 0))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ await asyncio.sleep(controls.wait)
+
+
+async def monitor_button(button, controls):
+ """Monitor button that reverses rainbow direction and changes blink speed.
+ Assume button is active low.
+ """
+ with keypad.Keys((button,), value_when_pressed=False, pull=True) as key:
+ while True:
+ key_event = key.events.get()
+ if key_event:
+ if key_event.pressed:
+ controls.reverse = True
+ controls.delay = 0.1
+ elif key_event.released:
+ controls.reverse = False
+ controls.delay = 0.5
+ await asyncio.sleep(0)
+
+
+async def main():
+ animation_controls = AnimationControls()
+ button_task = asyncio.create_task(monitor_button(button_pin, animation_controls))
+ animation_task = asyncio.create_task(rainbow_cycle(animation_controls))
+ blink_task = asyncio.create_task(blink(animation_controls))
+
+ # This will run forever, because no tasks ever finish.
+ await asyncio.gather(button_task, animation_task, blink_task)
+
+asyncio.run(main())
diff --git a/Adafruit_Metro_M7_SD/I2S/Tone/code.py b/Adafruit_Metro_M7_SD/I2S/Tone/code.py
new file mode 100644
index 000000000..61cd92426
--- /dev/null
+++ b/Adafruit_Metro_M7_SD/I2S/Tone/code.py
@@ -0,0 +1,29 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.D10, board.D9, board.D12)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Metro_M7_SD/I2S/WAV/StreetChicken.wav b/Adafruit_Metro_M7_SD/I2S/WAV/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Metro_M7_SD/I2S/WAV/StreetChicken.wav differ
diff --git a/Adafruit_Metro_M7_SD/I2S/WAV/code.py b/Adafruit_Metro_M7_SD/I2S/WAV/code.py
new file mode 100644
index 000000000..9fff8e3b6
--- /dev/null
+++ b/Adafruit_Metro_M7_SD/I2S/WAV/code.py
@@ -0,0 +1,21 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+Plays a WAV file once.
+"""
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.D10, board.D9, board.D12)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Metro_M7_SD/PWM_Audio/Tone/code.py b/Adafruit_Metro_M7_SD/PWM_Audio/Tone/code.py
new file mode 100644
index 000000000..1fa2abceb
--- /dev/null
+++ b/Adafruit_Metro_M7_SD/PWM_Audio/Tone/code.py
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out tone example
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import board
+from audiocore import RawSample
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.A1)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("H", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((1 + math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+
+sine_wave_sample = RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Metro_M7_SD/PWM_Audio/WAV/StreetChicken.wav b/Adafruit_Metro_M7_SD/PWM_Audio/WAV/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Metro_M7_SD/PWM_Audio/WAV/StreetChicken.wav differ
diff --git a/Adafruit_Metro_M7_SD/PWM_Audio/WAV/code.py b/Adafruit_Metro_M7_SD/PWM_Audio/WAV/code.py
new file mode 100644
index 000000000..9892ce94d
--- /dev/null
+++ b/Adafruit_Metro_M7_SD/PWM_Audio/WAV/code.py
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out WAV example
+Play a WAV file once.
+"""
+import board
+from audiocore import WaveFile
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.A1)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wave = WaveFile(wave_file)
+ print("Playing wav file!")
+ audio.play(wave)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Metro_M7_SD/SD_Card/SD_Read/code.py b/Adafruit_Metro_M7_SD/SD_Card/SD_Read/code.py
new file mode 100644
index 000000000..301658eb7
--- /dev/null
+++ b/Adafruit_Metro_M7_SD/SD_Card/SD_Read/code.py
@@ -0,0 +1,54 @@
+# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Essentials SD Card Read Demo
+"""
+
+import os
+import digitalio
+import board
+import storage
+import adafruit_sdcard
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.SD_CS
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+# This helper function will print the contents of the SD
+def print_directory(path, tabs=0):
+ for file in os.listdir(path):
+ stats = os.stat(path + "/" + file)
+ filesize = stats[6]
+ isdir = stats[0] & 0x4000
+
+ if filesize < 1000:
+ sizestr = str(filesize) + " bytes"
+ elif filesize < 1000000:
+ sizestr = "%0.1f KB" % (filesize / 1000)
+ else:
+ sizestr = "%0.1f MB" % (filesize / 1000000)
+
+ prettyprintname = ""
+ for _ in range(tabs):
+ prettyprintname += " "
+ prettyprintname += file
+ if isdir:
+ prettyprintname += "/"
+ print("{0:<40} Size: {1:>10}".format(prettyprintname, sizestr))
+
+ # recursively print directory contents
+ if isdir:
+ print_directory(path + "/" + file, tabs + 1)
+
+
+print("Files on filesystem:")
+print("====================")
+print_directory("/sd")
diff --git a/Adafruit_Metro_M7_SD/SD_Card/SD_Write/code.py b/Adafruit_Metro_M7_SD/SD_Card/SD_Write/code.py
new file mode 100644
index 000000000..cfc883039
--- /dev/null
+++ b/Adafruit_Metro_M7_SD/SD_Card/SD_Write/code.py
@@ -0,0 +1,36 @@
+# SPDX-FileCopyrightText: 2017 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Essentials SD Card Write Demo
+"""
+
+import time
+import adafruit_sdcard
+import board
+import digitalio
+import microcontroller
+import storage
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.SD_CS
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+print("Logging temperature to filesystem")
+# append to the file!
+while True:
+ # open file for append
+ with open("/sd/temperature.txt", "a") as f:
+ t = microcontroller.cpu.temperature
+ print("Temperature = %0.1f" % t)
+ f.write("%0.1f\n" % t)
+ # file is saved
+ time.sleep(1)
diff --git a/Adafruit_Metro_M7_SD/digital_input/code.py b/Adafruit_Metro_M7_SD/digital_input/code.py
new file mode 100644
index 000000000..90392739b
--- /dev/null
+++ b/Adafruit_Metro_M7_SD/digital_input/code.py
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Digital Input Example - Blinking an LED using a button switch.
+"""
+import board
+import digitalio
+
+led = digitalio.DigitalInOut(board.LED)
+led.direction = digitalio.Direction.OUTPUT
+
+button = digitalio.DigitalInOut(board.A0)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+while True:
+ if not button.value:
+ led.value = True
+ else:
+ led.value = False
diff --git a/MagTag_Webb_Telescope_Status/deprecated_original_version/.circuitpython.skip-screenshot b/Adafruit_Metro_RP2040/Arduino/Metro_RP2040_SD_Card_Test/.feather_rp2040.test.only
similarity index 100%
rename from MagTag_Webb_Telescope_Status/deprecated_original_version/.circuitpython.skip-screenshot
rename to Adafruit_Metro_RP2040/Arduino/Metro_RP2040_SD_Card_Test/.feather_rp2040.test.only
diff --git a/Adafruit_Metro_RP2040/Arduino/Metro_RP2040_SD_Card_Test/Metro_RP2040_SD_Card_Test.ino b/Adafruit_Metro_RP2040/Arduino/Metro_RP2040_SD_Card_Test/Metro_RP2040_SD_Card_Test.ino
new file mode 100644
index 000000000..fc55f8d92
--- /dev/null
+++ b/Adafruit_Metro_RP2040/Arduino/Metro_RP2040_SD_Card_Test/Metro_RP2040_SD_Card_Test.ino
@@ -0,0 +1,87 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+/*
+ SD card read/write
+
+ This example shows how to read and write data to and from an SD card file
+ The circuit:
+ * SD card attached to SPI0 bus as follows:
+ ** MOSI - pin 19
+ ** MISO - pin 20
+ ** CLK - pin 18
+
+ created Nov 2010
+ by David A. Mellis
+ modified 9 Apr 2012
+ by Tom Igoe
+ modified 14 Feb 2023
+ by Liz Clark
+
+ This example code is in the public domain.
+
+ */
+
+#include "SdFat.h"
+SdFat sd;
+
+#define SD_FAT_TYPE 1
+
+// default CS pin is 23 for Metro RP2040
+#define SD_CS_PIN 23
+
+File32 myFile;
+
+void setup() {
+ // Open serial communications and wait for port to open:
+ Serial.begin(115200);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+
+
+ Serial.print("Initializing SD card...");
+
+ if (!sd.begin(SD_CS_PIN)) {
+ Serial.println("initialization failed!");
+ return;
+ }
+ Serial.println("initialization done.");
+
+ // open the file. note that only one file can be open at a time,
+ // so you have to close this one before opening another.
+ myFile.open("test.txt", FILE_WRITE);
+
+ // if the file opened okay, write to it:
+ if (myFile) {
+ Serial.print("Writing to test.txt...");
+ myFile.println("testing 1, 2, 3.");
+ myFile.println("hello metro rp2040!");
+ // close the file:
+ myFile.close();
+ Serial.println("done.");
+ } else {
+ // if the file didn't open, print an error:
+ Serial.println("error opening test.txt");
+ }
+
+ // re-open the file for reading:
+ myFile.open("test.txt");
+ if (myFile) {
+ Serial.println("test.txt:");
+
+ // read from the file until there's nothing else in it:
+ while (myFile.available()) {
+ Serial.write(myFile.read());
+ }
+ // close the file:
+ myFile.close();
+ } else {
+ // if the file didn't open, print an error:
+ Serial.println("error opening test.txt");
+ }
+}
+
+void loop() {
+ // nothing happens after setup
+}
diff --git a/Adafruit_Metro_RP2040/Capacitive_Touch/One_Pin/code.py b/Adafruit_Metro_RP2040/Capacitive_Touch/One_Pin/code.py
new file mode 100644
index 000000000..5415f0bbc
--- /dev/null
+++ b/Adafruit_Metro_RP2040/Capacitive_Touch/One_Pin/code.py
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Capacitive Touch Pin Example - Print to the serial console when one pin is touched.
+"""
+import time
+import board
+import touchio
+
+touch = touchio.TouchIn(board.A1)
+
+while True:
+ if touch.value:
+ print("Pin touched!")
+ time.sleep(0.1)
diff --git a/Adafruit_Metro_RP2040/Capacitive_Touch/Two_Pins/code.py b/Adafruit_Metro_RP2040/Capacitive_Touch/Two_Pins/code.py
new file mode 100644
index 000000000..397c3635c
--- /dev/null
+++ b/Adafruit_Metro_RP2040/Capacitive_Touch/Two_Pins/code.py
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Capacitive Two Touch Pin Example - Print to the serial console when a pin is touched.
+"""
+import time
+import board
+import touchio
+
+touch_one = touchio.TouchIn(board.A1)
+touch_two = touchio.TouchIn(board.A2)
+
+while True:
+ if touch_one.value:
+ print("Pin one touched!")
+ if touch_two.value:
+ print("Pin two touched!")
+ time.sleep(0.1)
diff --git a/Adafruit_Metro_RP2040/Digital_Input/code.py b/Adafruit_Metro_RP2040/Digital_Input/code.py
new file mode 100644
index 000000000..46548f90f
--- /dev/null
+++ b/Adafruit_Metro_RP2040/Digital_Input/code.py
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Digital Input Example - Blinking an LED using a button switch.
+"""
+import board
+import digitalio
+
+led = digitalio.DigitalInOut(board.LED)
+led.direction = digitalio.Direction.OUTPUT
+
+button = digitalio.DigitalInOut(board.A1)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+while True:
+ if not button.value:
+ led.value = True
+ else:
+ led.value = False
diff --git a/Adafruit_Metro_RP2040/I2S/Tone/code.py b/Adafruit_Metro_RP2040/I2S/Tone/code.py
new file mode 100644
index 000000000..55527b22b
--- /dev/null
+++ b/Adafruit_Metro_RP2040/I2S/Tone/code.py
@@ -0,0 +1,29 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Metro_RP2040/I2S/WAV/StreetChicken.wav b/Adafruit_Metro_RP2040/I2S/WAV/StreetChicken.wav
new file mode 100755
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Metro_RP2040/I2S/WAV/StreetChicken.wav differ
diff --git a/Adafruit_Metro_RP2040/I2S/WAV/code.py b/Adafruit_Metro_RP2040/I2S/WAV/code.py
new file mode 100644
index 000000000..9a8e429ea
--- /dev/null
+++ b/Adafruit_Metro_RP2040/I2S/WAV/code.py
@@ -0,0 +1,21 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+Plays a WAV file once.
+"""
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.A0, board.A1, board.A2)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Metro_RP2040/PWM_Audio/Tone/code.py b/Adafruit_Metro_RP2040/PWM_Audio/Tone/code.py
new file mode 100644
index 000000000..2f8d309f2
--- /dev/null
+++ b/Adafruit_Metro_RP2040/PWM_Audio/Tone/code.py
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out tone example
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import board
+from audiocore import RawSample
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.A0)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("H", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((1 + math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+
+sine_wave_sample = RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Adafruit_Metro_RP2040/PWM_Audio/WAV/StreetChicken.wav b/Adafruit_Metro_RP2040/PWM_Audio/WAV/StreetChicken.wav
new file mode 100755
index 000000000..55d4eb0f2
Binary files /dev/null and b/Adafruit_Metro_RP2040/PWM_Audio/WAV/StreetChicken.wav differ
diff --git a/Adafruit_Metro_RP2040/PWM_Audio/WAV/code.py b/Adafruit_Metro_RP2040/PWM_Audio/WAV/code.py
new file mode 100644
index 000000000..f714ac868
--- /dev/null
+++ b/Adafruit_Metro_RP2040/PWM_Audio/WAV/code.py
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out WAV example
+Play a WAV file once.
+"""
+import board
+from audiocore import WaveFile
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.A0)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wave = WaveFile(wave_file)
+ print("Playing wav file!")
+ audio.play(wave)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Adafruit_Metro_RP2040/SD_Read/code.py b/Adafruit_Metro_RP2040/SD_Read/code.py
new file mode 100644
index 000000000..301658eb7
--- /dev/null
+++ b/Adafruit_Metro_RP2040/SD_Read/code.py
@@ -0,0 +1,54 @@
+# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Essentials SD Card Read Demo
+"""
+
+import os
+import digitalio
+import board
+import storage
+import adafruit_sdcard
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.SD_CS
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+# This helper function will print the contents of the SD
+def print_directory(path, tabs=0):
+ for file in os.listdir(path):
+ stats = os.stat(path + "/" + file)
+ filesize = stats[6]
+ isdir = stats[0] & 0x4000
+
+ if filesize < 1000:
+ sizestr = str(filesize) + " bytes"
+ elif filesize < 1000000:
+ sizestr = "%0.1f KB" % (filesize / 1000)
+ else:
+ sizestr = "%0.1f MB" % (filesize / 1000000)
+
+ prettyprintname = ""
+ for _ in range(tabs):
+ prettyprintname += " "
+ prettyprintname += file
+ if isdir:
+ prettyprintname += "/"
+ print("{0:<40} Size: {1:>10}".format(prettyprintname, sizestr))
+
+ # recursively print directory contents
+ if isdir:
+ print_directory(path + "/" + file, tabs + 1)
+
+
+print("Files on filesystem:")
+print("====================")
+print_directory("/sd")
diff --git a/Adafruit_Metro_RP2040/SD_Write/code.py b/Adafruit_Metro_RP2040/SD_Write/code.py
new file mode 100644
index 000000000..bdf69f856
--- /dev/null
+++ b/Adafruit_Metro_RP2040/SD_Write/code.py
@@ -0,0 +1,35 @@
+# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Essentials SD Card Write Demo
+"""
+
+import time
+import adafruit_sdcard
+import board
+import digitalio
+import microcontroller
+import storage
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.SD_CS
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+print("Logging temperature to filesystem")
+# append to the file!
+while True:
+ # open file for append
+ with open("/sd/temperature.txt", "a") as f:
+ t = microcontroller.cpu.temperature
+ print("Temperature = %0.1f" % t)
+ f.write("%0.1f\n" % t)
+ # file is saved
+ time.sleep(1)
diff --git a/Adafruit_Metro_RP2040/Storage/boot.py b/Adafruit_Metro_RP2040/Storage/boot.py
new file mode 100644
index 000000000..48c2f3495
--- /dev/null
+++ b/Adafruit_Metro_RP2040/Storage/boot.py
@@ -0,0 +1,14 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Essentials Storage CP Filesystem boot.py file
+"""
+import board
+import digitalio
+import storage
+
+pin = digitalio.DigitalInOut(board.A0)
+pin.switch_to_input(pull=digitalio.Pull.UP)
+
+# If the pin is connected to ground, the filesystem is writable by CircuitPython
+storage.remount("/", readonly=pin.value)
diff --git a/Adafruit_Metro_RP2040/Storage/code.py b/Adafruit_Metro_RP2040/Storage/code.py
new file mode 100644
index 000000000..9f9a8f5be
--- /dev/null
+++ b/Adafruit_Metro_RP2040/Storage/code.py
@@ -0,0 +1,39 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Essentials Storage CP Filesystem code.py file
+
+For use with boards with a built-in red LED.
+"""
+import time
+import board
+import digitalio
+import microcontroller
+
+led = digitalio.DigitalInOut(board.LED)
+led.switch_to_output()
+
+try:
+ with open("/temperature.txt", "a") as temp_log:
+ while True:
+ # The microcontroller temperature in Celsius. Include the
+ # math to do the C to F conversion here, if desired.
+ temperature = microcontroller.cpu.temperature
+
+ # Write the temperature to the temperature.txt file every 10 seconds.
+ temp_log.write('{0:.2f}\n'.format(temperature))
+ temp_log.flush()
+
+ # Blink the LED on every write...
+ led.value = True
+ time.sleep(1) # ...for one second.
+ led.value = False # Then turn it off...
+ time.sleep(9) # ...for the other 9 seconds.
+
+except OSError as e: # When the filesystem is NOT writable by CircuitPython...
+ delay = 0.5 # ...blink the LED every half second.
+ if e.args[0] == 28: # If the file system is full...
+ delay = 0.15 # ...blink the LED every 0.15 seconds!
+ while True:
+ led.value = not led.value
+ time.sleep(delay)
diff --git a/Adafruit_Metro_RP2040/asyncio/code.py b/Adafruit_Metro_RP2040/asyncio/code.py
new file mode 100644
index 000000000..c240e6335
--- /dev/null
+++ b/Adafruit_Metro_RP2040/asyncio/code.py
@@ -0,0 +1,80 @@
+# SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries
+# SPDX-FileCopyrightText: Copyright (c) 2022 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython asyncio example for two NeoPixel rings and one button.
+"""
+import asyncio
+import board
+import neopixel
+import keypad
+from rainbowio import colorwheel
+
+button_pin = board.A0 # The pin the button is connected to.
+num_pixels = 16 # The number of NeoPixels on a single ring.
+brightness = 0.2 # The LED brightness.
+
+# Set up NeoPixel rings.
+ring_one = neopixel.NeoPixel(board.A1, num_pixels, brightness=brightness, auto_write=False)
+ring_two = neopixel.NeoPixel(board.A2, num_pixels, brightness=brightness, auto_write=False)
+
+
+class AnimationControls:
+ """The controls to allow you to vary the rainbow and blink animations."""
+ def __init__(self):
+ self.reverse = False
+ self.wait = 0.0
+ self.delay = 0.5
+
+
+async def rainbow_cycle(controls):
+ """Rainbow cycle animation on ring one."""
+ while True:
+ for j in range(255, -1, -1) if controls.reverse else range(0, 256, 1):
+ for i in range(num_pixels):
+ rc_index = (i * 256 // num_pixels) + j
+ ring_one[i] = colorwheel(rc_index & 255)
+ ring_one.show()
+ await asyncio.sleep(controls.wait)
+
+
+async def blink(controls):
+ """Blink animation on ring two."""
+ while True:
+ ring_two.fill((0, 0, 255))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ ring_two.fill((0, 0, 0))
+ ring_two.show()
+ await asyncio.sleep(controls.delay)
+ await asyncio.sleep(controls.wait)
+
+
+async def monitor_button(button, controls):
+ """Monitor button that reverses rainbow direction and changes blink speed.
+ Assume button is active low.
+ """
+ with keypad.Keys((button,), value_when_pressed=False, pull=True) as key:
+ while True:
+ key_event = key.events.get()
+ if key_event:
+ if key_event.pressed:
+ controls.reverse = True
+ controls.delay = 0.1
+ elif key_event.released:
+ controls.reverse = False
+ controls.delay = 0.5
+ await asyncio.sleep(0)
+
+
+async def main():
+ animation_controls = AnimationControls()
+ button_task = asyncio.create_task(monitor_button(button_pin, animation_controls))
+ animation_task = asyncio.create_task(rainbow_cycle(animation_controls))
+ blink_task = asyncio.create_task(blink(animation_controls))
+
+ # This will run forever, because no tasks ever finish.
+ await asyncio.gather(button_task, animation_task, blink_task)
+
+asyncio.run(main())
diff --git a/Adafruit_NeoSlider/CircuitPython_Rainbow_Slider/code.py b/Adafruit_NeoSlider/CircuitPython_Rainbow_Slider/code.py
index 49c35b8ba..ba1a2c0e3 100644
--- a/Adafruit_NeoSlider/CircuitPython_Rainbow_Slider/code.py
+++ b/Adafruit_NeoSlider/CircuitPython_Rainbow_Slider/code.py
@@ -10,7 +10,9 @@
from adafruit_seesaw import neopixel
# NeoSlider Setup
-neoslider = Seesaw(board.I2C(), 0x30)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+neoslider = Seesaw(i2c, 0x30)
potentiometer = AnalogInput(neoslider, 18)
pixels = neopixel.NeoPixel(neoslider, 14, 4, pixel_order=neopixel.GRB)
diff --git a/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_3W_LED_Simpletest/code.py b/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_3W_LED_Simpletest/code.py
index dd7f76013..a43fbb427 100755
--- a/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_3W_LED_Simpletest/code.py
+++ b/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_3W_LED_Simpletest/code.py
@@ -1,17 +1,30 @@
-# SPDX-FileCopyrightText: 2019 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2019, 2023 Kattni Rembor for Adafruit Industries
#
# SPDX-License-Identifier: MIT
"""Simple rainbow swirl example for 3W LED"""
+import time
import pwmio
import board
-from rainbowio import colorwheel
import digitalio
enable = digitalio.DigitalInOut(board.D10)
enable.direction = digitalio.Direction.OUTPUT
enable.value = True
+
+def colorwheel(pos):
+ if pos < 0 or pos > 255:
+ return 0, 0, 0
+ if pos < 85:
+ return int(255 - pos * 3), int(pos * 3), 0
+ if pos < 170:
+ pos -= 85
+ return 0, int(255 - pos * 3), int(pos * 3)
+ pos -= 170
+ return int(pos * 3), 0, int(255 - pos * 3)
+
+
red = pwmio.PWMOut(board.D11, duty_cycle=0, frequency=20000)
green = pwmio.PWMOut(board.D12, duty_cycle=0, frequency=20000)
blue = pwmio.PWMOut(board.D13, duty_cycle=0, frequency=20000)
@@ -22,3 +35,4 @@
red.duty_cycle = int(r * 65536 / 256)
green.duty_cycle = int(g * 65536 / 256)
blue.duty_cycle = int(b * 65536 / 256)
+ time.sleep(0.05)
diff --git a/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_Audio_Simpletest/code.py b/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_Audio_Simpletest/code.py
index cc8780c2c..c36c36676 100755
--- a/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_Audio_Simpletest/code.py
+++ b/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_Audio_Simpletest/code.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: 2019 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2019, 2023 Kattni Rembor for Adafruit Industries
#
# SPDX-License-Identifier: MIT
@@ -6,16 +6,23 @@
# This example only works on Feathers that have analog audio out!
import digitalio
import board
-import audioio
import audiocore
+try:
+ from audioio import AudioOut
+except ImportError:
+ try:
+ from audiopwmio import PWMAudioOut as AudioOut
+ except ImportError:
+ pass # not always supported by every board!
+
WAV_FILE_NAME = "StreetChicken.wav" # Change to the name of your wav file!
enable = digitalio.DigitalInOut(board.D10)
enable.direction = digitalio.Direction.OUTPUT
enable.value = True
-with audioio.AudioOut(board.A0) as audio: # Speaker connector
+with AudioOut(board.A0) as audio: # Speaker connector
wave_file = open(WAV_FILE_NAME, "rb")
wave = audiocore.WaveFile(wave_file)
diff --git a/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_LED_Simpletest/Prop_Maker_LED_Simpletest.ino b/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_LED_Simpletest/Prop_Maker_LED_Simpletest.ino
index 721e3d2ea..20de27216 100644
--- a/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_LED_Simpletest/Prop_Maker_LED_Simpletest.ino
+++ b/Adafruit_Prop_Maker_FeatherWing/Prop_Maker_LED_Simpletest/Prop_Maker_LED_Simpletest.ino
@@ -62,6 +62,10 @@
uint8_t i=0;
+uint8_t red_out = RED_LED;
+uint8_t green_out = GREEN_LED;
+uint8_t blue_out = BLUE_LED;
+
void setup() {
Serial.begin(115200);
Serial.println("\nProp-Maker Wing: LED Example");
@@ -73,21 +77,32 @@ void setup() {
// Set up the LED Pins
#if defined(ESP32) // and ESP32-S2!
- ledcSetup(RED_LED, 5000, 8);
- ledcAttachPin(RED_PIN, RED_LED);
- ledcSetup(GREEN_LED, 5000, 8);
- ledcAttachPin(GREEN_PIN, GREEN_LED);
- ledcSetup(BLUE_LED, 5000, 8);
- ledcAttachPin(BLUE_PIN, BLUE_LED);
+ #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 1)
+ // newer LEDC API, use pins instead of channel
+ red_out = RED_PIN;
+ green_out = GREEN_PIN;
+ blue_out = BLUE_PIN;
+ ledcAttach(RED_PIN, 5000, 8);
+ ledcAttach(GREEN_PIN, 5000, 8);
+ ledcAttach(BLUE_PIN, 5000, 8);
+ #else
+ // older LEDC API, use channel, attach pin to channel
+ ledcSetup(RED_LED, 5000, 8);
+ ledcAttachPin(RED_PIN, RED_LED);
+ ledcSetup(GREEN_LED, 5000, 8);
+ ledcAttachPin(GREEN_PIN, GREEN_LED);
+ ledcSetup(BLUE_LED, 5000, 8);
+ ledcAttachPin(BLUE_PIN, BLUE_LED);
+ #endif
#else
- pinMode(RED_LED, OUTPUT);
- pinMode(GREEN_LED, OUTPUT);
- pinMode(BLUE_LED, OUTPUT);
+ pinMode(red_out, OUTPUT);
+ pinMode(green_out, OUTPUT);
+ pinMode(blue_out, OUTPUT);
#endif
- analogWrite(RED_LED, 0);
- analogWrite(GREEN_LED, 0);
- analogWrite(BLUE_LED, 0);
+ analogWrite(red_out, 0);
+ analogWrite(green_out, 0);
+ analogWrite(blue_out, 0);
}
uint32_t Color(uint8_t r, uint8_t g, uint8_t b) {
@@ -119,8 +134,8 @@ void loop()
digitalWrite(POWER_PIN, HIGH);
// write colors to the 3W LED
- analogWrite(RED_LED, red);
- analogWrite(GREEN_LED, green);
- analogWrite(BLUE_LED, blue);
+ analogWrite(red_out, red);
+ analogWrite(green_out, green);
+ analogWrite(blue_out, blue);
delay(2);
-}
+}
\ No newline at end of file
diff --git a/Adafruit_Proximity_Trinkey/NeoPixel_Brightness/code.py b/Adafruit_Proximity_Trinkey/NeoPixel_Brightness/code.py
index 397217ca7..adc3893cc 100644
--- a/Adafruit_Proximity_Trinkey/NeoPixel_Brightness/code.py
+++ b/Adafruit_Proximity_Trinkey/NeoPixel_Brightness/code.py
@@ -11,7 +11,9 @@
import neopixel
from adafruit_apds9960.apds9960 import APDS9960
-apds = APDS9960(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+apds = APDS9960(i2c)
pixels = neopixel.NeoPixel(board.NEOPIXEL, 2)
apds.enable_proximity = True
diff --git a/Adafruit_Proximity_Trinkey/Proximity_Spacebar_Game/code.py b/Adafruit_Proximity_Trinkey/Proximity_Spacebar_Game/code.py
index 39007cf43..f9a5b893f 100644
--- a/Adafruit_Proximity_Trinkey/Proximity_Spacebar_Game/code.py
+++ b/Adafruit_Proximity_Trinkey/Proximity_Spacebar_Game/code.py
@@ -14,7 +14,9 @@
import neopixel
from adafruit_apds9960.apds9960 import APDS9960
-apds = APDS9960(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+apds = APDS9960(i2c)
pixels = neopixel.NeoPixel(board.NEOPIXEL, 2)
keyboard = Keyboard(usb_hid.devices)
diff --git a/Adafruit_Proximity_Trinkey/Proximity_Trinkey_MIDI/code.py b/Adafruit_Proximity_Trinkey/Proximity_Trinkey_MIDI/code.py
index 62b8ed555..626728e18 100644
--- a/Adafruit_Proximity_Trinkey/Proximity_Trinkey_MIDI/code.py
+++ b/Adafruit_Proximity_Trinkey/Proximity_Trinkey_MIDI/code.py
@@ -16,7 +16,9 @@
from adafruit_apds9960.apds9960 import APDS9960
-apds = APDS9960(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+apds = APDS9960(i2c)
apds.enable_proximity = True
touch1 = touchio.TouchIn(board.TOUCH1)
diff --git a/Neotrellis_M4_Live_Launcher/.neotrellis_m4.test.only b/Adafruit_STEMMA_Audio_Amp/Arduino/PWMAudio_Mono_RP2040/.feather_rp2040.test.only
similarity index 100%
rename from Neotrellis_M4_Live_Launcher/.neotrellis_m4.test.only
rename to Adafruit_STEMMA_Audio_Amp/Arduino/PWMAudio_Mono_RP2040/.feather_rp2040.test.only
diff --git a/Adafruit_STEMMA_Audio_Amp/Arduino/PWMAudio_Mono_RP2040/PWMAudio_Mono_RP2040.ino b/Adafruit_STEMMA_Audio_Amp/Arduino/PWMAudio_Mono_RP2040/PWMAudio_Mono_RP2040.ino
new file mode 100644
index 000000000..349ddaacc
--- /dev/null
+++ b/Adafruit_STEMMA_Audio_Amp/Arduino/PWMAudio_Mono_RP2040/PWMAudio_Mono_RP2040.ino
@@ -0,0 +1,61 @@
+// SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+// SPDX-FileCopyrightText: Earle F. Philhower, III
+//
+// SPDX-License-Identifier: MIT
+
+/*
+ This example plays a tune through a mono amplifier using a simple sine wave.
+
+ Released to the public domain by Earle F. Philhower, III
+
+ Adapted from stereo original example 2023 by Kattni Rembor
+*/
+
+#include
+
+PWMAudio pwm(0, true); // GP0 = left, GP1 = right
+
+const int freq = 48000; // Output frequency for PWM
+
+int16_t mono = 0;
+
+const int notes[] = { 784, 880, 698, 349, 523 };
+const int dly[] = { 400, 500, 700, 500, 1000 };
+const int noteCnt = sizeof(notes) / sizeof(notes[0]);
+
+int freqMono = 1;
+
+double sineTable[128]; // Precompute sine wave in 128 steps
+
+unsigned int cnt = 0;
+void cb() {
+ while (pwm.availableForWrite()) {
+ double now = ((double)cnt) / (double)freq;
+ int freqScale = freqMono << 7; // Prescale by 128 to avoid FP math later on
+ pwm.write((int16_t)(mono * sineTable[(int)(now * freqScale) & 127]));
+ cnt++;
+ }
+}
+
+void setup() {
+ // Set up sine table for waveform generation
+ for (int i = 0; i < 128; i++) {
+ sineTable[i] = sin(i * 2.0 * 3.14159 / 128.0);
+ }
+ pwm.setBuffers(4, 32); // Give larger buffers since we're are 48khz sample rate
+ pwm.onTransmit(cb);
+ pwm.begin(freq);
+}
+
+void loop() {
+ delay(1000);
+ mono = 0;
+ Serial.println("loop");
+ for (int i = 0; i < noteCnt; i++) {
+ freqMono = notes[i];
+ mono = 5000;
+ delay(dly[i]);
+ }
+ mono = 0;
+ delay(3000);
+}
diff --git a/Adafruit_STEMMA_Audio_Amp/CircuitPython/code.py b/Adafruit_STEMMA_Audio_Amp/CircuitPython/code.py
new file mode 100644
index 000000000..18877fb67
--- /dev/null
+++ b/Adafruit_STEMMA_Audio_Amp/CircuitPython/code.py
@@ -0,0 +1,43 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Short Tone Tune Demo
+
+Plays a five-note tune on a loop.
+"""
+import time
+import array
+import math
+import board
+from audiocore import RawSample
+from audiopwmio import PWMAudioOut as AudioOut
+
+# Increase this to increase the volume of the tone.
+tone_volume = 0.1
+# The tones are provided as a frequency in Hz. You can change the current tones or
+# add your own to make a new tune. Follow the format with commas between values.
+tone_frequency = [784, 880, 698, 349, 523]
+
+audio = AudioOut(board.A0)
+
+while True:
+ # Play each tone in succession.
+ for frequency in tone_frequency:
+ # Compute the sine wave for the current frequency.
+ length = 8000 // frequency
+ sine_wave = array.array("H", [0] * length)
+ for index in range(length):
+ sine_wave[index] = int((1 + math.sin(math.pi * 2 * index / length))
+ * tone_volume * (2 ** 15 - 1))
+
+ sine_wave_sample = RawSample(sine_wave)
+
+ # Play the current frequency.
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(0.5)
+ audio.stop()
+ time.sleep(1)
+
+ # All done playing all tones; start over from the beginning.
diff --git a/Ambient_Machine/code.py b/Ambient_Machine/code.py
new file mode 100644
index 000000000..43e4015ca
--- /dev/null
+++ b/Ambient_Machine/code.py
@@ -0,0 +1,91 @@
+# SPDX-FileCopyrightText: 2023 John Park
+#
+# SPDX-License-Identifier: MIT
+# Ambient Machine inspired by Yuri Suzuki https://www.yurisuzuki.com/projects/the-ambient-machine
+import os
+import gc
+import board
+import busio
+import audiocore
+import audiobusio
+import audiomixer
+from digitalio import Pull
+from adafruit_debouncer import Debouncer
+from adafruit_mcp230xx.mcp23017 import MCP23017
+
+i2c = busio.I2C(board.SCL, board.SDA)
+mcp_a = MCP23017(i2c, address=0x20) # default address
+mcp_b = MCP23017(i2c, address=0x21) # MCP23017 w/ address 0 jumper set
+
+switches = [] # set up all the switch pins on two MCP23017 boards as debouncer switches
+for p in (8,9,10,11,12,4,3,2,1,0):
+ pin = mcp_a.get_pin(p)
+ pin.switch_to_input(pull=Pull.UP)
+ switches.append(Debouncer(pin))
+for p in (8,9,10,11,12,4,3,2,1,0):
+ pin = mcp_b.get_pin(p)
+ pin.switch_to_input(pull=Pull.UP)
+ switches.append(Debouncer(pin))
+
+wav_files = []
+
+for filename in os.listdir('/samples/'): # on board flash
+ if filename.lower().endswith('.wav') and not filename.startswith('.'):
+ wav_files.append("/samples/"+filename)
+ print(filename)
+
+wav_files.sort() # put in alphabetical/numberical order
+gc.collect()
+# Metro M7 pins for the I2S amp:
+lck_pin, bck_pin, dat_pin = board.D9, board.D10, board.D12
+
+audio = audiobusio.I2SOut(bit_clock=bck_pin, word_select=lck_pin, data=dat_pin)
+mixer = audiomixer.Mixer(voice_count=len(wav_files), sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True, buffer_size=2048)
+audio.play(mixer)
+
+for i in range(10): # start playing all wavs on loop w levels down
+ wave = audiocore.WaveFile(wav_files[i], bytearray(1024))
+ mixer.voice[i].play(wave, loop=True)
+ mixer.voice[i].level = 0.0
+
+LOW_VOL = 0.2
+HIGH_VOL = 0.5
+
+while True:
+ for i in range(len(switches)):
+ switches[i].update()
+ switch_row = i // 5
+ if switch_row == 0: # first row plays five samples
+ if switches[i].fell:
+ if switches[i+5].value is False: # check vol switch (pull-down, so 'False' is 'on')
+ mixer.voice[i].level = HIGH_VOL # if up
+ else:
+ mixer.voice[i].level = LOW_VOL # if down
+ if switches[i].rose:
+ mixer.voice[i].level = 0.0
+
+ if switch_row == 1: # second row adjusts volume of first row
+ if switches[i].fell:
+ if switches[i-5].value is False: # raise volume if it is on
+ mixer.voice[i-5].level = HIGH_VOL
+ if switches[i].rose:
+ if switches[i-5].value is False: # lower volume if it is on
+ mixer.voice[i-5].level = LOW_VOL
+
+ if switch_row == 2: # third row plays five different samples
+ if switches[i].fell:
+ if switches[i+5].value is False:
+ mixer.voice[i-5].level = HIGH_VOL
+ else:
+ mixer.voice[i-5].level = LOW_VOL
+ if switches[i].rose:
+ mixer.voice[i-5].level = 0.0
+
+ if switch_row == 3: # fourth row adjust volumes of third row
+ if switches[i].fell:
+ if switches[i-5].value is False:
+ mixer.voice[i-10].level = HIGH_VOL
+ if switches[i].rose:
+ if switches[i-5].value is False:
+ mixer.voice[i-10].level = LOW_VOL
diff --git a/Ambient_Machine/samples/0_amb_particles.wav b/Ambient_Machine/samples/0_amb_particles.wav
new file mode 100644
index 000000000..48347d6c5
Binary files /dev/null and b/Ambient_Machine/samples/0_amb_particles.wav differ
diff --git a/Ambient_Machine/samples/1_amb_birds.wav b/Ambient_Machine/samples/1_amb_birds.wav
new file mode 100644
index 000000000..0a13b7eae
Binary files /dev/null and b/Ambient_Machine/samples/1_amb_birds.wav differ
diff --git a/Ambient_Machine/samples/2_amb_bow.wav b/Ambient_Machine/samples/2_amb_bow.wav
new file mode 100644
index 000000000..1b5f6055b
Binary files /dev/null and b/Ambient_Machine/samples/2_amb_bow.wav differ
diff --git a/Ambient_Machine/samples/3_amb_mal.wav b/Ambient_Machine/samples/3_amb_mal.wav
new file mode 100644
index 000000000..9b0bb8b1a
Binary files /dev/null and b/Ambient_Machine/samples/3_amb_mal.wav differ
diff --git a/Ambient_Machine/samples/4_amb_wind.wav b/Ambient_Machine/samples/4_amb_wind.wav
new file mode 100644
index 000000000..2b348ec92
Binary files /dev/null and b/Ambient_Machine/samples/4_amb_wind.wav differ
diff --git a/Ambient_Machine/samples/5_amb_bees.wav b/Ambient_Machine/samples/5_amb_bees.wav
new file mode 100644
index 000000000..2335d6ff7
Binary files /dev/null and b/Ambient_Machine/samples/5_amb_bees.wav differ
diff --git a/Ambient_Machine/samples/6_amp_warp.wav b/Ambient_Machine/samples/6_amp_warp.wav
new file mode 100644
index 000000000..bac5813c4
Binary files /dev/null and b/Ambient_Machine/samples/6_amp_warp.wav differ
diff --git a/Ambient_Machine/samples/7_amb_edge.wav b/Ambient_Machine/samples/7_amb_edge.wav
new file mode 100644
index 000000000..5f02cfb84
Binary files /dev/null and b/Ambient_Machine/samples/7_amb_edge.wav differ
diff --git a/Ambient_Machine/samples/8_amb_rings.wav b/Ambient_Machine/samples/8_amb_rings.wav
new file mode 100644
index 000000000..46adfabce
Binary files /dev/null and b/Ambient_Machine/samples/8_amb_rings.wav differ
diff --git a/Ambient_Machine/samples/9_amb_wobble.wav b/Ambient_Machine/samples/9_amb_wobble.wav
new file mode 100644
index 000000000..9116b7133
Binary files /dev/null and b/Ambient_Machine/samples/9_amb_wobble.wav differ
diff --git a/Audio_BFF/audio_files - for SD card/adabot.wav b/Audio_BFF/audio_files - for SD card/adabot.wav
new file mode 100644
index 000000000..cdff423be
Binary files /dev/null and b/Audio_BFF/audio_files - for SD card/adabot.wav differ
diff --git a/Audio_BFF/audio_files - for SD card/hello.wav b/Audio_BFF/audio_files - for SD card/hello.wav
new file mode 100644
index 000000000..52bcfd293
Binary files /dev/null and b/Audio_BFF/audio_files - for SD card/hello.wav differ
diff --git a/Audio_BFF/audio_files - for SD card/interesting.wav b/Audio_BFF/audio_files - for SD card/interesting.wav
new file mode 100644
index 000000000..185e5493a
Binary files /dev/null and b/Audio_BFF/audio_files - for SD card/interesting.wav differ
diff --git a/Audio_BFF/audio_files - for SD card/uhoh.wav b/Audio_BFF/audio_files - for SD card/uhoh.wav
new file mode 100644
index 000000000..f065f2f4a
Binary files /dev/null and b/Audio_BFF/audio_files - for SD card/uhoh.wav differ
diff --git a/Audio_BFF/audio_files - for SD card/whhaatt.wav b/Audio_BFF/audio_files - for SD card/whhaatt.wav
new file mode 100644
index 000000000..be9c181a6
Binary files /dev/null and b/Audio_BFF/audio_files - for SD card/whhaatt.wav differ
diff --git a/Audio_BFF/code.py b/Audio_BFF/code.py
new file mode 100644
index 000000000..b07df14b5
--- /dev/null
+++ b/Audio_BFF/code.py
@@ -0,0 +1,78 @@
+# SPDX-FileCopyrightText: 2023 ladyada for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# Demo audio player that plays random wav files from internal storage or
+# SD card. Default pinout matches the Audio BFF for QT Py S2, S3 and RP2040
+
+import os
+import random
+import audiocore
+import board
+import audiobusio
+import audiomixer
+import adafruit_sdcard
+import storage
+import digitalio
+
+card_cs = digitalio.DigitalInOut(board.A0)
+card_cs.direction = digitalio.Direction.INPUT
+card_cs.pull = digitalio.Pull.UP
+sdcard = None
+
+DATA = board.A1
+LRCLK = board.A2
+BCLK = board.A3
+audio = audiobusio.I2SOut(BCLK, LRCLK, DATA)
+mixer = None
+
+button = digitalio.DigitalInOut(board.BUTTON)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+wave_files = []
+for filename in sorted(os.listdir("/")):
+ filename = filename.lower()
+ if filename.endswith(".wav") and not filename.startswith("."):
+ wave_files.append(filename)
+
+def open_audio():
+ n = random.choice(wave_files)
+ print("playing", n)
+ f = open(n, "rb")
+ w = audiocore.WaveFile(f)
+ return f, w
+
+wavefile = 0
+
+while True:
+ if not sdcard:
+ try:
+ sdcard = adafruit_sdcard.SDCard(board.SPI(), card_cs)
+ vfs = storage.VfsFat(sdcard)
+ storage.mount(vfs, "/sd")
+ print("Mounted SD card")
+ wave_files = ["/"+file for file in os.listdir('/') if file.endswith('.wav')]
+ wave_files += ["/sd/"+file for file in os.listdir('/sd') if file.endswith('.wav')]
+ print(wave_files)
+ except OSError:
+ pass
+
+ if not button.value:
+ if mixer and mixer.voice[0].playing:
+ print("stopping")
+ mixer.voice[0].stop()
+ if wavefile:
+ wavefile.close()
+ else:
+ wavefile, wave = open_audio()
+ mixer = audiomixer.Mixer(voice_count=1,
+ sample_rate=wave.sample_rate,
+ channel_count=wave.channel_count,
+ bits_per_sample=wave.bits_per_sample,
+ samples_signed=True)
+ mixer.voice[0].level = 0.1
+ audio.play(mixer)
+ mixer.voice[0].play(wave)
+
+ while not button.value:
+ pass
diff --git a/BLE_Client_Server/server/code.py b/BLE_Client_Server/server/code.py
index ff8a76cdd..d61afaea5 100644
--- a/BLE_Client_Server/server/code.py
+++ b/BLE_Client_Server/server/code.py
@@ -3,7 +3,9 @@
# SPDX-License-Identifier: MIT
from time import sleep
-from adafruit_ble.uart_server import UARTServer
+from adafruit_ble import BLERadio
+from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
+from adafruit_ble.services.nordic import UARTService
from adafruit_bluefruit_connect.packet import Packet
from adafruit_bluefruit_connect.button_packet import ButtonPacket
from adafruit_bluefruit_connect.color_packet import ColorPacket
@@ -17,15 +19,16 @@
solenoid.direction = Direction.OUTPUT
solenoid.value = False
-uart_server = UARTServer()
+ble = BLERadio()
+uart_server = UARTService()
+advertisement = ProvideServicesAdvertisement(uart_server)
while True:
- uart_server.start_advertising() # Advertise when not connected.
-
- while not uart_server.connected: # Wait for connection
+ ble.start_advertising(advertisement) # Advertise when not connected.
+ while not ble.connected:
pass
- while uart_server.connected: # Connected
+ while ble.connected: # Connected
if uart_server.in_waiting: # Check BLE commands
packet = Packet.from_stream(uart_server)
if isinstance(packet, ButtonPacket):
diff --git a/BLE_Gesture_Mouse/code.py b/BLE_Gesture_Mouse/code.py
index 7bbcefb7c..dcdbad26c 100644
--- a/BLE_Gesture_Mouse/code.py
+++ b/BLE_Gesture_Mouse/code.py
@@ -17,7 +17,8 @@
from adafruit_ble.services.standard.device_info import DeviceInfoService
# setup I2C
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# setup accelerometer
lsm6ds33 = adafruit_lsm6ds.lsm6ds33.LSM6DS33(i2c)
diff --git a/BLE_Heart_Rate_Trainer/code.py b/BLE_Heart_Rate_Trainer/code.py
index daa0a6510..847fbeb04 100644
--- a/BLE_Heart_Rate_Trainer/code.py
+++ b/BLE_Heart_Rate_Trainer/code.py
@@ -37,7 +37,8 @@
max_rate = 180
# Seven Segment FeatherWing setup
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
display_A = Seg7x4(i2c, address=0x70) # this will be the BPM display
display_A.fill(0) # Clear the display
# Second display has A0 address jumpered
diff --git a/BLE_Sensornet/feather_sense_sensornet/code.py b/BLE_Sensornet/feather_sense_sensornet/code.py
index 9ad72d4ad..a13c630d5 100644
--- a/BLE_Sensornet/feather_sense_sensornet/code.py
+++ b/BLE_Sensornet/feather_sense_sensornet/code.py
@@ -12,7 +12,8 @@
import adafruit_bmp280 # barometric sensor
import adafruit_lis3mdl # magnetic sensor
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
sense_accel = adafruit_lsm6ds.LSM6DS33(i2c)
sense_humid = adafruit_sht31d.SHT31D(i2c)
diff --git a/BLE_TV_B_Gone/code.py b/BLE_TV_B_Gone/code.py
new file mode 100755
index 000000000..6bfa38eb9
--- /dev/null
+++ b/BLE_TV_B_Gone/code.py
@@ -0,0 +1,123 @@
+# SPDX-FileCopyrightText: 2018 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# Circuit Playground Bluefruit version 2022 John Park
+
+import array
+import time
+import board
+import pulseio
+from digitalio import DigitalInOut, Direction, Pull
+from adafruit_ble import BLERadio
+from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
+from adafruit_ble.services.nordic import UARTService
+from adafruit_bluefruit_connect.packet import Packet
+from adafruit_bluefruit_connect.button_packet import ButtonPacket
+
+# pylint: disable=eval-used
+# Switch to select 'stealth-mode'
+switch = DigitalInOut(board.SLIDE_SWITCH)
+switch.direction = Direction.INPUT
+switch.pull = Pull.UP
+# Button to see output debug
+led = DigitalInOut(board.D13)
+led.direction = Direction.OUTPUT
+# which pin for IR LED/blaster
+ir_pin = board.A2 # JST IR Blaster board
+# Speaker as haptic feedback
+spkr_en = DigitalInOut(board.SPEAKER_ENABLE)
+spkr_en.direction = Direction.OUTPUT
+spkr_en.value = True
+spkr = DigitalInOut(board.SPEAKER)
+spkr.direction = Direction.OUTPUT
+
+# Allow any button to trigger activity!
+button_a = DigitalInOut(board.BUTTON_A)
+button_a.direction = Direction.INPUT
+button_a.pull = Pull.DOWN
+button_b = DigitalInOut(board.BUTTON_B)
+button_b.direction = Direction.INPUT
+button_b.pull = Pull.DOWN
+
+# BLE setup
+ble = BLERadio()
+uart_service = UARTService()
+advertisement = ProvideServicesAdvertisement(uart_service)
+
+def ir_code_send(code):
+ f = open(code, "r")
+ for line in f:
+ code = eval(line)
+ print(code)
+ if switch.value:
+ led.value = True
+ else:
+ spkr.value = True
+ # If this is a repeating code, extract details
+ try:
+ repeat = code["repeat"]
+ delay = code["repeat_delay"]
+ except KeyError: # by default, repeat once only!
+ repeat = 1
+ delay = 0
+ # The table holds the on/off pairs
+ table = code["table"]
+ pulses = [] # store the pulses here
+ # Read through each indexed element
+ for i in code["index"]:
+ pulses += table[i] # and add to the list of pulses
+ pulses.pop() # remove one final 'low' pulse
+
+ with pulseio.PulseOut(
+ ir_pin, frequency=code["freq"], duty_cycle=2**15
+ ) as pulse:
+ for i in range(repeat):
+ pulse.send(array.array("H", pulses))
+ time.sleep(delay)
+
+ led.value = False
+ spkr.value = False
+ time.sleep(code["delay"])
+
+ f.close()
+
+
+while True:
+ ble.name = 'TVRemote'
+ ble.start_advertising(advertisement)
+
+ while not ble.connected:
+ # Wait for a connection.
+ if button_a.value or button_b.value:
+ print("All codes")
+ time.sleep(0.1) # wait a moment
+ ir_code_send("/full_codes.txt")
+
+ while ble.connected:
+ if button_a.value or button_b.value:
+ print("all")
+ time.sleep(0.1) # wait a moment
+ ir_code_send("/full_codes.txt")
+ if uart_service.in_waiting:
+ # Packet is arriving.
+ packet = Packet.from_stream(uart_service)
+ if isinstance(packet, ButtonPacket) and packet.pressed:
+ if packet.button == ButtonPacket.UP:
+ print("Select codes")
+ time.sleep(0.1) # wait a moment
+ ir_code_send("/codes.txt")
+
+ if packet.button == ButtonPacket.DOWN:
+ print("All codes")
+ time.sleep(0.1) # wait a moment
+ ir_code_send("/full_codes.txt")
+
+ elif packet.button == ButtonPacket.BUTTON_1:
+ print("Sony power")
+ time.sleep(0.1) # wait a moment
+ ir_code_send("/sony_pwr.txt")
+
+ elif packet.button == ButtonPacket.BUTTON_2:
+ print("Toshiba power")
+ time.sleep(0.1) # wait a moment
+ ir_code_send("/toshiba_pwr.txt")
diff --git a/BLE_TV_B_Gone/codes.txt b/BLE_TV_B_Gone/codes.txt
new file mode 100755
index 000000000..b310113c5
--- /dev/null
+++ b/BLE_TV_B_Gone/codes.txt
@@ -0,0 +1,2 @@
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.042,'table':[[2376,603],[1162,625],[594,603]],'index':[0,1,2,1,2,1,2,2,1,2,2,2,2]}
+{'freq':38339,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,4,5,4,1]}
diff --git a/BLE_TV_B_Gone/full_codes.txt b/BLE_TV_B_Gone/full_codes.txt
new file mode 100755
index 000000000..9b7cb1b5b
--- /dev/null
+++ b/BLE_TV_B_Gone/full_codes.txt
@@ -0,0 +1,207 @@
+{'freq':56697,'delay':0.21,'repeat':2,'repeat_delay':0.008,'table':[[3968,3993],[493,2003],[493,1009]],'index':[0,1,1,1,1,2,2,1,2,1,2,1,2,2,2,2,2,1,1,2,1,2,1,2,1,1]}
+{'freq':36266,'delay':0.29,'repeat':2,'repeat_delay':0.09,'table':[[882,906],[1764,910],[882,1790]],'index':[0,1,0,0,0,0,0,0,2,0,1,0]}
+{'freq':38707,'delay':0.27,'repeat':2,'repeat_delay':0.064,'table':[[3332,1665],[413,431],[413,1216]],'index':[0,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,1,2,1,2,2,2,2,1,2,1]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.042,'table':[[2376,603],[1162,625],[594,603]],'index':[0,1,2,1,2,1,2,2,1,2,2,2,2]}
+{'freq':39466,'delay':0.33,'repeat':2,'repeat_delay':0.125,'table':[[506,497],[506,4074],[506,5067]],'index':[0,1,2,0,1,0,1,2,0,1,2,0,1,2,2,0,0]}
+{'freq':38338,'delay':0.25,'repeat':2,'repeat_delay':0.046,'table':[[4460,4500],[573,1680],[573,567]],'index':[0,1,1,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1]}
+{'freq':38706,'delay':0.24,'repeat':2,'repeat_delay':0.04,'table':[[310,1694],[310,700],[310,39767]],'index':[0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,2,0,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0]}
+{'freq':38705,'delay':0.23,'table':[[8370,4175],[516,1576],[516,553],[516,22213]],'index':[0,1,1,2,2,2,2,2,2,1,1,1,2,1,2,2,2,3,1,1,2,2,2,2,2,2,1,1,1,2,1,2,2,2,3,1,1,2,2,2,2,2,2,1,1,1,2,1,2,2,2,1]}
+{'freq':38339,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,2,1,1,1,1,1,2,2,1,2,2,2,2,2,1,1,1,2,1,1,1,1,2,2,2,1,2,2,2,2,3,4,5,4,1]}
+{'freq':38339,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38339,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,2,1,2,1,2,2,2,2,1,2,1,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38706,'delay':0.24,'repeat':2,'repeat_delay':0.034,'table':[[7957,3979],[490,521],[490,1590],[490,3979]],'index':[0,1,1,2,1,2,1,1,1,3,2,1,2,1,2,1,1,1,1]}
+{'freq':37977,'delay':0.24,'repeat':2,'repeat_delay':0.033,'table':[[3344,3386],[842,2533],[842,856]],'index':[0,1,2,2,1,2,1,2,2,2,2,2,1,2,1,1,2,1,2,1,1,1,1,1,2,1]}
+{'freq':33547,'delay':0.26,'repeat':2,'repeat_delay':0.053,'table':[[268,2141],[268,928],[268,929]],'index':[0,0,0,1,1,2,0,2,2,0,2,2,2,2,2,2,0]}
+{'freq':38706,'delay':0.23,'repeat':2,'repeat_delay':0.025,'table':[[8448,4273],[671,545],[671,1592]],'index':[0,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1,1,1,2,2,2,1,1,1,2,2,1,1,1,2,2,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44204],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,2,1,1,2,2,2,1,1,1,2,2,1,1,1,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,2,1,1,2,2,2,1,1,1,2,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38339,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,43085],[8946,2253],[547,65535]],'index':[0,1,1,2,1,1,1,1,2,1,1,1,1,1,2,2,2,1,1,1,1,1,2,1,1,2,2,2,2,2,1,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,2,2,1,2,2,2,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,37491],[8946,2253],[547,65535]],'index':[0,1,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,2,2,1,2,1,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,1,1,1,1,2,2,2,1,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.25,'repeat':2,'repeat_delay':0.043,'table':[[8946,4488],[547,590],[547,1709]],'index':[0,1,2,2,1,1,1,1,2,2,1,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8972,4500],[547,584],[547,1707],[547,23069],[547,65535]],'index':[0,1,1,2,2,2,1,1,1,2,1,1,1,1,2,2,1,1,1,2,2,2,1,2,2,2,2,1,1,2,2,2,1,1,1,2,2,1,1,1,2,2,2,3,0,4,0,1]}
+{'freq':38707,'delay':0.24,'repeat':2,'repeat_delay':0.034,'table':[[7983,4012],[490,1518],[490,524],[490,4012]],'index':[0,1,2,1,2,1,2,2,2,3,1,2,1,2,1,2,2,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,43085],[8946,2253],[547,65535]],'index':[0,1,2,2,1,1,1,1,2,2,1,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,4,5,4,1]}
+{'freq':38337,'delay':0.3,'table':[[4460,4500],[573,567],[573,1680],[573,50753],[573,65535]],'index':[0,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,0,2,4,0,2,1]}
+{'freq':38338,'delay':0.3,'table':[[4460,4500],[573,567],[573,1680],[573,50753],[573,65535]],'index':[0,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,0,1,4,0,1,1]}
+{'freq':40255,'delay':0.23,'repeat':2,'repeat_delay':0.03,'table':[[1093,1149],[6607]],'index':[0,1]}
+{'freq':36266,'delay':0.29,'repeat':2,'repeat_delay':0.084,'table':[[2647,906],[441,904],[441,463],[882,465],[441,906]],'index':[0,1,2,2,1,3,2,2,2,2,2,2,2,2,2,2,2,3,4,2,1]}
+{'freq':35941,'delay':0.24,'repeat':2,'repeat_delay':0.034,'table':[[3477,3495],[862,2623],[862,884]],'index':[0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.042,'table':[[2454,635],[1162,635],[594,613]],'index':[0,1,2,1,2,1,2,2,2,1,2,1,1,2,1,2,1,1,2,2,2]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.047,'table':[[2583,2702],[1188,1205],[1188,2696]],'index':[0,1,2,1,2,1,2,2,1,2,2,1,1,1,2,1,2,1]}
+{'freq':40255,'delay':0.22,'repeat':2,'repeat_delay':0.02,'table':[[2384,616],[1192,616],[596,616]],'index':[0,1,1,1,1,2,1,2,2,2,1,2,1,2,1,2]}
+{'freq':40255,'delay':0.22,'repeat':2,'repeat_delay':0.021,'table':[[2384,616],[1192,616],[596,616]],'index':[0,1,2,1,2,1,2,2,2,2,1,2,1,2,1,2]}
+{'freq':33546,'delay':0.25,'repeat':2,'repeat_delay':0.049,'table':[[4441,4366],[536,1674],[536,630],[536,631]],'index':[0,1,2,2,2,3,2,2,2,2,2,2,2,1,2,2,3,2,1,2,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,41966],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,43085],[8946,2253],[547,65535]],'index':[0,1,1,1,1,2,1,1,1,2,1,2,2,1,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,3,4,5,4,1]}
+{'freq':37977,'delay':0.24,'repeat':2,'repeat_delay':0.033,'table':[[3344,3386],[842,856],[842,2533]],'index':[0,1,2,1,2,1,1,1,2,1,2,1,1,2,1,2,1,2,2,2,1,2,1,2,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,2,1,2,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38337,'delay':0.25,'repeat':2,'repeat_delay':0.046,'table':[[4460,4500],[573,1680],[573,567]],'index':[0,1,1,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,2,2,1,1,2,1]}
+{'freq':39466,'delay':0.33,'repeat':2,'repeat_delay':0.125,'table':[[506,497],[506,4074],[506,5067]],'index':[0,1,2,0,1,0,1,2,2,0,1,2,0,1,2,0,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,1,2,1,1,1,2,2,1,2,1,2,2,2,1,1,3,4,5,4,1]}
+{'freq':38706,'delay':0.24,'repeat':2,'repeat_delay':0.036,'table':[[8293,4197],[490,543],[490,1586],[490,4199]],'index':[0,1,2,1,1,1,1,1,1,3,1,2,2,2,1,1,1,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,1,1,1,1,2,2,2,1,2,2,2,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,2,2,1,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,2,2,2,2,2,1,2,1,2,1,1,1,1,2,2,2,2,1,2,2,2,2,1,1,1,2,1,1,1,1,3,4,5,4,1]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.044,'table':[[258,1826],[258,793],[258,43537]],'index':[0,1,1,1,1,1,0,0,1,0,1,1,1,0,1,2,0,1,1,1,1,0,1,1,0,1,0,0,0,1,0,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,2,1,1,2,2,2,1,1,1,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,2,1,2,1,2,2,2,2,1,2,1,2,1,2,2,2,2,2,1,1,2,1,1,1,1,1,2,2,3,4,5,4,1]}
+{'freq':38705,'delay':0.24,'repeat':2,'repeat_delay':0.04,'table':[[310,1694],[310,700],[310,39768]],'index':[0,1,1,1,1,0,0,1,1,0,1,1,1,0,1,2,0,1,1,1,1,1,1,0,0,1,0,0,0,1,0,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,1,1,1,2,2,2,2,1,2,2,2,1,2,1,1,2,1,2,1,2,1,2,2,1,2,1,2,1,3,4,5,4,1]}
+{'freq':38707,'delay':0.23,'repeat':2,'repeat_delay':0.023,'table':[[8887,4485],[542,586],[542,1701]],'index':[0,1,1,2,2,2,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1]}
+{'freq':38337,'delay':0.24,'repeat':2,'repeat_delay':0.04,'table':[[8946,4506],[547,1707],[547,584]],'index':[0,1,2,2,2,1,1,1,2,2,1,1,1,2,2,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1,1,2,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38337,'delay':0.3,'table':[[4460,4500],[573,567],[573,1680],[573,50753],[4460,4501],[573,65535]],'index':[0,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,4,5,0,1]}
+{'freq':38707,'delay':0.23,'repeat':2,'repeat_delay':0.023,'table':[[8887,4485],[542,1701],[542,586]],'index':[0,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1]}
+{'freq':35941,'delay':0.24,'repeat':2,'repeat_delay':0.034,'table':[[3450,3503],[862,890],[862,2623]],'index':[0,1,1,1,2,1,2,1,1,1,1,1,2,2,2,2,1,2,1,2,2,2,2,2,1,1]}
+{'freq':59197,'delay':0.21,'repeat':2,'repeat_delay':0.01,'table':[[3969,3991],[472,2003],[473,2003],[472,1010],[472,1009],[473,1010]],'index':[0,1,1,1,2,3,4,2,1,1,5,1,1,3,3,4,5,1,1,5,3,4,2,3,4,2]}
+{'freq':59197,'delay':0.21,'repeat':2,'repeat_delay':0.01,'table':[[3969,3991],[472,2003],[473,1010],[472,1009],[472,1010],[473,2003]],'index':[0,1,1,1,2,3,4,1,1,1,4,1,1,2,4,4,1,1,1,4,4,3,5,4,3,2]}
+{'freq':38337,'delay':0.25,'repeat':2,'repeat_delay':0.049,'table':[[4460,4500],[573,1680],[573,567]],'index':[0,1,2,1,2,2,2,2,2,1,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1]}
+{'freq':35941,'delay':0.27,'repeat':2,'repeat_delay':0.069,'table':[[2643,905],[445,470],[445,907],[1307,911],[445,469],[890,473],[445,919]],'index':[0,1,1,2,2,3,1,4,4,1,4,1,1,1,4,5,1,6,1,1,1,1,4,4,4,4,1,1,1,1,1,4,4,4,5]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,38610],[8946,2253],[547,65535]],'index':[0,1,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,1,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,3,4,5,4,1]}
+{'freq':35942,'delay':0.23,'repeat':2,'repeat_delay':0.023,'table':[[445,1711],[445,619],[556]],'index':[0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,2]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.042,'table':[[2454,635],[1162,635],[594,613]],'index':[0,1,2,1,2,1,2,2,1,1,1,2,1,2,1,2,2,2,2,2,2]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,1,2,1,1,1,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2,1,2,2,1,1,1,2,1,2,3,4,5,4,1]}
+{'freq':37272,'delay':0.24,'repeat':2,'repeat_delay':0.034,'table':[[8639,4397],[482,1335],[483,1335],[482,3014],[483,3014]],'index':[0,1,1,1,1,2,1,1,1,3,4,1,3,2,3,1,1,1,2,1,1,1,1,3,3,3,3,3,3,4,3,1,1,1]}
+{'freq':38338,'delay':0.24,'repeat':2,'repeat_delay':0.041,'table':[[8946,4488],[547,1709],[547,590]],'index':[0,1,1,2,2,2,2,2,1,1,2,1,2,1,2,1,2,2,2,2,2,1,2,2,1,1,1,1,1,2,1,1,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,2,1,2,1,2,2,2,2,1,2,1,1,2,2,1,1,1,1,2,2,1,1,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,2,1,1,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':36266,'delay':0.29,'repeat':2,'repeat_delay':0.09,'table':[[882,906],[1764,910],[882,1791],[882,1790]],'index':[0,1,0,0,0,0,2,1,3,0,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,46442],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.047,'table':[[3332,1565],[413,431],[413,1216]],'index':[0,1,1,2,1,2,1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1]}
+{'freq':38707,'delay':0.23,'repeat':2,'repeat_delay':0.025,'table':[[8474,4224],[542,549],[542,1593],[542,550]],'index':[0,1,2,3,2,1,2,3,2,2,1,2,3,2,1,2,3,3,3,2,2,2,3,1,1,2,2,3,1,1,2,2,2,1]}
+{'freq':40254,'delay':0.23,'repeat':2,'repeat_delay':0.024,'table':[[2384,617],[1192,617],[596,617]],'index':[0,1,1,1,1,2,1,2,1,2,2,2,2]}
+{'freq':37271,'delay':0.27,'repeat':2,'repeat_delay':0.064,'table':[[3460,1759],[429,456],[429,1253]],'index':[0,1,2,1,2,1,2,1,2,1,2,1,2,2,1,2,1,2,2,2,2,1,1,1,2,1,2,1,1,2,1,1,1,1,2,2,1,2,1,1,1,2,1,1,1,2,1,2,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,41967],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,2,2,1,2,1,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,3,4,5,4,1]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.047,'table':[[3332,1565],[413,431],[413,1216]],'index':[0,1,1,2,1,2,1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,2,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1]}
+{'freq':38706,'delay':0.3,'repeat':2,'repeat_delay':0.094,'table':[[3229,1646],[413,422],[413,1239]],'index':[0,1,1,2,1,2,1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,2,1,1,1,1,2,1,2,1,1,1,1,1,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,2,1,2,1,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':37272,'delay':0.28,'repeat':2,'repeat_delay':0.074,'table':[[3461,1743],[429,452],[429,1322],[429,1323]],'index':[0,1,2,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,2,1,1,3,1,1,1,1,1,1,1,1,2,1,3,2,2,2,1,1,3,1,3,3,1,3,1,3,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,2,1,1,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,38610],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.042,'table':[[2454,635],[1162,635],[594,613]],'index':[0,1,1,1,1,2,1,2,2,1,2,1,1,1,1,2,2,1,2,2,2]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,41967],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,2,2,1,2,1,2,2,2,1,2,2,1,2,2,2,2,2,1,2,2,1,1,1,1,1,2,1,3,4,5,4,1]}
+{'freq':36265,'delay':0.29,'repeat':2,'repeat_delay':0.09,'table':[[882,906],[1764,910],[882,1790],[1764,1794]],'index':[0,1,0,2,3,1,2,0,1,0]}
+{'freq':38338,'delay':0.25,'repeat':2,'repeat_delay':0.044,'table':[[8946,4488],[547,590],[547,1709]],'index':[0,1,2,2,1,1,1,1,2,1,2,1,1,1,1,1,1,2,1,1,2,1,1,2,1,1,2,2,1,2,2,1,2,1]}
+{'freq':38337,'delay':0.3,'table':[[4460,4500],[573,1680],[573,567],[573,48527],[573,65535]],'index':[0,1,2,1,2,2,2,2,2,1,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,3,0,2,4,0,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,2,2,1,2,2,1,2,1,1,1,2,1,1,2,1,1,2,1,2,1,1,1,2,2,1,2,1,2,2,2,3,4,5,4,1]}
+{'freq':40255,'delay':0.3,'repeat':2,'repeat_delay':0.099,'table':[[496,5016],[496,525],[496,4064]],'index':[0,0,1,2,1,2,0,1,2,0,1,2,0,0,1,2,1,2,0,1,2,0]}
+{'freq':37272,'delay':0.25,'table':[[831,5785],[831,2506]],'index':[0,1,1,1,0,1,0,0,0,1,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,1,2,1,2,2,2,2,1,2,1,2,1,1,1,2,1,2,2,1,2,2,2,1,2,1,1,2,1,1,1,3,4,5,4,1]}
+{'freq':38337,'delay':0.3,'table':[[4460,4501],[573,567],[573,1680],[573,48527],[4460,4500],[573,65535]],'index':[0,1,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,4,1,5,4,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,2,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,2,1,2,2,2,2,1,1,1,2,1,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[4460,4500],[573,567],[573,1680],[573,46302],[4460,4501],[573,65535]],'index':[0,1,2,2,1,2,1,1,1,1,2,2,1,2,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,4,1,5,4,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,2,1,1,1,2,2,2,2,1,2,2,2,2,1,1,1,2,1,1,1,1,2,2,2,1,2,2,2,3,4,5,4,1]}
+{'freq':56696,'delay':0.24,'repeat':2,'repeat_delay':0.038,'table':[[3368,3361],[828,853],[829,853],[828,2542],[829,2542]],'index':[0,1,1,1,1,2,1,1,1,2,1,3,3,3,4,3,3,3,3,3,3,3,1,1]}
+{'freq':40253,'delay':0.23,'repeat':2,'repeat_delay':0.028,'table':[[447,1608],[447,574]],'index':[0,0,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,2,2,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,1,2,1,1,2,2,2,1,2,1,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,2,2,2,3,4,5,4,1]}
+{'freq':38337,'delay':0.3,'table':[[4460,4500],[573,1680],[573,567],[573,46302],[4460,4501],[573,65535]],'index':[0,1,1,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,3,4,1,5,0,1,1]}
+{'freq':55910,'delay':0.24,'table':[[357,1801],[357,2705]],'index':[0,1,0,1,1,0,0,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,2,1,2,1,1,1,2,2,1,2,1,2,2,2,2,2,1,2,2,1,1,1,1,1,2,1,1,2,2,2,3,4,5,4,1]}
+{'freq':38706,'delay':0.3,'table':[[8939,4494],[542,589],[542,1712],[542,43045],[8939,2258],[542,65535]],'index':[0,1,1,1,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,3,4,5,4,1]}
+{'freq':36265,'delay':0.29,'repeat':2,'repeat_delay':0.089,'table':[[882,906],[882,1790],[1764,910]],'index':[0,1,0,0,0,0,0,2,1,0,2,0]}
+{'freq':38337,'delay':0.3,'table':[[4460,4501],[573,567],[573,1680],[573,48528],[4460,4500],[573,65535]],'index':[0,1,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,4,2,5,0,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8972,4500],[547,584],[547,1707],[547,23069],[547,65535]],'index':[0,1,1,2,2,2,1,1,1,2,1,1,1,1,2,2,1,1,1,2,2,2,1,2,2,2,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,0,4,0,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,2,2,2,2,2,1,1,2,1,2,1,2,1,2,2,1,2,2,2,2,1,1,1,2,1,1,1,1,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,1,1,2,2,2,1,2,1,2,3,4,5,4,1]}
+{'freq':38706,'delay':0.23,'repeat':2,'repeat_delay':0.025,'table':[[8474,4225],[516,556],[516,1610]],'index':[0,1,2,1,2,1,2,1,2,2,1,2,1,2,1,2,1,1,1,2,2,2,1,2,2,2,2,1,1,1,2,1,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,2,2,2,1,2,2,2,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,41967],[8946,2253],[547,65535]],'index':[0,1,2,1,2,2,2,1,2,2,1,1,2,1,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,2,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.25,'repeat':2,'repeat_delay':0.042,'table':[[8946,4488],[547,590],[547,1709]],'index':[0,1,2,1,2,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,2,2,2,1]}
+{'freq':37976,'delay':0.23,'repeat':2,'repeat_delay':0.024,'table':[[8321,4192],[526,539],[526,1589],[526,4186]],'index':[0,1,2,1,1,1,1,1,1,3,1,2,2,2,1,1,1,1,1]}
+{'freq':38337,'delay':0.3,'table':[[4460,4500],[573,567],[573,1680],[573,46302],[573,65535],[4460,4501]],'index':[0,1,2,2,2,1,1,1,1,1,2,2,2,1,1,1,1,2,2,1,2,1,1,1,1,1,1,2,1,2,2,2,2,3,0,2,4,5,2,1]}
+{'freq':38337,'delay':0.3,'table':[[4460,4501],[573,567],[573,1680],[573,50753],[4460,4500],[573,65535]],'index':[0,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,1,2,1,1,1,1,1,1,2,1,2,2,2,2,3,4,2,5,4,2,1]}
+{'freq':37273,'delay':0.23,'repeat':2,'repeat_delay':0.03,'table':[[456,3047],[456,10010],[456,6528]],'index':[0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,2,0]}
+{'freq':37273,'delay':0.23,'repeat':2,'repeat_delay':0.03,'table':[[456,3047],[456,10010],[456,6528]],'index':[0,1,0,1,0,1,0,2,2,2,2,0,0,0]}
+{'freq':40254,'delay':0.21,'repeat':2,'repeat_delay':0.002,'table':[[4645,1619],[347,2810],[1540,1618]],'index':[0,1,1,1,2,1,2,2,1,1,2]}
+{'freq':44728,'delay':0.23,'repeat':2,'repeat_delay':0.025,'table':[[536,2333],[536,8021],[536,2334],[536,5177]],'index':[0,1,2,1,2,1,2,3,3,0,0,0,2,3,0]}
+{'freq':6961,'delay':0.33,'repeat':2,'repeat_delay':0.127,'table':[[143]],'index':[0]}
+{'freq':37976,'delay':0.23,'repeat':2,'repeat_delay':0.025,'table':[[8321,4192],[526,1589],[526,539],[526,4186]],'index':[0,1,2,2,2,1,2,2,2,3,2,2,2,1,2,2,2,2,1]}
+{'freq':36265,'delay':0.29,'repeat':2,'repeat_delay':0.09,'table':[[882,906],[1764,910],[882,1791]],'index':[0,0,1,0,0,0,0,0,2,0,1,0]}
+{'freq':7086,'delay':0.31,'repeat':2,'repeat_delay':0.106,'table':[[141]],'index':[0]}
+{'freq':37977,'delay':0.23,'repeat':2,'repeat_delay':0.025,'table':[[8321,4192],[526,539],[526,1589],[526,4186]],'index':[0,1,1,2,1,1,1,1,1,3,1,2,1,1,1,2,1,1,1]}
+{'freq':65535,'delay':0.22,'repeat':2,'repeat_delay':0.012,'table':[[256,1075],[256,3702],[256,2388]],'index':[0,1,0,1,0,1,0,0,0,0,0,0,0,2,2,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,1,1,1,2,2,2,1,1,2,2,2,1,1,1,2,1,1,1,1,2,2,2,1,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.24,'repeat':2,'repeat_delay':0.041,'table':[[8946,4488],[547,1709],[547,590]],'index':[0,1,1,2,2,2,2,2,1,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,2,2,2,2,2,1,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,3,4,5,4,1]}
+{'freq':31205,'delay':0.31,'table':[[512,2554],[512,1020],[993,539],[512,515],[512,14344],[993,1044],[512,65535]],'index':[0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,4,0,1,3,2,1,3,3,3,5,3,3,3,3,3,6,0,1,3,2,1,3,3,3,5,3,3,3,3,3,6,0,1,3,2,1,3,3,3,5,3,3,3,3,3,0]}
+{'freq':38337,'delay':0.3,'table':[[4460,4500],[573,567],[573,1680],[573,46302],[573,65535],[4460,4501]],'index':[0,1,2,2,2,1,1,1,1,1,2,2,2,1,1,1,1,1,1,2,1,2,1,1,1,2,2,1,2,1,2,2,2,3,0,2,4,5,2,1]}
+{'freq':38704,'delay':0.23,'repeat':2,'repeat_delay':0.029,'table':[[465,1529],[465,3504]],'index':[0,1,1,1,0,0,0]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,2,2,1,1,1,2,2,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,1,1,1,2,1,1,1,1,3,4,5,4,1]}
+{'freq':38706,'delay':0.29,'repeat':2,'repeat_delay':0.034,'table':[[413,1259],[1240,433]],'index':[0,0,0,0,0,1,0,0,0,0,0,1]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,2,1,1,2,2,2,1,1,1,2,2,1,1,2,2,2,1,1,1,2,2,1,1,1,2,2,2,3,4,5,4,1]}
+{'freq':36930,'delay':0.25,'repeat':2,'repeat_delay':0.043,'table':[[3438,1712],[433,446],[433,1315]],'index':[0,1,1,2,1,2,1,1,1,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,2,1,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,2,2,1,2,1,1,1,2,2,1,2,1,2,1,1,2,2,2,2,2,1,2,2,1,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,1,2,1,2,1,1,1,2,2,1,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,2,1,1,1,1,2,2,2,1,2,1,2,2,1,2,2,2,1,2,1,1,1,1,1,1,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,41967],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,1,1,1,2,1,2,1,1,2,2,2,1,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':37976,'delay':0.23,'repeat':2,'repeat_delay':0.023,'table':[[8321,4192],[526,1589],[526,539],[526,4186]],'index':[0,1,1,1,2,2,2,1,2,3,2,1,2,2,2,2,2,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,2,2,1,2,2,2,2,1,1,1,2,1,1,1,2,1,1,2,1,2,2,2,1,2,2,1,2,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,38611],[8946,2253],[547,65535]],'index':[0,1,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,1,1,2,2,2,1,1,1,2,2,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,2,1,2,1,1,1,1,2,1,2,1,2,2,2,2,3,4,5,4,1]}
+{'freq':447391,'delay':0.24,'table':[[196,2894],[196,15233],[196,5982],[196,9066],[196,12153]],'index':[0,0,1,0,2,2,2,2,2,2,2,2,2,2,2,2,3,2,0,2,4,0]}
+{'freq':38337,'delay':0.3,'table':[[4460,4500],[573,567],[573,1680],[573,50753],[573,65535]],'index':[0,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,1,1,2,1,1,1,1,1,2,2,1,2,2,2,3,0,2,4,0,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,2,1,1,2,2,1,1,1,1,2,2,1,1,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':34702,'delay':0.22,'repeat':2,'repeat_delay':0.014,'table':[[144,4927],[144,6964]],'index':[0,0,1,0,0,0,0,0]}
+{'freq':35941,'delay':0.29,'repeat':2,'repeat_delay':0.09,'table':[[890,899],[1780,895],[890,1785]],'index':[0,0,1,0,0,0,0,0,0,2,0,1,0]}
+{'freq':35941,'delay':0.27,'repeat':2,'repeat_delay':0.069,'table':[[2643,905],[445,470],[445,907],[1307,911],[890,923],[445,469],[890,473],[445,919]],'index':[0,1,1,2,2,3,1,1,1,1,1,1,1,1,1,4,5,1,6,7,5,4,5,4,5,1,5,1,6,7,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,2,1,1,1,2,1,2,2,1,2,1,1,2,1,1,2,1,1,2,2,1,2,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.25,'repeat':2,'repeat_delay':0.044,'table':[[8946,4488],[547,590],[547,1709]],'index':[0,1,1,1,1,1,1,1,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':35941,'delay':0.27,'repeat':2,'repeat_delay':0.069,'table':[[2643,905],[445,470],[445,469],[445,907],[1307,911],[890,923],[890,474],[445,919],[890,473]],'index':[0,1,2,3,3,4,2,2,2,1,2,1,2,1,1,5,1,1,6,7,1,5,1,5,1,1,2,1,8,7,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,41967],[8946,2253],[547,65535]],'index':[0,1,1,2,1,1,1,1,1,2,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,4,1]}
+{'freq':36595,'delay':0.23,'repeat':2,'repeat_delay':0.029,'table':[[546,1701],[546,588]],'index':[0,0,0,1,1,1,0,1,1,0,1,1,1,1,1,1,0]}
+{'freq':35942,'delay':0.29,'repeat':2,'repeat_delay':0.09,'table':[[890,2106],[890,912],[1780,914],[890,1804]],'index':[0,1,2,1,1,1,1,1,3,1,2,0]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,2,1,1,2,1,1,3,4,5,4,1]}
+{'freq':38705,'delay':0.26,'repeat':2,'repeat_delay':0.054,'table':[[2557,2664],[1136,1168],[1136,2956],[1136,1167]],'index':[0,1,2,3,2,1,2,2,1,2,3,3,3,2,3,2,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,43086],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,1,1,2,2,2,1,1,1,2,2,1,1,1,2,2,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,2,2,1,2,1,1,1,2,2,1,2,1,1,1,2,1,2,2,2,2,2,2,1,2,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,40848],[8946,2253],[547,65535]],'index':[0,1,1,1,1,2,2,1,2,2,2,2,2,1,2,1,2,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,2,2,1,1,1,2,2,2,1,1,2,2,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,4,5,4,1]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,2,2,1,1,2,2,2,2,1,1,2,2,1,1,1,2,1,1,2,1,2,1,2,1,2,2,1,2,1,2,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,2,2,1,1,2,2,2,2,1,1,2,2,1,1,1,1,2,2,2,2,2,1,2,2,1,1,1,1,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,46442],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,45323],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':36264,'delay':0.29,'table':[[385,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[386,325]],'index':[0,1,2,1,3,1,1,1,1,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,1,1,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,1,1,4,1,4,2,3,1,1,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,45323],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':36267,'delay':0.29,'table':[[385,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[386,325]],'index':[0,1,2,1,3,1,1,1,4,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,1,4,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,1,4,4,1,4,2,3,1,1,2,1]}
+{'freq':36265,'delay':0.29,'table':[[386,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[385,325]],'index':[0,1,2,1,3,1,1,1,2,3,1,4,2,3,1,1,2,5,0,1,2,1,3,1,1,1,2,3,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,1,2,3,1,4,2,3,1,1,2,1]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,45323],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,2,2,1,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':36263,'delay':0.29,'table':[[385,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[386,325]],'index':[0,1,2,1,3,1,1,1,3,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,1,3,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,1,3,4,1,4,2,3,1,1,2,1]}
+{'freq':36268,'delay':0.29,'table':[[386,325],[137,325],[137,655],[137,820],[137,490],[137,65535]],'index':[0,1,2,1,3,1,1,4,1,3,1,4,2,3,1,1,2,5,0,1,2,1,3,1,1,4,1,3,1,4,2,3,1,1,2,5,0,1,2,1,3,1,1,4,1,3,1,4,2,3,1,1,2,1]}
+{'freq':36267,'delay':0.29,'table':[[385,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[386,325]],'index':[0,1,2,1,3,1,1,4,4,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,4,4,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,4,4,4,1,4,2,3,1,1,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,43086],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,45323],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,2,1,1,1,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':36266,'delay':0.29,'table':[[385,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[386,325]],'index':[0,1,2,1,3,1,1,4,2,3,1,4,2,3,1,1,2,5,0,1,2,1,3,1,1,4,2,3,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,4,2,3,1,4,2,3,1,1,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,1,2,1,1,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':36265,'delay':0.29,'table':[[385,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[386,325]],'index':[0,1,2,1,3,1,1,4,3,3,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,4,3,3,1,4,2,3,1,1,2,5,0,1,2,1,3,1,1,4,3,3,1,4,2,3,1,1,2,1]}
+{'freq':36265,'delay':0.29,'table':[[386,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[385,325]],'index':[0,1,2,1,3,1,1,2,1,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,2,1,4,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,2,1,4,1,4,2,3,1,1,2,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,2,1,1,1,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,2,1,1,2,1,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':36263,'delay':0.29,'table':[[386,325],[137,325],[137,655],[137,820],[137,490],[137,65535],[385,325]],'index':[0,1,2,1,3,1,1,2,4,3,1,4,2,3,1,1,2,5,0,1,2,1,3,1,1,2,4,3,1,4,2,3,1,1,2,5,6,1,2,1,3,1,1,2,4,3,1,4,2,3,1,1,2,1]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,43086],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,44205],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,2,1,1,1,2,1,2,1,1,2,2,1,1,1,1,2,1,1,1,2,2,2,2,1,2,3,4,5,4,1]}
+{'freq':38705,'delay':0.22,'repeat':2,'repeat_delay':0.02,'table':[[7905,3947],[490,521],[490,1495],[490,3959]],'index':[0,1,1,2,1,2,2,2,2,3,2,2,1,1,1,1,1,1,1]}
+{'freq':38338,'delay':0.3,'table':[[8972,4522],[547,646],[547,1729],[547,39545],[8972,2276],[547,65535]],'index':[0,1,2,2,2,1,2,2,2,2,2,2,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,2,2,1,2,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.23,'repeat':2,'repeat_delay':0.023,'table':[[2973,3009],[495,1513],[495,2506],[495,3996]],'index':[0,1,1,1,1,1,1,2,1,1,1,1,1,2,1,2,2,3,1]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39730],[8946,2253],[547,65535]],'index':[0,1,2,2,2,1,2,2,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,1,1,2,1,1,1,1,1,2,3,4,5,4,1]}
+{'freq':5036,'delay':0.3,'repeat':2,'repeat_delay':0.099,'table':[[198]],'index':[0]}
+{'freq':31449,'delay':0.28,'repeat':2,'repeat_delay':0.08,'table':[[476,2645],[476,548],[476,1061],[985,1045]],'index':[0,1,1,2,3,1,0]}
+{'freq':8156,'delay':0.31,'repeat':2,'repeat_delay':0.109,'table':[[122]],'index':[0]}
+{'freq':40255,'delay':0.22,'repeat':2,'repeat_delay':0.02,'table':[[7949,3996],[496,1512],[496,516],[496,4018]],'index':[0,1,2,2,2,1,2,1,1,3,2,1,1,1,2,2,2,2,1]}
+{'freq':30266,'delay':0.24,'repeat':2,'repeat_delay':0.037,'table':[[859,3383],[859,11825],[858,3383],[859,7604]],'index':[0,1,0,1,0,1,0,0,2,0,0,0,0,3,3,0]}
+{'freq':38337,'delay':0.3,'table':[[8946,4488],[547,1709],[547,590],[547,39730],[8946,2253],[547,65535]],'index':[0,1,1,2,2,2,2,2,1,1,2,2,2,1,1,1,1,2,1,2,1,2,2,2,2,1,2,1,2,1,1,1,1,3,4,5,4,1]}
+{'freq':38338,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,40848],[8946,2253],[547,65535]],'index':[0,1,2,1,1,1,1,1,1,2,1,2,2,2,2,2,1,1,2,2,1,1,1,2,1,2,1,1,2,2,2,1,2,3,4,5,4,1]}
diff --git a/BLE_TV_B_Gone/sony_pwr.txt b/BLE_TV_B_Gone/sony_pwr.txt
new file mode 100755
index 000000000..2d1148399
--- /dev/null
+++ b/BLE_TV_B_Gone/sony_pwr.txt
@@ -0,0 +1 @@
+{'freq':38706,'delay':0.25,'repeat':2,'repeat_delay':0.042,'table':[[2376,603],[1162,625],[594,603]],'index':[0,1,2,1,2,1,2,2,1,2,2,2,2]}
diff --git a/BLE_TV_B_Gone/toshiba_pwr.txt b/BLE_TV_B_Gone/toshiba_pwr.txt
new file mode 100755
index 000000000..447b59a90
--- /dev/null
+++ b/BLE_TV_B_Gone/toshiba_pwr.txt
@@ -0,0 +1 @@
+{'freq':38339,'delay':0.3,'table':[[8946,4488],[547,590],[547,1709],[547,39729],[8946,2253],[547,65535]],'index':[0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,2,1,2,2,2,3,4,5,4,1]}
diff --git a/BME680_BSEC_OLED_Demo/BME680_BSEC_OLED_Demo.ino b/BME680_BSEC_OLED_Demo/BME680_BSEC_OLED_Demo.ino
index 6a1ef0ba0..d5077982a 100644
--- a/BME680_BSEC_OLED_Demo/BME680_BSEC_OLED_Demo.ino
+++ b/BME680_BSEC_OLED_Demo/BME680_BSEC_OLED_Demo.ino
@@ -4,9 +4,9 @@
// SPDX-License-Identifier: MIT
/***************************************************************************
- This is a library for the BME680 gas, humidity, temperature & pressure sensor
+ This is a library for the BME68X gas, humidity, temperature & pressure sensor
- Designed specifically to work with the Adafruit BME680 Breakout
+ Designed specifically to work with the Adafruit BME68X Breakout
----> http://www.adafruit.com/products/3660
These sensors use I2C or SPI to communicate, 2 or 4 pins are required
@@ -33,7 +33,7 @@ void setup() {
Serial.begin(9600);
//while (!Serial);
- Serial.println(F("BME680 test"));
+ Serial.println(F("BME68X test"));
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
@@ -50,7 +50,7 @@ void setup() {
display.setTextColor(SSD1306_WHITE);
display.setRotation(0);
- iaqSensor.begin(BME680_I2C_ADDR_SECONDARY, Wire);
+ iaqSensor.begin(BME68X_I2C_ADDR_LOW, Wire);
output = "\nBSEC library version " + String(iaqSensor.version.major) + "." + String(iaqSensor.version.minor) + "." + String(iaqSensor.version.major_bugfix) + "." + String(iaqSensor.version.minor_bugfix);
Serial.println(output);
checkIaqSensorStatus();
@@ -126,30 +126,30 @@ void loop() {
// Helper function definitions
void checkIaqSensorStatus(void)
{
- if (iaqSensor.status != BSEC_OK) {
- if (iaqSensor.status < BSEC_OK) {
- output = "BSEC error code : " + String(iaqSensor.status);
+ if (iaqSensor.bsecStatus != BSEC_OK) {
+ if (iaqSensor.bsecStatus < BSEC_OK) {
+ output = "BSEC error code : " + String(iaqSensor.bsecStatus);
Serial.println(output);
display.setCursor(0,0);
display.println(output);
display.display();
for (;;) delay(10);
} else {
- output = "BSEC warning code : " + String(iaqSensor.status);
+ output = "BSEC warning code : " + String(iaqSensor.bsecStatus);
Serial.println(output);
}
}
- if (iaqSensor.bme680Status != BME680_OK) {
- if (iaqSensor.bme680Status < BME680_OK) {
- output = "BME680 error code : " + String(iaqSensor.bme680Status);
+ if (iaqSensor.bme68xStatus != BME68X_OK) {
+ if (iaqSensor.bme68xStatus < BME68X_OK) {
+ output = "BME68X error code : " + String(iaqSensor.bme68xStatus);
Serial.println(output);
display.setCursor(0,0);
display.println(output);
display.display();
for (;;) delay(10);
} else {
- output = "BME680 warning code : " + String(iaqSensor.bme680Status);
+ output = "BME68X warning code : " + String(iaqSensor.bme68xStatus);
Serial.println(output);
}
}
diff --git a/Baudot_TTY/baudot_tty_GUI/code.py b/Baudot_TTY/baudot_tty_GUI/code.py
index 34d5c5bf4..774cbe238 100644
--- a/Baudot_TTY/baudot_tty_GUI/code.py
+++ b/Baudot_TTY/baudot_tty_GUI/code.py
@@ -85,7 +85,7 @@
dot = Circle(220, 60, 8, outline=VFD_GREEN, fill=VFD_BG)
screen.append(dot)
-clue.display.show(screen)
+clue.display.root_group = screen
# constants for sine wave generation
SIN_LENGTH = 100 # more is less choppy
diff --git a/Bricktunes_LEGO_Color_Synth/code.py b/Bricktunes_LEGO_Color_Synth/code.py
new file mode 100644
index 000000000..0942f4dbb
--- /dev/null
+++ b/Bricktunes_LEGO_Color_Synth/code.py
@@ -0,0 +1,142 @@
+# SPDX-FileCopyrightText: 2023 John Park for Adafruit
+# SPDX-License-Identifier: MIT
+
+# Bricktunes LEGO Color Synth
+# Feather RP2040 Prop-Maker + AS7341 Color Sensor
+# Color comparison code and chime library by CGrover
+
+import time
+import math
+import board
+import digitalio
+import audiobusio
+from adafruit_as7341 import AS7341, Gain
+import audiomixer
+from cedargrove_chime import Chime, Voice, Material, Striker
+
+DEBUG = False # Useful for tuning reference color values by printing them
+TOLERANCE = 800 # The color matching tolerance index (0 to 8 * max_sensor_count)
+
+sensor = AS7341(board.STEMMA_I2C())
+sensor.astep = 128 # (999) The integration time step size in 2.78 microsecond increments
+sensor.atime = 50 # The integration time step count.
+sensor.gain = Gain.GAIN_256X
+sensor.led_current = 4 # increments in units of 4
+sensor.led = True
+max_sensor_count = (sensor.astep + 1) * (sensor.atime + 1)
+
+# ===================================================
+# color lists as 8-channel tuples (channels[0:8])
+brick_full_spectrum_values = [
+ (94, 1310, 1736, 1075, 592, 437, 497, 383), # Blue
+ (148, 324, 838, 2577, 2363, 1259, 929, 819), # Bright Green
+ (381, 576, 850, 1619, 3688, 5532, 6291, 4250), # Bright Lt Orange
+ (404, 2300, 2928, 2385, 2679, 3804, 5576, 4284), # Bright Pink
+ (545, 1276, 1513, 1178, 2291, 6579, 6579, 6486), # Coral
+ (136, 1055, 1223, 745, 748, 768, 1205, 1100), # Dark Purple
+ (85, 731, 1375, 1604, 1019, 557, 533, 370), # Dark Turquoise
+ (451, 2758, 3786, 2880, 3007, 3064, 4539, 3656), # Lavender
+ (214, 300, 771, 1811, 3245, 2897, 2051, 1392), # Lime
+ (188, 341, 435, 507, 625, 1703, 4361, 3692), # Red
+ (182, 870, 1455, 1799, 2149, 1879, 1702, 1273), # Sand Green
+ (461, 497, 878, 2412, 4699, 5935, 6579, 4677) # Yellow
+]
+
+brick_color_names = [
+ "Blue",
+ "Bright Green",
+ "Bright Light Orange",
+ "Bright Pink",
+ "Coral",
+ "Dark Purple",
+ "Dark Turquoise",
+ "Lavender",
+ "Lime",
+ "Red",
+ "Sand Green",
+ "Yellow"
+]
+
+brick_states = [False] * (len(brick_color_names))
+gap_state = False
+
+# ===================================================
+# audio setup
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio_output = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(sample_rate=11020, buffer_size=4096, voice_count=1, channel_count=1)
+audio_output.play(mixer)
+mixer.voice[0].level = 0.50 # adjust this for overall volume
+
+brickscale = [
+ "C5", "D5", "E5", "F5", "G5", "A5", "B5",
+ "C6", "D6", "E6", "F6", "G6", "A6", "B6",
+ "C7", "D7", "E7", "F7", "G7", "A7", "B7",
+]
+
+# Instantiate the chime synthesizer with custom parameters
+chime = Chime(
+ mixer.voice[0],
+ scale=brickscale,
+ material=Material.Brass, # SteelEMT, Ceramic, Wood, Copper, Aluminum, Brass
+ striker=Striker.HardWood, # Metal, Plexiglas, SoftWood, HardWood
+ voice=Voice.Tubular, # bell, perfect, tubular
+ scale_offset=-16
+)
+
+# Play scale notes sequentially
+for index, note in enumerate(chime.scale):
+ chime.strike(note, 1.0)
+ time.sleep(0.1)
+time.sleep(1)
+
+def compare_n_channel_colors(color_1, color_2, tolerance=0):
+ """Compares two integer multichannel count tuples using an unweighted linear
+ Euclidean difference. If the color value difference is within the tolerance
+ band of the reference, the method returns True.
+ The difference value index `tolerance` is used to detect color similarity.
+ Value range is an integer value from 0 to
+ (maximum_channel_count * number_of_channels). Default is 0 (detects a
+ single color value)."""
+ # Create list of channel deltas using list comprehension
+ deltas = [((color_1[idx] - count) ** 2) for idx, count in enumerate(color_2)]
+ # Resolve squared deltas to a Euclidean difference
+ # pylint: disable=c-extension-no-member
+ delta_color = math.sqrt(sum(deltas))
+ return bool(delta_color <= tolerance)
+
+print("Bricktunes ready")
+
+
+while True:
+ sensor_color = sensor.all_channels
+ # don't bother to check comparison when we're looking at a gap between bricks
+ if sensor_color[0] <= 70: # this checks for a minimum value on one channel
+ if gap_state is False:
+ print("no brick...")
+ for i in range(len(brick_color_names)):
+ brick_states[i] = False
+ gap_state = True
+
+ else:
+ if DEBUG:
+ print(sensor_color)
+ for i in range(len(brick_full_spectrum_values)):
+ color_match = compare_n_channel_colors(
+ sensor_color,
+ brick_full_spectrum_values[i],
+ TOLERANCE
+ )
+
+ if color_match is True:
+ if brick_states[i] is False:
+ for n in range(5):
+ chime.strike(chime.scale[i+(n*2)], 1.0)
+ time.sleep(0.1)
+ brick_states[i] = True
+ gap_state = False
+ print("sensor color:", sensor_color, "| ref:", brick_full_spectrum_values[i])
+ print(brick_color_names[i])
+ break
diff --git a/Bubble_Table_IR_Control/code.py b/Bubble_Table_IR_Control/code.py
new file mode 100755
index 000000000..c59e22013
--- /dev/null
+++ b/Bubble_Table_IR_Control/code.py
@@ -0,0 +1,202 @@
+# SPDX-FileCopyrightText: 2017 John Park for Adafruit Industries
+# Modified 2023 by Erin St Blaine
+#
+# SPDX-License-Identifier: MIT
+
+
+import board
+import pulseio
+import neopixel
+import adafruit_irremote
+from rainbowio import colorwheel
+from adafruit_led_animation.sequence import AnimationSequence
+from adafruit_led_animation.animation.solid import Solid
+from adafruit_led_animation.animation.rainbow import Rainbow
+from adafruit_led_animation.animation.sparkle import Sparkle
+from adafruit_led_animation.animation.rainbowchase import RainbowChase
+from adafruit_led_animation.animation.rainbowcomet import RainbowComet
+from adafruit_led_animation.animation.chase import Chase
+from adafruit_led_animation.animation.comet import Comet
+from adafruit_led_animation.animation.pulse import Pulse
+from adafruit_led_animation.animation.SparklePulse import SparklePulse
+import adafruit_led_animation.color as color
+
+NUMBER_OF_PIXELS = 85
+pixels = neopixel.NeoPixel(board.D13, NUMBER_OF_PIXELS)
+
+# Define the brightness levels and their corresponding values
+# Start at a non-blinding brightness.
+BRIGHTNESS_LEVELS = (0.025, 0.05, 0.1, 0.2, 0.4, 0.6, 0.7, 0.8, 1.0)
+brightness_index = 2
+pixels.brightness = BRIGHTNESS_LEVELS[brightness_index]
+
+pulsein = pulseio.PulseIn(board.A0, maxlen=120, idle_state=True)
+decoder = adafruit_irremote.GenericDecode()
+
+SPEEDS = (0.25, 0.125, 0.1, 0.08, 0.05, 0.02, 0.01) # Customize speed levels here
+speed_index = 4
+
+def setup_animations():
+ """Set up all the available animations."""
+ # Animation Setup
+ rainbow = Rainbow(pixels, speed=SPEEDS[speed_index], period=2, name="rainbow", step=3)
+ sparkle = Sparkle(pixels, speed=SPEEDS[speed_index], color=color.WHITE, name="sparkle")
+ solid = Solid(pixels, color=colorwheel(0), name="solid")
+ # Make the Solid animation changeable quickly.
+ solid.speed = 0.01
+ off = Solid(pixels, color=color.BLACK, name="off")
+ rainbow = Rainbow(pixels, speed=SPEEDS[speed_index], period=6, name="rainbow", step=2.4)
+ rainbow_carousel = RainbowChase(pixels, speed=SPEEDS[speed_index], size=4, spacing=1, step=20)
+ party_chase = RainbowChase(pixels, speed=SPEEDS[speed_index], size=1, spacing=5, step=6)
+ rainbow_chase2 = RainbowChase(pixels, speed=SPEEDS[speed_index], size=10, spacing=1, step=18)
+ chase = Chase(pixels, speed=SPEEDS[speed_index], color=color.RED, size=1, spacing=6)
+ rainbow_comet2 = RainbowComet(
+ pixels, speed=0.02, tail_length=104, colorwheel_offset=80, bounce=False)
+ rainbow_comet3 = RainbowComet(
+ pixels, speed=SPEEDS[speed_index], tail_length=25,
+ colorwheel_offset=128, step=4, bounce=False)
+ lava = Comet(pixels, speed=SPEEDS[speed_index],
+ color=color.ORANGE, tail_length=40, bounce=False)
+ sparkle1 = Sparkle(pixels, speed=SPEEDS[speed_index], color=color.BLUE, num_sparkles=10)
+ pulse = Pulse(pixels, speed=0.1, color=color.AMBER, period=3)
+ sparkle_pulse = SparklePulse(pixels, speed=0.05, period=2, color=color.JADE, max_intensity=3)
+
+ # Animation Sequence Playlist -- rearrange to change the order of animations
+ # advance_interval is None, so the animations change only under user control.
+ all_animations = AnimationSequence(
+ rainbow,
+ rainbow_chase2,
+ rainbow_carousel,
+ party_chase,
+ rainbow_comet2,
+ rainbow_comet3,
+ sparkle_pulse,
+ pulse,
+ chase,
+ rainbow,
+ solid,
+ sparkle,
+ lava,
+ sparkle1,
+ off,
+ auto_clear=True,
+ auto_reset=True,
+ advance_interval=None,
+ )
+ return all_animations
+
+# IR Remote Mapping for the Adafruit mini IR remote
+# https://www.adafruit.com/product/389
+
+CMD_1 = 247 # 1: [255, 2, 247, 8]
+CMD_2 = 119 # 2: [255, 2, 119, 136]
+CMD_3 = 183 # 3: [255, 2, 183, 72]
+CMD_4 = 215 # 4: [255, 2, 215, 40]
+CMD_5 = 87 # 5: [255, 2, 87, 168]
+CMD_6 = 151 # 6: [255, 2, 151, 104]
+CMD_7 = 231 # 7: [255, 2, 231, 24]
+CMD_8 = 103 # 8: [255, 2, 103, 152]
+CMD_9 = 167 # 9: [255, 2, 167, 88]
+CMD_0 = 207 # 0: [255, 2, 207, 48]
+
+CMD_UP = 95 # ^ : [255, 2, 95, 160]
+CMD_DOWN = 79 # v : [255, 2, 79, 176]
+CMD_RIGHT = 175 # > : [255, 2, 175, 80]
+CMD_LEFT = 239 # < : [255, 2, 239, 16]
+
+CMD_ENTER_SAVE = 111 # Enter/Save: [255, 2, 111, 144]
+CMD_SETUP = 223 # Setup: [255, 2, 223, 32]
+CMD_STOP_MODE = 159 # Stop/Mode: [255, 2, 159, 96]
+CMD_BACK = 143 # Back: [255, 2, 143, 112]
+
+CMD_VOL_DOWN = 255 # Vol - : [255, 2, 255, 0]
+CMD_VOL_UP = 191 # Vol + : [255, 2, 191, 64]
+CMD_PLAY_PAUSE = 127 # Play/Pause: [255, 2, 127, 128]
+CMD_REPEAT = True # short code: repeat of previous command
+
+
+def read_command():
+ """Try to read an IR command. If none seen or if error, return None."""
+ try:
+ pulses = decoder.read_pulses(pulsein, blocking=False)
+ if pulses:
+ code = decoder.decode_bits(pulses)
+ if len(code) > 3:
+ print("Decoded:", code)
+ return code[2]
+ # if code is less than or equal to 3 characters long or no pulses received
+ return None
+ except adafruit_irremote.IRNECRepeatException: # unusual short code!
+ print("NEC repeat!")
+ return CMD_REPEAT
+ except adafruit_irremote.IRDecodeException as e: # failed to decode
+ print("Failed to decode:", e)
+ return None
+ except MemoryError as e:
+ print("Memory error: ", e)
+ return None
+
+SOLID_COLORS = {
+ CMD_0 : color.BLACK,
+ CMD_1 : color.RED,
+ CMD_2 : color.GREEN,
+ CMD_3 : color.WHITE,
+ CMD_4 : color.BLUE,
+ CMD_5 : color.PINK,
+ CMD_6 : color.YELLOW,
+ CMD_7 : color.PURPLE,
+ CMD_8 : color.TEAL,
+ CMD_9 : color.ORANGE,
+ }
+
+# main program
+
+animations = setup_animations()
+last_command = None
+
+while True:
+ command = read_command()
+ if command is None:
+ # Nothing read, just keep animating.
+ animations.animate() # Run one animation cycle.
+ continue
+
+ if command == CMD_REPEAT:
+ command = last_command
+
+ last_command = command
+ print("Command", command)
+
+
+ # See if the command was a number button. Fetch the animation color if it is.
+ solid_color = SOLID_COLORS.get(command, None)
+ if solid_color:
+ # Jump to the "solid" animation. Set its color to
+ # the chosen color.
+ animations.activate("solid")
+ animations.current_animation.color = solid_color
+ elif command == CMD_LEFT:
+ animations.previous()
+ elif command == CMD_RIGHT:
+ animations.next()
+ elif command == CMD_DOWN:
+ # Slow down current animation
+ if speed_index > 0:
+ speed_index -= 1
+ animations.current_animation.speed = SPEEDS[speed_index]
+ print("speed of current animation is now:", animations.current_animation.speed)
+ elif command == CMD_UP:
+ if speed_index < len(SPEEDS) - 1:
+ speed_index += 1
+ animations.current_animation.speed = SPEEDS[speed_index]
+ print("speed of current animation is now:", animations.current_animation.speed)
+ elif command == CMD_VOL_DOWN:
+ if brightness_index > 0:
+ brightness_index -= 1
+ pixels.brightness = BRIGHTNESS_LEVELS[brightness_index]
+ print("brightness:", pixels.brightness)
+ elif command == CMD_VOL_UP:
+ if brightness_index < len(BRIGHTNESS_LEVELS) - 1:
+ brightness_index += 1
+ pixels.brightness = BRIGHTNESS_LEVELS[brightness_index]
+ print("brightness:", pixels.brightness)
diff --git a/Buckaroo_Plant_Care_Bot/code.py b/Buckaroo_Plant_Care_Bot/code.py
index 44b2b4a4a..ca0938346 100644
--- a/Buckaroo_Plant_Care_Bot/code.py
+++ b/Buckaroo_Plant_Care_Bot/code.py
@@ -71,7 +71,7 @@
text_group.append(motor_label)
clue_display.append(text_group)
-board.DISPLAY.show(clue_display)
+board.DISPLAY.root_group = clue_display
motor = DigitalInOut(board.P2)
motor.direction = Direction.OUTPUT
diff --git a/Burning_Fire_Wizard_Staff/code.py b/Burning_Fire_Wizard_Staff/code.py
index 25d09c897..21cefea2d 100644
--- a/Burning_Fire_Wizard_Staff/code.py
+++ b/Burning_Fire_Wizard_Staff/code.py
@@ -71,7 +71,8 @@
wave_file = None
# Set up accelerometer on I2C bus, 4G range:
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
accel.range = adafruit_lis3dh.RANGE_4_G
diff --git a/CLUE_Altimeter/code.py b/CLUE_Altimeter/code.py
index 85f586e65..b627e7eb8 100755
--- a/CLUE_Altimeter/code.py
+++ b/CLUE_Altimeter/code.py
@@ -42,11 +42,11 @@
# create main display group
splash = displayio.Group()
-clue.display.show(splash)
+clue.display.root_group = splash
# background
bg_bmp, bg_pal = adafruit_imageload.load(
- "/network23.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette
+ "images/network23.bmp", bitmap=displayio.Bitmap, palette=displayio.Palette
)
for i, color in enumerate(bg_pal):
if color == 0xFF0000:
diff --git a/CLUE_Altimeter/network23.bmp b/CLUE_Altimeter/images/network23.bmp
similarity index 100%
rename from CLUE_Altimeter/network23.bmp
rename to CLUE_Altimeter/images/network23.bmp
diff --git a/CLUE_BBQ/code.py b/CLUE_BBQ/code.py
index d98db4c2b..96f10f0b8 100644
--- a/CLUE_BBQ/code.py
+++ b/CLUE_BBQ/code.py
@@ -53,7 +53,7 @@
title_label.y = 120
homescreen_screen.append(title_label)
-clue.display.show(homescreen_screen)
+clue.display.root_group = homescreen_screen
# Setup temperatures screen
temp_font = bitmap_font.load_font("/font/GothamBlack-25.bdf")
@@ -94,7 +94,7 @@
while True:
# re-display homescreen here
- clue.display.show(homescreen_screen)
+ clue.display.root_group = homescreen_screen
print("Scanning...")
for adv in ble.start_scan(ProvideServicesAdvertisement, timeout=5):
@@ -146,7 +146,7 @@
"Probe", i + 1, "is unplugged",
)
my_labels[i].text = " ---"
- clue.display.show(temperatures_screen)
+ clue.display.root_group = temperatures_screen
except _bleio.ConnectionError:
continue
diff --git a/CLUE_BLE_Morse_Code/code.py b/CLUE_BLE_Morse_Code/code.py
index 9c2d6f7e6..76bd78df8 100755
--- a/CLUE_BLE_Morse_Code/code.py
+++ b/CLUE_BLE_Morse_Code/code.py
@@ -39,7 +39,7 @@
# Display Stuff
display = clue.display
disp_group = displayio.Group()
-display.show(disp_group)
+display.root_group = disp_group
# Background BMP with the Morse Code cheat sheet
bmp, pal = adafruit_imageload.load("morse_bg.bmp",
diff --git a/CLUE_Dice_Roller/code.py b/CLUE_Dice_Roller/code.py
index 8099b5bbf..9885dc0d7 100644
--- a/CLUE_Dice_Roller/code.py
+++ b/CLUE_Dice_Roller/code.py
@@ -53,7 +53,7 @@
group.append(select_label)
group.append(roll_label)
-board.DISPLAY.show(group)
+board.DISPLAY.root_group = group
# Helper functions
diff --git a/CLUE_Egg_Drop/code.py b/CLUE_Egg_Drop/code.py
index 23e7c0433..aa3f7c171 100644
--- a/CLUE_Egg_Drop/code.py
+++ b/CLUE_Egg_Drop/code.py
@@ -62,10 +62,12 @@
splash.append(text_group)
# display everything so far
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
# connect to the accelerometer
-sensor = LSM6DS33(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+sensor = LSM6DS33(i2c)
# highest range for impacts!
sensor.accelerometer_range = AccelRange.RANGE_16G
# we'll read at about 1KHz
diff --git a/CLUE_Hand_Wash_Timer/code.py b/CLUE_Hand_Wash_Timer/code.py
index ad97412ff..55644829d 100644
--- a/CLUE_Hand_Wash_Timer/code.py
+++ b/CLUE_Hand_Wash_Timer/code.py
@@ -82,7 +82,7 @@
text_group.append(timer_label)
clue_display.append(text_group)
-clue.display.show(clue_display)
+clue.display.root_group = clue_display
def countdown(seconds):
for i in range(seconds):
diff --git a/CLUE_I_Ching/code.py b/CLUE_I_Ching/code.py
index 7bca44b27..a5089aa7c 100644
--- a/CLUE_I_Ching/code.py
+++ b/CLUE_I_Ching/code.py
@@ -80,7 +80,7 @@
# Set up main display group (splash)
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
# Add background and text label
splash.append(background)
diff --git a/CLUE_Light_Painter/boot.py b/CLUE_Light_Painter/boot.py
index 66363f782..6d7407bfc 100755
--- a/CLUE_Light_Painter/boot.py
+++ b/CLUE_Light_Painter/boot.py
@@ -21,5 +21,5 @@
IO.direction = digitalio.Direction.INPUT
IO.pull = digitalio.Pull.UP
-if IO.value: # No connection
- storage.remount('/', False) # Remount storage as read/write for painter
+if IO.value: # No connection
+ storage.remount('/', readonly=False) # Remount storage as read/write for painter
diff --git a/CLUE_Light_Painter/code.py b/CLUE_Light_Painter/code.py
index 0356ce356..2346a0506 100755
--- a/CLUE_Light_Painter/code.py
+++ b/CLUE_Light_Painter/code.py
@@ -122,7 +122,7 @@ def __init__(self, flip, path, tempfile, num_pixels, pixel_order,
if not self.images:
group = displayio.Group()
group.append(centered_label('NO IMAGES', 40, 3))
- board.DISPLAY.show(group)
+ board.DISPLAY.root_group = group
while True:
pass
@@ -206,7 +206,7 @@ def load_image(self):
#self.rect = Rect(-board.DISPLAY.width, 120,
# board.DISPLAY.width, 40, fill=0x00B000)
#group.append(self.rect)
- board.DISPLAY.show(group)
+ board.DISPLAY.root_group = group
# pylint: disable=eval-used
# (It's cool, is a 'trusted string' in the code)
@@ -227,7 +227,7 @@ def load_image(self):
except (MemoryError, BMPError):
group = displayio.Group()
group.append(centered_label('TOO BIG', 40, 3))
- board.DISPLAY.show(group)
+ board.DISPLAY.root_group = group
sleep(4)
board.DISPLAY.show(displayio.Group()) # Clear display
@@ -330,7 +330,7 @@ def make_ui_group(self, main_config, config_label, rect_val=None):
# Config label always appears as last item in group
# so calling func can pop() and replace it if need be.
group.append(centered_label(config_label, 30 if rect_val else 40, 3))
- board.DISPLAY.show(group)
+ board.DISPLAY.root_group = group
return group
@@ -365,7 +365,7 @@ def config_select(self, first_run=False):
if paint:
break # Exit loop, resume paint
else:
- board.DISPLAY.show(group) # Put config UI back up
+ board.DISPLAY.root_group = group # Put config UI back up
elif action_right is RichButton.HOLD:
break
elif action_left is RichButton.TAP:
diff --git a/CLUE_Metal_Detector/code.py b/CLUE_Metal_Detector/code.py
index 00d9fc742..6812cca68 100644
--- a/CLUE_Metal_Detector/code.py
+++ b/CLUE_Metal_Detector/code.py
@@ -49,7 +49,7 @@
import analogio
import ulab
-from displayio import Group
+from displayio import Group, CIRCUITPYTHON_TERMINAL
import terminalio
# These imports works on CLUE, CPB (and CPX on 5.x)
@@ -468,7 +468,7 @@ def sample_sum(pin, num):
magnet_circ_set(0)
# Start-up splash screen
-display.show(screen_group)
+display.root_group = screen_group
# Start-up splash screen
popup_text(show_text,
@@ -662,10 +662,10 @@ def sample_sum(pin, num):
if not screen_on or opt == 2: # Screen toggle
screen_on = not screen_on
if screen_on:
- display.show(screen_group)
+ display.root_group = screen_group
display.brightness = 1.0
else:
- display.show(None)
+ display.root_group = CIRCUITPYTHON_TERMINAL
display.brightness = 0.0
elif opt == 0: # Audio toggle
audio_on = not audio_on
diff --git a/CLUE_Metronome/code.py b/CLUE_Metronome/code.py
index 96059543d..818988de8 100644
--- a/CLUE_Metronome/code.py
+++ b/CLUE_Metronome/code.py
@@ -98,7 +98,7 @@
screen.append(increment_label)
# show the screen
-clue.display.show(screen)
+clue.display.root_group = screen
def metronome(accent): # Play metronome sound and flash display
diff --git a/CLUE_Milk_Checker/code.py b/CLUE_Milk_Checker/code.py
index b94dbc83c..b85a68c45 100644
--- a/CLUE_Milk_Checker/code.py
+++ b/CLUE_Milk_Checker/code.py
@@ -54,10 +54,12 @@
splash.append(message)
splash.append(tvoc)
splash.append(eco2)
-clue.display.show(splash)
+clue.display.root_group = splash
# setup SGP30 and wait for initial warm up
-sgp30 = adafruit_sgp30.Adafruit_SGP30(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c)
time.sleep(15)
# loop forever
diff --git a/CLUE_Rock_Paper_Scissors/advanced/rps_display.py b/CLUE_Rock_Paper_Scissors/advanced/rps_display.py
index 509399a74..b699418ec 100644
--- a/CLUE_Rock_Paper_Scissors/advanced/rps_display.py
+++ b/CLUE_Rock_Paper_Scissors/advanced/rps_display.py
@@ -82,7 +82,7 @@ def blankScreen(disp, pix):
if disp is None:
return
- disp.show(Group())
+ disp.root_group = Group()
class RPSDisplay():
@@ -200,7 +200,7 @@ def fadeUpDown(self, direction, duration=0.8, steps=10):
def showGroup(self, new_group):
self.disp_group = new_group
- self.disp.show(new_group)
+ self.disp.root_group = new_group
def emptyGroup(self, dio_group):
diff --git a/CLUE_Rock_Paper_Scissors/simple/code.py b/CLUE_Rock_Paper_Scissors/simple/code.py
index 7dbabc80f..3c412b28e 100644
--- a/CLUE_Rock_Paper_Scissors/simple/code.py
+++ b/CLUE_Rock_Paper_Scissors/simple/code.py
@@ -223,7 +223,7 @@ def flashWinner(c_idx, who):
opp_cursor_dob.y = top_y_pos
screen_group.append(opp_cursor_dob)
-display.show(screen_group)
+display.root_group = screen_group
# From adafruit_ble.advertising
MANUFACTURING_DATA_ADT = 0xFF
diff --git a/CLUE_Servo_Barometer/code.py b/CLUE_Servo_Barometer/code.py
index 6ea76d3d9..f616f6ccf 100644
--- a/CLUE_Servo_Barometer/code.py
+++ b/CLUE_Servo_Barometer/code.py
@@ -18,6 +18,7 @@
# bmp280 sensor setup
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
bmp280 = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
# change depending on your location's elevation
@@ -55,7 +56,7 @@
group.append(temp_data)
group.append(press_data)
-display.show(group)
+display.root_group = group
# function to convert celcius to fahrenheit
def c_to_f(temp):
diff --git a/CPB_AMS_Gizmo_BLE/code.py b/CPB_AMS_Gizmo_BLE/code.py
index f4f8c766a..cd8788f57 100755
--- a/CPB_AMS_Gizmo_BLE/code.py
+++ b/CPB_AMS_Gizmo_BLE/code.py
@@ -78,7 +78,7 @@ def set_status(label, action_text, player):
display = tft_gizmo.TFT_Gizmo()
group = displayio.Group()
-display.show(group)
+display.root_group = group
while True:
if not radio.connected:
diff --git a/CPB_ANCS/code.py b/CPB_ANCS/code.py
index 04c54d2a0..6c93b87a9 100644
--- a/CPB_ANCS/code.py
+++ b/CPB_ANCS/code.py
@@ -106,7 +106,7 @@ def wrap_in_tilegrid(filename:str):
display = tft_gizmo.TFT_Gizmo()
group = displayio.Group()
group.append(wrap_in_tilegrid("/ancs_connect.bmp"))
-display.show(group)
+display.root_group = group
current_notification = None
current_notifications = {}
diff --git a/CPB_Keybutton_BLE/code.py b/CPB_Keybutton_BLE/code.py
index 099fde538..05c9d27fb 100644
--- a/CPB_Keybutton_BLE/code.py
+++ b/CPB_Keybutton_BLE/code.py
@@ -10,6 +10,8 @@
import time
import board
from digitalio import DigitalInOut, Direction
+# Uncomment if setting .pull below.
+# from digitalio import Pull
import adafruit_ble
from adafruit_ble.advertising import Advertisement
@@ -32,6 +34,14 @@
button_4.direction = Direction.INPUT
button_5.direction = Direction.INPUT
+# NOTE: If you are not using buttons with built-in pullups, uncomment the five lines below,
+# and the `from digitalio import Pull` above.
+# button_1.pull = Pull.UP
+# button_2.pull = Pull.UP
+# button_3.pull = Pull.UP
+# button_4.pull = Pull.UP
+# button_5.pull = Pull.UP
+
hid = HIDService()
device_info = DeviceInfoService(software_revision=adafruit_ble.__version__,
diff --git a/CPBoxing_Glove_Tracker/code.py b/CPBoxing_Glove_Tracker/code.py
new file mode 100755
index 000000000..268e7b98b
--- /dev/null
+++ b/CPBoxing_Glove_Tracker/code.py
@@ -0,0 +1,86 @@
+# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+import os
+import time
+import ssl
+import math
+import board
+import microcontroller
+import wifi
+import socketpool
+import adafruit_minimqtt.adafruit_minimqtt as MQTT
+from adafruit_io.adafruit_io import IO_MQTT
+from adafruit_adxl34x import ADXL345
+from adafruit_lc709203f import LC709203F, PackSize
+
+aio_username = os.getenv('aio_username')
+aio_key = os.getenv('aio_key')
+
+# Wi-Fi
+try:
+ print("Connecting to %s" % os.getenv('CIRCUITPY_WIFI_SSID'))
+ wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+ print("Connected to %s!" % os.getenv('CIRCUITPY_WIFI_SSID'))
+# Wi-Fi connectivity fails with error messages, not specific errors, so this except is broad.
+except Exception as e: # pylint: disable=broad-except
+ print("Failed to connect to WiFi. Error:", e, "\nBoard will hard reset in 30 seconds.")
+ time.sleep(30)
+ microcontroller.reset()
+
+# Create a socket pool
+pool = socketpool.SocketPool(wifi.radio)
+
+# Initialize a new MQTT Client object
+mqtt_client = MQTT.MQTT(
+ broker="io.adafruit.com",
+ username= aio_username,
+ password= aio_key,
+ socket_pool=pool,
+ ssl_context=ssl.create_default_context(),
+)
+
+# Initialize Adafruit IO MQTT "helper"
+io = IO_MQTT(mqtt_client)
+
+try:
+ if not io.is_connected:
+ # Connect the client to the MQTT broker.
+ print("Connecting to Adafruit IO...")
+ io.connect()
+ print("Connected to Adafruit IO!")
+except Exception as e: # pylint: disable=broad-except
+ print("Failed to get or send data, or connect. Error:", e,
+ "\nBoard will hard reset in 30 seconds./n")
+ time.sleep(30)
+ microcontroller.reset()
+
+threshold = 20 # set threshold value here
+time_interval = 0.5 # set the time interval in seconds
+
+# create the I2C bus object
+i2c = board.STEMMA_I2C()
+
+# For ADXL345
+accelerometer = ADXL345(i2c)
+
+# To monitor the battery
+battery_monitor = LC709203F(i2c)
+battery_monitor.pack_size = PackSize.MAH400
+
+t0 = time.monotonic()
+
+while True:
+ x, y, z = accelerometer.acceleration
+ t1 = time.monotonic()
+ dt = t1 - t0
+
+ total_acceleration = math.sqrt(x**2 + y**2 + z**2)
+ if total_acceleration >= threshold:
+ print("Battery Percent: {:.2f} %".format(battery_monitor.cell_percent))
+ print("Collision strength: %.2f" % total_acceleration)
+ io.publish("punch-strength", total_acceleration)
+
+ # add code here to trigger an event or alert the user
+ t0 = t1
+ time.sleep(time_interval)
diff --git a/CPX_Simple_Simon/code.py b/CPX_Simple_Simon/code.py
index 259f2e639..b53e1185c 100644
--- a/CPX_Simple_Simon/code.py
+++ b/CPX_Simple_Simon/code.py
@@ -14,7 +14,7 @@
import math
import board
from analogio import AnalogIn
-from adafruit_circuitplayground.express import cpx
+from adafruit_circuitplayground import cp
FAILURE_TONE = 100
SEQUENCE_DELAY = 0.8
@@ -30,56 +30,51 @@
1 : { 'pads':(4,5), 'pixels':(0,1,2), 'color':0x00FF00, 'freq':415 },
2 : { 'pads':(6,7), 'pixels':(2,3,4), 'color':0xFFFF00, 'freq':252 },
3 : { 'pads':(1, ), 'pixels':(5,6,7), 'color':0x0000FF, 'freq':209 },
- 4 : { 'pads':(2,3), 'pixels':(7,8,9), 'color':0xFF0000, 'freq':310 },
+ 4 : { 'pads':(2,3), 'pixels':(7,8,9), 'color':0xFF0000, 'freq':310 },
}
def choose_skill_level():
# Default
skill_level = 1
# Loop until button B is pressed
- while not cpx.button_b:
+ while not cp.button_b:
# Button A increases skill level setting
- if cpx.button_a:
+ if cp.button_a:
skill_level += 1
skill_level = skill_level if skill_level < 5 else 1
# Indicate current skill level
- cpx.pixels.fill(0)
+ cp.pixels.fill(0)
for p in range(skill_level):
- cpx.pixels[p] = 0xFFFFFF
+ cp.pixels[p] = 0xFFFFFF
time.sleep(DEBOUNCE)
return skill_level
def new_game(skill_level):
# Seed the random function with noise
- a4 = AnalogIn(board.A4)
- a5 = AnalogIn(board.A5)
- a6 = AnalogIn(board.A6)
- a7 = AnalogIn(board.A7)
+ with AnalogIn(board.A4) as a4, AnalogIn(board.A5) as a5, AnalogIn(board.A6) as a6:
+ seed = a4.value
+ seed += a5.value
+ seed += a6.value
- seed = a4.value
- seed += a5.value
- seed += a6.value
- seed += a7.value
+ random.seed(seed)
- random.seed(seed)
-
- # Populate the game sequence
- return [random.randint(1,4) for i in range(SEQUENCE_LENGTH[skill_level])]
+ # Populate the game sequence
+ return [random.randint(1,4) for i in range(SEQUENCE_LENGTH[skill_level])]
def indicate_button(button, duration):
# Turn them all off
- cpx.pixels.fill(0)
+ cp.pixels.fill(0)
# Turn on the ones for the given button
for p in button['pixels']:
- cpx.pixels[p] = button['color']
+ cp.pixels[p] = button['color']
# Play button tone
if button['freq'] == None:
time.sleep(duration)
else:
- cpx.play_tone(button['freq'], duration)
+ cp.play_tone(button['freq'], duration)
# Turn them all off again
- cpx.pixels.fill(0)
-
+ cp.pixels.fill(0)
+
def show_sequence(sequence, step):
# Set tone playback duration based on current location
if step <= 5:
@@ -88,21 +83,21 @@ def show_sequence(sequence, step):
duration = 0.320
else:
duration = 0.220
-
+
# Play back sequence up to current step
for b in range(step):
time.sleep(0.05)
- indicate_button(SIMON_BUTTONS[sequence[b]], duration)
+ indicate_button(SIMON_BUTTONS[sequence[b]], duration)
def cap_map(b):
- if b == 1: return cpx.touch_A1
- if b == 2: return cpx.touch_A2
- if b == 3: return cpx.touch_A3
- if b == 4: return cpx.touch_A4
- if b == 5: return cpx.touch_A5
- if b == 6: return cpx.touch_A6
- if b == 7: return cpx.touch_A7
-
+ if b == 1: return cp.touch_A1
+ if b == 2: return cp.touch_A2
+ if b == 3: return cp.touch_A3
+ if b == 4: return cp.touch_A4
+ if b == 5: return cp.touch_A5
+ if b == 6: return cp.touch_A6
+ if b == 7: return cp.touch_TX
+
def get_button_press():
# Loop over all the buttons
for button in SIMON_BUTTONS.values():
@@ -115,61 +110,61 @@ def get_button_press():
def game_lost(step):
# Show button that should have been pressed
- cpx.pixels.fill(0)
+ cp.pixels.fill(0)
for p in SIMON_BUTTONS[sequence[step]]['pixels']:
- cpx.pixels[p] = SIMON_BUTTONS[sequence[step]]['color']
-
+ cp.pixels[p] = SIMON_BUTTONS[sequence[step]]['color']
+
# Play sad sound :(
- cpx.play_tone(FAILURE_TONE, 1.5)
-
+ cp.play_tone(FAILURE_TONE, 1.5)
+
# And just sit here until reset
while True:
pass
-
+
def game_won():
# Play 'razz' special victory signal
for i in range(3):
- indicate_button(SIMON_BUTTONS[4], 0.1)
- indicate_button(SIMON_BUTTONS[2], 0.1)
- indicate_button(SIMON_BUTTONS[3], 0.1)
- indicate_button(SIMON_BUTTONS[1], 0.1)
- indicate_button(SIMON_BUTTONS[4], 0.1)
+ indicate_button(SIMON_BUTTONS[4], 0.1)
+ indicate_button(SIMON_BUTTONS[2], 0.1)
+ indicate_button(SIMON_BUTTONS[3], 0.1)
+ indicate_button(SIMON_BUTTONS[1], 0.1)
+ indicate_button(SIMON_BUTTONS[4], 0.1)
indicate_button(SIMON_BUTTONS[2], 0.1)
# Change tones to failure tone
for button in SIMON_BUTTONS.values():
button['freq'] = FAILURE_TONE
-
+
# Continue for another 0.8 seconds
for i in range(2):
- indicate_button(SIMON_BUTTONS[3], 0.1)
- indicate_button(SIMON_BUTTONS[1], 0.1)
- indicate_button(SIMON_BUTTONS[4], 0.1)
- indicate_button(SIMON_BUTTONS[2], 0.1)
-
+ indicate_button(SIMON_BUTTONS[3], 0.1)
+ indicate_button(SIMON_BUTTONS[1], 0.1)
+ indicate_button(SIMON_BUTTONS[4], 0.1)
+ indicate_button(SIMON_BUTTONS[2], 0.1)
+
# Change tones to silence
for button in SIMON_BUTTONS.values():
button['freq'] = None
-
+
# Loop lights forever
while True:
- indicate_button(SIMON_BUTTONS[3], 0.1)
- indicate_button(SIMON_BUTTONS[1], 0.1)
- indicate_button(SIMON_BUTTONS[4], 0.1)
- indicate_button(SIMON_BUTTONS[2], 0.1)
-
-# Initialize setup
-cpx.pixels.fill(0)
-cpx.pixels[0] = 0xFFFFFF
+ indicate_button(SIMON_BUTTONS[3], 0.1)
+ indicate_button(SIMON_BUTTONS[1], 0.1)
+ indicate_button(SIMON_BUTTONS[4], 0.1)
+ indicate_button(SIMON_BUTTONS[2], 0.1)
+
+# Initialize setup
+cp.pixels.fill(0)
+cp.pixels[0] = 0xFFFFFF
skill_level = choose_skill_level()
sequence = new_game(skill_level)
current_step = 1
-#Loop forever
+# Loop forever
while True:
# Show sequence up to current step
show_sequence(sequence, current_step)
-
+
# Read player button presses
for step in range(current_step):
start_guess_time = time.monotonic()
@@ -177,12 +172,12 @@ def game_won():
while (time.monotonic() - start_guess_time < GUESS_TIMEOUT) and (guess == None):
guess = get_button_press()
if not guess == SIMON_BUTTONS[sequence[step]]:
- game_lost(sequence[step])
+ game_lost(step)
# Advance the game forward
current_step += 1
if current_step > len(sequence):
game_won()
-
- # Small delay before continuing
+
+ # Small delay before continuing
time.sleep(SEQUENCE_DELAY)
diff --git a/Canary_Nightlight/code.py b/Canary_Nightlight/code.py
new file mode 100755
index 000000000..7709fadf2
--- /dev/null
+++ b/Canary_Nightlight/code.py
@@ -0,0 +1,308 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Canary Day and Night Light with Optional Network-Down Detection
+
+This project uses the QT Py ESP32-S3 with the NeoPixel 5x5 LED Grid BFF, along with
+a 3D printed bird. The LEDs light up different colors based on the time.
+
+In the event that the internet connection fails, it will begin blinking red to notify you.
+If the initial test ping fails, and the subsequent pings fail over 30 times, the board
+will reset. Otherwise, the blinking will continue until the connection is back up. This
+feature is enabled by default. It can easily be disabled at the beginning of the code.
+"""
+import os
+import ssl
+import time
+import ipaddress
+import supervisor
+import board
+import wifi
+import microcontroller
+import socketpool
+import adafruit_requests
+import neopixel
+from adafruit_io.adafruit_io import IO_HTTP
+
+# ============ CUSTOMISATIONS ============
+# Network-down detection enable or disable.
+# By default, the network-down detection code, and the code that blinks when the
+# network is down, are both enabled. If you wish to disable this feature,
+# including the blinking, update this to False.
+NETWORK_DOWN_DETECTION = True
+
+# The basic canary colors.
+# Red light at night is more conducive to sleep. Blue light in the morning is more
+# conducive to waking up. The sleep color defaults to red to promote sleep. The wake
+# color defaults to blue to promote wakefulness.
+SLEEP_COLOR = (255, 0, 0) # Red
+WAKE_COLOR = (0, 0, 255) # Blue
+
+# Sleep time.
+# This is the hour in 24-hour time at which the light should change to the
+# desired color for the time you intend to sleep.
+# Must be an integer between 0 and 23. Defaults to 20 (8pm).
+SLEEP_TIME = 20
+
+# Wake time.
+# This is the hour in 24-hour time at which the light should change to the
+# desired color for the time you intend to be awake.
+# Must be an integer between 0 and 23. Defaults to 6 (6am).
+WAKE_TIME = 6
+
+# Canary brightness customisation.
+# Brightness must be a float or integer between 0.0 and 1.0, where 0.0 is off, and 1.0 is max.
+# This is the brightness of the canary during sleep time. It defaults to 0.2, or "20%".
+# Increase or decrease this value to change the brightness.
+SLEEP_BRIGHTNESS = 0.2
+# This is the brightness of the canary during wake time. It defaults to 0.7, or "70%".
+# Increase or decrease this value to change the brightness.
+WAKE_BRIGHTNESS = 0.7
+
+# Time check interval.
+# This sets the time interval at which the code checks Adafruit IO for the current time.
+# This is included because Adafruit IO has rate limiting. It ensures that you do not
+# hit the rate limit, and the time check does not get throttled.
+# Defaults to 300 seconds (5 minutes). Must be an integer equal to or greater than 300.
+# Increase this value to increase the time check interval. Do not decrease this value!
+TIME_CHECK_INTERVAL = 300
+
+# Checks whether the time check interval is below the minimum value and an integer.
+if TIME_CHECK_INTERVAL < 300 or isinstance(TIME_CHECK_INTERVAL, float):
+ # If is below the minimum or a float, raise this error and stop the code.
+ raise ValueError("TIME_CHECK_INTERVAL must be a integer, and greater than 300!")
+
+# Ping interval while ping is successful.
+# This is the interval at which the code will send a ping while the network is up and the pings
+# are successful. If for any reason you would prefer to slow down the ping interval, this value
+# can be updated. Defaults to 1 second. Must be an integer equal to or greater than 1. Increase
+# this value to increase the ping interval time. Do not decrease this value!
+UP_PING_INTERVAL = 1
+
+# Checks whether the successful ping interval is below the minimum value and an integer.
+if UP_PING_INTERVAL < 1 or isinstance(UP_PING_INTERVAL, float):
+ # If is below the minimum or a float, raise this error and stop the code.
+ raise ValueError("UP_PING_INTERVAL must be a integer, and greater than 1!")
+
+# The blink color.
+# This is the color that the canary will blink to notify you that the network is down.
+# Defaults to red.
+BLINK_COLOR = (255, 0, 0)
+
+# Consecutive ping fail to blink.
+# This value is the number of times ping will consecutively fail before the canary begins blinking.
+# If the blinking is happening too often, or if the network is often flaky, this value can be
+# increased to extend the number of failures it takes to begin blinking.
+# Defaults to 10. Must be an integer greater than 1.
+CONSECUTIVE_PING_FAIL_TO_BLINK = 10
+
+# The amount of time in seconds that needs to pass while the network is down AND
+# NETWORK_DOWN_DETECTION is DISABLED before the board resets to try again.
+# Defaults to 900 seconds, or 20 minutes. Must be an integer. Increase or decrease
+# this value to alter how long the network should be down in this specific case
+# before the board resets.
+NETWORK_DOWN_RELOAD_TIME = 900
+
+# IP address.
+# This is the IP address used to ping to verify that network connectivity is still present.
+# To switch to a different IP, update the following. Must be a valid IPV4 address as a
+# string (in quotes). Defaults to one of the OpenDNS IPs.
+PING_IP = "208.67.222.222"
+
+# ============ HARDWARE AND CODE SET UP ============
+# Instantiate the NeoPixel object.
+pixels = neopixel.NeoPixel(board.A3, 25)
+
+
+# Create helper functions
+def reload_on_error(delay, error_content=None, reload_type="reload"):
+ """
+ Reset the board when an error is encountered.
+
+ :param float delay: The delay in seconds before the board should reset.
+ :param Exception error_content: The error encountered. Used to print the error before reset.
+ :param str reload_type: The type of reload desired. Defaults to "reload", which invokes
+ ``supervisor.reload()`` to soft-reload the board. To hard reset
+ the board, set this to "reset", which invokes
+ ``microcontroller.reset()``.
+ """
+ if str(reload_type).lower().strip() not in ["reload", "reset"]:
+ raise ValueError("Invalid reload type:", reload_type)
+ if error_content:
+ print("Error:\n", str(error_content))
+ if delay:
+ print(
+ f"{reload_type[0].upper() + reload_type[1:]} microcontroller in {delay} seconds."
+ )
+ time.sleep(delay)
+ if reload_type == "reload":
+ supervisor.reload()
+ if reload_type == "reset":
+ microcontroller.reset()
+
+
+def color_time(current_hour):
+ """
+ Verifies what color the LEDs should be based on the time.
+
+ :param current_hour: Provide a time, hour only. The `tm_hour` part of the
+ `io.receive_time()` object is acceptable here.
+ """
+ if WAKE_TIME < SLEEP_TIME:
+ if WAKE_TIME <= current_hour < SLEEP_TIME:
+ pixels.brightness = WAKE_BRIGHTNESS
+ return WAKE_COLOR
+ pixels.brightness = SLEEP_BRIGHTNESS
+ return SLEEP_COLOR
+ if SLEEP_TIME <= current_hour < WAKE_TIME:
+ pixels.brightness = SLEEP_BRIGHTNESS
+ return SLEEP_COLOR
+ pixels.brightness = WAKE_BRIGHTNESS
+ return WAKE_COLOR
+
+
+def blink(color):
+ """
+ Blink the NeoPixel LEDs a specific color.
+
+ :param tuple color: The color the LEDs will blink.
+ """
+ if color_time(sundial.tm_hour) == SLEEP_COLOR:
+ pixels.brightness = SLEEP_BRIGHTNESS
+ else:
+ pixels.brightness = WAKE_BRIGHTNESS
+ pixels.fill(color)
+ time.sleep(0.5)
+ pixels.fill((0, 0, 0))
+ time.sleep(0.5)
+
+
+# Connect to WiFi. This process can fail for various reasons. It is included in a try/except
+# block to ensure the project continues running when unattended.
+try:
+ wifi.radio.connect(os.getenv("wifi_ssid"), os.getenv("wifi_password"))
+ pool = socketpool.SocketPool(wifi.radio)
+ requests = adafruit_requests.Session(pool, ssl.create_default_context())
+except Exception as error: # pylint: disable=broad-except
+ # The exceptions raised by the `wifi` module are not always clear. If you're receiving errors,
+ # check your SSID and password before continuing.
+ print("Wifi connection failed.")
+ reload_on_error(5, error)
+
+# Set up IP address to use for pinging, as defined above.
+ip_address = ipaddress.IPv4Address(PING_IP)
+# Set up ping, and send initial ping.
+wifi_ping = wifi.radio.ping(ip=ip_address)
+# If the initial ping is unsuccessful, print the message.
+if wifi_ping is None:
+ print("Set up test-ping failed.")
+ # Set `initial_ping` to False to indicate the failure.
+ initial_ping = False
+else:
+ # Otherwise, print this message.
+ print("Set up test-ping successful.")
+ # Set `initial_ping` to True to indicate success.
+ initial_ping = True
+
+# Set up Adafruit IO. This will provide the current time through `io.receive_time()`.
+io = IO_HTTP(os.getenv("aio_username"), os.getenv("aio_key"), requests)
+
+# Retrieve the time on startup. This is included to verify that the Adafruit IO set
+# up was successful. This process can fail for various reasons. It is included in a
+# try/except block to ensure the project continues to run when unattended.
+try:
+ sundial = io.receive_time() # Create the sundial variable to keep the time.
+except Exception as error: # pylint: disable=broad-except
+ # If the time retrieval fails with an error, print the message.
+ print("Adafruit IO set up and/or time retrieval failed.")
+ # Then wait 5 seconds, and soft reload the board.
+ reload_on_error(5, error)
+
+# Initialise various time tracking variables.
+check_time = 0
+network_down_time = time.time()
+ping_time = 0
+ping_fail_time = time.time()
+
+# Initialise network check variable.
+network_check = 1
+
+# Initialise ping fail count tracking.
+ping_fail_count = 0
+
+# ============ LOOP ============
+while True:
+ # Resets current_time to the current second every time through the loop.
+ current_time = time.time()
+ # WiFi and IO connections can fail arbitrarily. The bulk of the loop is included in a
+ # try/except block to ensure the project will continue to run unattended if any
+ # failures do occur.
+ try:
+ # If this is the first run of the code or the time check interval has passed, continue.
+ if not check_time or current_time - check_time >= TIME_CHECK_INTERVAL:
+ # Send a single ping to test for network connectivity.
+ network_check = wifi.radio.ping(ip=ip_address)
+ # If there is network connectivity, run the time check code.
+ if network_check is not None:
+ # Reset `check_time` to continue tracking.
+ check_time = time.time()
+ # Retrieve the time and save it to `sundial`.
+ sundial = io.receive_time()
+ # Print the current date and time to the serial console.
+ print(f"LED color time-check. Date and time: {sundial.tm_year}-{sundial.tm_mon}-" +
+ f"{sundial.tm_mday} {sundial.tm_hour}:{sundial.tm_min:02}")
+ # Provide the current hour to the `color_time` function. The returned color is
+ # provided to `pixels.fill()` to set the LED color.
+ pixels.fill(color_time(sundial.tm_hour))
+ else:
+ print("Network check ping failed.")
+
+ # If network down detection is disabled AND the network check ping failed
+ # AND the specified network down reload time passed: print the message,
+ # wait 3 seconds, and hard reset the board.
+ if not NETWORK_DOWN_DETECTION and network_check is None and \
+ current_time - network_down_time > NETWORK_DOWN_RELOAD_TIME:
+ print(f"Network check ping has failed for over {NETWORK_DOWN_RELOAD_TIME} seconds.")
+ reload_on_error(3, reload_type="reset")
+
+ # If network down detection is enabled, run the rest of the code.
+ if NETWORK_DOWN_DETECTION:
+ # If this is the first run of the code or up ping interval` time has passed, continue.
+ if not ping_time or current_time - ping_time >= UP_PING_INTERVAL:
+ # Reset `ping_time` to continue tracking.
+ ping_time = time.time()
+ # Ping to verify network connection.
+ wifi_ping = wifi.radio.ping(ip=ip_address)
+ # If the ping is successful, set the fail count to 0, and print IP and ping time.
+ if wifi_ping is not None:
+ ping_fail_count = 0
+ print(f"Pinging {ip_address}: {wifi_ping} ms")
+
+ # If the ping has failed, and it's been one second, continue with this code.
+ if wifi_ping is None and current_time - ping_fail_time >= 1:
+ # Reset `ping_fail_time` to continue tracking.
+ ping_fail_time = time.time()
+ # Add one to the failure count tracking.
+ ping_fail_count += 1
+ # Print the ping failure count.
+ print(f"Ping failed {ping_fail_count} times")
+ # If the ping fail count exceeds the value defined above, begin blinking the LED
+ # to indicate that the network is down.
+ if ping_fail_count > CONSECUTIVE_PING_FAIL_TO_BLINK:
+ blink(BLINK_COLOR)
+ # If the initial setup ping failed, it means the network connection was failing
+ # from the beginning, and might require reloading the board. So, if the initial
+ # ping failed and the ping_fail_count is greater than 30, immediately soft reload
+ # the board.
+ if not initial_ping and ping_fail_count > 30:
+ reload_on_error(0)
+ # If the initial ping succeeded, the blinking will continue until the connection
+ # is reestablished and the pings are once again successful.
+
+ # ============ ERROR HANDLING ============
+ # Since network-related code can fail arbitrarily in a variety of ways, this final block is
+ # included to reset the board when an error is encountered.
+ # When the error is thrown, wait 10 seconds, and hard reset the board.
+ except Exception as error: # pylint: disable=broad-except
+ reload_on_error(10, error, reload_type="reset")
diff --git a/ChatGPT_Bear/Enclosure/3MF_Files.zip b/ChatGPT_Bear/Enclosure/3MF_Files.zip
new file mode 100644
index 000000000..1a7539092
Binary files /dev/null and b/ChatGPT_Bear/Enclosure/3MF_Files.zip differ
diff --git a/ChatGPT_Bear/Enclosure/CAD_Files.zip b/ChatGPT_Bear/Enclosure/CAD_Files.zip
new file mode 100644
index 000000000..367befa10
Binary files /dev/null and b/ChatGPT_Bear/Enclosure/CAD_Files.zip differ
diff --git a/ChatGPT_Bear/Enclosure/STL_Files.zip b/ChatGPT_Bear/Enclosure/STL_Files.zip
new file mode 100644
index 000000000..d95fd9242
Binary files /dev/null and b/ChatGPT_Bear/Enclosure/STL_Files.zip differ
diff --git a/ChatGPT_Bear/assistant.py b/ChatGPT_Bear/assistant.py
new file mode 100644
index 000000000..e5dae68ee
--- /dev/null
+++ b/ChatGPT_Bear/assistant.py
@@ -0,0 +1,284 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import threading
+import os
+import sys
+
+from datetime import datetime, timedelta
+from queue import Queue
+import time
+import random
+from tempfile import NamedTemporaryFile
+
+import azure.cognitiveservices.speech as speechsdk
+import speech_recognition as sr
+import openai
+
+import board
+import digitalio
+from adafruit_motorkit import MotorKit
+
+# ChatGPT Parameters
+SYSTEM_ROLE = (
+ "You are a helpful voice assistant in the form of a talking teddy bear"
+ " that answers questions and gives information"
+)
+CHATGPT_MODEL = "gpt-3.5-turbo"
+WHISPER_MODEL = "whisper-1"
+
+# Azure Parameters
+AZURE_SPEECH_VOICE = "en-GB-OliverNeural"
+DEVICE_ID = None
+
+# Speech Recognition Parameters
+ENERGY_THRESHOLD = 1000 # Energy level for mic to detect
+PHRASE_TIMEOUT = 3.0 # Space between recordings for sepating phrases
+RECORD_TIMEOUT = 30
+
+# Motor Parameters
+ARM_MOVEMENT_TIME = 0.5
+BASE_MOUTH_DURATION = 0.2 # A higher number means slower mouth movement
+SPEECH_VARIANCE = 0.1 # Higher allows more mouth movement variance.
+ # It pauses for BASE_MOUTH_DURATION ± SPEECH_VARIANCE
+MOTOR_DUTY_CYCLE = 1.0 # Lower provides less power to the motors
+
+# Import keys from environment variables
+openai.api_key = os.environ.get("OPENAI_API_KEY")
+speech_key = os.environ.get("SPEECH_KEY")
+service_region = os.environ.get("SPEECH_REGION")
+
+if openai.api_key is None or speech_key is None or service_region is None:
+ print(
+ "Please set the OPENAI_API_KEY, SPEECH_KEY, and SPEECH_REGION environment variables first."
+ )
+ sys.exit(1)
+
+speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
+speech_config.speech_synthesis_voice_name = AZURE_SPEECH_VOICE
+
+
+def sendchat(prompt):
+ completion = openai.ChatCompletion.create(
+ model=CHATGPT_MODEL,
+ messages=[
+ {"role": "system", "content": SYSTEM_ROLE},
+ {"role": "user", "content": prompt},
+ ],
+ )
+ # Send the heard text to ChatGPT and return the result
+ return completion.choices[0].message.content
+
+
+def transcribe(wav_data):
+ # Read the transcription.
+ print("Transcribing...")
+ attempts = 0
+ while attempts < 3:
+ try:
+ with NamedTemporaryFile(suffix=".wav") as temp_file:
+ result = openai.Audio.translate_raw(
+ WHISPER_MODEL, wav_data, temp_file.name
+ )
+ return result["text"].strip()
+ except (openai.error.ServiceUnavailableError, openai.error.APIError):
+ time.sleep(3)
+ attempts += 1
+ return "I wasn't able to understand you. Please repeat that."
+
+
+class Listener:
+ def __init__(self):
+ self.listener_handle = None
+ self.recognizer = sr.Recognizer()
+ self.recognizer.energy_threshold = ENERGY_THRESHOLD
+ self.recognizer.dynamic_energy_threshold = False
+ self.recognizer.pause_threshold = 1
+ self.last_sample = bytes()
+ self.phrase_time = datetime.utcnow()
+ self.phrase_timeout = PHRASE_TIMEOUT
+ self.phrase_complete = False
+ # Thread safe Queue for passing data from the threaded recording callback.
+ self.data_queue = Queue()
+ self.mic_dev_index = None
+
+ def listen(self):
+ if not self.listener_handle:
+ with sr.Microphone() as source:
+ print(source.stream)
+ self.recognizer.adjust_for_ambient_noise(source)
+ audio = self.recognizer.listen(source, timeout=RECORD_TIMEOUT)
+ data = audio.get_raw_data()
+ self.data_queue.put(data)
+
+ def record_callback(self, _, audio: sr.AudioData) -> None:
+ # Grab the raw bytes and push it into the thread safe queue.
+ data = audio.get_raw_data()
+ self.data_queue.put(data)
+
+ def speech_waiting(self):
+ return not self.data_queue.empty()
+
+ def get_speech(self):
+ if self.speech_waiting():
+ return self.data_queue.get()
+ return None
+
+ def get_audio_data(self):
+ now = datetime.utcnow()
+ if self.speech_waiting():
+ self.phrase_complete = False
+ if self.phrase_time and now - self.phrase_time > timedelta(
+ seconds=self.phrase_timeout
+ ):
+ self.last_sample = bytes()
+ self.phrase_complete = True
+ self.phrase_time = now
+
+ # Concatenate our current audio data with the latest audio data.
+ while self.speech_waiting():
+ data = self.get_speech()
+ self.last_sample += data
+
+ # Use AudioData to convert the raw data to wav data.
+ with sr.Microphone() as source:
+ audio_data = sr.AudioData(
+ self.last_sample, source.SAMPLE_RATE, source.SAMPLE_WIDTH
+ )
+ return audio_data
+
+ return None
+
+
+class Bear:
+ def __init__(self, azure_speech_config):
+ kit = MotorKit(i2c=board.I2C())
+ self._arms_motor = kit.motor1
+ self._mouth_motor = kit.motor2
+
+ # Setup Foot Button
+ self._foot_button = digitalio.DigitalInOut(board.D16)
+ self._foot_button.direction = digitalio.Direction.INPUT
+ self._foot_button.pull = digitalio.Pull.UP
+
+ self.do_mouth_movement = False
+ self._mouth_thread = threading.Thread(target=self.move_mouth, daemon=True)
+ self._mouth_thread.start()
+ if DEVICE_ID is None:
+ audio_config = speechsdk.audio.AudioOutputConfig(use_default_speaker=True)
+ else:
+ audio_config = speechsdk.audio.AudioOutputConfig(device_name=DEVICE_ID)
+ self._speech_synthesizer = speechsdk.SpeechSynthesizer(
+ speech_config=azure_speech_config, audio_config=audio_config
+ )
+
+ self._speech_synthesizer.synthesizing.connect(self.start_moving_mouth)
+ self._speech_synthesizer.synthesis_completed.connect(self.stop_moving_mouth)
+
+ def start_moving_mouth(self, _event):
+ self.do_mouth_movement = True
+
+ def stop_moving_mouth(self, _event):
+ self.do_mouth_movement = False
+
+ def deinit(self):
+ self.do_mouth_movement = False
+ self._mouth_thread.join()
+ self._arms_motor.throttle = None
+ self._mouth_motor.throttle = None
+ self._speech_synthesizer.synthesis_started.disconnect_all()
+ self._speech_synthesizer.synthesis_completed.disconnect_all()
+
+ def _move_arms_motor(self, dir_up=True):
+ direction = -1 if dir_up else 1
+ self._arms_motor.throttle = MOTOR_DUTY_CYCLE * direction
+ time.sleep(ARM_MOVEMENT_TIME)
+ # Remove Power from the motor to avoid overheating
+ self._arms_motor.throttle = None
+
+ def _move_mouth_motor(self, dir_open=True):
+ duration = (
+ BASE_MOUTH_DURATION
+ + random.random() * SPEECH_VARIANCE
+ - (SPEECH_VARIANCE / 2)
+ )
+ # Only power the motor while opening and let the spring close it
+ self._mouth_motor.throttle = MOTOR_DUTY_CYCLE if dir_open else None
+ time.sleep(duration)
+ # Remove Power from the motor and let close to avoid overheating
+ self._mouth_motor.throttle = None
+
+ def foot_pressed(self):
+ return not self._foot_button.value
+
+ def move_mouth(self):
+ print("Starting mouth movement thread")
+ while True:
+ if self.do_mouth_movement:
+ self._move_mouth_motor(dir_open=True)
+ self._move_mouth_motor(dir_open=False)
+
+ def move_arms(self, hide=True):
+ self._move_arms_motor(dir_up=hide)
+
+ def speak(self, text):
+ result = self._speech_synthesizer.speak_text_async(text).get()
+
+ # Check result
+ if result.reason == speechsdk.ResultReason.SynthesizingAudioCompleted:
+ print("Speech synthesized for text [{}]".format(text))
+ elif result.reason == speechsdk.ResultReason.Canceled:
+ cancellation_details = result.cancellation_details
+ print("Speech synthesis canceled: {}".format(cancellation_details.reason))
+ if cancellation_details.reason == speechsdk.CancellationReason.Error:
+ print("Error details: {}".format(cancellation_details.error_details))
+
+
+def main():
+ listener = Listener()
+ bear = Bear(speech_config)
+
+ transcription = [""]
+ bear.speak(
+ "Hello there! Just give my left foot a squeeze if you would like to get my attention."
+ )
+ while True:
+ try:
+ # If button is pressed, start listening
+ if bear.foot_pressed():
+ bear.speak("How may I help you?")
+ listener.listen()
+
+ # Pull raw recorded audio from the queue.
+ if listener.speech_waiting():
+ audio_data = listener.get_audio_data()
+ bear.speak("Let me think about that")
+ bear.move_arms(hide=True)
+ text = transcribe(audio_data.get_wav_data())
+
+ if text:
+ if listener.phrase_complete:
+ transcription.append(text)
+ print(f"Phrase Complete. Sent '{text}' to ChatGPT.")
+ chat_response = sendchat(text)
+ transcription.append(f"> {chat_response}")
+ print("Got response from ChatGPT. Beginning speech synthesis.")
+ bear.move_arms(hide=False)
+ bear.speak(chat_response)
+ else:
+ print("Partial Phrase...")
+ transcription[-1] = text
+
+ os.system("clear")
+ for line in transcription:
+ print(line)
+ print("", end="", flush=True)
+ time.sleep(0.25)
+ except KeyboardInterrupt:
+ break
+ bear.deinit()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/CircuitPython_BLE_Darksaber/code.py b/CircuitPython_BLE_Darksaber/code.py
index 655c25c73..1b4ebada6 100644
--- a/CircuitPython_BLE_Darksaber/code.py
+++ b/CircuitPython_BLE_Darksaber/code.py
@@ -83,7 +83,8 @@
wave_file = None
# Set up accelerometer on I2C bus, 4G range:
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
accel.range = adafruit_lis3dh.RANGE_4_G
diff --git a/CircuitPython_DVI_Hello_World/Helvetica-Bold-16.pcf b/CircuitPython_DVI_Hello_World/Helvetica-Bold-16.pcf
new file mode 100644
index 000000000..deb9092d1
Binary files /dev/null and b/CircuitPython_DVI_Hello_World/Helvetica-Bold-16.pcf differ
diff --git a/CircuitPython_DVI_Hello_World/blinka_computer.bmp b/CircuitPython_DVI_Hello_World/blinka_computer.bmp
new file mode 100644
index 000000000..a746387ba
Binary files /dev/null and b/CircuitPython_DVI_Hello_World/blinka_computer.bmp differ
diff --git a/CircuitPython_DVI_Hello_World/code.py b/CircuitPython_DVI_Hello_World/code.py
new file mode 100644
index 000000000..0512def72
--- /dev/null
+++ b/CircuitPython_DVI_Hello_World/code.py
@@ -0,0 +1,333 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-FileCopyrightText: Adapted from Phil B.'s 16bit_hello Arduino Code
+#
+# SPDX-License-Identifier: MIT
+
+import gc
+import math
+from random import randint
+import time
+import displayio
+import picodvi
+import board
+import framebufferio
+import vectorio
+import terminalio
+import simpleio
+from adafruit_bitmap_font import bitmap_font
+from adafruit_display_text import label, wrap_text_to_lines
+from adafruit_display_shapes.rect import Rect
+from adafruit_display_shapes.circle import Circle
+from adafruit_display_shapes.roundrect import RoundRect
+from adafruit_display_shapes.triangle import Triangle
+from adafruit_display_shapes.line import Line
+
+displayio.release_displays()
+
+# check for DVI Feather
+if 'CKP' in dir(board):
+ fb = picodvi.Framebuffer(320, 240,
+ clk_dp=board.CKP, clk_dn=board.CKN,
+ red_dp=board.D0P, red_dn=board.D0N,
+ green_dp=board.D1P, green_dn=board.D1N,
+ blue_dp=board.D2P, blue_dn=board.D2N,
+ color_depth=8)
+# otherwise assume Pico
+else:
+ fb = picodvi.Framebuffer(320, 240,
+ clk_dp=board.GP12, clk_dn=board.GP13,
+ red_dp=board.GP10, red_dn=board.GP11,
+ green_dp=board.GP8, green_dn=board.GP9,
+ blue_dp=board.GP6, blue_dn=board.GP7,
+ color_depth=8)
+display = framebufferio.FramebufferDisplay(fb)
+
+bitmap = displayio.Bitmap(display.width, display.height, 3)
+
+red = 0xff0000
+yellow = 0xcccc00
+orange = 0xff5500
+blue = 0x0000ff
+pink = 0xff00ff
+purple = 0x5500ff
+white = 0xffffff
+green = 0x00ff00
+aqua = 0x125690
+
+palette = displayio.Palette(3)
+palette[0] = 0x000000 # black
+palette[1] = white
+palette[2] = yellow
+
+palette.make_transparent(0)
+
+tile_grid = displayio.TileGrid(bitmap, pixel_shader=palette)
+
+group = displayio.Group()
+
+def clean_up(group_name):
+ for _ in range(len(group_name)):
+ group_name.pop()
+ gc.collect()
+
+def show_shapes():
+ gc.collect()
+ cx = int(display.width / 2)
+ cy = int(display.height / 2)
+ minor = min(cx, cy)
+ pad = 5
+ size = minor - pad
+ half = int(size / 2)
+ rect = Rect(cx - minor, cy - minor, size, size, stroke = 1, fill=red, outline = red)
+ tri = Triangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, fill=green, outline = green)
+ circ = Circle(cx - pad - half, cy + pad + half, half, fill=blue, stroke = 1, outline = blue)
+ rnd = RoundRect(cx + pad, cy + pad, size, size, int(size / 5), stroke = 1,
+ fill=yellow, outline = yellow)
+
+ group.append(rect)
+ group.append(tri)
+ group.append(circ)
+ group.append(rnd)
+ rect.fill = None
+ tri.fill = None
+ circ.fill = None
+ rnd.fill = None
+
+ time.sleep(2)
+
+ rect.fill = red
+ tri.fill = green
+ circ.fill = blue
+ rnd.fill = yellow
+ time.sleep(2)
+ clean_up(group)
+ del rect
+ del tri
+ del circ
+ del rnd
+ gc.collect()
+
+def sine_chart():
+ gc.collect()
+ cx = int(display.width / 2)
+ cy = int(display.height / 2)
+ minor = min(cx, cy)
+ major = max(cx, cy)
+
+ group.append(Line(cx, 0, cx, display.height, blue)) # v
+ group.append(Line(0, cy, display.width, cy, blue)) # h
+
+ for i in range(10):
+ _n = simpleio.map_range(i, 0, 10, 0, major - 1)
+ n = int(_n)
+ group.append(Line(cx - n, cy - 5, cx - n, (cy - 5) + 11, blue)) # v
+ group.append(Line(cx + n, cy - 5, cx + n, (cy - 5) + 11, blue)) # v
+ group.append(Line(cx - 5, cy - n, (cx - 5) + 11, cy - n, blue)) # h
+ group.append(Line(cx - 5, cy + n, (cx - 5) + 11, cy + n, blue)) # h
+
+ for x in range(display.width):
+ y = cy - int(math.sin((x - cx) * 0.05) * float(minor * 0.5))
+ bitmap[x, y] = 1
+ group.append(tile_grid)
+ time.sleep(2)
+ clean_up(group)
+
+def widget0():
+ gc.collect()
+ data = [31, 42, 36, 58, 67, 88]
+ num_points = len(data)
+
+ text_area = label.Label(terminalio.FONT, text="Widget Sales", color=white)
+ text_area.anchor_point = (0.5, 0.0)
+ text_area.anchored_position = (display.width / 2, 3)
+ group.append(text_area)
+ for i in range(11):
+ _x = simpleio.map_range(i, 0, 10, 0, display.width - 1)
+ x = int(_x)
+ group.append(Line(x, 20, x, display.height, blue))
+ _y = simpleio.map_range(i, 0, 10, 20, display.height - 1)
+ y = int(_y)
+ group.append(Line(0, y, display.width, y, blue))
+ prev_x = 0
+ _prev_y = simpleio.map_range(data[0], 0, 100, display.height - 1, 20)
+ prev_y = int(_prev_y)
+ for i in range(1, num_points):
+ _new_x = simpleio.map_range(i, 0, num_points - 1, 0, display.width - 1)
+ new_x = int(_new_x)
+ _new_y = simpleio.map_range(data[i], 0, 100, display.height - 1, 20)
+ new_y = int(_new_y)
+ group.append(Line(prev_x, prev_y, new_x, new_y, aqua))
+ prev_x = new_x
+ prev_y = new_y
+
+ for i in range(num_points):
+ _x = simpleio.map_range(i, 0, num_points - 1, 0, display.width - 1)
+ x = int(_x)
+ _y = simpleio.map_range(data[i], 0, 100, display.height - 1, 20)
+ y = int(_y)
+ group.append(Circle(x, y, 5, fill=None, stroke = 2, outline = white))
+
+ time.sleep(2)
+ clean_up(group)
+
+def widget1():
+ gc.collect()
+ data = [31, 42, 36, 58, 67, 88]
+ num_points = len(data)
+ bar_width = int(display.width / num_points) - 4
+ x_mapped_w = display.width + 2
+ h_mapped_h = display.height + 20
+
+ text_area = label.Label(terminalio.FONT, text="Widget Sales", color=white)
+ text_area.anchor_point = (0.5, 0.0)
+ text_area.anchored_position = (display.width / 2, 3)
+ group.append(text_area)
+ for i in range(11):
+ _y = simpleio.map_range(i, 0, 10, 20, display.height - 1)
+ y = int(_y)
+ group.append(Line(0, y, display.width, y, blue))
+ for i in range(num_points):
+ _x = simpleio.map_range(i, 0, num_points, 0, x_mapped_w)
+ x = int(_x)
+ _height = simpleio.map_range(data[i], 0, 100, h_mapped_h, 0)
+ height = int(_height)
+ group.append(vectorio.Rectangle(pixel_shader=palette, width=bar_width,
+ height=display.height + 1, x=x, y=height, color_index = 2))
+
+ time.sleep(2)
+ clean_up(group)
+
+def text_align():
+ gc.collect()
+ TEXT = "hello world"
+
+ text_area_top_left = label.Label(terminalio.FONT, text=TEXT, color=red)
+ text_area_top_left.anchor_point = (0.0, 0.0)
+ text_area_top_left.anchored_position = (0, 0)
+
+ text_area_top_middle = label.Label(terminalio.FONT, text=TEXT, color=orange)
+ text_area_top_middle.anchor_point = (0.5, 0.0)
+ text_area_top_middle.anchored_position = (display.width / 2, 0)
+
+ text_area_top_right = label.Label(terminalio.FONT, text=TEXT, color=yellow)
+ text_area_top_right.anchor_point = (1.0, 0.0)
+ text_area_top_right.anchored_position = (display.width, 0)
+
+ text_area_middle_left = label.Label(terminalio.FONT, text=TEXT, color=green)
+ text_area_middle_left.anchor_point = (0.0, 0.5)
+ text_area_middle_left.anchored_position = (0, display.height / 2)
+
+ text_area_middle_middle = label.Label(terminalio.FONT, text=TEXT, color=aqua)
+ text_area_middle_middle.anchor_point = (0.5, 0.5)
+ text_area_middle_middle.anchored_position = (display.width / 2, display.height / 2)
+
+ text_area_middle_right = label.Label(terminalio.FONT, text=TEXT, color=blue)
+ text_area_middle_right.anchor_point = (1.0, 0.5)
+ text_area_middle_right.anchored_position = (display.width, display.height / 2)
+
+ text_area_bottom_left = label.Label(terminalio.FONT, text=TEXT, color=purple)
+ text_area_bottom_left.anchor_point = (0.0, 1.0)
+ text_area_bottom_left.anchored_position = (0, display.height)
+
+ text_area_bottom_middle = label.Label(terminalio.FONT, text=TEXT, color=pink)
+ text_area_bottom_middle.anchor_point = (0.5, 1.0)
+ text_area_bottom_middle.anchored_position = (display.width / 2, display.height)
+
+ text_area_bottom_right = label.Label(terminalio.FONT, text=TEXT, color=white)
+ text_area_bottom_right.anchor_point = (1.0, 1.0)
+ text_area_bottom_right.anchored_position = (display.width, display.height)
+
+ group.append(text_area_top_middle)
+ group.append(text_area_top_left)
+ group.append(text_area_top_right)
+ group.append(text_area_middle_middle)
+ group.append(text_area_middle_left)
+ group.append(text_area_middle_right)
+ group.append(text_area_bottom_middle)
+ group.append(text_area_bottom_left)
+ group.append(text_area_bottom_right)
+
+ time.sleep(2)
+ clean_up(group)
+
+def custom_font():
+ gc.collect()
+ my_font = bitmap_font.load_font("/Helvetica-Bold-16.pcf")
+ text_sample = "The quick brown fox jumps over the lazy dog."
+ text_sample = "\n".join(wrap_text_to_lines(text_sample, 28))
+ text_area = label.Label(my_font, text="Custom Font", color=white)
+ text_area.anchor_point = (0.0, 0.0)
+ text_area.anchored_position = (0, 0)
+
+ sample_text = label.Label(my_font, text=text_sample)
+ sample_text.anchor_point = (0.5, 0.5)
+ sample_text.anchored_position = (display.width / 2, display.height / 2)
+
+ group.append(text_area)
+ group.append(sample_text)
+
+ time.sleep(2)
+ clean_up(group)
+
+ del my_font
+ gc.collect()
+
+def bitmap_example():
+ gc.collect()
+ blinka_bitmap = displayio.OnDiskBitmap("/blinka_computer.bmp")
+ blinka_grid = displayio.TileGrid(blinka_bitmap, pixel_shader=blinka_bitmap.pixel_shader)
+ gc.collect()
+ group.append(blinka_grid)
+
+ time.sleep(2)
+ clean_up(group)
+
+ del blinka_grid
+ del blinka_bitmap
+ gc.collect()
+
+def sensor_values():
+ gc.collect()
+ text_x = "X: %d" % randint(-25, 25)
+ text_y = "Y: %d" % randint(-25, 25)
+ text_z = "Z: %d" % randint(-25, 25)
+ x_text = label.Label(terminalio.FONT, text=text_x, color=red)
+ x_text.anchor_point = (0.0, 0.0)
+ x_text.anchored_position = (2, 0)
+ y_text = label.Label(terminalio.FONT, text=text_y, color=green)
+ y_text.anchor_point = (0.0, 0.0)
+ y_text.anchored_position = (2, 10)
+ z_text = label.Label(terminalio.FONT, text=text_z, color=blue)
+ z_text.anchor_point = (0.0, 0.0)
+ z_text.anchored_position = (2, 20)
+ group.append(x_text)
+ group.append(y_text)
+ group.append(z_text)
+
+ for i in range(40):
+ if i == 10:
+ group.scale = 2
+ elif i == 20:
+ group.scale = 3
+ elif i == 30:
+ group.scale = 4
+ x_text.text = "X: %d" % randint(-50, 50)
+ y_text.text = "Y: %d" % randint(-50, 50)
+ z_text.text = "Z: %d" % randint(-50, 50)
+ time.sleep(0.1)
+ time.sleep(0.1)
+ clean_up(group)
+ group.scale = 1
+
+display.root_group = group
+
+while True:
+ show_shapes()
+ sine_chart()
+ widget0()
+ widget1()
+ text_align()
+ custom_font()
+ bitmap_example()
+ sensor_values()
diff --git a/CircuitPython_Darksaber/code.py b/CircuitPython_Darksaber/code.py
index db0fbf911..6b6a89c84 100644
--- a/CircuitPython_Darksaber/code.py
+++ b/CircuitPython_Darksaber/code.py
@@ -73,7 +73,8 @@
wave_file = None
# Set up accelerometer on I2C bus, 4G range:
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
accel.range = adafruit_lis3dh.RANGE_4_G
diff --git a/CircuitPython_Display_Text/background_color_example/code.py b/CircuitPython_Display_Text/background_color_example/code.py
index ee72813ed..ae50e6d40 100644
--- a/CircuitPython_Display_Text/background_color_example/code.py
+++ b/CircuitPython_Display_Text/background_color_example/code.py
@@ -14,7 +14,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
reg_label = label.Label(
font=terminalio.FONT,
diff --git a/CircuitPython_Display_Text/background_tight_example/code.py b/CircuitPython_Display_Text/background_tight_example/code.py
index bee3444f2..343fcb7ab 100644
--- a/CircuitPython_Display_Text/background_tight_example/code.py
+++ b/CircuitPython_Display_Text/background_tight_example/code.py
@@ -15,7 +15,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
font = bitmap_font.load_font("fonts/Fayette-HandwrittenScript-48.bdf")
diff --git a/CircuitPython_Display_Text/base_alignment_test/code.py b/CircuitPython_Display_Text/base_alignment_test/code.py
index df627cf45..f3447d7af 100644
--- a/CircuitPython_Display_Text/base_alignment_test/code.py
+++ b/CircuitPython_Display_Text/base_alignment_test/code.py
@@ -15,7 +15,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
# Font definition. You can choose any two fonts available in your system
@@ -70,7 +70,7 @@
)
main_group.append(right_text_aligned)
-display.show(main_group)
+display.root_group = main_group
while True:
pass
diff --git a/CircuitPython_Display_Text/color_example/code.py b/CircuitPython_Display_Text/color_example/code.py
index 1eab68ead..b3794b359 100644
--- a/CircuitPython_Display_Text/color_example/code.py
+++ b/CircuitPython_Display_Text/color_example/code.py
@@ -14,7 +14,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
reg_label = label.Label(
font=terminalio.FONT,
diff --git a/CircuitPython_Display_Text/colormask_example/code.py b/CircuitPython_Display_Text/colormask_example/code.py
index 519c689ec..f5f9ca1ab 100644
--- a/CircuitPython_Display_Text/colormask_example/code.py
+++ b/CircuitPython_Display_Text/colormask_example/code.py
@@ -15,7 +15,7 @@
# Make the display context. Change size if you want
display = board.DISPLAY
-background = displayio.Bitmap(320, 240, 1)
+background = displayio.Bitmap(display.width, display.height, 1)
bg_palette = displayio.Palette(1)
bg_palette[0] = 0xDDDD00
diff --git a/CircuitPython_Display_Text/display_text_anchored_position/code.py b/CircuitPython_Display_Text/display_text_anchored_position/code.py
index 650e935d3..6e2aa379f 100644
--- a/CircuitPython_Display_Text/display_text_anchored_position/code.py
+++ b/CircuitPython_Display_Text/display_text_anchored_position/code.py
@@ -15,7 +15,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
DISPLAY_WIDTH = 320
DISPLAY_HEIGHT = 240
TEXT = "Hello"
@@ -75,7 +75,7 @@
text_group.append(text_area_bottom_left)
text_group.append(text_area_bottom_right)
-display.show(text_group)
+display.root_group = text_group
while True:
pass
diff --git a/CircuitPython_Display_Text/font_example/code.py b/CircuitPython_Display_Text/font_example/code.py
index e66b0c69d..09f2ebc6a 100644
--- a/CircuitPython_Display_Text/font_example/code.py
+++ b/CircuitPython_Display_Text/font_example/code.py
@@ -16,7 +16,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
font = bitmap_font.load_font("fonts/LeagueSpartan-Bold-16.bdf")
# font = terminalio.FONT
diff --git a/CircuitPython_Display_Text/line_spacing_example/code.py b/CircuitPython_Display_Text/line_spacing_example/code.py
index d3cc6a084..2a9a3372c 100644
--- a/CircuitPython_Display_Text/line_spacing_example/code.py
+++ b/CircuitPython_Display_Text/line_spacing_example/code.py
@@ -14,7 +14,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
# font = bitmap_font.load_font("Fayette-HandwrittenScript-48.bdf")
font = terminalio.FONT
diff --git a/CircuitPython_Display_Text/padding_example/code.py b/CircuitPython_Display_Text/padding_example/code.py
index 34497925f..23c909cc5 100644
--- a/CircuitPython_Display_Text/padding_example/code.py
+++ b/CircuitPython_Display_Text/padding_example/code.py
@@ -14,7 +14,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
# font = bitmap_font.load_font("Fayette-HandwrittenScript-48.bdf")
font = terminalio.FONT
diff --git a/CircuitPython_Display_Text/updating_text_example/code.py b/CircuitPython_Display_Text/updating_text_example/code.py
index 4db2fc57e..c80544b4b 100644
--- a/CircuitPython_Display_Text/updating_text_example/code.py
+++ b/CircuitPython_Display_Text/updating_text_example/code.py
@@ -15,7 +15,7 @@
# Make the display context
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
# create the label
updating_label = label.Label(
diff --git a/CircuitPython_ESP32_Camera/esp32-kaluga-onionskin-gif/code.py b/CircuitPython_ESP32_Camera/esp32-kaluga-onionskin-gif/code.py
index 2cae7bf05..31423f6e8 100644
--- a/CircuitPython_ESP32_Camera/esp32-kaluga-onionskin-gif/code.py
+++ b/CircuitPython_ESP32_Camera/esp32-kaluga-onionskin-gif/code.py
@@ -47,7 +47,7 @@
import os
import struct
-import esp32_camera
+import espcamera
import analogio
import board
import busio
@@ -109,14 +109,14 @@ def record_pressed():
vfs = storage.VfsFat(sdcard)
storage.mount(vfs, "/sd")
-cam = esp32_camera.Camera(
+cam = espcamera.Camera(
data_pins=board.CAMERA_DATA,
external_clock_pin=board.CAMERA_XCLK,
pixel_clock_pin=board.CAMERA_PCLK,
vsync_pin=board.CAMERA_VSYNC,
href_pin=board.CAMERA_HREF,
- pixel_format=esp32_camera.PixelFormat.RGB565,
- frame_size=esp32_camera.FrameSize.QVGA,
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.QVGA,
i2c=board.I2C(),
external_clock_frequency=20_000_000,
framebuffer_count=2)
@@ -147,7 +147,7 @@ def next_filename(extension="jpg"):
# Blank the whole display
g = displayio.Group()
-display.show(g)
+display.root_group = g
display.auto_refresh = False
display.refresh()
diff --git a/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio-and-lcd/code.py b/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio-and-lcd/code.py
index 649faf188..25978112f 100644
--- a/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio-and-lcd/code.py
+++ b/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio-and-lcd/code.py
@@ -15,7 +15,7 @@
from adafruit_io.adafruit_io import IO_MQTT
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import board
-import esp32_camera
+import espcamera
import keypad
import socketpool
import wifi
@@ -42,14 +42,14 @@
print("Initializing camera")
-cam = esp32_camera.Camera(
+cam = espcamera.Camera(
data_pins=board.CAMERA_DATA,
external_clock_pin=board.CAMERA_XCLK,
pixel_clock_pin=board.CAMERA_PCLK,
vsync_pin=board.CAMERA_VSYNC,
href_pin=board.CAMERA_HREF,
- pixel_format=esp32_camera.PixelFormat.RGB565,
- frame_size=esp32_camera.FrameSize.R240X240,
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.R240X240,
i2c=board.I2C(),
external_clock_frequency=20_000_000,
framebuffer_count=2,
@@ -72,8 +72,8 @@
display_bus.send(44, frame)
if (ev := shutter_button.events.get()) and ev.pressed:
cam.reconfigure(
- pixel_format=esp32_camera.PixelFormat.JPEG,
- frame_size=esp32_camera.FrameSize.SVGA,
+ pixel_format=espcamera.PixelFormat.JPEG,
+ frame_size=espcamera.FrameSize.SVGA,
)
frame = cam.take(1)
if isinstance(frame, memoryview):
@@ -86,7 +86,7 @@
io.publish("image", encoded_data)
cam.reconfigure(
- pixel_format=esp32_camera.PixelFormat.RGB565,
- frame_size=esp32_camera.FrameSize.R240X240,
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.R240X240,
)
print(end=".")
diff --git a/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio/code.py b/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio/code.py
index 74a4058f9..8b15a9879 100644
--- a/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio/code.py
+++ b/CircuitPython_ESP32_Camera/esp32-s3-eye-adafruitio/code.py
@@ -24,7 +24,7 @@
import adafruit_minimqtt.adafruit_minimqtt as MQTT
from adafruit_io.adafruit_io import IO_MQTT
import board
-import esp32_camera
+import espcamera
import socketpool
import wifi
@@ -33,17 +33,17 @@
image_feed = "image"
-cam = esp32_camera.Camera(
+cam = espcamera.Camera(
data_pins=board.CAMERA_DATA,
external_clock_pin=board.CAMERA_XCLK,
pixel_clock_pin=board.CAMERA_PCLK,
vsync_pin=board.CAMERA_VSYNC,
href_pin=board.CAMERA_HREF,
- pixel_format=esp32_camera.PixelFormat.JPEG,
- frame_size=esp32_camera.FrameSize.SVGA,
+ pixel_format=espcamera.PixelFormat.JPEG,
+ frame_size=espcamera.FrameSize.SVGA,
i2c=board.I2C(),
external_clock_frequency=20_000_000,
- grab_mode=esp32_camera.GrabMode.WHEN_EMPTY)
+ grab_mode=espcamera.GrabMode.WHEN_EMPTY)
cam.vflip = True
diff --git a/CircuitPython_ESP32_Camera/esp32-s3-eye-lcdview/code.py b/CircuitPython_ESP32_Camera/esp32-s3-eye-lcdview/code.py
index f386b96cb..8ae1a5f16 100644
--- a/CircuitPython_ESP32_Camera/esp32-s3-eye-lcdview/code.py
+++ b/CircuitPython_ESP32_Camera/esp32-s3-eye-lcdview/code.py
@@ -18,23 +18,23 @@
import adafruit_ticks
import board
import displayio
-import esp32_camera
+import espcamera
import keypad
button = keypad.Keys((board.BOOT,), value_when_pressed=False)
-cam = esp32_camera.Camera(
+cam = espcamera.Camera(
data_pins=board.CAMERA_DATA,
external_clock_pin=board.CAMERA_XCLK,
pixel_clock_pin=board.CAMERA_PCLK,
vsync_pin=board.CAMERA_VSYNC,
href_pin=board.CAMERA_HREF,
- pixel_format=esp32_camera.PixelFormat.RGB565,
- frame_size=esp32_camera.FrameSize.R240X240,
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.R240X240,
i2c=board.I2C(),
external_clock_frequency=20_000_000,
framebuffer_count=2,
- grab_mode=esp32_camera.GrabMode.WHEN_EMPTY)
+ grab_mode=espcamera.GrabMode.WHEN_EMPTY)
cam.vflip = True
diff --git a/CircuitPython_ESP32_Camera/esp32-s3-eye-qrio-repl/code.py b/CircuitPython_ESP32_Camera/esp32-s3-eye-qrio-repl/code.py
index b9167eeeb..38d22929b 100644
--- a/CircuitPython_ESP32_Camera/esp32-s3-eye-qrio-repl/code.py
+++ b/CircuitPython_ESP32_Camera/esp32-s3-eye-qrio-repl/code.py
@@ -9,18 +9,18 @@
import struct
import board
-import esp32_camera
+import espcamera
import qrio
print("Initializing camera")
-cam = esp32_camera.Camera(
+cam = espcamera.Camera(
data_pins=board.CAMERA_DATA,
external_clock_pin=board.CAMERA_XCLK,
pixel_clock_pin=board.CAMERA_PCLK,
vsync_pin=board.CAMERA_VSYNC,
href_pin=board.CAMERA_HREF,
- pixel_format=esp32_camera.PixelFormat.RGB565,
- frame_size=esp32_camera.FrameSize.R240X240,
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.R240X240,
i2c=board.I2C(),
external_clock_frequency=20_000_000,
framebuffer_count=2)
diff --git a/CircuitPython_Essentials/CircuitPython_I2C_Scan/code.py b/CircuitPython_Essentials/CircuitPython_I2C_Scan/code.py
index 6a19b8fb5..572895fb8 100644
--- a/CircuitPython_Essentials/CircuitPython_I2C_Scan/code.py
+++ b/CircuitPython_Essentials/CircuitPython_I2C_Scan/code.py
@@ -12,7 +12,8 @@
import board
# To use default I2C bus (most boards)
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# To create I2C bus on specific pins
# import busio
diff --git a/CircuitPython_Essentials/CircuitPython_I2C_TSL2591/code.py b/CircuitPython_Essentials/CircuitPython_I2C_TSL2591/code.py
index 18912cd69..f6fc606fb 100644
--- a/CircuitPython_Essentials/CircuitPython_I2C_TSL2591/code.py
+++ b/CircuitPython_Essentials/CircuitPython_I2C_TSL2591/code.py
@@ -7,7 +7,8 @@
import board
import adafruit_tsl2591
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# Lock the I2C device before we try to scan
while not i2c.try_lock():
diff --git a/CircuitPython_Essentials/CircuitPython_Logger/boot.py b/CircuitPython_Essentials/CircuitPython_Logger/boot.py
index e5c4246f5..bb26a556c 100644
--- a/CircuitPython_Essentials/CircuitPython_Logger/boot.py
+++ b/CircuitPython_Essentials/CircuitPython_Logger/boot.py
@@ -20,4 +20,4 @@
switch.pull = digitalio.Pull.UP
# If the switch pin is connected to ground CircuitPython can write to the drive
-storage.remount("/", switch.value)
+storage.remount("/", readonly=switch.value)
diff --git a/CircuitPython_Essentials/Pin_Map_Script/code.py b/CircuitPython_Essentials/Pin_Map_Script/code.py
index 5c3e34fbc..c166faa27 100644
--- a/CircuitPython_Essentials/Pin_Map_Script/code.py
+++ b/CircuitPython_Essentials/Pin_Map_Script/code.py
@@ -1,19 +1,31 @@
-# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2020 anecdata for Adafruit Industries
+# SPDX-FileCopyrightText: 2021 Neradoc for Adafruit Industries
+# SPDX-FileCopyrightText: 2021-2023 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 Dan Halbert for Adafruit Industries
#
# SPDX-License-Identifier: MIT
"""CircuitPython Essentials Pin Map Script"""
import microcontroller
import board
+try:
+ import cyw43 # raspberrypi
+except ImportError:
+ cyw43 = None
board_pins = []
for pin in dir(microcontroller.pin):
- if isinstance(getattr(microcontroller.pin, pin), microcontroller.Pin):
+ if (isinstance(getattr(microcontroller.pin, pin), microcontroller.Pin) or
+ (cyw43 and isinstance(getattr(microcontroller.pin, pin), cyw43.CywPin))):
pins = []
for alias in dir(board):
if getattr(board, alias) is getattr(microcontroller.pin, pin):
- pins.append("board.{}".format(alias))
- if len(pins) > 0:
+ pins.append(f"board.{alias}")
+ # Add the original GPIO name, in parentheses.
+ if pins:
+ # Only include pins that are in board.
+ pins.append(f"({str(pin)})")
board_pins.append(" ".join(pins))
+
for pins in sorted(board_pins):
print(pins)
diff --git a/CircuitPython_Flying_Toasters/code.py b/CircuitPython_Flying_Toasters/code.py
index f96a9fd27..aa8fa3696 100644
--- a/CircuitPython_Flying_Toasters/code.py
+++ b/CircuitPython_Flying_Toasters/code.py
@@ -81,7 +81,7 @@ def make_tilegrid():
x=0, y=-64,
default_tile=EMPTY)
group.append(grid)
- display.show(group)
+ display.root_group = group
return grid
diff --git a/CircuitPython_GameAndWatch_Octopus/code.py b/CircuitPython_GameAndWatch_Octopus/code.py
index bf469af3c..31c841a7b 100644
--- a/CircuitPython_GameAndWatch_Octopus/code.py
+++ b/CircuitPython_GameAndWatch_Octopus/code.py
@@ -37,7 +37,7 @@
)
# show the main group on the display
-display.show(main_group)
+display.root_group = main_group
# main loop
while True:
diff --git a/CircuitPython_GetSuperpower_PicoW_OpenAI/code.py b/CircuitPython_GetSuperpower_PicoW_OpenAI/code.py
new file mode 100644
index 000000000..3768736c3
--- /dev/null
+++ b/CircuitPython_GetSuperpower_PicoW_OpenAI/code.py
@@ -0,0 +1,241 @@
+# SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+# SPDX-License-Identifier: MIT
+import json
+import os
+import ssl
+import traceback
+
+import board
+import displayio
+import digitalio
+import keypad
+import socketpool
+import supervisor
+from wifi import radio
+
+import adafruit_requests
+import adafruit_displayio_ssd1306
+from adafruit_bitmap_font.bitmap_font import load_font
+from adafruit_display_text import wrap_text_to_pixels
+from adafruit_display_text.bitmap_label import Label
+from adafruit_ticks import ticks_add, ticks_less, ticks_ms
+
+
+# Choose your own prompt and wait messages, either by changing it below inside
+# the """triple quoted""" string, or by putting it in your settings.toml file,
+# like so:
+#
+# MY_PROMPT="Give me an idea for a gluten free, keto dinner. Write one sentence"
+# PLEASE_WAIT="Cooking something up just for you"
+#
+# Experimentation is best to figure out what works. Usually you'll want to ask
+# for just one sentence or paragraph, since the 128x32 pixel screen can't hold
+# much text!
+
+# Here are some that the author found worked reasonably well:
+
+# Give me an idea for a plant-based dinner. Write one sentence
+#
+# Give jepler (they/them) a cliched and flowery description as a comic book
+# supervillain. write one sentence.
+#
+# Invent and describe an alien species. write one sentence
+#
+# Invent a zany 'as seen on' product that can't possibly work. One sentence
+#
+# Tell a 1-sentence story about a kitten and a funny mishap
+#
+# Make up a 1-sentence fortune for me
+#
+# In first person, write a 1-sentence story about an AI avoiding boredom in a creative way.
+#
+# Pick an everyday object (don't say what it is) and describe it using only the
+# ten hundred most common words.
+#
+# Invent an alien animal or plant, name it, and vividly describe it in 1
+# sentence
+#
+# Invent and vividly describe an alien species. write one paragraph
+
+prompt=os.getenv("MY_PROMPT", """
+Write 1 sentence starting "you can" about an unconventional but useful superpower
+""").strip()
+please_wait=os.getenv("PLEASE_WAIT", """
+Finding superpower
+""").strip()
+
+openai_api_key = os.getenv("OPENAI_API_KEY")
+
+nice_font = load_font("helvR08.pcf")
+line_spacing = 9 # in pixels
+
+# i2c display setup
+displayio.release_displays()
+oled_reset = board.GP9
+
+# STEMMA I2C on picowbell
+i2c = board.STEMMA_I2C()
+display_bus = displayio.I2CDisplay(i2c, device_address=0x3D, reset=oled_reset)
+
+WIDTH = 128
+HEIGHT = 64
+
+display = adafruit_displayio_ssd1306.SSD1306(
+ display_bus, width=WIDTH, height=HEIGHT
+)
+if openai_api_key is None:
+ input("Place your\nOPENAI_API_KEY\nin settings.toml")
+display.auto_refresh = False
+
+class WrappedTextDisplay(displayio.Group):
+ def __init__(self):
+ super().__init__()
+ self.offset = 0
+ self.max_lines = display.height // line_spacing
+ for i in range(self.max_lines):
+ self.make_label("", i * line_spacing)
+ self.lines = [""]
+ self.text = ""
+
+ def make_label(self, text, y):
+ result = Label(
+ font=nice_font,
+ color=0xFFFFFF,
+ background_color=0,
+ line_spacing=line_spacing,
+ anchor_point=(0, 0),
+ anchored_position=(0, y),
+ text=text)
+ self.append(result)
+
+ def add_text(self, new_text):
+ print(end=new_text)
+ if self.lines:
+ text = self.lines[-1] + new_text
+ else:
+ text = new_text
+ self.lines[-1:] = wrap_text_to_pixels(text, display.width, nice_font)
+ self.scroll_to_end()
+
+ def set_text(self, text):
+ print("\n\n", end=text)
+ self.text = text
+ self.lines = wrap_text_to_pixels(text, display.width, nice_font)
+ self.offset = 0
+
+ def show(self, text):
+ self.set_text(text)
+ self.refresh()
+
+ def add_show(self, new_text):
+ self.add_text(new_text)
+ self.refresh()
+
+ def scroll_to_end(self):
+ self.offset = self.max_offset()
+
+ def scroll_next_line(self):
+ max_offset = self.max_offset()
+ self.offset = (self.offset + 1) % (max_offset + 1)
+
+ def max_offset(self):
+ return max(0, len(self.lines) - self.max_lines)
+
+ def on_last_line(self):
+ return self.offset == self.max_offset()
+
+ def refresh(self):
+ lines = self.lines
+ # update labels from wrapped text, accounting for scroll offset
+ for i in range(len(self)):
+ offset_i = i + self.offset
+ if offset_i >= len(lines):
+ text = ""
+ else:
+ text = lines[offset_i]
+ if text != self[i].text:
+ self[i].text = text
+
+ # Actually update the display all at once
+ display.refresh()
+
+display.root_group = wrapped_text = WrappedTextDisplay()
+
+def wait_button_scroll_text():
+ led.switch_to_output(True)
+ keys.events.clear()
+ deadline = ticks_add(ticks_ms(),
+ 5000 if wrapped_text.on_last_line() else 1000)
+ while True:
+ if (event := keys.events.get()) and event.pressed:
+ break
+ if wrapped_text.max_offset() > 0 and ticks_less(deadline, ticks_ms()):
+ wrapped_text.scroll_next_line()
+ wrapped_text.refresh()
+ deadline = ticks_add(deadline,
+ 5000 if wrapped_text.on_last_line() else 1000)
+ led.value = False
+
+if radio.ipv4_address is None:
+ wrapped_text.show(f"connecting to {os.getenv('WIFI_SSID')}")
+ radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))
+requests = adafruit_requests.Session(socketpool.SocketPool(radio), ssl.create_default_context())
+
+def iter_lines(resp):
+ partial_line = []
+ for c in resp.iter_content():
+ if c == b'\n':
+ yield (b"".join(partial_line)).decode('utf-8')
+ del partial_line[:]
+ else:
+ partial_line.append(c)
+ if partial_line:
+ yield (b"".join(partial_line)).decode('utf-8')
+
+full_prompt = [
+ {"role": "user", "content": prompt},
+]
+
+keys = keypad.Keys((board.GP14,), value_when_pressed=False)
+led = digitalio.DigitalInOut(board.GP10)
+led.switch_to_output(False)
+
+try:
+ while True:
+ wrapped_text.show(please_wait)
+
+ with requests.post("https://api.openai.com/v1/chat/completions",
+ json={"model": "gpt-3.5-turbo", "messages": full_prompt, "stream": True},
+ headers={
+ "Authorization": f"Bearer {openai_api_key}",
+ },
+ ) as response:
+
+ wrapped_text.set_text("")
+ if response.status_code != 200:
+ wrapped_text.show(f"Uh oh! {response.status_code}: {response.reason}")
+ else:
+ wrapped_text.show("")
+ for line in iter_lines(response):
+ led.switch_to_output(True)
+ if line.startswith("data: [DONE]"):
+ break
+ if line.startswith("data:"):
+ content = json.loads(line[5:])
+ try:
+ token = content['choices'][0]['delta'].get('content', '')
+ except (KeyError, IndexError) as e:
+ token = None
+ led.value = False
+ if token:
+ wrapped_text.add_show(token)
+ wait_button_scroll_text()
+except Exception as e: # pylint: disable=broad-except
+ traceback.print_exception(e) # pylint: disable=no-value-for-parameter
+ print(end="\n\n\nAn error occurred\n\nPress button\nto reload")
+ display.root_group = displayio.CIRCUITPYTHON_TERMINAL
+ display.auto_refresh = True
+ while True:
+ if (event1 := keys.events.get()) and event1.pressed:
+ break
+ supervisor.reload()
diff --git a/CircuitPython_GetSuperpower_PicoW_OpenAI/helvR08.pcf b/CircuitPython_GetSuperpower_PicoW_OpenAI/helvR08.pcf
new file mode 100644
index 000000000..60d235b25
Binary files /dev/null and b/CircuitPython_GetSuperpower_PicoW_OpenAI/helvR08.pcf differ
diff --git a/CircuitPython_JEplayer_mp3/code.py b/CircuitPython_JEplayer_mp3/code.py
index 64ed97c4b..d4d57c64c 100644
--- a/CircuitPython_JEplayer_mp3/code.py
+++ b/CircuitPython_JEplayer_mp3/code.py
@@ -57,7 +57,7 @@
def clear_display():
"""Display nothing"""
- board.DISPLAY.show(displayio.Group())
+ board.DISPLAY.root_group = displayio.Group()
clear_display()
@@ -293,7 +293,7 @@ def choose_folder(self, base='/sd'):
font = adafruit_bitmap_font.bitmap_font.load_font("rsrc/5x8.pcf")
playback_display = PlaybackDisplay()
-board.DISPLAY.show(playback_display.group)
+board.DISPLAY.root_group = playback_display.group
font.load_glyphs(range(32, 128))
joystick = analogjoy.AnalogJoystick()
@@ -358,7 +358,7 @@ def menu_choice(seq, *, sel_idx=0, text_font=font):
last_scroll_idx = max(0, len(seq) - num_rows)
- board.DISPLAY.show(scene)
+ board.DISPLAY.root_group = scene
buttons.events.clear()
i = 0
old_scroll_idx = None
@@ -472,7 +472,7 @@ def play_all(playlist, *, folder='', trim=0, location='/sd'):
'folder' is a display name for the user."""
i = 0
- board.DISPLAY.show(playback_display.group)
+ board.DISPLAY.root_group = playback_display.group
playback_display.iconbar.group.y = 112
while 0 <= i < len(playlist):
filename = playlist[i]
@@ -520,7 +520,7 @@ def main():
error_text.y = board.DISPLAY.height // 2
g = displayio.Group()
g.append(error_text)
- board.DISPLAY.show(g)
+ board.DISPLAY.root_group = g
while True:
time.sleep(1)
diff --git a/CircuitPython_KeyPad_Calculator/code/code.py b/CircuitPython_KeyPad_Calculator/code/code.py
index 26c39de7b..1b6d58b8d 100644
--- a/CircuitPython_KeyPad_Calculator/code/code.py
+++ b/CircuitPython_KeyPad_Calculator/code/code.py
@@ -55,7 +55,8 @@ def lookup(layer, key_number):
# oled_reset = board.D9
# Use for I2C
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
# SH1107 is vertically oriented 64x128
@@ -68,7 +69,7 @@ def lookup(layer, key_number):
font = bitmap_font.load_font("/digit-16px.pcf")
text_area = label.Label(font, text=" ", line_spacing=0.95)
text_area.y = 8
-display.show(text_area)
+display.root_group = text_area
N = float
diff --git a/CircuitPython_Knob_Sketcher/feather_sketcher/code.py b/CircuitPython_Knob_Sketcher/feather_sketcher/code.py
index c80001caf..789e1331b 100755
--- a/CircuitPython_Knob_Sketcher/feather_sketcher/code.py
+++ b/CircuitPython_Knob_Sketcher/feather_sketcher/code.py
@@ -62,7 +62,7 @@
# add base UI element
splash = displayio.Group(scale=SKETCH_SCALE)
-display.show(splash)
+display.root_group = splash
# add sketch
sketch_bitmap = displayio.Bitmap(SKETCH_WIDTH, SKETCH_HEIGHT, 2)
diff --git a/CircuitPython_LED_Sand_Hourglass/double_matrix/code.py b/CircuitPython_LED_Sand_Hourglass/double_matrix/code.py
index ec245b5e9..93b00308b 100755
--- a/CircuitPython_LED_Sand_Hourglass/double_matrix/code.py
+++ b/CircuitPython_LED_Sand_Hourglass/double_matrix/code.py
@@ -10,12 +10,16 @@
DELAY = 0.00 # add some delay if you want
+# setup i2c
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+
# the accelo
-accelo = adafruit_lsm6ds.lsm6ds33.LSM6DS33(board.I2C())
+accelo = adafruit_lsm6ds.lsm6ds33.LSM6DS33(i2c)
# the matrix
-matrix1 = matrix.Matrix8x8(board.I2C(), 0x70)
-matrix2 = matrix.Matrix8x8(board.I2C(), 0x71)
+matrix1 = matrix.Matrix8x8(i2c, 0x70)
+matrix2 = matrix.Matrix8x8(i2c, 0x71)
# the sand
sand = matrixsand.MatrixSand(8, 16)
diff --git a/CircuitPython_LED_Sand_Hourglass/matrixsand.py b/CircuitPython_LED_Sand_Hourglass/double_matrix/matrixsand.py
similarity index 100%
rename from CircuitPython_LED_Sand_Hourglass/matrixsand.py
rename to CircuitPython_LED_Sand_Hourglass/double_matrix/matrixsand.py
diff --git a/CircuitPython_LED_Sand_Hourglass/hourglass/code.py b/CircuitPython_LED_Sand_Hourglass/hourglass/code.py
index 38594fb89..908fd7be9 100755
--- a/CircuitPython_LED_Sand_Hourglass/hourglass/code.py
+++ b/CircuitPython_LED_Sand_Hourglass/hourglass/code.py
@@ -10,12 +10,16 @@
DELAY = 0.05 # overall update rate
+# setup i2c
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+
# the accelo
-accelo = adafruit_lsm6ds.lsm6ds33.LSM6DS33(board.I2C())
+accelo = adafruit_lsm6ds.lsm6ds33.LSM6DS33(i2c)
# the matrices
-m1 = matrix.Matrix8x8(board.I2C(), 0x70)
-m2 = matrix.Matrix8x8(board.I2C(), 0x71)
+m1 = matrix.Matrix8x8(i2c, 0x70)
+m2 = matrix.Matrix8x8(i2c, 0x71)
# the sand
sand1 = matrixsand.MatrixSand(8, 8)
diff --git a/CircuitPython_LED_Sand_Hourglass/hourglass/matrixsand.py b/CircuitPython_LED_Sand_Hourglass/hourglass/matrixsand.py
new file mode 100755
index 000000000..f4adf4d69
--- /dev/null
+++ b/CircuitPython_LED_Sand_Hourglass/hourglass/matrixsand.py
@@ -0,0 +1,111 @@
+# SPDX-FileCopyrightText: 2020 Carter Nelson for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+class MatrixSand:
+ """Class to simulate simplified sand physics."""
+
+ def __init__(self, width, height):
+ self._width = width
+ self._height = height
+ self._grains = [False] * width * height
+
+ def __getitem__(self, value):
+ if isinstance(value, tuple):
+ value = value[0] + self._width * value[1]
+ return self._grains[value]
+
+ def __setitem__(self, value, key):
+ if isinstance(value, tuple):
+ value = value[0] + self._width * value[1]
+ self._grains[value] = key
+
+ def _side_count(self, upside_down=False):
+ left = right = 0
+ for x in range(self._width):
+ for y in range(self._height):
+ if x != y and self[x, y]:
+ if x > y:
+ right += 1
+ else:
+ left += 1
+ if upside_down:
+ return right, left
+ else:
+ return left, right
+
+ def iterate(self, acceleration):
+ """Update sand based on supplied acceleration tuple. Returns True if
+ any motion occurred, otherwise False."""
+ #pylint: disable=too-many-locals,too-many-nested-blocks,too-many-branches
+
+ ax, ay, az = acceleration
+
+ # if z dominates, don't do anything
+ if abs(az) > abs(ax) and abs(az) > abs(ay):
+ return False
+
+ # unit vectors for accelo
+ ix = iy = 0
+ if abs(ax) > 0.01:
+ ratio = abs(ay / ax)
+ if ratio < 2.414: # tan(67.5deg)
+ ix = 1 if ax > 0 else -1
+ if ratio > 0.414: # tan(22.5deg)
+ iy = 1 if ay > 0 else -1
+ else:
+ iy = 1 if ay > 0 else -1
+
+ # buffer
+ new_grains = self._grains[:]
+
+ # flag to indicate change
+ updated = False
+
+ # loop through the grains
+ for x in range(self._width):
+ for y in range(self._height):
+ # is there a grain here?
+ if self[x, y]:
+ moved = False
+ # compute new location
+ newx = x + ix
+ newy = y + iy
+ # bounds check
+ newx = max(min(self._width-1, newx), 0)
+ newy = max(min(self._height-1, newy), 0)
+ # wants to move?
+ if x != newx or y != newy:
+ moved = True
+ # is it blocked?
+ if new_grains[newx + self._width * newy]:
+ # can we move diagonally?
+ if not new_grains[x + self._width * newy] and \
+ not new_grains[newx + self._width * y]:
+ # can move either way
+ # move away from fuller side
+ left, right = self._side_count(ax < 0 and ay < 0)
+ if left >= right:
+ newy = y
+ elif right > left:
+ newx = x
+ elif not new_grains[x + self._width * newy]:
+ # move in y only
+ newx = x
+ elif not new_grains[newx + self._width * y]:
+ # move in x only
+ newy = y
+ else:
+ # nope, totally blocked
+ moved = False
+ # did it move?
+ if moved:
+ new_grains[x + self._width * y] = False
+ new_grains[newx + self._width * newy] = True
+ updated = True
+
+ # did things change?
+ if updated:
+ self._grains = new_grains
+
+ return updated
diff --git a/CircuitPython_LED_Sand_Hourglass/single_matrix/code.py b/CircuitPython_LED_Sand_Hourglass/single_matrix/code.py
index 29e5521b9..b3c64fc80 100755
--- a/CircuitPython_LED_Sand_Hourglass/single_matrix/code.py
+++ b/CircuitPython_LED_Sand_Hourglass/single_matrix/code.py
@@ -10,11 +10,15 @@
DELAY = 0.00 # add some delay if you want
+# setup i2c
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+
# the accelo
-accelo = adafruit_lsm6ds.lsm6ds33.LSM6DS33(board.I2C())
+accelo = adafruit_lsm6ds.lsm6ds33.LSM6DS33(i2c)
# the matrix
-matrix = matrix.Matrix8x8(board.I2C(), 0x70)
+matrix = matrix.Matrix8x8(i2c, 0x70)
# the sand
sand = matrixsand.MatrixSand(8, 8)
diff --git a/CircuitPython_LED_Sand_Hourglass/single_matrix/matrixsand.py b/CircuitPython_LED_Sand_Hourglass/single_matrix/matrixsand.py
new file mode 100755
index 000000000..f4adf4d69
--- /dev/null
+++ b/CircuitPython_LED_Sand_Hourglass/single_matrix/matrixsand.py
@@ -0,0 +1,111 @@
+# SPDX-FileCopyrightText: 2020 Carter Nelson for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+class MatrixSand:
+ """Class to simulate simplified sand physics."""
+
+ def __init__(self, width, height):
+ self._width = width
+ self._height = height
+ self._grains = [False] * width * height
+
+ def __getitem__(self, value):
+ if isinstance(value, tuple):
+ value = value[0] + self._width * value[1]
+ return self._grains[value]
+
+ def __setitem__(self, value, key):
+ if isinstance(value, tuple):
+ value = value[0] + self._width * value[1]
+ self._grains[value] = key
+
+ def _side_count(self, upside_down=False):
+ left = right = 0
+ for x in range(self._width):
+ for y in range(self._height):
+ if x != y and self[x, y]:
+ if x > y:
+ right += 1
+ else:
+ left += 1
+ if upside_down:
+ return right, left
+ else:
+ return left, right
+
+ def iterate(self, acceleration):
+ """Update sand based on supplied acceleration tuple. Returns True if
+ any motion occurred, otherwise False."""
+ #pylint: disable=too-many-locals,too-many-nested-blocks,too-many-branches
+
+ ax, ay, az = acceleration
+
+ # if z dominates, don't do anything
+ if abs(az) > abs(ax) and abs(az) > abs(ay):
+ return False
+
+ # unit vectors for accelo
+ ix = iy = 0
+ if abs(ax) > 0.01:
+ ratio = abs(ay / ax)
+ if ratio < 2.414: # tan(67.5deg)
+ ix = 1 if ax > 0 else -1
+ if ratio > 0.414: # tan(22.5deg)
+ iy = 1 if ay > 0 else -1
+ else:
+ iy = 1 if ay > 0 else -1
+
+ # buffer
+ new_grains = self._grains[:]
+
+ # flag to indicate change
+ updated = False
+
+ # loop through the grains
+ for x in range(self._width):
+ for y in range(self._height):
+ # is there a grain here?
+ if self[x, y]:
+ moved = False
+ # compute new location
+ newx = x + ix
+ newy = y + iy
+ # bounds check
+ newx = max(min(self._width-1, newx), 0)
+ newy = max(min(self._height-1, newy), 0)
+ # wants to move?
+ if x != newx or y != newy:
+ moved = True
+ # is it blocked?
+ if new_grains[newx + self._width * newy]:
+ # can we move diagonally?
+ if not new_grains[x + self._width * newy] and \
+ not new_grains[newx + self._width * y]:
+ # can move either way
+ # move away from fuller side
+ left, right = self._side_count(ax < 0 and ay < 0)
+ if left >= right:
+ newy = y
+ elif right > left:
+ newx = x
+ elif not new_grains[x + self._width * newy]:
+ # move in y only
+ newx = x
+ elif not new_grains[newx + self._width * y]:
+ # move in x only
+ newy = y
+ else:
+ # nope, totally blocked
+ moved = False
+ # did it move?
+ if moved:
+ new_grains[x + self._width * y] = False
+ new_grains[newx + self._width * newy] = True
+ updated = True
+
+ # did things change?
+ if updated:
+ self._grains = new_grains
+
+ return updated
diff --git a/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/.circuitpython.skip-screenshot b/CircuitPython_Mastodon_API_Examples/Read_From_Mastodon/.gemma.test.skip
similarity index 100%
rename from PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/.circuitpython.skip-screenshot
rename to CircuitPython_Mastodon_API_Examples/Read_From_Mastodon/.gemma.test.skip
diff --git a/CircuitPython_Mastodon_API_Examples/Read_From_Mastodon/code.py b/CircuitPython_Mastodon_API_Examples/Read_From_Mastodon/code.py
new file mode 100644
index 000000000..37a6ccd95
--- /dev/null
+++ b/CircuitPython_Mastodon_API_Examples/Read_From_Mastodon/code.py
@@ -0,0 +1,58 @@
+# SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import os
+import re
+import time
+import ssl
+import wifi
+import socketpool
+import microcontroller
+import adafruit_requests
+
+# enter the hashtag that you want to follow
+hashtag = "CircuitPython"
+
+# connect to SSID
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+
+# add your mastodon token as 'mastodon_token' to your settings.toml file
+headers = {'Authorization': 'Bearer ' + os.getenv('mastodon_token') + 'read:statuses'}
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+# initial request, gets most recent matching hashtag post
+# add your mastodon instance (mastodon.social, tech.lgbt, etc)
+# to your settings.toml file as mastodon_host
+r = requests.get("https://%s/api/v1/timelines/tag/%s?limit=1" % (os.getenv('mastodon_host'), hashtag), headers=headers) # pylint: disable=line-too-long
+json_data = r.json()
+post_id = str(json_data[0]['id'])
+print("A new #%s post from @%s:" % (hashtag, str(json_data[0]['account']['acct'])))
+print(re.sub('<[^>]+>', '', json_data[0]['content']))
+print()
+
+while True:
+ try:
+ time.sleep(360)
+ # compares post_id to see if a new post to the hashtag has been found
+ r = requests.get("https://%s/api/v1/timelines/tag/%s?since_id=%s" % (os.getenv('mastodon_host'), hashtag, post_id), headers=headers) # pylint: disable=line-too-long
+ json_data = r.json()
+ json_length = len(json_data)
+ # if the id's match, then the json array is empty (length of 0)
+ # otherwise there is a new post
+ if json_length > 0:
+ post_id = str(json_data[0]['id'])
+ print("A new #%s post from @%s:" % (hashtag, str(json_data[0]['account']['acct'])))
+ print(re.sub('<[^>]+>', '', json_data[0]['content']))
+ print()
+ else:
+ print("no new #%s posts" % hashtag)
+ print(json_length)
+ print()
+
+ except Exception as e: # pylint: disable=broad-except
+ print("Error:\n", str(e))
+ print("Resetting microcontroller in 10 seconds")
+ time.sleep(10)
+ microcontroller.reset()
diff --git a/Trinket_Ultrasonic_Rangefinder/.gemma.test.only b/CircuitPython_Mastodon_API_Examples/Send_To_Mastodon/.gemma.test.skip
similarity index 100%
rename from Trinket_Ultrasonic_Rangefinder/.gemma.test.only
rename to CircuitPython_Mastodon_API_Examples/Send_To_Mastodon/.gemma.test.skip
diff --git a/CircuitPython_Mastodon_API_Examples/Send_To_Mastodon/code.py b/CircuitPython_Mastodon_API_Examples/Send_To_Mastodon/code.py
new file mode 100644
index 000000000..c5e7d495f
--- /dev/null
+++ b/CircuitPython_Mastodon_API_Examples/Send_To_Mastodon/code.py
@@ -0,0 +1,38 @@
+# SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import os
+import ssl
+import wifi
+import socketpool
+import adafruit_requests
+
+# add your mastodon token as 'mastodon_token' to your settings.toml file
+headers = {'Authorization': 'Bearer ' + os.getenv('mastodon_token')}
+
+# add your mastodon instance to your settings.toml file as mastodon_host
+url = 'https://' + os.getenv('mastodon_host') + '/api/v1/statuses'
+
+# connect to SSID
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+# you'll be prompted in the REPL to enter your post text
+post = input("Please enter your Mastodon post text: ")
+# pack the post for sending with the API
+post_text = {"status": post}
+
+# confirm in the REPL that you want to post by entering y for yes or n for no
+send_check = input("Send post to Mastodon (y/n)?")
+
+# if you type y
+if send_check == "y":
+ # send to mastodon with a POST request
+ r = requests.post(url, data=post_text, headers=headers)
+ print()
+ print("You posted '%s' to Mastodon. Goodbye." % post)
+# if you type n
+else:
+ print("You did not post to Mastodon. Goodbye.")
diff --git a/CircuitPython_NeXT_Keyboard_RP2040/code.py b/CircuitPython_NeXT_Keyboard_RP2040/code.py
new file mode 100644
index 000000000..ac488eea9
--- /dev/null
+++ b/CircuitPython_NeXT_Keyboard_RP2040/code.py
@@ -0,0 +1,268 @@
+# SPDX-FileCopyrightText: 2022 Jeff Epler for Adafruit Industries
+# SPDX-License-Identifier: MIT
+import array
+import time
+
+import board
+import rp2pio
+import usb_hid
+from keypad import Keys
+from adafruit_hid.consumer_control import ConsumerControl
+from adafruit_hid.keyboard import Keyboard
+from adafruit_hid.keyboard import Keycode
+from adafruit_hid.mouse import Mouse
+from adafruit_pioasm import Program
+from adafruit_ticks import ticks_add, ticks_less, ticks_ms
+from next_keycode import (
+ cc_value,
+ is_cc,
+ next_modifiers,
+ next_scancodes,
+ shifted_codes,
+ shift_modifiers,
+)
+
+
+# Compared to a modern mouse, the DPI of the NeXT mouse is low. Increasing this
+# number makes the pointer move further faster, but it also makes moves chunky.
+# Customize this number according to the trade-off you want, but also check
+# whether your operating system can assign a higher "sensitivity" or
+# "acceleration" for the mouse.
+MOUSE_SCALE = 8
+
+# Customize the power key's keycode. You can change it to `Keycode.POWER` if
+# you really want to accidentally power off your computer!
+POWER_KEY_SENDS = Keycode.F1
+
+# according to https://journal.spencerwnelson.com/entries/nextkb.html the
+# keyboard's timing source is a 455MHz crystal, and the serial data rate is
+# 1/24 the crystal frequency. This differs by a few percent from the "50us" bit
+# time reported in other sources.
+NEXT_SERIAL_BUS_FREQUENCY = round(455_000 / 24)
+
+pio_program = Program(
+ """
+top:
+ set pins, 1
+ pull block ; wait for send request
+ out x, 1 ; trigger receive?
+ out y, 7 ; get count of bits to transmit (minus 1)
+
+bitloop:
+ out pins, 1 [7] ; send next bit
+ jmp y--, bitloop [7] ; loop if bits left to send
+
+ set pins, 1 ; idle the bus after last bit
+ jmp !x, top ; to top if no scancode expected
+
+ set pins, 1 ; mark bus as idle so keyboard will send
+ set y, 19 ; 20 bits to receive
+
+ wait 0, pin 0 [7] ; wait for falling edge plus half bit time
+recvloop:
+ in pins, 1 [7] ; sample in the middle of the bit
+ jmp y--, recvloop [7] ; loop until all bits read
+
+ push ; send report to CircuitPython
+"""
+)
+
+
+def pack_message(bitcount, data, trigger_receive=False):
+ if bitcount > 24:
+ raise ValueError("too many bits in message")
+ trigger_receive = bool(trigger_receive)
+ message = (
+ (trigger_receive << 31) | ((bitcount - 1) << 24) | (data << (24 - bitcount))
+ )
+ return array.array("I", [message])
+
+
+def pack_message_str(bitstring, trigger_receive=False):
+ bitcount = len(bitstring)
+ data = int(bitstring, 2)
+ return pack_message(bitcount, data, trigger_receive=trigger_receive)
+
+
+def set_leds(i):
+ return pack_message_str(f"0000000001110{i:02b}0000000")
+
+
+QUERY = pack_message_str("000001000", True)
+MOUSEQUERY = pack_message_str("010001000", True)
+RESET = pack_message_str("0111101111110000000000")
+
+BIT_BREAK = 1 << 11
+BIT_MOD = 1
+
+
+def is_make(report):
+ return not bool(report & BIT_BREAK)
+
+
+def is_mod_report(report):
+ return not bool(report & BIT_MOD)
+
+
+def extract_bits(report, *positions):
+ result = 0
+ for p in positions:
+ result = (result << 1)
+ if report & (1 << p):
+ result |= 1
+ #result = (result << 1) | bool(report & (1<> 1) & 0x7F
+
+
+sm = rp2pio.StateMachine(
+ pio_program.assembled,
+ first_in_pin=board.MISO,
+ pull_in_pin_up=1,
+ first_set_pin=board.MOSI,
+ set_pin_count=1,
+ first_out_pin=board.MOSI,
+ out_pin_count=1,
+ frequency=16 * NEXT_SERIAL_BUS_FREQUENCY,
+ in_shift_right=False,
+ wait_for_txstall=False,
+ out_shift_right=False,
+ **pio_program.pio_kwargs,
+)
+
+
+def signfix(num, sign_pos):
+ """Fix a signed number if the bit with weight `sign_pos` is actually the sign bit"""
+ if num & sign_pos:
+ return num - 2*sign_pos
+ return num
+
+class KeyboardHandler:
+ def __init__(self):
+ self.old_modifiers = 0
+ self.cc = ConsumerControl(usb_hid.devices)
+ self.kbd = Keyboard(usb_hid.devices)
+ self.mouse = Mouse(usb_hid.devices)
+
+ def set_key_state(self, key, state):
+ if state:
+ if isinstance(key, tuple):
+ old_report_modifier = self.kbd.report_modifier[0]
+ self.kbd.report_modifier[0] = 0
+ self.kbd.press(*key)
+ self.kbd.release_all()
+ self.kbd.report_modifier[0] = old_report_modifier
+ else:
+ self.kbd.press(key)
+ else:
+ if isinstance(key, tuple):
+ pass
+ else:
+ self.kbd.release(key)
+
+ def handle_mouse_report(self, report):
+ if report == 1536: # the "nothing happened" report
+ return
+
+ dx = extract_bits(report, 11,12,13,14,15,16,17)
+ dx = -signfix(dx, 64)
+ dy = extract_bits(report, 0,1,2,3,4,5,6)
+ dy = -signfix(dy, 64)
+ b1 = not extract_bits(report, 18)
+ b2 = not extract_bits(report, 7)
+
+ self.mouse.report[0] = (
+ Mouse.MIDDLE_BUTTON if (b1 and b2) else
+ Mouse.LEFT_BUTTON if b1 else
+ Mouse.RIGHT_BUTTON if b2
+ else 0)
+ if dx or dy:
+ self.mouse.move(dx * MOUSE_SCALE, dy * MOUSE_SCALE)
+ else:
+ self.mouse._send_no_move() # pylint: disable=protected-access
+
+ def handle_report(self, report_value):
+ if report_value == 1536: # the "nothing happened" report
+ return
+
+ # Handle modifier changes
+ mods = modifiers(report_value)
+ changes = self.old_modifiers ^ mods
+ self.old_modifiers = mods
+ for i in range(7):
+ bit = 1 << i
+ if changes & bit: # Modifier key pressed or released
+ self.set_key_state(next_modifiers[i], mods & bit)
+
+ # Handle key press/release
+ code = next_scancodes.get(keycode(report_value))
+ if mods & shift_modifiers:
+ code = shifted_codes.get(keycode(report_value), code)
+ make = is_make(report_value)
+ if code:
+ if is_cc(code):
+ if make:
+ self.cc.send(cc_value(code))
+ else:
+ self.set_key_state(code, make)
+
+keys = Keys([board.SCK], value_when_pressed=False)
+
+handler = KeyboardHandler()
+
+recv_buf = array.array("I", [0])
+
+time.sleep(0.1)
+sm.write(RESET)
+time.sleep(0.1)
+
+for _ in range(4):
+ sm.write(set_leds(3))
+ time.sleep(0.1)
+ sm.write(set_leds(0))
+ time.sleep(0.1)
+
+print("Keyboard ready!")
+
+try:
+ while True:
+ if (event := keys.events.get()):
+ handler.set_key_state(POWER_KEY_SENDS, event.pressed)
+
+ sm.write(QUERY)
+ deadline = ticks_add(ticks_ms(), 100)
+ while ticks_less(ticks_ms(), deadline):
+ if sm.in_waiting:
+ sm.readinto(recv_buf)
+ value = recv_buf[0]
+ handler.handle_report(value)
+ break
+ else:
+ print("keyboard did not respond - resetting")
+ sm.restart()
+ sm.write(RESET)
+ time.sleep(0.1)
+
+ sm.write(MOUSEQUERY)
+ deadline = ticks_add(ticks_ms(), 100)
+ while ticks_less(ticks_ms(), deadline):
+ if sm.in_waiting:
+ sm.readinto(recv_buf)
+ value = recv_buf[0]
+ handler.handle_mouse_report(value)
+ break
+ else:
+ print("keyboard did not respond - resetting")
+ sm.restart()
+ sm.write(RESET)
+ time.sleep(0.1)
+finally: # Release all keys before e.g., code is reloaded
+ handler.kbd.release_all()
diff --git a/CircuitPython_NeXT_Keyboard_RP2040/next_keycode.py b/CircuitPython_NeXT_Keyboard_RP2040/next_keycode.py
new file mode 100644
index 000000000..74527c3de
--- /dev/null
+++ b/CircuitPython_NeXT_Keyboard_RP2040/next_keycode.py
@@ -0,0 +1,112 @@
+# SPDX-FileCopyrightText: 2022 Jeff Epler for Adafruit Industries
+# SPDX-License-Identifier: MIT
+from adafruit_hid.consumer_control_code import ConsumerControlCode as C
+from adafruit_hid.keycode import Keycode as K
+
+MASK_CC = 1 << 15
+
+
+def is_cc(value):
+ return isinstance(value, int) and (value & MASK_CC)
+
+
+def cc_value(value):
+ return value & ~MASK_CC
+
+
+next_modifiers = [
+ K.RIGHT_ALT,
+ K.ALT,
+ K.APPLICATION, # right command
+ K.COMMAND,
+ K.RIGHT_SHIFT,
+ K.SHIFT,
+ K.CONTROL,
+]
+
+shift_modifiers = (1<<4) | (1<<5)
+
+next_scancodes = {
+ 3: K.BACKSLASH,
+ 4: K.RIGHT_BRACKET,
+ 5: K.LEFT_BRACKET,
+ 6: K.I,
+ 7: K.O,
+ 8: K.P,
+ 9: K.LEFT_ARROW,
+ 11: K.KEYPAD_ZERO,
+ 12: K.KEYPAD_PERIOD,
+ 13: K.KEYPAD_ENTER,
+ 15: K.DOWN_ARROW,
+ 16: K.RIGHT_ARROW,
+ 17: K.KEYPAD_ONE,
+ 18: K.KEYPAD_FOUR,
+ 19: K.KEYPAD_SIX,
+ 20: K.KEYPAD_THREE,
+ 21: K.KEYPAD_PLUS,
+ 22: K.UP_ARROW,
+ 23: K.KEYPAD_TWO,
+ 24: K.KEYPAD_FIVE,
+ 27: K.BACKSPACE,
+ 28: K.EQUALS,
+ 29: K.MINUS,
+ 30: K.EIGHT,
+ 31: K.NINE,
+ 32: K.ZERO,
+ 33: K.KEYPAD_SEVEN,
+ 34: K.KEYPAD_EIGHT,
+ 35: K.KEYPAD_NINE,
+ 36: K.KEYPAD_MINUS,
+ 37: K.KEYPAD_ASTERISK,
+ 38: K.GRAVE_ACCENT,
+ 39: K.KEYPAD_EQUALS,
+ 40: K.KEYPAD_FORWARD_SLASH,
+ 42: K.RETURN,
+ 43: K.QUOTE,
+ 44: K.SEMICOLON,
+ 45: K.L,
+ 46: K.COMMA,
+ 47: K.PERIOD,
+ 48: K.FORWARD_SLASH,
+ 49: K.Z,
+ 50: K.X,
+ 51: K.C,
+ 52: K.V,
+ 53: K.B,
+ 54: K.M,
+ 55: K.N,
+ 56: K.SPACE,
+ 57: K.A,
+ 58: K.S,
+ 59: K.D,
+ 60: K.F,
+ 61: K.G,
+ 62: K.K,
+ 63: K.J,
+ 64: K.H,
+ 65: K.TAB,
+ 66: K.Q,
+ 67: K.W,
+ 68: K.E,
+ 69: K.R,
+ 70: K.U,
+ 71: K.Y,
+ 72: K.T,
+ 73: K.ESCAPE,
+ 74: K.ONE,
+ 75: K.TWO,
+ 76: K.THREE,
+ 77: K.FOUR,
+ 78: K.SEVEN,
+ 79: K.SIX,
+ 80: K.FIVE,
+ 26: C.VOLUME_INCREMENT | MASK_CC,
+ 2: C.VOLUME_DECREMENT | MASK_CC,
+ 25: C.BRIGHTNESS_INCREMENT | MASK_CC,
+ 1: C.BRIGHTNESS_DECREMENT | MASK_CC,
+}
+
+shifted_codes = {
+ 39: K.BACKSLASH, # already shifted
+ 40: (K.BACKSLASH,), # will temporarily undo shift
+}
diff --git a/CircuitPython_NeXT_Mouse_RP2040/code.py b/CircuitPython_NeXT_Mouse_RP2040/code.py
new file mode 100644
index 000000000..66dd0e0da
--- /dev/null
+++ b/CircuitPython_NeXT_Mouse_RP2040/code.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+# SPDX-License-Identifier: MIT
+import board
+import digitalio
+import rotaryio
+from adafruit_hid.mouse import Mouse
+from usb_hid import devices
+
+SCALE = 4
+
+class RelativeEncoder:
+ def __init__(self, pin_a, pin_b, divisor=1):
+ self._encoder = rotaryio.IncrementalEncoder(pin_a, pin_b, divisor)
+ self._old = self._encoder.position
+
+ @property
+ def delta(self):
+ old = self._old
+ new = self._old = self._encoder.position
+ return new - old
+
+xpos = RelativeEncoder(board.A0, board.A1)
+ypos = RelativeEncoder(board.A2, board.A3)
+lmb = digitalio.DigitalInOut(board.SCL)
+lmb.pull = digitalio.Pull.UP
+rmb = digitalio.DigitalInOut(board.SDA)
+rmb.pull = digitalio.Pull.UP
+
+mouse = Mouse(devices)
+
+while True:
+ dx = xpos.delta * SCALE
+ dy = ypos.delta * SCALE
+ l = not lmb.value
+ r = not rmb.value
+ mouse.report[0] = (
+ mouse.MIDDLE_BUTTON if (l and r) else
+ mouse.LEFT_BUTTON if l else
+ mouse.RIGHT_BUTTON if r else
+ 0)
+
+ if dx or dy:
+ mouse.move(dx, dy)
+ else:
+ mouse._send_no_move() # pylint: disable=protected-access
diff --git a/CircuitPython_Neko_Cat/code.py b/CircuitPython_Neko_Cat/code.py
index 216a42a99..d77a75347 100644
--- a/CircuitPython_Neko_Cat/code.py
+++ b/CircuitPython_Neko_Cat/code.py
@@ -580,7 +580,7 @@ def update(self):
main_group.append(neko)
# show main_group on the display
-display.show(main_group)
+display.root_group = main_group
if USE_TOUCH_OVERLAY:
# initialize laser palette
diff --git a/CircuitPython_OLED_Watch/code.py b/CircuitPython_OLED_Watch/code.py
index 7b0549142..247c8845c 100755
--- a/CircuitPython_OLED_Watch/code.py
+++ b/CircuitPython_OLED_Watch/code.py
@@ -15,7 +15,8 @@
displayio.release_displays()
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
display_bus = displayio.I2CDisplay(i2c, device_address=0x3c)
oled = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=32)
@@ -72,4 +73,4 @@
watch_group.append(date)
watch_group.append(text)
- oled.show(watch_group)
+ oled.root_group = watch_group
diff --git a/CircuitPython_RGBMatrix/fruit/code.py b/CircuitPython_RGBMatrix/fruit/code.py
index 2541f2065..f63b72bd5 100644
--- a/CircuitPython_RGBMatrix/fruit/code.py
+++ b/CircuitPython_RGBMatrix/fruit/code.py
@@ -111,7 +111,7 @@ def kick(self, i):
wheel.y = -20
g.append(wheel)
wheels.append(wheel)
-display.show(g)
+display.root_group = g
# Make a unique order of the emoji on each wheel
orders = [shuffled(range(20)), shuffled(range(20)), shuffled(range(20))]
diff --git a/CircuitPython_RGBMatrix/life/code.py b/CircuitPython_RGBMatrix/life/code.py
index e902dac1c..c3ee86984 100644
--- a/CircuitPython_RGBMatrix/life/code.py
+++ b/CircuitPython_RGBMatrix/life/code.py
@@ -91,7 +91,7 @@ def conway(output):
tg2 = displayio.TileGrid(b2, pixel_shader=palette)
g1 = displayio.Group(scale=SCALE)
g1.append(tg1)
-display.show(g1)
+display.root_group = g1
g2 = displayio.Group(scale=SCALE)
g2.append(tg2)
@@ -108,9 +108,9 @@ def conway(output):
# values, 400 frames seems like a good number. Working in this way, with
# two bitmaps, reduces copying data and makes the animation a bit faster
for _ in range(n):
- display.show(g1)
+ display.root_group = g1
apply_life_rule(b1, b2)
- display.show(g2)
+ display.root_group = g2
apply_life_rule(b2, b1)
# After 2*n generations, fill the board with random values and
diff --git a/CircuitPython_RGBMatrix/rp2040/code.py b/CircuitPython_RGBMatrix/rp2040/code.py
index e618d6a82..6499a38da 100644
--- a/CircuitPython_RGBMatrix/rp2040/code.py
+++ b/CircuitPython_RGBMatrix/rp2040/code.py
@@ -30,7 +30,7 @@
l = Label(text="Feather\nRP2040", font=terminalio.FONT, color=0xffffff, line_spacing=.7)
g.append(l)
-display.show(g)
+display.root_group = g
target_fps = 50
ft = 1/target_fps
diff --git a/CircuitPython_RGBMatrix/scroller/code.py b/CircuitPython_RGBMatrix/scroller/code.py
index 9ab3b7e86..f4effc206 100644
--- a/CircuitPython_RGBMatrix/scroller/code.py
+++ b/CircuitPython_RGBMatrix/scroller/code.py
@@ -32,7 +32,7 @@
def tilegrid(palette):
return displayio.TileGrid(
bitmap=terminalio.FONT.bitmap, pixel_shader=palette,
- width=1, height=1, tile_width=6, tile_height=14, default_tile=32)
+ width=1, height=1, tile_width=6, tile_height=12, default_tile=32)
g = displayio.Group()
@@ -44,7 +44,7 @@ def tilegrid(palette):
l2 = displayio.Group()
g.append(l1)
g.append(l2)
-display.show(g)
+display.root_group = g
l1.y = 1
l2.y = 16
diff --git a/CircuitPython_RGBMatrix/simple_scroller/code.py b/CircuitPython_RGBMatrix/simple_scroller/code.py
index acf4ad3e5..c94574271 100644
--- a/CircuitPython_RGBMatrix/simple_scroller/code.py
+++ b/CircuitPython_RGBMatrix/simple_scroller/code.py
@@ -60,7 +60,7 @@
g = displayio.Group()
g.append(line1)
g.append(line2)
-display.show(g)
+display.root_group = g
# This function will scoot one label a pixel to the left and send it back to
# the far right if it's gone all the way off screen. This goes in a function
diff --git a/CircuitPython_RGBMatrix/tiled/code.py b/CircuitPython_RGBMatrix/tiled/code.py
index f2e01a80a..7c63d0343 100755
--- a/CircuitPython_RGBMatrix/tiled/code.py
+++ b/CircuitPython_RGBMatrix/tiled/code.py
@@ -66,7 +66,7 @@
GROUP = displayio.Group()
GROUP.append(TILEGRID)
-DISPLAY.show(GROUP)
+DISPLAY.root_group = GROUP
DISPLAY.refresh()
# Nothing interactive, just hold the image there
diff --git a/CircuitPython_RPN_Calculator/code.py b/CircuitPython_RPN_Calculator/code.py
index f90f7046f..e591faf16 100644
--- a/CircuitPython_RPN_Calculator/code.py
+++ b/CircuitPython_RPN_Calculator/code.py
@@ -224,7 +224,7 @@ def __init__(self):
g.insert(0, bg)
- display.show(g)
+ display.root_group = g
def getch(self):
while True:
diff --git a/CircuitPython_SNES_Mouse/code.py b/CircuitPython_SNES_Mouse/code.py
new file mode 100644
index 000000000..0cc8eb1fd
--- /dev/null
+++ b/CircuitPython_SNES_Mouse/code.py
@@ -0,0 +1,68 @@
+# SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+# SPDX-License-Identifier: MIT
+import time
+import board
+import digitalio
+from adafruit_hid.mouse import Mouse
+from usb_hid import devices
+
+SCALE = 3
+
+def delta(value): # Convert 8 bit value to signed number of distance steps
+ value = ~value # All value is inverted on the bus
+ if value & 0x80: # and is in sign-magnitude format
+ return -(value & 0x7f)
+ else:
+ return value & 0x7f
+
+mouse = Mouse(devices)
+
+spi = board.SPI()
+strobe = digitalio.DigitalInOut(board.RX)
+strobe.switch_to_output(False)
+
+if not spi.try_lock():
+ raise SystemExit("could not lock SPI bus")
+
+spi.configure(baudrate=100_000, polarity=1)
+
+# Wait for the mouse to be ready at power-on
+time.sleep(2)
+
+# A buffer to fetch mouse data into
+data = bytearray(4)
+
+print("Mouse is ready!")
+while True:
+ # Request fresh data
+ strobe.value = True
+ strobe.value = False
+
+ # Must do read in 2 pieces with delay in between
+ spi.readinto(data, end=2)
+ spi.readinto(data, start=2)
+ lmb = bool(~data[1] & 0x40) # data is inverted on the bus
+ rmb = bool(~data[1] & 0x80)
+ dy = delta(data[2])
+ dx = delta(data[3])
+
+
+ # Pressing both buttons together emulates the wheel
+ wheel = lmb and rmb
+
+ # Compute the new button state
+ old_buttons = mouse.report[0]
+ mouse.report[0] = (
+ 0 if wheel else
+ mouse.LEFT_BUTTON if lmb else
+ mouse.RIGHT_BUTTON if rmb else
+ 0)
+
+ # If there's any movement, send a move event
+ if dx or dy:
+ if wheel:
+ mouse.move(dx * SCALE, 0, wheel=-dy)
+ else:
+ mouse.move(dx * SCALE, dy * SCALE)
+ elif old_buttons != mouse.report[0]:
+ mouse.press(0) # Send buttons previously set via report[0]
diff --git a/CircuitPython_Scorpio_Tree/code.py b/CircuitPython_Scorpio_Tree/code.py
new file mode 100644
index 000000000..35d746bd9
--- /dev/null
+++ b/CircuitPython_Scorpio_Tree/code.py
@@ -0,0 +1,74 @@
+# SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+# SPDX-License-Identifier: MIT
+import board
+from adafruit_led_animation.animation.chase import Chase
+from adafruit_led_animation.animation.comet import Comet
+from adafruit_led_animation.animation.rainbow import Rainbow
+from adafruit_led_animation.color import (JADE, RED, WHITE)
+from adafruit_led_animation.group import AnimationGroup
+from adafruit_led_animation.sequence import AnimationSequence
+from adafruit_neopxl8 import NeoPxl8
+from adafruit_pixelmap import PixelMap
+
+strand_length = 30
+pixel_brightness = 0.8
+num_strands = 8
+
+num_pixels = num_strands * strand_length
+pixels = NeoPxl8(board.NEOPIXEL0, num_pixels, auto_write=False, brightness=pixel_brightness)
+
+def strand(n):
+ return PixelMap(
+ pixels,
+ tuple(range(n * strand_length, (n + 1) * strand_length)),
+ individual_pixels=True,
+ )
+
+pixel_strip_A = strand(0)
+pixel_strip_B = strand(1)
+pixel_strip_C = strand(2)
+pixel_strip_D = strand(3)
+pixel_strip_E = strand(4)
+pixel_strip_F = strand(5)
+pixel_strip_G = strand(6)
+pixel_strip_H = strand(7)
+
+animations = AnimationSequence(
+ AnimationGroup(
+ Rainbow(pixel_strip_A, speed=0.01, period=7),
+ Rainbow(pixel_strip_B, speed=0.01, period=7),
+ Rainbow(pixel_strip_C, speed=0.01, period=7),
+ Rainbow(pixel_strip_D, speed=0.01, period=7),
+ Rainbow(pixel_strip_E, speed=0.01, period=7),
+ Rainbow(pixel_strip_F, speed=0.01, period=7),
+ Rainbow(pixel_strip_G, speed=0.01, period=7),
+ Rainbow(pixel_strip_H, speed=0.01, period=7),
+ ),
+ AnimationGroup(
+ Chase(pixel_strip_A, speed=0.05, color=WHITE, spacing=5, size=8),
+ Chase(pixel_strip_B, speed=0.05, color=RED, spacing=4, size=4),
+ Chase(pixel_strip_C, speed=0.05, color=RED, spacing=4, size=8),
+ Chase(pixel_strip_D, speed=0.05, color=JADE, spacing=5, size=5),
+ Chase(pixel_strip_E, speed=0.05, color=WHITE, spacing=5, size=5),
+ Chase(pixel_strip_F, speed=0.05, color=RED, spacing=4, size=5),
+ Chase(pixel_strip_G, speed=0.05, color=JADE, spacing=3, size=4),
+ Chase(pixel_strip_H, speed=0.05, color=RED, spacing=4, size=8),
+ sync=False,
+ ),
+ AnimationGroup(
+ Comet(pixel_strip_A, 0.01, color=WHITE, tail_length=12, bounce=True),
+ Comet(pixel_strip_B, 0.01, color=RED, tail_length=12, reverse=True),
+ Comet(pixel_strip_C, 0.01, color=RED, tail_length=12, bounce=True),
+ Comet(pixel_strip_D, 0.01, color=JADE, tail_length=12, reverse=True),
+ Comet(pixel_strip_E, 0.01, color=WHITE, tail_length=12, bounce=True),
+ Comet(pixel_strip_F, 0.01, color=RED, tail_length=12, reverse=True),
+ Comet(pixel_strip_G, 0.01, color=JADE, tail_length=12, bounce=True),
+ Comet(pixel_strip_H, 0.01, color=RED, tail_length=12, reverse=True),
+ sync=True,
+ ),
+ advance_interval=9,
+ auto_clear=True,
+)
+
+while True:
+ animations.animate()
diff --git a/CircuitPython_Scrolling_Clouds/code.py b/CircuitPython_Scrolling_Clouds/code.py
index 21dd074e6..b3e3d67c2 100644
--- a/CircuitPython_Scrolling_Clouds/code.py
+++ b/CircuitPython_Scrolling_Clouds/code.py
@@ -71,7 +71,7 @@ def make_tilegrid():
tile_height=48, tile_width=32,
default_tile=EMPTY)
group.append(grid)
- display.show(group)
+ display.root_group = group
return grid
diff --git a/CircuitPython_SharpDisplay_Displayio/code.py b/CircuitPython_SharpDisplay_Displayio/code.py
index f8f515713..53c372cd5 100644
--- a/CircuitPython_SharpDisplay_Displayio/code.py
+++ b/CircuitPython_SharpDisplay_Displayio/code.py
@@ -166,7 +166,7 @@ def sample(population, k):
# Create a Group for the BLM text
blm_group = displayio.Group()
-display.show(blm_group)
+display.root_group = blm_group
# Create a 3 line set of text for BLM
blm_font = [None, None, None]
@@ -204,7 +204,7 @@ def sample(population, k):
# Repeatedly show the BLM slogan and then 5 names.
while True:
- display.show(blm_group)
+ display.root_group = blm_group
# Show the BLM slogan
with BatchDisplayUpdate(display):
@@ -227,20 +227,12 @@ def sample(population, k):
time.sleep(2)
# Show 5 names
- display.show(name_group)
+ display.root_group = name_group
for name in sample(names, 5):
print(name)
lines = name.split(" ")
with BatchDisplayUpdate(display):
for i in range(2):
names_font[i].text = lines[i]
-
- # Due to a bug in adafruit_display_text, we need to reestablish
- # the position of the labels when updating them.
- # Once https://github.com/adafruit/Adafruit_CircuitPython_Display_Text/issues/82
- # has been resolved, this code will no longer be necessary (but
- # will not be harmful either)
- names_font[i].anchor_point = (0.5, 0)
- names_font[i].anchored_position = (200, i*84+42)
time.sleep(5)
names_font[0].text = names_font[1].text = ""
diff --git a/CircuitPython_Sip_and_Puff/puff_detector.py b/CircuitPython_Sip_and_Puff/puff_detector.py
index 47ad3812a..855c64983 100644
--- a/CircuitPython_Sip_and_Puff/puff_detector.py
+++ b/CircuitPython_Sip_and_Puff/puff_detector.py
@@ -290,4 +290,4 @@ def _update_display(self):
splash.append(high_pressure_label)
splash.append(pressure_label)
- self.display.show(splash)
+ self.display.root_group = splash
diff --git a/CircuitPython_Slider/code.py b/CircuitPython_Slider/code.py
index bc70e3c46..6dd6eed8c 100644
--- a/CircuitPython_Slider/code.py
+++ b/CircuitPython_Slider/code.py
@@ -124,7 +124,7 @@
begin = time.monotonic()
print(begin)
# when feather is powered up it shows the initial graphic splash
-minitft.display.show(graphics[mode])
+minitft.display.root_group = graphics[mode]
while True:
# setup minitft featherwing buttons
@@ -153,7 +153,7 @@
if mode > 3:
mode = 0
print("Mode:,", mode)
- minitft.display.show(graphics[mode])
+ minitft.display.root_group = graphics[mode]
# scroll up to change slide duration and graphic
if buttons.up and up_state == "pressed":
# blocks the button if the slider is sliding or
@@ -167,10 +167,10 @@
if mode < 0:
mode = 3
print("Mode: ", mode)
- minitft.display.show(graphics[mode])
+ minitft.display.root_group = graphics[mode]
# workaround so that the menu graphics show after a slide is finished
if mode == mode and pause == 0 and onOff == 0:
- minitft.display.show(graphics[mode])
+ minitft.display.root_group = graphics[mode]
# starts slide
if buttons.select and select_state == "pressed" or z == 2:
# blocks the button if the slider is sliding or
@@ -180,7 +180,7 @@
select_state = None
else:
# shows the slider is sliding graphic
- minitft.display.show(progBarGroup)
+ minitft.display.root_group = progBarGroup
# gets time of button press
press = time.monotonic()
print(press)
@@ -230,7 +230,7 @@
check = 0
if end < 10:
# displays the stopping graphic for the last 10 secs.
- minitft.display.show(stopGroup)
+ minitft.display.root_group = stopGroup
# changes states after slide has completed
kit.stepper1.release()
pause = 1
@@ -240,7 +240,7 @@
# delay for safety
time.sleep(2)
# shows choice menu
- minitft.display.show(reverseqGroup)
+ minitft.display.root_group = reverseqGroup
# b is defined to stop the slider
# only active if the slider is in the 'stopped' state
if buttons.b and b_state == "pressed" and stop == 1:
@@ -249,7 +249,7 @@
if z == 0:
b_state = None
time.sleep(1)
- minitft.display.show(backingUpGroup)
+ minitft.display.root_group = backingUpGroup
# delay for safety
time.sleep(2)
# brings camera back to 'home' at double speed
@@ -286,7 +286,7 @@
a_state = None
# same script as the 'regular' slide loop
time.sleep(2)
- minitft.display.show(progBarGroup)
+ minitft.display.root_group = progBarGroup
press = time.monotonic()
print(press)
text_area.text = slide_begin[mode]
@@ -322,7 +322,7 @@
if check > 19:
check = 0
if end < 10:
- minitft.display.show(stopGroup)
+ minitft.display.root_group = stopGroup
# state changes
kit.stepper1.release()
pause = 1
@@ -331,4 +331,4 @@
z = 1
check = 0
time.sleep(2)
- minitft.display.show(reverseqGroup)
+ minitft.display.root_group = reverseqGroup
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/am.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/am.wav
new file mode 100644
index 000000000..cb5242372
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/am.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/annc.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/annc.wav
new file mode 100644
index 000000000..112705fd6
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/annc.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/boot.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/boot.wav
new file mode 100644
index 000000000..373fd9a1d
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/boot.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h01.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h01.wav
new file mode 100644
index 000000000..5af90dd7c
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h01.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h02.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h02.wav
new file mode 100644
index 000000000..d5211b783
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h02.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h03.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h03.wav
new file mode 100644
index 000000000..ae6c9f9f9
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h03.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h04.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h04.wav
new file mode 100644
index 000000000..d4149c515
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h04.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h05.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h05.wav
new file mode 100644
index 000000000..93fe82825
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h05.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h06.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h06.wav
new file mode 100644
index 000000000..530bef981
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h06.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h07.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h07.wav
new file mode 100644
index 000000000..0e5903e44
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h07.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h08.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h08.wav
new file mode 100644
index 000000000..5d4543803
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h08.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h09.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h09.wav
new file mode 100644
index 000000000..bd9f759cf
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h09.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h10.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h10.wav
new file mode 100644
index 000000000..934f19ce0
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h10.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h11.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h11.wav
new file mode 100644
index 000000000..9951669d9
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h11.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/h12.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h12.wav
new file mode 100644
index 000000000..fbae802cd
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/h12.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m00.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m00.wav
new file mode 100644
index 000000000..fa152e9f2
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m00.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m0x.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m0x.wav
new file mode 100644
index 000000000..b5073bd1d
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m0x.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m1.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m1.wav
new file mode 100644
index 000000000..8b4dab53d
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m1.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m10.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m10.wav
new file mode 100644
index 000000000..e10efa7d3
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m10.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m11.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m11.wav
new file mode 100644
index 000000000..b17a1a9f8
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m11.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m12.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m12.wav
new file mode 100644
index 000000000..7bc69ba50
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m12.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m13.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m13.wav
new file mode 100644
index 000000000..5c82f6699
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m13.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m14.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m14.wav
new file mode 100644
index 000000000..8c1986f1c
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m14.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m15.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m15.wav
new file mode 100644
index 000000000..4a2c32318
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m15.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m16.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m16.wav
new file mode 100644
index 000000000..411cd0691
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m16.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m17.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m17.wav
new file mode 100644
index 000000000..faf8cf59c
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m17.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m18.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m18.wav
new file mode 100644
index 000000000..f5d9af074
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m18.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m19.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m19.wav
new file mode 100644
index 000000000..bcd291126
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m19.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m2.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m2.wav
new file mode 100644
index 000000000..66ed9dab4
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m2.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m20.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m20.wav
new file mode 100644
index 000000000..dcc1f5aca
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m20.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m2x.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m2x.wav
new file mode 100644
index 000000000..559b8dd7a
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m2x.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m3.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m3.wav
new file mode 100644
index 000000000..647193e10
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m3.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m30.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m30.wav
new file mode 100644
index 000000000..11626d0a9
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m30.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m3x.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m3x.wav
new file mode 100644
index 000000000..7d9461f6c
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m3x.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m4.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m4.wav
new file mode 100644
index 000000000..5e9afbf06
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m4.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m40.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m40.wav
new file mode 100644
index 000000000..7e27104d3
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m40.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m4x.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m4x.wav
new file mode 100644
index 000000000..9f988a1e8
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m4x.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m5.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m5.wav
new file mode 100644
index 000000000..0cb3e00c7
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m5.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m50.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m50.wav
new file mode 100644
index 000000000..d69386489
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m50.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m5x.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m5x.wav
new file mode 100644
index 000000000..296ef00e9
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m5x.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m6.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m6.wav
new file mode 100644
index 000000000..3ab225f78
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m6.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m7.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m7.wav
new file mode 100644
index 000000000..66736df79
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m7.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m8.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m8.wav
new file mode 100644
index 000000000..8bc4fea24
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m8.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/m9.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m9.wav
new file mode 100644
index 000000000..8ff6b2d12
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/m9.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/clock_sounds/pm.wav b/CircuitPython_Talking_Adabot_Clock/clock_sounds/pm.wav
new file mode 100644
index 000000000..7c9650a2b
Binary files /dev/null and b/CircuitPython_Talking_Adabot_Clock/clock_sounds/pm.wav differ
diff --git a/CircuitPython_Talking_Adabot_Clock/code.py b/CircuitPython_Talking_Adabot_Clock/code.py
new file mode 100644
index 000000000..46839d094
--- /dev/null
+++ b/CircuitPython_Talking_Adabot_Clock/code.py
@@ -0,0 +1,176 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import time
+import board
+import audiocore
+import audiobusio
+import audiomixer
+import adafruit_ds3231
+from digitalio import DigitalInOut, Direction
+import neopixel
+import keypad
+
+# enable external power pin
+# provides power to the external components
+external_power = DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = Direction.OUTPUT
+external_power.value = True
+
+# setup external button pin as a keypad object
+key = keypad.Keys((board.EXTERNAL_BUTTON,), value_when_pressed=False, pull=True)
+
+# neopixel mouth setup
+pixels = neopixel.NeoPixel(board.EXTERNAL_NEOPIXELS, 8, auto_write=True, brightness=0.2)
+blue = (0, 0, 255)
+off = (0, 0, 0)
+pixels.fill(off)
+
+# rtc module
+i2c = board.I2C()
+rtc = adafruit_ds3231.DS3231(i2c)
+
+# pylint: disable-msg=using-constant-test
+if False: # change to True if you want to set the time!
+ # year, mon, date, hour, min, sec, wday, yday, isdst
+ t = time.struct_time((2023, 8, 22, 16, 47, 00, 1, -1, -1))
+ # you must set year, mon, date, hour, min, sec and weekday
+ # yearday is not supported, isdst can be set but we don't do anything with it at this time
+ print("Setting time to:", t) # uncomment for debugging
+ rtc.datetime = t
+ print()
+# pylint: enable-msg=using-constant-test
+
+# sound arrays
+bookend_sounds = []
+hour_sounds = []
+min_sounds = []
+clock_queue = []
+# bring in the audio files and put them into the different arrays
+for filename in os.listdir('/clock_sounds'):
+ if filename.lower().endswith('.wav') and not filename.startswith('.'):
+ if filename.startswith('h'):
+ hour_sounds.append("/clock_sounds/"+filename)
+ elif filename.startswith('m'):
+ min_sounds.append("/clock_sounds/"+filename)
+ else:
+ bookend_sounds.append("/clock_sounds/"+filename)
+# sort the arrays alphabetically
+bookend_sounds.sort()
+hour_sounds.sort()
+min_sounds.sort()
+print(hour_sounds)
+print(min_sounds)
+print(bookend_sounds)
+
+# i2s amp setup with mixer
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True)
+audio.play(mixer)
+mixer.voice[0].level = 0.5
+
+# function for queueing wave files
+def open_audio(wavs, num):
+ n = wavs[num]
+ f = open(n, "rb")
+ w = audiocore.WaveFile(f)
+ clock_queue.append(w)
+ return w
+
+# queue boot up sound to play before going into the loop
+boot_sound = open_audio(bookend_sounds, 2)
+
+# function for gathering clock audio files
+def prep_clock(hour_num, minute_num):
+ # queues "the time is.."
+ open_audio(bookend_sounds, 1)
+ # convert 24 hour time from RTC to 12 hour
+ if hour_num >= 12:
+ # convert 24 hour to 12 hour
+ if hour_num > 12:
+ hour_num = hour_num - 12
+ # set to PM
+ ampm_num = 3
+ # otherwise its the morning
+ else:
+ # set AM
+ ampm_num = 0
+ # queueing hour, single digit waves have a 0 before the number
+ if hour_num <= 9:
+ print(hour_num)
+ h = hour_sounds.index(f'/clock_sounds/h0{hour_num}.wav')
+ else:
+ print(hour_num)
+ h = hour_sounds.index(f'/clock_sounds/h{hour_num}.wav')
+ # open wave file for the hour
+ open_audio(hour_sounds, h)
+ # if the minute is divisible by 10 (10, 20, 30, etc)
+ if minute_num % 10 == 0:
+ # check for on the hour (1:00, 2:00, etc)
+ if minute_num == 0:
+ m = min_sounds.index(f'/clock_sounds/m{minute_num}0.wav')
+ else:
+ m = min_sounds.index(f'/clock_sounds/m{minute_num}.wav')
+ print(minute_num)
+ # individual wave files exist for 1-19
+ elif minute_num <= 19:
+ print(minute_num)
+ # if it's a single digit number, bring in the "oh" wave file
+ if minute_num <= 9:
+ mm = min_sounds.index('/clock_sounds/m0x.wav')
+ open_audio(min_sounds, mm)
+ m = min_sounds.index(f'/clock_sounds/m{minute_num}.wav')
+ # otherwise, for minutes 21-59 that are not divisible by 10
+ else:
+ # we need to seperate the minutes digits
+ digits = list(map(int, str(minute_num)))
+ #print(digits)
+ # get the tens spot (30, 40, etc)
+ mm = min_sounds.index(f'/clock_sounds/m{digits[0]}x.wav')
+ # add the wav to the array
+ open_audio(min_sounds, mm)
+ # get the ones spot (1, 2, etc)
+ m = min_sounds.index(f'/clock_sounds/m{digits[1]}.wav')
+ # combined it will say ex: "30...5"
+ # add the wav to the array
+ open_audio(min_sounds, m)
+ # finish with am or pm
+ open_audio(bookend_sounds, ampm_num)
+# initial RTC read
+t = rtc.datetime
+print(t)
+# say the time on boot
+pixels.fill(blue)
+prep_clock(t.tm_hour, t.tm_min)
+for i in range(len(clock_queue)):
+ mixer.voice[0].play(clock_queue[i], loop=False)
+ while mixer.playing:
+ pass
+# clear the audio file queue
+clock_queue.clear()
+pixels.fill(off)
+
+while True:
+ # listen for button input
+ event = key.events.get()
+ if event:
+ # if the button is pressed
+ if event.pressed:
+ # read from RTC module
+ t = rtc.datetime
+ # turn on neopixels
+ pixels.fill(blue)
+ # gather the audio files based on RTC reading
+ prep_clock(t.tm_hour, t.tm_min)
+ # play through each wave one by one
+ for i in range(len(clock_queue)):
+ mixer.voice[0].play(clock_queue[i], loop=False)
+ while mixer.playing:
+ pass
+ # afterwards clear out the queue
+ clock_queue.clear()
+ # turn off neopixels
+ pixels.fill(off)
diff --git a/CircuitPython_Templates/adafruit_io_cpu_temp_neopixel_color/code.py b/CircuitPython_Templates/adafruit_io_cpu_temp_neopixel_color/code.py
index 982ff6c13..e27c28fde 100644
--- a/CircuitPython_Templates/adafruit_io_cpu_temp_neopixel_color/code.py
+++ b/CircuitPython_Templates/adafruit_io_cpu_temp_neopixel_color/code.py
@@ -3,6 +3,7 @@
# SPDX-License-Identifier: MIT
import time
import ssl
+import os
from random import randint
import microcontroller
import socketpool
@@ -12,23 +13,12 @@
import adafruit_minimqtt.adafruit_minimqtt as MQTT
from adafruit_io.adafruit_io import IO_MQTT
-try:
- from secrets import secrets
-except ImportError:
- print("WiFi and Adafruit IO credentials are kept in secrets.py - please add them there!")
- raise
-
-# Add your Adafruit IO Username and Key to secrets.py
-# (visit io.adafruit.com if you need to create an account,
-# or if you need to obtain your Adafruit IO key.)
-aio_username = secrets["aio_username"]
-aio_key = secrets["aio_key"]
# WiFi
try:
- print("Connecting to %s" % secrets["ssid"])
- wifi.radio.connect(secrets["ssid"], secrets["password"])
- print("Connected to %s!" % secrets["ssid"])
+ print("Connecting to %s" % os.getenv("CIRCUITPY_WIFI_SSID"))
+ wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
+ print("Connected to %s!" % os.getenv("CIRCUITPY_WIFI_SSID"))
# Wi-Fi connectivity fails with error messages, not specific errors, so this except is broad.
except Exception as e: # pylint: disable=broad-except
print("Failed to connect to WiFi. Error:", e, "\nBoard will hard reset in 30 seconds.")
@@ -58,8 +48,8 @@ def message(client, feed_id, payload): # pylint: disable=unused-argument
# Initialize a new MQTT Client object
mqtt_client = MQTT.MQTT(
broker="io.adafruit.com",
- username=secrets["aio_username"],
- password=secrets["aio_key"],
+ username=os.getenv("ADAFRUIT_IO_USERNAME"),
+ password=os.getenv("ADAFRUIT_IO_KEY"),
socket_pool=pool,
ssl_context=ssl.create_default_context(),
)
diff --git a/CircuitPython_Templates/airlift_ble_example/code.py b/CircuitPython_Templates/airlift_ble_example/code.py
new file mode 100644
index 000000000..9a997cbe3
--- /dev/null
+++ b/CircuitPython_Templates/airlift_ble_example/code.py
@@ -0,0 +1,74 @@
+# SPDX-FileCopyrightText: 2020 Dan Halbert, written for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+# pylint: disable=unused-import
+import board
+import busio
+from digitalio import DigitalInOut
+from adafruit_ble import BLERadio
+from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
+from adafruit_ble.services.nordic import UARTService
+from adafruit_esp32spi import adafruit_esp32spi
+from adafruit_airlift.esp32 import ESP32
+
+# If you are using a Metro M4 Airlift Lite, PyPortal,
+# or MatrixPortal, you can use the default pin settings.
+# Leave this DEFAULT line uncommented.
+# If you are using a board with pre-defined ESP32 Pins:
+esp32 = ESP32()
+
+# If you are using a Metro M7 **OR**
+# if you are using CircuitPython 6.0.0 or earlier,
+# on PyPortal and PyPortal Titano only, use the pin settings
+# below. Comment out the DEFAULT line above and uncomment
+# the line below. For CircuitPython 6.1.0, the pin names
+# have changed for these boards, and the DEFAULT line
+# above is correct.
+# esp32 = ESP32(tx=board.TX, rx=board.RX)
+
+# If you are using an AirLift FeatherWing or AirLift Bitsy Add-On,
+# use the pin settings below. Comment out the DEFAULT line above
+# and uncomment the lines below.
+# If you are using an AirLift Breakout, check that these
+# choices match the wiring to your microcontroller board,
+# or change them as appropriate.
+# esp32 = ESP32(
+# reset=board.D12,
+# gpio0=board.D10,
+# busy=board.D11,
+# chip_select=board.D13,
+# tx=board.TX,
+# rx=board.RX,
+# )
+
+# If you are using an AirLift Shield,
+# use the pin settings below. Comment out the DEFAULT line above
+# and uncomment the lines below.
+# esp32 = ESP32(
+# reset=board.D5,
+# gpio0=board.D6,
+# busy=board.D7,
+# chip_select=board.D10,
+# tx=board.TX,
+# rx=board.RX,
+# )
+
+adapter = esp32.start_bluetooth()
+
+ble = BLERadio(adapter)
+uart = UARTService()
+advertisement = ProvideServicesAdvertisement(uart)
+
+while True:
+ ble.start_advertising(advertisement)
+ print("waiting to connect")
+ while not ble.connected:
+ pass
+ print("connected: trying to read input")
+ while ble.connected:
+ # Returns b'' if nothing was read.
+ one_byte = uart.read(1)
+ if one_byte:
+ print(one_byte)
+ uart.write(one_byte)
diff --git a/CircuitPython_Templates/cap_touch_pin_script/code.py b/CircuitPython_Templates/cap_touch_pin_script/code.py
index 30c0048c4..5e33d9043 100644
--- a/CircuitPython_Templates/cap_touch_pin_script/code.py
+++ b/CircuitPython_Templates/cap_touch_pin_script/code.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2021-2023 Kattni Rembor for Adafruit Industries
# SPDX-License-Identifier: MIT
"""
CircuitPython Touch-Compatible Pin Identification Script
@@ -45,6 +45,14 @@ def get_pin_names():
"ACCELEROMETER_SCL",
"MICROPHONE_CLOCK",
"MICROPHONE_DATA",
+ "RFM_RST",
+ "RFM_CS",
+ "RFM_IO0",
+ "RFM_IO1",
+ "RFM_IO2",
+ "RFM_IO3",
+ "RFM_IO4",
+ "RFM_IO5",
]
pins = [
pin
@@ -72,7 +80,7 @@ def get_pin_names():
"pulldown" in error_message # If the ValueError is regarding needing a pulldown...
):
print(
- "Touch (no pulldown) on:", str(possible_touch_pin).replace("board.", "")
+ "Touch on:", str(possible_touch_pin).replace("board.", "")
)
else:
print("No touch on:", str(possible_touch_pin).replace("board.", ""))
diff --git a/CircuitPython_Templates/i2c_find_pins/code.py b/CircuitPython_Templates/i2c_find_pins/code.py
index 39e4ee7ea..a5af83c11 100644
--- a/CircuitPython_Templates/i2c_find_pins/code.py
+++ b/CircuitPython_Templates/i2c_find_pins/code.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2021-2023 Kattni Rembor for Adafruit Industries
# SPDX-License-Identifier: MIT
"""CircuitPython I2C possible pin-pair identifying script"""
import board
@@ -35,6 +35,16 @@ def get_unique_pins():
"VOLTAGE_MONITOR",
"MICROPHONE_CLOCK",
"MICROPHONE_DATA",
+ "RFM_RST",
+ "RFM_CS",
+ "RFM_IO0",
+ "RFM_IO1",
+ "RFM_IO2",
+ "RFM_IO3",
+ "RFM_IO4",
+ "RFM_IO5",
+ "TFT_I2C_POWER",
+ "NEOPIXEL_POWER",
]
if p in dir(board)
]
diff --git a/CircuitPython_Templates/i2c_mcp9808/code.py b/CircuitPython_Templates/i2c_mcp9808/code.py
index 57ced821c..c90e36efd 100644
--- a/CircuitPython_Templates/i2c_mcp9808/code.py
+++ b/CircuitPython_Templates/i2c_mcp9808/code.py
@@ -6,6 +6,7 @@
import adafruit_mcp9808
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# import busio
# i2c = busio.I2C(board.SCL1, board.SDA1) # For QT Py RP2040, QT Py ESP32-S2
mcp9808 = adafruit_mcp9808.MCP9808(i2c)
diff --git a/CircuitPython_Templates/i2c_scan/code.py b/CircuitPython_Templates/i2c_scan/code.py
index 50a6999f9..5b609fe41 100644
--- a/CircuitPython_Templates/i2c_scan/code.py
+++ b/CircuitPython_Templates/i2c_scan/code.py
@@ -4,11 +4,8 @@
import time
import board
-# To use default I2C bus (most boards)
-i2c = board.I2C()
-
-# To use the STEMMA QT connector (most boards)
-# i2c = board.STEMMA_I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# To create I2C bus on specific pins
# import busio
diff --git a/CircuitPython_Templates/lc709203_simple_data/code.py b/CircuitPython_Templates/lc709203_simple_data/code.py
index e56f6edfb..77f8967d1 100644
--- a/CircuitPython_Templates/lc709203_simple_data/code.py
+++ b/CircuitPython_Templates/lc709203_simple_data/code.py
@@ -8,7 +8,9 @@
from adafruit_lc709203f import LC709203F, PackSize
# Create sensor object, using the board's default I2C bus.
-battery_monitor = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+battery_monitor = LC709203F(i2c)
# Update to match the mAh of your battery for more accurate readings.
# Can be MAH100, MAH200, MAH400, MAH500, MAH1000, MAH2000, MAH3000.
diff --git a/CircuitPython_Templates/max17048/code.py b/CircuitPython_Templates/max17048/code.py
new file mode 100644
index 000000000..41b582fc5
--- /dev/null
+++ b/CircuitPython_Templates/max17048/code.py
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+import time
+import board
+import adafruit_max1704x
+
+monitor = adafruit_max1704x.MAX17048(board.I2C())
+
+while True:
+ print(f"Battery voltage: {monitor.cell_voltage:.2f} Volts")
+ print(f"Battery percentage: {monitor.cell_percent:.1f} %")
+ print("")
+ time.sleep(1)
diff --git a/CircuitPython_Templates/power_management_measuring_battery/code.py b/CircuitPython_Templates/power_management_measuring_battery/code.py
new file mode 100644
index 000000000..5f7bd8cff
--- /dev/null
+++ b/CircuitPython_Templates/power_management_measuring_battery/code.py
@@ -0,0 +1,42 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+import time
+import board
+from adafruit_max1704x import MAX17048
+from adafruit_lc709203f import LC709203F, PackSize
+
+#
+i2c = board.I2C()
+while not i2c.try_lock():
+ pass
+i2c_address_list = i2c.scan()
+i2c.unlock()
+
+device = None
+
+if 0x0b in i2c_address_list:
+ lc709203 = LC709203F(board.I2C())
+ # Update to match the mAh of your battery for more accurate readings.
+ # Can be MAH100, MAH200, MAH400, MAH500, MAH1000, MAH2000, MAH3000.
+ # Choose the closest match. Include "PackSize." before it, as shown.
+ lc709203.pack_size = PackSize.MAH400
+
+ device = lc709203
+ print("Battery monitor: LC709203")
+
+elif 0x36 in i2c_address_list:
+ max17048 = MAX17048(board.I2C())
+
+ device = max17048
+ print("Battery monitor: MAX17048")
+
+else:
+ raise Exception("Battery monitor not found.")
+
+while device:
+ print(f"Battery voltage: {device.cell_voltage:.2f} Volts")
+ print(f"Battery percentage: {device.cell_percent:.1f} %")
+ print("")
+ time.sleep(1)
diff --git a/CircuitPython_Templates/pwm_tone_playback/code.py b/CircuitPython_Templates/pwm_tone_playback/code.py
new file mode 100644
index 000000000..18636ac8b
--- /dev/null
+++ b/CircuitPython_Templates/pwm_tone_playback/code.py
@@ -0,0 +1,38 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out tone example
+Plays a tone for one second on, one
+second off, in a loop.
+
+Remove this line and all of the following docstring content before submitting to the Learn repo.
+
+Update the audio out pin to match the wiring chosen for the microcontroller.
+Update the following pin name to a viable pin:
+* AUDIO_OUTPUT_PIN
+"""
+import time
+import array
+import math
+import board
+from audiocore import RawSample
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.AUDIO_OUTPUT_PIN)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("H", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((1 + math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+
+sine_wave_sample = RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/CircuitPython_Templates/pwm_wav_playback/StreetChicken.wav b/CircuitPython_Templates/pwm_wav_playback/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/CircuitPython_Templates/pwm_wav_playback/StreetChicken.wav differ
diff --git a/CircuitPython_Templates/pwm_wav_playback/code.py b/CircuitPython_Templates/pwm_wav_playback/code.py
new file mode 100644
index 000000000..286d5e302
--- /dev/null
+++ b/CircuitPython_Templates/pwm_wav_playback/code.py
@@ -0,0 +1,28 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out WAV example
+Play a WAV file once.
+
+Remove this line and all of the following docstring content before submitting to the Learn repo.
+
+Update the audio out pin to match the wiring chosen for the microcontroller.
+Update the following pin name to a viable pin:
+* AUDIO_OUTPUT_PIN
+"""
+import board
+from audiocore import WaveFile
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.AUDIO_OUTPUT_PIN)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wave = WaveFile(wave_file)
+ print("Playing wav file!")
+ audio.play(wave)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/CircuitPython_Templates/sd_card_read/code.py b/CircuitPython_Templates/sd_card_read/code.py
new file mode 100644
index 000000000..fac60c867
--- /dev/null
+++ b/CircuitPython_Templates/sd_card_read/code.py
@@ -0,0 +1,58 @@
+# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Essentials SD Card Read Demo
+REMOVE THIS LINE AND ALL BELOW IT BEFORE SUBMITTING TO LEARN
+Update CHIP_SELECT_PIN to match the CS pin on your board.
+
+For example, for the Metro ESP32-S3, you would use: board.SD_CS.
+"""
+
+import os
+import digitalio
+import board
+import storage
+import adafruit_sdcard
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.CHIP_SELECT_PIN
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+# This helper function will print the contents of the SD
+def print_directory(path, tabs=0):
+ for file in os.listdir(path):
+ stats = os.stat(path + "/" + file)
+ filesize = stats[6]
+ isdir = stats[0] & 0x4000
+
+ if filesize < 1000:
+ sizestr = str(filesize) + " bytes"
+ elif filesize < 1000000:
+ sizestr = "%0.1f KB" % (filesize / 1000)
+ else:
+ sizestr = "%0.1f MB" % (filesize / 1000000)
+
+ prettyprintname = ""
+ for _ in range(tabs):
+ prettyprintname += " "
+ prettyprintname += file
+ if isdir:
+ prettyprintname += "/"
+ print("{0:<40} Size: {1:>10}".format(prettyprintname, sizestr))
+
+ # recursively print directory contents
+ if isdir:
+ print_directory(path + "/" + file, tabs + 1)
+
+
+print("Files on filesystem:")
+print("====================")
+print_directory("/sd")
diff --git a/CircuitPython_Templates/sd_card_write/code.py b/CircuitPython_Templates/sd_card_write/code.py
new file mode 100644
index 000000000..07c8ec00e
--- /dev/null
+++ b/CircuitPython_Templates/sd_card_write/code.py
@@ -0,0 +1,40 @@
+# SPDX-FileCopyrightText: 2017 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython Essentials SD Card Write Demo
+REMOVE THIS LINE AND ALL BELOW IT BEFORE SUBMITTING TO LEARN
+Update CHIP_SELECT_PIN to match the CS pin on your board.
+
+For example, for the Metro ESP32-S3, you would use: board.SD_CS.
+"""
+
+import time
+import adafruit_sdcard
+import board
+import digitalio
+import microcontroller
+import storage
+
+# The SD_CS pin is the chip select line.
+SD_CS = board.CHIP_SELECT_PIN
+
+# Connect to the card and mount the filesystem.
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(board.SPI(), cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+print("Logging temperature to filesystem")
+# append to the file!
+while True:
+ # open file for append
+ with open("/sd/temperature.txt", "a") as f:
+ t = microcontroller.cpu.temperature
+ print("Temperature = %0.1f" % t)
+ f.write("%0.1f\n" % t)
+ # file is saved
+ time.sleep(1)
diff --git a/CircuitPython_Touch_Deck/code.py b/CircuitPython_Touch_Deck/code.py
index f15f77374..3d999cb0d 100644
--- a/CircuitPython_Touch_Deck/code.py
+++ b/CircuitPython_Touch_Deck/code.py
@@ -55,7 +55,7 @@
# Make the main_group to hold everything
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
# loading screen
loading_group = displayio.Group()
diff --git a/CircuitPython_Zorque_Text_Game_openai/code.py b/CircuitPython_Zorque_Text_Game_openai/code.py
new file mode 100644
index 000000000..ea45d589e
--- /dev/null
+++ b/CircuitPython_Zorque_Text_Game_openai/code.py
@@ -0,0 +1,323 @@
+# SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+# SPDX-License-Identifier: MIT
+import os
+import traceback
+
+import adafruit_esp32spi.adafruit_esp32spi_socket as socket
+import adafruit_requests as requests
+import adafruit_touchscreen
+from adafruit_ticks import ticks_ms, ticks_add, ticks_less
+from adafruit_bitmap_font.bitmap_font import load_font
+from adafruit_display_text.bitmap_label import Label
+from adafruit_display_text import wrap_text_to_pixels
+import board
+import displayio
+import supervisor
+import terminalio
+from adafruit_esp32spi import adafruit_esp32spi
+from digitalio import DigitalInOut
+
+# Use
+# https://github.com/adafruit/Adafruit_CircuitPython_Touchscreen/blob/main/examples/touchscreen_calibrator_built_in.py
+# to calibrate your touchscreen
+touchscreen_calibration=((6616, 60374), (8537, 57269))
+
+
+# set to True to use openapi, False for quicker testing of the rest of the game
+# logic
+use_openai = True
+
+# Place the key in your settings.toml file
+openai_api_key = os.getenv("OPENAI_API_KEY")
+
+# Select a 14-point font for the PyPortal titano, 10-point for original & Pynt
+if board.DISPLAY.width > 320:
+ nice_font = load_font("helvR14.pcf")
+else:
+ nice_font = load_font("helvR10.pcf")
+line_spacing = 0.75
+
+# Customize this prompt as you see fit to create a different experience
+base_prompt = """
+You are an AI helping the player play an endless text adventure game. You will stay in character as the GM.
+
+The goal of the game is to save the Zorque mansion from being demolished. The \
+game starts outside the abandoned Zorque mansion.
+
+As GM, never let the player die; they always survive a situation, no matter how \
+harrowing.
+
+At each step:
+ * Offer a short description of my surroundings (1 paragraph)
+ * List the items I am carrying, if any
+ * Offer me 4 terse numbered action choices (1 or 2 words each)
+
+In any case, be relatively terse and keep word counts small.
+
+In case the player wins (or loses) start a fresh game.
+"""
+
+clear='\033[2J'
+
+def set_up_wifi():
+ print(end=clear)
+ if openai_api_key is None:
+ print(
+ "please set OPENAPI_API_KEY in settings.toml"
+ )
+ raise SystemExit
+
+ wifi_ssid = os.getenv('WIFI_SSID')
+ wifi_password = os.getenv('WIFI_PASSWORD')
+ if wifi_ssid is None:
+ print(
+ "please set WIFI_SSID and WIFI_PASSWORD in settings.toml"
+ )
+ raise SystemExit
+
+ esp_cs = DigitalInOut(board.ESP_CS)
+ esp_ready = DigitalInOut(board.ESP_BUSY)
+ esp_reset = DigitalInOut(board.ESP_RESET)
+
+ spi = board.SPI()
+ esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp_cs, esp_ready, esp_reset)
+ requests.set_socket(socket, esp)
+
+ while not esp.is_connected:
+ print("Connecting to AP...")
+ try:
+ esp.connect_AP(wifi_ssid, wifi_password)
+ except Exception as e: # pylint: disable=broad-except
+ print("could not connect to AP, retrying: ", e)
+ for ap in esp.scan_networks():
+ print("%-24s RSSI: %d" % (str(ap["ssid"], "utf-8"), ap["rssi"]))
+ continue
+ print("Connected to WiFi")
+
+def terminal_label(text, width_in_chars, palette, x, y):
+ label = displayio.TileGrid(terminalio.FONT.bitmap, pixel_shader=palette,
+ width=width_in_chars, height=1, tile_width=glyph_width,
+ tile_height=glyph_height)
+ label.x = x
+ label.y = y
+ term = terminalio.Terminal(label, terminalio.FONT)
+ term.write(f"{text: ^{width_in_chars-1}}")
+ return label
+
+def terminal_palette(fg=0xffffff, bg=0):
+ p = displayio.Palette(2)
+ p[0] = bg
+ p[1] = fg
+ return p
+
+class WrappedTextDisplay:
+ def __init__(self):
+ self.line_offset = 0
+ self.lines = []
+
+ def add_text(self, text):
+ self.lines.extend(wrap_text_to_pixels(text, use_width, nice_font))
+
+ def set_text(self, text):
+ self.lines = wrap_text_to_pixels(text, use_width, nice_font)
+ self.line_offset = 0
+
+ def scroll_to_end(self):
+ self.line_offset = self.max_offset()
+
+ def scroll_next_line(self):
+ max_offset = self.max_offset()
+ if max_offset > 0:
+ line_offset = self.line_offset + 1
+ self.line_offset = line_offset % (max_offset + 1)
+
+ def max_offset(self):
+ return max(0, len(self.lines) - max_lines)
+
+ def on_last_line(self):
+ return self.line_offset == self.max_offset()
+
+ def refresh(self):
+ text = '\n'.join(self.lines[self.line_offset : self.line_offset + max_lines])
+ terminal.text = text
+ board.DISPLAY.refresh()
+wrapped_text_display = WrappedTextDisplay()
+
+def print_wrapped(text):
+ wrapped_text_display.set_text(text)
+ wrapped_text_display.refresh()
+
+def make_full_prompt(action):
+ return session + [{"role": "user", "content": f"PLAYER: {action}"}]
+
+def record_game_step(action, response):
+ session.extend([
+ {"role": "user", "content": f"PLAYER: {action}"},
+ {"role": "assistant", "content": response.strip()},
+ ])
+ # Keep a limited number of exchanges in the prompt
+ del session[1:-5]
+
+def get_one_completion(full_prompt):
+ if not use_openai:
+ return f"""\
+This is a canned response in offline mode. The player's last choice was as follows:
+ {full_prompt[-1]['content']}
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor \
+incididunt ut labore et dolore magna aliqua. Nulla aliquet enim tortor at \
+auctor urna. Arcu ac tortor dignissim convallis aenean et tortor at. Dapibus \
+ultrices in iaculis nunc sed augue. Enim nec dui nunc mattis enim ut tellus \
+elementum sagittis. Sit amet mattis vulputate enim nulla. Ultrices in iaculis \
+nunc sed augue lacus. Pulvinar neque laoreet suspendisse interdum consectetur \
+libero id faucibus nisl. Aenean pharetra magna ac placerat vestibulum lectus \
+mauris ultrices eros. Imperdiet nulla malesuada pellentesque elit eget. Tellus \
+at urna condimentum mattis pellentesque id nibh tortor. Velit dignissim sodales \
+ut eu sem integer vitae. Id ornare arcu odio ut sem nulla pharetra diam sit.
+
+1: Stand in the place where you live
+2: Now face West
+3: Think about the place where you live
+4: Wonder why you haven't before
+ """.strip()
+ try:
+ response = requests.post(
+ "https://api.openai.com/v1/chat/completions",
+ json={"model": "gpt-3.5-turbo", "messages": full_prompt},
+ headers={
+ "Authorization": f"Bearer {openai_api_key}",
+ },
+ )
+ except Exception as e: # pylint: disable=broad-except
+ print("requests exception", e)
+ return None
+ if response.status_code != 200:
+ print("requests status", response.status_code)
+ return None
+ j = response.json()
+ result = j["choices"][0]["message"]["content"]
+ return result.strip()
+
+def get_touchscreen_choice():
+ # Wait for screen to be released
+ while ts.touch_point:
+ pass
+
+ # Wait for screen to be pressed
+ touch_count = 0
+ deadline = ticks_add(ticks_ms(), 1000)
+ while True:
+ t = ts.touch_point
+ if t is not None:
+ touch_count += 1
+ if touch_count > 5:
+ break
+ else:
+ touch_count = 0
+ if wrapped_text_display.max_offset() > 0 and ticks_less(deadline, ticks_ms()):
+ wrapped_text_display.scroll_next_line()
+ wrapped_text_display.refresh()
+ deadline = ticks_add(deadline,
+ 5000 if wrapped_text_display.on_last_line() else 1000)
+
+ # Depending on the quadrant of the screen, make a choice
+ x, y, _ = t
+ result = 1
+ if x > board.DISPLAY.width / 2:
+ result = result + 1
+ if y > board.DISPLAY.height / 2:
+ result = result + 2
+ return result
+
+def run_game_step(forced_choice=None):
+ if forced_choice:
+ choice = forced_choice
+ else:
+ choice = get_touchscreen_choice()
+ wrapped_text_display.add_text(f"\nPLAYER: {choice}")
+ wrapped_text_display.scroll_to_end()
+ wrapped_text_display.refresh()
+
+ prompt = make_full_prompt(choice)
+ for _ in range(3):
+ result = get_one_completion(prompt)
+ if result is not None:
+ break
+ else:
+ raise ValueError("Error getting completion from OpenAI")
+ print(result)
+ wrapped_text_display.set_text(result)
+ wrapped_text_display.refresh()
+
+ record_game_step(choice, result)
+
+if use_openai:
+ # Only set up wifi if using openai
+ set_up_wifi()
+
+# Set up the touchscreen
+# These pins are used as both analog and digital! XL, XR and YU must be analog
+# and digital capable. YD just need to be digital
+ts = adafruit_touchscreen.Touchscreen(
+ board.TOUCH_XL,
+ board.TOUCH_XR,
+ board.TOUCH_YD,
+ board.TOUCH_YU,
+ calibration=touchscreen_calibration,
+ size=(board.DISPLAY.width, board.DISPLAY.height)
+)
+
+# Set up the 4 onscreen buttons & embedded terminal
+main_group = displayio.Group()
+main_group.x = 4
+main_group.y = 4
+
+# Determine the size of everything
+glyph_width, glyph_height = terminalio.FONT.get_bounding_box()
+use_height = board.DISPLAY.height - 4
+use_width = board.DISPLAY.width - 4
+
+# Game text is displayed on this wdget
+terminal = Label(
+ font=nice_font,
+ color=0xFFFFFF,
+ background_color=0,
+ line_spacing=line_spacing,
+ anchor_point=(0, 0),
+ anchored_position=(0, glyph_height + 1),
+)
+max_lines = (use_height - 2 * glyph_height) // int(
+ nice_font.get_bounding_box()[1] * terminal.line_spacing
+)
+main_group.append(terminal)
+
+# Indicate what each quadrant of the screen does when tapped
+label_width = use_width // (glyph_width * 2)
+main_group.append(terminal_label('1', label_width, terminal_palette(0, 0xffff00), 0, 0))
+main_group.append(terminal_label('2', label_width, terminal_palette(0, 0x00ffff),
+ use_width - label_width*glyph_width, 0))
+main_group.append(terminal_label('3', label_width, terminal_palette(0, 0xff00ff),
+ 0, use_height-glyph_height))
+main_group.append(terminal_label('4', label_width, terminal_palette(0, 0x00ff00),
+ use_width - label_width*glyph_width, use_height-glyph_height))
+
+# Show our stuff on the screen
+board.DISPLAY.auto_refresh = False
+board.DISPLAY.root_group = main_group
+board.DISPLAY.refresh()
+
+# Track the game so far. ALways start with the base prompt.
+session = [
+ {"role": "system", "content": base_prompt.strip()},
+]
+
+try:
+ run_game_step("New game")
+ while True:
+ run_game_step()
+except Exception as e: # pylint: disable=broad-except
+ traceback.print_exception(e) # pylint: disable=no-value-for-parameter
+ print_wrapped("An error occurred (more details on REPL).\nTouch the screen to re-load")
+ board.DISPLAY.refresh()
+ get_touchscreen_choice()
+ supervisor.reload()
diff --git a/CircuitPython_Zorque_Text_Game_openai/helvR10.pcf b/CircuitPython_Zorque_Text_Game_openai/helvR10.pcf
new file mode 100644
index 000000000..bd16dd4b3
Binary files /dev/null and b/CircuitPython_Zorque_Text_Game_openai/helvR10.pcf differ
diff --git a/CircuitPython_Zorque_Text_Game_openai/helvR14.pcf b/CircuitPython_Zorque_Text_Game_openai/helvR14.pcf
new file mode 100644
index 000000000..515eb4634
Binary files /dev/null and b/CircuitPython_Zorque_Text_Game_openai/helvR14.pcf differ
diff --git a/CircuitPython_displayio/displayio_display_driver/code.py b/CircuitPython_displayio/displayio_display_driver/code.py
index c0ba5a6f6..ca8026e49 100644
--- a/CircuitPython_displayio/displayio_display_driver/code.py
+++ b/CircuitPython_displayio/displayio_display_driver/code.py
@@ -40,7 +40,7 @@
group = displayio.Group()
group.append(tile_grid)
-display.show(group)
+display.root_group = group
# Loop forever so you can enjoy your image
while True:
diff --git a/CircuitPython_displayio/displayio_display_manual/code.py b/CircuitPython_displayio/displayio_display_manual/code.py
index 4ea2a02b6..60ba96c38 100644
--- a/CircuitPython_displayio/displayio_display_manual/code.py
+++ b/CircuitPython_displayio/displayio_display_manual/code.py
@@ -67,7 +67,7 @@
group = displayio.Group()
group.append(tile_grid)
-display.show(group)
+display.root_group = group
# Loop forever so you can enjoy your image
while True:
diff --git a/CircuitPython_displayio/displayio_font/code.py b/CircuitPython_displayio/displayio_font/code.py
index cc671dfc6..3c9cb68e0 100644
--- a/CircuitPython_displayio/displayio_font/code.py
+++ b/CircuitPython_displayio/displayio_font/code.py
@@ -21,7 +21,7 @@
text_area.y = 20
# Show it
-display.show(text_area)
+display.root_group = text_area
# Loop forever so you can enjoy your text
while True:
diff --git a/CircuitPython_displayio/displayio_imageload/code.py b/CircuitPython_displayio/displayio_imageload/code.py
index b87d1f682..665ea8797 100644
--- a/CircuitPython_displayio/displayio_imageload/code.py
+++ b/CircuitPython_displayio/displayio_imageload/code.py
@@ -22,7 +22,7 @@
group.append(tile_grid)
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# Loop forever so you can enjoy your image
while True:
diff --git a/CircuitPython_displayio/displayio_ondiskbitmap/code.py b/CircuitPython_displayio/displayio_ondiskbitmap/code.py
index c7911ff6f..d1b11cf00 100644
--- a/CircuitPython_displayio/displayio_ondiskbitmap/code.py
+++ b/CircuitPython_displayio/displayio_ondiskbitmap/code.py
@@ -20,7 +20,7 @@
group.append(tile_grid)
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# Loop forever so you can enjoy your image
while True:
diff --git a/CircuitPython_displayio/displayio_parallelbus/code.py b/CircuitPython_displayio/displayio_parallelbus/code.py
index 4ab1bec28..b8ea15e40 100644
--- a/CircuitPython_displayio/displayio_parallelbus/code.py
+++ b/CircuitPython_displayio/displayio_parallelbus/code.py
@@ -65,7 +65,7 @@
group = displayio.Group()
group.append(tile_grid)
-display.show(group)
+display.root_group = group
# Loop forever so you can enjoy your image
while True:
diff --git a/CircuitPython_displayio/displayio_pixels/code.py b/CircuitPython_displayio/displayio_pixels/code.py
index 30fa80769..1acff6f4a 100644
--- a/CircuitPython_displayio/displayio_pixels/code.py
+++ b/CircuitPython_displayio/displayio_pixels/code.py
@@ -25,7 +25,7 @@
group.append(tile_grid)
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# Draw a pixel
bitmap[80, 50] = 1
diff --git a/CircuitPython_displayio/displayio_sprite_sheet/code.py b/CircuitPython_displayio/displayio_sprite_sheet/code.py
index 8ca336826..484ca2071 100644
--- a/CircuitPython_displayio/displayio_sprite_sheet/code.py
+++ b/CircuitPython_displayio/displayio_sprite_sheet/code.py
@@ -28,7 +28,7 @@
group.append(sprite)
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# Set sprite location
group.x = 120
diff --git a/CircuitPython_displayio/displayio_text/code.py b/CircuitPython_displayio/displayio_text/code.py
index 194b1b5da..5ffa1cb40 100644
--- a/CircuitPython_displayio/displayio_text/code.py
+++ b/CircuitPython_displayio/displayio_text/code.py
@@ -21,7 +21,7 @@
text_area.y = 80
# Show it
-display.show(text_area)
+display.root_group = text_area
# Loop forever so you can enjoy your image
while True:
diff --git a/CircuitPython_displayio/displayio_tilegrids/code.py b/CircuitPython_displayio/displayio_tilegrids/code.py
index 3d04bb507..155f60faa 100644
--- a/CircuitPython_displayio/displayio_tilegrids/code.py
+++ b/CircuitPython_displayio/displayio_tilegrids/code.py
@@ -67,7 +67,7 @@
sprite.y = 70
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# Loop forever so you can enjoy your image
while True:
diff --git a/CircuitPython_gifio/Feather/README.gif b/CircuitPython_gifio/Feather/README.gif
new file mode 100644
index 000000000..aaaf2eb7e
--- /dev/null
+++ b/CircuitPython_gifio/Feather/README.gif
@@ -0,0 +1 @@
+## Feather ESP32-S2 TFT gifio
diff --git a/CircuitPython_gifio/Feather/code-multi-feather-direct.py b/CircuitPython_gifio/Feather/code-multi-feather-direct.py
new file mode 100644
index 000000000..879a73c0f
--- /dev/null
+++ b/CircuitPython_gifio/Feather/code-multi-feather-direct.py
@@ -0,0 +1,71 @@
+# SPDX-FileCopyrightText: 2023 Anne Barela for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+#
+# Play Multiple GIF files on an ESP32-S2 Feather TFT
+# Requires CircuitPython 8.1.0-beta.1 or later
+# Updated 4/4/2023
+
+import time
+import gc
+import os
+import struct
+import board
+import gifio
+import digitalio
+
+# Get a dictionary of GIF filenames at the passed base directory
+def get_files(base):
+ allfiles = os.listdir(base)
+ file_names = []
+ for _, filetext in enumerate(allfiles):
+ if not filetext.startswith("."):
+ if filetext not in ('boot_out.txt', 'System Volume Information'):
+ if filetext.endswith(".gif"):
+ file_names.append(filetext)
+ return file_names
+
+# Set BOOT button on ESP32-S2 Feather TFT to advance to next GIF
+button = digitalio.DigitalInOut(board.BUTTON)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+display = board.DISPLAY
+display.auto_refresh = False
+
+COL_OFFSET = 40 # The Feather TFT needs to have the display
+ROW_OFFSET = 53 # offset by these values for direct writes
+
+files = get_files("/")
+for i in range(len(files)):
+
+ odg = gifio.OnDiskGif(files[i])
+ # Skip PyPortal GIFs if put on ESP32-S2 Feather TFT
+ if odg.width != board.DISPLAY.width:
+ print("File "+files[i]+" not right width, skipping\n")
+ continue
+
+ start = time.monotonic()
+ next_delay = odg.next_frame() # Load the first frame
+ end = time.monotonic()
+ call_delay = end - start
+
+ # Display GIF file frames until screen touched (for PyPortal)
+ while True:
+ sleeptime = max(0, next_delay - call_delay)
+ time.sleep(sleeptime)
+ # If the BOOT button is pressed, advance to next GIF file
+ if button.value is False:
+ print("Button Press, Advance\n")
+ break
+ next_delay = odg.next_frame()
+ display.bus.send(42, struct.pack(">hh", COL_OFFSET,
+ odg.bitmap.width - 1 + COL_OFFSET))
+ display.bus.send(43, struct.pack(">hh", ROW_OFFSET,
+ odg.bitmap.height - 1 + ROW_OFFSET))
+ display.bus.send(44, odg.bitmap)
+ # End while
+ # Clean up memory
+ odg.deinit()
+ odg = None
+ gc.collect()
+# End for
diff --git a/CircuitPython_gifio/Feather/code-single-displayio-feather.py b/CircuitPython_gifio/Feather/code-single-displayio-feather.py
new file mode 100644
index 000000000..5693018f1
--- /dev/null
+++ b/CircuitPython_gifio/Feather/code-single-displayio-feather.py
@@ -0,0 +1,56 @@
+# SPDX-FileCopyrightText: 2023 Anne Barela for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+#
+# Play a single animated GIF file (display_bus "fast" method)
+#
+# Documentation:
+# https://docs.circuitpython.org/en/latest/shared-bindings/gifio/
+# Updated 4/5/2023
+
+import time
+import gc
+import board
+import gifio
+import digitalio
+import displayio
+
+display = board.DISPLAY
+splash = displayio.Group()
+display.root_group = splash
+
+# Set BOOT button on ESP32-S2 Feather TFT to stop GIF
+button = digitalio.DigitalInOut(board.BUTTON)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+# Open GIF file sample.gif
+odg = gifio.OnDiskGif('/sample.gif')
+
+start = time.monotonic()
+next_delay = odg.next_frame() # Load the first frame
+end = time.monotonic()
+overhead = end - start
+
+face = displayio.TileGrid(
+ odg.bitmap,
+ pixel_shader=displayio.ColorConverter(
+ input_colorspace=displayio.Colorspace.RGB565_SWAPPED
+ ),
+)
+splash.append(face)
+board.DISPLAY.refresh()
+
+# Display repeatedly & directly.
+while True:
+ # Sleep for the frame delay specified by the GIF,
+ # minus the overhead measured to advance between frames.
+ time.sleep(max(0, next_delay - overhead))
+ # If the BOOT button is pressed, stop the GIF
+ if button.value is False:
+ print("Button Press, Stop\n")
+ break
+ next_delay = odg.next_frame()
+# End While - cleanup memory
+odg.deinit()
+odg = None
+gc.collect()
diff --git a/CircuitPython_gifio/Feather/sample-invaders-small.gif b/CircuitPython_gifio/Feather/sample-invaders-small.gif
new file mode 100644
index 000000000..da648132f
Binary files /dev/null and b/CircuitPython_gifio/Feather/sample-invaders-small.gif differ
diff --git a/CircuitPython_gifio/Feather/sample-parrot-small.gif b/CircuitPython_gifio/Feather/sample-parrot-small.gif
new file mode 100644
index 000000000..7f919f91e
Binary files /dev/null and b/CircuitPython_gifio/Feather/sample-parrot-small.gif differ
diff --git a/CircuitPython_gifio/PyPortal/README.md b/CircuitPython_gifio/PyPortal/README.md
new file mode 100644
index 000000000..40a881e67
--- /dev/null
+++ b/CircuitPython_gifio/PyPortal/README.md
@@ -0,0 +1 @@
+## Adafruit PyPortal gifio demonstration files
diff --git a/CircuitPython_gifio/PyPortal/code-multi-pyportal-direct.py b/CircuitPython_gifio/PyPortal/code-multi-pyportal-direct.py
new file mode 100644
index 000000000..3d11dd351
--- /dev/null
+++ b/CircuitPython_gifio/PyPortal/code-multi-pyportal-direct.py
@@ -0,0 +1,70 @@
+# SPDX-FileCopyrightText: 2023 Anne Barela for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+#
+# Play Multiple GIF files on a PyPortal
+# Requires CircuitPython 8.1.0-beta.1 or later
+# Updated 4/4/2023
+
+import time
+import gc
+import os
+import struct
+import board
+import gifio
+import adafruit_touchscreen
+
+# Get a dictionary of GIF filenames at the passed base directory
+def get_files(base):
+ allfiles = os.listdir(base)
+ file_names = []
+ for _, filetext in enumerate(allfiles):
+ if not filetext.startswith("."):
+ if filetext not in ('boot_out.txt', 'System Volume Information'):
+ if filetext.endswith(".gif"):
+ file_names.append(filetext)
+ return file_names
+
+display = board.DISPLAY
+
+# Take over display to drive directly
+display.auto_refresh = False
+display_bus = display.bus
+
+# Pyportal has a touchscreen, a touch advances to next GIF file
+WIDTH = board.DISPLAY.width
+HEIGHT = board.DISPLAY.height
+ts = adafruit_touchscreen.Touchscreen(board.TOUCH_XL, board.TOUCH_XR,
+ board.TOUCH_YD, board.TOUCH_YU,
+ calibration=((5200, 59000), (5800, 57000)),
+ size=(WIDTH, HEIGHT))
+files = get_files("/")
+for i in range(len(files)):
+
+ odg = gifio.OnDiskGif(files[i])
+ # Skip Feather GIFs if put on PyPortal
+ if odg.width != WIDTH:
+ print("File "+files[i]+" not right width, skipping\n")
+ continue
+
+ start = time.monotonic()
+ next_delay = odg.next_frame() # Load the first frame
+ end = time.monotonic()
+ call_delay = end - start
+
+ # Display GIF file frames until screen touched (for PyPortal)
+ while True:
+ sleeptime = max(0, next_delay - call_delay)
+ time.sleep(sleeptime)
+ if ts.touch_point is not None:
+ break
+ next_delay = odg.next_frame()
+ display_bus.send(42, struct.pack(">hh", 0, odg.bitmap.width - 1))
+ display_bus.send(43, struct.pack(">hh", 0, odg.bitmap.height - 1))
+ display_bus.send(44, odg.bitmap)
+ # End while
+ # Clean up memory
+ odg.deinit()
+ odg = None
+ gc.collect()
+# End for
diff --git a/CircuitPython_gifio/PyPortal/code-single-pyportal-displayio.py b/CircuitPython_gifio/PyPortal/code-single-pyportal-displayio.py
new file mode 100644
index 000000000..9860d18ed
--- /dev/null
+++ b/CircuitPython_gifio/PyPortal/code-single-pyportal-displayio.py
@@ -0,0 +1,55 @@
+# SPDX-FileCopyrightText: 2023 Anne Barela for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+#
+# gifio demo for the Adafruit PyPortal - single file
+#
+# Documentation:
+# https://docs.circuitpython.org/en/latest/shared-bindings/gifio/
+# Updated 4/5/2023
+#
+import time
+import gc
+import board
+import gifio
+import displayio
+import adafruit_touchscreen
+
+display = board.DISPLAY
+splash = displayio.Group()
+display.root_group = splash
+
+# Pyportal has a touchscreen, a touch stops the display
+WIDTH = board.DISPLAY.width
+HEIGHT = board.DISPLAY.height
+ts = adafruit_touchscreen.Touchscreen(board.TOUCH_XL, board.TOUCH_XR,
+ board.TOUCH_YD, board.TOUCH_YU,
+ calibration=((5200, 59000), (5800, 57000)),
+ size=(WIDTH, HEIGHT))
+
+odg = gifio.OnDiskGif('/sample.gif')
+
+start = time.monotonic()
+next_delay = odg.next_frame() # Load the first frame
+end = time.monotonic()
+call_delay = end - start
+
+# Depending on your display the next line may need Colorspace.RGB565
+# instead of Colorspace.RGB565_SWAPPED
+face = displayio.TileGrid(odg.bitmap,
+ pixel_shader=displayio.ColorConverter
+ (input_colorspace=displayio.Colorspace.RGB565_SWAPPED))
+splash.append(face)
+board.DISPLAY.refresh()
+
+# Play the GIF file until screen is touched
+while True:
+ time.sleep(max(0, next_delay - call_delay))
+ next_delay = odg.next_frame()
+ if ts.touch_point is not None:
+ break
+# End while
+# Clean up memory
+odg.deinit()
+odg = None
+gc.collect()
diff --git a/CircuitPython_gifio/PyPortal/sample-label-pyportal.gif b/CircuitPython_gifio/PyPortal/sample-label-pyportal.gif
new file mode 100644
index 000000000..09c64bde7
Binary files /dev/null and b/CircuitPython_gifio/PyPortal/sample-label-pyportal.gif differ
diff --git a/CircuitPython_gifio/PyPortal/sample-mac-pyportal.gif b/CircuitPython_gifio/PyPortal/sample-mac-pyportal.gif
new file mode 100644
index 000000000..eeb7f3421
Binary files /dev/null and b/CircuitPython_gifio/PyPortal/sample-mac-pyportal.gif differ
diff --git a/CircuitPython_gifio/PyPortal/sample-nyan-pyportal.gif b/CircuitPython_gifio/PyPortal/sample-nyan-pyportal.gif
new file mode 100644
index 000000000..f160e6b06
Binary files /dev/null and b/CircuitPython_gifio/PyPortal/sample-nyan-pyportal.gif differ
diff --git a/CircuitPython_gifio/README.md b/CircuitPython_gifio/README.md
new file mode 100644
index 000000000..79193617e
--- /dev/null
+++ b/CircuitPython_gifio/README.md
@@ -0,0 +1,10 @@
+## Adafruit Learning System Guide:
+## Playing Animated GIF Files in CircuitPython
+
+Two sample boards: Adafruit PyPortal and ESP32-S2 Feather TFT
+
+Display a single GIF and display multiple GIFs
+
+Anne Barela for Adafruit Industries
+
+MIT License
diff --git a/CircuitPython_qrio/adafruit_io/code.py b/CircuitPython_qrio/adafruit_io/code.py
index f9d82c172..9c0d4ab0f 100644
--- a/CircuitPython_qrio/adafruit_io/code.py
+++ b/CircuitPython_qrio/adafruit_io/code.py
@@ -100,7 +100,7 @@
g = displayio.Group()
g.append(g1)
g.append(label)
-display.show(g)
+display.root_group = g
display.auto_refresh = False
old_payload = None
diff --git a/CircuitPython_qrio/repl/code.py b/CircuitPython_qrio/repl/code.py
index f9ff79aff..62814d4a4 100644
--- a/CircuitPython_qrio/repl/code.py
+++ b/CircuitPython_qrio/repl/code.py
@@ -73,7 +73,7 @@
g = displayio.Group()
g.append(g1)
g.append(label)
-display.show(g)
+display.root_group = g
display.auto_refresh = False
old_payload = None
diff --git a/CircuitPython_qrio/usb_hid/code.py b/CircuitPython_qrio/usb_hid/code.py
index 3e10ad5c1..b08cc8780 100644
--- a/CircuitPython_qrio/usb_hid/code.py
+++ b/CircuitPython_qrio/usb_hid/code.py
@@ -81,7 +81,7 @@
g = displayio.Group()
g.append(g1)
g.append(label)
-display.show(g)
+display.root_group = g
display.auto_refresh = False
i = 0
diff --git a/CircuitPython_sdcardio_sdioio/show_bitmaps/code.py b/CircuitPython_sdcardio_sdioio/show_bitmaps/code.py
index a3e20005f..75c7d4eb5 100644
--- a/CircuitPython_sdcardio_sdioio/show_bitmaps/code.py
+++ b/CircuitPython_sdcardio_sdioio/show_bitmaps/code.py
@@ -35,7 +35,7 @@
group = displayio.Group()
group.append(tile_grid)
- display.show(group)
+ display.root_group = group
# Show the image for 10 seconds
time.sleep(10)
diff --git a/CircuitStonks/code.py b/CircuitStonks/code.py
index 4dbcc0dcc..9120bb98f 100644
--- a/CircuitStonks/code.py
+++ b/CircuitStonks/code.py
@@ -51,7 +51,7 @@
group.append(symbol_text)
group.append(price_text)
group.append(change_text)
-minitft.display.show(group)
+minitft.display.root_group = group
refresh = None
i = 0
diff --git a/Circuit_Playground_O_Phonor/notes_tft/code.py b/Circuit_Playground_O_Phonor/notes_tft/code.py
index d1b7e4219..cbfc308d0 100755
--- a/Circuit_Playground_O_Phonor/notes_tft/code.py
+++ b/Circuit_Playground_O_Phonor/notes_tft/code.py
@@ -72,7 +72,7 @@
splash.append(note_text)
splash.append(oct_text)
splash.append(freq_text)
-display.show(splash)
+display.root_group = splash
while True:
# Get raw mic data
diff --git a/Circuit_Playground_Sailor_Moon_Star_Locket/code.py b/Circuit_Playground_Sailor_Moon_Star_Locket/code.py
index fc759d8fc..fea61297e 100644
--- a/Circuit_Playground_Sailor_Moon_Star_Locket/code.py
+++ b/Circuit_Playground_Sailor_Moon_Star_Locket/code.py
@@ -60,7 +60,7 @@
main_group.append(jewel_splash)
# showing the main group on the display
-display.show(main_group)
+display.root_group = main_group
# tracks the tilegrid index location for the crescent moon
moon = 0
diff --git a/Clue_Scale/clue_scale_calibrator.py b/Clue_Scale/clue_scale_calibrator.py
index 1d59cb81b..738d8d545 100644
--- a/Clue_Scale/clue_scale_calibrator.py
+++ b/Clue_Scale/clue_scale_calibrator.py
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: MIT
#
# clue_scale_calibrator.py
-# 2022-07-29 v1.1.0
+# 2023-01-13 v1.1.1
#
# Clue Scale Calibrator - Single Channel Version
# Adafruit NAU7802 Stemma breakout example
@@ -15,11 +15,13 @@
clue.pixel.brightness = 0.2 # Set NeoPixel brightness
clue.pixel[0] = clue.YELLOW # Set status indicator to yellow (initializing)
-SAMPLE_AVG = 500 # Number of sample values to average
+SAMPLE_AVG = 3 # Number of sample values to average
DEFAULT_GAIN = 128 # Default gain for internal PGA
# Instantiate 24-bit load sensor ADC
-nau7802 = NAU7802(board.I2C(), address=0x2A, active_channels=1)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+nau7802 = NAU7802(i2c, address=0x2A, active_channels=1)
def zero_channel():
@@ -35,7 +37,7 @@ def read(samples=100):
sample_sum = 0
sample_count = samples
while sample_count > 0:
- if nau7802.available:
+ if nau7802.available():
sample_sum = sample_sum + nau7802.read()
sample_count -= 1
return int(sample_sum / samples)
diff --git a/Clue_Scale/code.py b/Clue_Scale/code.py
index 3ba35a6b5..640badb1a 100644
--- a/Clue_Scale/code.py
+++ b/Clue_Scale/code.py
@@ -1,8 +1,8 @@
-# SPDX-FileCopyrightText: 2022 Jan Goolsbey for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 Jan Goolsbey for Adafruit Industries
# SPDX-License-Identifier: MIT
#
# clue_scale_code.py
-# 2022-07-29 v1.2.0
+# 2023-01-13 v1.2.1
#
# Clue Scale - Single Channel Version
# Adafruit NAU7802 Stemma breakout example
@@ -25,7 +25,7 @@
# Set Scale Defaults
MAX_GR = 100 # Maximum (full-scale) display range in grams
DEFAULT_GAIN = 128 # Default gain for internal PGA
-SAMPLE_AVG = 100 # Number of sample values to average
+SAMPLE_AVG = 5 # Number of sample values to average
SCALE_NAME_1 = "COFFEE" # 6 characters maximum
SCALE_NAME_2 = "SCALE" # 6 characters maximum
@@ -38,7 +38,9 @@
CALIB_RATIO = 100 / 215300 # load cell serial#4540-02
# Instantiate the Sensor and Display
-nau7802 = NAU7802(board.I2C(), address=0x2A, active_channels=1)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+nau7802 = NAU7802(i2c, address=0x2A, active_channels=1)
display = board.DISPLAY
scale_group = displayio.Group()
@@ -112,7 +114,7 @@
indicator_group.append(bubble)
scale_group.append(indicator_group)
-display.show(scale_group)
+display.root_group = scale_group
# Helpers
@@ -126,12 +128,12 @@ def zero_channel():
nau7802.calibrate("OFFSET")
-def read(samples=100):
+def read(samples=1):
"""Read and average consecutive raw samples; return averaged value."""
sample_sum = 0
sample_count = samples
while sample_count > 0:
- if nau7802.available:
+ if nau7802.available():
sample_sum = sample_sum + nau7802.read()
sample_count -= 1
return int(sample_sum / samples)
diff --git a/Clue_Shot_Timer/code.py b/Clue_Shot_Timer/code.py
new file mode 100644
index 000000000..155cf2367
--- /dev/null
+++ b/Clue_Shot_Timer/code.py
@@ -0,0 +1,556 @@
+# SPDX-FileCopyrightText: 2023 Eva Herrada for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import array
+import random
+import time
+import gc
+import simpleio
+import audiobusio
+
+import displayio
+from adafruit_display_text import label
+from adafruit_bitmap_font import bitmap_font
+from adafruit_display_shapes.rect import Rect
+
+import board
+import digitalio
+
+settings = {}
+
+with open("/settings.txt", "r") as F:
+ for line in F:
+ k, v = line.replace("\n", "").split(",")
+ print(k, v)
+ settings[k] = v
+
+MODE = settings["mode"]
+if settings["delay"] == "RNDM":
+ DELAY_TIME = settings["delay"]
+else:
+ DELAY_TIME = int(settings["delay"])
+PB = float(settings["pb"])
+PAR = float(settings["par"])
+SENSITIVITY = int(settings["sensitivity"])
+
+
+gc.enable()
+DEAD_TIME_DELAY = 0.11
+
+arial18 = bitmap_font.load_font("/fonts/Arial-18.pcf")
+arialb24 = bitmap_font.load_font("/fonts/Arial-Bold-24.pcf")
+lato74 = bitmap_font.load_font("/fonts/Lato-Regular-74.pcf")
+
+display = board.DISPLAY
+
+display.auto_refresh = False
+
+group = displayio.Group()
+
+button_a = digitalio.DigitalInOut(board.BUTTON_A)
+button_a.switch_to_input(pull=digitalio.Pull.UP)
+button_b = digitalio.DigitalInOut(board.BUTTON_B)
+button_b.switch_to_input(pull=digitalio.Pull.UP)
+
+main_time = label.Label(
+ font=lato74,
+ anchored_position=(120, 40),
+ text="00.00",
+ color=0xFFFFFF,
+ anchor_point=(0.5, 0.5),
+)
+group.append(main_time)
+
+shot_num = label.Label(
+ font=arialb24,
+ anchored_position=(120, 80),
+ text="#0 SPL 00.00",
+ anchor_point=(0.5, 0),
+)
+group.append(shot_num)
+
+first = label.Label(
+ font=arialb24,
+ anchored_position=(120, 120),
+ text="1st: 00.00",
+ anchor_point=(0.5, 0),
+)
+group.append(first)
+
+delay = label.Label(
+ font=arialb24,
+ anchored_position=(120, 160),
+ text=f"Delay: {DELAY_TIME}",
+ anchor_point=(0.5, 0),
+)
+group.append(delay)
+
+sens = label.Label(font=arialb24, x=15, y=220, text=f"{SENSITIVITY}")
+group.append(sens)
+
+if MODE == "PB":
+ mode_text = f"{MODE} {PB:05.2f}"
+elif MODE == "Par":
+ mode_text = f"{MODE} {PAR:05.2f}"
+else:
+ mode_text = MODE
+mode_label = label.Label(
+ font=arialb24, anchored_position=(225, 210), text=mode_text, anchor_point=(1, 0)
+)
+group.append(mode_label)
+
+
+def normalized_rms(values):
+ """Gets the normalized RMS of the mic samples"""
+ minbuf = int(sum(values) / len(values))
+ samples_sum = sum(float(sample - minbuf) * (sample - minbuf) for sample in values)
+
+ return (samples_sum / len(values)) ** 0.5
+
+
+def picker(current):
+ """Displays screen allowing user to set a time"""
+ pick[0].text, pick[1].text, pick[2].text, pick[3].text = list(
+ current.replace(".", "")
+ )
+ display.root_group = pick
+ time.sleep(0.2)
+ index = 0
+
+ while True:
+ if not button_b.value:
+ pick[index].background_color = None
+ pick[index].color = 0xFFFFFF
+ index += 1
+ if index == 4:
+ index = 0
+ pick[index].background_color = 0xFFFFFF
+ pick[index].color = 0x000000
+ started = time.monotonic()
+ while not button_b.value:
+ if time.monotonic() - started > 1:
+ pick[0].color = 0x000000
+ pick[0].background_color = 0xFFFFFF
+ pick[1].color = 0xFFFFFF
+ pick[1].background_color = None
+ pick[2].color = 0xFFFFFF
+ pick[2].background_color = None
+ pick[3].color = 0xFFFFFF
+ pick[3].background_color = None
+ return float(
+ f"{pick[0].text}{pick[1].text}.{pick[2].text}{pick[3].text}"
+ )
+
+ if not button_a.value:
+ pick[index].text = str(int(pick[index].text) + 1)[-1]
+ started = time.monotonic()
+ while not button_a.value:
+ if time.monotonic() - started > 1:
+ return current
+ display.refresh()
+
+ display.root_group = displayio.CIRCUITPYTHON_TERMINAL
+
+
+def rect_maker(shots):
+ rects = displayio.Group()
+ for i in range(len(shots)):
+ if i == 10:
+ break
+ rectangle = Rect(x=0, y=24 + (i * 24), width=240, height=1, fill=0xFFFFFF)
+ rects.append(rectangle)
+ return rects
+
+
+def shot_label_maker(grp):
+ txt = ""
+
+ for i, j in enumerate(shot_list):
+ if i == 0:
+ split = j
+ else:
+ split = j - shot_list[i - 1]
+ txt = txt + f"{i+1:02}\t{j:05.2f}\t{split:05.2f}\n"
+ grp.append(
+ label.Label(
+ font=arial18,
+ anchored_position=(120, 3),
+ text=txt[:-1],
+ color=0xFFFFFF,
+ line_spacing=0.82,
+ anchor_point=(0.5, 0),
+ )
+ )
+ gc.collect()
+ return grp
+
+
+def show_shot_list(shots, disp):
+ done = False
+
+ shot_group = rect_maker(shots)
+ shot_group = shot_label_maker(shot_group)
+ disp.root_group = shot_group
+
+ tracker = 10
+ while True:
+ if not button_b.value:
+ started = time.monotonic()
+ while not button_b.value:
+ if time.monotonic() - started > 1:
+ done = True
+ break
+ if tracker < len(shots) and not done:
+ shot_group[10].y -= 24
+ tracker += 1
+
+ if not button_a.value:
+ started = time.monotonic()
+ while not button_a.value:
+ if time.monotonic() - started > 1:
+ done = True
+ break
+ if tracker > 10 and not done:
+ shot_group[10].y += 24
+ tracker -= 1
+
+ if done:
+ break
+ disp.refresh()
+ shot_group = None
+ gc.collect()
+
+
+def menu_mode(
+ mode, delay_time, sensitivity_, pb, par, length_, submenus_
+): # pylint: disable=too-many-branches,too-many-statements
+ selected = int(menu[0].y / 40) + 1
+ display.root_group = menu
+ display.refresh()
+ page_ = menu
+ while not button_a.value:
+ pass
+ done = False
+ while not done:
+ if not button_a.value and selected < length_:
+ started = time.monotonic()
+ while not button_a.value:
+ if time.monotonic() - started > 1:
+ if page_ == menu:
+ display.root_group = group
+ display.refresh()
+ done = True
+ else:
+ page_ = menu
+ selected = int(page_[0].y / 40) + 1
+ length_ = len(page_) - 1
+ display.root_group = page_
+ submenus_ = main_menu_opts
+ display.refresh()
+ break
+ else:
+ if not done:
+ rgb = page_[selected].color
+ color = (
+ ((255 - ((rgb >> 16) & 0xFF)) << 16)
+ + ((255 - ((rgb >> 8) & 0xFF)) << 8)
+ + (255 - (rgb & 0xFF))
+ )
+ page_[selected].color = color
+
+ page_[0].y += 40
+ selected += 1
+
+ rgb = page_[selected].color
+ color = (
+ ((255 - ((rgb >> 16) & 0xFF)) << 16)
+ + ((255 - ((rgb >> 8) & 0xFF)) << 8)
+ + (255 - (rgb & 0xFF))
+ )
+ page_[selected].color = color
+ while not button_a.value:
+ pass
+
+ if not button_a.value and selected == length_ and not done:
+ started = time.monotonic()
+ while not button_a.value:
+ if time.monotonic() - started > 1:
+ if page_ == menu:
+ display.root_group = group
+ display.refresh()
+ done = True
+ else:
+ page_ = menu
+ selected = int(page_[0].y / 40) + 1
+ length_ = len(page_) - 1
+ display.root_group = page_
+ submenus_ = main_menu_opts
+ display.refresh()
+ break
+ else:
+ if not done:
+ rgb = page_[selected].color
+ color = (
+ ((255 - ((rgb >> 16) & 0xFF)) << 16)
+ + ((255 - ((rgb >> 8) & 0xFF)) << 8)
+ + (255 - (rgb & 0xFF))
+ )
+ page_[selected].color = color
+
+ page_[0].y = 0
+ selected = 1
+
+ rgb = page_[selected].color
+ color = (
+ ((255 - ((rgb >> 16) & 0xFF)) << 16)
+ + ((255 - ((rgb >> 8) & 0xFF)) << 8)
+ + (255 - (rgb & 0xFF))
+ )
+ page_[selected].color = color
+ while not button_a.value:
+ pass
+
+ if not button_b.value:
+ if isinstance(submenus_[1], list):
+ if submenus_[0] == mode:
+ mode = submenus_[1][selected - 1]
+ submenus_[0] = mode
+ if mode == "PB":
+ pb = picker(f"{PB:05.2f}")
+ mode_label.text = f"{mode} {pb}"
+ page_[selected].text = mode_label.text
+ display.root_group = page_
+ display.refresh()
+ elif mode == "Par":
+ par = picker(f"{par:05.2f}")
+ mode_label.text = f"{mode} {par}"
+ page_[selected].text = mode_label.text
+ display.root_group = page_
+ display.refresh()
+ else:
+ mode_label.text = mode
+ if submenus_[0] == delay_time and len(submenus_[1]) == 5:
+ delay_time = submenus_[1][selected - 1]
+ submenus_[0] = delay_time
+ delay.text = f"Delay: {delay_time}"
+ if submenus_[0] == sensitivity_ and len(submenus_[1]) == 6:
+ sensitivity_ = submenus_[1][selected - 1]
+ submenus_[0] = sensitivity_
+ sens.text = f"{sensitivity_}"
+ for i in page_:
+ i.color = 0xFFFFFF
+ page_[selected].color = 0x00FF00
+ else:
+ page_ = submenus_[selected - 1]
+ submenus_ = page_opts[selected - 1]
+ selected = int(page_[0].y / 40) + 1
+ length_ = len(page_) - 1
+ display.root_group = page_
+ while not button_b.value:
+ pass
+
+ display.refresh()
+ return mode, delay_time, sensitivity_, pb, par
+
+
+def label_maker(txt, grp, font, x, y, x_step=0, y_step=0, anchor=None, padding=0):
+ for count, t in enumerate(txt):
+ x_pos = x + (count * x_step)
+ y_pos = y + (count * y_step)
+ if anchor:
+ grp.append(
+ label.Label(
+ font,
+ text=t,
+ anchored_position=(x_pos, y_pos),
+ color=0xFFFFFF,
+ padding_top=padding,
+ anchor_point=anchor,
+ )
+ )
+ else:
+ grp.append(
+ label.Label(
+ font, text=t, x=x_pos, y=y_pos, color=0xFFFFFF, padding_top=padding
+ )
+ )
+ return grp
+
+
+mode_opts = [MODE, ["Default", "PB", "Par"]]
+
+delay_opts = [DELAY_TIME, [0, 1, 3, 5, "RNDM"]]
+
+sensitivity_opts = [SENSITIVITY, [1, 2, 3, 4, 5, 6]]
+
+# Number picker page
+pick = displayio.Group()
+pick = label_maker(
+ ["0", "0"], pick, lato74, 40, 120, x_step=50, anchor=(0.5, 0.5), padding=8
+)
+pick = label_maker(
+ ["0", "0"], pick, lato74, 150, 120, x_step=50, anchor=(0.5, 0.5), padding=8
+)
+
+pick[0].color = 0x000000
+pick[0].background_color = 0xFFFFFF
+
+dot = label.Label(
+ lato74,
+ text=".",
+ color=0xFFFFFF,
+ anchor_point=(0.5, 0.5),
+ anchored_position=(120, 132),
+)
+pick.append(dot)
+
+# Main menu page
+menu = displayio.Group()
+rect = Rect(0, 0, 240, 40, fill=0xFFFFFF)
+menu.append(rect)
+
+menu = label_maker(["Mode", "Delay", "Sensitivity"], menu, arialb24, 10, 20, y_step=40)
+menu[1].color = 0x000000
+
+# Mode menu page
+mode_page = displayio.Group()
+
+select = mode_opts[1].index(MODE)
+rect = Rect(0, select * 40, 240, 40, fill=0xFFFFFF)
+mode_page.append(rect)
+
+mode_page = label_maker(
+ ["Default", f"PB {PB}", f"Par {PAR}"], mode_page, arialb24, 10, 20, y_step=40
+)
+mode_page[select + 1].color = 0x00FF00
+
+# Delay menu page
+delay_page = displayio.Group()
+
+select = delay_opts[1].index(DELAY_TIME)
+rect = Rect(0, select * 40, 240, 40, fill=0xFFFFFF)
+delay_page.append(rect)
+
+delay_page = label_maker(
+ ["0s", "1s", "3s", "5s", "Random"], delay_page, arialb24, 10, 20, y_step=40
+)
+delay_page[select + 1].color = 0x00FF00
+
+# Sensitivity menu page
+sensitivity_page = displayio.Group()
+
+select = sensitivity_opts[1].index(SENSITIVITY)
+rect = Rect(0, select * 40, 240, 40, fill=0xFFFFFF)
+sensitivity_page.append(rect)
+
+sensitivity_page = label_maker(
+ ["1", "2", "3", "4", "5", "6"], sensitivity_page, arialb24, 10, 20, y_step=40
+)
+sensitivity_page[select + 1].color = 0x00FF00
+
+main_menu_opts = [mode_page, delay_page, sensitivity_page]
+page_opts = [mode_opts, delay_opts, sensitivity_opts]
+
+submenus = main_menu_opts
+page = menu
+length = len(page) - 1
+
+mic = audiobusio.PDMIn(
+ board.MICROPHONE_CLOCK,
+ board.MICROPHONE_DATA,
+ sample_rate=16000,
+ bit_depth=16,
+)
+
+sensitivity_settings = [8000, 10000, 15000, 20000, 25000, 30000]
+
+display.root_group = group
+display.refresh()
+
+sensitivity = sensitivity_settings[SENSITIVITY - 1]
+while True:
+ if not button_b.value:
+ SHOTS = 0
+ samples = array.array("H", [0] * 5)
+ if DELAY_TIME == "RNDM":
+ dly = round(random.uniform(1, 10), 2)
+ time.sleep(dly)
+ else:
+ time.sleep(DELAY_TIME)
+ start = time.monotonic()
+ while not button_b.value:
+ pass
+ shot_list = []
+ simpleio.tone(board.SPEAKER, 3500, duration=0.2)
+ time.sleep(0.05)
+ if MODE == "Par":
+ shot_time = round(time.monotonic() - start, 2)
+ while shot_time < PAR:
+ shot_time = min(round(time.monotonic() - start, 2), PAR)
+ main_time.text = f"{shot_time:05.2f}"
+ display.refresh()
+ simpleio.tone(board.SPEAKER, 3500, duration=0.2)
+ else:
+ if MODE == "PB":
+ main_time.color = 0x00FF00
+ display.refresh()
+ while button_a.value and button_b.value:
+ mic.record(samples, len(samples))
+ magnitude = normalized_rms(samples)
+ if magnitude > sensitivity:
+ SHOTS += 1
+ print("SHOT")
+ shot_time = round(time.monotonic() - start, 2)
+ if len(shot_list) != 0:
+ shot_num.text = (
+ f"#{SHOTS} SPL {shot_time - shot_list[-1]:05.2f}"
+ )
+ else:
+ shot_num.text = f"#{SHOTS} SPL {shot_time:05.2f}"
+ main_time.text = f"{shot_time:05.2f}"
+ if MODE == "PB" and shot_time > PB:
+ main_time.color = 0xFF0000
+ shot_list.append(shot_time)
+ first.text = f"1st: {shot_list[0]:05.2f}"
+ time.sleep(DEAD_TIME_DELAY)
+ display.refresh()
+ print(
+ (
+ magnitude,
+ SHOTS,
+ )
+ )
+ gc.collect()
+ if not button_b.value:
+ show_shot_list(shot_list, display)
+ display.root_group = group
+ display.refresh()
+ while not button_b.value or not button_a.value:
+ pass
+
+ if not button_a.value:
+ start = time.monotonic()
+ while not button_a.value:
+ if time.monotonic() - start > 1:
+ MODE, DELAY_TIME, SENSITIVITY, PB, PAR = menu_mode(
+ MODE, DELAY_TIME, SENSITIVITY, PB, PAR, length, submenus
+ )
+ sensitivity = sensitivity_settings[SENSITIVITY - 1]
+ try:
+ with open("/settings.txt", "w") as F:
+ F.write(f"mode,{MODE}\n")
+ F.write(f"delay,{DELAY_TIME}\n")
+ F.write(f"par,{PAR}\n")
+ F.write(f"pb,{PB}\n")
+ F.write(f"sensitivity,{SENSITIVITY}")
+ except OSError as e: # Typically when the filesystem isn't writeable...
+ print("Filesystem is not writeable")
+ break
+ else:
+ main_time.color = 0xFFFFFF
+ main_time.text = "00.00"
+ shot_num.text = "#0 SPL 00.00"
+ first.text = "1st: 00.00"
+ display.refresh()
+ gc.collect()
diff --git a/MagTag_Google_Calendar/fonts/Arial-18.pcf b/Clue_Shot_Timer/fonts/Arial-18.pcf
similarity index 100%
rename from MagTag_Google_Calendar/fonts/Arial-18.pcf
rename to Clue_Shot_Timer/fonts/Arial-18.pcf
diff --git a/Clue_Shot_Timer/fonts/Arial-Bold-24.pcf b/Clue_Shot_Timer/fonts/Arial-Bold-24.pcf
new file mode 100755
index 000000000..78695dfb7
Binary files /dev/null and b/Clue_Shot_Timer/fonts/Arial-Bold-24.pcf differ
diff --git a/Clue_Shot_Timer/fonts/Lato-Regular-74.pcf b/Clue_Shot_Timer/fonts/Lato-Regular-74.pcf
new file mode 100755
index 000000000..31e2c6ffa
Binary files /dev/null and b/Clue_Shot_Timer/fonts/Lato-Regular-74.pcf differ
diff --git a/Clue_Shot_Timer/settings.txt b/Clue_Shot_Timer/settings.txt
new file mode 100644
index 000000000..60b7e1b8a
--- /dev/null
+++ b/Clue_Shot_Timer/settings.txt
@@ -0,0 +1,5 @@
+mode,Default
+delay,3
+pb,13.12
+par,5.1
+sensitivity,3
diff --git a/Clue_Step_Counter/code.py b/Clue_Step_Counter/code.py
index 9a91a1fc9..598f4f797 100644
--- a/Clue_Step_Counter/code.py
+++ b/Clue_Step_Counter/code.py
@@ -105,7 +105,7 @@
clueGroup.append(text_steps)
# sending display group to the display at startup
-clue_display.show(clueGroup)
+clue_display.root_group = clueGroup
# setting up the accelerometer and pedometer
sensor.accelerometer_range = AccelRange.RANGE_2G
diff --git a/Computer_Perfection_Synth/code.py b/Computer_Perfection_Synth/code.py
new file mode 100755
index 000000000..856eea4fc
--- /dev/null
+++ b/Computer_Perfection_Synth/code.py
@@ -0,0 +1,214 @@
+# SPDX-FileCopyrightText: 2023 John Park, Jeff Epler, and Tod Kurt for Adafruit Industries
+# SPDX-License-Identifier: MIT
+# Computer Perfection Synth
+# * 10 numbered buttons play notes
+# * SET button to increase LFO rate, long press to decrease LFO rate
+# * SCORE button to add lower octave
+# * MODE switch changes wavetable set
+# * SKILL switch toggles sustain
+# * GAME switch must stay in position 1 or it messes with the other switches
+
+import time
+import random
+import board
+import audiobusio
+import audiomixer
+import synthio
+import ulab.numpy as np
+import neopixel
+import keypad
+
+
+# NeoPixel setup
+num_pixels = 34
+pixels = neopixel.NeoPixel(board.D11, num_pixels, brightness=0.7, auto_write=False)
+pixels.fill(0x0)
+pixels.show()
+time.sleep(0.25)
+pix_map = [26, 23, 19, 16, 13, 10, 7, 4, 32, 29] # map the LEDs to the numbered panel sections 0-9
+for p in range(len(pix_map)):
+ pixels[pix_map[p]] = 0xff0000
+ pixels.show()
+ time.sleep(0.1)
+
+
+note_buttons = keypad.Keys(
+ (board.D0, board.D1, board.D2, board.D3, board.D4,
+ board.D5, board.D6, board.D7, board.D8, board.A5),
+ value_when_pressed=False,
+ pull=True
+)
+switches = keypad.Keys(
+ (board.A1, board.A0),
+ value_when_pressed=False,
+ pull=True
+)
+octave = 3 # octave multiplier
+note_list = (0, 4, 6, 7, 9, 12, 16, 18, 19, 21) # Lydian scale
+
+mod_buttons = keypad.Keys(
+ (board.A4, board.A3), # SET and SCORE buttons
+ value_when_pressed=False,
+ pull=True
+)
+
+SAMPLE_RATE = 48000 # clicks @ 36kHz & 48kHz on rp2040
+SAMPLE_SIZE = 200
+VOLUME = 12000
+
+# Metro M7 pins for the I2S amp:
+lck_pin, bck_pin, dat_pin = board.D9, board.D10, board.D12
+
+# synth engine setup
+waveform = np.zeros(SAMPLE_SIZE, dtype=np.int16) # intially all zeros (silence)
+
+amp_env = synthio.Envelope( # default (0.1, 0.05, 0.2, 1, 0.8)
+ attack_time=1.0,
+ decay_time=0.05,
+ release_time=3.0,
+ attack_level=1.0,
+ sustain_level=0.8
+)
+
+synth = synthio.Synthesizer(sample_rate=SAMPLE_RATE, waveform=waveform, envelope=amp_env)
+audio = audiobusio.I2SOut(bit_clock=bck_pin, word_select=lck_pin, data=dat_pin)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=SAMPLE_RATE, channel_count=1,
+ bits_per_sample=16, samples_signed=True, buffer_size=8192)
+audio.play(mixer)
+mixer.voice[0].level = 0.55
+mixer.voice[0].play(synth)
+
+led = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.3) # on board neopixel
+
+# waveforms setup
+wave_sine = np.array(np.sin(np.linspace(0, 2*np.pi, SAMPLE_SIZE, endpoint=False)) * VOLUME,
+ dtype=np.int16)
+wave_saw = np.linspace(VOLUME, -VOLUME, num=SAMPLE_SIZE, dtype=np.int16)
+wave_weird1 = np.array((198,2776,5441,8031,10454,12653,14609,16333,17824,19130,20260,21227,22043,
+ 22721,23269,23699,24019,24243,24385,24461,18630,-26956,-28048,-29175,-30249,
+ -31227,-32073,-32631,-32359,-31817,-30941,-29663,-27900,-25596,-22591,
+ -18834,-14291,-9016,-3212,2794,8624,13943,18544,22353,25408,27780,29553,
+ 30855,31751,32315,32611,32687,32593,32351,31983,31491,30871,30097,28895,
+ -28240,-30489,-31343,-31975,-32431,-32697,-32767,-32615,-32217,-31525,
+ -30489,-29035,-27090,-24519,-21237,-17178,-12339,-6829,-902,5081,10748,
+ 15805,20102,23615,26396,28510,30109,31245,31995,31955,31437,30729,29887,
+ 28943,27908,26784,25560,24077,22781,-22207,-22735,-22709,-22471,-22065,
+ -21497,-20773,-19896,-18872,-17698,-16361,-14857,-13141,-11206,-9054,-6717,
+ -4259,-1796,522,2548,4167,5339,6079,6445,6503,6319,5949,5449,4847,4183,
+ 3480,2756,2028,1304,590,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-478,-1168,-1882,-2596,
+ -3336,-4074,-4795,-5487,-6119,-6669,-7095,-7357,-7399,-7157,-6559,-5543,
+ -4076,-2132,), dtype=np.int16)
+wave_noise = np.array([random.randint(-VOLUME, VOLUME) for i in range(SAMPLE_SIZE)], dtype=np.int16)
+
+# map s range a1-a2 to b1-b2
+def map_range(s, a1, a2, b1, b2):
+ return b1 + ((s - a1) * (b2 - b1) / (a2 - a1))
+
+# mix between values a and b, works with numpy arrays too, t ranges 0-1
+def lerp(a, b, t):
+ return (1-t)*a + t*b
+
+waveform[:] = wave_saw
+wave_mix = 0.0
+lfo_rates = (0.1, 0.5, 0.8, 1.5, 3.0, 6.0, 7.0, 8.0)
+lfo_index = 0
+lfo1 = synthio.LFO(rate=(lfo_rates[lfo_index]), waveform=wave_sine) # rate is in Hz
+synth.lfos.append(lfo1)
+hold = False # state of note hold
+octaves = False
+
+def light_button_pixels(button_number):
+ pixels[pix_map[button_number]+1] = 0xFF0000
+ pixels[pix_map[button_number]-1] = 0xFF0000
+ pixels.show()
+
+def reset_button_pixels(button_number):
+ pixels[pix_map[button_number]+1] = 0x000000
+ pixels[pix_map[button_number]-1] = 0x000000
+ pixels.show()
+
+def clamp(v, low, high):
+ return min(max(v, low), high)
+
+print("-Computer Perfection Synth-")
+
+note = None
+mod_key = 0
+last_mod_button_event_time = 0
+waveset = 0
+
+
+while True:
+ # watch for mod buttons to be pressed
+ mod_button_event = mod_buttons.events.get()
+ if mod_button_event:
+ mod_key = mod_button_event.key_number
+ if mod_button_event.pressed:
+ if mod_key == 0: # SET switch
+ last_mod_button_event_time = time.monotonic()
+
+ if mod_key == 1: # enable octaves
+ octaves = True
+
+ if mod_button_event.released:
+ if last_mod_button_event_time and mod_key == 0: # short press-release increase LFO rate
+ lfo_index = clamp(lfo_index+1, 0, len(lfo_rates)-1)
+ print(lfo_index)
+ lfo_rate = lfo_rates[lfo_index]
+ lfo1.rate = lfo_rate
+ last_mod_button_event_time = 0
+ if mod_key == 1: # disable octaves
+ octaves = False
+ # long press slows the LFO rate
+ if last_mod_button_event_time != 0 and time.monotonic() - last_mod_button_event_time > 1.0:
+ last_mod_button_event_time = 0
+ lfo_index = clamp(lfo_index-1, 0, len(lfo_rates)-1)
+ lfo_rate = lfo_rates[lfo_index]
+ lfo1.rate = lfo_rate
+
+ # watch for note buttons to be pressed
+ note_button_event = note_buttons.events.get()
+ if note_button_event:
+ i = note_button_event.key_number
+ if note_button_event.pressed:
+ if octaves:
+ synth.press((note_list[i]+(octave*12), note_list[i]+(octave*12)-12))
+ else:
+ synth.press((note_list[i]+(octave*12),))
+ light_button_pixels(i)
+ if note_button_event.released:
+ if not hold:
+ reset_button_pixels(i)
+ synth.release((note_list[i]+(octave*12), note_list[i]+(octave*12)-12))
+ reset_button_pixels(i)
+
+ # watch for switches to be changed
+ switch_event = switches.events.get()
+ if switch_event:
+ sw = switch_event.key_number
+ if switch_event.pressed:
+ if sw == 0: # MODE toggle right
+ mixer.voice[0].level = 0.45
+ # wave_mix = 0.5
+ waveset = 0
+ if sw == 1: # SKILL toggle center
+ hold = True
+
+ if switch_event.released:
+ if sw == 0: # MODE toggle center
+ mixer.voice[0].level = 0.95
+ waveset = 1
+ if sw == 1: # SKILL toggle right or left
+ hold = False
+ for r in range(len(note_list)): # turn off all notes
+ # if octaves:
+ synth.release((note_list[r]+(octave*12), note_list[r]+(octave*12)-12))
+ for h in range(len(pix_map)): # turn off held pixels
+ reset_button_pixels(h)
+
+ lfo_val_for_lerp = map_range(lfo1.value, -1, 1, 0, 1)
+ if waveset == 0:
+ waveform[:] = lerp(wave_sine, wave_weird1, lfo_val_for_lerp)
+ else:
+ waveform[:] = lerp(wave_saw, wave_noise, lfo_val_for_lerp)
diff --git a/Crickits/flying_trapeze/boot.py b/Crickits/flying_trapeze/boot.py
index 03609ff3b..a2dcfd0be 100644
--- a/Crickits/flying_trapeze/boot.py
+++ b/Crickits/flying_trapeze/boot.py
@@ -13,4 +13,4 @@
switch.pull = digitalio.Pull.UP
# If the switch pin is connected to ground CircuitPython can write to the drive
-storage.remount("/", switch.value)
+storage.remount("/", readonly=switch.value)
diff --git a/Crickits/yanny_or_laurel/boot.py b/Crickits/yanny_or_laurel/boot.py
index 4c7e5370e..131a158de 100644
--- a/Crickits/yanny_or_laurel/boot.py
+++ b/Crickits/yanny_or_laurel/boot.py
@@ -11,4 +11,4 @@
switch.pull = digitalio.Pull.UP
# If the switch pin is connected to ground CircuitPython can write to the drive
-storage.remount("/", switch.value)
+storage.remount("/", readonly=switch.value)
diff --git a/Darth_Faders/code.py b/Darth_Faders/code.py
index 1b363f1a3..d2e79ef41 100644
--- a/Darth_Faders/code.py
+++ b/Darth_Faders/code.py
@@ -12,7 +12,9 @@
num_faders = 3
-motorwing = MotorKit(i2c=board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+motorwing = MotorKit(i2c=i2c)
motorwing.frequency = 122 # tune this 50 - 200 range
max_throttle = 0.18 # tune this 0.2 - 1 range
@@ -32,7 +34,7 @@
motors[i].throttle = None
# STEMMA QT Rotary encoder setup
-seesaw = seesaw.Seesaw(board.I2C(), addr=0x36) # default address is 0x36
+seesaw = seesaw.Seesaw(i2c, addr=0x36) # default address is 0x36
seesaw.pin_mode(24, seesaw.INPUT_PULLUP)
button_in = digitalio.DigitalIO(seesaw, 24)
button = Debouncer(button_in)
diff --git a/Data_Logging_with_Feather_and_CircuitPython/code.py b/Data_Logging_with_Feather_and_CircuitPython/code.py
index d734d8040..0afed8a80 100644
--- a/Data_Logging_with_Feather_and_CircuitPython/code.py
+++ b/Data_Logging_with_Feather_and_CircuitPython/code.py
@@ -12,6 +12,7 @@
vbat_voltage = analogio.AnalogIn(board.D9)
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
am2320 = adafruit_am2320.AM2320(i2c)
SD_CS = board.D10
diff --git a/Desktop_Air_Monitor/OCRA_big.pcf b/Desktop_Air_Monitor/OCRA_big.pcf
new file mode 100644
index 000000000..788fff65f
Binary files /dev/null and b/Desktop_Air_Monitor/OCRA_big.pcf differ
diff --git a/Desktop_Air_Monitor/OCRA_small.pcf b/Desktop_Air_Monitor/OCRA_small.pcf
new file mode 100644
index 000000000..37c54d54d
Binary files /dev/null and b/Desktop_Air_Monitor/OCRA_small.pcf differ
diff --git a/Desktop_Air_Monitor/airBG.bmp b/Desktop_Air_Monitor/airBG.bmp
new file mode 100644
index 000000000..bfb1833b4
Binary files /dev/null and b/Desktop_Air_Monitor/airBG.bmp differ
diff --git a/Desktop_Air_Monitor/code.py b/Desktop_Air_Monitor/code.py
new file mode 100644
index 000000000..21eca5760
--- /dev/null
+++ b/Desktop_Air_Monitor/code.py
@@ -0,0 +1,122 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import neopixel
+import displayio
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_pm25.i2c import PM25_I2C
+import adafruit_scd4x
+from adafruit_display_text import bitmap_label
+from adafruit_bitmap_font import bitmap_font
+from adafruit_display_shapes.roundrect import RoundRect
+
+pixel_pin = board.D13
+num_pixels = 8
+
+pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.1, auto_write=False)
+
+red = (80, 0, 0)
+yellow = (75, 80, 0)
+green = (0, 80, 0)
+
+i2c = board.STEMMA_I2C()
+
+reset_pin = None
+
+pm25 = PM25_I2C(i2c, reset_pin)
+
+scd4x = adafruit_scd4x.SCD4X(i2c)
+scd4x.start_periodic_measurement()
+
+time.sleep(5)
+
+try:
+ aqdata = pm25.read()
+ pm2 = int(aqdata["pm25 standard"])
+except RuntimeError:
+ pm2 = 0
+
+co2 = scd4x.CO2
+temp = scd4x.temperature
+humidity = scd4x.relative_humidity
+
+def rate_pm25(pm25_data):
+ if pm25_data <= 12:
+ pm25_outline = 94
+ pm25_color = green
+ elif pm25_data <= 35:
+ pm25_color = yellow
+ pm25_outline = 140
+ else:
+ pm25_color = red
+ pm25_outline = 185
+ return pm25_color, pm25_outline
+
+def c_to_f(temp_data):
+ temperature_celsius = temp_data
+ temperature_fahrenheit = temperature_celsius * 9 / 5 + 32
+ return temperature_fahrenheit
+
+# display setup
+display = board.DISPLAY
+
+bitmap = displayio.OnDiskBitmap("/airBG.bmp")
+
+tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
+group = displayio.Group()
+group.append(tile_grid)
+
+small_font_file = "/OCRA_small.pcf"
+small_font = bitmap_font.load_font(small_font_file)
+big_font_file = "/OCRA_big.pcf"
+big_font = bitmap_font.load_font(big_font_file)
+
+pm2_text = bitmap_label.Label(big_font, text="%d" % pm2, x=37, y=40, color=0xFFFFFF)
+group.append(pm2_text)
+
+co2_text = bitmap_label.Label(small_font, text="%d" % co2, x=50, y=107, color=0xFFFFFF)
+temp_text = bitmap_label.Label(small_font, text="%d" % temp, x=130, y=107, color=0xFFFFFF)
+humid_text = bitmap_label.Label(small_font, text="%d" % humidity, x=205, y=107, color=0xFFFFFF)
+group.append(co2_text)
+group.append(temp_text)
+group.append(humid_text)
+
+pm2_outline = RoundRect(94, 19, 46, 46, 10, fill=None, outline=0xFFFFFF, stroke=3)
+group.append(pm2_outline)
+
+display.root_group = group
+
+sensor_texts = [pm2_text, co2_text, temp_text, humid_text]
+sensor_data = [pm2, co2, temp, humidity]
+
+sensor_clock = ticks_ms()
+
+sensor_check = 5000
+first_run = True
+
+while True:
+ if first_run or ticks_diff(ticks_ms(), sensor_clock) > sensor_check:
+ co2 = scd4x.CO2
+ temp = c_to_f(scd4x.temperature)
+ humidity = scd4x.relative_humidity
+ try:
+ aqdata = pm25.read()
+ pm2 = int(aqdata["pm25 standard"])
+ except RuntimeError:
+ print("Unable to read from PM2.5 sensor, no new data..")
+ continue
+ pm2_color, pm2_outline.x = rate_pm25(pm2)
+ sensor_data = [pm2, co2, temp, humidity]
+ pixels.fill(pm2_color)
+ pixels.show()
+ for s in range(4):
+ sensor_texts[s].text = "%d" % sensor_data[s]
+ print("updated %d data" % sensor_data[s])
+ time.sleep(0.2)
+ sensor_clock = ticks_add(sensor_clock, sensor_check)
+
+ if first_run:
+ sensor_clock = ticks_ms()
+ first_run = False
diff --git a/Disconnected_CO2_Data_Logger/code.py b/Disconnected_CO2_Data_Logger/code.py
index aeb76f029..1c8cef553 100644
--- a/Disconnected_CO2_Data_Logger/code.py
+++ b/Disconnected_CO2_Data_Logger/code.py
@@ -8,14 +8,15 @@
import sdcardio
import busio
import storage
-import adafruit_pcf8523
+from adafruit_pcf8523.pcf8523 import PCF8523
# setup for I2C
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# setup for SCD40
scd4x = adafruit_scd4x.SCD4X(i2c)
# setup for RTC
-rtc = adafruit_pcf8523.PCF8523(i2c)
+rtc = PCF8523(i2c)
# start measuring co2 with SCD40
scd4x.start_periodic_measurement()
# list of days to print to the text file on boot
diff --git a/Drive_a_16x2_LCD_with_the_Raspberry_Pi/Drive_a_16x2_LCD_with_the_Raspberry_Pi.py b/Drive_a_16x2_LCD_with_the_Raspberry_Pi/Drive_a_16x2_LCD_with_the_Raspberry_Pi.py
index e1d1ee472..eaa7dd7af 100644
--- a/Drive_a_16x2_LCD_with_the_Raspberry_Pi/Drive_a_16x2_LCD_with_the_Raspberry_Pi.py
+++ b/Drive_a_16x2_LCD_with_the_Raspberry_Pi/Drive_a_16x2_LCD_with_the_Raspberry_Pi.py
@@ -1,9 +1,10 @@
# SPDX-FileCopyrightText: 2018 Mikey Sklar for Adafruit Industries
#
# SPDX-License-Identifier: MIT
-
+# Modified by Jonathan Seyfert, 2022-01-22
+# to keep code from crashing when WiFi or IP is unavailable
from subprocess import Popen, PIPE
-from time import sleep
+from time import sleep, perf_counter
from datetime import datetime
import board
import digitalio
@@ -29,23 +30,28 @@
# looking for an active Ethernet or WiFi device
def find_interface():
+# dev_name = 0 # sets dev_name so that function does not return Null and crash code
find_device = "ip addr show"
interface_parse = run_cmd(find_device)
for line in interface_parse.splitlines():
if "state UP" in line:
dev_name = line.split(':')[1]
- return dev_name
+ return dev_name
+ return 1 # avoids returning Null if "state UP" doesn't exist
# find an active IP on the first LIVE network device
def parse_ip():
- find_ip = "ip addr show %s" % interface
+ if interface == 1: # if true, no device is in "state UP", skip IP check
+ return "not assigned " # display "IP not assigned"
+ ip = "0"
find_ip = "ip addr show %s" % interface
ip_parse = run_cmd(find_ip)
for line in ip_parse.splitlines():
if "inet " in line:
ip = line.split(' ')[5]
ip = ip.split('/')[0]
- return ip
+ return ip # returns IP address, if found
+ return "pending " # display "IP pending" when "state UP", but no IPv4 address yet
# run unix shell command, return as ASCII
def run_cmd(cmd):
@@ -56,12 +62,19 @@ def run_cmd(cmd):
# wipe LCD screen before we start
lcd.clear()
+
# before we start the main loop - detect active network device and ip address
-sleep(2)
+# set timer to = perf_counter(), for later use in IP update check
interface = find_interface()
ip_address = parse_ip()
+timer = perf_counter()
while True:
+ # check for new IP addresses, at a slower rate than updating the clock
+ if perf_counter() - timer >= 15:
+ interface = find_interface()
+ ip_address = parse_ip()
+ timer = perf_counter()
# date and time
lcd_line_1 = datetime.now().strftime('%b %d %H:%M:%S\n')
@@ -72,4 +85,4 @@ def run_cmd(cmd):
# combine both lines into one update to the display
lcd.message = lcd_line_1 + lcd_line_2
- sleep(2)
+ sleep(1)
diff --git a/Drive_a_16x2_LCD_with_the_Raspberry_Pi/lcd.service b/Drive_a_16x2_LCD_with_the_Raspberry_Pi/lcd.service
index 4dcd57316..80606a66c 100644
--- a/Drive_a_16x2_LCD_with_the_Raspberry_Pi/lcd.service
+++ b/Drive_a_16x2_LCD_with_the_Raspberry_Pi/lcd.service
@@ -1,7 +1,5 @@
[Unit]
Description=LCD date|time|ip
-Requires=network-online.target
-After=network-online.target
[Service]
ExecStart=/usr/bin/python3 Drive_a_16x2_LCD_with_the_Raspberry_Pi.py
@@ -12,4 +10,4 @@ Restart=always
User=pi
[Install]
-WantedBy=network-online.target
+WantedBy=multi-user.target
diff --git a/Drum_Trigger_2040/code.py b/Drum_Trigger_2040/code.py
new file mode 100644
index 000000000..12f42c44b
--- /dev/null
+++ b/Drum_Trigger_2040/code.py
@@ -0,0 +1,224 @@
+# SPDX-FileCopyrightText: 2022 John Park for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# Drum Trigger Sequencer 2040
+# Based on code by Tod Kurt @todbot https://github.com/todbot/picostepseq
+
+# Uses General MIDI drum notes on channel 10
+# Range is note 35/B0 - 81/A4, but classic 808 set is defined here
+
+import time
+from adafruit_ticks import ticks_ms, ticks_diff, ticks_add
+import board
+from digitalio import DigitalInOut, Pull
+import keypad
+import adafruit_aw9523
+import usb_midi
+from adafruit_seesaw import seesaw, rotaryio, digitalio
+from adafruit_debouncer import Debouncer
+from adafruit_ht16k33 import segments
+
+
+# define I2C
+i2c = board.STEMMA_I2C()
+
+num_steps = 16 # number of steps/switches
+num_drums = 11 # primary 808 drums used here, but you can use however many you like
+# Beat timing assumes 4/4 time signature, e.g. 4 beats per measure, 1/4 note gets the beat
+bpm = 120 # default BPM
+beat_time = 60/bpm # time length of a single beat
+beat_millis = beat_time * 1000 # time length of single beat in milliseconds
+steps_per_beat = 4 # subdivide beats down to to 16th notes
+steps_millis = beat_millis / steps_per_beat # time length of a beat subdivision, e.g. 1/16th note
+
+step_counter = 0 # goes from 0 to length of sequence - 1
+sequence_length = 16 # how many notes stored in a sequence
+curr_drum = 0
+playing = False
+
+# Setup button
+start_button_in = DigitalInOut(board.A2)
+start_button_in.pull = Pull.UP
+start_button = Debouncer(start_button_in)
+
+
+# Setup switches
+switch_pins = (
+ board.TX, board.RX, board.D2, board.D3,
+ board.D4, board.D5, board.D6, board.D7,
+ board.D8, board.D9, board.D10, board.MOSI,
+ board.MISO, board.SCK, board.A0, board.A1
+)
+switches = keypad.Keys(switch_pins, value_when_pressed=False, pull=True)
+
+# Setup LEDs
+leds = adafruit_aw9523.AW9523(i2c, address=0x5B) # both jumperes soldered on board
+for led in range(num_steps): # turn them off
+ leds.set_constant_current(led, 0)
+leds.LED_modes = 0xFFFF # constant current mode
+leds.directions = 0xFFFF # output
+
+# Values for LED brightness 0-255
+offled = 0
+dimled = 2
+midled = 20
+highled = 150
+
+for led in range(num_steps): # dramatic boot up light sequence
+ leds.set_constant_current(led, dimled)
+ time.sleep(0.05)
+time.sleep(0.5)
+#
+# STEMMA QT Rotary encoder setup
+rotary_seesaw = seesaw.Seesaw(i2c, addr=0x36) # default address is 0x36
+encoder = rotaryio.IncrementalEncoder(rotary_seesaw)
+last_encoder_pos = 0
+rotary_seesaw.pin_mode(24, rotary_seesaw.INPUT_PULLUP) # setup the button pin
+knobbutton_in = digitalio.DigitalIO(rotary_seesaw, 24) # use seesaw digitalio
+knobbutton = Debouncer(knobbutton_in) # create debouncer object for button
+encoder_pos = -encoder.position
+
+# MIDI setup
+midi = usb_midi.ports[1]
+
+drum_names = [
+ "Bass", "Snar", "LTom", "MTom", "HTom",
+ "Clav", "Clap", "Cowb", "Cymb", "OHat", "CHat"
+]
+drum_notes = [36, 38, 41, 43, 45, 37, 39, 56, 49, 46, 42] # general midi drum notes matched to 808
+
+# default starting sequence needs to match number of drums in num_drums
+sequence = [
+ [ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 ], # bass drum
+ [ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ], # snare
+ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ], # low tom
+ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 ], # mid tom
+ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ], # high tom
+ [ 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], # rimshot/claves
+ [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 ], # handclap/maracas
+ [ 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0 ], # cowbell
+ [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], # cymbal
+ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], # hihat open
+ [ 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0 ] # hihat closed
+]
+
+def play_drum(note):
+ midi_msg_on = bytearray([0x99, note, 120]) # 0x90 is noteon ch 1, 0x99 is noteon ch 10
+ midi_msg_off = bytearray([0x89, note, 0])
+ midi.write(midi_msg_on)
+ midi.write(midi_msg_off)
+
+def light_steps(step, state):
+ if state:
+ leds.set_constant_current(step, midled)
+ else:
+ leds.set_constant_current(step, offled)
+
+def light_beat(step):
+ leds.set_constant_current(step, highled)
+
+def edit_mode_toggle():
+ # pylint: disable=global-statement
+ global edit_mode
+ # pylint: disable=used-before-assignment
+ edit_mode = (edit_mode + 1) % num_modes
+ display.fill(0)
+ if edit_mode == 0:
+ display.print(bpm)
+ elif edit_mode == 1:
+ display.print(drum_names[curr_drum])
+
+def print_sequence():
+ print("sequence = [ ")
+ for k in range(num_drums):
+ print(" [" + ",".join('1' if e else '0' for e in sequence[k]) + "], #", drum_names[k])
+ print("]")
+
+# set the leds
+for j in range(sequence_length):
+ light_steps(j, sequence[curr_drum][j])
+
+display = segments.Seg14x4(i2c, address=(0x71))
+display.brightness = 0.3
+display.fill(0)
+display.show()
+display.print(bpm)
+display.show()
+
+edit_mode = 0 # 0=bpm, 1=voices
+num_modes = 2
+
+print("Drum Trigger 2040")
+
+
+display.fill(0)
+display.show()
+display.marquee("Drum", 0.05, loop=False)
+time.sleep(0.5)
+display.marquee("Trigger", 0.075, loop=False)
+time.sleep(0.5)
+display.marquee("2040", 0.05, loop=False)
+time.sleep(1)
+display.marquee("BPM", 0.05, loop=False)
+time.sleep(0.75)
+display.marquee(str(bpm), 0.1, loop=False)
+
+
+while True:
+ start_button.update()
+ if start_button.fell: # pushed encoder button plays/stops transport
+ if playing is True:
+ print_sequence()
+ playing = not playing
+ step_counter = 0
+ last_step = int(ticks_add(ticks_ms(), -steps_millis))
+ print("*** Play:", playing)
+
+ if playing:
+ now = ticks_ms()
+ diff = ticks_diff(now, last_step)
+ if diff >= steps_millis:
+ late_time = ticks_diff(int(diff), int(steps_millis))
+ last_step = ticks_add(now, - late_time//2)
+
+ light_beat(step_counter) # brighten current step
+ for i in range(num_drums):
+ if sequence[i][step_counter]: # if there's a 1 at the step for the seq, play it
+ play_drum(drum_notes[i])
+ light_steps(step_counter, sequence[curr_drum][step_counter]) # return led to step value
+ step_counter = (step_counter + 1) % sequence_length
+ encoder_pos = -encoder.position # only check encoder while playing between steps
+ knobbutton.update()
+ if knobbutton.fell:
+ edit_mode_toggle()
+ else: # check the encoder all the time when not playing
+ encoder_pos = -encoder.position
+ knobbutton.update()
+ if knobbutton.fell: # change edit mode, refresh display
+ edit_mode_toggle()
+
+ # switches add or remove steps
+ switch = switches.events.get()
+ if switch:
+ if switch.pressed:
+ i = switch.key_number
+ sequence[curr_drum][i] = not sequence[curr_drum][i] # toggle step
+ light_steps(i, sequence[curr_drum][i]) # toggle light
+
+ if encoder_pos != last_encoder_pos:
+ encoder_delta = encoder_pos - last_encoder_pos
+ if edit_mode == 0:
+ bpm = bpm + encoder_delta # or (encoder_delta * 5)
+ bpm = min(max(bpm, 10), 400)
+ beat_time = 60/bpm # time length of a single beat
+ beat_millis = beat_time * 1000
+ steps_millis = beat_millis / steps_per_beat
+ display.fill(0)
+ display.print(bpm)
+ if edit_mode == 1:
+ curr_drum = (curr_drum + encoder_delta) % num_drums
+ # quickly set the step leds
+ for i in range(sequence_length):
+ light_steps(i, sequence[curr_drum][i])
+ display.print(drum_names[curr_drum])
+ last_encoder_pos = encoder_pos
diff --git a/EInk_Autostereograms/boot.py b/EInk_Autostereograms/boot.py
index a3413aa06..3823f7169 100644
--- a/EInk_Autostereograms/boot.py
+++ b/EInk_Autostereograms/boot.py
@@ -28,4 +28,4 @@ def read_buttons():
print("OS has write access to CircuitPython drive")
else:
print("CircuitPython has write access to drive")
-storage.remount("/", readonly)
+storage.remount("/", readonly=readonly)
diff --git a/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_badge/code.py b/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_badge/code.py
index 73916aff1..dfb39569c 100644
--- a/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_badge/code.py
+++ b/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_badge/code.py
@@ -111,7 +111,7 @@
g.append(text_group)
# Place the display group on the screen
-display.show(g)
+display.root_group = g
# Refresh the display to have it actually show
# NOTE: Do not refresh eInk displays more often than 180 seconds!
diff --git a/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_text/code.py b/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_text/code.py
index 5237c4aa4..1a0233bb9 100644
--- a/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_text/code.py
+++ b/EInk_CircuitPython_Quickstart/213_tricolor_eink_fw_text/code.py
@@ -78,7 +78,7 @@
g.append(text_group)
# Place the display group on the screen
-display.show(g)
+display.root_group = g
# Refresh the display to have everything show on the display
# NOTE: Do not refresh eInk displays more often than 180 seconds!
diff --git a/EInk_CircuitPython_Quickstart/27_tricolor_eink_shield_badge/code.py b/EInk_CircuitPython_Quickstart/27_tricolor_eink_shield_badge/code.py
index c2abd7569..24ba5313f 100644
--- a/EInk_CircuitPython_Quickstart/27_tricolor_eink_shield_badge/code.py
+++ b/EInk_CircuitPython_Quickstart/27_tricolor_eink_shield_badge/code.py
@@ -110,7 +110,7 @@
g.append(text_group)
# Place the display group on the screen
-display.show(g)
+display.root_group = g
# Refresh the display to have it actually show
# NOTE: Do not refresh eInk displays more often than 180 seconds!
diff --git a/ESP32-S2_TFT_Mini_Weather_Station/code.py b/ESP32-S2_TFT_Mini_Weather_Station/code.py
new file mode 100755
index 000000000..98c2d207c
--- /dev/null
+++ b/ESP32-S2_TFT_Mini_Weather_Station/code.py
@@ -0,0 +1,127 @@
+# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+import os
+import ssl
+import time
+import wifi
+import board
+import displayio
+import terminalio
+import socketpool
+import adafruit_requests
+
+from adafruit_display_text import bitmap_label
+
+# Initialize Wi-Fi connection
+try:
+ wifi.radio.connect(
+ os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD")
+ )
+ print("Connected to %s!" % os.getenv("CIRCUITPY_WIFI_SSID"))
+# Wi-Fi connectivity fails with error messages, not specific errors, so this except is broad.
+except Exception as e: # pylint: disable=broad-except
+ print(
+ "Failed to connect to WiFi. Error:", e, "\nBoard will hard reset in 30 seconds."
+ )
+
+
+# Create a socket pool and session object for making HTTP requests
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+# Set location and units for weather data
+UNITS = "metric"
+LOCATION = os.getenv("LOCATION")
+print("Getting weather for {}".format(LOCATION))
+
+# Set up the URL for fetching weather data
+DATA_SOURCE = (
+ "http://api.openweathermap.org/data/2.5/weather?q="
+ + LOCATION
+ + "&units="
+ + UNITS
+ + "&mode=json"
+ + "&appid="
+ + os.getenv("OPENWEATHER_KEY")
+)
+
+# Define time interval between requests
+time_interval = 3000 # set the time interval to 30 minutes
+
+# Set up display a default image
+display = board.DISPLAY
+bitmap = displayio.OnDiskBitmap("/images/sunny.bmp")
+tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
+
+group = displayio.Group()
+group.append(tile_grid)
+
+# Create label for displaying temperature data
+text_area = bitmap_label.Label(terminalio.FONT, scale=3)
+text_area.anchor_point = (0.5, 0.5)
+text_area.anchored_position = (display.width // 2, display.height // 2)
+
+# Create main group to hold all display groups
+main_group = displayio.Group()
+main_group.append(group)
+main_group.append(text_area)
+# Show the main group on the display
+display.root_group = main_group
+
+# Define function to get the appropriate weather icon
+def get_weather_condition_icon(weather_condition):
+ if "cloud" in weather_condition.lower():
+ return "/images/cloudy.bmp"
+ elif "rain" in weather_condition.lower():
+ return "/images/rain.bmp"
+ elif "snow" in weather_condition.lower():
+ return "/images/snowy.bmp"
+ elif "clear" in weather_condition.lower():
+ return "/images/sunny.bmp"
+ else:
+ return "/images/sunny.bmp"
+
+
+# Define function to update the background image based on weather conditions
+def set_background(weather_condition, background_tile_grid):
+ bitmap_path = get_weather_condition_icon(weather_condition)
+ background_bitmap = displayio.OnDiskBitmap(bitmap_path)
+ background_tile_grid.bitmap = background_bitmap
+
+
+# Main loop to continuously fetch and display weather data
+while True:
+
+ # Fetch weather data from OpenWeatherMap API
+ print("Fetching json from", DATA_SOURCE)
+ response = requests.get(DATA_SOURCE)
+ print(response.json())
+
+ # Extract temperature and weather condition data from API response
+ current_temp = response.json()["main"]["temp"]
+ max_temp = response.json()["main"]["temp_max"]
+ min_temp = response.json()["main"]["temp_min"]
+ current_weather_condition = response.json()["weather"][0]["main"]
+
+ print("Weather condition: ", current_weather_condition)
+
+ # Convert temperatures to Fahrenheit
+ max_temp = (max_temp * 9 / 5) + 32
+ min_temp = (min_temp * 9 / 5) + 32
+ current_temp = (current_temp * 9 / 5) + 32
+
+ # Convert temperatures to Fahrenheit to Celsius
+ # max_temp = (max_temp - 32) * 5/9
+ # min_temp = (min_temp - 32) * 5/9
+ # current_temp = (current_temp - 32) * 5/9
+ print("Current temperature: {:.1f} °F".format(current_temp))
+
+ # Update label for displaying temperature data
+ text_area.text = "{}\n {:.0f}°F\nH:{:.0f}°F L:{:.0f}°F".format(
+ LOCATION, round(current_temp), round(max_temp), round(min_temp))
+
+ # Update background image
+ set_background(current_weather_condition, tile_grid)
+
+ time.sleep(time_interval)
diff --git a/ESP32-S2_TFT_Mini_Weather_Station/images/cloudy.bmp b/ESP32-S2_TFT_Mini_Weather_Station/images/cloudy.bmp
new file mode 100755
index 000000000..3ca0a546b
Binary files /dev/null and b/ESP32-S2_TFT_Mini_Weather_Station/images/cloudy.bmp differ
diff --git a/ESP32-S2_TFT_Mini_Weather_Station/images/rain.bmp b/ESP32-S2_TFT_Mini_Weather_Station/images/rain.bmp
new file mode 100755
index 000000000..005aa858c
Binary files /dev/null and b/ESP32-S2_TFT_Mini_Weather_Station/images/rain.bmp differ
diff --git a/ESP32-S2_TFT_Mini_Weather_Station/images/snowy.bmp b/ESP32-S2_TFT_Mini_Weather_Station/images/snowy.bmp
new file mode 100755
index 000000000..59b2d7020
Binary files /dev/null and b/ESP32-S2_TFT_Mini_Weather_Station/images/snowy.bmp differ
diff --git a/ESP32-S2_TFT_Mini_Weather_Station/images/sunny.bmp b/ESP32-S2_TFT_Mini_Weather_Station/images/sunny.bmp
new file mode 100755
index 000000000..a43387aca
Binary files /dev/null and b/ESP32-S2_TFT_Mini_Weather_Station/images/sunny.bmp differ
diff --git a/ESP32-S2_TFT_Mini_Weather_Station/images/thunder.bmp b/ESP32-S2_TFT_Mini_Weather_Station/images/thunder.bmp
new file mode 100755
index 000000000..19f98e542
Binary files /dev/null and b/ESP32-S2_TFT_Mini_Weather_Station/images/thunder.bmp differ
diff --git a/ESP32S3_Linux/Dockerfile b/ESP32S3_Linux/Dockerfile
new file mode 100644
index 000000000..a9f8e5f2c
--- /dev/null
+++ b/ESP32S3_Linux/Dockerfile
@@ -0,0 +1,82 @@
+# Dockerfile port of https://gist.github.com/jcmvbkbc/316e6da728021c8ff670a24e674a35e6
+# wifi details http://wiki.osll.ru/doku.php/etc:users:jcmvbkbc:linux-xtensa:esp32s3wifi
+
+# we need python 3.10 not 3.11
+FROM ubuntu:22.04
+
+RUN apt-get update
+RUN apt-get -y install gperf bison flex texinfo help2man gawk libtool-bin git unzip ncurses-dev rsync zlib1g zlib1g-dev xz-utils cmake wget bzip2 g++ python3 python3-dev python3-pip cpio bc virtualenv libusb-1.0 && \
+ ln -s /usr/bin/python3 /usr/bin/python
+
+WORKDIR /app
+
+# install autoconf 2.71
+RUN wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.xz && \
+ tar -xf autoconf-2.71.tar.xz && \
+ cd autoconf-2.71 && \
+ ./configure --prefix=`pwd`/root && \
+ make && \
+ make install
+ENV PATH="$PATH:/app/autoconf-2.71/root/bin"
+
+# dynconfig
+RUN git clone https://github.com/jcmvbkbc/xtensa-dynconfig -b original --depth=1 && \
+ git clone https://github.com/jcmvbkbc/config-esp32s3 esp32s3 --depth=1 && \
+ make -C xtensa-dynconfig ORIG=1 CONF_DIR=`pwd` esp32s3.so
+ENV XTENSA_GNU_CONFIG="/app/xtensa-dynconfig/esp32s3.so"
+
+# ct-ng cannot run as root, we'll just do everything else as a user
+RUN useradd -d /app/build -u 3232 esp32 && mkdir build && chown esp32:esp32 build
+USER esp32
+
+# toolchain
+RUN cd build && \
+ git clone https://github.com/jcmvbkbc/crosstool-NG.git -b xtensa-fdpic --depth=1 && \
+ cd crosstool-NG && \
+ ./bootstrap && \
+ ./configure --enable-local && \
+ make && \
+ ./ct-ng xtensa-esp32s3-linux-uclibcfdpic && \
+ CT_PREFIX=`pwd`/builds ./ct-ng build || echo "Completed" # the complete ct-ng build fails but we still get what we wanted!
+RUN [ -e build/crosstool-NG/builds/xtensa-esp32s3-linux-uclibcfdpic/bin/xtensa-esp32s3-linux-uclibcfdpic-gcc ] || exit 1
+
+# kernel and rootfs
+RUN cd build && \
+ git clone https://github.com/jcmvbkbc/buildroot -b xtensa-2023.02-fdpic --depth=1 && \
+ make -C buildroot O=`pwd`/build-xtensa-2023.02-fdpic-esp32s3 esp32s3wifi_defconfig && \
+ buildroot/utils/config --file build-xtensa-2023.02-fdpic-esp32s3/.config --set-str TOOLCHAIN_EXTERNAL_PATH `pwd`/crosstool-NG/builds/xtensa-esp32s3-linux-uclibcfdpic && \
+ buildroot/utils/config --file build-xtensa-2023.02-fdpic-esp32s3/.config --set-str TOOLCHAIN_EXTERNAL_PREFIX '$(ARCH)-esp32s3-linux-uclibcfdpic' && \
+ buildroot/utils/config --file build-xtensa-2023.02-fdpic-esp32s3/.config --set-str TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX '$(ARCH)-esp32s3-linux-uclibcfdpic' && \
+ make -C buildroot O=`pwd`/build-xtensa-2023.02-fdpic-esp32s3
+RUN [ -f build/build-xtensa-2023.02-fdpic-esp32s3/images/xipImage -a -f build/build-xtensa-2023.02-fdpic-esp32s3/images/rootfs.cramfs ] || exit 1
+
+
+# bootloader
+ENV IDF_PATH="/app/build/esp-hosted/esp_hosted_ng/esp/esp_driver/esp-idf"
+RUN cd build && \
+ git clone https://github.com/jcmvbkbc/esp-hosted -b shmem --depth=1 && \
+ cd esp-hosted/esp_hosted_ng/esp/esp_driver && cmake . && \
+ cd esp-idf && . ./export.sh && \
+ cd ../network_adapter && idf.py set-target esp32s3 && \
+ cp sdkconfig.defaults.esp32s3 sdkconfig && idf.py build
+
+
+# move files over
+RUN cd build && mkdir release && \
+ cp esp-hosted/esp_hosted_ng/esp/esp_driver/network_adapter/build/bootloader/bootloader.bin release && \
+ cp esp-hosted/esp_hosted_ng/esp/esp_driver/network_adapter/build/partition_table/partition-table.bin release && \
+ cp esp-hosted/esp_hosted_ng/esp/esp_driver/network_adapter/build/network_adapter.bin release && \
+ cp build-xtensa-2023.02-fdpic-esp32s3/images/xipImage release && \
+ cp build-xtensa-2023.02-fdpic-esp32s3/images/rootfs.cramfs release
+
+# keep docker running so we can debug/rebuild :)
+USER root
+ENTRYPOINT ["tail", "-f", "/dev/null"]
+
+
+# grab the files with `docker cp CONTAINER_NAME:/app/build/release/\* .`
+# now you can burn the files from the 'release' folder with:
+# python esptool.py --chip esp32s3 -p /dev/ttyUSB0 -b 921600 --before=default_reset --after=hard_reset write_flash 0x0 bootloader.bin 0x10000 network_adapter.bin 0x8000 partition-table.bin
+# next we can burn in the kernel and filesys with parttool, which is part of esp-idf
+# parttool.py write_partition --partition-name linux --input xipImage
+# parttool.py write_partition --partition-name rootfs --input rootfs.cramfs
diff --git a/ESP32_S2_Reverse_TFT_Digital_Clock/code.py b/ESP32_S2_Reverse_TFT_Digital_Clock/code.py
new file mode 100755
index 000000000..04bbbd670
--- /dev/null
+++ b/ESP32_S2_Reverse_TFT_Digital_Clock/code.py
@@ -0,0 +1,94 @@
+# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+import os
+import ssl
+import time
+import wifi
+import board
+import displayio
+import terminalio
+import socketpool
+import adafruit_requests
+from adafruit_display_text import bitmap_label
+
+# Initialize Wi-Fi connection
+try:
+ wifi.radio.connect(
+ os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD")
+ )
+ print("Connected to %s!" % os.getenv("CIRCUITPY_WIFI_SSID"))
+except Exception as e: # pylint: disable=broad-except
+ print(
+ "Failed to connect to WiFi. Error:", e, "\nBoard will hard reset in 30 seconds."
+ )
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+# Set up the URL for fetching time data
+DATA_SOURCE = "http://worldtimeapi.org/api/timezone/" + os.getenv("TIMEZONE")
+
+# Set up display a default image
+display = board.DISPLAY
+default_bitmap = displayio.OnDiskBitmap("/images/blanka-chan.bmp")
+default_tile_grid = displayio.TileGrid(default_bitmap, pixel_shader=default_bitmap.pixel_shader)
+
+group = displayio.Group()
+group.append(default_tile_grid)
+
+# Create label for displaying time
+time_label = bitmap_label.Label(terminalio.FONT, scale=5)
+time_label.anchor_point = (0.2, 0.5)
+time_label.anchored_position = (display.width // 2, display.height // 2)
+
+# Create main group to hold all display groups
+main_group = displayio.Group()
+main_group.append(group)
+main_group.append(time_label)
+# Show the main group on the display
+display.root_group = main_group
+
+current_background_image = "/images/blanka-chan.bmp"
+
+def set_background_image(filename):
+ global current_background_image # pylint: disable=global-statement
+ tile_bitmap = displayio.OnDiskBitmap(filename)
+ new_tile_grid = displayio.TileGrid(tile_bitmap, pixel_shader=tile_bitmap.pixel_shader)
+ group[0] = new_tile_grid
+ current_background_image = filename
+
+def parse_time(datetime_str):
+ # Extract the time part from the datetime string
+ time_str = datetime_str.split("T")[1].split(".")[0]
+ hour, minute, _ = map(int, time_str.split(":"))
+
+ # Convert 24-hour format to 12-hour format and determine AM/PM
+ period = "AM"
+ if hour >= 12:
+ period = "PM"
+ if hour > 12:
+ hour -= 12
+ elif hour == 0:
+ hour = 12
+
+ return hour, minute, period
+
+while True:
+ # Fetch time data from WorldTimeAPI
+ response = requests.get(DATA_SOURCE)
+ data = response.json()
+
+ # Parse the time from the datetime string
+ current_hour, current_minute, current_period = parse_time(data["datetime"])
+
+ # Display the time
+ time_label.text = " {:2}{}\n :{:02}".format(current_hour, current_period, current_minute)
+
+ # Switch between two images
+ if current_background_image == "/images/blanka-chan.bmp":
+ set_background_image("/images/blanka-chan-charged.bmp")
+ else:
+ set_background_image("/images/blanka-chan.bmp")
+
+ time.sleep(5)
diff --git a/ESP32_S2_Reverse_TFT_Digital_Clock/fonts/Arial-Bold-36.bdf b/ESP32_S2_Reverse_TFT_Digital_Clock/fonts/Arial-Bold-36.bdf
new file mode 100755
index 000000000..68a914b9a
--- /dev/null
+++ b/ESP32_S2_Reverse_TFT_Digital_Clock/fonts/Arial-Bold-36.bdf
@@ -0,0 +1,2938 @@
+STARTFONT 2.1
+FONT -FontForge-Arial-Bold-R-Normal--36-350-75-75-P-198-ISO10646-1
+SIZE 35 75 75
+FONTBOUNDINGBOX 37 37 -2 -9
+COMMENT "Generated by fontforge, http://fontforge.sourceforge.net"
+COMMENT "(c) 2006 The Monotype Corporation. All Rights Reserved."
+STARTPROPERTIES 40
+FOUNDRY "FontForge"
+FAMILY_NAME "Arial"
+WEIGHT_NAME "Bold"
+SLANT "R"
+SETWIDTH_NAME "Normal"
+ADD_STYLE_NAME ""
+PIXEL_SIZE 36
+POINT_SIZE 350
+RESOLUTION_X 75
+RESOLUTION_Y 75
+SPACING "P"
+AVERAGE_WIDTH 198
+CHARSET_REGISTRY "ISO10646"
+CHARSET_ENCODING "1"
+FONTNAME_REGISTRY ""
+CHARSET_COLLECTIONS "ISO10646-1"
+FONT_NAME "Arial-BoldMT"
+FACE_NAME "Arial Bold"
+COPYRIGHT "(c) 2006 The Monotype Corporation. All Rights Reserved."
+FONT_VERSION "5.01.2x"
+FONT_ASCENT 29
+FONT_DESCENT 7
+UNDERLINE_POSITION -6
+UNDERLINE_THICKNESS 4
+X_HEIGHT 19
+CAP_HEIGHT 25
+RAW_ASCENT 799
+RAW_DESCENT 200
+NORM_SPACE 10
+RELATIVE_WEIGHT 70
+RELATIVE_SETWIDTH 50
+SUPERSCRIPT_X 0
+SUPERSCRIPT_Y 17
+SUPERSCRIPT_SIZE 23
+SUBSCRIPT_X 0
+SUBSCRIPT_Y 4
+SUBSCRIPT_SIZE 23
+FIGURE_WIDTH 20
+AVG_LOWERCASE_WIDTH 192
+AVG_UPPERCASE_WIDTH 246
+ENDPROPERTIES
+CHARS 95
+STARTCHAR space
+ENCODING 32
+SWIDTH 277 0
+DWIDTH 10 0
+BBX 1 1 0 0
+BITMAP
+00
+ENDCHAR
+STARTCHAR exclam
+ENCODING 33
+SWIDTH 333 0
+DWIDTH 11 0
+BBX 5 26 3 0
+BITMAP
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+78
+70
+70
+70
+70
+70
+70
+70
+00
+00
+F8
+F8
+F8
+F8
+F8
+ENDCHAR
+STARTCHAR quotedbl
+ENCODING 34
+SWIDTH 474 0
+DWIDTH 17 0
+BBX 13 9 2 17
+BITMAP
+F8F8
+F8F8
+F8F8
+F8F8
+F8F8
+F8F8
+F8F8
+7878
+7070
+ENDCHAR
+STARTCHAR numbersign
+ENCODING 35
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 19 26 1 0
+BITMAP
+03C3C0
+03C3C0
+03C3C0
+078780
+078780
+078780
+078780
+FFFFE0
+FFFFE0
+FFFFE0
+FFFFE0
+0F0F00
+0F0F00
+1E1E00
+1E1E00
+1E1E00
+FFFFE0
+FFFFE0
+FFFFE0
+FFFFE0
+3C3C00
+3C3C00
+3C3C00
+7C7C00
+787800
+787800
+ENDCHAR
+STARTCHAR dollar
+ENCODING 36
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 31 1 -3
+BITMAP
+01C000
+01C000
+07F000
+1FFC00
+3FFE00
+3FFE00
+7DDF00
+79DF00
+79CC00
+79C000
+79C000
+7DC000
+3FC000
+3FF000
+1FFC00
+0FFE00
+03FF00
+01FF80
+01CF80
+01C780
+31C780
+F9C780
+F9C780
+7DCF00
+7FFF00
+3FFE00
+1FFC00
+07F000
+01C000
+01C000
+01C000
+ENDCHAR
+STARTCHAR percent
+ENCODING 37
+SWIDTH 889 0
+DWIDTH 33 0
+BBX 30 27 1 -1
+BITMAP
+1F800E00
+3FC01E00
+7FE01C00
+79E03C00
+F0F03800
+F0F07800
+F0F07000
+F0F0F000
+F0F0E000
+F0F1E000
+79E1C000
+7FE38000
+3FC38000
+1F8707E0
+00070FF0
+000E1FF8
+000E1E78
+001C3C3C
+001C3C3C
+00383C3C
+00783C3C
+00703C3C
+00F03C3C
+00E01E78
+01E01FF8
+01C00FF0
+03C007E0
+ENDCHAR
+STARTCHAR ampersand
+ENCODING 38
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 24 26 1 0
+BITMAP
+01FC00
+07FF00
+0FFF80
+1FFF80
+1F8FC0
+1F07C0
+1F07C0
+1F8FC0
+0FDF80
+0FFF00
+07FE00
+07FC00
+0FF800
+3FFC00
+3F7E38
+7E7F7C
+FC3FFC
+F81FF8
+F80FF8
+F807F0
+FC07F8
+7E1FFC
+7FFFFF
+3FFFFE
+1FFE3C
+03F80C
+ENDCHAR
+STARTCHAR quotesingle
+ENCODING 39
+SWIDTH 237 0
+DWIDTH 9 0
+BBX 5 9 2 17
+BITMAP
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+78
+70
+ENDCHAR
+STARTCHAR parenleft
+ENCODING 40
+SWIDTH 333 0
+DWIDTH 12 0
+BBX 9 33 2 -7
+BITMAP
+0780
+0F00
+0F00
+1F00
+1E00
+3E00
+3E00
+7C00
+7C00
+7C00
+7C00
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+7C00
+7C00
+7C00
+7C00
+3C00
+3E00
+1E00
+1E00
+0F00
+0F00
+0780
+ENDCHAR
+STARTCHAR parenright
+ENCODING 41
+SWIDTH 333 0
+DWIDTH 12 0
+BBX 9 33 1 -7
+BITMAP
+F000
+7800
+7800
+7C00
+3C00
+3E00
+3E00
+1F00
+1F00
+1F00
+1F00
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F00
+1F00
+1F00
+1F00
+1E00
+1E00
+3E00
+3C00
+7C00
+7800
+7800
+F000
+ENDCHAR
+STARTCHAR asterisk
+ENCODING 42
+SWIDTH 389 0
+DWIDTH 14 0
+BBX 13 12 0 14
+BITMAP
+0700
+0700
+0700
+6730
+7FF0
+FFF8
+1FC0
+0F80
+1DC0
+38E0
+78F0
+1040
+ENDCHAR
+STARTCHAR plus
+ENCODING 43
+SWIDTH 583 0
+DWIDTH 21 0
+BBX 18 18 1 4
+BITMAP
+01E000
+01E000
+01E000
+01E000
+01E000
+01E000
+01E000
+FFFFC0
+FFFFC0
+FFFFC0
+FFFFC0
+01E000
+01E000
+01E000
+01E000
+01E000
+01E000
+01E000
+ENDCHAR
+STARTCHAR comma
+ENCODING 44
+SWIDTH 277 0
+DWIDTH 10 0
+BBX 5 11 2 -6
+BITMAP
+F8
+F8
+F8
+F8
+F8
+38
+38
+30
+70
+E0
+40
+ENDCHAR
+STARTCHAR hyphen
+ENCODING 45
+SWIDTH 333 0
+DWIDTH 12 0
+BBX 10 4 2 7
+BITMAP
+FFC0
+FFC0
+FFC0
+FFC0
+ENDCHAR
+STARTCHAR period
+ENCODING 46
+SWIDTH 277 0
+DWIDTH 10 0
+BBX 5 5 2 0
+BITMAP
+F8
+F8
+F8
+F8
+F8
+ENDCHAR
+STARTCHAR slash
+ENCODING 47
+SWIDTH 277 0
+DWIDTH 10 0
+BBX 10 26 0 0
+BITMAP
+03C0
+03C0
+0780
+0780
+0780
+0780
+0F80
+0F00
+0F00
+0F00
+1F00
+1E00
+1E00
+1E00
+1E00
+3C00
+3C00
+3C00
+3C00
+7C00
+7800
+7800
+7800
+F800
+F000
+F000
+ENDCHAR
+STARTCHAR zero
+ENCODING 48
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+03E000
+0FF800
+1FFC00
+3FFE00
+7E3F00
+7C1F00
+7C1F00
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+7C1F00
+7C1F00
+7E3F00
+3FFE00
+1FFC00
+0FF800
+03E000
+ENDCHAR
+STARTCHAR one
+ENCODING 49
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 11 26 3 0
+BITMAP
+01E0
+03E0
+03E0
+07E0
+0FE0
+1FE0
+7FE0
+FFE0
+FBE0
+E3E0
+83E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+03E0
+ENDCHAR
+STARTCHAR two
+ENCODING 50
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+03F000
+0FFC00
+1FFE00
+3FFF00
+3E1F80
+7E0F80
+7C0F80
+7C0F80
+000F80
+000F80
+001F00
+003F00
+007E00
+00FE00
+01FC00
+03F800
+07F000
+0FC000
+1F8000
+1F0000
+3E0000
+7FFF80
+7FFF80
+7FFF80
+FFFF80
+FFFF80
+ENDCHAR
+STARTCHAR three
+ENCODING 51
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+03F000
+0FF800
+1FFC00
+3FFE00
+7E3F00
+7C1F00
+3C1F00
+001F00
+001F00
+003E00
+01FC00
+01F800
+01FC00
+01FE00
+001F00
+001F80
+000F80
+000F80
+780F80
+F80F80
+FC1F80
+7E3F00
+7FFF00
+3FFE00
+1FF800
+07E000
+ENDCHAR
+STARTCHAR four
+ENCODING 52
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 18 26 1 0
+BITMAP
+003E00
+003E00
+007E00
+00FE00
+00FE00
+01FE00
+01FE00
+03FE00
+07FE00
+07BE00
+0FBE00
+1F3E00
+1E3E00
+3E3E00
+3C3E00
+783E00
+F83E00
+FFFFC0
+FFFFC0
+FFFFC0
+FFFFC0
+003E00
+003E00
+003E00
+003E00
+003E00
+ENDCHAR
+STARTCHAR five
+ENCODING 53
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+0FFF00
+0FFF00
+1FFF00
+1FFF00
+1FFF00
+1F0000
+1F0000
+3E0000
+3E0000
+3EF000
+3FFC00
+3FFE00
+7FFF00
+7E3F00
+3C1F80
+000F80
+000F80
+000F80
+780F80
+F80F80
+FC1F00
+7E3F00
+7FFE00
+3FFE00
+1FF800
+07E000
+ENDCHAR
+STARTCHAR six
+ENCODING 54
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+03F000
+0FF800
+1FFC00
+3FFE00
+3E3E00
+7C1F00
+781F00
+780000
+F80000
+F9F000
+FFFC00
+FFFE00
+FFFF00
+FE3F00
+FC1F80
+F80F80
+F80F80
+F80F80
+F80F80
+780F80
+7C1F80
+7E3F00
+3FFF00
+1FFE00
+0FFC00
+03F000
+ENDCHAR
+STARTCHAR seven
+ENCODING 55
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+FFFF80
+FFFF80
+FFFF80
+FFFF80
+FFFF00
+001F00
+003E00
+007C00
+007800
+00F800
+01F000
+01F000
+03E000
+03E000
+07C000
+07C000
+07C000
+0F8000
+0F8000
+0F8000
+0F8000
+1F0000
+1F0000
+1F0000
+1F0000
+1F0000
+ENDCHAR
+STARTCHAR eight
+ENCODING 56
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+07F000
+1FFC00
+3FFE00
+3FFE00
+7E3F00
+7C1F00
+7C1F00
+7C1F00
+7C1F00
+3E3E00
+3FFC00
+0FF800
+1FFC00
+3FFE00
+7E3F00
+7C1F00
+F80F80
+F80F80
+F80F80
+F80F80
+FC1F80
+7E3F00
+7FFF00
+3FFE00
+1FFC00
+07F000
+ENDCHAR
+STARTCHAR nine
+ENCODING 57
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 17 26 1 0
+BITMAP
+07E000
+1FF800
+3FFC00
+7FFE00
+7E3E00
+FC1F00
+F80F00
+F80F00
+F80F80
+F80F80
+F80F80
+FC1F80
+7E3F80
+7FFF80
+3FFF80
+1FFF80
+07CF80
+000F80
+000F00
+7C0F00
+7C1F00
+7E3E00
+3FFE00
+3FFC00
+1FF800
+07E000
+ENDCHAR
+STARTCHAR colon
+ENCODING 58
+SWIDTH 333 0
+DWIDTH 13 0
+BBX 5 20 4 0
+BITMAP
+F8
+F8
+F8
+F8
+F8
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+F8
+F8
+F8
+F8
+F8
+ENDCHAR
+STARTCHAR semicolon
+ENCODING 59
+SWIDTH 333 0
+DWIDTH 13 0
+BBX 5 26 4 -6
+BITMAP
+F8
+F8
+F8
+F8
+F8
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+F8
+F8
+F8
+F8
+F8
+38
+38
+30
+70
+E0
+40
+ENDCHAR
+STARTCHAR less
+ENCODING 60
+SWIDTH 583 0
+DWIDTH 21 0
+BBX 18 20 1 3
+BITMAP
+000040
+0001C0
+000FC0
+003FC0
+00FF80
+07FE00
+1FF000
+7FC000
+FF0000
+F80000
+FC0000
+FF0000
+7FC000
+1FF000
+07FE00
+00FF80
+003FC0
+000FC0
+0001C0
+000040
+ENDCHAR
+STARTCHAR equal
+ENCODING 61
+SWIDTH 583 0
+DWIDTH 21 0
+BBX 18 11 1 8
+BITMAP
+FFFFC0
+FFFFC0
+FFFFC0
+FFFFC0
+000000
+000000
+000000
+FFFFC0
+FFFFC0
+FFFFC0
+FFFFC0
+ENDCHAR
+STARTCHAR greater
+ENCODING 62
+SWIDTH 583 0
+DWIDTH 21 0
+BBX 18 20 1 3
+BITMAP
+800000
+E00000
+FC0000
+FF0000
+7FC000
+1FF800
+03FE00
+00FF80
+003FC0
+000FC0
+000FC0
+003FC0
+00FF80
+03FE00
+1FF800
+7FC000
+FF0000
+FC0000
+E00000
+800000
+ENDCHAR
+STARTCHAR question
+ENCODING 63
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 19 26 1 0
+BITMAP
+03F800
+0FFE00
+1FFF80
+3FFFC0
+7E0FC0
+7C07E0
+FC03E0
+F803E0
+0003E0
+0007E0
+000FC0
+003F80
+007F00
+00FE00
+00FC00
+01F800
+01F000
+01F000
+01F000
+000000
+000000
+01F000
+01F000
+01F000
+01F000
+01F000
+ENDCHAR
+STARTCHAR at
+ENCODING 64
+SWIDTH 975 0
+DWIDTH 35 0
+BBX 34 35 1 -9
+BITMAP
+0007FE0000
+003FFF8000
+00FFFFE000
+01FFFFF800
+03FC03FC00
+07E000FC00
+0F87C7BE00
+1F0FE79F00
+3E1FFF8F00
+3E3FFF8F00
+3C7FFF8780
+7C7E3F8780
+78FC1F0780
+78F81F0780
+F1F81F0780
+F1F01F0780
+F1F01F0F80
+F1F03F0F00
+F1F03E0F00
+F1F07E1E00
+F1F8FE3E00
+F1FFFE7C00
+F8FFFFF800
+78FFBFF000
+787FBFE000
+7C1E1F0000
+3E000007C0
+3F00000F80
+1F80001F80
+0FC0007F00
+07FC03FE00
+03FFFFFC00
+01FFFFF000
+003FFFC000
+0007FE0000
+ENDCHAR
+STARTCHAR A
+ENCODING 65
+SWIDTH 722 0
+DWIDTH 25 0
+BBX 25 26 0 0
+BITMAP
+007F0000
+007F0000
+00FF8000
+00FF8000
+00F78000
+01F7C000
+01F7C000
+03E3C000
+03E3E000
+03E3E000
+07C1F000
+07C1F000
+07C1F000
+0F80F800
+0F80F800
+0F80F800
+1FFFFC00
+1FFFFC00
+1FFFFC00
+3FFFFE00
+3E003E00
+3E003E00
+7C001F00
+7C001F00
+7C001F00
+F8000F80
+ENDCHAR
+STARTCHAR B
+ENCODING 66
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 21 26 3 0
+BITMAP
+FFFF00
+FFFFC0
+FFFFE0
+FFFFE0
+F803F0
+F801F0
+F801F0
+F801F0
+F801F0
+F803E0
+FFFFC0
+FFFF80
+FFFFC0
+FFFFE0
+F803F0
+F801F8
+F800F8
+F800F8
+F800F8
+F800F8
+F801F8
+F803F0
+FFFFF0
+FFFFE0
+FFFFC0
+FFFF00
+ENDCHAR
+STARTCHAR C
+ENCODING 67
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 22 26 2 0
+BITMAP
+00FE00
+03FFC0
+0FFFE0
+1FFFF0
+3F83F8
+3E00F8
+7C00FC
+7C0070
+7C0000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+FC0040
+7C00F8
+7C00FC
+3E01F8
+3F83F8
+1FFFF0
+0FFFE0
+03FFC0
+00FE00
+ENDCHAR
+STARTCHAR D
+ENCODING 68
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 21 26 3 0
+BITMAP
+FFFC00
+FFFF00
+FFFF80
+FFFFC0
+F80FE0
+F803F0
+F801F0
+F801F0
+F800F8
+F800F8
+F800F8
+F800F8
+F800F8
+F800F8
+F800F8
+F800F8
+F800F8
+F800F8
+F801F0
+F801F0
+F803F0
+F807E0
+FFFFC0
+FFFF80
+FFFF00
+FFFC00
+ENDCHAR
+STARTCHAR E
+ENCODING 69
+SWIDTH 666 0
+DWIDTH 24 0
+BBX 19 26 3 0
+BITMAP
+FFFFC0
+FFFFC0
+FFFFC0
+FFFFC0
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+FFFF80
+FFFF80
+FFFF80
+FFFF80
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+FFFFE0
+FFFFE0
+FFFFE0
+FFFFE0
+ENDCHAR
+STARTCHAR F
+ENCODING 70
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 17 26 3 0
+BITMAP
+FFFF80
+FFFF80
+FFFF80
+FFFF80
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+FFFE00
+FFFE00
+FFFE00
+FFFE00
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+ENDCHAR
+STARTCHAR G
+ENCODING 71
+SWIDTH 777 0
+DWIDTH 28 0
+BBX 24 26 2 0
+BITMAP
+007F80
+03FFF0
+07FFF8
+0FFFFC
+1FC0FE
+3F007F
+7E003F
+7C001C
+7C0000
+F80000
+F80000
+F80000
+F807FF
+F807FF
+F807FF
+F807FF
+F8001F
+7C001F
+7C001F
+7E001F
+3F003F
+1FC1FF
+0FFFFF
+07FFFC
+03FFF0
+007F80
+ENDCHAR
+STARTCHAR H
+ENCODING 72
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 20 26 3 0
+BITMAP
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+FFFFF0
+FFFFF0
+FFFFF0
+FFFFF0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+ENDCHAR
+STARTCHAR I
+ENCODING 73
+SWIDTH 277 0
+DWIDTH 9 0
+BBX 5 26 2 0
+BITMAP
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+ENDCHAR
+STARTCHAR J
+ENCODING 74
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 16 26 1 0
+BITMAP
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+001F
+381F
+F81F
+F81F
+FC1F
+7C3E
+7FFE
+3FFC
+1FF8
+0FE0
+ENDCHAR
+STARTCHAR K
+ENCODING 75
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 22 26 3 0
+BITMAP
+F801F8
+F803F0
+F807E0
+F80FC0
+F81F80
+F83F80
+F87F00
+F8FE00
+F9FC00
+F9F800
+FBF800
+FFF800
+FFFC00
+FFFE00
+FF3E00
+FF3F00
+FE1F00
+FC1F80
+F80FC0
+F807C0
+F807E0
+F803F0
+F801F0
+F801F8
+F800FC
+F800FC
+ENDCHAR
+STARTCHAR L
+ENCODING 76
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 18 26 3 0
+BITMAP
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+FFFFC0
+FFFFC0
+FFFFC0
+FFFFC0
+ENDCHAR
+STARTCHAR M
+ENCODING 77
+SWIDTH 833 0
+DWIDTH 29 0
+BBX 23 26 3 0
+BITMAP
+FE00FE
+FE00FE
+FF01FE
+FF01FE
+FF01FE
+FF01FE
+F783DE
+F783DE
+F783DE
+F3839E
+F3839E
+F3C79E
+F3C79E
+F1C71E
+F1C71E
+F1EF1E
+F1EF1E
+F0EE1E
+F0EE1E
+F0EE1E
+F0FE1E
+F07C1E
+F07C1E
+F07C1E
+F0381E
+F0381E
+ENDCHAR
+STARTCHAR N
+ENCODING 78
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 20 26 3 0
+BITMAP
+FC00F0
+FC00F0
+FE00F0
+FE00F0
+FF00F0
+FF00F0
+FF80F0
+F780F0
+F7C0F0
+F3C0F0
+F3E0F0
+F1E0F0
+F1F0F0
+F0F0F0
+F0F8F0
+F078F0
+F07CF0
+F03CF0
+F03EF0
+F01EF0
+F01FF0
+F00FF0
+F00FF0
+F007F0
+F007F0
+F003F0
+ENDCHAR
+STARTCHAR O
+ENCODING 79
+SWIDTH 777 0
+DWIDTH 28 0
+BBX 24 26 2 0
+BITMAP
+00FF00
+03FFC0
+0FFFF0
+1FFFF8
+3F81FC
+3F00FC
+7E007E
+7C003E
+FC003E
+F8001F
+F8001F
+F8001F
+F8001F
+F8001F
+F8001F
+F8001F
+F8001F
+FC003E
+7C003E
+7E007E
+3F00FC
+3F81FC
+1FFFF8
+0FFFF0
+03FFC0
+00FF00
+ENDCHAR
+STARTCHAR P
+ENCODING 80
+SWIDTH 666 0
+DWIDTH 24 0
+BBX 19 26 3 0
+BITMAP
+FFFC00
+FFFF00
+FFFF80
+FFFFC0
+F80FC0
+F807E0
+F803E0
+F803E0
+F803E0
+F803E0
+F807E0
+F80FC0
+FFFFC0
+FFFF80
+FFFF00
+FFFC00
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+ENDCHAR
+STARTCHAR Q
+ENCODING 81
+SWIDTH 777 0
+DWIDTH 28 0
+BBX 25 28 2 -2
+BITMAP
+00FF0000
+03FFC000
+0FFFF000
+1FFFF800
+3F81FC00
+3F00FC00
+7E007E00
+7C003E00
+FC003F00
+F8001F00
+F8001F00
+F8001F00
+F8001F00
+F8001F00
+F8001F00
+F8001F00
+F8001F00
+7C0C3E00
+7C0E3E00
+7E1FFE00
+3F0FFC00
+3F83F800
+1FFFFC00
+0FFFFF00
+03FFFF80
+00FF1F00
+00000F00
+00000200
+ENDCHAR
+STARTCHAR R
+ENCODING 82
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 23 26 3 0
+BITMAP
+FFFF00
+FFFFC0
+FFFFE0
+FFFFF0
+F803F8
+F801F8
+F800F8
+F800F8
+F800F8
+F801F8
+F803F0
+FFFFF0
+FFFFE0
+FFFF80
+FFFE00
+F87F00
+F81F80
+F80FC0
+F80FC0
+F807E0
+F803F0
+F803F0
+F801F8
+F800F8
+F800FC
+F8007E
+ENDCHAR
+STARTCHAR S
+ENCODING 83
+SWIDTH 666 0
+DWIDTH 24 0
+BBX 21 26 1 0
+BITMAP
+03FC00
+0FFF80
+1FFFC0
+3FFFE0
+3F07E0
+7C03F0
+7C01F0
+7C01F0
+7E0000
+7FC000
+3FF800
+1FFF00
+0FFFC0
+03FFE0
+007FF0
+0007F8
+0001F8
+3800F8
+F800F8
+FC00F8
+7E01F8
+7F03F0
+3FFFF0
+1FFFE0
+0FFF80
+03FE00
+ENDCHAR
+STARTCHAR T
+ENCODING 84
+SWIDTH 610 0
+DWIDTH 23 0
+BBX 21 26 1 0
+BITMAP
+FFFFF8
+FFFFF8
+FFFFF8
+FFFFF8
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+00F800
+ENDCHAR
+STARTCHAR U
+ENCODING 85
+SWIDTH 722 0
+DWIDTH 26 0
+BBX 20 26 3 0
+BITMAP
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+FC01F0
+7C03E0
+7F07E0
+3FFFE0
+3FFFC0
+0FFF00
+03FC00
+ENDCHAR
+STARTCHAR V
+ENCODING 86
+SWIDTH 666 0
+DWIDTH 24 0
+BBX 25 26 0 0
+BITMAP
+F8000F80
+7C001F00
+7C001F00
+7C003F00
+3E003E00
+3E003E00
+3E007E00
+1F007C00
+1F007C00
+0F80F800
+0F80F800
+0F80F800
+07C1F000
+07C1F000
+03C1F000
+03E3E000
+03E3E000
+01E3C000
+01F7C000
+01F7C000
+00F78000
+00FF8000
+007F0000
+007F0000
+007F0000
+003E0000
+ENDCHAR
+STARTCHAR W
+ENCODING 87
+SWIDTH 943 0
+DWIDTH 35 0
+BBX 35 26 0 0
+BITMAP
+F801F003E0
+F801F003E0
+7C03F807C0
+7C03F807C0
+7C03F807C0
+7C03F807C0
+3E07BC0F80
+3E07BC0F80
+3E07BC0F80
+3E0F1C0F80
+1E0F1E0F00
+1F0F1E1F00
+1F0E0E1F00
+1F1E0F1F00
+0F1E0F1E00
+0F9E0F3E00
+0FBC073E00
+0FBC07BE00
+07BC07BE00
+07B803BC00
+07F803FC00
+07F803FC00
+03F001FC00
+03F001F800
+03F001F800
+03F001F800
+ENDCHAR
+STARTCHAR X
+ENCODING 88
+SWIDTH 666 0
+DWIDTH 24 0
+BBX 22 26 1 0
+BITMAP
+7E01F8
+7E01F8
+3F03F0
+1F87E0
+1F87E0
+0FCFC0
+07CF80
+07FF80
+03FF00
+03FF00
+01FE00
+00FC00
+00FC00
+01FE00
+01FE00
+03FF00
+07FF80
+07FF80
+0FCFC0
+0F87C0
+1F87E0
+3F03F0
+3F03F0
+7E01F8
+FC00FC
+FC00FC
+ENDCHAR
+STARTCHAR Y
+ENCODING 89
+SWIDTH 666 0
+DWIDTH 23 0
+BBX 23 26 0 0
+BITMAP
+FC007E
+FC007E
+7E00FC
+3E00F8
+3F01F8
+1F01F0
+0F83E0
+0FC7E0
+07C7C0
+07EFC0
+03EF80
+01FF00
+01FF00
+00FE00
+007C00
+007C00
+007C00
+007C00
+007C00
+007C00
+007C00
+007C00
+007C00
+007C00
+007C00
+007C00
+ENDCHAR
+STARTCHAR Z
+ENCODING 90
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 21 26 0 0
+BITMAP
+3FFFF0
+3FFFF0
+3FFFF0
+3FFFF0
+0003F0
+0007E0
+000FC0
+000F80
+001F00
+003F00
+007E00
+00FC00
+00F800
+01F000
+03E000
+07E000
+0FC000
+0F8000
+1F0000
+3E0000
+7E0000
+FC0000
+FFFFF8
+FFFFF8
+FFFFF8
+FFFFF8
+ENDCHAR
+STARTCHAR bracketleft
+ENCODING 91
+SWIDTH 333 0
+DWIDTH 12 0
+BBX 9 33 3 -7
+BITMAP
+FF80
+FF80
+FF80
+FF80
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR backslash
+ENCODING 92
+SWIDTH 277 0
+DWIDTH 10 0
+BBX 10 26 0 0
+BITMAP
+F000
+F000
+7800
+7800
+7800
+7800
+7800
+3C00
+3C00
+3C00
+3C00
+1E00
+1E00
+1E00
+1E00
+0F00
+0F00
+0F00
+0F00
+0F00
+0780
+0780
+0780
+0780
+03C0
+03C0
+ENDCHAR
+STARTCHAR bracketright
+ENCODING 93
+SWIDTH 333 0
+DWIDTH 12 0
+BBX 9 33 0 -7
+BITMAP
+FF80
+FF80
+FF80
+FF80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+FF80
+FF80
+FF80
+FF80
+ENDCHAR
+STARTCHAR asciicircum
+ENCODING 94
+SWIDTH 583 0
+DWIDTH 21 0
+BBX 16 14 2 12
+BITMAP
+03C0
+03E0
+07E0
+07E0
+0FF0
+0FF0
+1FF8
+1E78
+3E7C
+3E7C
+3C3C
+7C3E
+7C3E
+F81F
+ENDCHAR
+STARTCHAR underscore
+ENCODING 95
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 21 4 -1 -7
+BITMAP
+FFFFF8
+FFFFF8
+FFFFF8
+FFFFF8
+ENDCHAR
+STARTCHAR grave
+ENCODING 96
+SWIDTH 333 0
+DWIDTH 12 0
+BBX 8 5 1 21
+BITMAP
+FC
+7C
+3E
+1E
+0F
+ENDCHAR
+STARTCHAR a
+ENCODING 97
+SWIDTH 556 0
+DWIDTH 21 0
+BBX 18 20 1 0
+BITMAP
+07F800
+1FFE00
+3FFF00
+3FFF80
+7C1F80
+180F80
+000F80
+003F80
+03FF80
+1FFF80
+7FCF80
+7C0F80
+F80F80
+F80F80
+F81F80
+FC3F80
+FFFF80
+7FFF80
+3FE780
+1F87C0
+ENDCHAR
+STARTCHAR b
+ENCODING 98
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 18 26 3 0
+BITMAP
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F8F800
+FBFE00
+FFFF00
+FFFF80
+FE1F80
+FC0F80
+FC0FC0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+FC0FC0
+FC0F80
+FE1F80
+FFFF00
+FFFF00
+F7FC00
+F1F800
+ENDCHAR
+STARTCHAR c
+ENCODING 99
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 18 20 1 0
+BITMAP
+03F800
+0FFE00
+1FFF00
+3FFF80
+7E1F80
+7C0FC0
+F80700
+F80000
+F80000
+F80000
+F80000
+F80000
+F80700
+FC07C0
+7C0FC0
+7E1F80
+3FFF80
+1FFF00
+0FFE00
+03F800
+ENDCHAR
+STARTCHAR d
+ENCODING 100
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 18 26 1 0
+BITMAP
+0007C0
+0007C0
+0007C0
+0007C0
+0007C0
+0007C0
+07C7C0
+1FF7C0
+3FFFC0
+7FFFC0
+7E1FC0
+7C0FC0
+FC0FC0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+FC0FC0
+7C0FC0
+7E1FC0
+3FFFC0
+3FFFC0
+0FFBC0
+07E3C0
+ENDCHAR
+STARTCHAR e
+ENCODING 101
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 18 20 1 0
+BITMAP
+03F000
+0FFC00
+1FFE00
+3FFF00
+7E1F80
+7C0F80
+F807C0
+F807C0
+FFFFC0
+FFFFC0
+FFFFC0
+F80000
+F80000
+FC0000
+7C0700
+7E0FC0
+3FFF80
+1FFF00
+0FFE00
+03F800
+ENDCHAR
+STARTCHAR f
+ENCODING 102
+SWIDTH 333 0
+DWIDTH 13 0
+BBX 13 26 1 0
+BITMAP
+03F0
+0FF8
+1FF8
+1FF8
+1F00
+1F00
+FFF0
+FFF0
+FFF0
+FFF0
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+ENDCHAR
+STARTCHAR g
+ENCODING 103
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 18 27 1 -7
+BITMAP
+07E3C0
+1FF3C0
+3FFBC0
+3FFFC0
+7E1FC0
+7C0FC0
+FC0FC0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+FC0FC0
+7C0FC0
+7E1FC0
+3FFFC0
+3FFFC0
+1FF7C0
+07E7C0
+0007C0
+7007C0
+7C0F80
+7FFF80
+3FFF00
+1FFE00
+07F800
+ENDCHAR
+STARTCHAR h
+ENCODING 104
+SWIDTH 610 0
+DWIDTH 21 0
+BBX 17 26 2 0
+BITMAP
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F8F800
+F9FE00
+FBFF00
+FFFF00
+FE1F80
+FC0F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+ENDCHAR
+STARTCHAR i
+ENCODING 105
+SWIDTH 277 0
+DWIDTH 9 0
+BBX 5 26 2 0
+BITMAP
+F8
+F8
+F8
+F8
+00
+00
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+ENDCHAR
+STARTCHAR j
+ENCODING 106
+SWIDTH 277 0
+DWIDTH 10 0
+BBX 9 33 -2 -7
+BITMAP
+0F80
+0F80
+0F80
+0F80
+0000
+0000
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+1F80
+FF80
+FF00
+FF00
+FC00
+ENDCHAR
+STARTCHAR k
+ENCODING 107
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 16 26 3 0
+BITMAP
+F800
+F800
+F800
+F800
+F800
+F800
+F83F
+F87E
+F87C
+F8FC
+F9F8
+F9F0
+FBE0
+FFC0
+FFC0
+FFE0
+FFF0
+FFF0
+FDF8
+F8F8
+F87C
+F87C
+F83E
+F83E
+F81F
+F81F
+ENDCHAR
+STARTCHAR l
+ENCODING 108
+SWIDTH 277 0
+DWIDTH 9 0
+BBX 5 26 2 0
+BITMAP
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+F8
+ENDCHAR
+STARTCHAR m
+ENCODING 109
+SWIDTH 889 0
+DWIDTH 33 0
+BBX 27 20 3 0
+BITMAP
+F1F81F00
+F7FC7F80
+FFFEFFC0
+FFFFFFE0
+FE3FC7E0
+FC1F83E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+F81F03E0
+ENDCHAR
+STARTCHAR n
+ENCODING 110
+SWIDTH 610 0
+DWIDTH 21 0
+BBX 17 20 2 0
+BITMAP
+F1F800
+F7FE00
+FFFF00
+FFFF00
+FE1F80
+FC0F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+ENDCHAR
+STARTCHAR o
+ENCODING 111
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 20 20 1 0
+BITMAP
+01F800
+0FFF00
+1FFF80
+3FFFC0
+7F0FE0
+7C03E0
+7C03E0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+F801F0
+FC03E0
+7C03E0
+7F0FC0
+3FFFC0
+1FFF80
+0FFE00
+01F800
+ENDCHAR
+STARTCHAR p
+ENCODING 112
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 18 27 3 -7
+BITMAP
+F1F800
+F7FC00
+FFFF00
+FFFF00
+FE1F80
+FC0F80
+FC0FC0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+FC0FC0
+FC0F80
+FE1F80
+FFFF00
+FFFF00
+FBFE00
+F8F800
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+F80000
+ENDCHAR
+STARTCHAR q
+ENCODING 113
+SWIDTH 610 0
+DWIDTH 22 0
+BBX 18 27 1 -7
+BITMAP
+07E3C0
+0FFBC0
+3FFFC0
+3FFFC0
+7E1FC0
+7C0FC0
+FC0FC0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+F807C0
+F80FC0
+7C0FC0
+7E1FC0
+3FFFC0
+3FFFC0
+1FF7C0
+07C7C0
+0007C0
+0007C0
+0007C0
+0007C0
+0007C0
+0007C0
+0007C0
+ENDCHAR
+STARTCHAR r
+ENCODING 114
+SWIDTH 389 0
+DWIDTH 14 0
+BBX 11 20 3 0
+BITMAP
+F3C0
+F7E0
+FFC0
+FFC0
+FFC0
+FC00
+FC00
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+F800
+ENDCHAR
+STARTCHAR s
+ENCODING 115
+SWIDTH 556 0
+DWIDTH 19 0
+BBX 17 20 1 0
+BITMAP
+07F000
+1FFC00
+3FFE00
+7E3F00
+7C1C00
+7C0000
+7E0000
+7FE000
+3FFC00
+1FFE00
+0FFF00
+01FF80
+001F80
+000F80
+380F80
+FC1F80
+7FFF00
+7FFE00
+1FFC00
+07F000
+ENDCHAR
+STARTCHAR t
+ENCODING 116
+SWIDTH 333 0
+DWIDTH 12 0
+BBX 11 26 1 0
+BITMAP
+0200
+0E00
+1E00
+3E00
+3E00
+3E00
+FFE0
+FFE0
+FFE0
+FFE0
+3E00
+3E00
+3E00
+3E00
+3E00
+3E00
+3E00
+3E00
+3E00
+3E00
+3E00
+3E00
+3FE0
+3FE0
+1FE0
+0FC0
+ENDCHAR
+STARTCHAR u
+ENCODING 117
+SWIDTH 610 0
+DWIDTH 21 0
+BBX 17 20 2 0
+BITMAP
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F80F80
+F81F80
+FC3F80
+7FFF80
+7FFF80
+3FF780
+0FC780
+ENDCHAR
+STARTCHAR v
+ENCODING 118
+SWIDTH 556 0
+DWIDTH 19 0
+BBX 17 20 1 0
+BITMAP
+F80F80
+F80F80
+F80F80
+780F00
+7C1F00
+7C1F00
+3C1E00
+3C1E00
+3E3E00
+1E3C00
+1E3C00
+0E3C00
+0F7800
+0F7800
+077800
+07F000
+07F000
+03E000
+03E000
+03E000
+ENDCHAR
+STARTCHAR w
+ENCODING 119
+SWIDTH 777 0
+DWIDTH 29 0
+BBX 29 20 0 0
+BITMAP
+F80F80F8
+F80F80F8
+7C0F81F0
+7C0F81F0
+7C1FC1F0
+3C1FC1E0
+3E1DC3E0
+3E3DE3E0
+1E3DE3C0
+1E3DE3C0
+1F38E7C0
+0F78F780
+0F78F780
+0F707780
+07F07F00
+07F07F00
+07E03F00
+03E03E00
+03E03E00
+03E03E00
+ENDCHAR
+STARTCHAR x
+ENCODING 120
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 18 20 1 0
+BITMAP
+7C0F80
+7E1F80
+3E1F00
+1F3E00
+1F7E00
+0FFC00
+0FFC00
+07F800
+03F000
+03F000
+03F000
+07F800
+0FFC00
+0FFC00
+1F3E00
+3F3F00
+3E1F00
+7C0F80
+FC0FC0
+F807C0
+ENDCHAR
+STARTCHAR y
+ENCODING 121
+SWIDTH 556 0
+DWIDTH 20 0
+BBX 19 27 1 -7
+BITMAP
+F803E0
+F803E0
+7C07C0
+7C07C0
+7C07C0
+3C0780
+3E0F80
+3E0F80
+1E0F00
+1F1F00
+0F1E00
+0F1E00
+0FBE00
+07BC00
+07BC00
+07FC00
+03F800
+03F800
+03F000
+01F000
+01F000
+03E000
+07E000
+7FE000
+7FC000
+7F8000
+7E0000
+ENDCHAR
+STARTCHAR z
+ENCODING 122
+SWIDTH 500 0
+DWIDTH 18 0
+BBX 16 20 1 0
+BITMAP
+7FFE
+7FFE
+7FFE
+7FFE
+003E
+007C
+00F8
+01F0
+03E0
+07E0
+07C0
+0F80
+1F00
+3E00
+7C00
+F800
+FFFF
+FFFF
+FFFF
+FFFF
+ENDCHAR
+STARTCHAR braceleft
+ENCODING 123
+SWIDTH 389 0
+DWIDTH 14 0
+BBX 12 33 1 -7
+BITMAP
+01F0
+03F0
+07F0
+0FF0
+0FF0
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+1F80
+3F00
+FF00
+FC00
+FC00
+FF00
+3F00
+1F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0F80
+0FF0
+0FF0
+07F0
+07F0
+01F0
+ENDCHAR
+STARTCHAR bar
+ENCODING 124
+SWIDTH 279 0
+DWIDTH 10 0
+BBX 4 34 3 -8
+BITMAP
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+F0
+ENDCHAR
+STARTCHAR braceright
+ENCODING 125
+SWIDTH 389 0
+DWIDTH 14 0
+BBX 12 33 1 -7
+BITMAP
+F800
+FC00
+FE00
+FF00
+FF00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+1F80
+0FC0
+07F0
+03F0
+03F0
+0FF0
+0FC0
+1F80
+1F00
+1F00
+1F00
+1F00
+1F00
+1F00
+3F00
+FF00
+FF00
+FE00
+FE00
+F800
+ENDCHAR
+STARTCHAR asciitilde
+ENCODING 126
+SWIDTH 583 0
+DWIDTH 21 0
+BBX 19 6 1 9
+BITMAP
+3F8020
+7FF0E0
+FFFFE0
+FFFFE0
+C0FFC0
+801F00
+ENDCHAR
+ENDFONT
diff --git a/ESP32_S2_Reverse_TFT_Digital_Clock/images/blanka-chan-charged.bmp b/ESP32_S2_Reverse_TFT_Digital_Clock/images/blanka-chan-charged.bmp
new file mode 100755
index 000000000..5d9557721
Binary files /dev/null and b/ESP32_S2_Reverse_TFT_Digital_Clock/images/blanka-chan-charged.bmp differ
diff --git a/ESP32_S2_Reverse_TFT_Digital_Clock/images/blanka-chan.bmp b/ESP32_S2_Reverse_TFT_Digital_Clock/images/blanka-chan.bmp
new file mode 100755
index 000000000..a65b31316
Binary files /dev/null and b/ESP32_S2_Reverse_TFT_Digital_Clock/images/blanka-chan.bmp differ
diff --git a/ESP32_S2_Reverse_TFT_Digital_Clock/settings.toml b/ESP32_S2_Reverse_TFT_Digital_Clock/settings.toml
new file mode 100755
index 000000000..23e207733
--- /dev/null
+++ b/ESP32_S2_Reverse_TFT_Digital_Clock/settings.toml
@@ -0,0 +1,13 @@
+# To auto-connect to WiFi
+CIRCUITPY_WIFI_SSID="YOUR-WIFI-NETWORK-NAME"
+CIRCUITPY_WIFI_PASSWORD="YOUR-WIFI-NETWORK-PASSWORD"
+
+# Current location
+TIMEZONE="YOUR-COUNTRY/YOUR-STATE"
+# example: "America/New_York"
+
+# To enable modifying files from the web. Change this too!
+# Leave the User field blank in the browser.
+CIRCUITPY_WEB_API_PASSWORD="passw0rd"
+
+CIRCUITPY_WEB_API_PORT=80
diff --git a/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/code.py b/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/code.py
index d20135e84..fd13d18f8 100644
--- a/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/code.py
+++ b/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/code.py
@@ -2,6 +2,7 @@
#
# SPDX-License-Identifier: MIT
+import os
import ipaddress
import ssl
import wifi
@@ -13,41 +14,44 @@
JSON_QUOTES_URL = "https://www.adafruit.com/api/quotes.php"
JSON_STARS_URL = "https://api.github.com/repos/adafruit/circuitpython"
-# Get wifi details and more from a secrets.py file
-try:
- from secrets import secrets
-except ImportError:
- print("WiFi secrets are kept in secrets.py, please add them there!")
- raise
-
print("ESP32-S2 WebClient Test")
-print("My MAC addr:", [hex(i) for i in wifi.radio.mac_address])
+print(f"My MAC address: {[hex(i) for i in wifi.radio.mac_address]}")
print("Available WiFi networks:")
for network in wifi.radio.start_scanning_networks():
print("\t%s\t\tRSSI: %d\tChannel: %d" % (str(network.ssid, "utf-8"),
- network.rssi, network.channel))
+ network.rssi, network.channel))
wifi.radio.stop_scanning_networks()
-print("Connecting to %s"%secrets["ssid"])
-wifi.radio.connect(secrets["ssid"], secrets["password"])
-print("Connected to %s!"%secrets["ssid"])
-print("My IP address is", wifi.radio.ipv4_address)
+print(f"Connecting to {os.getenv('CIRCUITPY_WIFI_SSID')}")
+wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
+print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
+print(f"My IP address: {wifi.radio.ipv4_address}")
+
+ping_ip = ipaddress.IPv4Address("8.8.8.8")
+ping = wifi.radio.ping(ip=ping_ip)
+
+# retry once if timed out
+if ping is None:
+ ping = wifi.radio.ping(ip=ping_ip)
-ipv4 = ipaddress.ip_address("8.8.4.4")
-print("Ping google.com: %f ms" % (wifi.radio.ping(ipv4)*1000))
+if ping is None:
+ print("Couldn't ping 'google.com' successfully")
+else:
+ # convert s to ms
+ print(f"Pinging 'google.com' took: {ping * 1000} ms")
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
-print("Fetching text from", TEXT_URL)
+print(f"Fetching text from {TEXT_URL}")
response = requests.get(TEXT_URL)
print("-" * 40)
print(response.text)
print("-" * 40)
-print("Fetching json from", JSON_QUOTES_URL)
+print(f"Fetching json from {JSON_QUOTES_URL}")
response = requests.get(JSON_QUOTES_URL)
print("-" * 40)
print(response.json())
@@ -55,10 +59,10 @@
print()
-print("Fetching and parsing json from", JSON_STARS_URL)
+print(f"Fetching and parsing json from {JSON_STARS_URL}")
response = requests.get(JSON_STARS_URL)
print("-" * 40)
-print("CircuitPython GitHub Stars", response.json()["stargazers_count"])
+print(f"CircuitPython GitHub Stars: {response.json()['stargazers_count']}")
print("-" * 40)
-print("done")
+print("Done")
diff --git a/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/secrets.py b/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/secrets.py
deleted file mode 100644
index 291581d25..000000000
--- a/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/secrets.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: 2020 Adafruit Industries
-#
-# SPDX-License-Identifier: Unlicense
-
-# This file is where you keep secret settings, passwords, and tokens!
-# If you put them in the code you risk committing that info or sharing it
-
-secrets = {
- 'ssid' : 'home_wifi_network',
- 'password' : 'wifi_password',
- 'aio_username' : 'my_adafruit_io_username',
- 'aio_key' : 'my_adafruit_io_key',
- 'timezone' : "America/New_York", # http://worldtimeapi.org/timezones
- }
diff --git a/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/settings.toml b/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/settings.toml
new file mode 100644
index 000000000..5352263a0
--- /dev/null
+++ b/ESP32_S2_WiFi_Tests/CPy_Native_WiFi_Test/settings.toml
@@ -0,0 +1,9 @@
+# SPDX-FileCopyrightText: 2023 Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# This is where you store the credentials necessary for your code.
+# The associated demo only requires WiFi, but you can include any
+# credentials here, such as Adafruit IO username and key, etc.
+CIRCUITPY_WIFI_SSID = "your-wifi-ssid"
+CIRCUITPY_WIFI_PASSWORD = "your-wifi-password"
\ No newline at end of file
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.esp8266.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.esp8266.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.gemma.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.gemma.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.gemma_m0.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.gemma_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.neokeytrinkey_m0.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.neokeytrinkey_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.proxlighttrinkey_m0.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.proxlighttrinkey_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.rotarytrinkey_m0.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.rotarytrinkey_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.slidetrinkey_m0.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.slidetrinkey_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/.trinket_5v.test.skip b/EYESPI/Arduino/Color/EYESPI_Test/.trinket_5v.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI/Arduino/Color/EYESPI_Test/EYESPI_Test.ino b/EYESPI/Arduino/Color/EYESPI_Test/EYESPI_Test.ino
new file mode 100644
index 000000000..c5e140903
--- /dev/null
+++ b/EYESPI/Arduino/Color/EYESPI_Test/EYESPI_Test.ino
@@ -0,0 +1,674 @@
+// SPDX-FileCopyrightText: 2022 Phillip Burgess for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// Graphics example for EYESPI-capable color displays. This code:
+// - Functions as a "Hello World" to verify that microcontroller and screen
+// are communicating.
+// - Demonstrates most of the drawing commands of the Adafruit_GFX library.
+// - Showcases some techniques that might not be obvious or that aren't
+// built-in but can be handled with a little extra code.
+// It DOES NOT:
+// - Support all Adafruit screens, ONLY EYESPI products at the time this was
+// written! But it's easily adapted by looking at other examples.
+// - Demonstrate the Adafruit_GFX_Button class, as that's unique to
+// touch-capable displays. Again, other examples may cover this topic.
+// This sketch is long, but a lot of it is comments to explain each step. You
+// can copy just the parts you need as a starting point for your own projects,
+// and strip comments once understood.
+
+// CONSTANTS, HEADERS and GLOBAL VARIABLES ---------------------------------
+
+// *** EDIT THIS VALUE TO MATCH THE ADAFRUIT PRODUCT ID FOR YOUR DISPLAY: ***
+#define SCREEN_PRODUCT_ID 5393
+// You can find the product ID several ways:
+// - "PID" accompanies each line-item on your receipt or order details page.
+// - Visit adafruit.com and search for EYESPI displays. On product pages,
+// PID is shown just below product title, and is at the end of URLs.
+// - Check the comments in setup() later that reference various screens.
+
+// **** EDIT PINS TO MATCH YOUR WIRING ****
+#define TFT_CS 10 // To display chip-select pin
+#define TFT_RST 9 // To display reset pin
+#define TFT_DC 8 // To display data/command pin
+// For the remaining pins, this code assumes display is wired to hardware SPI
+// on the dev board's primary SPI interface. The display libraries can support
+// secondary SPI (if present) or bitbang (software) SPI, but that's not
+// demonstrated here. See other examples for more varied interfacing options.
+
+#include // Core graphics library
+#include // A custom font
+#if (SCREEN_PRODUCT_ID == 1480) || (SCREEN_PRODUCT_ID == 2090)
+#include // Library for ILI9341-based screens
+Adafruit_ILI9341 display(TFT_CS, TFT_DC, TFT_RST);
+#else
+#include // Library for ST7789-based screens
+Adafruit_ST7789 display(TFT_CS, TFT_DC, TFT_RST);
+#endif
+
+#define PAUSE 3000 // Delay (millisecondss) between examples
+uint8_t rotate = 0; // Current screen orientation (0-3)
+
+// setup() RUNS ONCE AT PROGRAM STARTUP ------------------------------------
+
+void setup() {
+ // Initialize display hardware
+#if (SCREEN_PRODUCT_ID == 5393) // 1.47" 320x172 round-rect TFT
+#define CORNER_RADIUS 22
+ display.init(172, 320);
+#elif (SCREEN_PRODUCT_ID == 3787) // 1.54" 240x240 TFT
+ display.init(240, 240);
+#elif (SCREEN_PRODUCT_ID == 5206) // 1.69" 280x240 round-rect TFT
+#define CORNER_RADIUS 43
+ display.init(240, 280);
+#elif (SCREEN_PRODUCT_ID == 5394) // 1.9" 320x170 TFT
+ display.init(170, 320);
+#else // All ILI9341 TFTs (320x240)
+ display.begin();
+#endif
+#if !defined(CORNER_RADIUS)
+#define CORNER_RADIUS 0
+#endif
+
+ // OPTIONAL: default TFT SPI speed is fairly conservative, you can try
+ // overriding here for faster screen updates. Actual SPI speed may be less
+ // depending on microcontroller's capabilities. Max reliable speed also
+ // depends on wiring length and tidyness.
+ //display.setSPISpeed(40000000);
+}
+
+// MAIN LOOP, REPEATS FOREVER ----------------------------------------------
+
+void loop() {
+ // Each of these functions demonstrates a different Adafruit_GFX concept:
+ show_shapes();
+ show_charts();
+ show_basic_text();
+ show_char_map();
+ show_custom_text();
+ show_bitmap();
+#if !defined(AVR)
+ // The full set of examples (plus the custom font) won't fit on an 8-bit
+ // Arduino, something's got to go. You can try out this one IF the other
+ // examples are disabled instead.
+ show_canvas();
+#endif
+
+ if (++rotate > 3) rotate = 0; // Cycle through screen rotations 0-3
+ display.setRotation(rotate); // Takes effect on next drawing command
+}
+
+// BASIC SHAPES EXAMPLE ----------------------------------------------------
+
+void show_shapes() {
+ // Draw outlined and filled shapes. This demonstrates:
+ // - Enclosed shapes supported by GFX (points & lines are shown later).
+ // - Adapting to different-sized displays, and to rounded corners.
+
+ const int16_t cx = display.width() / 2; // Center of screen =
+ const int16_t cy = display.height() / 2; // half of width, height
+ int16_t minor = min(cx, cy); // Lesser of half width or height
+ // Shapes will be drawn in a square region centered on the screen. But one
+ // particular screen -- rounded 240x280 ST7789 -- has VERY rounded corners
+ // that would clip a couple of shapes if drawn full size. If using that
+ // screen type, reduce area by a few pixels to avoid drawing in corners.
+ if (CORNER_RADIUS > 40) minor -= 4;
+ const uint8_t pad = 5; // Space between shapes is 2X this
+ const int16_t size = minor - pad; // Shapes are this width & height
+ const int16_t half = size / 2; // 1/2 of shape size
+
+ display.fillScreen(0); // Start by clearing the screen; color 0 = black
+
+ // Draw outline version of basic shapes: rectangle, triangle, circle and
+ // rounded rectangle in different colors. Rather than hardcoded numbers
+ // for position and size, some arithmetic helps adapt to screen dimensions.
+ display.drawRect(cx - minor, cy - minor, size, size, 0xF800);
+ display.drawTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, 0x07E0);
+ display.drawCircle(cx - pad - half, cy + pad + half, half, 0x001F);
+ display.drawRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
+ delay(PAUSE);
+
+ // Draw same shapes, same positions, but filled this time.
+ display.fillRect(cx - minor, cy - minor, size, size, 0xF800);
+ display.fillTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, 0x07E0);
+ display.fillCircle(cx - pad - half, cy + pad + half, half, 0x001F);
+ display.fillRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
+ delay(PAUSE);
+} // END SHAPE EXAMPLE
+
+// CHART EXAMPLES ----------------------------------------------------------
+
+void show_charts() {
+ // Draw some graphs and charts. GFX library doesn't handle these as native
+ // object types, but it only takes a little code to build them from simple
+ // shapes. This demonstrates:
+ // - Drawing points and horizontal, vertical and arbitrary lines.
+ // - Adapting to different-sized displays.
+ // - Graphics being clipped off edge.
+ // - Use of negative values to draw shapes "backward" from an anchor point.
+ // - C technique for finding array size at runtime (vs hardcoding).
+
+ display.fillScreen(0); // Clear screen
+
+ const int16_t cx = display.width() / 2; // Center of screen =
+ const int16_t cy = display.height() / 2; // half of width, height
+ const int16_t minor = min(cx, cy); // Lesser of half width or height
+ const int16_t major = max(cx, cy); // Greater of half width or height
+
+ // Let's start with a relatively simple sine wave graph with axes.
+ // Draw graph axes centered on screen. drawFastHLine() and drawFastVLine()
+ // need fewer arguments than normal 2-point line drawing shown later.
+ display.drawFastHLine(0, cy, display.width(), 0x0210); // Dark blue
+ display.drawFastVLine(cx, 0, display.height(), 0x0210);
+
+ // Then draw some tick marks along the axes. To keep this code simple,
+ // these aren't to any particular scale, but a real program may want that.
+ // The loop here draws them from the center outward and pays no mind
+ // whether the screen is rectangular; any ticks that go off-screen will
+ // be clipped by the library.
+ for (uint8_t i=1; i<=10; i++) {
+ // The Arduino map() function scales an input value (e.g. "i") from an
+ // input range (0-10 here) to an output range (0 to major-1 here).
+ // Very handy for making graphics adjust to different screens!
+ int16_t n = map(i, 0, 10, 0, major - 1); // Tick offset relative to center point
+ display.drawFastVLine(cx - n, cy - 5, 11, 0x210);
+ display.drawFastVLine(cx + n, cy - 5, 11, 0x210);
+ display.drawFastHLine(cx - 5, cy - n, 11, 0x210);
+ display.drawFastHLine(cx - 5, cy + n, 11, 0x210);
+ }
+
+ // Then draw sine wave over this using GFX drawPixel() function.
+ for (int16_t x=0; x(str.c_str()));
+}
+
+// TEXT EXAMPLES -----------------------------------------------------------
+
+// This section demonstrates:
+// - Using the default 5x7 built-in font, including scaling in each axis.
+// - How to access all characters of this font, including symbols.
+// - Using a custom font, including alignment techniques that aren't a normal
+// part of the GFX library (uses functions above).
+
+void show_basic_text() {
+ // Show text scaling with built-in font.
+ display.fillScreen(0);
+ display.setFont(); // Use default font
+ display.setCursor(0, CORNER_RADIUS); // Initial cursor position
+ display.setTextSize(1); // Default size
+ display.println(F("Standard built-in font"));
+ display.setTextSize(2);
+ display.println(F("BIG TEXT"));
+ display.setTextSize(3);
+ // "BIGGER TEXT" won't fit on narrow screens, so abbreviate there.
+ display.println((display.width() >= 200) ? F("BIGGER TEXT") : F("BIGGER"));
+ display.setTextSize(2, 4);
+ display.println(F("TALL and"));
+ display.setTextSize(4, 2);
+ display.println(F("WIDE"));
+
+ delay(PAUSE);
+} // END BASIC TEXT EXAMPLE
+
+void show_char_map() {
+ // "Code Page 437" is a name given to the original IBM PC character set.
+ // Despite age and limited language support, still seen in small embedded
+ // settings as it has some useful symbols and accented characters. The
+ // default 5x7 pixel font of Adafruit_GFX is modeled after CP437. This
+ // function draws a table of all the characters & explains some issues.
+
+ // There are 256 characters in all. Draw table as 16 rows of 16 columns,
+ // plus hexadecimal row & column labels. How big can each cell be drawn?
+ const int cell_size = min(display.width(), display.height()) / 17;
+ if (cell_size < 8) return; // Screen is too small for table, skip example.
+ const int total_size = cell_size * 17; // 16 cells + 1 row or column label
+
+ // Set up for default 5x7 font at 1:1 scale. Custom fonts are NOT used
+ // here as most are only 128 characters to save space (the "7b" at the
+ // end of many GFX font names means "7 bits," i.e. 128 characters).
+ display.setFont();
+ display.setTextSize(1);
+
+ // Early Adafruit_GFX was missing one symbol, throwing off some indices!
+ // But fixing the library would break MANY existing sketches that relied
+ // on the degrees symbol and others. The default behavior is thus "broken"
+ // to keep older code working. New code can access the CORRECT full CP437
+ // table by calling this function like so:
+ display.cp437(true);
+
+ display.fillScreen(0);
+
+ const int16_t x = (display.width() - total_size) / 2; // Upper left corner of
+ int16_t y = (display.height() - total_size) / 2; // table centered on screen
+ if (y >= 4) { // If there's a little extra space above & below, scoot table
+ y += 4; // down a few pixels and show a message centered at top.
+ display.setCursor((display.width() - 114) / 2, 0); // 114 = pixel width
+ display.print(F("CP437 Character Map")); // of this message
+ }
+
+ const int16_t inset_x = (cell_size - 5) / 2; // To center each character within cell,
+ const int16_t inset_y = (cell_size - 8) / 2; // compute X & Y offset from corner.
+
+ for (uint8_t row=0; row<16; row++) { // 16 down...
+ // Draw row and columm headings as hexadecimal single digits. To get the
+ // hex value for a specific character, combine the left & top labels,
+ // e.g. Pi symbol is row E, column 3, thus: display.print((char)0xE3);
+ display.setCursor(x + (row + 1) * cell_size + inset_x, y + inset_y);
+ display.print(row, HEX); // This actually draws column labels
+ display.setCursor(x + inset_x, y + (row + 1) * cell_size + inset_y);
+ display.print(row, HEX); // and THIS is the row labels
+ for (uint8_t col=0; col<16; col++) { // 16 across...
+ if ((row + col) & 1) { // Fill alternating cells w/gray
+ display.fillRect(x + (col + 1) * cell_size, y + (row + 1) * cell_size,
+ cell_size, cell_size, 0x630C);
+ }
+ // drawChar() bypasses usual cursor positioning to go direct to an X/Y
+ // location. If foreground & background match, it's drawn transparent.
+ display.drawChar(x + (col + 1) * cell_size + inset_x,
+ y + (row + 1) * cell_size + inset_y, row * 16 + col,
+ 0xFFFF, 0xFFFF, 1);
+ }
+ }
+
+ delay(PAUSE * 2);
+} // END CHAR MAP EXAMPLE
+
+void show_custom_text() {
+ // Show use of custom fonts, plus how to do center or right alignment
+ // using some additional functions provided earlier.
+
+ display.fillScreen(0);
+ display.setFont(&FreeSansBold18pt7b);
+ display.setTextSize(1);
+ display.setTextWrap(false); // Allow text off edges
+
+ // Get "M height" of custom font and move initial base line there:
+ uint16_t w, h;
+ int16_t x, y;
+ display.getTextBounds("M", 0, 0, &x, &y, &w, &h);
+ // On rounded 240x280 display in tall orientation, "Custom Font" gets
+ // clipped by top corners. Scoot text down a few pixels in that one case.
+ if (CORNER_RADIUS && (display.height() == 280)) h += 20;
+ display.setCursor(display.width() / 2, h);
+
+ if (display.width() >= 200) {
+ print_aligned(display, F("Custom Font"), GFX_ALIGN_CENTER);
+ display.setCursor(0, display.getCursorY() + 10);
+ print_aligned(display, F("Align Left"), GFX_ALIGN_LEFT);
+ display.setCursor(display.width() / 2, display.getCursorY());
+ print_aligned(display, F("Centered"), GFX_ALIGN_CENTER);
+ // Small rounded screen, when oriented the wide way, "Right" gets
+ // clipped by bottom right corner. Scoot left to compensate.
+ int16_t x_offset = (CORNER_RADIUS && (display.height() < 200)) ? 15 : 0;
+ display.setCursor(display.width() - x_offset, display.getCursorY());
+ print_aligned(display, F("Align Right"), GFX_ALIGN_RIGHT);
+ } else {
+ // On narrow screens, use abbreviated messages
+ print_aligned(display, F("Font &"), GFX_ALIGN_CENTER);
+ print_aligned(display, F("Align"), GFX_ALIGN_CENTER);
+ display.setCursor(0, display.getCursorY() + 10);
+ print_aligned(display, F("Left"), GFX_ALIGN_LEFT);
+ display.setCursor(display.width() / 2, display.getCursorY());
+ print_aligned(display, F("Center"), GFX_ALIGN_CENTER);
+ display.setCursor(display.width(), display.getCursorY());
+ print_aligned(display, F("Right"), GFX_ALIGN_RIGHT);
+ }
+
+ delay(PAUSE);
+} // END CUSTOM FONT EXAMPLE
+
+// BITMAP EXAMPLE ----------------------------------------------------------
+
+// This section demonstrates:
+// - Embedding a small bitmap in the code (flash memory).
+// - Drawing that bitmap in various colors, and transparently (only '1' bits
+// are drawn; '0' bits are skipped, leaving screen contents in place).
+// - Use of the color565() function to decimate 24-bit RGB to 16 bits.
+
+#define HEX_WIDTH 16 // Bitmap width in pixels
+#define HEX_HEIGHT 16 // Bitmap height in pixels
+// Bitmap data. PROGMEM ensures it's in flash memory (not RAM). And while
+// it would be valid to leave the brackets empty here (i.e. hex_bitmap[]),
+// having dimensions with a little math makes the compiler verify the
+// correct number of bytes are present in the list.
+PROGMEM const uint8_t hex_bitmap[(HEX_WIDTH + 7) / 8 * HEX_HEIGHT] = {
+ 0b00000001, 0b10000000,
+ 0b00000111, 0b11100000,
+ 0b00011111, 0b11111000,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b00011111, 0b11111000,
+ 0b00000111, 0b11100000,
+ 0b00000001, 0b10000000,
+};
+#define Y_SPACING (HEX_HEIGHT - 2) // Used by code below for positioning
+
+void show_bitmap() {
+ display.fillScreen(0);
+
+ // Not screen center, but UL coordinates of center hexagon bitmap
+ const int16_t center_x = (display.width() - HEX_WIDTH) / 2;
+ const int16_t center_y = (display.height() - HEX_HEIGHT) / 2;
+ const uint8_t steps = min((display.height() - HEX_HEIGHT) / Y_SPACING,
+ display.width() / HEX_WIDTH - 1) / 2;
+
+ display.drawBitmap(center_x, center_y, hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ 0xFFFF); // Draw center hexagon in white
+
+ // Tile the hexagon bitmap repeatedly in a range of hues. Don't mind the
+ // bit of repetition in the math, the optimizer easily picks this up.
+ // Also, if math looks odd, keep in mind "PEMDAS" operator precedence;
+ // multiplication and division occur before addition and subtraction.
+ for (uint8_t a=0; a<=steps; a++) {
+ for (uint8_t b=1; b<=steps; b++) {
+ display.drawBitmap( // Right section centered red: a = green, b = blue
+ center_x + (a + b) * HEX_WIDTH / 2,
+ center_y + (a - b) * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255, 255 - 255 * a / steps, 255 - 255 * b / steps));
+ display.drawBitmap( // UL section centered green: a = blue, b = red
+ center_x - b * HEX_WIDTH + a * HEX_WIDTH / 2,
+ center_y - a * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255 - 255 * b / steps, 255, 255 - 255 * a / steps));
+ display.drawBitmap( // LL section centered blue: a = red, b = green
+ center_x - a * HEX_WIDTH + b * HEX_WIDTH / 2,
+ center_y + b * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255 - 255 * a / steps, 255 - 255 * b / steps, 255));
+ }
+ }
+
+ delay(PAUSE);
+} // END BITMAP EXAMPLE
+
+// CANVAS EXAMPLE ----------------------------------------------------------
+
+// This section demonstrates:
+// - How to refresh changing values onscreen without erase/redraw flicker.
+// - Using an offscreen canvas. It's similar to a bitmap above, but rather
+// than a fixed pattern in flash memory, it's drawable like the screen.
+// - More tips on text alignment, and adapting to different screen sizes.
+
+#define PADDING 6 // Pixels between axis label and value
+
+void show_canvas() {
+ // For this example, let's suppose we want to display live readings from a
+ // sensor such as a three-axis accelerometer, something like:
+ // X: (number)
+ // Y: (number)
+ // Z: (number)
+ // To look extra classy, we want a custom font, and the labels for each
+ // axis are right-aligned so the ':' characters line up...
+
+ display.setFont(&FreeSansBold18pt7b); // Use a custom font
+ display.setTextSize(1); // and reset to 1:1 scale
+
+ const char *label[] = { "X:", "Y:", "Z:" }; // Labels for each axis
+ const uint16_t color[] = { 0xF800, 0x07E0, 0x001F }; // Colors for each value
+
+ // To get the labels right-aligned, one option would be simple trial and
+ // error to find a column that looks good and doesn't clip anything off.
+ // Let's do this dynamically though, so it adapts to any font or labels!
+ // Start by finding the widest of the label strings:
+ uint16_t w, h, max_w = 0;
+ int16_t x, y;
+ for (uint8_t i=0; i<3; i++) { // For each label...
+ display.getTextBounds(label[i], 0, 0, &x, &y, &w, &h);
+ if (w > max_w) max_w = w; // Keep track of widest label
+ }
+
+ // Rounded corners throwing us a curve again. If needed, scoot everything
+ // to the right a bit on wide displays, down a bit on tall ones.
+ int16_t y_offset = 0;
+ if (display.width() > display.height()) max_w += CORNER_RADIUS;
+ else y_offset = CORNER_RADIUS;
+
+ // Now we have max_w for right-aligning the labels. Before we draw them
+ // though...in order to perform flicker-free updates, the numbers we show
+ // will be rendered in either a GFXcanvas1 or GFXcanvas16 object; a 1-bit
+ // or 16-bit offscreen bitmap, RAM permitting. The correct size for this
+ // canvas could also be trial-and-errored, but again let's make this adapt
+ // automatically. The width of the canvas will span from max_w (plus a few
+ // pixels for padding) to the right edge. But the height? Looking at an
+ // uppercase 'M' can work in many situations, but some fonts have ascenders
+ // and descenders on digits, and in some locales a comma (extending below
+ // the baseline) is the decimal separator. Feed ALL the numeric chars into
+ // getTextBounds() for a cumulative height:
+ display.setTextWrap(false); // Keep on one line
+ display.getTextBounds(F("0123456789.,-"), 0, 0, &x, &y, &w, &h);
+
+ // Now declare a GFXcanvas16 object based on the computed width & height:
+ GFXcanvas16 canvas16(display.width() - max_w - PADDING, h);
+
+ // Small devices (e.g. ATmega328p) will almost certainly lack enough RAM
+ // for the canvas. Check if canvas buffer exists. If not, fall back on
+ // using a 1-bit (rather than 16-bit) canvas. Much more RAM friendly, but
+ // not as fast to draw. If a project doesn't require super interactive
+ // updates, consider just going straight for the more compact Canvas1.
+ if (canvas16.getBuffer()) {
+ // If here, 16-bit canvas allocated successfully! Point of interest,
+ // only one canvas is needed for this example, we can reuse it for all
+ // three numbers because the regions are the same size.
+
+ // display and canvas are independent drawable objects; must explicitly
+ // set the same custom font to use on the canvas now:
+ canvas16.setFont(&FreeSansBold18pt7b);
+
+ // Clear display and print labels. Once drawn, these remain untouched.
+ display.fillScreen(0);
+ display.setCursor(max_w, -y + y_offset); // Set baseline for first row
+ for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
+
+ // Last part now is to print numbers on the canvas and copy the canvas to
+ // the display, repeating for several seconds...
+ uint32_t elapsed, startTime = millis();
+ while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
+ for (uint8_t i=0; i<3; i++) { // For each label...
+ canvas16.fillScreen(0); // fillScreen() in this case clears canvas
+ canvas16.setCursor(0, -y); // Reset baseline for custom font
+ canvas16.setTextColor(color[i]);
+ // These aren't real accelerometer readings, just cool-looking numbers.
+ // Notice we print to the canvas, NOT the display:
+ canvas16.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
+ // And HERE is the secret sauce to flicker-free updates. Canvas details
+ // can be passed to the drawRGBBitmap() function, which fully overwrites
+ // prior screen contents in that area. yAdvance is font line spacing.
+ display.drawRGBBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
+ y_offset, canvas16.getBuffer(), canvas16.width(),
+ canvas16.height());
+ }
+ }
+ } else {
+ // Insufficient RAM for Canvas16. Try declaring a 1-bit canvas instead...
+ GFXcanvas1 canvas1(display.width() - max_w - PADDING, h);
+ // If even this smaller object fails, can't proceed, cancel this example.
+ if (!canvas1.getBuffer()) return;
+
+ // Remainder here is nearly identical to the code above, simply using a
+ // different canvas type. It's stripped of most comments for brevity.
+ canvas1.setFont(&FreeSansBold18pt7b);
+ display.fillScreen(0);
+ display.setCursor(max_w, -y + y_offset);
+ for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
+ uint32_t elapsed, startTime = millis();
+ while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
+ for (uint8_t i=0; i<3; i++) {
+ canvas1.fillScreen(0);
+ canvas1.setCursor(0, -y);
+ canvas1.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
+ // Here's the secret sauce to flicker-free updates with GFXcanvas1.
+ // Canvas details can be passed to the drawBitmap() function, and by
+ // specifying both a foreground AND BACKGROUND color (0), this will fully
+ // overwrite/erase prior screen contents in that area (vs transparent).
+ display.drawBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
+ y_offset, canvas1.getBuffer(), canvas1.width(),
+ canvas1.height(), color[i], 0);
+ }
+ }
+ }
+
+ // Because canvas object was declared locally to this function, it's freed
+ // automatically when the function returns; no explicit delete needed.
+} // END CANVAS EXAMPLE
\ No newline at end of file
diff --git a/EYESPI_BFF/Arduino_EYESPI_BFF/Arduino_EYESPI_BFF_Example/.none.test.only b/EYESPI_BFF/Arduino_EYESPI_BFF/Arduino_EYESPI_BFF_Example/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/EYESPI_BFF/Arduino_EYESPI_BFF/Arduino_EYESPI_BFF_Example/Arduino_EYESPI_BFF_Example.ino b/EYESPI_BFF/Arduino_EYESPI_BFF/Arduino_EYESPI_BFF_Example/Arduino_EYESPI_BFF_Example.ino
new file mode 100644
index 000000000..de7bcfcde
--- /dev/null
+++ b/EYESPI_BFF/Arduino_EYESPI_BFF/Arduino_EYESPI_BFF_Example/Arduino_EYESPI_BFF_Example.ino
@@ -0,0 +1,674 @@
+// SPDX-FileCopyrightText: 2022 Phillip Burgess for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// Graphics example for EYESPI-capable color displays. This code:
+// - Functions as a "Hello World" to verify that microcontroller and screen
+// are communicating.
+// - Demonstrates most of the drawing commands of the Adafruit_GFX library.
+// - Showcases some techniques that might not be obvious or that aren't
+// built-in but can be handled with a little extra code.
+// It DOES NOT:
+// - Support all Adafruit screens, ONLY EYESPI products at the time this was
+// written! But it's easily adapted by looking at other examples.
+// - Demonstrate the Adafruit_GFX_Button class, as that's unique to
+// touch-capable displays. Again, other examples may cover this topic.
+// This sketch is long, but a lot of it is comments to explain each step. You
+// can copy just the parts you need as a starting point for your own projects,
+// and strip comments once understood.
+
+// CONSTANTS, HEADERS and GLOBAL VARIABLES ---------------------------------
+
+// *** EDIT THIS VALUE TO MATCH THE ADAFRUIT PRODUCT ID FOR YOUR DISPLAY: ***
+#define SCREEN_PRODUCT_ID 3787
+// You can find the product ID several ways:
+// - "PID" accompanies each line-item on your receipt or order details page.
+// - Visit adafruit.com and search for EYESPI displays. On product pages,
+// PID is shown just below product title, and is at the end of URLs.
+// - Check the comments in setup() later that reference various screens.
+
+// **** EDIT PINS TO MATCH YOUR WIRING ****
+#define TFT_CS PIN_SERIAL2_TX // To display chip-select pin
+#define TFT_RST -1 // To display reset pin
+#define TFT_DC PIN_SERIAL2_RX // To display data/command pin
+// For the remaining pins, this code assumes display is wired to hardware SPI
+// on the dev board's primary SPI interface. The display libraries can support
+// secondary SPI (if present) or bitbang (software) SPI, but that's not
+// demonstrated here. See other examples for more varied interfacing options.
+
+#include // Core graphics library
+#include // A custom font
+#if (SCREEN_PRODUCT_ID == 1480) || (SCREEN_PRODUCT_ID == 2090)
+#include // Library for ILI9341-based screens
+Adafruit_ILI9341 display(TFT_CS, TFT_DC, TFT_RST);
+#else
+#include // Library for ST7789-based screens
+Adafruit_ST7789 display(TFT_CS, TFT_DC, TFT_RST);
+#endif
+
+#define PAUSE 3000 // Delay (millisecondss) between examples
+uint8_t rotate = 0; // Current screen orientation (0-3)
+
+// setup() RUNS ONCE AT PROGRAM STARTUP ------------------------------------
+
+void setup() {
+ // Initialize display hardware
+#if (SCREEN_PRODUCT_ID == 5393) // 1.47" 320x172 round-rect TFT
+#define CORNER_RADIUS 22
+ display.init(172, 320);
+#elif (SCREEN_PRODUCT_ID == 3787) // 1.54" 240x240 TFT
+ display.init(240, 240);
+#elif (SCREEN_PRODUCT_ID == 5206) // 1.69" 280x240 round-rect TFT
+#define CORNER_RADIUS 43
+ display.init(240, 280);
+#elif (SCREEN_PRODUCT_ID == 5394) // 1.9" 320x170 TFT
+ display.init(170, 320);
+#else // All ILI9341 TFTs (320x240)
+ display.begin();
+#endif
+#if !defined(CORNER_RADIUS)
+#define CORNER_RADIUS 0
+#endif
+
+ // OPTIONAL: default TFT SPI speed is fairly conservative, you can try
+ // overriding here for faster screen updates. Actual SPI speed may be less
+ // depending on microcontroller's capabilities. Max reliable speed also
+ // depends on wiring length and tidyness.
+ //display.setSPISpeed(40000000);
+}
+
+// MAIN LOOP, REPEATS FOREVER ----------------------------------------------
+
+void loop() {
+ // Each of these functions demonstrates a different Adafruit_GFX concept:
+ show_shapes();
+ show_charts();
+ show_basic_text();
+ show_char_map();
+ show_custom_text();
+ show_bitmap();
+#if !defined(AVR)
+ // The full set of examples (plus the custom font) won't fit on an 8-bit
+ // Arduino, something's got to go. You can try out this one IF the other
+ // examples are disabled instead.
+ show_canvas();
+#endif
+
+ if (++rotate > 3) rotate = 0; // Cycle through screen rotations 0-3
+ display.setRotation(rotate); // Takes effect on next drawing command
+}
+
+// BASIC SHAPES EXAMPLE ----------------------------------------------------
+
+void show_shapes() {
+ // Draw outlined and filled shapes. This demonstrates:
+ // - Enclosed shapes supported by GFX (points & lines are shown later).
+ // - Adapting to different-sized displays, and to rounded corners.
+
+ const int16_t cx = display.width() / 2; // Center of screen =
+ const int16_t cy = display.height() / 2; // half of width, height
+ int16_t minor = min(cx, cy); // Lesser of half width or height
+ // Shapes will be drawn in a square region centered on the screen. But one
+ // particular screen -- rounded 240x280 ST7789 -- has VERY rounded corners
+ // that would clip a couple of shapes if drawn full size. If using that
+ // screen type, reduce area by a few pixels to avoid drawing in corners.
+ if (CORNER_RADIUS > 40) minor -= 4;
+ const uint8_t pad = 5; // Space between shapes is 2X this
+ const int16_t size = minor - pad; // Shapes are this width & height
+ const int16_t half = size / 2; // 1/2 of shape size
+
+ display.fillScreen(0); // Start by clearing the screen; color 0 = black
+
+ // Draw outline version of basic shapes: rectangle, triangle, circle and
+ // rounded rectangle in different colors. Rather than hardcoded numbers
+ // for position and size, some arithmetic helps adapt to screen dimensions.
+ display.drawRect(cx - minor, cy - minor, size, size, 0xF800);
+ display.drawTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, 0x07E0);
+ display.drawCircle(cx - pad - half, cy + pad + half, half, 0x001F);
+ display.drawRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
+ delay(PAUSE);
+
+ // Draw same shapes, same positions, but filled this time.
+ display.fillRect(cx - minor, cy - minor, size, size, 0xF800);
+ display.fillTriangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, 0x07E0);
+ display.fillCircle(cx - pad - half, cy + pad + half, half, 0x001F);
+ display.fillRoundRect(cx + pad, cy + pad, size, size, size / 5, 0xFFE0);
+ delay(PAUSE);
+} // END SHAPE EXAMPLE
+
+// CHART EXAMPLES ----------------------------------------------------------
+
+void show_charts() {
+ // Draw some graphs and charts. GFX library doesn't handle these as native
+ // object types, but it only takes a little code to build them from simple
+ // shapes. This demonstrates:
+ // - Drawing points and horizontal, vertical and arbitrary lines.
+ // - Adapting to different-sized displays.
+ // - Graphics being clipped off edge.
+ // - Use of negative values to draw shapes "backward" from an anchor point.
+ // - C technique for finding array size at runtime (vs hardcoding).
+
+ display.fillScreen(0); // Clear screen
+
+ const int16_t cx = display.width() / 2; // Center of screen =
+ const int16_t cy = display.height() / 2; // half of width, height
+ const int16_t minor = min(cx, cy); // Lesser of half width or height
+ const int16_t major = max(cx, cy); // Greater of half width or height
+
+ // Let's start with a relatively simple sine wave graph with axes.
+ // Draw graph axes centered on screen. drawFastHLine() and drawFastVLine()
+ // need fewer arguments than normal 2-point line drawing shown later.
+ display.drawFastHLine(0, cy, display.width(), 0x0210); // Dark blue
+ display.drawFastVLine(cx, 0, display.height(), 0x0210);
+
+ // Then draw some tick marks along the axes. To keep this code simple,
+ // these aren't to any particular scale, but a real program may want that.
+ // The loop here draws them from the center outward and pays no mind
+ // whether the screen is rectangular; any ticks that go off-screen will
+ // be clipped by the library.
+ for (uint8_t i=1; i<=10; i++) {
+ // The Arduino map() function scales an input value (e.g. "i") from an
+ // input range (0-10 here) to an output range (0 to major-1 here).
+ // Very handy for making graphics adjust to different screens!
+ int16_t n = map(i, 0, 10, 0, major - 1); // Tick offset relative to center point
+ display.drawFastVLine(cx - n, cy - 5, 11, 0x210);
+ display.drawFastVLine(cx + n, cy - 5, 11, 0x210);
+ display.drawFastHLine(cx - 5, cy - n, 11, 0x210);
+ display.drawFastHLine(cx - 5, cy + n, 11, 0x210);
+ }
+
+ // Then draw sine wave over this using GFX drawPixel() function.
+ for (int16_t x=0; x(str.c_str()));
+}
+
+// TEXT EXAMPLES -----------------------------------------------------------
+
+// This section demonstrates:
+// - Using the default 5x7 built-in font, including scaling in each axis.
+// - How to access all characters of this font, including symbols.
+// - Using a custom font, including alignment techniques that aren't a normal
+// part of the GFX library (uses functions above).
+
+void show_basic_text() {
+ // Show text scaling with built-in font.
+ display.fillScreen(0);
+ display.setFont(); // Use default font
+ display.setCursor(0, CORNER_RADIUS); // Initial cursor position
+ display.setTextSize(1); // Default size
+ display.println(F("Standard built-in font"));
+ display.setTextSize(2);
+ display.println(F("BIG TEXT"));
+ display.setTextSize(3);
+ // "BIGGER TEXT" won't fit on narrow screens, so abbreviate there.
+ display.println((display.width() >= 200) ? F("BIGGER TEXT") : F("BIGGER"));
+ display.setTextSize(2, 4);
+ display.println(F("TALL and"));
+ display.setTextSize(4, 2);
+ display.println(F("WIDE"));
+
+ delay(PAUSE);
+} // END BASIC TEXT EXAMPLE
+
+void show_char_map() {
+ // "Code Page 437" is a name given to the original IBM PC character set.
+ // Despite age and limited language support, still seen in small embedded
+ // settings as it has some useful symbols and accented characters. The
+ // default 5x7 pixel font of Adafruit_GFX is modeled after CP437. This
+ // function draws a table of all the characters & explains some issues.
+
+ // There are 256 characters in all. Draw table as 16 rows of 16 columns,
+ // plus hexadecimal row & column labels. How big can each cell be drawn?
+ const int cell_size = min(display.width(), display.height()) / 17;
+ if (cell_size < 8) return; // Screen is too small for table, skip example.
+ const int total_size = cell_size * 17; // 16 cells + 1 row or column label
+
+ // Set up for default 5x7 font at 1:1 scale. Custom fonts are NOT used
+ // here as most are only 128 characters to save space (the "7b" at the
+ // end of many GFX font names means "7 bits," i.e. 128 characters).
+ display.setFont();
+ display.setTextSize(1);
+
+ // Early Adafruit_GFX was missing one symbol, throwing off some indices!
+ // But fixing the library would break MANY existing sketches that relied
+ // on the degrees symbol and others. The default behavior is thus "broken"
+ // to keep older code working. New code can access the CORRECT full CP437
+ // table by calling this function like so:
+ display.cp437(true);
+
+ display.fillScreen(0);
+
+ const int16_t x = (display.width() - total_size) / 2; // Upper left corner of
+ int16_t y = (display.height() - total_size) / 2; // table centered on screen
+ if (y >= 4) { // If there's a little extra space above & below, scoot table
+ y += 4; // down a few pixels and show a message centered at top.
+ display.setCursor((display.width() - 114) / 2, 0); // 114 = pixel width
+ display.print(F("CP437 Character Map")); // of this message
+ }
+
+ const int16_t inset_x = (cell_size - 5) / 2; // To center each character within cell,
+ const int16_t inset_y = (cell_size - 8) / 2; // compute X & Y offset from corner.
+
+ for (uint8_t row=0; row<16; row++) { // 16 down...
+ // Draw row and columm headings as hexadecimal single digits. To get the
+ // hex value for a specific character, combine the left & top labels,
+ // e.g. Pi symbol is row E, column 3, thus: display.print((char)0xE3);
+ display.setCursor(x + (row + 1) * cell_size + inset_x, y + inset_y);
+ display.print(row, HEX); // This actually draws column labels
+ display.setCursor(x + inset_x, y + (row + 1) * cell_size + inset_y);
+ display.print(row, HEX); // and THIS is the row labels
+ for (uint8_t col=0; col<16; col++) { // 16 across...
+ if ((row + col) & 1) { // Fill alternating cells w/gray
+ display.fillRect(x + (col + 1) * cell_size, y + (row + 1) * cell_size,
+ cell_size, cell_size, 0x630C);
+ }
+ // drawChar() bypasses usual cursor positioning to go direct to an X/Y
+ // location. If foreground & background match, it's drawn transparent.
+ display.drawChar(x + (col + 1) * cell_size + inset_x,
+ y + (row + 1) * cell_size + inset_y, row * 16 + col,
+ 0xFFFF, 0xFFFF, 1);
+ }
+ }
+
+ delay(PAUSE * 2);
+} // END CHAR MAP EXAMPLE
+
+void show_custom_text() {
+ // Show use of custom fonts, plus how to do center or right alignment
+ // using some additional functions provided earlier.
+
+ display.fillScreen(0);
+ display.setFont(&FreeSansBold18pt7b);
+ display.setTextSize(1);
+ display.setTextWrap(false); // Allow text off edges
+
+ // Get "M height" of custom font and move initial base line there:
+ uint16_t w, h;
+ int16_t x, y;
+ display.getTextBounds("M", 0, 0, &x, &y, &w, &h);
+ // On rounded 240x280 display in tall orientation, "Custom Font" gets
+ // clipped by top corners. Scoot text down a few pixels in that one case.
+ if (CORNER_RADIUS && (display.height() == 280)) h += 20;
+ display.setCursor(display.width() / 2, h);
+
+ if (display.width() >= 200) {
+ print_aligned(display, F("Custom Font"), GFX_ALIGN_CENTER);
+ display.setCursor(0, display.getCursorY() + 10);
+ print_aligned(display, F("Align Left"), GFX_ALIGN_LEFT);
+ display.setCursor(display.width() / 2, display.getCursorY());
+ print_aligned(display, F("Centered"), GFX_ALIGN_CENTER);
+ // Small rounded screen, when oriented the wide way, "Right" gets
+ // clipped by bottom right corner. Scoot left to compensate.
+ int16_t x_offset = (CORNER_RADIUS && (display.height() < 200)) ? 15 : 0;
+ display.setCursor(display.width() - x_offset, display.getCursorY());
+ print_aligned(display, F("Align Right"), GFX_ALIGN_RIGHT);
+ } else {
+ // On narrow screens, use abbreviated messages
+ print_aligned(display, F("Font &"), GFX_ALIGN_CENTER);
+ print_aligned(display, F("Align"), GFX_ALIGN_CENTER);
+ display.setCursor(0, display.getCursorY() + 10);
+ print_aligned(display, F("Left"), GFX_ALIGN_LEFT);
+ display.setCursor(display.width() / 2, display.getCursorY());
+ print_aligned(display, F("Center"), GFX_ALIGN_CENTER);
+ display.setCursor(display.width(), display.getCursorY());
+ print_aligned(display, F("Right"), GFX_ALIGN_RIGHT);
+ }
+
+ delay(PAUSE);
+} // END CUSTOM FONT EXAMPLE
+
+// BITMAP EXAMPLE ----------------------------------------------------------
+
+// This section demonstrates:
+// - Embedding a small bitmap in the code (flash memory).
+// - Drawing that bitmap in various colors, and transparently (only '1' bits
+// are drawn; '0' bits are skipped, leaving screen contents in place).
+// - Use of the color565() function to decimate 24-bit RGB to 16 bits.
+
+#define HEX_WIDTH 16 // Bitmap width in pixels
+#define HEX_HEIGHT 16 // Bitmap height in pixels
+// Bitmap data. PROGMEM ensures it's in flash memory (not RAM). And while
+// it would be valid to leave the brackets empty here (i.e. hex_bitmap[]),
+// having dimensions with a little math makes the compiler verify the
+// correct number of bytes are present in the list.
+PROGMEM const uint8_t hex_bitmap[(HEX_WIDTH + 7) / 8 * HEX_HEIGHT] = {
+ 0b00000001, 0b10000000,
+ 0b00000111, 0b11100000,
+ 0b00011111, 0b11111000,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b01111111, 0b11111110,
+ 0b00011111, 0b11111000,
+ 0b00000111, 0b11100000,
+ 0b00000001, 0b10000000,
+};
+#define Y_SPACING (HEX_HEIGHT - 2) // Used by code below for positioning
+
+void show_bitmap() {
+ display.fillScreen(0);
+
+ // Not screen center, but UL coordinates of center hexagon bitmap
+ const int16_t center_x = (display.width() - HEX_WIDTH) / 2;
+ const int16_t center_y = (display.height() - HEX_HEIGHT) / 2;
+ const uint8_t steps = min((display.height() - HEX_HEIGHT) / Y_SPACING,
+ display.width() / HEX_WIDTH - 1) / 2;
+
+ display.drawBitmap(center_x, center_y, hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ 0xFFFF); // Draw center hexagon in white
+
+ // Tile the hexagon bitmap repeatedly in a range of hues. Don't mind the
+ // bit of repetition in the math, the optimizer easily picks this up.
+ // Also, if math looks odd, keep in mind "PEMDAS" operator precedence;
+ // multiplication and division occur before addition and subtraction.
+ for (uint8_t a=0; a<=steps; a++) {
+ for (uint8_t b=1; b<=steps; b++) {
+ display.drawBitmap( // Right section centered red: a = green, b = blue
+ center_x + (a + b) * HEX_WIDTH / 2,
+ center_y + (a - b) * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255, 255 - 255 * a / steps, 255 - 255 * b / steps));
+ display.drawBitmap( // UL section centered green: a = blue, b = red
+ center_x - b * HEX_WIDTH + a * HEX_WIDTH / 2,
+ center_y - a * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255 - 255 * b / steps, 255, 255 - 255 * a / steps));
+ display.drawBitmap( // LL section centered blue: a = red, b = green
+ center_x - a * HEX_WIDTH + b * HEX_WIDTH / 2,
+ center_y + b * Y_SPACING,
+ hex_bitmap, HEX_WIDTH, HEX_HEIGHT,
+ display.color565(255 - 255 * a / steps, 255 - 255 * b / steps, 255));
+ }
+ }
+
+ delay(PAUSE);
+} // END BITMAP EXAMPLE
+
+// CANVAS EXAMPLE ----------------------------------------------------------
+
+// This section demonstrates:
+// - How to refresh changing values onscreen without erase/redraw flicker.
+// - Using an offscreen canvas. It's similar to a bitmap above, but rather
+// than a fixed pattern in flash memory, it's drawable like the screen.
+// - More tips on text alignment, and adapting to different screen sizes.
+
+#define PADDING 6 // Pixels between axis label and value
+
+void show_canvas() {
+ // For this example, let's suppose we want to display live readings from a
+ // sensor such as a three-axis accelerometer, something like:
+ // X: (number)
+ // Y: (number)
+ // Z: (number)
+ // To look extra classy, we want a custom font, and the labels for each
+ // axis are right-aligned so the ':' characters line up...
+
+ display.setFont(&FreeSansBold18pt7b); // Use a custom font
+ display.setTextSize(1); // and reset to 1:1 scale
+
+ const char *label[] = { "X:", "Y:", "Z:" }; // Labels for each axis
+ const uint16_t color[] = { 0xF800, 0x07E0, 0x001F }; // Colors for each value
+
+ // To get the labels right-aligned, one option would be simple trial and
+ // error to find a column that looks good and doesn't clip anything off.
+ // Let's do this dynamically though, so it adapts to any font or labels!
+ // Start by finding the widest of the label strings:
+ uint16_t w, h, max_w = 0;
+ int16_t x, y;
+ for (uint8_t i=0; i<3; i++) { // For each label...
+ display.getTextBounds(label[i], 0, 0, &x, &y, &w, &h);
+ if (w > max_w) max_w = w; // Keep track of widest label
+ }
+
+ // Rounded corners throwing us a curve again. If needed, scoot everything
+ // to the right a bit on wide displays, down a bit on tall ones.
+ int16_t y_offset = 0;
+ if (display.width() > display.height()) max_w += CORNER_RADIUS;
+ else y_offset = CORNER_RADIUS;
+
+ // Now we have max_w for right-aligning the labels. Before we draw them
+ // though...in order to perform flicker-free updates, the numbers we show
+ // will be rendered in either a GFXcanvas1 or GFXcanvas16 object; a 1-bit
+ // or 16-bit offscreen bitmap, RAM permitting. The correct size for this
+ // canvas could also be trial-and-errored, but again let's make this adapt
+ // automatically. The width of the canvas will span from max_w (plus a few
+ // pixels for padding) to the right edge. But the height? Looking at an
+ // uppercase 'M' can work in many situations, but some fonts have ascenders
+ // and descenders on digits, and in some locales a comma (extending below
+ // the baseline) is the decimal separator. Feed ALL the numeric chars into
+ // getTextBounds() for a cumulative height:
+ display.setTextWrap(false); // Keep on one line
+ display.getTextBounds(F("0123456789.,-"), 0, 0, &x, &y, &w, &h);
+
+ // Now declare a GFXcanvas16 object based on the computed width & height:
+ GFXcanvas16 canvas16(display.width() - max_w - PADDING, h);
+
+ // Small devices (e.g. ATmega328p) will almost certainly lack enough RAM
+ // for the canvas. Check if canvas buffer exists. If not, fall back on
+ // using a 1-bit (rather than 16-bit) canvas. Much more RAM friendly, but
+ // not as fast to draw. If a project doesn't require super interactive
+ // updates, consider just going straight for the more compact Canvas1.
+ if (canvas16.getBuffer()) {
+ // If here, 16-bit canvas allocated successfully! Point of interest,
+ // only one canvas is needed for this example, we can reuse it for all
+ // three numbers because the regions are the same size.
+
+ // display and canvas are independent drawable objects; must explicitly
+ // set the same custom font to use on the canvas now:
+ canvas16.setFont(&FreeSansBold18pt7b);
+
+ // Clear display and print labels. Once drawn, these remain untouched.
+ display.fillScreen(0);
+ display.setCursor(max_w, -y + y_offset); // Set baseline for first row
+ for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
+
+ // Last part now is to print numbers on the canvas and copy the canvas to
+ // the display, repeating for several seconds...
+ uint32_t elapsed, startTime = millis();
+ while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
+ for (uint8_t i=0; i<3; i++) { // For each label...
+ canvas16.fillScreen(0); // fillScreen() in this case clears canvas
+ canvas16.setCursor(0, -y); // Reset baseline for custom font
+ canvas16.setTextColor(color[i]);
+ // These aren't real accelerometer readings, just cool-looking numbers.
+ // Notice we print to the canvas, NOT the display:
+ canvas16.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
+ // And HERE is the secret sauce to flicker-free updates. Canvas details
+ // can be passed to the drawRGBBitmap() function, which fully overwrites
+ // prior screen contents in that area. yAdvance is font line spacing.
+ display.drawRGBBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
+ y_offset, canvas16.getBuffer(), canvas16.width(),
+ canvas16.height());
+ }
+ }
+ } else {
+ // Insufficient RAM for Canvas16. Try declaring a 1-bit canvas instead...
+ GFXcanvas1 canvas1(display.width() - max_w - PADDING, h);
+ // If even this smaller object fails, can't proceed, cancel this example.
+ if (!canvas1.getBuffer()) return;
+
+ // Remainder here is nearly identical to the code above, simply using a
+ // different canvas type. It's stripped of most comments for brevity.
+ canvas1.setFont(&FreeSansBold18pt7b);
+ display.fillScreen(0);
+ display.setCursor(max_w, -y + y_offset);
+ for (uint8_t i=0; i<3; i++) print_aligned(display, label[i], GFX_ALIGN_RIGHT);
+ uint32_t elapsed, startTime = millis();
+ while ((elapsed = (millis() - startTime)) <= PAUSE * 2) {
+ for (uint8_t i=0; i<3; i++) {
+ canvas1.fillScreen(0);
+ canvas1.setCursor(0, -y);
+ canvas1.print(sin(elapsed / 200.0 + (float)i * M_PI * 2.0 / 3.0), 5);
+ // Here's the secret sauce to flicker-free updates with GFXcanvas1.
+ // Canvas details can be passed to the drawBitmap() function, and by
+ // specifying both a foreground AND BACKGROUND color (0), this will fully
+ // overwrite/erase prior screen contents in that area (vs transparent).
+ display.drawBitmap(max_w + PADDING, i * FreeSansBold18pt7b.yAdvance +
+ y_offset, canvas1.getBuffer(), canvas1.width(),
+ canvas1.height(), color[i], 0);
+ }
+ }
+ }
+
+ // Because canvas object was declared locally to this function, it's freed
+ // automatically when the function returns; no explicit delete needed.
+} // END CANVAS EXAMPLE
diff --git a/EYESPI_BFF/CircuitPython_EYESPI_BFF/Helvetica-Bold-16.pcf b/EYESPI_BFF/CircuitPython_EYESPI_BFF/Helvetica-Bold-16.pcf
new file mode 100644
index 000000000..deb9092d1
Binary files /dev/null and b/EYESPI_BFF/CircuitPython_EYESPI_BFF/Helvetica-Bold-16.pcf differ
diff --git a/EYESPI_BFF/CircuitPython_EYESPI_BFF/blinka_computer.bmp b/EYESPI_BFF/CircuitPython_EYESPI_BFF/blinka_computer.bmp
new file mode 100644
index 000000000..99c02991e
Binary files /dev/null and b/EYESPI_BFF/CircuitPython_EYESPI_BFF/blinka_computer.bmp differ
diff --git a/EYESPI_BFF/CircuitPython_EYESPI_BFF/code.py b/EYESPI_BFF/CircuitPython_EYESPI_BFF/code.py
new file mode 100644
index 000000000..cab770b6c
--- /dev/null
+++ b/EYESPI_BFF/CircuitPython_EYESPI_BFF/code.py
@@ -0,0 +1,326 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-FileCopyrightText: Adapted from Phil B.'s 16bit_hello Arduino Code
+#
+# SPDX-License-Identifier: MIT
+
+'''Graphics example for the EYESPI BFF'''
+
+import gc
+import math
+from random import randint
+import time
+import displayio
+import board
+import vectorio
+import terminalio
+import simpleio
+from adafruit_st7789 import ST7789
+from adafruit_bitmap_font import bitmap_font
+from adafruit_display_text import label, wrap_text_to_lines
+from adafruit_display_shapes.rect import Rect
+from adafruit_display_shapes.circle import Circle
+from adafruit_display_shapes.roundrect import RoundRect
+from adafruit_display_shapes.triangle import Triangle
+from adafruit_display_shapes.line import Line
+
+displayio.release_displays()
+
+spi = board.SPI()
+tft_cs = board.TX
+tft_dc = board.RX
+
+display_bus = displayio.FourWire(
+ spi, command=tft_dc, chip_select=tft_cs, reset=None
+)
+
+display = ST7789(display_bus, width=240, height=240, rowstart=80)
+
+bitmap = displayio.Bitmap(display.width, display.height, 3)
+
+red = 0xff0000
+yellow = 0xcccc00
+orange = 0xff5500
+blue = 0x0000ff
+pink = 0xff00ff
+purple = 0x5500ff
+white = 0xffffff
+green = 0x00ff00
+aqua = 0x125690
+
+palette = displayio.Palette(3)
+palette[0] = 0x000000 # black
+palette[1] = white
+palette[2] = yellow
+
+palette.make_transparent(0)
+
+tile_grid = displayio.TileGrid(bitmap, pixel_shader=palette)
+
+group = displayio.Group()
+
+def clean_up(group_name):
+ for _ in range(len(group_name)):
+ group_name.pop()
+ gc.collect()
+
+def show_shapes():
+ gc.collect()
+ cx = int(display.width / 2)
+ cy = int(display.height / 2)
+ minor = min(cx, cy)
+ pad = 5
+ size = minor - pad
+ half = int(size / 2)
+ rect = Rect(cx - minor, cy - minor, size, size, stroke = 1, fill=red, outline = red)
+ tri = Triangle(cx + pad, cy - pad, cx + pad + half, cy - minor,
+ cx + minor - 1, cy - pad, fill=green, outline = green)
+ circ = Circle(cx - pad - half, cy + pad + half, half, fill=blue, stroke = 1, outline = blue)
+ rnd = RoundRect(cx + pad, cy + pad, size, size, int(size / 5), stroke = 1,
+ fill=yellow, outline = yellow)
+
+ group.append(rect)
+ group.append(tri)
+ group.append(circ)
+ group.append(rnd)
+ rect.fill = None
+ tri.fill = None
+ circ.fill = None
+ rnd.fill = None
+
+ time.sleep(2)
+
+ rect.fill = red
+ tri.fill = green
+ circ.fill = blue
+ rnd.fill = yellow
+ time.sleep(2)
+ clean_up(group)
+ del rect
+ del tri
+ del circ
+ del rnd
+ gc.collect()
+
+def sine_chart():
+ gc.collect()
+ cx = int(display.width / 2)
+ cy = int(display.height / 2)
+ minor = min(cx, cy)
+ major = max(cx, cy)
+
+ group.append(Line(cx, 0, cx, display.height, blue)) # v
+ group.append(Line(0, cy, display.width, cy, blue)) # h
+
+ for i in range(10):
+ _n = simpleio.map_range(i, 0, 10, 0, major - 1)
+ n = int(_n)
+ group.append(Line(cx - n, cy - 5, cx - n, (cy - 5) + 11, blue)) # v
+ group.append(Line(cx + n, cy - 5, cx + n, (cy - 5) + 11, blue)) # v
+ group.append(Line(cx - 5, cy - n, (cx - 5) + 11, cy - n, blue)) # h
+ group.append(Line(cx - 5, cy + n, (cx - 5) + 11, cy + n, blue)) # h
+
+ for x in range(display.width):
+ y = cy - int(math.sin((x - cx) * 0.05) * float(minor * 0.5))
+ bitmap[x, y] = 1
+ group.append(tile_grid)
+ time.sleep(2)
+ clean_up(group)
+
+def widget0():
+ gc.collect()
+ data = [31, 42, 36, 58, 67, 88]
+ num_points = len(data)
+
+ text_area = label.Label(terminalio.FONT, text="Widget Sales", color=white)
+ text_area.anchor_point = (0.5, 0.0)
+ text_area.anchored_position = (display.width / 2, 3)
+ group.append(text_area)
+ for i in range(11):
+ _x = simpleio.map_range(i, 0, 10, 0, display.width - 1)
+ x = int(_x)
+ group.append(Line(x, 20, x, display.height, blue))
+ _y = simpleio.map_range(i, 0, 10, 20, display.height - 1)
+ y = int(_y)
+ group.append(Line(0, y, display.width, y, blue))
+ prev_x = 0
+ _prev_y = simpleio.map_range(data[0], 0, 100, display.height - 1, 20)
+ prev_y = int(_prev_y)
+ for i in range(1, num_points):
+ _new_x = simpleio.map_range(i, 0, num_points - 1, 0, display.width - 1)
+ new_x = int(_new_x)
+ _new_y = simpleio.map_range(data[i], 0, 100, display.height - 1, 20)
+ new_y = int(_new_y)
+ group.append(Line(prev_x, prev_y, new_x, new_y, aqua))
+ prev_x = new_x
+ prev_y = new_y
+
+ for i in range(num_points):
+ _x = simpleio.map_range(i, 0, num_points - 1, 0, display.width - 1)
+ x = int(_x)
+ _y = simpleio.map_range(data[i], 0, 100, display.height - 1, 20)
+ y = int(_y)
+ group.append(Circle(x, y, 5, fill=None, stroke = 2, outline = white))
+
+ time.sleep(2)
+ clean_up(group)
+
+def widget1():
+ gc.collect()
+ data = [31, 42, 36, 58, 67, 88]
+ num_points = len(data)
+ bar_width = int(display.width / num_points) - 4
+ x_mapped_w = display.width + 2
+ h_mapped_h = display.height + 20
+
+ text_area = label.Label(terminalio.FONT, text="Widget Sales", color=white)
+ text_area.anchor_point = (0.5, 0.0)
+ text_area.anchored_position = (display.width / 2, 3)
+ group.append(text_area)
+ for i in range(11):
+ _y = simpleio.map_range(i, 0, 10, 20, display.height - 1)
+ y = int(_y)
+ group.append(Line(0, y, display.width, y, blue))
+ for i in range(num_points):
+ _x = simpleio.map_range(i, 0, num_points, 0, x_mapped_w)
+ x = int(_x)
+ _height = simpleio.map_range(data[i], 0, 100, h_mapped_h, 0)
+ height = int(_height)
+ group.append(vectorio.Rectangle(pixel_shader=palette, width=bar_width,
+ height=display.height + 1, x=x, y=height, color_index = 2))
+
+ time.sleep(2)
+ clean_up(group)
+
+def text_align():
+ gc.collect()
+ TEXT = "hello world"
+
+ text_area_top_left = label.Label(terminalio.FONT, text=TEXT, color=red)
+ text_area_top_left.anchor_point = (0.0, 0.0)
+ text_area_top_left.anchored_position = (0, 0)
+
+ text_area_top_middle = label.Label(terminalio.FONT, text=TEXT, color=orange)
+ text_area_top_middle.anchor_point = (0.5, 0.0)
+ text_area_top_middle.anchored_position = (display.width / 2, 0)
+
+ text_area_top_right = label.Label(terminalio.FONT, text=TEXT, color=yellow)
+ text_area_top_right.anchor_point = (1.0, 0.0)
+ text_area_top_right.anchored_position = (display.width, 0)
+
+ text_area_middle_left = label.Label(terminalio.FONT, text=TEXT, color=green)
+ text_area_middle_left.anchor_point = (0.0, 0.5)
+ text_area_middle_left.anchored_position = (0, display.height / 2)
+
+ text_area_middle_middle = label.Label(terminalio.FONT, text=TEXT, color=aqua)
+ text_area_middle_middle.anchor_point = (0.5, 0.5)
+ text_area_middle_middle.anchored_position = (display.width / 2, display.height / 2)
+
+ text_area_middle_right = label.Label(terminalio.FONT, text=TEXT, color=blue)
+ text_area_middle_right.anchor_point = (1.0, 0.5)
+ text_area_middle_right.anchored_position = (display.width, display.height / 2)
+
+ text_area_bottom_left = label.Label(terminalio.FONT, text=TEXT, color=purple)
+ text_area_bottom_left.anchor_point = (0.0, 1.0)
+ text_area_bottom_left.anchored_position = (0, display.height)
+
+ text_area_bottom_middle = label.Label(terminalio.FONT, text=TEXT, color=pink)
+ text_area_bottom_middle.anchor_point = (0.5, 1.0)
+ text_area_bottom_middle.anchored_position = (display.width / 2, display.height)
+
+ text_area_bottom_right = label.Label(terminalio.FONT, text=TEXT, color=white)
+ text_area_bottom_right.anchor_point = (1.0, 1.0)
+ text_area_bottom_right.anchored_position = (display.width, display.height)
+
+ group.append(text_area_top_middle)
+ group.append(text_area_top_left)
+ group.append(text_area_top_right)
+ group.append(text_area_middle_middle)
+ group.append(text_area_middle_left)
+ group.append(text_area_middle_right)
+ group.append(text_area_bottom_middle)
+ group.append(text_area_bottom_left)
+ group.append(text_area_bottom_right)
+
+ time.sleep(2)
+ clean_up(group)
+
+def custom_font():
+ gc.collect()
+ my_font = bitmap_font.load_font("/Helvetica-Bold-16.pcf")
+ text_sample = "The quick brown fox jumps over the lazy dog."
+ text_sample = "\n".join(wrap_text_to_lines(text_sample, 28))
+ text_area = label.Label(my_font, text="Custom Font", color=white)
+ text_area.anchor_point = (0.0, 0.0)
+ text_area.anchored_position = (0, 0)
+
+ sample_text = label.Label(my_font, text=text_sample)
+ sample_text.anchor_point = (0.5, 0.5)
+ sample_text.anchored_position = (display.width / 2, display.height / 2)
+
+ group.append(text_area)
+ group.append(sample_text)
+
+ time.sleep(2)
+ clean_up(group)
+
+ del my_font
+ gc.collect()
+
+def bitmap_example():
+ gc.collect()
+ blinka_bitmap = displayio.OnDiskBitmap("/blinka_computer.bmp")
+ blinka_grid = displayio.TileGrid(blinka_bitmap, pixel_shader=blinka_bitmap.pixel_shader)
+ gc.collect()
+ group.append(blinka_grid)
+
+ time.sleep(2)
+ clean_up(group)
+
+ del blinka_grid
+ del blinka_bitmap
+ gc.collect()
+
+def sensor_values():
+ gc.collect()
+ text_x = "X: %d" % randint(-25, 25)
+ text_y = "Y: %d" % randint(-25, 25)
+ text_z = "Z: %d" % randint(-25, 25)
+ x_text = label.Label(terminalio.FONT, text=text_x, color=red)
+ x_text.anchor_point = (0.0, 0.0)
+ x_text.anchored_position = (2, 0)
+ y_text = label.Label(terminalio.FONT, text=text_y, color=green)
+ y_text.anchor_point = (0.0, 0.0)
+ y_text.anchored_position = (2, 10)
+ z_text = label.Label(terminalio.FONT, text=text_z, color=blue)
+ z_text.anchor_point = (0.0, 0.0)
+ z_text.anchored_position = (2, 20)
+ group.append(x_text)
+ group.append(y_text)
+ group.append(z_text)
+
+ for i in range(40):
+ if i == 10:
+ group.scale = 2
+ elif i == 20:
+ group.scale = 3
+ elif i == 30:
+ group.scale = 4
+ x_text.text = "X: %d" % randint(-50, 50)
+ y_text.text = "Y: %d" % randint(-50, 50)
+ z_text.text = "Z: %d" % randint(-50, 50)
+ time.sleep(0.1)
+ time.sleep(0.1)
+ clean_up(group)
+ group.scale = 1
+
+display.root_group = group
+
+while True:
+ show_shapes()
+ sine_chart()
+ widget0()
+ widget1()
+ text_align()
+ custom_font()
+ bitmap_example()
+ sensor_values()
diff --git a/EyeLights_Accelerometer_Tap/EyeLights_Accelerometer_Tap_CircuitPython/code.py b/EyeLights_Accelerometer_Tap/EyeLights_Accelerometer_Tap_CircuitPython/code.py
index 87647dfde..12f026149 100644
--- a/EyeLights_Accelerometer_Tap/EyeLights_Accelerometer_Tap_CircuitPython/code.py
+++ b/EyeLights_Accelerometer_Tap/EyeLights_Accelerometer_Tap_CircuitPython/code.py
@@ -25,7 +25,9 @@
import adafruit_is31fl3741
from adafruit_is31fl3741.adafruit_ledglasses import LED_Glasses
-i2c = board.I2C() # Shared by both the accelerometer and LED controller
+# Shared by both the accelerometer and LED controller
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# Initialize the accelerometer and enable single-tap detection
int1 = digitalio.DigitalInOut(board.ACCELEROMETER_INTERRUPT)
diff --git a/EyeLights_Custom_Animations/code.py b/EyeLights_Custom_Animations/code.py
new file mode 100755
index 000000000..c5f67c393
--- /dev/null
+++ b/EyeLights_Custom_Animations/code.py
@@ -0,0 +1,104 @@
+# SPDX-FileCopyrightText: 2021 Phil Burgess for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# modified from original
+# 2024 Carter Nelson
+
+"""
+Modifed from original project code here:
+https://learn.adafruit.com/adafruit-eyelights-led-glasses-and-driver/bmp-animation
+
+This version only uses the matrix part of the glasses. The ring
+LEDs are not used. BMP image files should be properly formatted
+for the matrix (18x5 sprites) and placed in the /images folder.
+
+Current animation can be changed by tilting head back. Brightness
+can be changed by pressing the user button.
+"""
+
+import os
+import time
+import board
+from busio import I2C
+import digitalio
+import adafruit_lis3dh
+import adafruit_is31fl3741
+from adafruit_is31fl3741.adafruit_ledglasses import LED_Glasses
+from eyelights_anim import EyeLightsAnim
+
+# --| User Config |------------------------------
+ANIM_DELAY = 0.07
+BRIGHT_LEVELS = (0, 10, 20, 40)
+# --| User Config |------------------------------
+
+# use all BMPs found in /images dir
+ANIM_FILES = [
+ "/images/" + f
+ for f in os.listdir("/images")
+ if f.endswith(".bmp") and not f.startswith("._")
+]
+
+# HARDWARE SETUP -----------------------
+
+i2c = I2C(board.SCL, board.SDA, frequency=1000000)
+
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
+
+button = digitalio.DigitalInOut(board.SWITCH)
+button.switch_to_input(digitalio.Pull.UP)
+
+# Initialize the IS31 LED driver, buffered for smoother animation
+glasses = LED_Glasses(i2c, allocate=adafruit_is31fl3741.MUST_BUFFER)
+glasses.show() # Clear any residue on startup
+glasses.global_current = 20 # Just middlin' bright, please
+
+
+# ANIMATION SETUP ----------------------
+
+# Two indexed-color BMP filenames are specified: first is for the LED matrix
+# portion, second is for the LED rings -- or pass None for one or the other
+# if not animating that part. The two elements, matrix and rings, share a
+# few LEDs in common...by default the rings appear "on top" of the matrix,
+# or you can optionally pass a third argument of False to have the rings
+# underneath. There's that one odd unaligned pixel between the two though,
+# so this may only rarely be desirable.
+anim = EyeLightsAnim(glasses, ANIM_FILES[0], None)
+
+# MAIN LOOP ----------------------------
+
+# This example just runs through a repeating cycle. If you need something
+# else, like ping-pong animation, or frames based on a specific time, the
+# anim.frame() function can optionally accept two arguments: an index for
+# the matrix animation, and an index for the rings.
+
+_, filtered_y, _ = lis3dh.acceleration
+looking_up = filtered_y < -5
+anim_index = 0
+bright_index = 0
+
+while True:
+ # read accelo and check if looking up
+ _, y, _ = lis3dh.acceleration
+ filtered_y = filtered_y * 0.85 + y * 0.15
+ if looking_up:
+ if filtered_y > -3.5:
+ looking_up = False
+ else:
+ if filtered_y < -5:
+ looking_up = True
+ anim_index = (anim_index + 1) % len(ANIM_FILES)
+ print(ANIM_FILES[anim_index])
+ anim.matrix_filename = ANIM_FILES[anim_index]
+
+ # check for button press
+ if not button.value:
+ bright_index = (bright_index + 1) % len(BRIGHT_LEVELS)
+ print(BRIGHT_LEVELS[bright_index])
+ glasses.global_current = BRIGHT_LEVELS[bright_index]
+ while not button.value:
+ pass
+
+ anim.frame() # Advance matrix and rings by 1 frame and wrap around
+ glasses.show() # Update LED matrix
+ time.sleep(ANIM_DELAY) # Pause briefly
diff --git a/EyeLights_Custom_Animations/eyelights_anim.py b/EyeLights_Custom_Animations/eyelights_anim.py
new file mode 100755
index 000000000..a0ba59c0d
--- /dev/null
+++ b/EyeLights_Custom_Animations/eyelights_anim.py
@@ -0,0 +1,157 @@
+# SPDX-FileCopyrightText: 2021 Phil Burgess for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# modified from original to allow changing matrix BMP file
+# 2024 Carter Nelson
+
+"""
+EyeLightsAnim provides EyeLights LED glasses with pre-drawn frame-by-frame
+animation from BMP images. Sort of a catch-all for modest projects that may
+want to implement some animation without having to express that animation
+entirely in code. The idea is based upon two prior projects:
+
+https://learn.adafruit.com/32x32-square-pixel-display/overview
+learn.adafruit.com/circuit-playground-neoanim-using-bitmaps-to-animate-neopixels
+
+The 18x5 matrix and the LED rings are regarded as distinct things, fed from
+two separate BMPs (or can use just one or the other). The former guide above
+uses the vertical axis for time (like a strip of movie film), while the
+latter uses the horizontal axis for time (as in audio or video editing).
+Despite this contrast, the same conventions are maintained here to avoid
+conflicting explanations...what worked in those guides is what works here,
+only the resolutions are different."""
+
+import displayio
+import adafruit_imageload
+
+
+def gamma_adjust(palette):
+ """Given a color palette that was returned by adafruit_imageload, apply
+ gamma correction and place results back in original palette. This makes
+ LED brightness and colors more perceptually linear, to better match how
+ the source BMP might've appeared on screen."""
+
+ for index, entry in enumerate(palette):
+ palette[index] = sum(
+ [
+ int(((((entry >> shift) & 0xFF) / 255) ** 2.6) * 255 + 0.5) << shift
+ for shift in range(16, -1, -8)
+ ]
+ )
+
+
+class EyeLightsAnim:
+ """Class encapsulating BMP image-based frame animation for the matrix
+ and rings of an LED_Glasses object."""
+
+ def __init__(self, glasses, matrix_filename, ring_filename, rings_on_top=True):
+ """Constructor for EyeLightsAnim. Accepts an LED_Glasses object and
+ filenames for two indexed-color BMP images: first is a "sprite
+ sheet" for animating on the matrix portion of the glasses, second is
+ a pixels-over-time graph for the rings portion. Either filename may
+ be None if not used. Because the matrix and rings share some pixels
+ in common, the last argument determines the "stacking order" - which
+ of the two bitmaps is drawn later or "on top." Default of True
+ places the rings over the matrix, False gives the matrix priority.
+ It's possible to use transparent palette indices but that may be
+ more trouble than it's worth."""
+
+ self.glasses = glasses
+ self.matrix_bitmap = self.ring_bitmap = None
+ self.rings_on_top = rings_on_top
+
+ if matrix_filename:
+ self.matrix_filename = matrix_filename
+
+ if ring_filename:
+ self.ring_bitmap, self.ring_palette = adafruit_imageload.load(
+ ring_filename, bitmap=displayio.Bitmap, palette=displayio.Palette
+ )
+ if self.ring_bitmap.height < 48:
+ raise ValueError("Ring bitmap must be at least 48 pixels tall")
+ gamma_adjust(self.ring_palette)
+ self.ring_frames = self.ring_bitmap.width
+ self.ring_frame = self.ring_frames - 1
+
+ def draw_matrix(self, matrix_frame=None):
+ """Draw the matrix portion of EyeLights from one frame of the matrix
+ bitmap "sprite sheet." Can either request a specific frame index
+ (starting from 0), or pass None (or no arguments) to advance by one
+ frame, "wrapping around" to beginning if needed. For internal use by
+ library; user code should call frame(), not this function."""
+
+ if matrix_frame: # Go to specific frame
+ self.matrix_frame = matrix_frame
+ else: # Advance one frame forward
+ self.matrix_frame += 1
+ self.matrix_frame %= self.matrix_frames # Wrap to valid range
+
+ xoffset = self.matrix_frame % self.tiles_across * self.glasses.width
+ yoffset = self.matrix_frame // self.tiles_across * self.glasses.height
+
+ for y in range(self.glasses.height):
+ y1 = y + yoffset
+ for x in range(self.glasses.width):
+ idx = self.matrix_bitmap[x + xoffset, y1]
+ if not self.matrix_palette.is_transparent(idx):
+ self.glasses.pixel(x, y, self.matrix_palette[idx])
+
+ def draw_rings(self, ring_frame=None):
+ """Draw the rings portion of EyeLights from one frame of the rings
+ bitmap graph. Can either request a specific frame index (starting
+ from 0), or pass None (or no arguments) to advance by one frame,
+ 'wrapping around' to beginning if needed. For internal use by
+ library; user code should call frame(), not this function."""
+
+ if ring_frame: # Go to specific frame
+ self.ring_frame = ring_frame
+ else: # Advance one frame forward
+ self.ring_frame += 1
+ self.ring_frame %= self.ring_frames # Wrap to valid range
+
+ for y in range(24):
+ idx = self.ring_bitmap[self.ring_frame, y]
+ if not self.ring_palette.is_transparent(idx):
+ self.glasses.left_ring[y] = self.ring_palette[idx]
+ idx = self.ring_bitmap[self.ring_frame, y + 24]
+ if not self.ring_palette.is_transparent(idx):
+ self.glasses.right_ring[y] = self.ring_palette[idx]
+
+ def frame(self, matrix_frame=None, ring_frame=None):
+ """Draw one frame of animation to the matrix and/or rings portions
+ of EyeLights. Frame index (starting from 0) for matrix and rings
+ respectively can be passed as arguments, or either/both may be None
+ to advance by one frame, 'wrapping around' to beginning if needed.
+ Because some pixels are shared in common between matrix and rings,
+ the "stacking order" -- which of the two appears "on top", is
+ specified as an argument to the constructor."""
+
+ if self.matrix_bitmap and self.rings_on_top:
+ self.draw_matrix(matrix_frame)
+
+ if self.ring_bitmap:
+ self.draw_rings(ring_frame)
+
+ if self.matrix_bitmap and not self.rings_on_top:
+ self.draw_matrix(matrix_frame)
+
+ @property
+ def matrix_filename(self):
+ return self._matrix_filename
+
+ @matrix_filename.setter
+ def matrix_filename(self, matrix_filename):
+ self._matrix_filename = matrix_filename
+ self.matrix_bitmap, self.matrix_palette = adafruit_imageload.load(
+ matrix_filename, bitmap=displayio.Bitmap, palette=displayio.Palette
+ )
+ if (self.matrix_bitmap.width < self.glasses.width) or (
+ self.matrix_bitmap.height < self.glasses.height
+ ):
+ raise ValueError("Matrix bitmap must be at least 18x5 pixels")
+ gamma_adjust(self.matrix_palette)
+ self.tiles_across = self.matrix_bitmap.width // self.glasses.width
+ self.tiles_down = self.matrix_bitmap.height // self.glasses.height
+ self.matrix_frames = self.tiles_across * self.tiles_down
+ self.matrix_frame = self.matrix_frames - 1
diff --git a/EyeLights_Custom_Animations/images/bubble.bmp b/EyeLights_Custom_Animations/images/bubble.bmp
new file mode 100755
index 000000000..f12a1f2d8
Binary files /dev/null and b/EyeLights_Custom_Animations/images/bubble.bmp differ
diff --git a/EyeLights_Custom_Animations/images/christmastree.bmp b/EyeLights_Custom_Animations/images/christmastree.bmp
new file mode 100755
index 000000000..197c8367c
Binary files /dev/null and b/EyeLights_Custom_Animations/images/christmastree.bmp differ
diff --git a/EyeLights_Custom_Animations/images/flames.bmp b/EyeLights_Custom_Animations/images/flames.bmp
new file mode 100755
index 000000000..df8627b8e
Binary files /dev/null and b/EyeLights_Custom_Animations/images/flames.bmp differ
diff --git a/EyeLights_Googly_Rings/EyeLights_Googly_Rings_CircuitPython/code.py b/EyeLights_Googly_Rings/EyeLights_Googly_Rings_CircuitPython/code.py
index b031946ff..71a2c05a4 100755
--- a/EyeLights_Googly_Rings/EyeLights_Googly_Rings_CircuitPython/code.py
+++ b/EyeLights_Googly_Rings/EyeLights_Googly_Rings_CircuitPython/code.py
@@ -20,7 +20,9 @@
# HARDWARE SETUP ----
-i2c = board.I2C() # Shared by both the accelerometer and LED controller
+# Shared by both the accelerometer and LED controller
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# Initialize the accelerometer
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
diff --git a/Factory_Tests/Adafruit_MEMENTO_Factory_Test/.pycamera_s3.generate b/Factory_Tests/Adafruit_MEMENTO_Factory_Test/.pycamera_s3.generate
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/Adafruit_MEMENTO_Factory_Test/.pycamera_s3.test.only b/Factory_Tests/Adafruit_MEMENTO_Factory_Test/.pycamera_s3.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/Adafruit_MEMENTO_Factory_Test/Adafruit_MEMENTO_Factory_Test.ino b/Factory_Tests/Adafruit_MEMENTO_Factory_Test/Adafruit_MEMENTO_Factory_Test.ino
new file mode 100644
index 000000000..d385d52e8
--- /dev/null
+++ b/Factory_Tests/Adafruit_MEMENTO_Factory_Test/Adafruit_MEMENTO_Factory_Test.ino
@@ -0,0 +1,196 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include "Adafruit_PyCamera.h"
+
+Adafruit_PyCamera pycamera;
+framesize_t validSizes[] = {FRAMESIZE_QQVGA, FRAMESIZE_QVGA, FRAMESIZE_HVGA, FRAMESIZE_VGA, FRAMESIZE_SVGA, FRAMESIZE_XGA, FRAMESIZE_HD, FRAMESIZE_SXGA, FRAMESIZE_UXGA, FRAMESIZE_QXGA, FRAMESIZE_QSXGA};
+
+// A colection of possible ring light colors
+uint32_t ringlightcolors_RGBW[] = {0x00000000, 0x00FF0000, 0x00FFFF00, 0x0000FF00, 0x0000FFFF, 0x000000FF, 0x00FF00FF, 0xFF000000};
+uint8_t ringlight_i = 0;
+uint8_t ringlightBrightness = 100;
+
+#define IRQ 3
+
+
+void setup() {
+ Serial.begin(115200);
+ // while (!Serial) yield();
+ delay(100);
+
+ if (! pycamera.begin()) {
+ Serial.println("Failed to initialize pyCamera interface");
+ while (1) yield();
+ }
+ Serial.println("pyCamera hardware initialized!");
+
+ pinMode(IRQ, INPUT_PULLUP);
+ attachInterrupt(IRQ, [] {
+ Serial.println("IRQ!");
+ }, FALLING);
+}
+
+void loop() {
+ static uint8_t loopn=0;
+ pycamera.setNeopixel(pycamera.Wheel(loopn));
+ loopn += 8;
+
+ pycamera.readButtons();
+ //Serial.printf("Buttons: 0x%08X\n\r", pycamera.readButtons());
+
+ //pycamera.timestamp();
+ pycamera.captureFrame();
+
+ // once the frame is captured we can draw ontot he framebuffer
+ if (pycamera.justPressed(AWEXP_SD_DET)) {
+
+ Serial.println(F("SD Card removed"));
+ pycamera.endSD();
+ pycamera.fb->setCursor(0, 32);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 0, 0));
+ pycamera.fb->print(F("SD Card removed"));
+ delay(200);
+ }
+ if (pycamera.justReleased(AWEXP_SD_DET)) {
+ Serial.println(F("SD Card inserted!"));
+ pycamera.initSD();
+ pycamera.fb->setCursor(0, 32);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 0, 0));
+ pycamera.fb->print(F("SD Card inserted"));
+ delay(200);
+ }
+
+ float A0_voltage = analogRead(A0) / 4096.0 * 3.3;
+ if (loopn == 0) {
+ Serial.printf("A0 = %0.1f V, Battery = %0.1f V\n\r",
+ A0_voltage, pycamera.readBatteryVoltage());
+ }
+ pycamera.fb->setCursor(0,0);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 255, 255));
+ pycamera.fb->print("A0 = "); pycamera.fb->print(A0_voltage, 1);
+ pycamera.fb->print("V\nBattery = "); pycamera.fb->print(pycamera.readBatteryVoltage(), 1);
+ pycamera.fb->print(" V");
+
+
+ // print the camera frame size
+ pycamera.fb->setCursor(0, 200);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 255, 255));
+ pycamera.fb->print("Size:");
+ switch (pycamera.photoSize) {
+ case FRAMESIZE_QQVGA:
+ pycamera.fb->print("160x120");
+ break;
+ case FRAMESIZE_QVGA:
+ pycamera.fb->print("320x240");
+ break;
+ case FRAMESIZE_HVGA:
+ pycamera.fb->print("480x320");
+ break;
+ case FRAMESIZE_VGA:
+ pycamera.fb->print("640x480");
+ break;
+ case FRAMESIZE_SVGA:
+ pycamera.fb->print("800x600");
+ break;
+ case FRAMESIZE_XGA:
+ pycamera.fb->print("1024x768");
+ break;
+ case FRAMESIZE_HD:
+ pycamera.fb->print("1280x720");
+ break;
+ case FRAMESIZE_SXGA:
+ pycamera.fb->print("1280x1024");
+ break;
+ case FRAMESIZE_UXGA:
+ pycamera.fb->print("1600x1200");
+ break;
+ case FRAMESIZE_QXGA:
+ pycamera.fb->print("2048x1536");
+ break;
+ case FRAMESIZE_QSXGA:
+ pycamera.fb->print("2560x1920");
+ break;
+ default:
+ pycamera.fb->print("Unknown");
+ break;
+ }
+
+ float x_ms2, y_ms2, z_ms2;
+ if (pycamera.readAccelData(&x_ms2, &y_ms2, &z_ms2)) {
+ //Serial.printf("X=%0.2f, Y=%0.2f, Z=%0.2f\n\r", x_ms2, y_ms2, z_ms2);
+ pycamera.fb->setCursor(0, 220);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 255, 255));
+ pycamera.fb->print("3D: "); pycamera.fb->print(x_ms2, 1);
+ pycamera.fb->print(", "); pycamera.fb->print(y_ms2, 1);
+ pycamera.fb->print(", "); pycamera.fb->print(z_ms2, 1);
+ }
+
+ pycamera.blitFrame();
+
+ if (pycamera.justPressed(AWEXP_BUTTON_UP)) {
+ Serial.println("Up!");
+ for (int i = 0; i < sizeof(validSizes) / sizeof(framesize_t) - 1; ++i) {
+ if (pycamera.photoSize == validSizes[i]) {
+ pycamera.photoSize = validSizes[i + 1];
+ break;
+ }
+ }
+ }
+ if (pycamera.justPressed(AWEXP_BUTTON_DOWN)) {
+ Serial.println("Down!");
+ for (int i = sizeof(validSizes) / sizeof(framesize_t) - 1; i > 0; --i) {
+ if (pycamera.photoSize == validSizes[i]) {
+ pycamera.photoSize = validSizes[i - 1];
+ break;
+ }
+ }
+ }
+
+ if (pycamera.justPressed(AWEXP_BUTTON_RIGHT)) {
+ pycamera.specialEffect = (pycamera.specialEffect + 1) % 7;
+ pycamera.setSpecialEffect(pycamera.specialEffect);
+ Serial.printf("set effect: %d\n\r", pycamera.specialEffect);
+ }
+ if (pycamera.justPressed(AWEXP_BUTTON_LEFT)) {
+ pycamera.specialEffect = (pycamera.specialEffect + 6) % 7;
+ pycamera.setSpecialEffect(pycamera.specialEffect);
+ Serial.printf("set effect: %d\n\r", pycamera.specialEffect);
+ }
+
+ if (pycamera.justPressed(AWEXP_BUTTON_OK)) {
+ // iterate through all the ring light colors
+ ringlight_i = (ringlight_i + 1) % (sizeof(ringlightcolors_RGBW) / sizeof(uint32_t));
+ pycamera.setRing(ringlightcolors_RGBW[ringlight_i]);
+ Serial.printf("set ringlight: 0x%08X\n\r", (unsigned int)ringlightcolors_RGBW[ringlight_i]);
+ }
+ if (pycamera.justPressed(AWEXP_BUTTON_SEL)) {
+ // iterate through brightness levels, incrementing 25 at a time
+ if (ringlightBrightness >= 250) ringlightBrightness = 0;
+ else ringlightBrightness += 50;
+ pycamera.ring.setBrightness(ringlightBrightness);
+ pycamera.setRing(ringlightcolors_RGBW[ringlight_i]);
+ Serial.printf("set ringlight brightness: %d\n\r", ringlightBrightness);
+ }
+
+ if (pycamera.justPressed(SHUTTER_BUTTON)) {
+ Serial.println("Snap!");
+ if (pycamera.takePhoto("IMAGE", pycamera.photoSize)) {
+ pycamera.fb->setCursor(120, 100);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 255, 255));
+ pycamera.fb->print("Snap!");
+ pycamera.speaker_tone(100, 50); // tone1 - B5
+ //pycamera.blitFrame();
+ }
+ }
+
+ delay(100);
+}
diff --git a/Factory_Tests/Feather_ESP32S2_FactoryTest/.feather_esp32s2.test.only b/Factory_Tests/Feather_ESP32S2_FactoryTest/.feather_esp32s2.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/Feather_ESP32S2_FactoryTest/Feather_ESP32S2_FactoryTest.ino b/Factory_Tests/Feather_ESP32S2_FactoryTest/Feather_ESP32S2_FactoryTest.ino
new file mode 100644
index 000000000..5c7066bc5
--- /dev/null
+++ b/Factory_Tests/Feather_ESP32S2_FactoryTest/Feather_ESP32S2_FactoryTest.ino
@@ -0,0 +1,102 @@
+// SPDX-FileCopyrightText: 2022 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include "Adafruit_MAX1704X.h"
+#include "Adafruit_LC709203F.h"
+#include
+#include "Adafruit_TestBed.h"
+#include
+
+Adafruit_BME280 bme; // I2C
+bool bmefound = false;
+extern Adafruit_TestBed TB;
+
+Adafruit_LC709203F lc_bat;
+Adafruit_MAX17048 max_bat;
+
+bool maxfound = false;
+bool lcfound = false;
+
+void setup() {
+ Serial.begin(115200);
+ // while (! Serial) delay(10);
+
+ delay(100);
+
+ pinMode(NEOPIXEL_POWER, OUTPUT);
+ digitalWrite(NEOPIXEL_POWER, HIGH);
+ delay(10);
+
+ TB.neopixelPin = PIN_NEOPIXEL;
+ TB.neopixelNum = 1;
+ TB.begin();
+ TB.setColor(WHITE);
+
+ if (lc_bat.begin()) {
+ Serial.println("Found LC709203F");
+ Serial.print("Version: 0x"); Serial.println(lc_bat.getICversion(), HEX);
+ lc_bat.setPackSize(LC709203F_APA_500MAH);
+ lcfound = true;
+ }
+ else {
+ Serial.println(F("Couldnt find Adafruit LC709203F?\nChecking for Adafruit MAX1704X.."));
+ delay(200);
+ if (!max_bat.begin()) {
+ Serial.println(F("Couldnt find Adafruit MAX1704X?\nMake sure a battery is plugged in!"));
+ while (1) delay(10);
+ }
+ Serial.print(F("Found MAX17048"));
+ Serial.print(F(" with Chip ID: 0x"));
+ Serial.println(max_bat.getChipID(), HEX);
+ maxfound = true;
+
+ }
+
+
+ if (TB.scanI2CBus(0x77)) {
+ Serial.println("BME280 address");
+
+ unsigned status = bme.begin();
+ if (!status) {
+ Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
+ Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
+ Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
+ Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
+ Serial.print(" ID of 0x60 represents a BME 280.\n");
+ Serial.print(" ID of 0x61 represents a BME 680.\n");
+ return;
+ }
+ Serial.println("BME280 found OK");
+ bmefound = true;
+ }
+}
+
+uint8_t j = 0;
+
+void loop() {
+
+ if (j % 10 == 0) {
+ Serial.println("**********************");
+ if (lcfound == true) {
+ Serial.print(F("Batt Voltage: "));
+ Serial.print(lc_bat.cellVoltage(), 1);
+ Serial.print(" V / ");
+ Serial.print(F("Batt Percent: "));
+ Serial.print(lc_bat.cellPercent(), 0);
+ Serial.println("%");
+ }
+ else {
+ Serial.print(F("Batt Voltage: "));
+ Serial.print(max_bat.cellVoltage(), 1);
+ Serial.print(" V / ");
+ Serial.print(F("Batt Percent: "));
+ Serial.print(max_bat.cellPercent(), 0);
+ Serial.println("%");
+ }
+ TB.printI2CBusScan();
+ }
+ TB.setColor(TB.Wheel(j++));
+ return;
+}
diff --git a/Factory_Tests/Feather_ESP32S2_ReverseTFT_FactoryTest/.feather_esp32s2_tft.test.only b/Factory_Tests/Feather_ESP32S2_ReverseTFT_FactoryTest/.feather_esp32s2_tft.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/Feather_ESP32S2_ReverseTFT_FactoryTest/Feather_ESP32S2_ReverseTFT_FactoryTest.ino b/Factory_Tests/Feather_ESP32S2_ReverseTFT_FactoryTest/Feather_ESP32S2_ReverseTFT_FactoryTest.ino
new file mode 100644
index 000000000..3c22e6421
--- /dev/null
+++ b/Factory_Tests/Feather_ESP32S2_ReverseTFT_FactoryTest/Feather_ESP32S2_ReverseTFT_FactoryTest.ino
@@ -0,0 +1,122 @@
+// SPDX-FileCopyrightText: 2022 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include "Adafruit_MAX1704X.h"
+#include
+#include "Adafruit_TestBed.h"
+#include
+#include
+#include
+
+Adafruit_BME280 bme; // I2C
+bool bmefound = false;
+extern Adafruit_TestBed TB;
+
+Adafruit_MAX17048 lipo;
+Adafruit_ST7789 display = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
+
+GFXcanvas16 canvas(240, 135);
+
+void setup() {
+ Serial.begin(115200);
+ //while (! Serial) delay(10);
+
+ delay(100);
+
+ TB.neopixelPin = PIN_NEOPIXEL;
+ TB.neopixelNum = 1;
+ TB.begin();
+ TB.setColor(WHITE);
+
+ display.init(135, 240); // Init ST7789 240x135
+ display.setRotation(3);
+ canvas.setFont(&FreeSans12pt7b);
+ canvas.setTextColor(ST77XX_WHITE);
+
+ if (!lipo.begin()) {
+ Serial.println(F("Couldnt find Adafruit MAX17048?\nMake sure a battery is plugged in!"));
+ while (1) delay(10);
+ }
+
+ Serial.print(F("Found MAX17048"));
+ Serial.print(F(" with Chip ID: 0x"));
+ Serial.println(lipo.getChipID(), HEX);
+
+ if (TB.scanI2CBus(0x77)) {
+ Serial.println("BME280 address");
+
+ unsigned status = bme.begin();
+ if (!status) {
+ Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
+ Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
+ Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
+ Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
+ Serial.print(" ID of 0x60 represents a BME 280.\n");
+ Serial.print(" ID of 0x61 represents a BME 680.\n");
+ return;
+ }
+ Serial.println("BME280 found OK");
+ bmefound = true;
+ }
+
+ pinMode(0, INPUT_PULLUP);
+ pinMode(1, INPUT_PULLDOWN);
+ pinMode(2, INPUT_PULLDOWN);
+}
+
+uint8_t j = 0;
+
+void loop() {
+ Serial.println("**********************");
+
+ TB.printI2CBusScan();
+
+ if (j % 2 == 0) {
+ canvas.fillScreen(ST77XX_BLACK);
+ canvas.setCursor(0, 17);
+ canvas.setTextColor(ST77XX_RED);
+ canvas.println("Adafruit Feather");
+ canvas.setTextColor(ST77XX_YELLOW);
+ canvas.println("ESP32-S2 TFT Demo");
+ canvas.setTextColor(ST77XX_GREEN);
+ canvas.print("Battery: ");
+ canvas.setTextColor(ST77XX_WHITE);
+ canvas.print(lipo.cellVoltage(), 1);
+ canvas.print(" V / ");
+ canvas.print(lipo.cellPercent(), 0);
+ canvas.println("%");
+ canvas.setTextColor(ST77XX_BLUE);
+ canvas.print("I2C: ");
+ canvas.setTextColor(ST77XX_WHITE);
+ for (uint8_t a=0x01; a<=0x7F; a++) {
+ if (TB.scanI2CBus(a, 0)) {
+ canvas.print("0x");
+ canvas.print(a, HEX);
+ canvas.print(", ");
+ }
+ }
+ canvas.println("");
+ canvas.print("Buttons: ");
+ Serial.println(digitalRead(0));
+ Serial.println(digitalRead(1));
+ Serial.println(digitalRead(2));
+ if (!digitalRead(0)) {
+ canvas.print("D0, ");
+ }
+ if (digitalRead(1)) {
+ canvas.print("D1, ");
+ }
+ if (digitalRead(2)) {
+ canvas.print("D2, ");
+ }
+ display.drawRGBBitmap(0, 0, canvas.getBuffer(), 240, 135);
+ pinMode(TFT_BACKLITE, OUTPUT);
+ digitalWrite(TFT_BACKLITE, HIGH);
+ }
+
+ TB.setColor(TB.Wheel(j++));
+ delay(10);
+ return;
+}
diff --git a/Factory_Tests/Feather_ESP32S2_TFT_FactoryTest/Feather_ESP32S2_TFT_FactoryTest.ino b/Factory_Tests/Feather_ESP32S2_TFT_FactoryTest/Feather_ESP32S2_TFT_FactoryTest.ino
index 69f1133c2..26e73d079 100644
--- a/Factory_Tests/Feather_ESP32S2_TFT_FactoryTest/Feather_ESP32S2_TFT_FactoryTest.ino
+++ b/Factory_Tests/Feather_ESP32S2_TFT_FactoryTest/Feather_ESP32S2_TFT_FactoryTest.ino
@@ -3,6 +3,7 @@
// SPDX-License-Identifier: MIT
#include
+#include "Adafruit_MAX1704X.h"
#include "Adafruit_LC709203F.h"
#include
#include "Adafruit_TestBed.h"
@@ -14,14 +15,19 @@ Adafruit_BME280 bme; // I2C
bool bmefound = false;
extern Adafruit_TestBed TB;
-Adafruit_LC709203F lc;
+Adafruit_LC709203F lc_bat;
+Adafruit_MAX17048 max_bat;
+
Adafruit_ST7789 display = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
GFXcanvas16 canvas(240, 135);
+bool maxfound = false;
+bool lcfound = false;
+
void setup() {
Serial.begin(115200);
- // while (! Serial) delay(10);
+ // while (! Serial) delay(10);
delay(100);
@@ -43,14 +49,25 @@ void setup() {
canvas.setFont(&FreeSans12pt7b);
canvas.setTextColor(ST77XX_WHITE);
- if (!lc.begin()) {
- Serial.println(F("Couldnt find Adafruit LC709203F?\nMake sure a battery is plugged in!"));
- while (1);
+ if (lc_bat.begin()) {
+ Serial.println("Found LC709203F");
+ Serial.print("Version: 0x"); Serial.println(lc_bat.getICversion(), HEX);
+ lc_bat.setPackSize(LC709203F_APA_500MAH);
+ lcfound = true;
}
+ else {
+ Serial.println(F("Couldnt find Adafruit LC709203F?\nChecking for Adafruit MAX1704X.."));
+ delay(200);
+ if (!max_bat.begin()) {
+ Serial.println(F("Couldnt find Adafruit MAX1704X?\nMake sure a battery is plugged in!"));
+ while (1) delay(10);
+ }
+ Serial.print(F("Found MAX17048"));
+ Serial.print(F(" with Chip ID: 0x"));
+ Serial.println(max_bat.getChipID(), HEX);
+ maxfound = true;
- Serial.println("Found LC709203F");
- Serial.print("Version: 0x"); Serial.println(lc.getICversion(), HEX);
- lc.setPackSize(LC709203F_APA_500MAH);
+ }
if (TB.scanI2CBus(0x77)) {
Serial.println("BME280 address");
@@ -73,11 +90,11 @@ void setup() {
uint8_t j = 0;
void loop() {
- Serial.println("**********************");
-
- TB.printI2CBusScan();
if (j % 5 == 0) {
+ Serial.println("**********************");
+
+ TB.printI2CBusScan();
canvas.fillScreen(ST77XX_BLACK);
canvas.setCursor(0, 25);
canvas.setTextColor(ST77XX_RED);
@@ -87,10 +104,18 @@ void loop() {
canvas.setTextColor(ST77XX_GREEN);
canvas.print("Battery: ");
canvas.setTextColor(ST77XX_WHITE);
- canvas.print(lc.cellVoltage(), 1);
- canvas.print(" V / ");
- canvas.print(lc.cellPercent(), 0);
- canvas.println("%");
+ if (lcfound == true) {
+ canvas.print(lc_bat.cellVoltage(), 1);
+ canvas.print(" V / ");
+ canvas.print(lc_bat.cellPercent(), 0);
+ canvas.println("%");
+ }
+ else {
+ canvas.print(max_bat.cellVoltage(), 1);
+ canvas.print(" V / ");
+ canvas.print(max_bat.cellPercent(), 0);
+ canvas.println("%");
+ }
canvas.setTextColor(ST77XX_BLUE);
canvas.print("I2C: ");
canvas.setTextColor(ST77XX_WHITE);
@@ -107,6 +132,5 @@ void loop() {
}
TB.setColor(TB.Wheel(j++));
- delay(10);
return;
}
diff --git a/Factory_Tests/Feather_ESP32S3_ReverseTFT_FactoryTest/.feather_esp32s3_tft.test.only b/Factory_Tests/Feather_ESP32S3_ReverseTFT_FactoryTest/.feather_esp32s3_tft.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/Feather_ESP32S3_ReverseTFT_FactoryTest/Feather_ESP32S3_ReverseTFT_FactoryTest.ino b/Factory_Tests/Feather_ESP32S3_ReverseTFT_FactoryTest/Feather_ESP32S3_ReverseTFT_FactoryTest.ino
new file mode 100644
index 000000000..0b91f359f
--- /dev/null
+++ b/Factory_Tests/Feather_ESP32S3_ReverseTFT_FactoryTest/Feather_ESP32S3_ReverseTFT_FactoryTest.ino
@@ -0,0 +1,134 @@
+// SPDX-FileCopyrightText: 2022 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include "Adafruit_MAX1704X.h"
+#include
+#include "Adafruit_TestBed.h"
+#include
+#include
+#include
+
+Adafruit_BME280 bme; // I2C
+bool bmefound = false;
+extern Adafruit_TestBed TB;
+
+Adafruit_MAX17048 lipo;
+Adafruit_ST7789 display = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
+
+GFXcanvas16 canvas(240, 135);
+
+void setup() {
+ Serial.begin(115200);
+ //while (! Serial) delay(10);
+ delay(100);
+
+ TB.neopixelPin = PIN_NEOPIXEL;
+ TB.neopixelNum = 1;
+ TB.begin();
+ TB.setColor(WHITE);
+
+ display.init(135, 240); // Init ST7789 240x135
+ display.setRotation(3);
+ canvas.setFont(&FreeSans12pt7b);
+ canvas.setTextColor(ST77XX_WHITE);
+
+ if (!lipo.begin()) {
+ Serial.println(F("Couldnt find Adafruit MAX17048?\nMake sure a battery is plugged in!"));
+ while (1) delay(10);
+ }
+
+ Serial.print(F("Found MAX17048"));
+ Serial.print(F(" with Chip ID: 0x"));
+ Serial.println(lipo.getChipID(), HEX);
+
+ if (TB.scanI2CBus(0x77)) {
+ Serial.println("BME280 address");
+
+ unsigned status = bme.begin();
+ if (!status) {
+ Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
+ Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
+ Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
+ Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
+ Serial.print(" ID of 0x60 represents a BME 280.\n");
+ Serial.print(" ID of 0x61 represents a BME 680.\n");
+ return;
+ }
+ Serial.println("BME280 found OK");
+ bmefound = true;
+ }
+
+ pinMode(0, INPUT_PULLUP);
+ pinMode(1, INPUT_PULLDOWN);
+ pinMode(2, INPUT_PULLDOWN);
+}
+
+int j = 0;
+
+void loop() {
+ bool valid_i2c[128];
+ Serial.println("**********************");
+
+ if (j == 0) {
+ Serial.print("I2C scan: ");
+ for (int i=0; i< 128; i++) {
+ if (TB.scanI2CBus(i, 0)) {
+ Serial.print("0x");
+ Serial.print(i, HEX);
+ Serial.print(", ");
+ valid_i2c[i] = true;
+ } else {
+ valid_i2c[i] = false;
+ }
+ }
+ }
+
+ if (j % 2 == 0) {
+ canvas.fillScreen(ST77XX_BLACK);
+ canvas.setCursor(0, 17);
+ canvas.setTextColor(ST77XX_RED);
+ canvas.println("Adafruit Feather");
+ canvas.setTextColor(ST77XX_YELLOW);
+ canvas.println("ESP32-S3 TFT Demo");
+ canvas.setTextColor(ST77XX_GREEN);
+ canvas.print("Battery: ");
+ canvas.setTextColor(ST77XX_WHITE);
+ canvas.print(lipo.cellVoltage(), 1);
+ canvas.print(" V / ");
+ canvas.print(lipo.cellPercent(), 0);
+ canvas.println("%");
+ canvas.setTextColor(ST77XX_BLUE);
+ canvas.print("I2C: ");
+ canvas.setTextColor(ST77XX_WHITE);
+ for (uint8_t a=0x01; a<=0x7F; a++) {
+ if (valid_i2c[a]) {
+ canvas.print("0x");
+ canvas.print(a, HEX);
+ canvas.print(", ");
+ }
+ }
+ canvas.println("");
+ canvas.print("Buttons: ");
+ Serial.println(digitalRead(0));
+ Serial.println(digitalRead(1));
+ Serial.println(digitalRead(2));
+ if (!digitalRead(0)) {
+ canvas.print("D0, ");
+ }
+ if (digitalRead(1)) {
+ canvas.print("D1, ");
+ }
+ if (digitalRead(2)) {
+ canvas.print("D2, ");
+ }
+ display.drawRGBBitmap(0, 0, canvas.getBuffer(), 240, 135);
+ pinMode(TFT_BACKLITE, OUTPUT);
+ digitalWrite(TFT_BACKLITE, HIGH);
+ }
+
+ TB.setColor(TB.Wheel(j++));
+ delay(10);
+ return;
+}
diff --git a/Factory_Tests/Feather_ESP32S3_TFT_FactoryTest/Feather_ESP32S3_TFT_FactoryTest.ino b/Factory_Tests/Feather_ESP32S3_TFT_FactoryTest/Feather_ESP32S3_TFT_FactoryTest.ino
index 29b9f8a88..7a6b4e0cc 100644
--- a/Factory_Tests/Feather_ESP32S3_TFT_FactoryTest/Feather_ESP32S3_TFT_FactoryTest.ino
+++ b/Factory_Tests/Feather_ESP32S3_TFT_FactoryTest/Feather_ESP32S3_TFT_FactoryTest.ino
@@ -3,6 +3,7 @@
// SPDX-License-Identifier: MIT
#include
+#include "Adafruit_MAX1704X.h"
#include "Adafruit_LC709203F.h"
#include
#include "Adafruit_TestBed.h"
@@ -14,14 +15,19 @@ Adafruit_BME280 bme; // I2C
bool bmefound = false;
extern Adafruit_TestBed TB;
-Adafruit_LC709203F lc;
+Adafruit_LC709203F lc_bat;
+Adafruit_MAX17048 max_bat;
+
Adafruit_ST7789 display = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
GFXcanvas16 canvas(240, 135);
+bool maxfound = false;
+bool lcfound = false;
+
void setup() {
Serial.begin(115200);
- // while (! Serial) delay(10);
+ // while (! Serial) delay(10);
delay(100);
@@ -42,15 +48,26 @@ void setup() {
display.setRotation(3);
canvas.setFont(&FreeSans12pt7b);
canvas.setTextColor(ST77XX_WHITE);
-
- if (!lc.begin()) {
- Serial.println(F("Couldnt find Adafruit LC709203F?\nMake sure a battery is plugged in!"));
- while (1);
+ if (lc_bat.begin()) {
+ Serial.println("Found LC709203F");
+ Serial.print("Version: 0x"); Serial.println(lc_bat.getICversion(), HEX);
+ lc_bat.setPackSize(LC709203F_APA_500MAH);
+ lcfound = true;
}
+ else {
+ Serial.println(F("Couldnt find Adafruit LC709203F?\nChecking for Adafruit MAX1704X.."));
+ delay(200);
+ if (!max_bat.begin()) {
+ Serial.println(F("Couldnt find Adafruit MAX1704X?\nMake sure a battery is plugged in!"));
+ while (1) delay(10);
+ }
+ Serial.print(F("Found MAX17048"));
+ Serial.print(F(" with Chip ID: 0x"));
+ Serial.println(max_bat.getChipID(), HEX);
+ maxfound = true;
- Serial.println("Found LC709203F");
- Serial.print("Version: 0x"); Serial.println(lc.getICversion(), HEX);
- lc.setPackSize(LC709203F_APA_500MAH);
+ }
+
if (TB.scanI2CBus(0x77)) {
Serial.println("BME280 address");
@@ -87,10 +104,18 @@ void loop() {
canvas.setTextColor(ST77XX_GREEN);
canvas.print("Battery: ");
canvas.setTextColor(ST77XX_WHITE);
- canvas.print(lc.cellVoltage(), 1);
- canvas.print(" V / ");
- canvas.print(lc.cellPercent(), 0);
- canvas.println("%");
+ if (lcfound == true) {
+ canvas.print(lc_bat.cellVoltage(), 1);
+ canvas.print(" V / ");
+ canvas.print(lc_bat.cellPercent(), 0);
+ canvas.println("%");
+ }
+ else {
+ canvas.print(max_bat.cellVoltage(), 1);
+ canvas.print(" V / ");
+ canvas.print(max_bat.cellPercent(), 0);
+ canvas.println("%");
+ }
canvas.setTextColor(ST77XX_BLUE);
canvas.print("I2C: ");
canvas.setTextColor(ST77XX_WHITE);
@@ -109,4 +134,4 @@ void loop() {
TB.setColor(TB.Wheel(j++));
delay(10);
return;
-}
+}
\ No newline at end of file
diff --git a/Factory_Tests/Feather_RP2040_RFM69/.feather_rp2040_rfm.test.only b/Factory_Tests/Feather_RP2040_RFM69/.feather_rp2040_rfm.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/Feather_RP2040_RFM69/Feather_RP2040_RFM69.ino b/Factory_Tests/Feather_RP2040_RFM69/Feather_RP2040_RFM69.ino
new file mode 100644
index 000000000..551ff69a6
--- /dev/null
+++ b/Factory_Tests/Feather_RP2040_RFM69/Feather_RP2040_RFM69.ino
@@ -0,0 +1,59 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// rf69 demo tx rx.pde
+// -*- mode: C++ -*-
+// Example sketch showing how to create a simple messageing client
+// with the RH_RF69 class. RH_RF69 class does not provide for addressing or
+// reliability, so you should only use RH_RF69 if you do not need the higher
+// level messaging abilities.
+// It is designed to work with the other example rf69_server.
+// Demonstrates the use of AES encryption, setting the frequency and modem
+// configuration
+
+#include
+#include "Adafruit_TestBed.h"
+
+extern Adafruit_TestBed TB;
+
+// Singleton instance of the radio driver
+RH_RF69 rf69(PIN_RFM_CS, PIN_RFM_DIO0);
+
+void setup()
+{
+ Serial.begin(115200);
+
+ pinMode(PIN_LED, OUTPUT);
+ pinMode(PIN_RFM_RST, OUTPUT);
+ digitalWrite(PIN_RFM_RST, LOW);
+
+ TB.neopixelPin = PIN_NEOPIXEL;
+ TB.neopixelNum = 1;
+ TB.begin();
+
+ Serial.println("Feather RFM69 Feather Self-test!");
+ Serial.println();
+}
+
+uint8_t x = 0;
+
+void loop() {
+ TB.setColor(TB.Wheel(x++));
+
+ if (x == 255) {
+ // manual reset
+ digitalWrite(PIN_RFM_RST, HIGH);
+ delay(10);
+ digitalWrite(PIN_RFM_RST, LOW);
+ delay(10);
+
+ if (!rf69.init()) {
+ Serial.println("RFM69 radio init failed");
+ while (1);
+ }
+ Serial.println("RFM69 radio init OK!");
+ }
+
+ delay(10);
+}
diff --git a/Factory_Tests/MatrixPortal_S3_FactoryTest/.matrixportal_s3.test.only b/Factory_Tests/MatrixPortal_S3_FactoryTest/.matrixportal_s3.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/MatrixPortal_S3_FactoryTest/MatrixPortal_S3_FactoryTest.ino b/Factory_Tests/MatrixPortal_S3_FactoryTest/MatrixPortal_S3_FactoryTest.ino
new file mode 100644
index 000000000..0e8957950
--- /dev/null
+++ b/Factory_Tests/MatrixPortal_S3_FactoryTest/MatrixPortal_S3_FactoryTest.ino
@@ -0,0 +1,134 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include
+#include
+#include
+#include
+
+
+extern Adafruit_TestBed TB;
+Adafruit_LIS3DH lis = Adafruit_LIS3DH();
+
+uint8_t mcp1_matrix_pins[8] = {45, 21, 37, 39, 38, 40, 41, 42}; // A, E, B2, G2, R2, B1, G1, R1
+uint8_t mcp2_matrix_pins[8] = {12, 14, 47, 2, 255, 35, 48, 36}; // A0, OE, LAT, CLK, NC, D, C, B
+#define LIGHT_SENSOR 5
+
+int32_t total_time;
+
+bool matrixpinsOK = false, accelOK = false, gpioOK = false, jstOK = false, wifiOK = false, testMode = false, lightOK = false;
+uint8_t j=0;
+
+uint8_t rgbPins[] = {42, 41, 40, 38, 39, 37};
+uint8_t addrPins[] = {45, 36, 48, 35, 21};
+uint8_t clockPin = 2;
+uint8_t latchPin = 47;
+uint8_t oePin = 14;
+Adafruit_Protomatter matrix(
+ 64, // Width of matrix (or matrix chain) in pixels
+ 4, // Bit depth, 1-6
+ 1, rgbPins, // # of matrix chains, array of 6 RGB pins for each
+ 4, addrPins, // # of address pins (height is inferred), array of pins
+ clockPin, latchPin, oePin, // Other matrix control pins
+ false); // No double-buffering here (see "doublebuffer" example)
+
+
+void setup() {
+ Serial.begin(115200);
+ //while (!Serial) delay(10);
+
+ TB.ledPin = LED_BUILTIN;
+ TB.neopixelPin = PIN_NEOPIXEL;
+ TB.neopixelNum = 1;
+ TB.begin();
+
+ total_time = millis();
+
+ WiFi.softAPIP();
+ WiFi.softAP("Matrix Portal ESP32-S3", "adafruit");
+
+ if (! testMode) {
+ // Initialize matrix...
+ ProtomatterStatus status = matrix.begin();
+ Serial.print("Protomatter begin() status: ");
+ Serial.println((int)status);
+ if(status != PROTOMATTER_OK) {
+ // DO NOT CONTINUE if matrix setup encountered an error.
+ for(;;);
+ }
+ // Make four color bars (red, green, blue, white) with brightness ramp:
+ for(int x=0; x 32) {
+ matrix.setCursor(0, 32);
+ matrix.println("64 pixel"); // Default text color is white
+ matrix.println("matrix"); // Default text color is white
+ }
+
+ // AFTER DRAWING, A show() CALL IS REQUIRED TO UPDATE THE MATRIX!
+
+ matrix.show(); // Copy data to matrix buffers
+ }
+ pinMode(LIGHT_SENSOR, INPUT);
+}
+
+
+
+void loop() {
+ if (!testMode) {
+ if (j == 64) {
+ TB.printI2CBusScan();
+ }
+
+ if (j == 255) {
+ TB.setColor(WHITE);
+ pinMode(13, OUTPUT);
+ digitalWrite(13, HIGH);
+ Serial.println("scan start");
+ // WiFi.scanNetworks will return the number of networks found
+ int n = WiFi.scanNetworks();
+ Serial.println("scan done");
+ if (n == 0) {
+ Serial.println("no networks found");
+ } else {
+ Serial.print(n);
+ Serial.println(" networks found");
+ for (int i = 0; i < n; ++i) {
+ // Print SSID and RSSI for each network found
+ Serial.print(i + 1);
+ Serial.print(": ");
+ Serial.print(WiFi.SSID(i));
+ Serial.print(" (");
+ Serial.print(WiFi.RSSI(i));
+ Serial.print(")");
+ Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
+ delay(10);
+ }
+ }
+ Serial.println("");
+ digitalWrite(13, LOW);
+ }
+
+ TB.setColor(TB.Wheel(j++));
+ delay(10);
+ return;
+ }
+ delay(100);
+
+}
diff --git a/Factory_Tests/Qualia_ESP32S3_RGB666_FactoryTest/.none.test.only b/Factory_Tests/Qualia_ESP32S3_RGB666_FactoryTest/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/Qualia_ESP32S3_RGB666_FactoryTest/Qualia_ESP32S3_RGB666_FactoryTest.ino b/Factory_Tests/Qualia_ESP32S3_RGB666_FactoryTest/Qualia_ESP32S3_RGB666_FactoryTest.ino
new file mode 100644
index 000000000..d63ab4373
--- /dev/null
+++ b/Factory_Tests/Qualia_ESP32S3_RGB666_FactoryTest/Qualia_ESP32S3_RGB666_FactoryTest.ino
@@ -0,0 +1,166 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include
+#include
+
+Arduino_XCA9554SWSPI *expander = new Arduino_XCA9554SWSPI(
+ PCA_TFT_RESET, PCA_TFT_CS, PCA_TFT_SCK, PCA_TFT_MOSI,
+ &Wire, 0x3F);
+
+Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
+ TFT_DE, TFT_VSYNC, TFT_HSYNC, TFT_PCLK,
+ TFT_R1, TFT_R2, TFT_R3, TFT_R4, TFT_R5,
+ TFT_G0, TFT_G1, TFT_G2, TFT_G3, TFT_G4, TFT_G5,
+ TFT_B1, TFT_B2, TFT_B3, TFT_B4, TFT_B5,
+ 1 /* hsync_polarity */, 50 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
+ 1 /* vsync_polarity */, 16 /* vsync_front_porch */, 2 /* vsync_pulse_width */, 18 /* vsync_back_porch */
+// ,1, 30000000
+ );
+
+Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
+// 2.1" 480x480 round display
+ 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+ expander, GFX_NOT_DEFINED /* RST */, TL021WVC02_init_operations, sizeof(TL021WVC02_init_operations));
+
+// 2.8" 480x480 round display
+// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, TL028WVC01_init_operations, sizeof(TL028WVC01_init_operations));
+
+// 3.4" 480x480 square display
+// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, tl034wvs05_b1477a_init_operations, sizeof(tl034wvs05_b1477a_init_operations));
+
+// 3.2" 320x820 rectangle bar display
+// 320 /* width */, 820 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, tl032fwv01_init_operations, sizeof(tl032fwv01_init_operations));
+
+// 4.0" 720x720 square display
+// 720 /* width */, 720 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, NULL, 0);
+
+// 4.0" 720x720 round display
+// 720 /* width */, 720 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, hd40015c40_init_operations, sizeof(hd40015c40_init_operations));
+// needs also the rgbpanel to have these pulse/sync values:
+// 1 /* hync_polarity */, 46 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
+// 1 /* vsync_polarity */, 50 /* vsync_front_porch */, 16 /* vsync_pulse_width */, 16 /* vsync_back_porch */
+
+uint16_t *colorWheel;
+
+// The Capacitive touchscreen overlays uses hardware I2C (SCL/SDA)
+
+// Most touchscreens use FocalTouch with I2C Address often but not always 0x48!
+#define I2C_TOUCH_ADDR 0x48
+
+// 2.1" 480x480 round display use CST826 touchscreen with I2C Address at 0x15
+//#define I2C_TOUCH_ADDR 0x15 // often but not always 0x48!
+
+Adafruit_FT6206 focal_ctp = Adafruit_FT6206(); // this library also supports FT5336U!
+Adafruit_CST8XX cst_ctp = Adafruit_CST8XX();
+bool touchOK = false; // we will check if the touchscreen exists
+bool isFocalTouch = false;
+
+void setup(void)
+{
+ Serial.begin(115200);
+ //while (!Serial) delay(100);
+
+#ifdef GFX_EXTRA_PRE_INIT
+ GFX_EXTRA_PRE_INIT();
+#endif
+
+ Serial.println("Beginning");
+ // Init Display
+
+ Wire.setClock(1000000); // speed up I2C
+ if (!gfx->begin()) {
+ Serial.println("gfx->begin() failed!");
+ }
+
+ Serial.println("Initialized!");
+
+ gfx->fillScreen(BLACK);
+
+ expander->pinMode(PCA_TFT_BACKLIGHT, OUTPUT);
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
+
+ colorWheel = (uint16_t *) ps_malloc(gfx->width() * gfx->height() * sizeof(uint16_t));
+ if (colorWheel) {
+ generateColorWheel(colorWheel);
+ gfx->draw16bitRGBBitmap(0, 0, colorWheel, gfx->width(), gfx->height());
+ }
+
+ if (!focal_ctp.begin(0, &Wire, I2C_TOUCH_ADDR)) {
+ // Try the CST826 Touch Screen
+ if (!cst_ctp.begin(&Wire, I2C_TOUCH_ADDR)) {
+ Serial.print("No Touchscreen found at address 0x");
+ Serial.println(I2C_TOUCH_ADDR, HEX);
+ touchOK = false;
+ } else {
+ Serial.println("CST826 Touchscreen found");
+ touchOK = true;
+ isFocalTouch = false;
+ }
+ } else {
+ Serial.println("Focal Touchscreen found");
+ touchOK = true;
+ isFocalTouch = true;
+ }
+}
+
+void loop()
+{
+ if (touchOK) {
+ if (isFocalTouch && focal_ctp.touched()) {
+ TS_Point p = focal_ctp.getPoint(0);
+ Serial.printf("(%d, %d)\n", p.x, p.y);
+ gfx->fillRect(p.x, p.y, 5, 5, WHITE);
+ } else if (!isFocalTouch && cst_ctp.touched()) {
+ CST_TS_Point p = cst_ctp.getPoint(0);
+ Serial.printf("(%d, %d)\n", p.x, p.y);
+ gfx->fillRect(p.x, p.y, 5, 5, WHITE);
+ }
+ }
+
+ // use the buttons to turn off
+ if (! expander->digitalRead(PCA_BUTTON_DOWN)) {
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, LOW);
+ }
+ // and on the backlight
+ if (! expander->digitalRead(PCA_BUTTON_UP)) {
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
+ }
+}
+
+// https://chat.openai.com/share/8edee522-7875-444f-9fea-ae93a8dfa4ec
+void generateColorWheel(uint16_t *colorWheel) {
+ int width = gfx->width();
+ int height = gfx->height();
+ int half_width = width / 2;
+ int half_height = height / 2;
+ float angle;
+ uint8_t r, g, b;
+ int index, scaled_index;
+
+ for(int y = 0; y < half_height; y++) {
+ for(int x = 0; x < half_width; x++) {
+ index = y * half_width + x;
+ angle = atan2(y - half_height / 2, x - half_width / 2);
+ r = uint8_t(127.5 * (cos(angle) + 1));
+ g = uint8_t(127.5 * (sin(angle) + 1));
+ b = uint8_t(255 - (r + g) / 2);
+ uint16_t color = RGB565(r, g, b);
+
+ // Scale this pixel into 4 pixels in the full buffer
+ for(int dy = 0; dy < 2; dy++) {
+ for(int dx = 0; dx < 2; dx++) {
+ scaled_index = (y * 2 + dy) * width + (x * 2 + dx);
+ colorWheel[scaled_index] = color;
+ }
+ }
+ }
+ }
+}
diff --git a/Factory_Tests/USB_Host_FeatherWing/.feather_esp32s2_tft.test.only b/Factory_Tests/USB_Host_FeatherWing/.feather_esp32s2_tft.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Factory_Tests/USB_Host_FeatherWing/USB_Host_FeatherWing.ino b/Factory_Tests/USB_Host_FeatherWing/USB_Host_FeatherWing.ino
new file mode 100644
index 000000000..c4c8aad79
--- /dev/null
+++ b/Factory_Tests/USB_Host_FeatherWing/USB_Host_FeatherWing.ino
@@ -0,0 +1,251 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include "Adafruit_TinyUSB.h"
+#include "Adafruit_ST7789.h"
+
+// USB Host using MAX3421E: SPI, CS, INT
+Adafruit_USBH_Host USBHost(&SPI, 10, 9);
+Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
+void display_device_descriptor(tuh_xfer_t *xfer);
+
+#define LANGUAGE_ID 0x0409
+
+typedef struct {
+ tusb_desc_device_t desc_device;
+ uint16_t manufacturer[32];
+ uint16_t product[48];
+ uint16_t serial[16];
+ bool mounted;
+} dev_info_t;
+
+// CFG_TUH_DEVICE_MAX is defined by tusb_config header
+dev_info_t dev_info[CFG_TUH_DEVICE_MAX] = { 0 };
+
+void setup() {
+ Serial.begin(115200);
+ //while ( !Serial ) delay(10); // wait for native usb
+
+ pinMode(TFT_BACKLITE, OUTPUT);
+ digitalWrite(TFT_BACKLITE, HIGH);
+
+ // turn on the TFT / I2C power supply
+ pinMode(TFT_I2C_POWER, OUTPUT);
+ digitalWrite(TFT_I2C_POWER, HIGH);
+ delay(10);
+
+ tft.init(135, 240); // Init ST7789 240x135
+ tft.setRotation(3);
+ tft.fillScreen(ST77XX_BLUE);
+ digitalWrite(TFT_BACKLITE, HIGH);
+
+ Serial.println("TinyUSB USB Host FeatherWing Tester");
+
+ USBHost.begin(1);
+
+ // FeatherWing USB Host use MAX3421E's GPIO0 as VBUS enable (active high)
+ USBHost.max3421_writeIOPINS1(0x01, false);
+}
+
+
+void loop() {
+ USBHost.task();
+ Serial.flush();
+}
+
+
+//--------------------------------------------------------------------+
+// TinyUSB Host callbacks
+//--------------------------------------------------------------------+
+void print_device_descriptor(tuh_xfer_t *xfer);
+
+void utf16_to_utf8(uint16_t *temp_buf, size_t buf_len);
+
+void print_lsusb(void) {
+ bool no_device = true;
+ for (uint8_t daddr = 1; daddr < CFG_TUH_DEVICE_MAX + 1; daddr++) {
+ // TODO can use tuh_mounted(daddr), but tinyusb has an bug
+ // use local connected flag instead
+ dev_info_t *dev = &dev_info[daddr - 1];
+ if (dev->mounted) {
+ Serial.printf("Device %u: ID %04x:%04x %s %s\r\n", daddr,
+ dev->desc_device.idVendor, dev->desc_device.idProduct,
+ (char *) dev->manufacturer, (char *) dev->product);
+
+ no_device = false;
+ }
+ }
+
+ if (no_device) {
+ Serial.println("No device connected (except hub)");
+ }
+}
+
+// Invoked when device is mounted (configured)
+void tuh_mount_cb(uint8_t daddr) {
+ Serial.printf("Device attached, address = %d\r\n", daddr);
+
+ dev_info_t *dev = &dev_info[daddr - 1];
+ dev->mounted = true;
+
+ // Get Device Descriptor
+ tuh_descriptor_get_device(daddr, &dev->desc_device, 18, print_device_descriptor, 0);
+}
+
+/// Invoked when device is unmounted (bus reset/unplugged)
+void tuh_umount_cb(uint8_t daddr) {
+ Serial.printf("Device removed, address = %d\r\n", daddr);
+ dev_info_t *dev = &dev_info[daddr - 1];
+ dev->mounted = false;
+
+ // print device summary
+ print_lsusb();
+ tft.fillScreen(ST77XX_BLACK); // Clear the screen
+}
+
+void print_device_descriptor(tuh_xfer_t *xfer) {
+ if (XFER_RESULT_SUCCESS != xfer->result) {
+ Serial.printf("Failed to get device descriptor\r\n");
+ return;
+ }
+
+ uint8_t const daddr = xfer->daddr;
+ dev_info_t *dev = &dev_info[daddr - 1];
+ tusb_desc_device_t *desc = &dev->desc_device;
+
+ Serial.printf("Device %u: ID %04x:%04x\r\n", daddr, desc->idVendor, desc->idProduct);
+ Serial.printf("Device Descriptor:\r\n");
+ Serial.printf(" bLength %u\r\n" , desc->bLength);
+ Serial.printf(" bDescriptorType %u\r\n" , desc->bDescriptorType);
+ Serial.printf(" bcdUSB %04x\r\n" , desc->bcdUSB);
+ Serial.printf(" bDeviceClass %u\r\n" , desc->bDeviceClass);
+ Serial.printf(" bDeviceSubClass %u\r\n" , desc->bDeviceSubClass);
+ Serial.printf(" bDeviceProtocol %u\r\n" , desc->bDeviceProtocol);
+ Serial.printf(" bMaxPacketSize0 %u\r\n" , desc->bMaxPacketSize0);
+ Serial.printf(" idVendor 0x%04x\r\n" , desc->idVendor);
+ Serial.printf(" idProduct 0x%04x\r\n" , desc->idProduct);
+ Serial.printf(" bcdDevice %04x\r\n" , desc->bcdDevice);
+
+ // Get String descriptor using Sync API
+ Serial.printf(" iManufacturer %u ", desc->iManufacturer);
+ if (XFER_RESULT_SUCCESS ==
+ tuh_descriptor_get_manufacturer_string_sync(daddr, LANGUAGE_ID, dev->manufacturer, sizeof(dev->manufacturer))) {
+ utf16_to_utf8(dev->manufacturer, sizeof(dev->manufacturer));
+ Serial.printf((char *) dev->manufacturer);
+ }
+ Serial.printf("\r\n");
+
+ Serial.printf(" iProduct %u ", desc->iProduct);
+ if (XFER_RESULT_SUCCESS ==
+ tuh_descriptor_get_product_string_sync(daddr, LANGUAGE_ID, dev->product, sizeof(dev->product))) {
+ utf16_to_utf8(dev->product, sizeof(dev->product));
+ Serial.printf((char *) dev->product);
+ }
+ Serial.printf("\r\n");
+
+ Serial.printf(" iSerialNumber %u ", desc->iSerialNumber);
+ if (XFER_RESULT_SUCCESS ==
+ tuh_descriptor_get_serial_string_sync(daddr, LANGUAGE_ID, dev->serial, sizeof(dev->serial))) {
+ utf16_to_utf8(dev->serial, sizeof(dev->serial));
+ Serial.printf((char *) dev->serial);
+ }
+ Serial.printf("\r\n");
+
+ Serial.printf(" bNumConfigurations %u\r\n", desc->bNumConfigurations);
+
+ // print device summary
+ print_lsusb();
+
+ display_device_descriptor(xfer);
+}
+
+
+void display_device_descriptor(tuh_xfer_t *xfer) {
+ if (XFER_RESULT_SUCCESS != xfer->result) {
+ tft.println("Failed to get device descriptor");
+ return;
+ }
+
+ uint8_t const daddr = xfer->daddr;
+ dev_info_t *dev = &dev_info[daddr - 1];
+ tusb_desc_device_t *desc = &dev->desc_device;
+
+ tft.fillScreen(ST77XX_BLACK); // Clear the screen
+ tft.setCursor(0, 0);
+ tft.setTextWrap(true);
+ tft.setTextSize(3);
+
+ tft.setTextColor(ST77XX_GREEN);
+ tft.println("USB Found:");
+ tft.setTextColor(ST77XX_WHITE);
+ tft.printf("ID %04x:%04x\n", desc->idVendor, desc->idProduct);
+
+ if (XFER_RESULT_SUCCESS ==
+ tuh_descriptor_get_manufacturer_string_sync(daddr, LANGUAGE_ID, dev->manufacturer, sizeof(dev->manufacturer))) {
+ utf16_to_utf8(dev->manufacturer, sizeof(dev->manufacturer));
+ tft.setTextColor(ST77XX_YELLOW);
+ tft.println((char *)dev->manufacturer);
+ }
+
+ if (XFER_RESULT_SUCCESS ==
+ tuh_descriptor_get_product_string_sync(daddr, LANGUAGE_ID, dev->product, sizeof(dev->product))) {
+ utf16_to_utf8(dev->product, sizeof(dev->product));
+ tft.setTextColor(ST77XX_BLUE);
+ tft.println((char *)dev->product);
+ }
+
+ // Additional device descriptor details can be displayed here as needed
+}
+
+
+//--------------------------------------------------------------------+
+// String Descriptor Helper
+//--------------------------------------------------------------------+
+
+static void _convert_utf16le_to_utf8(const uint16_t *utf16, size_t utf16_len, uint8_t *utf8, size_t utf8_len) {
+ // TODO: Check for runover.
+ (void) utf8_len;
+ // Get the UTF-16 length out of the data itself.
+
+ for (size_t i = 0; i < utf16_len; i++) {
+ uint16_t chr = utf16[i];
+ if (chr < 0x80) {
+ *utf8++ = chr & 0xff;
+ } else if (chr < 0x800) {
+ *utf8++ = (uint8_t) (0xC0 | (chr >> 6 & 0x1F));
+ *utf8++ = (uint8_t) (0x80 | (chr >> 0 & 0x3F));
+ } else {
+ // TODO: Verify surrogate.
+ *utf8++ = (uint8_t) (0xE0 | (chr >> 12 & 0x0F));
+ *utf8++ = (uint8_t) (0x80 | (chr >> 6 & 0x3F));
+ *utf8++ = (uint8_t) (0x80 | (chr >> 0 & 0x3F));
+ }
+ // TODO: Handle UTF-16 code points that take two entries.
+ }
+}
+
+// Count how many bytes a utf-16-le encoded string will take in utf-8.
+static int _count_utf8_bytes(const uint16_t *buf, size_t len) {
+ size_t total_bytes = 0;
+ for (size_t i = 0; i < len; i++) {
+ uint16_t chr = buf[i];
+ if (chr < 0x80) {
+ total_bytes += 1;
+ } else if (chr < 0x800) {
+ total_bytes += 2;
+ } else {
+ total_bytes += 3;
+ }
+ // TODO: Handle UTF-16 code points that take two entries.
+ }
+ return total_bytes;
+}
+
+void utf16_to_utf8(uint16_t *temp_buf, size_t buf_len) {
+ size_t utf16_len = ((temp_buf[0] & 0xff) - 2) / sizeof(uint16_t);
+ size_t utf8_len = _count_utf8_bytes(temp_buf + 1, utf16_len);
+
+ _convert_utf16le_to_utf8(temp_buf + 1, utf16_len, (uint8_t *) temp_buf, buf_len);
+ ((uint8_t *) temp_buf)[utf8_len] = '\0';
+}
diff --git a/Faderwave_Synth/code.py b/Faderwave_Synth/code.py
new file mode 100644
index 000000000..5f4579e4f
--- /dev/null
+++ b/Faderwave_Synth/code.py
@@ -0,0 +1,315 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 john park for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+''' Faderwave Synthesizer
+ use 16 faders to create the single cycle waveform
+ rotary encoder adjusts other synth parameters
+ audio output: line level over 3.5mm TRS
+ optional CV output via DAC '''
+
+import board
+import busio
+import ulab.numpy as np
+import rotaryio
+from digitalio import DigitalInOut, Pull
+import displayio
+from adafruit_display_text import label
+from adafruit_display_shapes.rect import Rect
+import terminalio
+import synthio
+import audiomixer
+from adafruit_debouncer import Debouncer
+import adafruit_ads7830.ads7830 as ADC
+from adafruit_ads7830.analog_in import AnalogIn
+import adafruit_displayio_ssd1306
+import adafruit_ad569x
+import usb_midi
+import adafruit_midi
+from adafruit_midi.note_on import NoteOn
+from adafruit_midi.note_off import NoteOff
+
+displayio.release_displays()
+
+DEBUG = False # turn on print debugging messages
+ITSY_TYPE = 0 # Pick your ItsyBitsy: 0=M4, 1=RP2040
+
+# neopixel setup for RP2040 only
+if ITSY_TYPE == 1:
+ import neopixel
+ pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.3)
+ pixel.fill(0x004444)
+
+i2c = busio.I2C(board.SCL, board.SDA, frequency=1_000_000)
+
+midi = adafruit_midi.MIDI(midi_in=usb_midi.ports[0], in_channel=0)
+
+NUM_FADERS = 16
+num_oscs = 1 # how many oscillators for each note to start
+detune = 0.000 # how much to detune the oscillators
+volume = 0.6 # mixer volume
+lpf_freq = 12000 # user Low Pass Filter frequency setting
+lpf_basef = 500 # filter lowest frequency
+lpf_resonance = 0.1 # filter q
+
+faders_pos = [0] * NUM_FADERS
+last_faders_pos = [0] * NUM_FADERS
+
+# Initialize ADS7830
+adc_a = ADC.ADS7830(i2c, address=0x48) # default address 0x48
+adc_b = ADC.ADS7830(i2c, address=0x49) # A0 jumper 0x49, A1 0x4A
+
+faders = [] # list for fader objects on first ADC
+for fdr in range(8): # add first group to list
+ faders.append(AnalogIn(adc_a, fdr))
+for fdr in range(8): # add second group
+ faders.append(AnalogIn(adc_b, fdr))
+
+# Initialize AD5693R for CV out
+dac = adafruit_ad569x.Adafruit_AD569x(i2c)
+dac.gain = True
+dac.value = faders[0].value # set dac out to the slider level
+
+# Rotary encoder setup
+ENC_A = board.D9
+ENC_B = board.D10
+ENC_SW = board.D7
+
+button_in = DigitalInOut(ENC_SW) # defaults to input
+button_in.pull = Pull.UP # turn on internal pull-up resistor
+button = Debouncer(button_in)
+
+encoder = rotaryio.IncrementalEncoder(ENC_A, ENC_B)
+encoder_pos = encoder.position
+last_encoder_pos = encoder.position
+
+# display setup
+OLED_RST = board.D13
+OLED_DC = board.D12
+OLED_CS = board.D11
+
+spi = board.SPI()
+display_bus = displayio.FourWire(spi, command=OLED_DC, chip_select=OLED_CS,
+ reset=OLED_RST, baudrate=30_000_000)
+display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=64)
+
+# Create display group
+group = displayio.Group()
+
+# Set the font for the text label
+font = terminalio.FONT
+
+# Create text label
+title = label.Label(font, x=2, y=4, text=("FADERWAVE SYNTHESIZER"), color=0xffffff)
+group.append(title)
+
+column_x = (8, 60, 100)
+row_y = (22, 34, 46, 58)
+
+midi_lbl_rect = Rect(column_x[2]-3, row_y[0]-5, 28, 10, fill=0xffffff)
+group.append(midi_lbl_rect)
+midi_lbl = label.Label(font, x=column_x[2], y=row_y[0], text="MIDI", color=0x000000)
+group.append(midi_lbl)
+midi_rect = Rect(column_x[2]-3, row_y[1]-5, 28, 10, fill=0xffffff)
+group.append(midi_rect)
+midi_counter_lbl = label.Label(font, x=column_x[2]+8, y=row_y[1], text='-', color=0x000000)
+group.append(midi_counter_lbl)
+
+# Create menu selector
+menu_sel = 0
+menu_sel_txt = label.Label(font, text=(">"), color=0xffffff)
+menu_sel_txt.x = column_x[0]-10
+menu_sel_txt.y = row_y[menu_sel]
+group.append(menu_sel_txt)
+
+# Create detune text
+det_txt_a = label.Label(font, text=("Detune "), color=0xffffff)
+det_txt_a.x = column_x[0]
+det_txt_a.y = row_y[0]
+group.append(det_txt_a)
+
+det_txt_b = label.Label(font, text=(str(detune)), color=0xffffff)
+det_txt_b.x = column_x[1]
+det_txt_b.y = row_y[0]
+group.append(det_txt_b)
+
+# Create number of oscs text
+num_oscs_txt_a = label.Label(font, text=("Num Oscs "), color=0xffffff)
+num_oscs_txt_a.x = column_x[0]
+num_oscs_txt_a.y = row_y[1]
+group.append(num_oscs_txt_a)
+
+num_oscs_txt_b = label.Label(font, text=(str(num_oscs)), color=0xffffff)
+num_oscs_txt_b.x = column_x[1]
+num_oscs_txt_b.y = row_y[1]
+group.append(num_oscs_txt_b)
+
+# Create volume text
+vol_txt_a = label.Label(font, text=("Volume "), color=0xffffff)
+vol_txt_a.x = column_x[0]
+vol_txt_a.y = row_y[2]
+group.append(vol_txt_a)
+
+vol_txt_b = label.Label(font, text=(str(volume)), color=0xffffff)
+vol_txt_b.x = column_x[1]
+vol_txt_b.y = row_y[2]
+group.append(vol_txt_b)
+
+# Create lpf frequency text
+lpf_txt_a = label.Label(font, text=("LPF "), color=0xffffff)
+lpf_txt_a.x = column_x[0]
+lpf_txt_a.y = row_y[3]
+group.append(lpf_txt_a)
+
+lpf_txt_b = label.Label(font, text=(str(lpf_freq)), color=0xffffff)
+lpf_txt_b.x = column_x[1]
+lpf_txt_b.y = row_y[3]
+group.append(lpf_txt_b)
+
+# Show the display group
+display.root_group = group
+
+# Synthio setup
+if ITSY_TYPE == 0:
+ import audioio
+ audio = audioio.AudioOut(left_channel=board.A0, right_channel=board.A1) # M4 built-in DAC
+if ITSY_TYPE == 1:
+ import audiopwmio
+ audio = audiopwmio.PWMAudioOut(board.A1)
+# if using I2S amp:
+# audio = audiobusio.I2SOut(bit_clock=board.MOSI, word_select=board.MISO, data=board.SCK)
+
+mixer = audiomixer.Mixer(channel_count=2, sample_rate=44100, buffer_size=4096)
+synth = synthio.Synthesizer(channel_count=2, sample_rate=44100)
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.75
+
+wave_user = np.array([0]*NUM_FADERS, dtype=np.int16)
+amp_env = synthio.Envelope(attack_time=0.3, attack_level=1, sustain_level=0.65, release_time=0.3)
+
+def faders_to_wave():
+ for j in range(NUM_FADERS):
+ wave_user[j] = int(map_range(faders_pos[j], 0, 127, -32768, 32767))
+
+notes_pressed = {} # which notes being pressed. key=midi note, val=note object
+
+def note_on(n):
+ voices = [] # holds our currently sounding voices ('Notes' in synthio speak)
+ fo = synthio.midi_to_hz(n)
+ lpf = synth.low_pass_filter(lpf_freq, lpf_resonance)
+
+ for k in range(num_oscs):
+ f = fo * (1 + k*detune)
+ voices.append(synthio.Note(frequency=f, filter=lpf, envelope=amp_env, waveform=wave_user))
+ synth.press(voices)
+ note_off(n) # help to prevent double note_on for same note which can get stuck
+ notes_pressed[n] = voices
+
+def note_off(n):
+ note = notes_pressed.get(n, None)
+ if note:
+ synth.release(note)
+
+# simple range mapper, like Arduino map()
+def map_range(s, a1, a2, b1, b2):
+ return b1 + ((s - a1) * (b2 - b1) / (a2 - a1))
+
+notes_on = 0
+
+print("Welcome to Faderwave")
+
+
+while True:
+ # get midi messages
+ msg = midi.receive()
+ if isinstance(msg, NoteOn) and msg.velocity != 0:
+ note_on(msg.note)
+ notes_on = notes_on + 1
+ if DEBUG:
+ print("MIDI notes on: ", msg.note, " Polyphony:", " "*notes_on, notes_on)
+ midi_counter_lbl.text = str(msg.note)
+ elif isinstance(msg, NoteOff) or (isinstance(msg, NoteOn) and msg.velocity == 0):
+ note_off(msg.note)
+ notes_on = notes_on - 1
+ if DEBUG:
+ print("MIDI notes off:", msg.note, " Polyphony:", " "*notes_on, notes_on)
+ midi_counter_lbl.text = "-"
+
+ # check faders
+ for i in range(len(faders)):
+ faders_pos[i] = faders[i].value//512
+ if faders_pos[i] is not last_faders_pos[i]:
+ faders_to_wave()
+ last_faders_pos[i] = faders_pos[i]
+ if DEBUG:
+ print("fader", [i], faders_pos[i])
+
+ # send out a DAC value based on fader 0
+ # if i == 1:
+ # dac.value = faders[1].value
+
+ # check encoder button
+ button.update()
+ if button.fell:
+ menu_sel = (menu_sel+1) % 4
+ menu_sel_txt.y = row_y[menu_sel]
+
+ # check encoder
+ encoder_pos = encoder.position
+ if encoder_pos > last_encoder_pos:
+ delta = encoder_pos - last_encoder_pos
+ if menu_sel == 0:
+ detune = detune + (delta * 0.001)
+ detune = min(max(detune, -0.030), 0.030)
+ formatted_detune = str("{:.3f}".format(detune))
+ det_txt_b.text = formatted_detune
+
+ elif menu_sel == 1:
+ num_oscs = num_oscs + delta
+ num_oscs = min(max(num_oscs, 1), 5)
+ formatted_num_oscs = str(num_oscs)
+ num_oscs_txt_b.text = formatted_num_oscs
+
+ elif menu_sel == 2:
+ volume = volume + (delta * 0.01)
+ volume = min(max(volume, 0.00), 1.00)
+ mixer.voice[0].level = volume
+ formatted_volume = str("{:.2f}".format(volume))
+ vol_txt_b.text = formatted_volume
+
+ elif menu_sel == 3:
+ lpf_freq = lpf_freq + (delta * 1000)
+ lpf_freq = min(max(lpf_freq, 1000), 20_000)
+ formatted_lpf = str(lpf_freq)
+ lpf_txt_b.text = formatted_lpf
+
+ last_encoder_pos = encoder.position
+
+ if encoder_pos < last_encoder_pos:
+ delta = last_encoder_pos - encoder_pos
+ if menu_sel == 0:
+ detune = detune - (delta * 0.001)
+ detune = min(max(detune, -0.030), 0.030)
+ formatted_detune = str("{:.3f}".format(detune))
+ det_txt_b.text = formatted_detune
+
+ elif menu_sel == 1:
+ num_oscs = num_oscs - delta
+ num_oscs = min(max(num_oscs, 1), 8)
+ formatted_num_oscs = str(num_oscs)
+ num_oscs_txt_b.text = formatted_num_oscs
+
+ elif menu_sel == 2:
+ volume = volume - (delta * 0.01)
+ volume = min(max(volume, 0.00), 1.00)
+ mixer.voice[0].level = volume
+ formatted_volume = str("{:.2f}".format(volume))
+ vol_txt_b.text = formatted_volume
+
+ elif menu_sel == 3:
+ lpf_freq = lpf_freq - (delta * 1000)
+ lpf_freq = min(max(lpf_freq, 1000), 20_000)
+ formatted_lpf = str(lpf_freq)
+ lpf_txt_b.text = formatted_lpf
+
+ last_encoder_pos = encoder.position
diff --git a/Faz_Wrench/code.py b/Faz_Wrench/code.py
new file mode 100644
index 000000000..2b759bb33
--- /dev/null
+++ b/Faz_Wrench/code.py
@@ -0,0 +1,179 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import random
+import board
+import audiocore
+import audiobusio
+import audiomixer
+from digitalio import DigitalInOut, Direction
+import neopixel
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_led_animation.animation.pulse import Pulse
+from adafruit_led_animation.color import RED, GREEN
+import adafruit_character_lcd.character_lcd_i2c as character_lcd
+import adafruit_lis3dh
+from adafruit_seesaw.seesaw import Seesaw
+from adafruit_seesaw.rotaryio import IncrementalEncoder
+import keypad
+
+puzzle_time = 5 # seconds
+
+lcd_columns = 16
+lcd_rows = 2
+
+# enable external power pin
+# provides power to the external components
+external_power = DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = Direction.OUTPUT
+external_power.value = True
+
+i2c = board.I2C()
+
+int1 = DigitalInOut(board.ACCELEROMETER_INTERRUPT)
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1)
+lis3dh.range = adafruit_lis3dh.RANGE_2_G
+
+ss_enc0 = Seesaw(i2c, addr=0x36)
+enc0 = IncrementalEncoder(ss_enc0)
+
+button = keypad.Keys((board.EXTERNAL_BUTTON, board.D13,), value_when_pressed=False, pull=True)
+
+lcd = character_lcd.Character_LCD_I2C(i2c, lcd_columns, lcd_rows)
+lcd.backlight = True
+
+puzzle_msgs = ["UNLOCK\nDOOR", "DOOR\nUNLOCKED", "UNLOCKING"]
+
+wavs = []
+for filename in os.listdir('/faz_sounds'):
+ if filename.lower().endswith('.wav') and not filename.startswith('.'):
+ wavs.append("/faz_sounds/"+filename)
+wavs.sort()
+print(wavs)
+
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True, buffer_size=32768)
+volume = 0.5
+mixer.voice[0].level = volume
+audio.play(mixer)
+wav_length = len(wavs) - 1
+
+def open_audio(num):
+ n = wavs[num]
+ f = open(n, "rb")
+ w = audiocore.WaveFile(f)
+ return w
+
+PIXEL_PIN = board.EXTERNAL_NEOPIXELS
+BRIGHTNESS = 0.3
+NUM_PIXELS = 8
+
+PIXELS = neopixel.NeoPixel(PIXEL_PIN, NUM_PIXELS, auto_write=True)
+pulse = Pulse(PIXELS, speed=0.001, color=RED, period=3)
+
+puzzle_clock = ticks_ms()
+puzzle_time = puzzle_time * 1000
+
+puzzle = False
+wave = open_audio(0)
+pos0 = volume
+last_pos0 = pos0
+node_num = 0
+
+def normalize(val, min_v, max_v):
+ return max(min(max_v, val), min_v)
+
+def puzzle_string(length):
+ _string = ""
+ for _ in range(length/2):
+ b = random.randint(0, 1)
+ if b == 0:
+ r = chr(random.randint(ord('A'), ord('Z')))
+ else:
+ r = str(random.randint(0, 9))
+ _string += r
+ _string += "\n"
+ for _ in range(length/2):
+ b = random.randint(0, 1)
+ if b == 0:
+ r = chr(random.randint(ord('A'), ord('Z')))
+ else:
+ r = str(random.randint(0, 9))
+ _string += r
+ lcd.message = _string
+ return _string
+
+while True:
+ event = button.events.get()
+ if event and event.pressed:
+ number = event.key_number
+ if number == 0 and not puzzle:
+ pulse.fill(GREEN)
+ puzzle = True
+ lcd.clear()
+ lcd.message = puzzle_msgs[2]
+ wave = open_audio(1)
+ mixer.voice[0].play(wave)
+ while mixer.playing:
+ pass
+ puzzle_clock = ticks_add(ticks_ms(), puzzle_time)
+ if number == 1:
+ lcd.clear()
+ node_num = (node_num + 1) % 5
+ print(node_num)
+
+ if puzzle:
+ x, y, z = [
+ value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration
+ ]
+ puzzle_string(lcd_columns*lcd_rows)
+ if z > 0:
+ wave = open_audio(2)
+ print("playing up")
+ pulse.fill(GREEN)
+ else:
+ wave = open_audio(3)
+ print("playing down")
+ pulse.fill(RED)
+ mixer.voice[0].play(wave)
+ while mixer.playing:
+ puzzle_string(lcd_columns*lcd_rows)
+ x, y, z = [
+ value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration
+ ]
+ if z > 0:
+ pulse.fill(GREEN)
+ else:
+ pulse.fill(RED)
+ if ticks_diff(ticks_ms(), puzzle_clock) >= puzzle_time:
+ lcd.clear()
+ puzzle = False
+ lcd.message = puzzle_msgs[1]
+ wave = open_audio(4)
+ mixer.voice[0].play(wave)
+ while mixer.playing:
+ pass
+ print("puzzle done")
+ wave = open_audio(0)
+ lcd.clear()
+ pulse.fill(RED)
+
+ if not puzzle:
+ pulse.animate()
+ mixer.voice[0].play(wave, loop=True)
+ if node_num > 3:
+ lcd.message = "SECURITY\nBREACHED"
+ else:
+ lcd.message = f"DEACTIVATED:\n{node_num} of 4"
+ pos0 = -enc0.position
+ if pos0 != last_pos0:
+ if pos0 > last_pos0:
+ volume = volume + 0.1
+ else:
+ volume = volume - 0.1
+ volume = normalize(volume, 0.0, 1.0)
+ mixer.voice[0].level = volume
+ last_pos0 = pos0
diff --git a/Faz_Wrench/faz_sounds/0_idle.wav b/Faz_Wrench/faz_sounds/0_idle.wav
new file mode 100644
index 000000000..1ca807732
Binary files /dev/null and b/Faz_Wrench/faz_sounds/0_idle.wav differ
diff --git a/Faz_Wrench/faz_sounds/1_start.wav b/Faz_Wrench/faz_sounds/1_start.wav
new file mode 100644
index 000000000..3ec760970
Binary files /dev/null and b/Faz_Wrench/faz_sounds/1_start.wav differ
diff --git a/Faz_Wrench/faz_sounds/2_puzzle-up.wav b/Faz_Wrench/faz_sounds/2_puzzle-up.wav
new file mode 100644
index 000000000..57f41e134
Binary files /dev/null and b/Faz_Wrench/faz_sounds/2_puzzle-up.wav differ
diff --git a/Faz_Wrench/faz_sounds/3_puzzle-down.wav b/Faz_Wrench/faz_sounds/3_puzzle-down.wav
new file mode 100644
index 000000000..ef6322c9c
Binary files /dev/null and b/Faz_Wrench/faz_sounds/3_puzzle-down.wav differ
diff --git a/Faz_Wrench/faz_sounds/4_unlocked.wav b/Faz_Wrench/faz_sounds/4_unlocked.wav
new file mode 100644
index 000000000..aced3e11f
Binary files /dev/null and b/Faz_Wrench/faz_sounds/4_unlocked.wav differ
diff --git a/Feather_CAN_Bus_RP2040_Examples/CircuitPython_CAN_Bus/code.py b/Feather_CAN_Bus_RP2040_Examples/CircuitPython_CAN_Bus/code.py
new file mode 100644
index 000000000..22a04c331
--- /dev/null
+++ b/Feather_CAN_Bus_RP2040_Examples/CircuitPython_CAN_Bus/code.py
@@ -0,0 +1,33 @@
+# SPDX-FileCopyrightText: Copyright (c) 2020 Bryan Siepert for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+from time import sleep
+import board
+from digitalio import DigitalInOut
+from adafruit_mcp2515.canio import Message, RemoteTransmissionRequest
+from adafruit_mcp2515 import MCP2515 as CAN
+
+
+cs = DigitalInOut(board.CAN_CS)
+cs.switch_to_output()
+spi = board.SPI()
+
+can_bus = CAN(
+ spi, cs, loopback=True, silent=True
+) # use loopback to test without another device
+while True:
+ with can_bus.listen(timeout=1.0) as listener:
+
+ message = Message(id=0x1234ABCD, data=b"adafruit", extended=True)
+ send_success = can_bus.send(message)
+ print("Send success:", send_success)
+ message_count = listener.in_waiting()
+ print(message_count, "messages available")
+ for _i in range(message_count):
+ msg = listener.receive()
+ print("Message from ", hex(msg.id))
+ if isinstance(msg, Message):
+ print("message data:", msg.data)
+ if isinstance(msg, RemoteTransmissionRequest):
+ print("RTR length:", msg.length)
+ sleep(1)
diff --git a/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/.feather_rp2040.test.only b/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/.feather_rp2040.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino b/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino
new file mode 100644
index 000000000..8a04aa373
--- /dev/null
+++ b/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth/Feather_DVI_Arduino_Video_Synth.ino
@@ -0,0 +1,732 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+// SPDX-License-Identifier: MIT
+
+#include
+
+DVIGFX16 display(DVI_RES_320x240p60, adafruit_feather_dvi_cfg);
+
+// colors
+#define BLACK 0x0000
+#define BLUE 0x001F
+#define RED 0xF800
+#define GREEN 0x07E0
+#define CYAN 0x07FF
+#define MAGENTA 0xF81F
+#define YELLOW 0xFFE0
+#define WHITE 0xFFFF
+
+// button and led pins
+const int indexPin = 5;
+const int ledPin = 6;
+const int shebangPin = 9;
+const int shebangLed = 10;
+
+//pot pins
+int pot0 = A0;
+int pot1 = A3;
+int pot2 = A2;
+int pot3 = A1;
+
+int potVal0;
+int potVal1;
+int potVal2;
+int potVal3;
+
+#define N_TRI 75
+struct {
+ int16_t pos[2]; // position (X,Y)
+ int8_t vel[2]; // velocity (X,Y)
+} tri[N_TRI];
+
+int h;
+int w;
+
+int synth_index = 0;
+int last_r = 0;
+int last_smolR = 0;
+int last_c = 0;
+int radi;
+int cir_color;
+int triangle_count = 0;
+int sunX = 166;
+int sunY = 113;
+
+int index_reading;
+bool index_state = false;
+bool is_static = false;
+bool is_target = false;
+bool is_wavylines = false;
+bool is_synthwave = false;
+bool is_orbits = false;
+bool shebang_pressed = false;
+
+int rate1 = 0;
+int rate2 = 100;
+int rate3 = 50;
+int rate4 = 210;
+
+int last_i = 121;
+
+int cycle = 0;
+
+uint8_t r,g,b;
+uint16_t rgb;
+uint16_t bgr;
+uint16_t brg;
+uint16_t gbr;
+
+float last_x1 = 100;
+float last_y1 = 120;
+float last_x2 = 100;
+float last_y2 = 120;
+float last_x3 = 100;
+float last_y3 = 120;
+float last_x4 = 100;
+float last_y4 = 120;
+
+void setup() {
+ if (!display.begin()) { // Blink LED if insufficient RAM
+ pinMode(LED_BUILTIN, OUTPUT);
+ for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
+ }
+
+ pinMode(indexPin, INPUT_PULLUP);
+ pinMode(ledPin, OUTPUT);
+ pinMode(shebangPin, INPUT_PULLUP);
+ pinMode(shebangLed, OUTPUT);
+
+ w = display.width();
+ h = display.height();
+
+ is_target = true;
+}
+
+void loop() {
+ index_reading = button_listener(indexPin, ledPin);
+
+ if (synth_index == 0) {
+ is_orbits = false;
+ if (is_target == false) {
+ display.fillScreen(BLACK);
+ is_target = true;
+ }
+ else {
+ animate_target();
+ }
+ }
+
+ else if (synth_index == 1) {
+ is_target = false;
+ if (is_static == false) {
+ display.fillScreen(BLACK);
+ begin_triangles();
+ }
+ else {
+ animate_static();
+ }
+ }
+ else if (synth_index == 2){
+ is_static = false;
+ if (is_synthwave == false) {
+ display.fillScreen(BLACK);
+ begin_synthwave();
+ }
+ else {
+ animate_synthwave();
+ }
+ }
+ else if (synth_index == 3){
+ is_synthwave = false;
+ if (is_wavylines == false) {
+ display.fillScreen(BLACK);
+ is_wavylines = true;
+ }
+ else {
+ animate_wavylines();
+ }
+ }
+ else {
+ is_wavylines = false;
+ if (is_orbits == false){
+ display.fillScreen(BLACK);
+ draw_stars(5000);
+ is_orbits = true;
+ }
+ else {
+ animate_orbits();
+ }
+ }
+
+}
+
+int shebang_listener(int pin) {
+ int z = digitalRead(pin);
+ return z;
+}
+
+int button_listener(int pin, int led) {
+ int i = digitalRead(pin);
+ if (i == LOW and index_state == false) {
+ digitalWrite(led, HIGH);
+ synth_index++;
+ if (synth_index > 4) {
+ synth_index = 0;
+ }
+ index_state = true;
+ delay(200);
+ }
+ if (i == HIGH and index_state == true) {
+ index_state = false;
+ delay(200);
+ digitalWrite(led, LOW);
+ }
+ return i;
+}
+
+void begin_synthwave() {
+ sunX = 166;
+ sunY = 113;
+ draw_gradient(0, 0, w, 130);
+ display.fillCircle(sunX, sunY, 65, MAGENTA);
+ display.fillCircle(sunX, sunY, 60, RED);
+ display.fillRect(0, 120, w, h, BLUE);
+ display.drawFastHLine(0, 120, w, WHITE);
+
+ display.drawLine(0, 136, 34, 120, WHITE);
+ display.drawLine(0, 188, 76, 120, WHITE);
+ display.drawLine(34, 240, 113, 120, WHITE);
+ display.drawLine(117, 240, 148, 120, WHITE);
+ display.drawLine(198, 240, 182, 120, WHITE);
+ display.drawLine(294, 240, 216, 120, WHITE);
+ display.drawLine(320, 176, 255, 120, WHITE);
+ display.drawLine(320, 133, 297, 120, WHITE);
+
+ is_synthwave = true;
+}
+
+void animate_synthwave() {
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ shebang_pressed = true;
+ for (int i=146; i > 121; i-=2) {
+ sunY = sunY - 2;
+ index_reading = button_listener(indexPin, ledPin);
+ potVal0 = analog_map(pot0, 25, 75);
+ display.fillCircle(sunX, sunY, 65, MAGENTA);
+ display.fillCircle(sunX, sunY, 60, RED);
+ display.fillRect(0, 120, w, h, BLUE);
+ display.drawFastHLine(0, 120, w, WHITE);
+
+ display.drawFastHLine(0, 120, w, WHITE);
+ display.drawLine(0, 136, 34, 120, WHITE);
+ display.drawLine(0, 188, 76, 120, WHITE);
+ display.drawLine(34, 240, 113, 120, WHITE);
+ display.drawLine(117, 240, 148, 120, WHITE);
+ display.drawLine(198, 240, 182, 120, WHITE);
+ display.drawLine(294, 240, 216, 120, WHITE);
+ display.drawLine(320, 176, 255, 120, WHITE);
+ display.drawLine(320, 133, 297, 120, WHITE);
+ display.drawFastHLine(0, 120, w, WHITE);
+ display.drawFastHLine(0, last_i, w, BLUE);
+ display.drawFastHLine(0, i, w, WHITE);
+ display.drawFastHLine(0, last_i+25, w, BLUE);
+ display.drawFastHLine(0, i+25, w, WHITE);
+ display.drawFastHLine(0, last_i+50, w, BLUE);
+ display.drawFastHLine(0, i+50, w, WHITE);
+ display.drawFastHLine(0, last_i+75, w, BLUE);
+ display.drawFastHLine(0, i+75, w, WHITE);
+ display.drawFastHLine(0, last_i+100, w, BLUE);
+ display.drawFastHLine(0, i+100, w, WHITE);
+ last_i = i;
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+ }
+ else {
+ if (shebang_pressed == true) {
+ sunX = 166;
+ sunY = 113;
+ draw_gradient(0, 0, w, 130);
+ display.fillCircle(sunX, sunY, 65, MAGENTA);
+ display.fillCircle(sunX, sunY, 60, RED);
+ display.fillRect(0, 120, w, h, BLUE);
+ display.drawFastHLine(0, 120, w, WHITE);
+ shebang_pressed = false;
+ }
+ digitalWrite(shebangLed, LOW);
+
+ for (int i=121; i < 146; i+=2) {
+ index_reading = button_listener(indexPin, ledPin);
+ potVal0 = analog_map(pot0, 25, 75);
+
+ display.drawFastHLine(0, 120, w, WHITE);
+ display.drawLine(0, 136, 34, 120, WHITE);
+ display.drawLine(0, 188, 76, 120, WHITE);
+ display.drawLine(34, 240, 113, 120, WHITE);
+ display.drawLine(117, 240, 148, 120, WHITE);
+ display.drawLine(198, 240, 182, 120, WHITE);
+ display.drawLine(294, 240, 216, 120, WHITE);
+ display.drawLine(320, 176, 255, 120, WHITE);
+ display.drawLine(320, 133, 297, 120, WHITE);
+ display.drawFastHLine(0, 120, w, WHITE);
+ display.drawFastHLine(0, last_i, w, BLUE);
+ display.drawFastHLine(0, i, w, WHITE);
+ display.drawFastHLine(0, last_i+25, w, BLUE);
+ display.drawFastHLine(0, i+25, w, WHITE);
+ display.drawFastHLine(0, last_i+50, w, BLUE);
+ display.drawFastHLine(0, i+50, w, WHITE);
+ display.drawFastHLine(0, last_i+75, w, BLUE);
+ display.drawFastHLine(0, i+75, w, WHITE);
+ display.drawFastHLine(0, last_i+100, w, BLUE);
+ display.drawFastHLine(0, i+100, w, WHITE);
+ last_i = i;
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+ sunX = 166;
+ sunY = 113;
+ }
+}
+
+void animate_orbits() {
+ index_reading = button_listener(indexPin, ledPin);
+ potVal1 = analog_map(pot1, 1, 8);
+ potVal2 = analog_map(pot2, 1, 8);
+ potVal3 = analog_map(pot3, 1, 8);
+ potVal0 = analog_map(pot0, 1, 8);
+ int s = shebang_listener(shebangPin);
+ if (s == HIGH) {
+ if (shebang_pressed == true) {
+ display.fillScreen(BLACK);
+ draw_stars(5000);
+ shebang_pressed = false;
+ }
+ digitalWrite(shebangLed, LOW);
+ rate1 = rate1 + potVal1;
+ if (rate1 > 360) {
+ rate1 = 1;
+ }
+ rate2 = rate2 + potVal2;
+ if (rate2 > 361) {
+ rate2 = 1;
+ }
+ rate3 = rate3 + potVal3;
+ if (rate3 > 361) {
+ rate3 = 1;
+ }
+ rate4 = rate4 + potVal0;
+ if (rate4 > 361) {
+ rate4 = 1;
+ }
+ display.fillCircle(160, 120, 20, YELLOW);
+ display.fillCircle(last_x1, last_y1, 4, 0);
+ float x1 = sin(2*rate1*2*3.14/100);
+ float y1 = cos(2*rate1*2*3.14/100);
+ display.fillCircle(160+45*x1, 120-45*y1, 4, BLUE);
+ last_x1 = 160+45*x1;
+ last_y1 = 120-45*y1;
+
+ display.fillCircle(last_x2, last_y2, 10, 0);
+ float x2 = sin(2*rate2*2*3.14/100);
+ float y2 = cos(2*rate2*2*3.14/100);
+ display.fillCircle(160+60*x2, 120-60*y2, 10, RED);
+ last_x2 = 160+60*x2;
+ last_y2 = 120-60*y2;
+
+ display.fillCircle(last_x3, last_y3, 8, 0);
+ float x3 = sin(2*rate3*2*3.14/100);
+ float y3 = cos(2*rate3*2*3.14/100);
+ display.fillCircle(160+95*x3, 120-95*y3, 8, MAGENTA);
+ last_x3 = 160+95*x3;
+ last_y3 = 120-95*y3;
+
+ display.fillCircle(last_x4, last_y4, 14, 0);
+ float x4 = sin(2*rate4*2*3.14/100);
+ float y4 = cos(2*rate4*2*3.14/100);
+ display.fillCircle(160+150*x4, 120-150*y4, 14, GREEN);
+ last_x4 = 160+150*x4;
+ last_y4 = 120-150*y4;
+ }
+ else {
+ digitalWrite(shebangLed, HIGH);
+ shebang_pressed = true;
+ int black_hole = 1;
+ int falling_y1 = last_y1;
+ int falling_y2 = last_y2;
+ int falling_y3 = last_y3;
+ int falling_y4 = last_y4;
+ for (int i = 0; i < 250; i ++) {
+ s = shebang_listener(shebangPin);
+ draw_stars(500);
+ display.fillCircle(last_x1, falling_y1 + i, 4, BLUE);
+ display.fillCircle(last_x2, falling_y2 + i, 10, RED);
+ display.fillCircle(last_x3, falling_y3 + i, 8, MAGENTA);
+ display.fillCircle(last_x4, falling_y4 + i, 14, GREEN);
+ display.fillCircle(160, 120, black_hole + i, BLACK);
+ if (s == HIGH) {
+ break;
+ }
+ millisDelay(50);
+ }
+ display.fillScreen(BLACK);
+ draw_stars(5000);
+ }
+
+ millisDelay(75);
+}
+
+void begin_triangles() {
+ for (int i=0; i= display.width())) {
+ tri[i].vel[0] *= -1;
+ }
+ tri[i].pos[1] += tri[i].vel[1];
+ if ((tri[i].pos[1] <= 0) || (tri[i].pos[1] >= display.height())) {
+ tri[i].vel[1] *= -1;
+ }
+ }
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ triangle_count = N_TRI;
+ clear_static();
+ }
+ else {
+ digitalWrite(shebangLed, LOW);
+ triangle_count = potVal0;
+ draw_static(1000, rgb);
+ }
+}
+
+void animate_target() {
+ radi = 0;
+ for (int i=0; i<240; i+=10){
+ index_reading = button_listener(indexPin, ledPin);
+
+ potVal1 = analog_map(pot1, 0, 255);
+ potVal2 = analog_map(pot2, 0, 255);
+ potVal3 = analog_map(pot3, 0, 255);
+ potVal0 = analog_map(pot0, 25, 75);
+ rgb = color_mixer(potVal1, potVal2, potVal3);
+ bgr = color_mixer(potVal3, potVal2, potVal1);
+ rgb = rgb*3;
+ bgr = bgr*2;
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ radi = random(5, 75);
+ display.fillCircle(160, 120, last_r, BLACK);
+ }
+ else {
+ digitalWrite(shebangLed, LOW);
+ radi = radi + 2;
+ }
+ display.fillCircle(160, 120, radi, rgb);
+ display.drawLine(160, 120, 320, i, bgr);
+ last_r = radi;
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+
+ for (int i=320; i>0; i-=10){
+ index_reading = button_listener(indexPin, ledPin);
+ potVal1 = analog_map(pot1, 0, 255);
+ potVal2 = analog_map(pot2, 0, 255);
+ potVal3 = analog_map(pot3, 0, 255);
+ potVal0 = analog_map(pot0, 25, 75);
+ rgb = color_mixer(potVal1, potVal2, potVal3);
+ bgr = color_mixer(potVal3, potVal2, potVal1);
+ rgb = rgb*3;
+ bgr = bgr*2;
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ radi = random(5, 75);
+ display.fillCircle(160, 120, last_r, BLACK);
+ }
+ else {
+ digitalWrite(shebangLed, LOW);
+ radi = radi + 2;
+ if (radi > 120) {
+ radi = 120;
+ }
+ }
+ display.fillCircle(160, 120, radi, rgb);
+ display.drawLine(160, 120, i, 240, bgr);
+ last_r = radi;
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+
+ for (int i=240; i>0; i-=10){
+ index_reading = button_listener(indexPin, ledPin);
+ potVal1 = analog_map(pot1, 0, 255);
+ potVal2 = analog_map(pot2, 0, 255);
+ potVal3 = analog_map(pot3, 0, 255);
+ potVal0 = analog_map(pot0, 25, 75);
+ rgb = color_mixer(potVal1, potVal2, potVal3);
+ bgr = color_mixer(potVal3, potVal2, potVal1);
+ rgb = rgb*3;
+ bgr = bgr*2;
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ radi = random(5, 75);
+ }
+ else {
+ digitalWrite(shebangLed, LOW);
+ radi = radi - 3;
+ }
+ display.fillCircle(160, 120, last_r, BLACK);
+ display.fillCircle(160, 120, radi, rgb);
+ display.drawLine(160, 120, 0, i, bgr);
+ last_r = radi;
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+
+ for (int i=0; i<320; i+=10){
+ index_reading = button_listener(indexPin, ledPin);
+ potVal1 = analog_map(pot1, 0, 255);
+ potVal2 = analog_map(pot2, 0, 255);
+ potVal3 = analog_map(pot3, 0, 255);
+ potVal0 = analog_map(pot0, 25, 75);
+ rgb = color_mixer(potVal1, potVal2, potVal3);
+ bgr = color_mixer(potVal3, potVal2, potVal1);
+ rgb = rgb*3;
+ bgr = bgr*2;
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ radi = random(5, 75);
+ }
+ else {
+ digitalWrite(shebangLed, LOW);
+ radi = radi - 2;
+ if (radi < 1) {
+ radi = 1;
+ }
+ }
+ display.fillCircle(160, 120, last_r, BLACK);
+ display.fillCircle(160, 120, radi, rgb);
+ display.drawLine(160, 120, i, 0, bgr);
+ last_r = radi;
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+}
+
+void animate_wavylines() {
+ for (int i=0; i0; i-=10){
+ index_reading = button_listener(indexPin, ledPin);
+ potVal1 = analog_map(pot1, 0, 255);
+ potVal2 = analog_map(pot2, 0, 255);
+ potVal3 = analog_map(pot3, 0, 255);
+ potVal0 = analog_map(pot0, 25, 75);
+ rgb = color_mixer(potVal1, potVal2, potVal3);
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ shebang_pressed = true;
+ display.drawLine(random(0, w), random(0, h), i, h, rgb*3);
+ }
+ else {
+ digitalWrite(shebangLed, LOW);
+ if (shebang_pressed == true) {
+ display.fillScreen(BLACK);
+ cycle = 0;
+ shebang_pressed = false;
+ }
+ display.drawLine(0, 0, i, h, rgb*3);
+ }
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+ for (int i=0; i0; i-=10){
+ index_reading = button_listener(indexPin, ledPin);
+
+ potVal1 = analog_map(pot1, 0, 255);
+ potVal2 = analog_map(pot2, 0, 255);
+ potVal3 = analog_map(pot3, 0, 255);
+ potVal0 = analog_map(pot0, 25, 75);
+ brg = color_mixer(potVal3, potVal1, potVal2);
+ int s = shebang_listener(shebangPin);
+ if (s == LOW) {
+ digitalWrite(shebangLed, HIGH);
+ shebang_pressed = true;
+ display.drawLine(random(0, w), random(0, h), w, i, rgb*3);
+ }
+ else {
+ digitalWrite(shebangLed, LOW);
+ if (shebang_pressed == true) {
+ display.fillScreen(BLACK);
+ cycle = 0;
+ shebang_pressed = false;
+ }
+ display.drawLine(0, 0, w, i, brg*3);
+ }
+ if (index_reading == LOW) {
+ break;
+ }
+ millisDelay(potVal0);
+ }
+ clear_static();
+ cycle++;
+ if (cycle > 4) {
+ display.fillScreen(BLACK);
+ cycle = 0;
+ }
+}
+
+void make_triangle(uint16_t x1, uint16_t y1, uint16_t side_1, uint16_t side_2,uint16_t color) {
+ color = color_mixer(potVal3, potVal2, potVal1);
+ uint16_t x2 = x1 + side_1;
+ uint16_t y2 = y1 + side_2;
+ display.fillTriangle(x1, y1, x2, y2, x2, y1, color*2);
+}
+
+int analog_map(int x, int minMap, int maxMap) {
+ int z = analogRead(x);
+ z = map(z, 0, 1023, minMap, maxMap);
+ return z;
+ }
+
+uint16_t color_mixer(int int_r, int int_g, int int_b) {
+ uint16_t mixed = ((int_r & 0xf8) << 8) + ((int_g & 0xfc) << 3) + (int_b >>3);
+ return mixed;
+}
+
+void draw_static(int num_stars, uint16_t color_order) {
+ color_order = color_mixer(potVal1, potVal2, potVal3);
+ for (int i=1; i= SWING_THRESHOLD:
+ print("swing")
+ mode = "swing"
+ if switch.short_count == 1:
+ mode = 3
+ if switch.long_press:
+ audio.stop()
+ play_wav(19, loop=True)
+ print("change color")
+ mode = 5
+ # clash or move
+ elif mode == "hit":
+ audio.stop()
+ play_wav(random.randint(3, 10), loop=False)
+ while audio.playing:
+ pixels.fill(WHITE)
+ pixels.show()
+ pixels.fill(COLORS[SABER_COLOR])
+ pixels.show()
+ play_wav(1, loop=True)
+ mode = 1
+ elif mode == "swing":
+ audio.stop()
+ play_wav(random.randint(11, 18), loop=False)
+ while audio.playing:
+ pixels.fill(COLORS[SABER_COLOR])
+ pixels.show()
+ pixels.fill(COLORS[SABER_COLOR])
+ pixels.show()
+ play_wav(1, loop=True)
+ mode = 1
+ # turn off
+ elif mode == 3:
+ audio.stop()
+ play_wav(2, loop=False)
+ for i in range(99, 0, -1):
+ pixels[i] = (0, 0, 0)
+ pixels.show()
+ time.sleep(1)
+ external_power.value = False
+ mode = 4
+ # go to startup from off
+ elif mode == 4:
+ if switch.short_count == 1:
+ external_power.value = True
+ mode = 0
+ # change color
+ elif mode == 5:
+ if switch.short_count == 1:
+ SABER_COLOR = (SABER_COLOR + 1) % 6
+ pixels.fill(COLORS[SABER_COLOR])
+ pixels.show()
+ set_rgb_led(COLORS[SABER_COLOR])
+ if switch.long_press:
+ play_wav(1, loop=True)
+ pixels.fill(COLORS[SABER_COLOR])
+ pixels.show()
+ set_rgb_led(COLORS[SABER_COLOR])
+ mode = 1
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/._z_color.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/._z_color.wav
new file mode 100644
index 000000000..4804c106f
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/._z_color.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/0_on.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/0_on.wav
new file mode 100644
index 000000000..8bec22277
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/0_on.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/1_idle.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/1_idle.wav
new file mode 100644
index 000000000..74a645d5c
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/1_idle.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/2_off.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/2_off.wav
new file mode 100644
index 000000000..50c634815
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/2_off.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash1.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash1.wav
new file mode 100644
index 000000000..142d043df
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash1.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash2.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash2.wav
new file mode 100644
index 000000000..3929fe607
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash2.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash3.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash3.wav
new file mode 100644
index 000000000..bd8da9ad0
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash3.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash4.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash4.wav
new file mode 100644
index 000000000..a5eb36d14
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash4.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash5.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash5.wav
new file mode 100644
index 000000000..03e26d262
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash5.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash6.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash6.wav
new file mode 100644
index 000000000..f1f5408a7
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash6.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash7.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash7.wav
new file mode 100644
index 000000000..50656c9c6
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash7.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash8.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash8.wav
new file mode 100644
index 000000000..9f5e24084
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/clash8.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing1.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing1.wav
new file mode 100644
index 000000000..aae9e949c
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing1.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing2.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing2.wav
new file mode 100644
index 000000000..ac23ace06
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing2.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing3.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing3.wav
new file mode 100644
index 000000000..1c901f8fc
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing3.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing4.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing4.wav
new file mode 100644
index 000000000..5b9f15df4
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing4.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing5.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing5.wav
new file mode 100644
index 000000000..069265af5
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing5.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing6.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing6.wav
new file mode 100644
index 000000000..2af740ddd
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing6.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing7.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing7.wav
new file mode 100644
index 000000000..5edac35d3
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing7.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing8.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing8.wav
new file mode 100644
index 000000000..ac23ace06
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/swing8.wav differ
diff --git a/Feather_RP2040_Prop-Maker_Lightsaber/sounds/z_color.wav b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/z_color.wav
new file mode 100644
index 000000000..5e8f23bd0
Binary files /dev/null and b/Feather_RP2040_Prop-Maker_Lightsaber/sounds/z_color.wav differ
diff --git a/Feather_RP2040_ThinkInk_Examples/CircuitPython_ACeP_Example/code.py b/Feather_RP2040_ThinkInk_Examples/CircuitPython_ACeP_Example/code.py
new file mode 100644
index 000000000..91f3be282
--- /dev/null
+++ b/Feather_RP2040_ThinkInk_Examples/CircuitPython_ACeP_Example/code.py
@@ -0,0 +1,44 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Scott Shawcroft for Adafruit Industries
+# SPDX-FileCopyrightText: Copyright (c) 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+'''Simple test for a 5.65" ACeP eInk Display
+with the Feather RP2040 ThinkInk'''
+
+import board
+import displayio
+import busio
+import adafruit_spd1656
+
+displayio.release_displays()
+
+# this pinout is for the Feather RP2040 ThinkInk
+spi = busio.SPI(board.EPD_SCK, MOSI=board.EPD_MOSI, MISO=None)
+epd_cs = board.EPD_CS
+epd_dc = board.EPD_DC
+epd_reset = board.EPD_RESET
+epd_busy = board.EPD_BUSY
+display_bus = displayio.FourWire(
+ spi, command=epd_dc, chip_select=epd_cs, reset=epd_reset, baudrate=1000000
+)
+
+display = adafruit_spd1656.SPD1656(
+ display_bus, width=600, height=448, busy_pin=epd_busy
+)
+
+g = displayio.Group()
+
+fn = "/display-ruler-720p.bmp"
+
+with open(fn, "rb") as f:
+ pic = displayio.OnDiskBitmap(f)
+ t = displayio.TileGrid(pic, pixel_shader=pic.pixel_shader)
+ g.append(t)
+
+ display.root_group = g
+
+ display.refresh()
+
+while True:
+ pass
diff --git a/Feather_RP2040_ThinkInk_Examples/CircuitPython_ACeP_Example/display-ruler-720p.bmp b/Feather_RP2040_ThinkInk_Examples/CircuitPython_ACeP_Example/display-ruler-720p.bmp
new file mode 100644
index 000000000..f73b1c3c2
Binary files /dev/null and b/Feather_RP2040_ThinkInk_Examples/CircuitPython_ACeP_Example/display-ruler-720p.bmp differ
diff --git a/Feather_RP2040_ThinkInk_Examples/CircuitPython_Tri-Color_Example/code.py b/Feather_RP2040_ThinkInk_Examples/CircuitPython_Tri-Color_Example/code.py
new file mode 100644
index 000000000..f415eea80
--- /dev/null
+++ b/Feather_RP2040_ThinkInk_Examples/CircuitPython_Tri-Color_Example/code.py
@@ -0,0 +1,55 @@
+# SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries
+# SPDX-FileCopyrightText: Copyright (c) 2023 Jose D. Montoya
+#
+# SPDX-License-Identifier: Unlicense
+
+'''Simple test for the Adafruit 2.13" Tri-Color eInk Display
+with the Feather RP2040 ThinkInk'''
+
+import time
+import board
+import displayio
+import busio
+import adafruit_ssd1680
+
+displayio.release_displays()
+
+# this pinout is for the Feather RP2040 ThinkInk
+spi = busio.SPI(board.EPD_SCK, MOSI=board.EPD_MOSI, MISO=None)
+epd_cs = board.EPD_CS
+epd_dc = board.EPD_DC
+epd_reset = board.EPD_RESET
+epd_busy = board.EPD_BUSY
+display_bus = displayio.FourWire(
+ spi, command=epd_dc, chip_select=epd_cs, reset=epd_reset, baudrate=1000000
+)
+time.sleep(1)
+
+display = adafruit_ssd1680.SSD1680(
+ display_bus,
+ colstart=8,
+ width=250,
+ height=122,
+ highlight_color=0xFF0000,
+ rotation=270,
+)
+
+g = displayio.Group()
+
+with open("/display-ruler.bmp", "rb") as f:
+ pic = displayio.OnDiskBitmap(f)
+
+ t = displayio.TileGrid(
+ pic, pixel_shader=getattr(pic, "pixel_shader", displayio.ColorConverter())
+ )
+
+ g.append(t)
+
+ display.root_group = g
+
+ display.refresh()
+
+ print("refreshed")
+
+while True:
+ pass
diff --git a/Feather_RP2040_ThinkInk_Examples/CircuitPython_Tri-Color_Example/display-ruler.bmp b/Feather_RP2040_ThinkInk_Examples/CircuitPython_Tri-Color_Example/display-ruler.bmp
new file mode 100644
index 000000000..726b5e026
Binary files /dev/null and b/Feather_RP2040_ThinkInk_Examples/CircuitPython_Tri-Color_Example/display-ruler.bmp differ
diff --git a/Feather_ePaper_Quotes/adafruit_feather_quote/secrets.h b/Feather_ePaper_Quotes/adafruit_feather_quote/secrets.h
index f19b6e42f..6d86c1928 100644
--- a/Feather_ePaper_Quotes/adafruit_feather_quote/secrets.h
+++ b/Feather_ePaper_Quotes/adafruit_feather_quote/secrets.h
@@ -2,7 +2,7 @@
//
// SPDX-License-Identifier: MIT
-#ifndef _SECRET_H THEN
+#ifndef _SECRET_H
#define _SECRET_H
// define your WIFI SSID and password in this file
diff --git a/Feedback_Servo_Record_and_Play/Servo_RecordPlay_Feather_M4_Express.fzz b/Feedback_Servo_Record_and_Play/Servo_RecordPlay_Feather_M4_Express.fzz
deleted file mode 100644
index 39c3cdcf4..000000000
Binary files a/Feedback_Servo_Record_and_Play/Servo_RecordPlay_Feather_M4_Express.fzz and /dev/null differ
diff --git a/Feedback_Servo_Record_and_Play/Servo_RecordPlay_Feather_RP2040.fzz b/Feedback_Servo_Record_and_Play/Servo_RecordPlay_Feather_RP2040.fzz
new file mode 100644
index 000000000..45ee77402
Binary files /dev/null and b/Feedback_Servo_Record_and_Play/Servo_RecordPlay_Feather_RP2040.fzz differ
diff --git a/Feedback_Servo_Record_and_Play/feedback_calibrate/code.py b/Feedback_Servo_Record_and_Play/feedback_calibrate/code.py
old mode 100644
new mode 100755
index 13f034ddf..4f7790264
--- a/Feedback_Servo_Record_and_Play/feedback_calibrate/code.py
+++ b/Feedback_Servo_Record_and_Play/feedback_calibrate/code.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: 2019 Carter Nelson for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 Carter Nelson for Adafruit Industries
#
# SPDX-License-Identifier: MIT
@@ -7,12 +7,12 @@
import time
import board
import pwmio
-from adafruit_motor import servo
from analogio import AnalogIn
+from adafruit_motor import servo
# Pin setup
SERVO_PIN = board.A1
-FEEDBACK_PIN = board.A5
+FEEDBACK_PIN = board.A3
# Calibration setup
ANGLE_MIN = 0
@@ -27,20 +27,34 @@
feedback = AnalogIn(FEEDBACK_PIN)
print("Servo feedback calibration.")
+
+# Helper function to average analog readings
+def read_feedback(samples=10, delay=0.01):
+ reading = 0
+ for _ in range(samples):
+ reading += feedback.value
+ time.sleep(delay)
+ return int(reading/samples)
+
# Move to MIN angle
print("Moving to {}...".format(ANGLE_MIN), end="")
servo.angle = ANGLE_MIN
time.sleep(2)
print("Done.")
-feedback_min = feedback.value
+feedback_min = read_feedback()
+
# Move to MAX angle
print("Moving to {}...".format(ANGLE_MAX), end="")
servo.angle = ANGLE_MAX
time.sleep(2)
print("Done.")
-feedback_max = feedback.value
+feedback_max = read_feedback()
+
# Print results
+print("="*20)
print("Feedback MIN = {}".format(feedback_min))
print("Feedback MAX = {}".format(feedback_max))
+print("="*20)
+
# Deactivate servo
servo.angle = None
diff --git a/Feedback_Servo_Record_and_Play/feedback_record_play/code.py b/Feedback_Servo_Record_and_Play/feedback_record_play/code.py
old mode 100644
new mode 100755
index a6ef58356..9791c92a7
--- a/Feedback_Servo_Record_and_Play/feedback_record_play/code.py
+++ b/Feedback_Servo_Record_and_Play/feedback_record_play/code.py
@@ -1,42 +1,37 @@
-# SPDX-FileCopyrightText: 2019 Carter Nelson for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 Carter Nelson for Adafruit Industries
#
# SPDX-License-Identifier: MIT
# Example code for recording and playing back servo motion with a
# analog feedback servo
+# pylint: disable=redefined-outer-name
import time
import board
import pwmio
+import keypad
from simpleio import map_range
from adafruit_motor import servo
from analogio import AnalogIn
-from digitalio import DigitalInOut, Direction, Pull
+from digitalio import DigitalInOut, Direction
# Pin setup
RECORD_PIN = board.D10
PLAY_PIN = board.D9
LED_PIN = board.D13
SERVO_PIN = board.A1
-FEEDBACK_PIN = board.A5
+FEEDBACK_PIN = board.A3
# Record setup
-CALIB_MIN = 2816
-CALIB_MAX = 49632
+CALIB_MIN = 15377
+CALIB_MAX = 42890
ANGLE_MIN = 0
ANGLE_MAX = 180
SAMPLE_COUNT = 512
SAMPLE_DELAY = 0.025
-# Setup record button
-record_button = DigitalInOut(RECORD_PIN)
-record_button.direction = Direction.INPUT
-record_button.pull = Pull.UP
-
-# Setup play button
-play_button = DigitalInOut(PLAY_PIN)
-play_button.direction = Direction.INPUT
-play_button.pull = Pull.UP
+# Setup buttons
+buttons = keypad.Keys((RECORD_PIN, PLAY_PIN), value_when_pressed=False, pull=True)
# Setup LED
led = DigitalInOut(LED_PIN)
@@ -59,8 +54,12 @@
def play_servo():
print("Playing...", end="")
count = 0
- while play_button.value:
+ while True:
print(".", end="")
+ event = buttons.events.get()
+ if event:
+ if event.pressed and event.key_number == 1:
+ break
angle = position[count]
if angle is None:
break
@@ -80,8 +79,12 @@ def record_servo():
led.value = True
print("Recording...", end="")
count = 0
- while record_button.value:
+ while True:
print(".", end='')
+ event = buttons.events.get()
+ if event:
+ if event.pressed and event.key_number == 0:
+ break
position[count] = map_range(feedback.value, CALIB_MIN, CALIB_MAX, ANGLE_MIN, ANGLE_MAX)
count += 1
if count >= SAMPLE_COUNT:
@@ -92,20 +95,10 @@ def record_servo():
time.sleep(0.250)
while True:
- if not record_button.value:
- time.sleep(0.01)
- # wait for released
- while not record_button.value:
- pass
- time.sleep(0.02)
- # OK released!
- record_servo()
-
- if not play_button.value:
- time.sleep(0.01)
- # wait for released
- while not play_button.value:
- pass
- time.sleep(0.02)
- # OK released!
- play_servo()
+ event = buttons.events.get()
+ if event:
+ if event.pressed:
+ if event.key_number == 0:
+ record_servo()
+ elif event.key_number == 1:
+ play_servo()
diff --git a/Feedback_Servo_Record_and_Play/feedback_seek/code.py b/Feedback_Servo_Record_and_Play/feedback_seek/code.py
old mode 100644
new mode 100755
index 1e14861a4..15aff6e95
--- a/Feedback_Servo_Record_and_Play/feedback_seek/code.py
+++ b/Feedback_Servo_Record_and_Play/feedback_seek/code.py
@@ -1,24 +1,25 @@
-# SPDX-FileCopyrightText: 2019 Carter Nelson for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 Carter Nelson for Adafruit Industries
#
# SPDX-License-Identifier: MIT
# Example code for using analog feedback value to seek a position
+import time
import board
import pwmio
+from analogio import AnalogIn
from simpleio import map_range
from adafruit_motor import servo
-from analogio import AnalogIn
# Demo angles
angles = [0, 180, 0, 45, 180]
# Pin setup
SERVO_PIN = board.A1
-FEEDBACK_PIN = board.A5
+FEEDBACK_PIN = board.A3
# Calibration setup
-CALIB_MIN = 18112
-CALIB_MAX = 49408
+CALIB_MIN = 15377
+CALIB_MAX = 42890
ANGLE_MIN = 0
ANGLE_MAX = 180
@@ -31,9 +32,11 @@
feedback = AnalogIn(FEEDBACK_PIN)
def get_position():
+ '''Turns analog feedback raw ADC value into angle.'''
return map_range(feedback.value, CALIB_MIN, CALIB_MAX, ANGLE_MIN, ANGLE_MAX)
def seek_position(position, tolerance=2):
+ '''Move to specified angle and wait until move is complete.'''
servo.angle = position
while abs(get_position() - position) > tolerance:
@@ -42,5 +45,13 @@ def seek_position(position, tolerance=2):
print("Servo feedback seek example.")
for angle in angles:
print("Moving to {}...".format(angle), end="")
+ start = time.monotonic()
seek_position(angle)
- print("Done.")
+ end = time.monotonic()
+ print("Done. Move took {} seconds.".format(end-start))
+ print("Pausing for 1 second.")
+ time.sleep(1)
+
+# Deactivate servo
+print("Finished. Deactivating servo.")
+servo.angle = None
diff --git a/FisherPrice_USB_Foot_Pedal/code.py b/FisherPrice_USB_Foot_Pedal/code.py
new file mode 100755
index 000000000..e29d7f03e
--- /dev/null
+++ b/FisherPrice_USB_Foot_Pedal/code.py
@@ -0,0 +1,71 @@
+# SPDX-FileCopyrightText: 2023 Robert Dale Smith for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# The Fisher-Price Kick and Play Piano Gym has five buttons that are
+# active high. Pressed = 1, Released = 0. This code turns that into
+# keyboard key press, key combos, and/or key press/combo macros.
+
+import time
+import board
+import usb_hid
+from adafruit_hid.keyboard import Keyboard
+from adafruit_hid.keycode import Keycode
+from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
+from digitalio import DigitalInOut, Direction, Pull
+
+# Set up a keyboard device.
+kbd = Keyboard(usb_hid.devices)
+layout = KeyboardLayoutUS(kbd)
+
+# Setup the buttons with internal pull-down resistors
+buttons = []
+for pin in [board.A0, board.A2, board.CLK, board.D2, board.D3]: # kb2040 pins
+ button = DigitalInOut(pin)
+ button.direction = Direction.INPUT
+ button.pull = Pull.DOWN
+ buttons.append(button)
+
+# Each button corresponds to a key or key combination or a sequence of keys
+keys = [
+ Keycode.A,
+ (Keycode.COMMAND, Keycode.TAB),
+ [
+ Keycode.UP_ARROW,
+ Keycode.ENTER
+ ],
+ [
+ Keycode.END,
+ (Keycode.SHIFT, Keycode.HOME),
+ (Keycode.COMMAND, Keycode.C),
+ ],
+ [
+ (Keycode.CONTROL, Keycode.A),
+ 'Hello World',
+ Keycode.PERIOD
+ ]
+]
+
+while True:
+ # check each button
+ for button, key in zip(buttons, keys):
+ if button.value: # button is pressed
+ if isinstance(key, tuple):
+ kbd.press(*key)
+ kbd.release_all()
+ elif isinstance(key, list):
+ for macro_key in key:
+ if isinstance(macro_key, str): # print a string
+ layout.write(macro_key)
+ elif isinstance(macro_key, tuple): # press combo keys
+ kbd.press(*macro_key)
+ kbd.release_all()
+ else: # press a single key
+ kbd.press(macro_key)
+ kbd.release_all()
+ time.sleep(0.1) # delay between keys
+ else: # press a single key
+ kbd.press(key)
+ kbd.release_all()
+ time.sleep(0.1) # debounce delay
+
+ time.sleep(0.1)
diff --git a/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/.flora.test.only b/Flora/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/.flora.test.only
similarity index 100%
rename from Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/.flora.test.only
rename to Flora/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/.flora.test.only
diff --git a/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack.ino b/Flora/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack.ino
similarity index 100%
rename from Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack.ino
rename to Flora/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack/Flora_Brakelight_Backpack.ino
diff --git a/Flora_Brakelight_Backpack/LICENSE.md b/Flora/Flora_Brakelight_Backpack/LICENSE.md
similarity index 100%
rename from Flora_Brakelight_Backpack/LICENSE.md
rename to Flora/Flora_Brakelight_Backpack/LICENSE.md
diff --git a/Flora_Brakelight_Backpack/README.md b/Flora/Flora_Brakelight_Backpack/README.md
similarity index 100%
rename from Flora_Brakelight_Backpack/README.md
rename to Flora/Flora_Brakelight_Backpack/README.md
diff --git a/Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/.flora.test.only b/Flora/Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/.flora.test.only
similarity index 100%
rename from Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/.flora.test.only
rename to Flora/Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/.flora.test.only
diff --git a/Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/Citi_Bike_Helmet.ino b/Flora/Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/Citi_Bike_Helmet.ino
similarity index 100%
rename from Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/Citi_Bike_Helmet.ino
rename to Flora/Flora_Citi_Bike_Helmet/Citi_Bike_Helmet/Citi_Bike_Helmet.ino
diff --git a/Flora_Citi_Bike_Helmet/LICENSE.md b/Flora/Flora_Citi_Bike_Helmet/LICENSE.md
similarity index 100%
rename from Flora_Citi_Bike_Helmet/LICENSE.md
rename to Flora/Flora_Citi_Bike_Helmet/LICENSE.md
diff --git a/Flora_Citi_Bike_Helmet/README.md b/Flora/Flora_Citi_Bike_Helmet/README.md
similarity index 100%
rename from Flora_Citi_Bike_Helmet/README.md
rename to Flora/Flora_Citi_Bike_Helmet/README.md
diff --git a/Flora_Citi_Bike_Helmet/citybikes_parser/parser.js b/Flora/Flora_Citi_Bike_Helmet/citybikes_parser/parser.js
similarity index 100%
rename from Flora_Citi_Bike_Helmet/citybikes_parser/parser.js
rename to Flora/Flora_Citi_Bike_Helmet/citybikes_parser/parser.js
diff --git a/Flora_Demos/Example_1_Button_Keyboard/.flora.test.only b/Flora/Flora_Demos/Example_1_Button_Keyboard/.flora.test.only
similarity index 100%
rename from Flora_Demos/Example_1_Button_Keyboard/.flora.test.only
rename to Flora/Flora_Demos/Example_1_Button_Keyboard/.flora.test.only
diff --git a/Flora_Demos/Example_1_Button_Keyboard/Example_1_Button_Keyboard.ino b/Flora/Flora_Demos/Example_1_Button_Keyboard/Example_1_Button_Keyboard.ino
similarity index 100%
rename from Flora_Demos/Example_1_Button_Keyboard/Example_1_Button_Keyboard.ino
rename to Flora/Flora_Demos/Example_1_Button_Keyboard/Example_1_Button_Keyboard.ino
diff --git a/Flora_Demos/Example_2_Capacitive_Keyboard/.flora.test.only b/Flora/Flora_Demos/Example_2_Capacitive_Keyboard/.flora.test.only
similarity index 100%
rename from Flora_Demos/Example_2_Capacitive_Keyboard/.flora.test.only
rename to Flora/Flora_Demos/Example_2_Capacitive_Keyboard/.flora.test.only
diff --git a/Flora_Demos/Example_2_Capacitive_Keyboard/Example_2_Capacitive_Keyboard.ino b/Flora/Flora_Demos/Example_2_Capacitive_Keyboard/Example_2_Capacitive_Keyboard.ino
similarity index 100%
rename from Flora_Demos/Example_2_Capacitive_Keyboard/Example_2_Capacitive_Keyboard.ino
rename to Flora/Flora_Demos/Example_2_Capacitive_Keyboard/Example_2_Capacitive_Keyboard.ino
diff --git a/Flora_Demos/Example_3_Accelerometer_Tap/.flora.test.only b/Flora/Flora_Demos/Example_3_Accelerometer_Tap/.flora.test.only
similarity index 100%
rename from Flora_Demos/Example_3_Accelerometer_Tap/.flora.test.only
rename to Flora/Flora_Demos/Example_3_Accelerometer_Tap/.flora.test.only
diff --git a/Flora_Demos/Example_3_Accelerometer_Tap/Example_3_Accelerometer_Tap.ino b/Flora/Flora_Demos/Example_3_Accelerometer_Tap/Example_3_Accelerometer_Tap.ino
similarity index 100%
rename from Flora_Demos/Example_3_Accelerometer_Tap/Example_3_Accelerometer_Tap.ino
rename to Flora/Flora_Demos/Example_3_Accelerometer_Tap/Example_3_Accelerometer_Tap.ino
diff --git a/Flora_Demos/Example_4_Accelerometer_LED/.flora.test.only b/Flora/Flora_Demos/Example_4_Accelerometer_LED/.flora.test.only
similarity index 100%
rename from Flora_Demos/Example_4_Accelerometer_LED/.flora.test.only
rename to Flora/Flora_Demos/Example_4_Accelerometer_LED/.flora.test.only
diff --git a/Flora_Demos/Example_4_Accelerometer_LED/Example_4_Accelerometer_LED.ino b/Flora/Flora_Demos/Example_4_Accelerometer_LED/Example_4_Accelerometer_LED.ino
similarity index 100%
rename from Flora_Demos/Example_4_Accelerometer_LED/Example_4_Accelerometer_LED.ino
rename to Flora/Flora_Demos/Example_4_Accelerometer_LED/Example_4_Accelerometer_LED.ino
diff --git a/Flora_Demos/Example_5_Amplitie/.flora.test.only b/Flora/Flora_Demos/Example_5_Amplitie/.flora.test.only
similarity index 100%
rename from Flora_Demos/Example_5_Amplitie/.flora.test.only
rename to Flora/Flora_Demos/Example_5_Amplitie/.flora.test.only
diff --git a/Flora_Demos/Example_5_Amplitie/Example_5_Amplitie.ino b/Flora/Flora_Demos/Example_5_Amplitie/Example_5_Amplitie.ino
similarity index 100%
rename from Flora_Demos/Example_5_Amplitie/Example_5_Amplitie.ino
rename to Flora/Flora_Demos/Example_5_Amplitie/Example_5_Amplitie.ino
diff --git a/Flora_Demos/README.md b/Flora/Flora_Demos/README.md
similarity index 100%
rename from Flora_Demos/README.md
rename to Flora/Flora_Demos/README.md
diff --git a/Flora_GPS_Jacket/Flora_GPS_Jacket/.flora.test.only b/Flora/Flora_GPS_Jacket/Flora_GPS_Jacket/.flora.test.only
similarity index 100%
rename from Flora_GPS_Jacket/Flora_GPS_Jacket/.flora.test.only
rename to Flora/Flora_GPS_Jacket/Flora_GPS_Jacket/.flora.test.only
diff --git a/Flora_GPS_Jacket/Flora_GPS_Jacket/Flora_GPS_Jacket.ino b/Flora/Flora_GPS_Jacket/Flora_GPS_Jacket/Flora_GPS_Jacket.ino
similarity index 100%
rename from Flora_GPS_Jacket/Flora_GPS_Jacket/Flora_GPS_Jacket.ino
rename to Flora/Flora_GPS_Jacket/Flora_GPS_Jacket/Flora_GPS_Jacket.ino
diff --git a/Flora_GPS_Jacket/LICENSE.md b/Flora/Flora_GPS_Jacket/LICENSE.md
similarity index 100%
rename from Flora_GPS_Jacket/LICENSE.md
rename to Flora/Flora_GPS_Jacket/LICENSE.md
diff --git a/Flora_GPS_Jacket/README.md b/Flora/Flora_GPS_Jacket/README.md
similarity index 100%
rename from Flora_GPS_Jacket/README.md
rename to Flora/Flora_GPS_Jacket/README.md
diff --git a/Flora_Game_Controller/README.md b/Flora/Flora_Game_Controller/README.md
similarity index 100%
rename from Flora_Game_Controller/README.md
rename to Flora/Flora_Game_Controller/README.md
diff --git a/Flora_Game_Controller/flora_game_controller/.flora.test.only b/Flora/Flora_Game_Controller/flora_game_controller/.flora.test.only
similarity index 100%
rename from Flora_Game_Controller/flora_game_controller/.flora.test.only
rename to Flora/Flora_Game_Controller/flora_game_controller/.flora.test.only
diff --git a/Flora_Game_Controller/flora_game_controller/flora_game_controller.ino b/Flora/Flora_Game_Controller/flora_game_controller/flora_game_controller.ino
similarity index 100%
rename from Flora_Game_Controller/flora_game_controller/flora_game_controller.ino
rename to Flora/Flora_Game_Controller/flora_game_controller/flora_game_controller.ino
diff --git a/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/.flora.test.only b/Flora/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/.flora.test.only
similarity index 100%
rename from Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/.flora.test.only
rename to Flora/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/.flora.test.only
diff --git a/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch.ino b/Flora/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch.ino
similarity index 100%
rename from Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch.ino
rename to Flora/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch/Flora_NeoGeo_Watch.ino
diff --git a/Flora_NeoGeo_Watch/LICENSE.md b/Flora/Flora_NeoGeo_Watch/LICENSE.md
similarity index 100%
rename from Flora_NeoGeo_Watch/LICENSE.md
rename to Flora/Flora_NeoGeo_Watch/LICENSE.md
diff --git a/Flora_NeoGeo_Watch/README.md b/Flora/Flora_NeoGeo_Watch/README.md
similarity index 100%
rename from Flora_NeoGeo_Watch/README.md
rename to Flora/Flora_NeoGeo_Watch/README.md
diff --git a/Flora_Piano_Glove/Flora_Pianoglove/.flora.test.only b/Flora/Flora_Piano_Glove/Flora_Pianoglove/.flora.test.only
similarity index 100%
rename from Flora_Piano_Glove/Flora_Pianoglove/.flora.test.only
rename to Flora/Flora_Piano_Glove/Flora_Pianoglove/.flora.test.only
diff --git a/Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.h b/Flora/Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.h
similarity index 100%
rename from Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.h
rename to Flora/Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.h
diff --git a/Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.ino b/Flora/Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.ino
similarity index 100%
rename from Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.ino
rename to Flora/Flora_Piano_Glove/Flora_Pianoglove/Flora_Pianoglove.ino
diff --git a/Flora_Piano_Glove/LICENSE.md b/Flora/Flora_Piano_Glove/LICENSE.md
similarity index 100%
rename from Flora_Piano_Glove/LICENSE.md
rename to Flora/Flora_Piano_Glove/LICENSE.md
diff --git a/Flora_Piano_Glove/README.md b/Flora/Flora_Piano_Glove/README.md
similarity index 100%
rename from Flora_Piano_Glove/README.md
rename to Flora/Flora_Piano_Glove/README.md
diff --git a/Flora_Sparkle_Skirt/README.md b/Flora/Flora_Sparkle_Skirt/README.md
similarity index 100%
rename from Flora_Sparkle_Skirt/README.md
rename to Flora/Flora_Sparkle_Skirt/README.md
diff --git a/Flora_Sparkle_Skirt/sparkle_skirt/.flora.test.only b/Flora/Flora_Sparkle_Skirt/sparkle_skirt/.flora.test.only
similarity index 100%
rename from Flora_Sparkle_Skirt/sparkle_skirt/.flora.test.only
rename to Flora/Flora_Sparkle_Skirt/sparkle_skirt/.flora.test.only
diff --git a/Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino b/Flora/Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino
similarity index 100%
rename from Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino
rename to Flora/Flora_Sparkle_Skirt/sparkle_skirt/sparkle_skirt.ino
diff --git a/Flora_TV_B_Gone/.flora.test.only b/Flora/Flora_TV_B_Gone/.flora.test.only
similarity index 100%
rename from Flora_TV_B_Gone/.flora.test.only
rename to Flora/Flora_TV_B_Gone/.flora.test.only
diff --git a/Flora_TV_B_Gone/Flora_TV_B_Gone.ino b/Flora/Flora_TV_B_Gone/Flora_TV_B_Gone.ino
similarity index 100%
rename from Flora_TV_B_Gone/Flora_TV_B_Gone.ino
rename to Flora/Flora_TV_B_Gone/Flora_TV_B_Gone.ino
diff --git a/Flora_TV_B_Gone/README.txt b/Flora/Flora_TV_B_Gone/README.txt
similarity index 100%
rename from Flora_TV_B_Gone/README.txt
rename to Flora/Flora_TV_B_Gone/README.txt
diff --git a/Flora_TV_B_Gone/WORLDcodes.cpp b/Flora/Flora_TV_B_Gone/WORLDcodes.cpp
similarity index 100%
rename from Flora_TV_B_Gone/WORLDcodes.cpp
rename to Flora/Flora_TV_B_Gone/WORLDcodes.cpp
diff --git a/Flora_TV_B_Gone/main.h b/Flora/Flora_TV_B_Gone/main.h
similarity index 100%
rename from Flora_TV_B_Gone/main.h
rename to Flora/Flora_TV_B_Gone/main.h
diff --git a/FunHouse_Arduino_Demos/rainbow/rainbow.ino b/FunHouse_Arduino_Demos/rainbow/rainbow.ino
index 5bd0d7eb1..f10b2a1bf 100644
--- a/FunHouse_Arduino_Demos/rainbow/rainbow.ino
+++ b/FunHouse_Arduino_Demos/rainbow/rainbow.ino
@@ -14,24 +14,31 @@ uint8_t LED_dutycycle = 0;
void setup() {
Serial.begin(115200);
-
+
pinMode(LED_BUILTIN, OUTPUT);
-
+
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcAttach(LED_BUILTIN, 5000, 8);
+#else
ledcSetup(0, 5000, 8);
ledcAttachPin(LED_BUILTIN, 0);
-
+#endif
+
pixels.begin(); // Initialize pins for output
pixels.show(); // Turn all LEDs off ASAP
pixels.setBrightness(20);
}
-
void loop() {
Serial.println("Hello!");
// pulse red LED
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcWrite(LED_BUILTIN, LED_dutycycle++);
+#else
ledcWrite(0, LED_dutycycle++);
+#endif
// rainbow dotstars
for (int i=0; i= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcAttach(LED_BUILTIN, 2000, 8);
+ ledcAttach(SPEAKER, 2000, 8);
+ ledcWrite(SPEAKER, 0);
+#else
ledcSetup(0, 2000, 8);
ledcAttachPin(LED_BUILTIN, 0);
ledcSetup(1, 2000, 8);
ledcAttachPin(SPEAKER, 1);
ledcWrite(1, 0);
+#endif
}
@@ -94,11 +100,11 @@ void loop() {
/********************* sensors */
sensors_event_t humidity, temp, pressure;
-
+
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
dps.getEvents(&temp, &pressure);
-
+
tft.print("DP310: ");
tft.print(temp.temperature, 0);
tft.print(" C ");
@@ -125,7 +131,7 @@ void loop() {
tft.setCursor(0, 40);
tft.setTextColor(ST77XX_YELLOW);
tft.print("Buttons: ");
- if (! digitalRead(BUTTON_DOWN)) {
+ if (! digitalRead(BUTTON_DOWN)) {
tft.setTextColor(ST77XX_GREY);
} else {
Serial.println("DOWN pressed");
@@ -133,15 +139,15 @@ void loop() {
}
tft.print("DOWN ");
- if (! digitalRead(BUTTON_SELECT)) {
+ if (! digitalRead(BUTTON_SELECT)) {
tft.setTextColor(ST77XX_GREY);
} else {
Serial.println("SELECT pressed");
tft.setTextColor(ST77XX_WHITE);
}
tft.print("SEL ");
-
- if (! digitalRead(BUTTON_UP)) {
+
+ if (! digitalRead(BUTTON_UP)) {
tft.setTextColor(ST77XX_GREY);
} else {
Serial.println("UP pressed");
@@ -151,12 +157,12 @@ void loop() {
/************************** CAPACITIVE */
uint16_t touchread;
-
+
tft.setCursor(0, 60);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Captouch 6: ");
touchread = touchRead(6);
- if (touchread < 10000 ) {
+ if (touchread < 10000 ) {
tft.setTextColor(ST77XX_GREY, BG_COLOR);
} else {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
@@ -164,12 +170,12 @@ void loop() {
tft.print(touchread);
tft.println(" ");
Serial.printf("Captouch #6 reading: %d\n", touchread);
-
+
tft.setCursor(0, 80);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Captouch 7: ");
touchread = touchRead(7);
- if (touchread < 20000 ) {
+ if (touchread < 20000 ) {
tft.setTextColor(ST77XX_GREY, BG_COLOR);
} else {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
@@ -183,7 +189,7 @@ void loop() {
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Captouch 8: ");
touchread = touchRead(8);
- if (touchread < 20000 ) {
+ if (touchread < 20000 ) {
tft.setTextColor(ST77XX_GREY, BG_COLOR);
} else {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
@@ -200,7 +206,7 @@ void loop() {
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Analog 0: ");
analogread = analogRead(A0);
- if (analogread < 8000 ) {
+ if (analogread < 8000 ) {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
} else {
tft.setTextColor(ST77XX_RED, BG_COLOR);
@@ -214,7 +220,7 @@ void loop() {
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Analog 1: ");
analogread = analogRead(A1);
- if (analogread < 8000 ) {
+ if (analogread < 8000 ) {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
} else {
tft.setTextColor(ST77XX_RED, BG_COLOR);
@@ -223,12 +229,12 @@ void loop() {
tft.println(" ");
Serial.printf("Analog A1 reading: %d\n", analogread);
-
+
tft.setCursor(0, 160);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Analog 2: ");
analogread = analogRead(A2);
- if (analogread < 8000 ) {
+ if (analogread < 8000 ) {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
} else {
tft.setTextColor(ST77XX_RED, BG_COLOR);
@@ -245,21 +251,25 @@ void loop() {
tft.print(analogread);
tft.println(" ");
Serial.printf("Light sensor reading: %d\n", analogread);
-
+
/************************** Beep! */
- if (digitalRead(BUTTON_SELECT)) {
+ if (digitalRead(BUTTON_SELECT)) {
Serial.println("** Beep! ***");
fhtone(SPEAKER, 988.0, 100.0); // tone1 - B5
fhtone(SPEAKER, 1319.0, 200.0); // tone2 - E6
delay(100);
//fhtone(SPEAKER, 2000.0, 100.0);
}
-
+
/************************** LEDs */
// pulse red LED
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcWrite(LED_BUILTIN, LED_dutycycle);
+#else
ledcWrite(0, LED_dutycycle);
+#endif
LED_dutycycle += 32;
-
+
// rainbow dotstars
for (int i=0; i= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcAttach(SPEAKER, frequency, 8);
+ ledcWrite(SPEAKER, 128);
+ delay(duration);
+ ledcWrite(SPEAKER, 0);
+#else
ledcSetup(1, frequency, 8);
ledcAttachPin(pin, 1);
ledcWrite(1, 128);
delay(duration);
ledcWrite(1, 0);
+#endif
}
diff --git a/FunHouse_Arduino_Demos/shipping_demo/shipping_demo.ino b/FunHouse_Arduino_Demos/shipping_demo/shipping_demo.ino
index 93257d664..21d2e75a8 100644
--- a/FunHouse_Arduino_Demos/shipping_demo/shipping_demo.ino
+++ b/FunHouse_Arduino_Demos/shipping_demo/shipping_demo.ino
@@ -26,7 +26,7 @@ uint16_t firstPixelHue = 0;
void setup() {
Serial.begin(115200);
delay(100);
-
+
pixels.begin(); // Initialize pins for output
pixels.show(); // Turn all LEDs off ASAP
pixels.setBrightness(20);
@@ -36,7 +36,7 @@ void setup() {
pinMode(BUTTON_UP, INPUT_PULLDOWN);
//analogReadResolution(13);
-
+
tft.init(240, 240); // Initialize ST7789 screen
pinMode(TFT_BACKLIGHT, OUTPUT);
digitalWrite(TFT_BACKLIGHT, HIGH); // Backlight on
@@ -51,8 +51,8 @@ void setup() {
tft.setTextColor(ST77XX_YELLOW);
tft.print("DP310? ");
-
- if (! dps.begin_I2C()) {
+
+ if (! dps.begin_I2C()) {
tft.setTextColor(ST77XX_RED);
tft.println("FAIL!");
while (1) delay(100);
@@ -66,8 +66,8 @@ void setup() {
tft.setCursor(0, 20);
tft.setTextColor(ST77XX_YELLOW);
tft.print("AHT20? ");
-
- if (! aht.begin()) {
+
+ if (! aht.begin()) {
tft.setTextColor(ST77XX_RED);
tft.println("FAIL!");
while (1) delay(100);
@@ -78,12 +78,18 @@ void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(SPEAKER, OUTPUT);
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcAttach(LED_BUILTIN, 2000, 8);
+ ledcAttach(SPEAKER, 2000, 8);
+ ledcWrite(SPEAKER, 0);
+#else
ledcSetup(0, 2000 * 80, 8);
ledcAttachPin(LED_BUILTIN, 0);
ledcSetup(1, 2000 * 80, 8);
ledcAttachPin(SPEAKER, 1);
ledcWrite(1, 0);
+#endif
}
@@ -93,11 +99,11 @@ void loop() {
/********************* sensors */
sensors_event_t humidity, temp, pressure;
-
+
tft.setCursor(0, 0);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
dps.getEvents(&temp, &pressure);
-
+
tft.print("DP310: ");
tft.print(temp.temperature, 0);
tft.print(" C ");
@@ -124,7 +130,7 @@ void loop() {
tft.setCursor(0, 40);
tft.setTextColor(ST77XX_YELLOW);
tft.print("Buttons: ");
- if (! digitalRead(BUTTON_DOWN)) {
+ if (! digitalRead(BUTTON_DOWN)) {
tft.setTextColor(ST77XX_GREY);
} else {
Serial.println("DOWN pressed");
@@ -132,15 +138,15 @@ void loop() {
}
tft.print("DOWN ");
- if (! digitalRead(BUTTON_SELECT)) {
+ if (! digitalRead(BUTTON_SELECT)) {
tft.setTextColor(ST77XX_GREY);
} else {
Serial.println("SELECT pressed");
tft.setTextColor(ST77XX_WHITE);
}
tft.print("SEL ");
-
- if (! digitalRead(BUTTON_UP)) {
+
+ if (! digitalRead(BUTTON_UP)) {
tft.setTextColor(ST77XX_GREY);
} else {
Serial.println("UP pressed");
@@ -150,12 +156,12 @@ void loop() {
/************************** CAPACITIVE */
uint16_t touchread;
-
+
tft.setCursor(0, 60);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Captouch 6: ");
touchread = touchRead(6);
- if (touchread < 10000 ) {
+ if (touchread < 10000 ) {
tft.setTextColor(ST77XX_GREY, BG_COLOR);
} else {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
@@ -163,12 +169,12 @@ void loop() {
tft.print(touchread);
tft.println(" ");
Serial.printf("Captouch #6 reading: %d\n", touchread);
-
+
tft.setCursor(0, 80);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Captouch 7: ");
touchread = touchRead(7);
- if (touchread < 20000 ) {
+ if (touchread < 20000 ) {
tft.setTextColor(ST77XX_GREY, BG_COLOR);
} else {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
@@ -182,7 +188,7 @@ void loop() {
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Captouch 8: ");
touchread = touchRead(8);
- if (touchread < 20000 ) {
+ if (touchread < 20000 ) {
tft.setTextColor(ST77XX_GREY, BG_COLOR);
} else {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
@@ -199,7 +205,7 @@ void loop() {
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Analog 0: ");
analogread = analogRead(A0);
- if (analogread < 8000 ) {
+ if (analogread < 8000 ) {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
} else {
tft.setTextColor(ST77XX_RED, BG_COLOR);
@@ -213,7 +219,7 @@ void loop() {
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Analog 1: ");
analogread = analogRead(A1);
- if (analogread < 8000 ) {
+ if (analogread < 8000 ) {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
} else {
tft.setTextColor(ST77XX_RED, BG_COLOR);
@@ -222,12 +228,12 @@ void loop() {
tft.println(" ");
Serial.printf("Analog A1 reading: %d\n", analogread);
-
+
tft.setCursor(0, 160);
tft.setTextColor(ST77XX_YELLOW, BG_COLOR);
tft.print("Analog 2: ");
analogread = analogRead(A2);
- if (analogread < 8000 ) {
+ if (analogread < 8000 ) {
tft.setTextColor(ST77XX_WHITE, BG_COLOR);
} else {
tft.setTextColor(ST77XX_RED, BG_COLOR);
@@ -244,21 +250,25 @@ void loop() {
tft.print(analogread);
tft.println(" ");
Serial.printf("Light sensor reading: %d\n", analogread);
-
+
/************************** Beep! */
- if (digitalRead(BUTTON_SELECT)) {
+ if (digitalRead(BUTTON_SELECT)) {
Serial.println("** Beep! ***");
fhtone(SPEAKER, 988.0, 100.0); // tone1 - B5
fhtone(SPEAKER, 1319.0, 200.0); // tone2 - E6
delay(100);
//fhtone(SPEAKER, 2000.0, 100.0);
}
-
+
/************************** LEDs */
// pulse red LED
+#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcWrite(LED_BUILTIN, LED_dutycycle);
+#else
ledcWrite(0, LED_dutycycle);
+#endif
LED_dutycycle += 32;
-
+
// rainbow dotstars
for (int i=0; i= ESP_IDF_VERSION_VAL(5, 1, 1)
+ ledcAttach(SPEAKER, frequecy, 8);
+ ledcWrite(SPEAKER, 128);
+ delay(duration);
+ ledcWrite(SPEAKER, 0);
+#else
ledcSetup(1, frequecy * 80, 8);
ledcAttachPin(pin, 1);
ledcWrite(1, 128);
delay(duration);
ledcWrite(1, 0);
+#endif
}
diff --git a/FunHouse_Fume_Extractor/code.py b/FunHouse_Fume_Extractor/code.py
index c99ea4278..f5403de7d 100644
--- a/FunHouse_Fume_Extractor/code.py
+++ b/FunHouse_Fume_Extractor/code.py
@@ -11,7 +11,8 @@
from adafruit_emc2101 import EMC2101
from adafruit_funhouse import FunHouse
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# setup for SGP30 sensor
sgp30 = adafruit_sgp30.Adafruit_SGP30(i2c)
diff --git a/FunHouse_HA_Companion/.circuitpython.skip b/FunHouse_HA_Companion/.circuitpython.skip
deleted file mode 100644
index f0ffaa560..000000000
--- a/FunHouse_HA_Companion/.circuitpython.skip
+++ /dev/null
@@ -1,7 +0,0 @@
-FunHouse_HA_Companion/code.py 72: Using the global statement (global-statement)
-FunHouse_HA_Companion/code.py 90: Unused argument 'userdata' (unused-argument)
-FunHouse_HA_Companion/code.py 90: Unused argument 'result' (unused-argument)
-FunHouse_HA_Companion/code.py 90: Unused argument 'payload' (unused-argument)
-FunHouse_HA_Companion/code.py 97: Unused argument 'client' (unused-argument)
-FunHouse_HA_Companion/code.py 102: Unused argument 'client' (unused-argument)
-FunHouse_HA_Companion/code.py 120: Redefining name 'output' from outer scope (line 172) (redefined-outer-name)
diff --git a/FunHouse_HA_Companion/code.py b/FunHouse_HA_Companion/code.py
index 7bd43fdb8..ed55a3bb0 100755
--- a/FunHouse_HA_Companion/code.py
+++ b/FunHouse_HA_Companion/code.py
@@ -2,11 +2,14 @@
# SPDX-FileCopyrightText: Copyright (c) 2021 Melissa LeBlanc-Williams for Adafruit Industries
#
# SPDX-License-Identifier: MIT
+import os
import time
import json
+from displayio import CIRCUITPYTHON_TERMINAL
from adafruit_display_shapes.circle import Circle
from adafruit_funhouse import FunHouse
+
PUBLISH_DELAY = 60
ENVIRONMENT_CHECK_DELAY = 5
ENABLE_PIR = True
@@ -16,18 +19,12 @@
INITIAL_LIGHT_COLOR = 0x008000
USE_FAHRENHEIT = True
-try:
- from secrets import secrets
-except ImportError:
- print("WiFi secrets are kept in secrets.py, please add them there!")
- raise
-
funhouse = FunHouse(default_bg=0x0F0F00)
funhouse.peripherals.dotstars.fill(INITIAL_LIGHT_COLOR)
# Don't display the splash yet to avoid
# redrawing labels after each one is added
-funhouse.display.show(None)
+funhouse.display.root_group = CIRCUITPYTHON_TERMINAL
# Add the labels
funhouse.add_text(
@@ -68,43 +65,24 @@
)
# Now display the splash to draw all labels at once
-funhouse.display.show(funhouse.splash)
+funhouse.display.root_group = funhouse.splash
status = Circle(229, 10, 10, fill=0xFF0000, outline=0x880000)
funhouse.splash.append(status)
-def update_enviro():
- global environment
-
- temp = funhouse.peripherals.temperature
- unit = "C"
- if USE_FAHRENHEIT:
- temp = temp * (9 / 5) + 32
- unit = "F"
-
- environment["temperature"] = temp
- environment["pressure"] = funhouse.peripherals.pressure
- environment["humidity"] = funhouse.peripherals.relative_humidity
- environment["light"] = funhouse.peripherals.light
-
- funhouse.set_text("{:.1f}{}".format(environment["temperature"], unit), temp_label)
- funhouse.set_text("{:.1f}%".format(environment["humidity"]), hum_label)
- funhouse.set_text("{}hPa".format(environment["pressure"]), pres_label)
-
-
-def connected(client, userdata, result, payload):
+def connected(client, _userdata, _result, _payload):
status.fill = 0x00FF00
status.outline = 0x008800
print("Connected to MQTT! Subscribing...")
client.subscribe(LIGHT_COMMAND_TOPIC)
-def disconnected(client):
+def disconnected(_client):
status.fill = 0xFF0000
status.outline = 0x880000
-def message(client, topic, payload):
+def message(_client, topic, payload):
print("Topic {0} received new value: {1}".format(topic, payload))
if topic == LIGHT_COMMAND_TOPIC:
settings = json.loads(payload)
@@ -122,29 +100,28 @@ def message(client, topic, payload):
def publish_light_state():
funhouse.peripherals.led = True
- output = {
+ publish_output = {
"brightness": round(funhouse.peripherals.dotstars.brightness * 255),
"state": "on" if funhouse.peripherals.dotstars.brightness > 0 else "off",
"color": funhouse.peripherals.dotstars[0],
}
# Publish the Dotstar State
print("Publishing to {}".format(LIGHT_STATE_TOPIC))
- funhouse.network.mqtt_publish(LIGHT_STATE_TOPIC, json.dumps(output))
+ funhouse.network.mqtt_publish(LIGHT_STATE_TOPIC, json.dumps(publish_output))
funhouse.peripherals.led = False
-
# Initialize a new MQTT Client object
funhouse.network.init_mqtt(
- secrets["mqtt_broker"],
- secrets["mqtt_port"],
- secrets["mqtt_username"],
- secrets["mqtt_password"],
+ os.getenv("MQTT_BROKER"),
+ os.getenv("MQTT_PORT"),
+ os.getenv("MQTT_USERNAME"),
+ os.getenv("MQTT_PASSWORD"),
)
funhouse.network.on_mqtt_connect = connected
funhouse.network.on_mqtt_disconnect = disconnected
funhouse.network.on_mqtt_message = message
-print("Attempting to connect to {}".format(secrets["mqtt_broker"]))
+print("Attempting to connect to {}".format(os.getenv("MQTT_BROKER")))
funhouse.network.mqtt_connect()
last_publish_timestamp = None
@@ -162,7 +139,6 @@ def publish_light_state():
last_peripheral_state["pir_sensor"] = funhouse.peripherals.pir_sensor
environment = {}
-update_enviro()
last_environment_timestamp = time.monotonic()
# Provide Initial light state
@@ -172,7 +148,20 @@ def publish_light_state():
if not environment or (
time.monotonic() - last_environment_timestamp > ENVIRONMENT_CHECK_DELAY
):
- update_enviro()
+ temp = funhouse.peripherals.temperature
+ unit = "C"
+ if USE_FAHRENHEIT:
+ temp = temp * (9 / 5) + 32
+ unit = "F"
+
+ environment["temperature"] = temp
+ environment["pressure"] = funhouse.peripherals.pressure
+ environment["humidity"] = funhouse.peripherals.relative_humidity
+ environment["light"] = funhouse.peripherals.light
+
+ funhouse.set_text("{:.1f}{}".format(environment["temperature"], unit), temp_label)
+ funhouse.set_text("{:.1f}%".format(environment["humidity"]), hum_label)
+ funhouse.set_text("{}hPa".format(environment["pressure"]), pres_label)
last_environment_timestamp = time.monotonic()
output = environment
diff --git a/FunHouse_IOT_Hub/battery_peripheral/code.py b/FunHouse_IOT_Hub/battery_peripheral/code.py
index 72a526d31..c7b710e31 100644
--- a/FunHouse_IOT_Hub/battery_peripheral/code.py
+++ b/FunHouse_IOT_Hub/battery_peripheral/code.py
@@ -97,7 +97,9 @@ def message(client, feed_id, payload):
print("Connecting to Adafruit IO...")
io.connect()
-display_bus = displayio.I2CDisplay(board.I2C(), device_address=0x3C)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+display_bus = displayio.I2CDisplay(i2c, device_address=0x3C)
WIDTH = 128
HEIGHT = 32
@@ -106,7 +108,7 @@ def message(client, feed_id, payload):
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=WIDTH, height=HEIGHT)
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
digital_label = label.Label(
terminalio.FONT, text="Battery Percent: ", color=0xFFFFFF, x=4, y=4
@@ -116,7 +118,9 @@ def message(client, feed_id, payload):
splash.append(alarm_label)
-sensor = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+sensor = LC709203F(i2c)
start = 0
while True:
diff --git a/FunHouse_IOT_Hub/iot_hub/code.py b/FunHouse_IOT_Hub/iot_hub/code.py
index ee7058bdc..c09c11844 100644
--- a/FunHouse_IOT_Hub/iot_hub/code.py
+++ b/FunHouse_IOT_Hub/iot_hub/code.py
@@ -101,11 +101,11 @@
# pylint: disable=unused-argument
def rgb(last):
""" Function for when the rgb screen is active """
- display.show(None)
+ display.root_group = displayio.CIRCUITPYTHON_TERMINAL
rgb_group[3].text = "00"
rgb_group[4].text = "00"
rgb_group[5].text = "00"
- display.show(rgb_group)
+ display.root_group = rgb_group
time.sleep(0.2)
index = 0
colors = [00, 00, 00]
@@ -144,7 +144,7 @@ def rgb(last):
break
time.sleep(0.1)
- display.show(None)
+ display.root_group = displayio.CIRCUITPYTHON_TERMINAL
time.sleep(0.1)
def rgb_set_color(message):
diff --git a/FunHouse_IOT_Hub/neopixel_remote/code.py b/FunHouse_IOT_Hub/neopixel_remote/code.py
index a0868ce52..685a7bdae 100644
--- a/FunHouse_IOT_Hub/neopixel_remote/code.py
+++ b/FunHouse_IOT_Hub/neopixel_remote/code.py
@@ -123,7 +123,7 @@
except AdafruitIO_RequestError:
neopixel_feed = io.create_new_feed("neopixel")
-board.DISPLAY.show(group)
+board.DISPLAY.root_group = group
print("ready")
last_color = 257
last_index = 0
@@ -136,7 +136,7 @@
# Used to prevent the touchscreen sending incorrect results
if last_index == index:
color = colors[index]
- if colors[index]:
+ if colors[index] is not None:
group[1].fill = color
if last_color != color:
color_str = "#{:06x}".format(color)
diff --git a/FunHouse_LIFX/code.py b/FunHouse_LIFX/code.py
index 05bb873c2..2cb211075 100644
--- a/FunHouse_LIFX/code.py
+++ b/FunHouse_LIFX/code.py
@@ -7,6 +7,7 @@
import wifi
import adafruit_requests
from adafruit_funhouse import FunHouse
+from displayio import CIRCUITPYTHON_TERMINAL
import adafruit_lifx
# Get wifi details and more from a secrets.py file
@@ -59,7 +60,7 @@ def set_label_color(conditional, index, on_color):
# Create the labels
-funhouse.display.show(None)
+funhouse.display.root_group = CIRCUITPYTHON_TERMINAL
up_label = funhouse.add_text(text="+", text_position=(3, 6), text_color=0x606060)
down_label = funhouse.add_text(text="-", text_position=(3, 40), text_color=0x606060)
running_label = funhouse.add_text(
@@ -69,7 +70,7 @@ def set_label_color(conditional, index, on_color):
text=trip_time, text_scale=2, text_position=(30, 25), text_color=0x606060
)
-funhouse.display.show(funhouse.splash)
+funhouse.display.root_group = funhouse.splash
# Turn on the light
print("Turning on light...")
diff --git a/FunHouse_Mailslot/code.py b/FunHouse_Mailslot/code.py
index bcfb69a69..37b5bc662 100644
--- a/FunHouse_Mailslot/code.py
+++ b/FunHouse_Mailslot/code.py
@@ -5,9 +5,11 @@
import board
from adafruit_debouncer import Debouncer
+from displayio import CIRCUITPYTHON_TERMINAL
from digitalio import DigitalInOut, Pull
from adafruit_funhouse import FunHouse
+
beam_sense_pin = DigitalInOut(board.A0) # defaults to input
beam_sense_pin.pull = Pull.UP # turn on internal pull-up resistor
beam_sensor = Debouncer(beam_sense_pin)
@@ -23,13 +25,13 @@
funhouse.peripherals.dotstars.fill(AMBER)
# Create the labels
-funhouse.display.show(None)
+funhouse.display.root_group = CIRCUITPYTHON_TERMINAL
mail_label = funhouse.add_text(
text="No Mail yet", text_position=(4, 14), text_color=AMBER
)
reset_label = funhouse.add_text(text="reset", text_position=(3, 70), text_color=GRAY)
-funhouse.display.show(funhouse.splash)
+funhouse.display.root_group = funhouse.splash
def send_io_data(mail_value):
diff --git a/FunHouse_Motion_Outlet/.circuitpython.skip b/FunHouse_Motion_Outlet/.circuitpython.skip
deleted file mode 100644
index 0a34a6ff2..000000000
--- a/FunHouse_Motion_Outlet/.circuitpython.skip
+++ /dev/null
@@ -1,8 +0,0 @@
-FunHouse_Motion_Outlet/code.py 64: Trailing whitespace (trailing-whitespace)
-FunHouse_Motion_Outlet/code.py 113: Trailing whitespace (trailing-whitespace)
-FunHouse_Motion_Outlet/code.py 23: Using the global statement (global-statement)
-FunHouse_Motion_Outlet/code.py 43: Unused argument 'userdata' (unused-argument)
-FunHouse_Motion_Outlet/code.py 43: Unused argument 'result' (unused-argument)
-FunHouse_Motion_Outlet/code.py 43: Unused argument 'payload' (unused-argument)
-FunHouse_Motion_Outlet/code.py 49: Unused argument 'client' (unused-argument)
-FunHouse_Motion_Outlet/code.py 53: Unused argument 'client' (unused-argument)
diff --git a/FunHouse_Motion_Outlet/code.py b/FunHouse_Motion_Outlet/code.py
index c0864a499..fb48c215d 100755
--- a/FunHouse_Motion_Outlet/code.py
+++ b/FunHouse_Motion_Outlet/code.py
@@ -3,32 +3,31 @@
#
# SPDX-License-Identifier: MIT
+import os
import time
import board
import digitalio
+from displayio import CIRCUITPYTHON_TERMINAL
from adafruit_display_shapes.circle import Circle
from adafruit_funhouse import FunHouse
OUTLET_STATE_TOPIC = "funhouse/outlet/state"
OUTLET_COMMAND_TOPIC = "funhouse/outlet/set"
MOTION_TIMEOUT = 300 # Timeout in seconds
-USE_MQTT = False
+USE_MQTT = True
-if USE_MQTT:
- try:
- from secrets import secrets
- except ImportError:
- print("WiFi secrets are kept in secrets.py, please add them there!")
- raise
+# Use dict to avoid reassigning the variable
+timestamps = {
+ "last_pir": None
+}
def set_outlet_state(value):
- global last_pir_timestamp
if value:
funhouse.peripherals.dotstars.fill(0x00FF00)
- last_pir_timestamp = time.monotonic()
+ timestamps["last_pir"] = time.monotonic()
else:
funhouse.peripherals.dotstars.fill(0xFF0000)
- last_pir_timestamp = time.monotonic() - MOTION_TIMEOUT
+ timestamps["last_pir"] = time.monotonic() - MOTION_TIMEOUT
outlet.value = value
publish_outlet_state()
@@ -42,36 +41,35 @@ def publish_outlet_state():
funhouse.network.mqtt_publish(OUTLET_STATE_TOPIC, output)
funhouse.peripherals.led = False
-def connected(client, userdata, result, payload):
+def connected(client, _userdata, _result, _payload):
status.fill = 0x00FF00
status.outline = 0x008800
print("Connected to MQTT! Subscribing...")
client.subscribe(OUTLET_COMMAND_TOPIC)
-def disconnected(client):
+def disconnected(_client):
status.fill = 0xFF0000
status.outline = 0x880000
-def message(client, topic, payload):
+def message(_client, topic, payload):
print("Topic {0} received new value: {1}".format(topic, payload))
if topic == OUTLET_COMMAND_TOPIC:
set_outlet_state(payload == "on")
def timeleft():
- seconds = int(last_pir_timestamp + MOTION_TIMEOUT - time.monotonic())
+ seconds = int(timestamps["last_pir"] + MOTION_TIMEOUT - time.monotonic())
if outlet.value and seconds >= 0:
minutes = seconds // 60
seconds -= minutes * 60
return "{:01}:{:02}".format(minutes, seconds)
- return "Off"
+ return "Off"
# Set Initial States
funhouse = FunHouse(default_bg=0x0F0F00)
funhouse.peripherals.dotstars.fill(0)
outlet = digitalio.DigitalInOut(board.A0)
outlet.direction = digitalio.Direction.OUTPUT
-last_pir_timestamp = None
-funhouse.display.show(None)
+funhouse.display.root_group = CIRCUITPYTHON_TERMINAL
funhouse.add_text(
text="Timeout Left:",
text_position=(20, 60),
@@ -84,7 +82,7 @@ def timeleft():
text_color=0xFFFF00,
text_font="fonts/Arial-Bold-24.pcf",
)
-funhouse.display.show(funhouse.splash)
+funhouse.display.root_group = funhouse.splash
status = Circle(229, 10, 10, fill=0xFF0000, outline=0x880000)
funhouse.splash.append(status)
@@ -92,27 +90,27 @@ def timeleft():
# Initialize a new MQTT Client object
if USE_MQTT:
funhouse.network.init_mqtt(
- secrets["mqtt_broker"],
- secrets["mqtt_port"],
- secrets["mqtt_username"],
- secrets["mqtt_password"],
+ os.getenv("MQTT_BROKER"),
+ os.getenv("MQTT_PORT"),
+ os.getenv("MQTT_USERNAME"),
+ os.getenv("MQTT_PASSWORD"),
)
funhouse.network.on_mqtt_connect = connected
funhouse.network.on_mqtt_disconnect = disconnected
funhouse.network.on_mqtt_message = message
- print("Attempting to connect to {}".format(secrets["mqtt_broker"]))
+ print("Attempting to connect to {}".format(os.getenv("MQTT_BROKER")))
funhouse.network.mqtt_connect()
set_outlet_state(False)
while True:
if funhouse.peripherals.pir_sensor:
- last_pir_timestamp = time.monotonic()
+ timestamps["last_pir"] = time.monotonic()
if not outlet.value:
set_outlet_state(True)
- if outlet.value and time.monotonic() >= last_pir_timestamp + MOTION_TIMEOUT:
+ if outlet.value and time.monotonic() >= timestamps["last_pir"] + MOTION_TIMEOUT:
set_outlet_state(False)
- funhouse.set_text(timeleft(), countdown_label)
+ funhouse.set_text(timeleft(), countdown_label)
# Check any topics we are subscribed to
if USE_MQTT:
funhouse.network.mqtt_loop(0.5)
diff --git a/FunHouse_Pet_Bowl_Sensor/.circuitpython.skip b/FunHouse_Pet_Bowl_Sensor/.circuitpython.skip
deleted file mode 100644
index aa53e81ae..000000000
--- a/FunHouse_Pet_Bowl_Sensor/.circuitpython.skip
+++ /dev/null
@@ -1,8 +0,0 @@
-FunHouse_Pet_Bowl_Sensor/code.py 106: Line too long (101/100) (line-too-long)
-FunHouse_Pet_Bowl_Sensor/code.py 31: Redefining name 'bowl_state' from outer scope (line 112) (redefined-outer-name)
-FunHouse_Pet_Bowl_Sensor/code.py 38: Unused argument 'client' (unused-argument)
-FunHouse_Pet_Bowl_Sensor/code.py 38: Unused argument 'userdata' (unused-argument)
-FunHouse_Pet_Bowl_Sensor/code.py 38: Unused argument 'result' (unused-argument)
-FunHouse_Pet_Bowl_Sensor/code.py 38: Unused argument 'payload' (unused-argument)
-FunHouse_Pet_Bowl_Sensor/code.py 42: Unused argument 'client' (unused-argument)
-FunHouse_Pet_Bowl_Sensor/code.py 59: Redefining name 'water_level' from outer scope (line 108) (redefined-outer-name)
diff --git a/FunHouse_Pet_Bowl_Sensor/code.py b/FunHouse_Pet_Bowl_Sensor/code.py
index a65c18985..ead6fef18 100755
--- a/FunHouse_Pet_Bowl_Sensor/code.py
+++ b/FunHouse_Pet_Bowl_Sensor/code.py
@@ -3,23 +3,19 @@
#
# SPDX-License-Identifier: MIT
+import os
import time
import board
import digitalio
import analogio
+from displayio import CIRCUITPYTHON_TERMINAL
from adafruit_display_shapes.circle import Circle
from adafruit_funhouse import FunHouse
BOWL_STATE_TOPIC = "funhouse/catbowl/state"
LOW_VALUE = 4000
EMPTY_VALUE = 2000
-UPDATE_INTERVAL = 1800 # Every 30 minutes
-
-try:
- from secrets import secrets
-except ImportError:
- print("WiFi secrets are kept in secrets.py, please add them there!")
- raise
+UPDATE_INTERVAL = 1800 # Every 30 minutes
# Text labels for the Display
states = {
@@ -28,18 +24,18 @@
"full": "Full",
}
-def publish_bowl_state(bowl_state):
+def publish_bowl_state(state):
funhouse.peripherals.led = True
# Publish the Bowl Level State
print("Publishing to {}".format(BOWL_STATE_TOPIC))
- funhouse.network.mqtt_publish(BOWL_STATE_TOPIC, bowl_state)
+ funhouse.network.mqtt_publish(BOWL_STATE_TOPIC, state)
funhouse.peripherals.led = False
-def connected(client, userdata, result, payload):
+def connected(_client, _userdata, _result, _payload):
status.fill = 0x00FF00
status.outline = 0x008800
-def disconnected(client):
+def disconnected(_client):
status.fill = 0xFF0000
status.outline = 0x880000
@@ -56,10 +52,10 @@ def get_bowl_state(level):
return "low"
return "full"
-def bowl_level_display(water_level):
+def bowl_level_display(level):
if funhouse.peripherals.button_sel:
- return water_level
- return states[get_bowl_state(water_level)]
+ return level
+ return states[get_bowl_state(level)]
# Set Initial States
funhouse = FunHouse(default_bg=0x0F0F00)
@@ -67,7 +63,7 @@ def bowl_level_display(water_level):
water_enable = digitalio.DigitalInOut(board.A0)
water_enable.switch_to_output()
water_level_sensor = analogio.AnalogIn(board.A1)
-funhouse.display.show(None)
+funhouse.display.root_group = CIRCUITPYTHON_TERMINAL
funhouse.add_text(
text="Bowl Level:",
text_position=(120, 60),
@@ -81,29 +77,32 @@ def bowl_level_display(water_level):
text_color=0xFFFF00,
text_font="fonts/Arial-Bold-24.pcf",
)
-funhouse.display.show(funhouse.splash)
+funhouse.display.root_group = funhouse.splash
status = Circle(229, 10, 10, fill=0xFF0000, outline=0x880000)
funhouse.splash.append(status)
# Initialize a new MQTT Client object
funhouse.network.init_mqtt(
- secrets["mqtt_broker"],
- secrets["mqtt_port"],
- secrets["mqtt_username"],
- secrets["mqtt_password"],
+ os.getenv("MQTT_BROKER"),
+ os.getenv("MQTT_PORT"),
+ os.getenv("MQTT_USERNAME"),
+ os.getenv("MQTT_PASSWORD"),
)
funhouse.network.on_mqtt_connect = connected
funhouse.network.on_mqtt_disconnect = disconnected
-print("Attempting to connect to {}".format(secrets["mqtt_broker"]))
+print("Attempting to connect to {}".format(os.getenv("MQTT_BROKER")))
funhouse.network.mqtt_connect()
last_reading_timestamp = None
last_bowl_state = None
while True:
- if last_reading_timestamp is None or time.monotonic() > last_reading_timestamp + UPDATE_INTERVAL:
+ if (
+ last_reading_timestamp is None
+ or time.monotonic() > last_reading_timestamp + UPDATE_INTERVAL
+ ):
# Take Reading
water_level = get_bowl_reading()
# Update Display
diff --git a/Glider_Paper_Airplane_Controller/code.py b/Glider_Paper_Airplane_Controller/code.py
index d22d0e6ed..77a179104 100644
--- a/Glider_Paper_Airplane_Controller/code.py
+++ b/Glider_Paper_Airplane_Controller/code.py
@@ -13,7 +13,8 @@
from adafruit_hid.keycode import Keycode
# I2C setup
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
# range of LIS3DH
diff --git a/Google_Sheet_Sensor_Logging/bme280_logger.py b/Google_Sheet_Sensor_Logging/bme280_logger.py
index 2f9047ad9..69077c09b 100755
--- a/Google_Sheet_Sensor_Logging/bme280_logger.py
+++ b/Google_Sheet_Sensor_Logging/bme280_logger.py
@@ -17,7 +17,9 @@
#--| User Config |-----------------------------------------------
# Sensor setup
-bme = adafruit_bme280.Adafruit_BME280_I2C(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+bme = adafruit_bme280.Adafruit_BME280_I2C(i2c)
# Google Sheets API setup
SCOPES = ['https://spreadsheets.google.com/feeds',
diff --git a/Grand_Central_M4_Arduino_SD_Card/.none.test.only b/Grand_Central_M4_Arduino_SD_Card/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Grand_Central_M4_Arduino_SD_Card/Grand_Central_M4_Arduino_SD_Card.ino b/Grand_Central_M4_Arduino_SD_Card/Grand_Central_M4_Arduino_SD_Card.ino
new file mode 100644
index 000000000..da5195190
--- /dev/null
+++ b/Grand_Central_M4_Arduino_SD_Card/Grand_Central_M4_Arduino_SD_Card.ino
@@ -0,0 +1,89 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+/*
+ SD card read/write
+
+ This example shows how to read and write data to and from an SD card file
+ The circuit:
+ * SD card attached to SPI bus as follows:
+ ** MOSI - pin 64
+ ** MISO - pin 66
+ ** CLK - pin 65
+
+ created Nov 2010
+ by David A. Mellis
+ modified 9 Apr 2012
+ by Tom Igoe
+ modified 14 Feb 2023
+ by Liz Clark
+
+ This example code is in the public domain.
+
+ */
+
+#include
+//#include
+#include "SdFat.h"
+SdFat SD;
+
+#define SD_FAT_TYPE 3
+
+// default CS pin is SDCARD_SS_PIN (83) for Grand Central M4
+#define SD_CS_PIN SDCARD_SS_PIN
+
+File myFile;
+
+void setup() {
+ // Open serial communications and wait for port to open:
+ Serial.begin(115200);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+
+
+ Serial.print("Initializing SD card...");
+
+ if (!SD.begin(SD_CS_PIN)) {
+ Serial.println("initialization failed!");
+ return;
+ }
+ Serial.println("initialization done.");
+
+ // open the file. note that only one file can be open at a time,
+ // so you have to close this one before opening another.
+ myFile = SD.open("test.txt", FILE_WRITE);
+
+ // if the file opened okay, write to it:
+ if (myFile) {
+ Serial.print("Writing to test.txt...");
+ myFile.println("testing 1, 2, 3.");
+ myFile.println("hello grand central m4!");
+ // close the file:
+ myFile.close();
+ Serial.println("done.");
+ } else {
+ // if the file didn't open, print an error:
+ Serial.println("error opening test.txt");
+ }
+
+ // re-open the file for reading:
+ myFile = SD.open("test.txt");
+ if (myFile) {
+ Serial.println("test.txt:");
+
+ // read from the file until there's nothing else in it:
+ while (myFile.available()) {
+ Serial.write(myFile.read());
+ }
+ // close the file:
+ myFile.close();
+ } else {
+ // if the file didn't open, print an error:
+ Serial.println("error opening test.txt");
+ }
+}
+
+void loop() {
+ // nothing happens after setup
+}
diff --git a/Grand_Central_MIDI_Knobs/code.py b/Grand_Central_MIDI_Knobs/code.py
index 8e9560eeb..e96d35fc4 100644
--- a/Grand_Central_MIDI_Knobs/code.py
+++ b/Grand_Central_MIDI_Knobs/code.py
@@ -1,8 +1,8 @@
-# SPDX-FileCopyrightText: 2021 John Park for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 John Park for Adafruit Industries
# SPDX-License-Identifier: MIT
# Grand Central MIDI Knobs
-# for USB MIDI
+# for USB MIDI and optional UART MIDI
# Reads analog inputs, sends out MIDI CC values
# with Kattni Rembor and Jan Goolsbey for range and hysteresis code
@@ -16,18 +16,18 @@
import adafruit_midi # MIDI protocol encoder/decoder library
from adafruit_midi.control_change import ControlChange
-
-USB_MIDI_channel = 1 # pick your USB MIDI out channel here, 1-16
+# pick your USB MIDI out channel here, 1-16
+MIDI_USB_channel = 1
# pick your classic MIDI channel for sending over UART serial TX/RX
CLASSIC_MIDI_channel = 2
-usb_midi = adafruit_midi.MIDI(
- midi_out=usb_midi.ports[1], out_channel=USB_MIDI_channel - 1
+midi_usb = adafruit_midi.MIDI(
+ midi_out=usb_midi.ports[1], out_channel=MIDI_USB_channel - 1
)
# use DIN-5 or TRS MIDI jack on TX/RX for classic MIDI
-uart = busio.UART(board.TX, board.RX, baudrate=31250, timeout=0.001) # initialize UART
+midi_uart = busio.UART(board.TX, board.RX, baudrate=31250, timeout=0.001) # initialize UART
classic_midi = adafruit_midi.MIDI(
- midi_out=uart, midi_in=uart, out_channel=CLASSIC_MIDI_channel - 1, debug=False
+ midi_out=midi_uart, midi_in=midi_uart, out_channel=CLASSIC_MIDI_channel - 1, debug=False
)
led = DigitalInOut(board.D13) # activity indicator
@@ -45,22 +45,22 @@
# assignment of knobs to cc numbers
cc_number = [
- 1, # knob 0, mod wheel
- 2, # knob 1, breath control
- 7, # knob 2, volume
- 10, # knob 3 pan
- 11, # knob 4, expression
- 53, # knob 5
- 54, # knob 6
- 74, # knob 7
- 74, # knob 8, Filter frequency cutoff
- 71, # knob 9, Filter resonance
- 58, # knob 10
- 59, # knob 11
- 60, # knob 12
- 61, # knob 13
- 62, # knob 14
- 63, # knob 15
+ 1, # knob 1, mod wheel
+ 2, # knob 2, breath control
+ 7, # knob 3, volume
+ 10, # knob 4 pan
+ 11, # knob 5, expression
+ 53, # knob 6
+ 54, # knob 7
+ 73, # knob 8
+ 74, # knob 9, Filter frequency cutoff
+ 71, # knob 10, Filter resonance
+ 58, # knob 11
+ 59, # knob 12
+ 60, # knob 13
+ 61, # knob 14
+ 62, # knob 15
+ 63, # knob 16
]
# CC range list defines the characteristics of the potentiometers
@@ -70,15 +70,15 @@
# 36 (C2) min, 84 (B5) max: 49-note keyboard
# 21 (A0) min, 108 (C8) max: 88-note grand piano
cc_range = [
- (36, 84), # knob 0: C2 to B5: 49-note keyboard
- (36, 84), # knob 1
- (36, 84), # knob 2
- (36, 84), # knob 3
- (36, 84), # knob 4
- (36, 84), # knob 5
- (36, 84), # knob 6
- (36, 84), # knob 7
- (0, 127), # knob 8: 0 to 127: full range MIDI CC/control voltage for VCV Rack
+ (0, 127), # knob 0: C2 to B5: 49-note keyboard
+ (0, 127), # knob 1
+ (0, 127), # knob 2
+ (0, 127), # knob 3
+ (0, 127), # knob 4
+ (0, 127), # knob 5
+ (0, 127), # knob 6
+ (0, 127), # knob 7
+ (0, 127), # knob 8
(0, 127), # knob 9
(0, 127), # knob 10
(0, 127), # knob 11
@@ -89,7 +89,7 @@
]
print("---Grand Central MIDI Knobs---")
-print(" USB MIDI channel: {}".format(USB_MIDI_channel))
+print(" USB MIDI channel: {}".format(MIDI_USB_channel))
print(" TRS MIDI channel: {}".format(CLASSIC_MIDI_channel))
# Initialize cc_value list with current value and offset placeholders
@@ -134,7 +134,7 @@ def sign(x): # determine the sign of x
)
if cc_value[i] != last_cc_value[i]: # only send if it changed
# Form a MIDI CC message and send it:
- usb_midi.send(ControlChange(cc_number[i], cc_value[i][0] + cc_range[i][0]))
+ midi_usb.send(ControlChange(cc_number[i], cc_value[i][0] + cc_range[i][0]))
classic_midi.send(
ControlChange(cc_number[i], cc_value[i][0] + cc_range[i][0])
)
diff --git a/HAL9000_RP2040_PropMaker/code.py b/HAL9000_RP2040_PropMaker/code.py
new file mode 100755
index 000000000..3251b16f8
--- /dev/null
+++ b/HAL9000_RP2040_PropMaker/code.py
@@ -0,0 +1,79 @@
+# SPDX-FileCopyrightText: 2023 Phil Burgess for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+HAL 9000 demo project for Adafruit Prop Maker Feather RP2040 and "Massive
+Arcade Button with LED - 100mm red." This simply monitors for button presses
+and then randomly plays one WAV file from the CIRCUITPY filesystem.
+No soldering required; using quick-connects, LED and button can be wired
+to screw terminals on the Prop Maker Feather board.
+NOTE: WAV FILES MUST BE 16-BIT. This will be fixed (allowing 8-bit WAVs if
+desired) in CircuitPython 9.0.
+"""
+
+# pylint: disable=import-error
+import os
+import random
+import time
+import audiocore
+import audiobusio
+import board
+import digitalio
+import pwmio
+
+
+# HARDWARE SETUP -----------------------------------------------------------
+
+# LED+ is wired to "Neo" pin on screw terminal header, LED- to GND.
+# The LED inside the button is NOT a NeoPixel, just a normal passive LED,
+# but that's okay here -- the "Neo" pin can also function like a simple
+# 5V digital output or PWM pin.
+led = pwmio.PWMOut(board.EXTERNAL_NEOPIXELS)
+led.duty_cycle = 65535 # LED ON by default
+
+# Button is wired to GND and "Btn" on screw terminal header:
+button = digitalio.DigitalInOut(board.EXTERNAL_BUTTON)
+button.direction = digitalio.Direction.INPUT
+button.pull = digitalio.Pull.UP
+
+# Enable power to audio amp, etc.
+external_power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = digitalio.Direction.OUTPUT
+external_power.value = True
+
+# I2S audio out
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+# Find all Wave files in CIRCUITPY storage:
+wavefiles = [
+ file
+ for file in os.listdir("/sounds/")
+ if (file.endswith(".wav") and not file.startswith("._"))
+]
+print("Audio files found:", wavefiles)
+
+# FUNCTIONS ----------------------------------------------------------------
+
+
+def play_file(filename):
+ """Plays a WAV file in its entirety (function blocks until done)."""
+ print("Playing", filename)
+ with open(f"/sounds/{filename}", "rb") as file:
+ audio.play(audiocore.WaveFile(file))
+ # Randomly flicker the LED a bit while audio plays
+ while audio.playing:
+ led.duty_cycle = random.randint(5000, 30000)
+ time.sleep(0.1)
+ led.duty_cycle = 65535 # Back to full brightness
+
+
+# MAIN LOOP ----------------------------------------------------------------
+
+
+# Loop simply watches for a button press (button pin pulled to GND, thus
+# False) and then plays a random WAV file. Because the WAV-playing function
+# will take a few seconds, this doesn't even require button debouncing.
+while True:
+ if button.value is False:
+ play_file(random.choice(wavefiles))
diff --git a/HAL9000_RP2040_PropMaker/sounds/HAL.wav b/HAL9000_RP2040_PropMaker/sounds/HAL.wav
new file mode 100644
index 000000000..f7ef618ef
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/HAL.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/fault.wav b/HAL9000_RP2040_PropMaker/sounds/fault.wav
new file mode 100644
index 000000000..d6ea6df9d
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/fault.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/goodbye.wav b/HAL9000_RP2040_PropMaker/sounds/goodbye.wav
new file mode 100644
index 000000000..d504d8d34
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/goodbye.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/info.wav b/HAL9000_RP2040_PropMaker/sounds/info.wav
new file mode 100644
index 000000000..baab1ab20
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/info.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/mission.wav b/HAL9000_RP2040_PropMaker/sounds/mission.wav
new file mode 100644
index 000000000..5d8320e03
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/mission.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/moment.wav b/HAL9000_RP2040_PropMaker/sounds/moment.wav
new file mode 100644
index 000000000..2040e3fe1
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/moment.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/printing.wav b/HAL9000_RP2040_PropMaker/sounds/printing.wav
new file mode 100644
index 000000000..8b12a5dfc
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/printing.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/puzzling.wav b/HAL9000_RP2040_PropMaker/sounds/puzzling.wav
new file mode 100644
index 000000000..e003e759b
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/puzzling.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/python.wav b/HAL9000_RP2040_PropMaker/sounds/python.wav
new file mode 100644
index 000000000..5283cfd74
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/python.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/reload.wav b/HAL9000_RP2040_PropMaker/sounds/reload.wav
new file mode 100644
index 000000000..a3566c251
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/reload.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/repl.wav b/HAL9000_RP2040_PropMaker/sounds/repl.wav
new file mode 100644
index 000000000..2cb9060b4
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/repl.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/serious.wav b/HAL9000_RP2040_PropMaker/sounds/serious.wav
new file mode 100644
index 000000000..08dacfeba
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/serious.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/silly.wav b/HAL9000_RP2040_PropMaker/sounds/silly.wav
new file mode 100644
index 000000000..67ec2d41e
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/silly.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/sorry.wav b/HAL9000_RP2040_PropMaker/sounds/sorry.wav
new file mode 100644
index 000000000..63c5f2522
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/sorry.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/state.wav b/HAL9000_RP2040_PropMaker/sounds/state.wav
new file mode 100644
index 000000000..f3ff9b19c
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/state.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/what.wav b/HAL9000_RP2040_PropMaker/sounds/what.wav
new file mode 100644
index 000000000..3fabd77d1
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/what.wav differ
diff --git a/HAL9000_RP2040_PropMaker/sounds/zero.wav b/HAL9000_RP2040_PropMaker/sounds/zero.wav
new file mode 100644
index 000000000..cc6ac7786
Binary files /dev/null and b/HAL9000_RP2040_PropMaker/sounds/zero.wav differ
diff --git a/HalloWing_Cat_Toy/code.py b/HalloWing_Cat_Toy/code.py
index 7a91c7e91..dbfe90429 100644
--- a/HalloWing_Cat_Toy/code.py
+++ b/HalloWing_Cat_Toy/code.py
@@ -45,7 +45,7 @@
backlight.value = False
splash = displayio.Group()
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
# setup neopixel ring
@@ -54,7 +54,8 @@
pixels.show()
# setup accelerometer
-# i2c = board.I2C()
+# i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
diff --git a/HalloWing_Jump_Scare_Trap/code.py b/HalloWing_Jump_Scare_Trap/code.py
index c5a96b090..05092c79b 100644
--- a/HalloWing_Jump_Scare_Trap/code.py
+++ b/HalloWing_Jump_Scare_Trap/code.py
@@ -90,7 +90,7 @@ def blink(count, speed):
# display setup
backlight = pwmio.PWMOut(board.TFT_BACKLIGHT)
splash = displayio.Group()
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
max_brightness = 2 ** 15
backlight.duty_cycle = 0
# Image list
diff --git a/HalloWing_Tour_Guide/code.py b/HalloWing_Tour_Guide/code.py
index f3207202d..e4856591b 100644
--- a/HalloWing_Tour_Guide/code.py
+++ b/HalloWing_Tour_Guide/code.py
@@ -49,7 +49,7 @@
backlight.value = False
splash = displayio.Group()
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
def play_wave(filename):
diff --git a/Hallowing_Jump_Sound/jump-sound/code.py b/Hallowing_Jump_Sound/jump-sound/code.py
index 5f4364f40..4a1e819d3 100755
--- a/Hallowing_Jump_Sound/jump-sound/code.py
+++ b/Hallowing_Jump_Sound/jump-sound/code.py
@@ -71,33 +71,27 @@ def play_wav(wav):
TOUCH4 = touchio.TouchIn(board.TOUCH4)
# Set up accelerometer on I2C bus, 4G range:
-I2C = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
if IS_HALLOWING_M4:
import adafruit_msa301
- ACCEL = adafruit_msa301.MSA301(I2C)
+ ACCEL = adafruit_msa301.MSA301(i2c)
else:
import adafruit_lis3dh
try:
- ACCEL = adafruit_lis3dh.LIS3DH_I2C(I2C, address=0x18) # Production board
+ ACCEL = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x18) # Production board
except ValueError:
- ACCEL = adafruit_lis3dh.LIS3DH_I2C(I2C, address=0x19) # Beta hardware
+ ACCEL = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19) # Beta hardware
ACCEL.range = adafruit_lis3dh.RANGE_4_G
try:
board.DISPLAY.brightness = 0
SCREEN = displayio.Group()
- board.DISPLAY.show(SCREEN)
+ board.DISPLAY.root_group = SCREEN
- # CircuitPython 6 & 7 compatible
- BITMAP = displayio.OnDiskBitmap(open(IMAGEFILE, 'rb'))
- TILEGRID = displayio.TileGrid(
- BITMAP,
- pixel_shader=getattr(BITMAP, 'pixel_shader', displayio.ColorConverter())
- )
-
- # # CircuitPython 7+ compatible
- # BITMAP = displayio.OnDiskBitmap(IMAGEFILE)
- # TILEGRID = displayio.TileGrid(BITMAP, pixel_shader=BITMAP.pixel_shader)
+ # CircuitPython 7+ compatible
+ BITMAP = displayio.OnDiskBitmap(IMAGEFILE)
+ TILEGRID = displayio.TileGrid(BITMAP, pixel_shader=BITMAP.pixel_shader)
SCREEN.append(TILEGRID)
board.DISPLAY.brightness = 1.0 # Turn on display backlight
diff --git a/Hallowing_Jump_Sound/stomp-and-roar/code.py b/Hallowing_Jump_Sound/stomp-and-roar/code.py
index dc2de1734..fdbe94121 100755
--- a/Hallowing_Jump_Sound/stomp-and-roar/code.py
+++ b/Hallowing_Jump_Sound/stomp-and-roar/code.py
@@ -54,16 +54,17 @@ def load_wav(name):
pass
# Set up accelerometer on I2C bus, 4G range:
-I2C = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
if IS_HALLOWING_M4:
import adafruit_msa301
- ACCEL = adafruit_msa301.MSA301(I2C)
+ ACCEL = adafruit_msa301.MSA301(i2c)
else:
import adafruit_lis3dh
try:
- ACCEL = adafruit_lis3dh.LIS3DH_I2C(I2C, address=0x18) # Production board
+ ACCEL = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x18) # Production board
except ValueError:
- ACCEL = adafruit_lis3dh.LIS3DH_I2C(I2C, address=0x19) # Beta hardware
+ ACCEL = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19) # Beta hardware
ACCEL.range = adafruit_lis3dh.RANGE_4_G
STEP_INTERVAL_MIN = 0.3 # Shortest interval to walk one step (seconds)
@@ -82,18 +83,11 @@ def load_wav(name):
try:
board.DISPLAY.brightness = 0
SCREEN = displayio.Group()
- board.DISPLAY.show(SCREEN)
-
- # CircuitPython 6 & 7 compatible
- BITMAP = displayio.OnDiskBitmap(open(IMAGEFILE, 'rb'))
- TILEGRID = displayio.TileGrid(
- BITMAP,
- pixel_shader=getattr(BITMAP, 'pixel_shader', displayio.ColorConverter())
- )
-
- # # CircuitPython 7+ compatible
- # BITMAP = displayio.OnDiskBitmap(IMAGEFILE)
- # TILEGRID = displayio.TileGrid(BITMAP, pixel_shader=BITMAP.pixel_shader)
+ board.DISPLAY.root_group = SCREEN
+
+ # CircuitPython 7+ compatible
+ BITMAP = displayio.OnDiskBitmap(IMAGEFILE)
+ TILEGRID = displayio.TileGrid(BITMAP, pixel_shader=BITMAP.pixel_shader)
SCREEN.append(TILEGRID)
board.DISPLAY.brightness = 1.0 # Turn on display backlight
diff --git a/Hexpad/code.py b/Hexpad/code.py
new file mode 100644
index 000000000..ab57addd6
--- /dev/null
+++ b/Hexpad/code.py
@@ -0,0 +1,236 @@
+# SPDX-FileCopyrightText: 2023 John Park for Adafruit
+#
+# SPDX-License-Identifier: MIT
+# Hexboard seven key modal note/chord pad for MIDI instruments
+# Runs on QT Py RP2040
+# (other QT Pys should work, but the BOOT button is handy for initiating configuration)
+
+import time
+import board
+from digitalio import DigitalInOut, Pull
+import keypad
+import neopixel
+import rainbowio
+import usb_midi
+import adafruit_midi
+from adafruit_midi.note_on import NoteOn
+from adafruit_midi.note_off import NoteOff
+
+button = DigitalInOut(board.BUTTON)
+button.pull = Pull.UP
+
+num_switches = 7
+leds = neopixel.NeoPixel(board.A0, num_switches, brightness=0.7)
+leds.fill(rainbowio.colorwheel(5))
+leds.show()
+
+# root_picked = False
+note = 0
+root = 0 # defaults to a C
+
+# lists of modal intervals (relative to root). Customize these if you want other scales/keys
+major = (0, 2, 4, 5, 7, 9, 11)
+minor = (0, 2, 3, 5, 7, 8, 10)
+dorian = (0, 2, 3, 5, 7, 9, 10)
+phrygian = (0, 1, 3, 5, 7, 8, 10)
+lydian = (0, 2, 4, 6, 7, 9, 11)
+mixolydian = (0, 2, 4, 5, 7, 9, 10)
+locrian = (0, 1, 3, 5, 6, 8, 10)
+
+modes = []
+modes.append(major)
+modes.append(minor)
+modes.append(dorian)
+modes.append(phrygian)
+modes.append(lydian)
+modes.append(mixolydian)
+modes.append(locrian)
+
+octv = 4
+mode = 0 # default to major scale
+play_chords = True # default to play chords
+pre_notes = modes[mode] # initial mapping
+keymap = (4, 3, 5, 0, 2, 6, 1) # physical to logical key mapping
+
+# Key chart | logical |Interval chart example
+# 6 1 | 6 7 | 9 11
+# 5 0 2 | 3 4 5 | 4 5 7
+# 4 3 | 0 1 | 0 2
+
+# MIDI Setup
+midi_usb_channel = 1 # change this to your desired MIDI out channel, 1-16
+midi_usb = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=midi_usb_channel-1)
+
+# Keyswitch setup
+keyswitch_pins = (board.A3, board.A2, board.SDA, board.SCL, board.TX, board.RX, board.A1)
+keyswitches = keypad.Keys(keyswitch_pins, value_when_pressed=False, pull=True)
+
+def pick_mode():
+ print("Choose mode...")
+ mode_picked = False
+ # pylint: disable=global-statement
+ global mode
+ while not mode_picked:
+ # pylint: disable=redefined-outer-name
+ keyswitch = keyswitches.events.get() # check for key events
+ if keyswitch:
+ if keyswitch.pressed:
+ mode = keymap.index(keyswitch.key_number) # bottom left key is 0/major
+ print("Mode is:", mode)
+ if keyswitch.released:
+ mode_picked = True
+ leds.fill(rainbowio.colorwheel(8))
+ leds.show()
+ pick_octave()
+
+def pick_octave():
+ print("Choose octave...")
+ octave_picked = False
+ # pylint: disable=global-statement
+ global octv
+ while not octave_picked:
+ if button.value is False: # pressed
+ launch_config()
+ time.sleep(0.1)
+ # pylint: disable=redefined-outer-name
+ keyswitch = keyswitches.events.get() # check for key events
+ if keyswitch:
+ if keyswitch.pressed:
+ octv = keymap.index(keyswitch.key_number) # get remapped position, lower left is 0
+ print("Octave is:", octv)
+ if keyswitch.released:
+ octave_picked = True
+ leds.fill(rainbowio.colorwheel(16))
+ pick_root()
+
+def pick_root():# user selects key in which to play
+ print("Choose root note...")
+ root_picked = False
+ # pylint: disable=global-statement
+ global root
+ while not root_picked:
+ if button.value is False: # pressed
+ launch_config()
+ time.sleep(0.1)
+ # pylint: disable=redefined-outer-name
+ keyswitch = keyswitches.events.get() # check for key events
+ if keyswitch:
+ if keyswitch.pressed:
+ root = keymap.index(keyswitch.key_number) # get remapped position, lower left is 0
+ print("ksw:", keyswitch.key_number, "keymap index:", root)
+ note = pre_notes[root]
+ print("note:", note)
+ midi_usb.send(NoteOn(note + (12*octv), 120))
+ root_notes.clear()
+ # pylint: disable=redefined-outer-name
+ for mode_interval in range(num_switches):
+ root_notes.append(modes[mode][mode_interval] + note)
+ print("root note intervals:", root_notes)
+ if keyswitch.released:
+ note = pre_notes[root]
+ midi_usb.send(NoteOff(note + (12*octv), 0))
+ root_picked = True
+ leds.fill(0x0)
+ leds[3] = rainbowio.colorwheel(12)
+ leds[4] = rainbowio.colorwheel(5)
+ leds.show()
+ pick_chords()
+
+def pick_chords():
+ print("Choose chords vs. single notes...")
+ chords_picked = False
+ # pylint: disable=global-statement
+ global play_chords
+ while not chords_picked:
+ if button.value is False: # pressed
+ launch_config()
+ time.sleep(0.1)
+ # pylint: disable=redefined-outer-name
+ keyswitch = keyswitches.events.get() # check for key events
+ if keyswitch:
+ if keyswitch.pressed:
+ if keyswitch.key_number == 4:
+ play_chords = True
+ print("Chords are on")
+ chords_picked = True
+ playback_led_colors()
+ if keyswitch.key_number == 3:
+ play_chords = False
+ print("Chords are off")
+ chords_picked = True
+ playback_led_colors()
+
+# create the interval list based on root key and mode that's been picked in variable
+root_notes = []
+for mode_interval in range(num_switches):
+ root_notes.append(modes[mode][mode_interval] + note)
+print("---Hexpad---")
+print("\nRoot note intervals:", root_notes)
+
+key_colors = (18, 10, 18, 26, 26, 18, 10)
+
+def playback_led_colors():
+ for i in range(num_switches):
+ leds[i]=(rainbowio.colorwheel(key_colors[i]))
+ leds.show()
+ time.sleep(0.1)
+
+playback_led_colors()
+
+# MIDI Note Message Functions
+def send_note_on(note_num):
+ if play_chords is True:
+ note_num = root_notes[note_num] + (12*octv)
+ midi_usb.send(NoteOn(note_num, 120))
+ midi_usb.send(NoteOn(note_num + modes[mode][2], 80))
+ midi_usb.send(NoteOn(note_num + modes[mode][4], 60))
+ midi_usb.send(NoteOn(note_num+12, 80))
+ else:
+ note_num = root_notes[note_num] + (12*octv)
+ midi_usb.send(NoteOn(note_num, 120))
+
+
+def send_note_off(note_num):
+ if play_chords is True:
+ note_num = root_notes[note_num] + (12*octv)
+ midi_usb.send(NoteOff(note_num, 0))
+ midi_usb.send(NoteOff(note_num + modes[mode][2], 0))
+ midi_usb.send(NoteOff(note_num + modes[mode][4], 0))
+ midi_usb.send(NoteOff(note_num+12, 0))
+ else:
+ note_num = root_notes[note_num] + (12*octv)
+ midi_usb.send(NoteOff(note_num, 0))
+
+def send_midi_panic():
+ for x in range(128):
+ midi_usb.send(NoteOff(x, 0))
+
+def launch_config():
+ print("-launching config-")
+ send_midi_panic()
+ leds.fill(rainbowio.colorwheel(5))
+ leds.show()
+ pick_mode()
+
+send_midi_panic() # turn off any stuck notes at startup
+
+
+while True:
+ keyswitch = keyswitches.events.get() # check for key events
+ if keyswitch:
+ keyswitch_number=keyswitch.key_number
+ if keyswitch.pressed:
+ note_picked = keymap.index(keyswitch.key_number)
+ send_note_on(note_picked)
+ leds[keyswitch_number]=(rainbowio.colorwheel(10))
+
+ leds.show()
+ if keyswitch.released:
+ note_picked = keymap.index(keyswitch.key_number)
+ send_note_off(note_picked)
+ leds[keyswitch_number]=(rainbowio.colorwheel(key_colors[keyswitch_number]))
+ leds.show()
+
+ if button.value is False: # pressed
+ launch_config()
+ time.sleep(0.1)
diff --git a/Home_Assistant_Sensor/code.py b/Home_Assistant_Sensor/code.py
index 4365025a6..9b9298f7f 100755
--- a/Home_Assistant_Sensor/code.py
+++ b/Home_Assistant_Sensor/code.py
@@ -8,6 +8,7 @@
Author: Melissa LeBlanc-Williams for Adafruit Industries
"""
+import os
import time
import ssl
import json
@@ -23,30 +24,22 @@
USE_DEEP_SLEEP = True
# Connect to the Sensor
-sht = adafruit_shtc3.SHTC3(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+sht = adafruit_shtc3.SHTC3(i2c)
-# Add a secrets.py to your filesystem that has a dictionary called secrets with "ssid" and
-# "password" keys with your WiFi credentials. DO NOT share that file or commit it into Git or other
-# source control.
-# pylint: disable=no-name-in-module,wrong-import-order
-try:
- from secrets import secrets
-except ImportError:
- print("WiFi secrets are kept in secrets.py, please add them there!")
- raise
-
-wifi.radio.connect(secrets["ssid"], secrets["password"])
-print("Connected to %s!" % secrets["ssid"])
+wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
+print("Connected to %s!" % os.getenv("CIRCUITPY_WIFI_SSID"))
# Create a socket pool
pool = socketpool.SocketPool(wifi.radio)
# Set up a MiniMQTT Client
mqtt_client = MQTT.MQTT(
- broker=secrets["mqtt_broker"],
- port=secrets["mqtt_port"],
- username=secrets["mqtt_username"],
- password=secrets["mqtt_password"],
+ broker=os.getenv("MQTT_BROKER"),
+ port=os.getenv("MQTT_PORT"),
+ username=os.getenv("MQTT_USERNAME"),
+ password=os.getenv("MQTT_PASSWORD"),
socket_pool=pool,
ssl_context=ssl.create_default_context(),
)
diff --git a/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.gemma.test.skip b/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.gemma.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.neokeytrinkey_m0.test.skip b/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.neokeytrinkey_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.rotarytrinkey_m0.test.skip b/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.rotarytrinkey_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.slidetrinkey_m0.test.skip b/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.slidetrinkey_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.trinket_5v.test.skip b/I2C_Multiple_Same_Address/arduino/multi_tca_2x/.trinket_5v.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/I2C_Multiple_Same_Address/arduino/multi_tca_2x/multi_tca_2x.ino b/I2C_Multiple_Same_Address/arduino/multi_tca_2x/multi_tca_2x.ino
new file mode 100755
index 000000000..f967c9bec
--- /dev/null
+++ b/I2C_Multiple_Same_Address/arduino/multi_tca_2x/multi_tca_2x.ino
@@ -0,0 +1,78 @@
+// SPDX-FileCopyrightText: 2022 Carter Nelson for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+
+// for each TCA9548A, add an entry with its address
+const uint8_t TCA_ADDRESSES[] = {
+ 0x70,
+ 0x71
+};
+const uint8_t TCA_COUNT = sizeof(TCA_ADDRESSES) / sizeof(TCA_ADDRESSES[0]);
+
+Adafruit_BME280 bme1; // BME280 #1
+Adafruit_BME280 bme2; // BME280 #2
+Adafruit_BME280 bme3; // BME280 #3
+
+void tcaselect(uint8_t tca, uint8_t channel) {
+ if (tca >= TCA_COUNT) return;
+ if (channel > 7) return;
+
+ // loop over all TCA's
+ for (uint8_t i=0; i= io_time:
+ pixels.fill((0, 0, 255))
+ pixels.show()
+ io_data = measurements[0]
+ if io_data != 0:
+ io.send_data(ikea_pm25["key"], io_data)
+ print(f"sent {io_data} to {ikea_pm25['key']} feed")
+ time.sleep(1)
+ clock = ticks_add(clock, io_time)
+ pixels.fill((0, 0, 0))
+ pixels.show()
+ if data is not None:
+ v = valid_header(data)
+ if v is True:
+ measurement_idx = 0
+ start_read = True
+ if start_read is True:
+ pixels.fill((255, 0, 0))
+ pixels.show()
+ pm25 = (data[5] << 8) | data[6]
+ measurements[measurement_idx] = pm25
+ if measurement_idx == 4:
+ start_read = False
+ measurement_idx = (measurement_idx + 1) % 5
+ print(pm25)
+ print(measurements)
+ else:
+ pixels.fill((0, 255, 0))
+ pixels.show()
+ except Exception as e: # pylint: disable=broad-except
+ print("Error:\n", str(e))
+ print("Resetting microcontroller in 5 seconds")
+ time.sleep(5)
+ microcontroller.reset()
diff --git a/Introducing_Gemma_M0/Gemma_Logger_boot/code.py b/Introducing_Gemma_M0/Gemma_Logger_boot/code.py
index f21a6e571..80ffde536 100644
--- a/Introducing_Gemma_M0/Gemma_Logger_boot/code.py
+++ b/Introducing_Gemma_M0/Gemma_Logger_boot/code.py
@@ -12,4 +12,4 @@
# If the D0 is connected to ground with a wire
# CircuitPython can write to the drive
-storage.remount("/", switch.value)
+storage.remount("/", readonly=switch.value)
diff --git a/IoT_Button_BFF_Examples/CircuitPython_Basic_Example/code.py b/IoT_Button_BFF_Examples/CircuitPython_Basic_Example/code.py
new file mode 100644
index 000000000..f72cf2189
--- /dev/null
+++ b/IoT_Button_BFF_Examples/CircuitPython_Basic_Example/code.py
@@ -0,0 +1,43 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""Basic IoT Button with NeoPixel BFF Example"""
+import time
+import board
+from digitalio import DigitalInOut, Direction, Pull
+from rainbowio import colorwheel
+import neopixel
+
+# setup onboard NeoPixel
+pixel_pin = board.A3
+num_pixels = 1
+
+pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
+
+# setup onboard button
+switch = DigitalInOut(board.A2)
+switch.direction = Direction.INPUT
+switch.pull = Pull.UP
+
+# rainbow cycle function
+def rainbow_cycle(wait):
+ for j in range(255):
+ for i in range(num_pixels):
+ rc_index = (i * 256 // num_pixels) + j
+ pixels[i] = colorwheel(rc_index & 255)
+ pixels.show()
+ time.sleep(wait)
+
+while True:
+ # run rainbow cycle animation
+ rainbow_cycle(0)
+
+ # if the button is not pressed..
+ if switch.value:
+ # neopixel brightness is zero and appears to be "off"
+ pixels.brightness = 0
+ # if the button is pressed..
+ else:
+ # neopixel brightness is 0.3 and rainbow animation is visible
+ pixels.brightness = 0.3
diff --git a/IoT_Button_BFF_Examples/CircuitPython_Simple_IO_Example/code.py b/IoT_Button_BFF_Examples/CircuitPython_Simple_IO_Example/code.py
new file mode 100644
index 000000000..fd8f37171
--- /dev/null
+++ b/IoT_Button_BFF_Examples/CircuitPython_Simple_IO_Example/code.py
@@ -0,0 +1,94 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""Simple Adafruit IO Example for IoT Button with NeoPixel BFF"""
+import os
+import time
+import ssl
+import wifi
+import socketpool
+import microcontroller
+import board
+from digitalio import DigitalInOut, Direction, Pull
+import neopixel
+import adafruit_requests
+from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError
+
+# setup onboard button
+switch = DigitalInOut(board.A2)
+switch.direction = Direction.INPUT
+switch.pull = Pull.UP
+
+# setup onboard NeoPixel
+pixel_pin = board.A3
+num_pixels = 1
+
+pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
+
+# neopixel status colors
+RED = (255, 0, 0)
+GREEN = (0, 255, 0)
+BLUE = (0, 0, 255)
+
+# red until connecting
+pixels.fill(RED)
+pixels.show()
+
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+
+aio_username = os.getenv('aio_username')
+aio_key = os.getenv('aio_key')
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+# Initialize an Adafruit IO HTTP API object
+io = IO_HTTP(aio_username, aio_key, requests)
+print("connected to io")
+# blue when talking to IO
+pixels.fill(BLUE)
+pixels.show()
+
+try:
+ # get feed
+ button_feed = io.get_feed("buttonbff")
+except AdafruitIO_RequestError:
+ # if no feed exists, create one
+ button_feed = io.create_new_feed("buttonbff")
+
+# green once connected
+pixels.fill(GREEN)
+pixels.show()
+
+# button press count sent to IO
+count = 0
+
+while True:
+ try:
+ # if the button is pressed..
+ if not switch.value:
+ # blue when talking to IO
+ pixels.fill(BLUE)
+ pixels.show()
+ # increase by 1 with press
+ count += 1
+ # send count to feed
+ io.send_data(button_feed["key"], count)
+ print("sent %d" % count)
+ print()
+ # delay
+ time.sleep(5)
+ else:
+ # green if connected
+ pixels.fill(GREEN)
+ pixels.show()
+
+ # pylint: disable=broad-except
+ # any errors, reset board
+ except Exception as e:
+ # neopixels red with an error
+ pixels.fill(RED)
+ pixels.show()
+ print("Error:\n", str(e))
+ print("Resetting microcontroller in 10 seconds")
+ time.sleep(10)
+ microcontroller.reset()
diff --git a/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/.qtpy_esp32s2.test.only b/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/.qtpy_esp32s2.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/adafruitIO_iotButtonNeoPixelBFF.ino b/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/adafruitIO_iotButtonNeoPixelBFF.ino
new file mode 100644
index 000000000..2098eea4e
--- /dev/null
+++ b/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/adafruitIO_iotButtonNeoPixelBFF.ino
@@ -0,0 +1,105 @@
+// SPDX-FileCopyrightText: 2016 Todd Treece, Adapted 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+// Adafruit IO IoT Button with NeoPixel BFF Demo
+//
+// Adafruit invests time and resources providing this open source code.
+// Please support Adafruit and open source hardware by purchasing
+// products from Adafruit!
+//
+// Written by Todd Treece for Adafruit Industries
+// Copyright (c) 2016 Adafruit Industries
+// Licensed under the MIT license.
+//
+// All text above must be included in any redistribution.
+
+/************************** Configuration ***********************************/
+
+// edit the config.h tab and enter your Adafruit IO credentials
+// and any additional configuration needed for WiFi, cellular,
+// or ethernet clients.
+#include "config.h"
+#include
+
+/************************ Example Starts Here *******************************/
+
+#define BUTTON_PIN A2
+#define LED_PIN A3
+#define LED_COUNT 1
+Adafruit_NeoPixel pixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
+
+// button state
+bool current = false;
+bool last = false;
+
+// set up the 'digital' feed
+AdafruitIO_Feed *digital = io.feed("digital");
+
+void setup() {
+ pixel.begin();
+ pixel.show();
+ pixel.setBrightness(50);
+ pixel.setPixelColor(0, pixel.Color(150, 0, 0));
+ pixel.show();
+
+ // set button pin as an input
+ pinMode(BUTTON_PIN, INPUT);
+
+ // start the serial connection
+ Serial.begin(115200);
+
+ // wait for serial monitor to open
+ while(! Serial);
+
+ // connect to io.adafruit.com
+ Serial.print("Connecting to Adafruit IO");
+ io.connect();
+
+ // wait for a connection
+ while(io.status() < AIO_CONNECTED) {
+ Serial.print(".");
+ delay(500);
+ }
+
+ // we are connected
+ Serial.println();
+ Serial.println(io.statusText());
+ pixel.setPixelColor(0, pixel.Color(0, 150, 0));
+ pixel.show();
+
+}
+
+void loop() {
+
+ // io.run(); is required for all sketches.
+ // it should always be present at the top of your loop
+ // function. it keeps the client connected to
+ // io.adafruit.com, and processes any incoming data.
+ io.run();
+
+ // grab the current state of the button.
+ // we have to flip the logic because we are
+ // using a pullup resistor.
+ if(digitalRead(BUTTON_PIN) == LOW){
+ current = true;
+ pixel.setPixelColor(0, pixel.Color(0, 0, 150));
+ pixel.show();
+ }
+ else {
+ current = false;
+ pixel.setPixelColor(0, pixel.Color(0, 150, 0));
+ pixel.show();
+ }
+ // return if the value hasn't changed
+ if(current == last)
+ return;
+
+ // save the current state to the 'digital' feed on adafruit io
+ Serial.print("sending button -> ");
+ Serial.println(current);
+ digital->save(current);
+
+ // store last button state
+ last = current;
+
+}
diff --git a/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/config.h b/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/config.h
new file mode 100644
index 000000000..0feb68dac
--- /dev/null
+++ b/IoT_Button_BFF_Examples/adafruitIO_iotButtonNeoPixelBFF/config.h
@@ -0,0 +1,75 @@
+// SPDX-FileCopyrightText: 2016 Todd Treece, Adapted 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+/************************ Adafruit IO Config *******************************/
+
+// visit io.adafruit.com if you need to create an account,
+// or if you need your Adafruit IO key.
+#define IO_USERNAME "your-username-here"
+#define IO_KEY "your-key-here"
+
+/******************************* WIFI **************************************/
+
+// the AdafruitIO_WiFi client will work with the following boards:
+// - HUZZAH ESP8266 Breakout -> https://www.adafruit.com/products/2471
+// - Feather HUZZAH ESP8266 -> https://www.adafruit.com/products/2821
+// - Feather HUZZAH ESP32 -> https://www.adafruit.com/product/3405
+// - Feather M0 WiFi -> https://www.adafruit.com/products/3010
+// - Feather WICED -> https://www.adafruit.com/products/3056
+// - Adafruit PyPortal -> https://www.adafruit.com/product/4116
+// - Adafruit Metro M4 Express AirLift Lite ->
+// https://www.adafruit.com/product/4000
+// - Adafruit AirLift Breakout -> https://www.adafruit.com/product/4201
+// - Adafruit AirLift Shield -> https://www.adafruit.com/product/4285
+// - Adafruit AirLift FeatherWing -> https://www.adafruit.com/product/4264
+
+#define WIFI_SSID "your-ssid-here"
+#define WIFI_PASS "your-ssid-password-here"
+
+// uncomment the following line if you are using airlift
+// #define USE_AIRLIFT
+
+// uncomment the following line if you are using winc1500
+// #define USE_WINC1500
+
+// uncomment the following line if you are using mrk1010 or nano 33 iot
+//#define ARDUINO_SAMD_MKR1010
+
+// comment out the following lines if you are using fona or ethernet
+#include "AdafruitIO_WiFi.h"
+
+#if defined(USE_AIRLIFT) || defined(ADAFRUIT_METRO_M4_AIRLIFT_LITE) || \
+ defined(ADAFRUIT_PYPORTAL)
+// Configure the pins used for the ESP32 connection
+#if !defined(SPIWIFI_SS) // if the wifi definition isnt in the board variant
+// Don't change the names of these #define's! they match the variant ones
+#define SPIWIFI SPI
+#define SPIWIFI_SS 10 // Chip select pin
+#define NINA_ACK 9 // a.k.a BUSY or READY pin
+#define NINA_RESETN 6 // Reset pin
+#define NINA_GPIO0 -1 // Not connected
+#endif
+AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS, SPIWIFI_SS,
+ NINA_ACK, NINA_RESETN, NINA_GPIO0, &SPIWIFI);
+#else
+AdafruitIO_WiFi io(IO_USERNAME, IO_KEY, WIFI_SSID, WIFI_PASS);
+#endif
+/******************************* FONA **************************************/
+
+// the AdafruitIO_FONA client will work with the following boards:
+// - Feather 32u4 FONA -> https://www.adafruit.com/product/3027
+
+// uncomment the following two lines for 32u4 FONA,
+// and comment out the AdafruitIO_WiFi client in the WIFI section
+// #include "AdafruitIO_FONA.h"
+// AdafruitIO_FONA io(IO_USERNAME, IO_KEY);
+
+/**************************** ETHERNET ************************************/
+
+// the AdafruitIO_Ethernet client will work with the following boards:
+// - Ethernet FeatherWing -> https://www.adafruit.com/products/3201
+
+// uncomment the following two lines for ethernet,
+// and comment out the AdafruitIO_WiFi client in the WIFI section
+// #include "AdafruitIO_Ethernet.h"
+// AdafruitIO_Ethernet io(IO_USERNAME, IO_KEY);
diff --git a/IoT_Button_BFF_Examples/basic_IoTButtonExample/.qtpy_esp32s2.test.only b/IoT_Button_BFF_Examples/basic_IoTButtonExample/.qtpy_esp32s2.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/IoT_Button_BFF_Examples/basic_IoTButtonExample/basic_IoTButtonExample.ino b/IoT_Button_BFF_Examples/basic_IoTButtonExample/basic_IoTButtonExample.ino
new file mode 100644
index 000000000..198e4c1b4
--- /dev/null
+++ b/IoT_Button_BFF_Examples/basic_IoTButtonExample/basic_IoTButtonExample.ino
@@ -0,0 +1,38 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// Basic IoT Button with NeoPixel BFF Demo
+
+#include
+
+#define LED_PIN A3
+#define BUTTON_PIN A2
+#define LED_COUNT 1
+
+int buttonState = 0;
+
+Adafruit_NeoPixel pixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
+
+void setup() {
+ pinMode(BUTTON_PIN, INPUT);
+ pixel.begin();
+ pixel.show();
+ pixel.setBrightness(50);
+}
+
+void loop() {
+ //pixel.clear();
+ buttonState = digitalRead(BUTTON_PIN);
+
+ if(buttonState == HIGH) {
+ pixel.setPixelColor(0, pixel.Color(150, 0, 0));
+ pixel.show();
+ }
+
+ if(buttonState == LOW) {
+ pixel.setPixelColor(0, pixel.Color(0, 0, 0));
+ pixel.show();
+ }
+
+}
diff --git a/IoT_Party_Parrot/code.py b/IoT_Party_Parrot/code.py
index 78dfacb74..a4486ee23 100644
--- a/IoT_Party_Parrot/code.py
+++ b/IoT_Party_Parrot/code.py
@@ -52,7 +52,7 @@
group.append(parrot_grid)
-display.show(group)
+display.root_group = group
# add bearer token as a header to request
matrixportal.set_headers({'Authorization': 'Bearer ' + bear})
diff --git a/ItsyBitsy_DotStar_Necklace/.circuitpython.skip b/ItsyBitsy/ItsyBitsy_DotStar_Necklace/.circuitpython.skip
similarity index 100%
rename from ItsyBitsy_DotStar_Necklace/.circuitpython.skip
rename to ItsyBitsy/ItsyBitsy_DotStar_Necklace/.circuitpython.skip
diff --git a/ItsyBitsy_DotStar_Necklace/code.py b/ItsyBitsy/ItsyBitsy_DotStar_Necklace/code.py
similarity index 100%
rename from ItsyBitsy_DotStar_Necklace/code.py
rename to ItsyBitsy/ItsyBitsy_DotStar_Necklace/code.py
diff --git a/ItsyBitsy_Heart_Necklace/code.py b/ItsyBitsy/ItsyBitsy_Heart_Necklace/code.py
similarity index 100%
rename from ItsyBitsy_Heart_Necklace/code.py
rename to ItsyBitsy/ItsyBitsy_Heart_Necklace/code.py
diff --git a/ItsyBitsy_Infinity_Collar/.circuitpython.skip b/ItsyBitsy/ItsyBitsy_Infinity_Collar/.circuitpython.skip
similarity index 100%
rename from ItsyBitsy_Infinity_Collar/.circuitpython.skip
rename to ItsyBitsy/ItsyBitsy_Infinity_Collar/.circuitpython.skip
diff --git a/ItsyBitsy_Infinity_Collar/code.py b/ItsyBitsy/ItsyBitsy_Infinity_Collar/code.py
similarity index 100%
rename from ItsyBitsy_Infinity_Collar/code.py
rename to ItsyBitsy/ItsyBitsy_Infinity_Collar/code.py
diff --git a/ItsyBitsy_Infinity_Cube/code.py b/ItsyBitsy/ItsyBitsy_Infinity_Cube/code.py
similarity index 100%
rename from ItsyBitsy_Infinity_Cube/code.py
rename to ItsyBitsy/ItsyBitsy_Infinity_Cube/code.py
diff --git a/ItsyBitsy_Infinity_Mirror/code.py b/ItsyBitsy/ItsyBitsy_Infinity_Mirror/code.py
similarity index 100%
rename from ItsyBitsy_Infinity_Mirror/code.py
rename to ItsyBitsy/ItsyBitsy_Infinity_Mirror/code.py
diff --git a/ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.brd b/ItsyBitsy/ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.brd
similarity index 100%
rename from ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.brd
rename to ItsyBitsy/ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.brd
diff --git a/ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.sch b/ItsyBitsy/ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.sch
similarity index 100%
rename from ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.sch
rename to ItsyBitsy/ItsyBitsy_Keybow/ItsyBitsy_Keybow_04.sch
diff --git a/ItsyBitsy_Keybow/code.py b/ItsyBitsy/ItsyBitsy_Keybow/code.py
similarity index 100%
rename from ItsyBitsy_Keybow/code.py
rename to ItsyBitsy/ItsyBitsy_Keybow/code.py
diff --git a/Kamek_Magic_Wand_Prop/code.py b/Kamek_Magic_Wand_Prop/code.py
new file mode 100644
index 000000000..2f4de9091
--- /dev/null
+++ b/Kamek_Magic_Wand_Prop/code.py
@@ -0,0 +1,81 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import audiocore
+import audiobusio
+import audiomixer
+import pwmio
+from digitalio import DigitalInOut, Direction, Pull
+import neopixel
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_led_animation.animation.pulse import Pulse
+from adafruit_led_animation.animation.rainbow import Rainbow
+from adafruit_led_animation.color import RED
+from adafruit_motor import servo
+import adafruit_lis3dh
+
+time.sleep(2)
+
+# enable external power pin
+# provides power to the external components
+external_power = DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = Direction.OUTPUT
+external_power.value = True
+
+# i2s playback
+wave_file = open("wand-mix-sfx.wav", "rb")
+wave = audiocore.WaveFile(wave_file)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True)
+audio.play(mixer)
+mixer.voice[0].play(wave, loop=True)
+mixer.voice[0].level = 0
+
+# servo control
+pwm = pwmio.PWMOut(board.EXTERNAL_SERVO, frequency=50)
+prop_servo = servo.ContinuousServo(pwm)
+servo_move = False
+
+# external button
+switch = DigitalInOut(board.EXTERNAL_BUTTON)
+switch.direction = Direction.INPUT
+switch.pull = Pull.UP
+switch_state = False
+
+# external neopixels
+num_pixels = 24
+pixels = neopixel.NeoPixel(board.EXTERNAL_NEOPIXELS, num_pixels)
+pixels.brightness = 0.3
+rainbow = Rainbow(pixels, speed=0.05, period=2)
+pulse = Pulse(pixels, speed=0.1, color=RED, period=3)
+
+i2c = board.I2C()
+int1 = DigitalInOut(board.ACCELEROMETER_INTERRUPT)
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1)
+lis3dh.range = adafruit_lis3dh.RANGE_2_G
+
+clock = ticks_ms()
+prop_time = 3000
+
+while True:
+ if not servo_move:
+ pulse.animate()
+ mixer.voice[0].level = 0.0
+ prop_servo.throttle = 0.0
+ else:
+ prop_servo.throttle = 0.5
+ rainbow.animate()
+ mixer.voice[0].level = 0.5
+ if ticks_diff(ticks_ms(), clock) >= prop_time:
+ servo_move = False
+ if lis3dh.shake(shake_threshold=20) or not switch.value and switch_state is False:
+ servo_move = True
+ clock = ticks_ms()
+ clock = ticks_add(clock, prop_time)
+ switch_state = True
+ if switch.value and switch_state is True:
+ switch_state = False
diff --git a/Kamek_Magic_Wand_Prop/wand-mix-sfx.wav b/Kamek_Magic_Wand_Prop/wand-mix-sfx.wav
new file mode 100644
index 000000000..bc58839e8
Binary files /dev/null and b/Kamek_Magic_Wand_Prop/wand-mix-sfx.wav differ
diff --git a/Kitty_Paw_Keypad/code.py b/Kitty_Paw_Keypad/code.py
index 24774050d..c3d9ad70b 100644
--- a/Kitty_Paw_Keypad/code.py
+++ b/Kitty_Paw_Keypad/code.py
@@ -72,7 +72,7 @@
group.append(parrot0_grid)
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# setup button pins
key_pins = (
diff --git a/LCARS/bmps/1_lcars_anim_sheet.bmp b/LCARS/bmps/1_lcars_anim_sheet.bmp
new file mode 100755
index 000000000..0b0be2c8f
Binary files /dev/null and b/LCARS/bmps/1_lcars_anim_sheet.bmp differ
diff --git a/LCARS/bmps/2_lcars_white.bmp b/LCARS/bmps/2_lcars_white.bmp
new file mode 100755
index 000000000..f8c7613c4
Binary files /dev/null and b/LCARS/bmps/2_lcars_white.bmp differ
diff --git a/LCARS/bmps/3_lcars_black.bmp b/LCARS/bmps/3_lcars_black.bmp
new file mode 100755
index 000000000..8f07bf8fb
Binary files /dev/null and b/LCARS/bmps/3_lcars_black.bmp differ
diff --git a/LCARS/code.py b/LCARS/code.py
new file mode 100755
index 000000000..a9d565722
--- /dev/null
+++ b/LCARS/code.py
@@ -0,0 +1,136 @@
+# SPDX-FileCopyrightText: 2023 John Park for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# LCARS MatrixPortal Display
+# LED brigthness code by Jan Goolsbey
+
+import time
+import os
+import board
+import displayio
+from digitalio import DigitalInOut, Pull
+from simpleio import map_range # For color brightness calculation
+from adafruit_matrixportal.matrix import Matrix
+from adafruit_debouncer import Debouncer
+
+import supervisor
+supervisor.runtime.autoreload = True
+
+SPRITESHEET_FOLDER = "/bmps"
+DEFAULT_FRAME_DURATION = 0.7 # 100ms
+AUTO_ADVANCE_LOOPS = 3
+bitmap = ""
+brightness = 15 # ### Integer value from 0 to 15
+
+# --- Display setup ---
+matrix = Matrix(bit_depth=4, width=128, height=64)
+sprite_group = displayio.Group()
+matrix.display.root_group = sprite_group
+
+# --- Button setup ---
+pin_down = DigitalInOut(board.BUTTON_DOWN)
+pin_down.switch_to_input(pull=Pull.UP)
+button_down = Debouncer(pin_down)
+pin_up = DigitalInOut(board.BUTTON_UP)
+pin_up.switch_to_input(pull=Pull.UP)
+button_up = Debouncer(pin_up)
+
+auto_advance = False
+
+file_list = sorted(
+ [
+ f
+ for f in os.listdir(SPRITESHEET_FOLDER)
+ if (f.endswith(".bmp") and not f.startswith("."))
+ ]
+)
+
+if len(file_list) == 0:
+ raise RuntimeError("No images found")
+
+current_image = None
+current_frame = 0
+current_loop = 0
+frame_count = 0
+frame_duration = DEFAULT_FRAME_DURATION
+
+def image_brightness(new_bright=0):
+ """Calculate the white color brightness.
+ Returns a white RBG888 color value proportional to `new_bright`."""
+ # Scale brightness value
+ bright = int(map_range(new_bright, 0, 15, 0x00, 0xFF))
+ # Recombine and return a composite RGB888 value
+ return (bright << 16) + (bright << 8) + bright
+
+def load_image():
+ """
+ Load an image as a sprite
+ """
+ # pylint: disable=global-statement
+ global current_frame, current_loop, frame_count, frame_duration, bitmap
+ while sprite_group:
+ sprite_group.pop()
+
+ filename = SPRITESHEET_FOLDER + "/" + file_list[current_image]
+
+ bitmap = displayio.OnDiskBitmap(filename)
+ ### Change the palette value proportional to BRIGHTNESS
+ bitmap.pixel_shader[1] = image_brightness(brightness)
+ sprite = displayio.TileGrid(
+ bitmap,
+ pixel_shader=bitmap.pixel_shader,
+ tile_width=bitmap.width,
+ tile_height=matrix.display.height,
+ )
+
+ sprite_group.append(sprite)
+
+ current_frame = 0
+ current_loop = 0
+ frame_count = int(bitmap.height / matrix.display.height)
+ frame_duration = DEFAULT_FRAME_DURATION
+
+
+def advance_image():
+ """
+ Advance to the next image in the list and loop back at the end
+ """
+ # pylint: disable=global-statement
+ global current_image
+ if current_image is not None:
+ current_image += 1
+ if current_image is None or current_image >= len(file_list):
+ current_image = 0
+ load_image()
+
+
+def advance_frame():
+ """
+ Advance to the next frame and loop back at the end
+ """
+ # pylint: disable=global-statement
+ global current_frame, current_loop
+ current_frame = current_frame + 1
+ if current_frame >= frame_count:
+ current_frame = 0
+ current_loop = current_loop + 1
+ sprite_group[0][0] = current_frame
+
+advance_image()
+
+last_time = time.monotonic()
+
+
+while True:
+ button_down.update()
+ button_up.update()
+ if button_up.fell:
+ advance_image()
+ if button_down.fell:
+ brightness = (brightness + 2) % 16
+ print(brightness)
+ bitmap.pixel_shader[1] = image_brightness(brightness) # ### Change the brightness
+
+ if time.monotonic() - last_time > frame_duration:
+ advance_frame()
+ last_time = time.monotonic()
diff --git a/LED_Bullwhip/code.py b/LED_Bullwhip/code.py
index beae3c1ee..905e510bc 100644
--- a/LED_Bullwhip/code.py
+++ b/LED_Bullwhip/code.py
@@ -70,7 +70,8 @@
WAVE_FILE = None
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
#Set up accelerometer & mic
diff --git a/LED_Matrix_Scoreboard/code.py b/LED_Matrix_Scoreboard/code.py
index 9d7dc426b..446cdaa09 100644
--- a/LED_Matrix_Scoreboard/code.py
+++ b/LED_Matrix_Scoreboard/code.py
@@ -58,7 +58,7 @@
score_group.append(score_text)
# start by showing start splash
-display.show(start_group)
+display.root_group = start_group
# setup for break beam LED pin
break_beam = digitalio.DigitalInOut(board.A1)
@@ -97,7 +97,7 @@
hoops = True
button_state = False
# display shows scoreboard
- display.show(score_group)
+ display.root_group = score_group
print("start game!")
time.sleep(0.5)
if hoops:
@@ -138,6 +138,6 @@
score = 0
score_text.text = score
# display shows the start splash graphic
- display.show(start_group)
+ display.root_group = start_group
print("end game!")
time.sleep(0.5)
diff --git a/LED_Noodle_Tree/code.py b/LED_Noodle_Tree/code.py
new file mode 100755
index 000000000..6d03238d2
--- /dev/null
+++ b/LED_Noodle_Tree/code.py
@@ -0,0 +1,27 @@
+# SPDX-FileCopyrightText: 2023 Phil Burgess for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import math
+import time
+import board
+import adafruit_aw9523
+
+GAMMA = 2.6 # For perceptually-linear brightness
+PINS = (15, 14, 13, 12, 7, 6, 5, 4) # List of pins, one per nOOd
+
+# Instantiate AW9523 on STEMMA I2C bus. This was tested on QT Py RP2040.
+# Other boards might require board.I2C() instead of board.STEMMA_I2C().
+aw = adafruit_aw9523.AW9523(board.STEMMA_I2C())
+
+for pin in PINS:
+ aw.get_pin(pin).switch_to_output(value=True) # Activate pin, initialize OFF
+ aw.LED_modes |= 1 << pin # Enable constant-current on pin
+
+while True: # Repeat forever...
+ for i, pin in enumerate(PINS): # For each pin...
+ # Calc sine wave, phase offset for each pin, with gamma correction.
+ # If using red, green, blue nOOds, you'll get a cycle of hues.
+ phase = (time.monotonic() - 2 * i / len(PINS)) * math.pi
+ brightness = int((math.sin(phase) + 1.0) * 0.5 ** GAMMA * 255 + 0.5)
+ aw.set_constant_current(pin, brightness)
diff --git a/LED_Snowboard/code.py b/LED_Snowboard/code.py
index c774343d0..2473806a9 100644
--- a/LED_Snowboard/code.py
+++ b/LED_Snowboard/code.py
@@ -67,7 +67,8 @@
# Set up accelerometer on I2C bus, 4G range:
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
accel.range = adafruit_lis3dh.RANGE_4_G
accel.set_tap(2, 15)
diff --git a/LEGO_Lighting/code.py b/LEGO_Lighting/code.py
new file mode 100644
index 000000000..683bee11f
--- /dev/null
+++ b/LEGO_Lighting/code.py
@@ -0,0 +1,62 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 john park for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+import asyncio
+from random import randint, uniform
+import busio
+import board
+import adafruit_aw9523
+
+# pin descriptions are based on physical LED placement
+# 0 bakery window, 1 lamp1 A, 2 lamp1 B, 3 bakery sconce, 4 lamp 2, 5 music sconce a,
+# 6 music sconce b, 7 music candle, 8 bakery red a, 9 bakery red b, 10 bakery green a,
+# 11 bakery green b
+
+i2c = busio.I2C(board.SCL1, board.SDA1)
+leddriver = adafruit_aw9523.AW9523(i2c)
+
+# Set all pins to outputs and LED (const current) mode
+leddriver.LED_modes = 0xFFFF
+leddriver.directions = 0xFFFF
+
+window_set = [8, 10, 9, 11] # red/green string
+always_on_set = [0, 1, 2, 4] # window and lanterns
+always_on_set_maxes = [100, 30, 30, 40] # maximum brightness per light
+
+# lights that are always on
+for n in range(len(always_on_set)):
+ leddriver.set_constant_current(always_on_set[n], always_on_set_maxes[n])
+
+async def flicker(pin, min_curr, max_curr, interval):
+ while True:
+ rand_max_curr = randint(min_curr, max_curr)
+ for i in range(min_curr, rand_max_curr):
+ leddriver.set_constant_current(pin, i) # aw9523 pin, current out of 255
+ await asyncio.sleep(0.07)
+ await asyncio.sleep(uniform(0.0, interval))
+
+async def string_lights(interval, max_curr):
+ while True:
+ for i in range(len(window_set)):
+ # fade up
+ for j in range(max_curr):
+ leddriver.set_constant_current(window_set[i], j)
+ print(j)
+ await asyncio.sleep(interval)
+ for i in range(len(window_set)):
+ # fade down
+ for j in range(max_curr):
+ leddriver.set_constant_current(window_set[i], max_curr-j)
+ print(j)
+ await asyncio.sleep(interval)
+
+
+async def main():
+ led0_task = asyncio.create_task(flicker(3, 3, 10, 0.7)) # music candle
+ led1_task = asyncio.create_task(flicker(5, 6, 12, 0.7)) # music sconce a
+ led2_task = asyncio.create_task(flicker(6, 6, 12, 0.7)) # music sconce b
+ led3_task = asyncio.create_task(flicker(7, 3, 10, 0.7)) # music candle
+ led4_task = asyncio.create_task(string_lights(0.03, 30))
+ await asyncio.gather(led0_task, led1_task, led2_task, led3_task, led4_task)
+
+asyncio.run(main())
diff --git a/LEGO_Lighting/lego_lighting_01.uf2 b/LEGO_Lighting/lego_lighting_01.uf2
new file mode 100644
index 000000000..e8ec6cf52
Binary files /dev/null and b/LEGO_Lighting/lego_lighting_01.uf2 differ
diff --git a/LICENSES/LGPL-3.0-only.txt b/LICENSES/LGPL-3.0-only.txt
new file mode 100644
index 000000000..78582b814
--- /dev/null
+++ b/LICENSES/LGPL-3.0-only.txt
@@ -0,0 +1,252 @@
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright (C) 2007 Free Software Foundation, Inc.
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.
+
+0. Additional Definitions.
+As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License.
+
+"The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.
+
+An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.
+
+A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version".
+
+The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.
+
+The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.
+
+1. Exception to Section 3 of the GNU GPL.
+You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
+2. Conveying Modified Versions.
+If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:
+a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or
+b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
+3. Object Code Incorporating Material from Library Header Files.
+The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:
+a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.
+b) Accompany the object code with a copy of the GNU GPL and this license document.
+4. Combined Works.
+You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:
+a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.
+b) Accompany the Combined Work with a copy of the GNU GPL and this license document.
+c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.
+d) Do one of the following:
+0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
+1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
+e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)
+5. Combined Libraries.
+You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:
+a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.
+b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
+6. Revised Versions of the GNU Lesser General Public License.
+The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.
+
+If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.
+
+GNU GENERAL PUBLIC LICENSE
+Version 3, 29 June 2007
+
+Copyright © 2007 Free Software Foundation, Inc.
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The GNU General Public License is a free, copyleft license for software and other kinds of works.
+
+The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.
+
+To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.
+
+For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.
+
+Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.
+
+Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS
+
+0. Definitions.
+"This License" refers to version 3 of the GNU General Public License.
+
+"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.
+
+"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations.
+
+To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work.
+
+A "covered work" means either the unmodified Program or a work based on the Program.
+
+To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.
+
+To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.
+
+An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.
+
+1. Source Code.
+The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work.
+A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.
+
+The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.
+
+The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.
+
+The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.
+
+The Corresponding Source for a work in source code form is that same work.
+
+2. Basic Permissions.
+All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.
+You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.
+
+Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.
+
+3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.
+When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.
+
+4. Conveying Verbatim Copies.
+You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.
+You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.
+
+5. Conveying Modified Source Versions.
+You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:
+a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
+b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices".
+c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
+d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
+A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.
+
+6. Conveying Non-Source Forms.
+You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:
+a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
+b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
+c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
+d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
+e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
+A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.
+
+A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.
+
+"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.
+
+If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).
+
+The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.
+
+Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.
+
+7. Additional Terms.
+"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.
+When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.
+
+Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:
+
+a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
+b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
+c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
+d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
+e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
+f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
+All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.
+
+If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.
+
+Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.
+
+8. Termination.
+You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).
+However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.
+
+Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.
+
+9. Acceptance Not Required for Having Copies.
+You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.
+10. Automatic Licensing of Downstream Recipients.
+Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.
+An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.
+
+You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.
+
+11. Patents.
+A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version".
+A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.
+
+Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.
+
+In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.
+
+If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.
+
+If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.
+
+A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.
+
+Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.
+
+12. No Surrender of Others' Freedom.
+If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.
+13. Use with the GNU Affero General Public License.
+Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.
+14. Revised Versions of this License.
+The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.
+
+If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.
+
+Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.
+
+15. Disclaimer of Warranty.
+THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+16. Limitation of Liability.
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+17. Interpretation of Sections 15 and 16.
+If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+
+Copyright (C)
+
+This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box".
+
+You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see .
+
+The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .
diff --git a/Laser_Harp/code.py b/Laser_Harp/code.py
index c8df580a2..9aed327c1 100644
--- a/Laser_Harp/code.py
+++ b/Laser_Harp/code.py
@@ -15,6 +15,7 @@
# Create I2C bus as normal
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# Create the TCA9548A object and give it the I2C bus
tca = adafruit_tca9548a.TCA9548A(i2c)
diff --git a/Laser_Harp/laser_harp_two_voice.py b/Laser_Harp/laser_harp_two_voice.py
index dc366ed57..63d6afbb9 100644
--- a/Laser_Harp/laser_harp_two_voice.py
+++ b/Laser_Harp/laser_harp_two_voice.py
@@ -16,6 +16,7 @@
# Create I2C bus as normal
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# Create the TCA9548A object and give it the I2C bus
tca = adafruit_tca9548a.TCA9548A(i2c)
diff --git a/Laser_Harp/usb_midi_code.py b/Laser_Harp/usb_midi_code.py
index 75bfa60e1..6d8dd8233 100644
--- a/Laser_Harp/usb_midi_code.py
+++ b/Laser_Harp/usb_midi_code.py
@@ -14,6 +14,7 @@
# Create I2C bus as normal
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# Create the TCA9548A object and give it the I2C bus
tca = adafruit_tca9548a.TCA9548A(i2c)
diff --git a/M4_Eyes/file.cpp b/M4_Eyes/file.cpp
index 7584be9c5..b20b6deca 100644
--- a/M4_Eyes/file.cpp
+++ b/M4_Eyes/file.cpp
@@ -32,7 +32,7 @@ static int32_t dwim(JsonVariant v, int32_t def = 0) { // "Do What I Mean"
return v; // ...return value directly
} else if(v.is()) { // If float...
return (int)(v.as() + 0.5); // ...return rounded integer
- } else if(v.is()) { // If string...
+ } else if(v.is()) { // If string...
if((strlen(v) == 6) && !strncasecmp(v, "0x", 2)) { // 4-digit hex?
uint16_t rgb = strtol(v, NULL, 0); // Probably a 16-bit RGB color,
return __builtin_bswap16(rgb); // convert to big-endian
@@ -47,7 +47,7 @@ static int32_t dwim(JsonVariant v, int32_t def = 0) { // "Do What I Mean"
cc[i] = v[i].as();
} else if(v[i].is()) {
cc[i] = (int)(v[i].as() * 255.999);
- } else if(v[i].is()) {
+ } else if(v[i].is()) {
cc[i] = strtol(v[i], NULL, 0);
}
if(cc[i] > 255) cc[i] = 255; // Clip to 8-bit range
@@ -75,7 +75,7 @@ static void getFilename(JsonVariant v, char **ptr) {
free(*ptr); // delete old value...
*ptr = NULL;
}
- if(v.is()) {
+ if(v.is()) {
*ptr = strdup(v); // Make a copy of string, save that
}
}
@@ -108,9 +108,9 @@ void loadConfig(char *filename) {
v = doc["coverage"];
if(v.is() || v.is()) coverage = v.as();
v = doc["upperEyelid"];
- if(v.is()) upperEyelidFilename = strdup(v);
+ if(v.is()) upperEyelidFilename = strdup(v);
v = doc["lowerEyelid"];
- if(v.is()) lowerEyelidFilename = strdup(v);
+ if(v.is()) lowerEyelidFilename = strdup(v);
lightSensorMin = doc["lightSensorMin"] | lightSensorMin;
lightSensorMax = doc["lightSensorMax"] | lightSensorMax;
@@ -222,8 +222,8 @@ void loadConfig(char *filename) {
// below when overriding one or the other and trying to do the right
// thing with free/strdup. So this does waste a tiny bit of RAM but
// it's only the size of the filenames and only during init. NBD.
- if(iristv.is()) eye[e].iris.filename = strdup(iristv);
- if(scleratv.is()) eye[e].sclera.filename = strdup(scleratv);
+ if(iristv.is()) eye[e].iris.filename = strdup(iristv);
+ if(scleratv.is()) eye[e].sclera.filename = strdup(scleratv);
eye[e].rotation = rotation; // Might get override in per-eye code below
}
@@ -258,12 +258,12 @@ void loadConfig(char *filename) {
v = doc[eye[e].name]["scleraMirror"];
if(v.is() || v.is()) eye[e].sclera.mirror = v ? 1023 : 0;
v = doc[eye[e].name]["irisTexture"];
- if(v.is()) { // Per-eye iris texture specified?
+ if(v.is()) { // Per-eye iris texture specified?
if(eye[e].iris.filename) free(eye[e].iris.filename); // Remove old name if any
eye[e].iris.filename = strdup(v); // Save new name
}
v = doc[eye[e].name]["scleraTexture"]; // Ditto w/sclera
- if(v.is()) {
+ if(v.is()) {
if(eye[e].sclera.filename) free(eye[e].sclera.filename);
eye[e].sclera.filename = strdup(v);
}
@@ -278,7 +278,7 @@ void loadConfig(char *filename) {
gain = doc["gain"] | gain;
modulate = doc["modulate"] | modulate;
v = doc["waveform"];
- if(v.is()) { // If string...
+ if(v.is()) { // If string...
if(!strncasecmp( v, "sq", 2)) waveform = 1;
else if(!strncasecmp(v, "si", 2)) waveform = 2;
else if(!strncasecmp(v, "t" , 1)) waveform = 3;
diff --git a/MAX17048_and_LC709203F_Battery_Monitor_Test/.feather_esp32s2_tft.test.only b/MAX17048_and_LC709203F_Battery_Monitor_Test/.feather_esp32s2_tft.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MAX17048_and_LC709203F_Battery_Monitor_Test/MAX17048_and_LC709203F_Battery_Monitor_Test.ino b/MAX17048_and_LC709203F_Battery_Monitor_Test/MAX17048_and_LC709203F_Battery_Monitor_Test.ino
new file mode 100644
index 000000000..46c822c24
--- /dev/null
+++ b/MAX17048_and_LC709203F_Battery_Monitor_Test/MAX17048_and_LC709203F_Battery_Monitor_Test.ino
@@ -0,0 +1,79 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+//
+// Adafruit Battery Monitor Demo
+// Checks for MAX17048 or LC709203F
+
+#include
+#include "Adafruit_MAX1704X.h"
+#include "Adafruit_LC709203F.h"
+
+Adafruit_MAX17048 maxlipo;
+Adafruit_LC709203F lc;
+
+// MAX17048 i2c address
+bool addr0x36 = true;
+
+void setup() {
+ Serial.begin(115200);
+ while (!Serial) delay(10); // wait until serial monitor opens
+ Serial.println(F("\nAdafruit Battery Monitor simple demo"));
+ // if no max17048..
+ if (!maxlipo.begin()) {
+ Serial.println(F("Couldnt find Adafruit MAX17048, looking for LC709203F.."));
+ // if no lc709203f..
+ if (!lc.begin()) {
+ Serial.println(F("Couldnt find Adafruit MAX17048 or LC709203F."));
+ while (1) delay(10);
+ }
+ // found lc709203f!
+ else {
+ addr0x36 = false;
+ Serial.println(F("Found LC709203F"));
+ Serial.print("Version: 0x"); Serial.println(lc.getICversion(), HEX);
+ lc.setThermistorB(3950);
+ Serial.print("Thermistor B = "); Serial.println(lc.getThermistorB());
+ lc.setPackSize(LC709203F_APA_500MAH);
+ lc.setAlarmVoltage(3.8);
+ }
+ // found max17048!
+ }
+ else {
+ addr0x36 = true;
+ Serial.print(F("Found MAX17048"));
+ Serial.print(F(" with Chip ID: 0x"));
+ Serial.println(maxlipo.getChipID(), HEX);
+ }
+}
+
+void loop() {
+ // if you have the max17048..
+ if (addr0x36 == true) {
+ max17048();
+ }
+ // if you have the lc709203f..
+ else {
+ lc709203f();
+ }
+
+ delay(2000); // dont query too often!
+
+}
+
+void lc709203f() {
+ Serial.print("Batt_Voltage:");
+ Serial.print(lc.cellVoltage(), 3);
+ Serial.print("\t");
+ Serial.print("Batt_Percent:");
+ Serial.print(lc.cellPercent(), 1);
+ Serial.print("\t");
+ Serial.print("Batt_Temp:");
+ Serial.println(lc.getCellTemperature(), 1);
+}
+
+void max17048() {
+ Serial.print(F("Batt Voltage: ")); Serial.print(maxlipo.cellVoltage(), 3); Serial.println(" V");
+ Serial.print(F("Batt Percent: ")); Serial.print(maxlipo.cellPercent(), 1); Serial.println(" %");
+ Serial.println();
+}
diff --git a/MEMENTO/Arduino_Basic_Camera/.pycamera_s3.generate b/MEMENTO/Arduino_Basic_Camera/.pycamera_s3.generate
new file mode 100644
index 000000000..e69de29bb
diff --git a/MEMENTO/Arduino_Basic_Camera/.pycamera_s3.test.only b/MEMENTO/Arduino_Basic_Camera/.pycamera_s3.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MEMENTO/Arduino_Basic_Camera/Arduino_Basic_Camera.ino b/MEMENTO/Arduino_Basic_Camera/Arduino_Basic_Camera.ino
new file mode 100644
index 000000000..a8e1dedc6
--- /dev/null
+++ b/MEMENTO/Arduino_Basic_Camera/Arduino_Basic_Camera.ino
@@ -0,0 +1,74 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include "Adafruit_PyCamera.h"
+#include
+
+Adafruit_PyCamera pycamera;
+framesize_t validSizes[] = {FRAMESIZE_QQVGA, FRAMESIZE_QVGA, FRAMESIZE_HVGA,
+ FRAMESIZE_VGA, FRAMESIZE_SVGA, FRAMESIZE_XGA,
+ FRAMESIZE_HD, FRAMESIZE_SXGA, FRAMESIZE_UXGA,
+ FRAMESIZE_QXGA, FRAMESIZE_QSXGA};
+
+void setup() {
+ Serial.begin(115200);
+ // while (!Serial) yield();
+ // delay(1000);
+
+ // Serial.setDebugOutput(true);
+ Serial.println("PyCamera Basic Example");
+ if (!pycamera.begin()) {
+ Serial.println("Failed to initialize PyCamera interface");
+ while (1)
+ yield();
+ }
+ Serial.println("PyCamera hardware initialized!");
+
+ pycamera.photoSize = FRAMESIZE_SVGA;
+}
+
+void loop() {
+
+ pycamera.readButtons();
+ // Serial.printf("Buttons: 0x%08X\n\r", pycamera.readButtons());
+
+ // pycamera.timestamp();
+ pycamera.captureFrame();
+
+ // once the frame is captured we can draw ontot he framebuffer
+ if (pycamera.justPressed(AWEXP_SD_DET)) {
+ Serial.println(F("SD Card removed"));
+ pycamera.endSD();
+ pycamera.fb->setCursor(0, 32);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 0, 0));
+ pycamera.fb->print(F("SD Card removed"));
+ delay(200);
+ }
+ if (pycamera.justReleased(AWEXP_SD_DET)) {
+ Serial.println(F("SD Card inserted!"));
+ pycamera.initSD();
+ pycamera.fb->setCursor(0, 32);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 0, 0));
+ pycamera.fb->print(F("SD Card inserted"));
+ delay(200);
+ }
+
+ pycamera.blitFrame();
+
+ if (pycamera.justPressed(SHUTTER_BUTTON)) {
+ Serial.println("Snap!");
+ if (pycamera.takePhoto("IMAGE", pycamera.photoSize)) {
+ pycamera.fb->setCursor(120, 100);
+ pycamera.fb->setTextSize(2);
+ pycamera.fb->setTextColor(pycamera.color565(255, 255, 255));
+ pycamera.fb->print("Snap!");
+ pycamera.speaker_tone(100, 50); // tone1 - B5
+ // pycamera.blitFrame();
+ }
+ }
+
+ delay(100);
+}
diff --git a/MEMENTO/Basic_Camera/code.py b/MEMENTO/Basic_Camera/code.py
new file mode 100644
index 000000000..cebda7149
--- /dev/null
+++ b/MEMENTO/Basic_Camera/code.py
@@ -0,0 +1,67 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 john park for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+''' simple point-and-shoot camera example. No bells! Zero whistles! '''
+
+import time
+import adafruit_pycamera # pylint: disable=import-error
+
+pycam = adafruit_pycamera.PyCamera()
+pycam.mode = 0 # only mode 0 (JPEG) will work in this example
+
+# User settings - try changing these:
+pycam.resolution = 8 # 0-12 preset resolutions:
+# 0: 240x240, 1: 320x240, 2: 640x480, 3: 800x600, 4: 1024x768,
+# 5: 1280x720, 6: 1280x1024, 7: 1600x1200, 8: 1920x1080, 9: 2048x1536,
+# 10: 2560x1440, 11: 2560x1600, 12: 2560x1920
+pycam.led_level = 1 # 0-4 preset brightness levels
+pycam.led_color = 0 # 0-7 preset colors: 0: white, 1: green, 2: yellow, 3: red,
+# 4: pink, 5: blue, 6: teal, 7: rainbow
+pycam.effect = 0 # 0-7 preset FX: 0: normal, 1: invert, 2: b&w, 3: red,
+# 4: green, 5: blue, 6: sepia, 7: solarize
+
+print("Simple camera ready.")
+pycam.tone(800, 0.1)
+pycam.tone(1200, 0.05)
+
+while True:
+ pycam.blit(pycam.continuous_capture())
+ pycam.keys_debounce()
+
+ if pycam.shutter.short_count:
+ print("Shutter released")
+ pycam.tone(1200, 0.05)
+ pycam.tone(1600, 0.05)
+ try:
+ pycam.display_message("snap", color=0x00DD00)
+ pycam.capture_jpeg()
+ pycam.live_preview_mode()
+ except TypeError as exception:
+ pycam.display_message("Failed", color=0xFF0000)
+ time.sleep(0.5)
+ pycam.live_preview_mode()
+ except RuntimeError as exception:
+ pycam.display_message("Error\nNo SD Card", color=0xFF0000)
+ time.sleep(0.5)
+
+ if pycam.card_detect.fell:
+ print("SD card removed")
+ pycam.unmount_sd_card()
+ pycam.display.refresh()
+
+ if pycam.card_detect.rose:
+ print("SD card inserted")
+ pycam.display_message("Mounting\nSD Card", color=0xFFFFFF)
+ for _ in range(3):
+ try:
+ print("Mounting card")
+ pycam.mount_sd_card()
+ print("Success!")
+ break
+ except OSError as exception:
+ print("Retrying!", exception)
+ time.sleep(0.5)
+ else:
+ pycam.display_message("SD Card\nFailed!", color=0xFF0000)
+ time.sleep(0.5)
+ pycam.display.refresh()
diff --git a/MEMENTO/Memento_IOT_Doorbell/code.py b/MEMENTO/Memento_IOT_Doorbell/code.py
new file mode 100755
index 000000000..ccd792742
--- /dev/null
+++ b/MEMENTO/Memento_IOT_Doorbell/code.py
@@ -0,0 +1,101 @@
+# SPDX-FileCopyrightText: 2023 Brent Rubell for Adafruit Industries
+#
+# An open-source IoT doorbell with the Adafruit MEMENTO camera and Adafruit IO
+#
+# SPDX-License-Identifier: Unlicense
+import os
+import time
+import ssl
+import binascii
+import digitalio
+import adafruit_pycamera
+import board
+import wifi
+import socketpool
+import adafruit_requests
+from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError
+
+print("CircuitPython Doorbell Camera")
+
+### WiFi ###
+# Add settings.toml to your filesystem CIRCUITPY_WIFI_SSID and CIRCUITPY_WIFI_PASSWORD keys
+# with your WiFi credentials. DO NOT share that file or commit it into Git or other
+# source control.
+
+# Set your Adafruit IO Username, Key and Port in settings.toml
+# (visit io.adafruit.com if you need to create an account,
+# or if you need your Adafruit IO key.)
+aio_username = os.getenv("ADAFRUIT_AIO_USERNAME")
+aio_key = os.getenv("ADAFRUIT_AIO_KEY")
+
+print(f"Connecting to {os.getenv('CIRCUITPY_WIFI_SSID')}")
+wifi.radio.connect(
+ os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD")
+)
+print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}!")
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+# Initialize an Adafruit IO HTTP API object
+io = IO_HTTP(os.getenv("ADAFRUIT_AIO_USERNAME"), os.getenv("ADAFRUIT_AIO_KEY"), requests)
+
+# Adafruit IO feed configuration
+try:
+ # Get the 'camera' feed from Adafruit IO
+ feed_camera = io.get_feed("camera")
+except AdafruitIO_RequestError:
+ # If no 'camera' feed exists, create one
+ feed_camera = io.create_new_feed("camera")
+
+# Initialize memento camera
+pycam = adafruit_pycamera.PyCamera()
+# Turn off TFT backlight
+pycam.display.brightness = 0.0
+# Deinitialize the MEMENTO's NeoPixels
+# Why? The pixels use board.A1 and we want to use it to control the doorbell LED
+pycam.pixels.deinit()
+
+# Set up the button
+pin_button = digitalio.DigitalInOut(board.A0)
+pin_button.direction = digitalio.Direction.INPUT
+pin_button.pull = digitalio.Pull.UP
+
+# Set up the button's LED
+led = digitalio.DigitalInOut(board.A1)
+led.direction = digitalio.Direction.OUTPUT
+led.value = True
+print("Doorbell ready to be pressed!")
+
+def capture_send_image():
+ """Captures an image and send it to Adafruit IO."""
+ # Force autofocus and capture a JPEG image
+ pycam.autofocus()
+ jpeg = pycam.capture_into_jpeg()
+ print("Captured image!")
+ if jpeg is not None:
+ # Encode JPEG data into base64 for sending to Adafruit IO
+ print("Encoding image...")
+ encoded_data = binascii.b2a_base64(jpeg).strip()
+ # Send encoded_data to Adafruit IO camera feed
+ print("Sending image to Adafruit IO...")
+ io.send_data(feed_camera["key"], encoded_data)
+ print("Sent image to IO!")
+ else:
+ print("ERROR: JPEG frame capture failed!")
+ print("DONE, waiting for next press..")
+ # Turn the LED on to signal that the doorbell is ready to be pressed again
+ led.value = True
+
+
+while True:
+ # Wait until the doorbell is pressed
+ if not pin_button.value:
+ print("Doorbell pressed!")
+ # Turn the doorbell LED off to signal that it has been pressed
+ led.value = False
+ # Play a doorbell tone using the speaker
+ pycam.tone(95, 0.5)
+ pycam.tone(70, 0.5)
+ capture_send_image()
+ time.sleep(0.01)
diff --git a/MEMENTO/PyCamera_External_Shutter_Button/code.py b/MEMENTO/PyCamera_External_Shutter_Button/code.py
new file mode 100644
index 000000000..d345dc661
--- /dev/null
+++ b/MEMENTO/PyCamera_External_Shutter_Button/code.py
@@ -0,0 +1,185 @@
+# SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+import time
+import board
+import bitmaptools
+import displayio
+import gifio
+import ulab.numpy as np
+from adafruit_debouncer import Button
+import adafruit_pycamera
+from digitalio import DigitalInOut, Direction, Pull
+
+pycam = adafruit_pycamera.PyCamera()
+# pycam.live_preview_mode()
+
+settings = (None, "resolution", "effect", "mode", "led_level", "led_color")
+curr_setting = 0
+
+pin = DigitalInOut(board.A0)
+pin.direction = Direction.INPUT
+pin.pull = Pull.UP
+ext_button = Button(pin, long_duration_ms=1000)
+
+print("Starting!")
+# pycam.tone(200, 0.1)
+last_frame = displayio.Bitmap(pycam.camera.width, pycam.camera.height, 65535)
+onionskin = displayio.Bitmap(pycam.camera.width, pycam.camera.height, 65535)
+while True:
+ if pycam.mode_text == "STOP" and pycam.stop_motion_frame != 0:
+ # alpha blend
+ new_frame = pycam.continuous_capture()
+ bitmaptools.alphablend(
+ onionskin, last_frame, new_frame, displayio.Colorspace.RGB565_SWAPPED
+ )
+ pycam.blit(onionskin)
+ elif pycam.mode_text == "GBOY":
+ bitmaptools.dither(
+ last_frame, pycam.continuous_capture(), displayio.Colorspace.RGB565_SWAPPED
+ )
+ pycam.blit(last_frame)
+ else:
+ pycam.blit(pycam.continuous_capture())
+ # print("\t\t", capture_time, blit_time)
+
+ pycam.keys_debounce()
+ ext_button.update()
+ # test shutter button
+ if pycam.shutter.long_press or ext_button.long_press:
+ print("FOCUS")
+ print(pycam.autofocus_status)
+ pycam.autofocus()
+ print(pycam.autofocus_status)
+ if pycam.shutter.short_count or ext_button.short_count:
+ print("Shutter released")
+ if pycam.mode_text == "STOP":
+ pycam.capture_into_bitmap(last_frame)
+ pycam.stop_motion_frame += 1
+ try:
+ pycam.display_message("Snap!", color=0x0000FF)
+ pycam.capture_jpeg()
+ except TypeError as e:
+ pycam.display_message("Failed", color=0xFF0000)
+ time.sleep(0.5)
+ except RuntimeError as e:
+ pycam.display_message("Error\nNo SD Card", color=0xFF0000)
+ time.sleep(0.5)
+ pycam.live_preview_mode()
+
+ if pycam.mode_text == "GBOY":
+ try:
+ f = pycam.open_next_image("gif")
+ except RuntimeError as e:
+ pycam.display_message("Error\nNo SD Card", color=0xFF0000)
+ time.sleep(0.5)
+ continue
+
+ with gifio.GifWriter(
+ f,
+ pycam.camera.width,
+ pycam.camera.height,
+ displayio.Colorspace.RGB565_SWAPPED,
+ dither=True,
+ ) as g:
+ g.add_frame(last_frame, 1)
+
+ if pycam.mode_text == "GIF":
+ try:
+ f = pycam.open_next_image("gif")
+ except RuntimeError as e:
+ pycam.display_message("Error\nNo SD Card", color=0xFF0000)
+ time.sleep(0.5)
+ continue
+ i = 0
+ ft = []
+ pycam._mode_label.text = "RECORDING" # pylint: disable=protected-access
+
+ pycam.display.refresh()
+ with gifio.GifWriter(
+ f,
+ pycam.camera.width,
+ pycam.camera.height,
+ displayio.Colorspace.RGB565_SWAPPED,
+ dither=True,
+ ) as g:
+ t00 = t0 = time.monotonic()
+ while (i < 15) or not pycam.shutter_button.value:
+ i += 1
+ _gifframe = pycam.continuous_capture()
+ g.add_frame(_gifframe, 0.12)
+ pycam.blit(_gifframe)
+ t1 = time.monotonic()
+ ft.append(1 / (t1 - t0))
+ print(end=".")
+ t0 = t1
+ pycam._mode_label.text = "GIF" # pylint: disable=protected-access
+ print(f"\nfinal size {f.tell()} for {i} frames")
+ print(f"average framerate {i/(t1-t00)}fps")
+ print(f"best {max(ft)} worst {min(ft)} std. deviation {np.std(ft)}")
+ f.close()
+ pycam.display.refresh()
+
+ if pycam.mode_text == "JPEG":
+ pycam.tone(200, 0.1)
+ try:
+ pycam.display_message("Snap!", color=0x0000FF)
+ pycam.capture_jpeg()
+ pycam.live_preview_mode()
+ except TypeError as e:
+ pycam.display_message("Failed", color=0xFF0000)
+ time.sleep(0.5)
+ pycam.live_preview_mode()
+ except RuntimeError as e:
+ pycam.display_message("Error\nNo SD Card", color=0xFF0000)
+ time.sleep(0.5)
+ if pycam.card_detect.fell:
+ print("SD card removed")
+ pycam.unmount_sd_card()
+ pycam.display.refresh()
+ if pycam.card_detect.rose:
+ print("SD card inserted")
+ pycam.display_message("Mounting\nSD Card", color=0xFFFFFF)
+ for _ in range(3):
+ try:
+ print("Mounting card")
+ pycam.mount_sd_card()
+ print("Success!")
+ break
+ except OSError as e:
+ print("Retrying!", e)
+ time.sleep(0.5)
+ else:
+ pycam.display_message("SD Card\nFailed!", color=0xFF0000)
+ time.sleep(0.5)
+ pycam.display.refresh()
+
+ if pycam.up.fell:
+ print("UP")
+ key = settings[curr_setting]
+ if key:
+ setattr(pycam, key, getattr(pycam, key) + 1)
+ if pycam.down.fell:
+ print("DN")
+ key = settings[curr_setting]
+ if key:
+ setattr(pycam, key, getattr(pycam, key) - 1)
+ if pycam.left.fell:
+ print("LF")
+ curr_setting = (curr_setting + 1) % len(settings)
+ print(settings[curr_setting])
+ # new_res = min(len(pycam.resolutions)-1, pycam.get_resolution()+1)
+ # pycam.set_resolution(pycam.resolutions[new_res])
+ pycam.select_setting(settings[curr_setting])
+ if pycam.right.fell:
+ print("RT")
+ curr_setting = (curr_setting - 1 + len(settings)) % len(settings)
+ print(settings[curr_setting])
+ pycam.select_setting(settings[curr_setting])
+ # new_res = max(1, pycam.get_resolution()-1)
+ # pycam.set_resolution(pycam.resolutions[new_res])
+ if pycam.select.fell:
+ print("SEL")
+ if pycam.ok.fell:
+ print("OK")
diff --git a/MEMENTO/README.md b/MEMENTO/README.md
new file mode 100644
index 000000000..b74e785fa
--- /dev/null
+++ b/MEMENTO/README.md
@@ -0,0 +1,6 @@
+## MEMENTO Project Subdirectory
+
+Adafruit Learning System Guides relating to the MEMENTO digital camera should be
+placed in this folder (rather than the top level Learning System repo).
+
+Please support Open Source software from Adafruit by buying Adafruit hardware
diff --git a/MIDI_CLUE_BLE_Glove/code.py b/MIDI_CLUE_BLE_Glove/code.py
index 97548afb4..119e45451 100755
--- a/MIDI_CLUE_BLE_Glove/code.py
+++ b/MIDI_CLUE_BLE_Glove/code.py
@@ -186,7 +186,7 @@
screen.append(footer_label)
# show the screen
-clue.display.show(screen)
+clue.display.root_group = screen
cc_num_pick_toggle = 0 # which cc to adjust w buttons
cc_send_toggle = True # to start and stop sending cc
diff --git a/MIDI_Melody_Maker/code.py b/MIDI_Melody_Maker/code.py
index afd983e4d..b10454e2e 100644
--- a/MIDI_Melody_Maker/code.py
+++ b/MIDI_Melody_Maker/code.py
@@ -32,7 +32,8 @@
pixel.fill((0, 0, 0))
# Use for I2C for STEMMA OLED
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
display_bus = displayio.I2CDisplay(i2c, device_address=0x3D, reset=oled_reset)
# STEMMA OLED dimensions. can have height of 64, but 32 makes text larger
@@ -50,7 +51,7 @@
# create the displayio object
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
# text for BPM
bpm_text = "BPM: "
@@ -113,7 +114,8 @@
# USB MIDI:
# midi = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=0)
# UART MIDI:
-midi = adafruit_midi.MIDI(midi_out=busio.UART(board.TX, board.RX, baudrate=31250), out_channel=0)
+midi = adafruit_midi.MIDI(midi_out=busio.UART(board.TX, board.RX,
+ baudrate=31250, timeout=0.001), out_channel=0)
# potentiometer pin setup
key_pot = AnalogIn(board.A1)
diff --git a/MIDI_for_Makers/Receive_MIDI_Over_UART_and_Send_Over_USB/code.py b/MIDI_for_Makers/Receive_MIDI_Over_UART_and_Send_Over_USB/code.py
index 0b27830ec..7aace3eea 100644
--- a/MIDI_for_Makers/Receive_MIDI_Over_UART_and_Send_Over_USB/code.py
+++ b/MIDI_for_Makers/Receive_MIDI_Over_UART_and_Send_Over_USB/code.py
@@ -11,7 +11,7 @@
from adafruit_midi.note_on import NoteOn
# uart setup
-uart = busio.UART(board.TX, board.RX, baudrate=31250)
+uart = busio.UART(board.TX, board.RX, baudrate=31250, timeout=0.001)
# midi channel setup
midi_in_channel = 1
midi_out_channel = 1
diff --git a/MIDI_for_Makers/Receive_and_Display_MIDI_Messages/code.py b/MIDI_for_Makers/Receive_and_Display_MIDI_Messages/code.py
index e9a908a92..22f5089b5 100644
--- a/MIDI_for_Makers/Receive_and_Display_MIDI_Messages/code.py
+++ b/MIDI_for_Makers/Receive_and_Display_MIDI_Messages/code.py
@@ -45,7 +45,7 @@
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=WIDTH, height=HEIGHT)
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
# text area setup
text = "MIDI Messages"
diff --git a/MIDI_to_CV_Skull/code.py b/MIDI_to_CV_Skull/code.py
index e6257c2a2..7149cfef4 100644
--- a/MIDI_to_CV_Skull/code.py
+++ b/MIDI_to_CV_Skull/code.py
@@ -25,7 +25,8 @@
gate.direction = Direction.OUTPUT
# i2c setup
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
# dac setup over i2c
dac = adafruit_mcp4725.MCP4725(i2c)
diff --git a/MOSFET_Driver_Examples/CircuitPython/code.py b/MOSFET_Driver_Examples/CircuitPython/code.py
new file mode 100644
index 000000000..8f06405d9
--- /dev/null
+++ b/MOSFET_Driver_Examples/CircuitPython/code.py
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+from digitalio import DigitalInOut, Direction
+
+# motor output
+solenoid = DigitalInOut(board.D5)
+solenoid.direction = Direction.OUTPUT
+
+while True:
+ solenoid.value = False
+ print("The motor is not triggered.")
+ time.sleep(1)
+ solenoid.value = True
+ print("The motor is triggered.")
+ time.sleep(1)
diff --git a/MOSFET_Driver_Examples/MOSFET_Driver_Blink/.uno.test.only b/MOSFET_Driver_Examples/MOSFET_Driver_Blink/.uno.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MOSFET_Driver_Examples/MOSFET_Driver_Blink/MOSFET_Driver_Blink.ino b/MOSFET_Driver_Examples/MOSFET_Driver_Blink/MOSFET_Driver_Blink.ino
new file mode 100644
index 000000000..87752edaa
--- /dev/null
+++ b/MOSFET_Driver_Examples/MOSFET_Driver_Blink/MOSFET_Driver_Blink.ino
@@ -0,0 +1,23 @@
+// SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#define driverPin 3
+
+void setup() {
+ while (!Serial);
+ delay(1000);
+ Serial.begin(115200);
+ Serial.println("Basic MOSFET Driver Test");
+ pinMode(driverPin, OUTPUT);
+}
+
+void loop() {
+
+ digitalWrite(driverPin, HIGH);
+ Serial.println("The MOSFET driver is triggered.");
+ delay(1000);
+ digitalWrite(driverPin, LOW);
+ Serial.println("The MOSFET driver is not triggered.");
+ delay(1000);
+}
diff --git a/MacroPad_Braille_Keycaps/code.py b/MacroPad_Braille_Keycaps/code.py
index 0a5d8c2e2..94ce877d5 100755
--- a/MacroPad_Braille_Keycaps/code.py
+++ b/MacroPad_Braille_Keycaps/code.py
@@ -20,7 +20,7 @@
# Setup title and grid
main_group = displayio.Group()
-macropad.display.show(main_group)
+macropad.display.root_group = main_group
title = label.Label(
y=4,
font=terminalio.FONT,
diff --git a/MacroPad_RPC_Home_Assistant/boot.py b/MacroPad_RPC_Home_Assistant/boot.py
index fbd05f72c..8aecf9f93 100755
--- a/MacroPad_RPC_Home_Assistant/boot.py
+++ b/MacroPad_RPC_Home_Assistant/boot.py
@@ -4,4 +4,4 @@
import usb_cdc
-usb_cdc.enable(console=True, data=True)
\ No newline at end of file
+usb_cdc.enable(console=True, data=True)
diff --git a/MacroPad_RPC_Home_Assistant/code.py b/MacroPad_RPC_Home_Assistant/code.py
index 4e6e940c6..8f143284e 100755
--- a/MacroPad_RPC_Home_Assistant/code.py
+++ b/MacroPad_RPC_Home_Assistant/code.py
@@ -4,14 +4,14 @@
"""
Home Assistant Remote Procedure Call for MacroPad.
"""
+import os
import time
import displayio
import terminalio
from adafruit_display_shapes.rect import Rect
-from rpc import RpcClient, RpcError
from adafruit_display_text import label
from adafruit_macropad import MacroPad
-from secrets import secrets
+from rpc import RpcClient, RpcError, MqttError
macropad = MacroPad()
rpc = RpcClient()
@@ -22,28 +22,38 @@
KEY_LABELS = ("Demo", "Office")
UPDATE_DELAY = 0.25
NEOPIXEL_COLORS = {
- "OFF": 0xff0000,
- "ON": 0x00ff00,
+ "OFF": 0xFF0000,
+ "ON": 0x00FF00,
}
-class MqttError(Exception):
- """For MQTT Specific Errors"""
- pass
# Set up displayio group with all the labels
group = displayio.Group()
for key_index in range(12):
x = key_index % 3
y = key_index // 3
- group.append(label.Label(terminalio.FONT, text=(str(KEY_LABELS[key_index]) if key_index < len(KEY_LABELS) else ''), color=0xFFFFFF,
- anchored_position=((macropad.display.width - 1) * x / 2,
- macropad.display.height - 1 -
- (3 - y) * 12),
- anchor_point=(x / 2, 1.0)))
+ group.append(
+ label.Label(
+ terminalio.FONT,
+ text=(str(KEY_LABELS[key_index]) if key_index < len(KEY_LABELS) else ""),
+ color=0xFFFFFF,
+ anchored_position=(
+ (macropad.display.width - 1) * x / 2,
+ macropad.display.height - 1 - (3 - y) * 12,
+ ),
+ anchor_point=(x / 2, 1.0),
+ )
+ )
group.append(Rect(0, 0, macropad.display.width, 12, fill=0xFFFFFF))
-group.append(label.Label(terminalio.FONT, text='Home Assistant', color=0x000000,
- anchored_position=(macropad.display.width//2, -2),
- anchor_point=(0.5, 0.0)))
-macropad.display.show(group)
+group.append(
+ label.Label(
+ terminalio.FONT,
+ text="Home Assistant",
+ color=0x000000,
+ anchored_position=(macropad.display.width // 2, -2),
+ anchor_point=(0.5, 0.0),
+ )
+)
+macropad.display.root_group = group
def rpc_call(function, *args, **kwargs):
response = rpc.call(function, *args, **kwargs)
@@ -54,16 +64,22 @@ def rpc_call(function, *args, **kwargs):
return response["return_val"]
def mqtt_init():
- rpc_call("mqtt_init", secrets["mqtt_broker"], username=secrets["mqtt_username"], password=secrets["mqtt_password"], port=secrets["mqtt_port"])
+ rpc_call(
+ "mqtt_init",
+ os.getenv("MQTT_BROKER"),
+ username=os.getenv("MQTT_USERNAME"),
+ password=os.getenv("MQTT_PASSWORD"),
+ port=os.getenv("MQTT_PORT"),
+ )
rpc_call("mqtt_connect")
-def update_key(key_number):
- if key_number < len(SUBSCRIBE_TOPICS):
- switch_state = rpc_call("mqtt_get_last_value", SUBSCRIBE_TOPICS[key_number])
+def update_key(key_id):
+ if key_id < len(SUBSCRIBE_TOPICS):
+ switch_state = rpc_call("mqtt_get_last_value", SUBSCRIBE_TOPICS[key_id])
if switch_state is not None:
- macropad.pixels[key_number] = NEOPIXEL_COLORS[switch_state]
+ macropad.pixels[key_id] = NEOPIXEL_COLORS[switch_state]
else:
- macropad.pixels[key_number] = 0
+ macropad.pixels[key_id] = 0
server_is_running = False
print("Waiting for server...")
@@ -93,7 +109,11 @@ def update_key(key_number):
last_macropad_encoder_value = macropad.encoder
macropad.encoder_switch_debounced.update()
- if macropad.encoder_switch_debounced.pressed and "key_number" not in output and ENCODER_ITEM is not None:
+ if (
+ macropad.encoder_switch_debounced.pressed
+ and "key_number" not in output
+ and ENCODER_ITEM is not None
+ ):
output["key_number"] = ENCODER_ITEM
if output:
diff --git a/MacroPad_RPC_Home_Assistant/rpc.py b/MacroPad_RPC_Home_Assistant/rpc.py
index 373386a38..2e8abc9c1 100755
--- a/MacroPad_RPC_Home_Assistant/rpc.py
+++ b/MacroPad_RPC_Home_Assistant/rpc.py
@@ -7,41 +7,45 @@
import time
import json
+
try:
import serial
import adafruit_board_toolkit.circuitpython_serial
+
json_decode_exception = json.decoder.JSONDecodeError
except ImportError:
import usb_cdc as serial
+
json_decode_exception = ValueError
-RESPONSE_TIMEOUT=5
-DATA_TIMEOUT=0.5
+RESPONSE_TIMEOUT = 5
+DATA_TIMEOUT = 0.5
+
class RpcError(Exception):
"""For RPC Specific Errors"""
- pass
+
+class MqttError(Exception):
+ """For MQTT Specific Errors"""
class _Rpc:
def __init__(self):
self._serial = None
@staticmethod
- def create_response_packet(error=False, error_type="RPC", message=None, return_val=None):
+ def create_response_packet(
+ error=False, error_type="RPC", message=None, return_val=None
+ ):
return {
"error": error,
"error_type": error_type if error else None,
"message": message,
- "return_val": return_val
+ "return_val": return_val,
}
@staticmethod
- def create_request_packet(function, args=[], kwargs={}):
- return {
- "function": function,
- "args": args,
- "kwargs": kwargs
- }
+ def create_request_packet(function, args=[], kwargs={}): # pylint: disable=dangerous-default-value
+ return {"function": function, "args": args, "kwargs": kwargs}
def _wait_for_packet(self, timeout=None):
incoming_packet = b""
@@ -51,11 +55,16 @@ def _wait_for_packet(self, timeout=None):
if incoming_packet:
data_start_time = time.monotonic()
while not self._serial.in_waiting:
- if incoming_packet and (time.monotonic() - data_start_time) >= DATA_TIMEOUT:
+ if (
+ incoming_packet
+ and (time.monotonic() - data_start_time) >= DATA_TIMEOUT
+ ):
incoming_packet = b""
if not incoming_packet and timeout is not None:
if (time.monotonic() - response_start_time) >= timeout:
- return self.create_response_packet(error=True, message="Timed out waiting for response")
+ return self.create_response_packet(
+ error=True, message="Timed out waiting for response"
+ )
time.sleep(0.001)
data = self._serial.read(self._serial.in_waiting)
if data:
@@ -66,13 +75,13 @@ def _wait_for_packet(self, timeout=None):
if sorted(tuple(packet.keys())) == sorted(self._packet_format()):
return packet
except json_decode_exception:
- pass # Incomplete packet
+ pass # Incomplete packet
class RpcClient(_Rpc):
def __init__(self):
super().__init__()
self._serial = serial.data
-
+
def _packet_format(self):
return self.create_response_packet().keys()
@@ -97,13 +106,14 @@ def init_serial(self, baudrate):
return serial.Serial(
port,
baudrate,
- parity='N',
+ parity="N",
rtscts=False,
xonxoff=False,
exclusive=True,
)
- def detect_port(self):
+ @staticmethod
+ def detect_port():
"""
Detect the port automatically
"""
@@ -113,14 +123,16 @@ def detect_port(self):
if len(ports) > 1:
print("Multiple devices detected, using the first detected port.")
return ports[0]
- raise RuntimeError("Unable to find any CircuitPython Devices with the CDC Data port enabled.")
+ raise RuntimeError(
+ "Unable to find any CircuitPython Devices with the CDC Data port enabled."
+ )
def loop(self, timeout=None):
packet = self._wait_for_packet(timeout)
if "error" not in packet:
response_packet = self._handler(packet)
self._serial.write(bytes(json.dumps(response_packet), "utf-8"))
-
+
def close_serial(self):
if self._serial is not None:
- self._serial.close()
\ No newline at end of file
+ self._serial.close()
diff --git a/MacroPad_RPC_Home_Assistant/rpc_ha_server.py b/MacroPad_RPC_Home_Assistant/rpc_ha_server.py
index 81ed8a869..65397425b 100644
--- a/MacroPad_RPC_Home_Assistant/rpc_ha_server.py
+++ b/MacroPad_RPC_Home_Assistant/rpc_ha_server.py
@@ -7,34 +7,29 @@
import ssl
import socket
import adafruit_minimqtt.adafruit_minimqtt as MQTT
-from rpc import RpcServer
+from rpc import RpcServer, MqttError
-mqtt_client = None
-mqtt_connected = False
+mqtt_status = {
+ "connected": False,
+ "client": None,
+}
last_mqtt_messages = {}
# For program flow purposes, we do not want these functions to be called remotely
PROTECTED_FUNCTIONS = ["main", "handle_rpc"]
-def connect(mqtt_client, userdata, flags, rc):
- global mqtt_connected
- mqtt_connected = True
+def connect(_mqtt_client, _userdata, _flags, _rc):
+ mqtt_status["connected"] = True
-def disconnect(mqtt_client, userdata, rc):
- global mqtt_connected
- mqtt_connected = False
+def disconnect(_mqtt_client, _userdata, _rc):
+ mqtt_status["connected"] = False
-def message(client, topic, message):
- last_mqtt_messages[topic] = message
+def message(_client, topic, payload):
+ last_mqtt_messages[topic] = payload
-class MqttError(Exception):
- """For MQTT Specific Errors"""
- pass
-
-# Default to 1883 as SSL on CPython is not currently supported
+# Default to 1883 since SSL on CPython is not currently supported
def mqtt_init(broker, port=1883, username=None, password=None):
- global mqtt_client, mqtt_connect_info
- mqtt_client = MQTT.MQTT(
+ mqtt_status["client"] = MQTT.MQTT(
broker=broker,
port=port,
username=username,
@@ -43,28 +38,28 @@ def mqtt_init(broker, port=1883, username=None, password=None):
ssl_context=ssl.create_default_context(),
)
- mqtt_client.on_connect = connect
- mqtt_client.on_disconnect = disconnect
- mqtt_client.on_message = message
+ mqtt_status["client"].on_connect = connect
+ mqtt_status["client"].on_disconnect = disconnect
+ mqtt_status["client"].on_message = message
def mqtt_connect():
- mqtt_client.connect()
+ mqtt_status["client"].connect()
def mqtt_publish(topic, payload):
- if mqtt_client is None:
+ if mqtt_status["client"] is None:
raise MqttError("MQTT is not initialized")
try:
- return_val = mqtt_client.publish(topic, json.dumps(payload))
+ return_val = mqtt_status["client"].publish(topic, json.dumps(payload))
except BrokenPipeError:
time.sleep(0.5)
- mqtt_client.connect()
- return_val = mqtt_client.publish(topic, json.dumps(payload))
+ mqtt_status["client"].connect()
+ return_val = mqtt_status["client"].publish(topic, json.dumps(payload))
return return_val
def mqtt_subscribe(topic):
- if mqtt_client is None:
+ if mqtt_status["client"] is None:
raise MqttError("MQTT is not initialized")
- return mqtt_client.subscribe(topic)
+ return mqtt_status["client"].subscribe(topic)
def mqtt_get_last_value(topic):
"""Return the last value we have received regarding a topic"""
@@ -80,36 +75,42 @@ def handle_rpc(packet):
call the method with parameters, and generate a response
packet as the return value"""
print("Received packet")
- func_name = packet['function']
+ func_name = packet["function"]
if func_name in PROTECTED_FUNCTIONS:
- return rpc.create_response_packet(error=True, message=f"{func_name}'() is a protected function and can not be called.")
+ return rpc.create_response_packet(
+ error=True,
+ message=f"{func_name}'() is a protected function and can not be called.",
+ )
if func_name not in globals():
- return rpc.create_response_packet(error=True, message=f"Function {func_name}() not found")
+ return rpc.create_response_packet(
+ error=True, message=f"Function {func_name}() not found"
+ )
try:
- return_val = globals()[func_name](*packet['args'], **packet['kwargs'])
+ return_val = globals()[func_name](*packet["args"], **packet["kwargs"])
except MqttError as err:
- return rpc.create_response_packet(error=True, error_type="MQTT", message=str(err))
+ return rpc.create_response_packet(
+ error=True, error_type="MQTT", message=str(err)
+ )
packet = rpc.create_response_packet(return_val=return_val)
return packet
def main():
"""Command line, entry point"""
- global mqtt_connected
while True:
rpc.loop(0.25)
- if mqtt_connected and mqtt_client is not None:
+ if mqtt_status["connected"] and mqtt_status["client"] is not None:
try:
- mqtt_client.loop(0.5)
+ mqtt_status["client"].loop(0.5)
except AttributeError:
- mqtt_connected = False
+ mqtt_status["connected"] = False
-if __name__ == '__main__':
+if __name__ == "__main__":
rpc = RpcServer(handle_rpc)
try:
- print(f"Listening for RPC Calls, to stop press \"CTRL+C\"")
+ print('Listening for RPC Calls, to stop press "CTRL+C"')
main()
except KeyboardInterrupt:
print("")
- print(f"Caught interrupt, exiting...")
- rpc.close_serial()
\ No newline at end of file
+ print("Caught interrupt, exiting...")
+ rpc.close_serial()
diff --git a/MacroPad_Scramble_Lock/code.py b/MacroPad_Scramble_Lock/code.py
index d1c628f70..ef21dfc3b 100644
--- a/MacroPad_Scramble_Lock/code.py
+++ b/MacroPad_Scramble_Lock/code.py
@@ -69,7 +69,7 @@ def keys_clear(): # Set display in the Start mode, key LEDs off
group[i].text = " "
macropad.pixels.show()
group[9].text = "START"
- macropad.display.show(group)
+ macropad.display.root_group = group
macropad.display.refresh()
def scramble(): # Scramble values of the keys and display on screen
@@ -177,7 +177,7 @@ def keys_display(): # Display the current values of the keys on screen
if password_guess == PASSWORD: # Success
group[9].text = " "
group[11].text = "OPEN"
- macropad.display.show(group)
+ macropad.display.root_group = group
macropad.display.refresh()
macropad.pixels[11] = GREEN
macropad.pixels.show()
@@ -193,7 +193,7 @@ def keys_display(): # Display the current values of the keys on screen
else: # fail!
group[11].text = "FAIL"
group[9].text = " "
- macropad.display.show(group)
+ macropad.display.root_group = group
macropad.display.refresh()
for _ in range(3): # Flash lower right 3 times red with beeps
macropad.pixels[11] = RED
diff --git a/Macropad_2FA_TOTP/code.py b/Macropad_2FA_TOTP/code.py
index 734d2173f..9a9b7c378 100755
--- a/Macropad_2FA_TOTP/code.py
+++ b/Macropad_2FA_TOTP/code.py
@@ -43,7 +43,9 @@
raise
# set board to use PCF8523 as its RTC
-pcf = adafruit_pcf8523.PCF8523(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+pcf = adafruit_pcf8523.PCF8523(i2c)
rtc.set_time_source(pcf)
#-------------------------------------------------------------------------
@@ -87,7 +89,7 @@
splash.append(rtc_time)
splash.append(progress_bar)
-display.show(splash)
+display.root_group = splash
#-------------------------------------------------------------------------
# H E L P E R F U N C S
diff --git a/Macropad_2FA_TOTP/rtc_setter.py b/Macropad_2FA_TOTP/rtc_setter.py
index 054f885ff..8a6f9572e 100755
--- a/Macropad_2FA_TOTP/rtc_setter.py
+++ b/Macropad_2FA_TOTP/rtc_setter.py
@@ -6,7 +6,9 @@
import board
import adafruit_pcf8523
-pcf = adafruit_pcf8523.PCF8523(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+pcf = adafruit_pcf8523.PCF8523(i2c)
# values to set
YEAR = 2021
@@ -36,4 +38,4 @@
now.tm_hour,
now.tm_min,
now.tm_sec))
- time.sleep(1)
\ No newline at end of file
+ time.sleep(1)
diff --git a/Macropad_Ableton/code.py b/Macropad_Ableton/code.py
index e56c88b54..70cc7f5fe 100644
--- a/Macropad_Ableton/code.py
+++ b/Macropad_Ableton/code.py
@@ -75,7 +75,7 @@
# ---Display setup---
display = board.DISPLAY
screen = displayio.Group()
-display.show(screen)
+display.root_group = screen
WIDTH = 128
HEIGHT = 64
FONT = terminalio.FONT
diff --git a/Macropad_Dragon_Drop/code.py b/Macropad_Dragon_Drop/code.py
index d0bcf54f5..835f8bb7a 100644
--- a/Macropad_Dragon_Drop/code.py
+++ b/Macropad_Dragon_Drop/code.py
@@ -40,7 +40,7 @@ def background_sound(filename):
def show_screen(group):
""" Activate a given displayio group, pause until keypress. """
- macropad.display.show(group)
+ macropad.display.root_group = group
macropad.display.refresh()
# Purge any queued up key events...
while macropad.keys.events.get():
@@ -134,7 +134,7 @@ def __init__(self, col, start_time):
play_group[-1].text = '0' # Score text
life_bar.value = 100
audio.stop()
- macropad.display.show(play_group)
+ macropad.display.root_group = play_group
macropad.display.refresh()
start = time.monotonic()
diff --git a/Macropad_Hotkeys/code.py b/Macropad_Hotkeys/code.py
index e896ed58b..56335e8f1 100755
--- a/Macropad_Hotkeys/code.py
+++ b/Macropad_Hotkeys/code.py
@@ -74,7 +74,7 @@ def switch(self):
group.append(label.Label(terminalio.FONT, text='', color=0x000000,
anchored_position=(macropad.display.width//2, -2),
anchor_point=(0.5, 0.0)))
-macropad.display.show(group)
+macropad.display.root_group = group
# Load all the macro key setups from .py files in MACRO_FOLDER
apps = []
diff --git a/MagTag_AdafruitQuotes/Arial-Bold-12.bdf b/MagTag/MagTag_AdafruitQuotes/Arial-Bold-12.bdf
similarity index 100%
rename from MagTag_AdafruitQuotes/Arial-Bold-12.bdf
rename to MagTag/MagTag_AdafruitQuotes/Arial-Bold-12.bdf
diff --git a/MagTag_AdafruitQuotes/Arial-Italic-12.bdf b/MagTag/MagTag_AdafruitQuotes/Arial-Italic-12.bdf
similarity index 100%
rename from MagTag_AdafruitQuotes/Arial-Italic-12.bdf
rename to MagTag/MagTag_AdafruitQuotes/Arial-Italic-12.bdf
diff --git a/MagTag_AdafruitQuotes/code.py b/MagTag/MagTag_AdafruitQuotes/code.py
similarity index 100%
rename from MagTag_AdafruitQuotes/code.py
rename to MagTag/MagTag_AdafruitQuotes/code.py
diff --git a/MagTag/MagTag_Arduino_Demos/button_demo/.magtag.test.only b/MagTag/MagTag_Arduino_Demos/button_demo/.magtag.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MagTag_Arduino_Demos/button_demo/button_demo.ino b/MagTag/MagTag_Arduino_Demos/button_demo/button_demo.ino
similarity index 100%
rename from MagTag_Arduino_Demos/button_demo/button_demo.ino
rename to MagTag/MagTag_Arduino_Demos/button_demo/button_demo.ino
diff --git a/MagTag/MagTag_Arduino_Demos/deep_sleep/.magtag.test.only b/MagTag/MagTag_Arduino_Demos/deep_sleep/.magtag.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MagTag_Arduino_Demos/deep_sleep/deep_sleep.ino b/MagTag/MagTag_Arduino_Demos/deep_sleep/deep_sleep.ino
similarity index 100%
rename from MagTag_Arduino_Demos/deep_sleep/deep_sleep.ino
rename to MagTag/MagTag_Arduino_Demos/deep_sleep/deep_sleep.ino
diff --git a/MagTag_Arduino_Demos/deep_sleep/magtaglogo.h b/MagTag/MagTag_Arduino_Demos/deep_sleep/magtaglogo.h
similarity index 100%
rename from MagTag_Arduino_Demos/deep_sleep/magtaglogo.h
rename to MagTag/MagTag_Arduino_Demos/deep_sleep/magtaglogo.h
diff --git a/MagTag/MagTag_Arduino_Demos/neopixel_demo/.magtag.test.only b/MagTag/MagTag_Arduino_Demos/neopixel_demo/.magtag.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MagTag_Arduino_Demos/neopixel_demo/neopixel_demo.ino b/MagTag/MagTag_Arduino_Demos/neopixel_demo/neopixel_demo.ino
similarity index 100%
rename from MagTag_Arduino_Demos/neopixel_demo/neopixel_demo.ino
rename to MagTag/MagTag_Arduino_Demos/neopixel_demo/neopixel_demo.ino
diff --git a/MagTag/MagTag_Arduino_Demos/quotes/.magtag.test.only b/MagTag/MagTag_Arduino_Demos/quotes/.magtag.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MagTag_Arduino_Demos/quotes/quotes.ino b/MagTag/MagTag_Arduino_Demos/quotes/quotes.ino
similarity index 100%
rename from MagTag_Arduino_Demos/quotes/quotes.ino
rename to MagTag/MagTag_Arduino_Demos/quotes/quotes.ino
diff --git a/MagTag/MagTag_Arduino_Demos/shipping_demo/.magtag.test.only b/MagTag/MagTag_Arduino_Demos/shipping_demo/.magtag.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/MagTag_Arduino_Demos/shipping_demo/coin.h b/MagTag/MagTag_Arduino_Demos/shipping_demo/coin.h
similarity index 100%
rename from MagTag_Arduino_Demos/shipping_demo/coin.h
rename to MagTag/MagTag_Arduino_Demos/shipping_demo/coin.h
diff --git a/MagTag_Arduino_Demos/shipping_demo/magtaglogo.h b/MagTag/MagTag_Arduino_Demos/shipping_demo/magtaglogo.h
similarity index 100%
rename from MagTag_Arduino_Demos/shipping_demo/magtaglogo.h
rename to MagTag/MagTag_Arduino_Demos/shipping_demo/magtaglogo.h
diff --git a/MagTag_Arduino_Demos/shipping_demo/shipping_demo.ino b/MagTag/MagTag_Arduino_Demos/shipping_demo/shipping_demo.ino
similarity index 100%
rename from MagTag_Arduino_Demos/shipping_demo/shipping_demo.ino
rename to MagTag/MagTag_Arduino_Demos/shipping_demo/shipping_demo.ino
diff --git a/MagTag_Cat_Fed_Clock/BebasNeueRegular-41.bdf b/MagTag/MagTag_Cat_Fed_Clock/BebasNeueRegular-41.bdf
similarity index 100%
rename from MagTag_Cat_Fed_Clock/BebasNeueRegular-41.bdf
rename to MagTag/MagTag_Cat_Fed_Clock/BebasNeueRegular-41.bdf
diff --git a/MagTag_Cat_Fed_Clock/Lato-Regular-74.bdf b/MagTag/MagTag_Cat_Fed_Clock/Lato-Regular-74.bdf
similarity index 100%
rename from MagTag_Cat_Fed_Clock/Lato-Regular-74.bdf
rename to MagTag/MagTag_Cat_Fed_Clock/Lato-Regular-74.bdf
diff --git a/MagTag_Cat_Fed_Clock/background.bmp b/MagTag/MagTag_Cat_Fed_Clock/background.bmp
similarity index 100%
rename from MagTag_Cat_Fed_Clock/background.bmp
rename to MagTag/MagTag_Cat_Fed_Clock/background.bmp
diff --git a/MagTag_Cat_Fed_Clock/code.py b/MagTag/MagTag_Cat_Fed_Clock/code.py
similarity index 100%
rename from MagTag_Cat_Fed_Clock/code.py
rename to MagTag/MagTag_Cat_Fed_Clock/code.py
diff --git a/MagTag_Cheerlights/.circuitpython.skip b/MagTag/MagTag_Cheerlights/.circuitpython.skip
similarity index 100%
rename from MagTag_Cheerlights/.circuitpython.skip
rename to MagTag/MagTag_Cheerlights/.circuitpython.skip
diff --git a/MagTag_Cheerlights/Arial-Bold-12.bdf b/MagTag/MagTag_Cheerlights/Arial-Bold-12.bdf
similarity index 100%
rename from MagTag_Cheerlights/Arial-Bold-12.bdf
rename to MagTag/MagTag_Cheerlights/Arial-Bold-12.bdf
diff --git a/MagTag_Cheerlights/code.py b/MagTag/MagTag_Cheerlights/code.py
similarity index 100%
rename from MagTag_Cheerlights/code.py
rename to MagTag/MagTag_Cheerlights/code.py
diff --git a/MagTag_Cheerlights_LED_Animations/code.py b/MagTag/MagTag_Cheerlights_LED_Animations/code.py
similarity index 100%
rename from MagTag_Cheerlights_LED_Animations/code.py
rename to MagTag/MagTag_Cheerlights_LED_Animations/code.py
diff --git a/MagTag_Christmas_Countdown/.circuitpython.skip b/MagTag/MagTag_Christmas_Countdown/.circuitpython.skip
similarity index 100%
rename from MagTag_Christmas_Countdown/.circuitpython.skip
rename to MagTag/MagTag_Christmas_Countdown/.circuitpython.skip
diff --git a/MagTag_Christmas_Countdown/atree.bmp b/MagTag/MagTag_Christmas_Countdown/atree.bmp
similarity index 100%
rename from MagTag_Christmas_Countdown/atree.bmp
rename to MagTag/MagTag_Christmas_Countdown/atree.bmp
diff --git a/MagTag_Christmas_Countdown/code.py b/MagTag/MagTag_Christmas_Countdown/code.py
similarity index 98%
rename from MagTag_Christmas_Countdown/code.py
rename to MagTag/MagTag_Christmas_Countdown/code.py
index 019bb541a..de08e7b51 100644
--- a/MagTag_Christmas_Countdown/code.py
+++ b/MagTag/MagTag_Christmas_Countdown/code.py
@@ -104,7 +104,7 @@
time.sleep(0.1)
# updates display with bitmap and current circle colors
-magtag.display.show(group)
+magtag.display.root_group = group
magtag.display.refresh()
time.sleep(5)
diff --git a/MagTag_CircuitPython_Smart_Holiday_Lights/.circuitpython.skip b/MagTag/MagTag_CircuitPython_Smart_Holiday_Lights/.circuitpython.skip
similarity index 100%
rename from MagTag_CircuitPython_Smart_Holiday_Lights/.circuitpython.skip
rename to MagTag/MagTag_CircuitPython_Smart_Holiday_Lights/.circuitpython.skip
diff --git a/MagTag_CircuitPython_Smart_Holiday_Lights/adaflake.bmp b/MagTag/MagTag_CircuitPython_Smart_Holiday_Lights/adaflake.bmp
similarity index 100%
rename from MagTag_CircuitPython_Smart_Holiday_Lights/adaflake.bmp
rename to MagTag/MagTag_CircuitPython_Smart_Holiday_Lights/adaflake.bmp
diff --git a/MagTag_CircuitPython_Smart_Holiday_Lights/code.py b/MagTag/MagTag_CircuitPython_Smart_Holiday_Lights/code.py
similarity index 100%
rename from MagTag_CircuitPython_Smart_Holiday_Lights/code.py
rename to MagTag/MagTag_CircuitPython_Smart_Holiday_Lights/code.py
diff --git a/MagTag_CountdownCelebration/Arial-Bold-24.bdf b/MagTag/MagTag_CountdownCelebration/Arial-Bold-24.bdf
similarity index 100%
rename from MagTag_CountdownCelebration/Arial-Bold-24.bdf
rename to MagTag/MagTag_CountdownCelebration/Arial-Bold-24.bdf
diff --git a/MagTag_CountdownCelebration/code.py b/MagTag/MagTag_CountdownCelebration/code.py
similarity index 100%
rename from MagTag_CountdownCelebration/code.py
rename to MagTag/MagTag_CountdownCelebration/code.py
diff --git a/MagTag_CovidTracking/.circuitpython.skip b/MagTag/MagTag_CovidTracking/.circuitpython.skip
similarity index 100%
rename from MagTag_CovidTracking/.circuitpython.skip
rename to MagTag/MagTag_CovidTracking/.circuitpython.skip
diff --git a/MagTag_CovidTracking/code.py b/MagTag/MagTag_CovidTracking/code.py
similarity index 100%
rename from MagTag_CovidTracking/code.py
rename to MagTag/MagTag_CovidTracking/code.py
diff --git a/MagTag_CovidTracking/fonts/Arial-Bold-12.pcf b/MagTag/MagTag_CovidTracking/fonts/Arial-Bold-12.pcf
similarity index 100%
rename from MagTag_CovidTracking/fonts/Arial-Bold-12.pcf
rename to MagTag/MagTag_CovidTracking/fonts/Arial-Bold-12.pcf
diff --git a/MagTag_Covid_Vaccination/.circuitpython.skip b/MagTag/MagTag_Covid_Vaccination/.circuitpython.skip
similarity index 100%
rename from MagTag_Covid_Vaccination/.circuitpython.skip
rename to MagTag/MagTag_Covid_Vaccination/.circuitpython.skip
diff --git a/MagTag_Covid_Vaccination/bmps/background.bmp b/MagTag/MagTag_Covid_Vaccination/bmps/background.bmp
similarity index 100%
rename from MagTag_Covid_Vaccination/bmps/background.bmp
rename to MagTag/MagTag_Covid_Vaccination/bmps/background.bmp
diff --git a/MagTag_Covid_Vaccination/code.py b/MagTag/MagTag_Covid_Vaccination/code.py
similarity index 100%
rename from MagTag_Covid_Vaccination/code.py
rename to MagTag/MagTag_Covid_Vaccination/code.py
diff --git a/MagTag_Covid_Vaccination/covid.bmp b/MagTag/MagTag_Covid_Vaccination/covid.bmp
similarity index 100%
rename from MagTag_Covid_Vaccination/covid.bmp
rename to MagTag/MagTag_Covid_Vaccination/covid.bmp
diff --git a/MagTag_Covid_Vaccination/fonts/ncen.license b/MagTag/MagTag_Covid_Vaccination/fonts/ncen.license
similarity index 100%
rename from MagTag_Covid_Vaccination/fonts/ncen.license
rename to MagTag/MagTag_Covid_Vaccination/fonts/ncen.license
diff --git a/MagTag_Covid_Vaccination/fonts/ncenR14.pcf b/MagTag/MagTag_Covid_Vaccination/fonts/ncenR14.pcf
similarity index 100%
rename from MagTag_Covid_Vaccination/fonts/ncenR14.pcf
rename to MagTag/MagTag_Covid_Vaccination/fonts/ncenR14.pcf
diff --git a/MagTag_Dishwasher_Status/wake_on_button/code.py b/MagTag/MagTag_Dishwasher_Status/wake_on_button/code.py
similarity index 96%
rename from MagTag_Dishwasher_Status/wake_on_button/code.py
rename to MagTag/MagTag_Dishwasher_Status/wake_on_button/code.py
index 6c7182ea5..6a5065104 100755
--- a/MagTag_Dishwasher_Status/wake_on_button/code.py
+++ b/MagTag/MagTag_Dishwasher_Status/wake_on_button/code.py
@@ -31,7 +31,7 @@
)
group = displayio.Group()
group.append(tile_grid)
- epd.show(group)
+ epd.root_group = group
time.sleep(epd.time_to_refresh + 0.01)
epd.refresh()
while epd.busy:
@@ -42,7 +42,7 @@
# tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
# group = displayio.Group()
# group.append(tile_grid)
-# epd.show(group)
+# epd.root_group = group
# time.sleep(epd.time_to_refresh + 0.01)
# epd.refresh()
# while epd.busy:
diff --git a/MagTag_Dishwasher_Status/wake_on_button/images/clean.bmp b/MagTag/MagTag_Dishwasher_Status/wake_on_button/images/clean.bmp
similarity index 100%
rename from MagTag_Dishwasher_Status/wake_on_button/images/clean.bmp
rename to MagTag/MagTag_Dishwasher_Status/wake_on_button/images/clean.bmp
diff --git a/MagTag_Dishwasher_Status/wake_on_button/images/dirty.bmp b/MagTag/MagTag_Dishwasher_Status/wake_on_button/images/dirty.bmp
similarity index 100%
rename from MagTag_Dishwasher_Status/wake_on_button/images/dirty.bmp
rename to MagTag/MagTag_Dishwasher_Status/wake_on_button/images/dirty.bmp
diff --git a/MagTag_Dishwasher_Status/wake_on_flip/code.py b/MagTag/MagTag_Dishwasher_Status/wake_on_flip/code.py
similarity index 89%
rename from MagTag_Dishwasher_Status/wake_on_flip/code.py
rename to MagTag/MagTag_Dishwasher_Status/wake_on_flip/code.py
index f3d2aafd3..3b86f8cfe 100755
--- a/MagTag_Dishwasher_Status/wake_on_flip/code.py
+++ b/MagTag/MagTag_Dishwasher_Status/wake_on_flip/code.py
@@ -12,7 +12,9 @@
epd = board.DISPLAY
# set up accelerometer
-lis = adafruit_lis3dh.LIS3DH_I2C(board.I2C(), address=0x19)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+lis = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19)
# See: ST Design Tip DT0008 - Simple screen rotation using
# the accelerometer built-in 4D detection interrupt
@@ -58,7 +60,7 @@
)
group = displayio.Group()
group.append(tile_grid)
- epd.show(group)
+ epd.root_group = group
time.sleep(epd.time_to_refresh + 0.01)
epd.refresh()
while epd.busy:
@@ -69,7 +71,7 @@
# tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
# group = displayio.Group()
# group.append(tile_grid)
-# epd.show(group)
+# epd.root_group = group
# time.sleep(epd.time_to_refresh + 0.01)
# epd.refresh()
# while epd.busy:
diff --git a/MagTag_Dishwasher_Status/wake_on_flip/images/clean.bmp b/MagTag/MagTag_Dishwasher_Status/wake_on_flip/images/clean.bmp
similarity index 100%
rename from MagTag_Dishwasher_Status/wake_on_flip/images/clean.bmp
rename to MagTag/MagTag_Dishwasher_Status/wake_on_flip/images/clean.bmp
diff --git a/MagTag_Dishwasher_Status/wake_on_flip/images/dirty.bmp b/MagTag/MagTag_Dishwasher_Status/wake_on_flip/images/dirty.bmp
similarity index 100%
rename from MagTag_Dishwasher_Status/wake_on_flip/images/dirty.bmp
rename to MagTag/MagTag_Dishwasher_Status/wake_on_flip/images/dirty.bmp
diff --git a/MagTag_Flashcards/.circuitpython.skip b/MagTag/MagTag_Flashcards/.circuitpython.skip
similarity index 100%
rename from MagTag_Flashcards/.circuitpython.skip
rename to MagTag/MagTag_Flashcards/.circuitpython.skip
diff --git a/MagTag_Flashcards/README.md b/MagTag/MagTag_Flashcards/README.md
similarity index 100%
rename from MagTag_Flashcards/README.md
rename to MagTag/MagTag_Flashcards/README.md
diff --git a/MagTag_Flashcards/basic/.circuitpython.skip b/MagTag/MagTag_Flashcards/basic/.circuitpython.skip
similarity index 100%
rename from MagTag_Flashcards/basic/.circuitpython.skip
rename to MagTag/MagTag_Flashcards/basic/.circuitpython.skip
diff --git a/MagTag_Flashcards/basic/code.py b/MagTag/MagTag_Flashcards/basic/code.py
similarity index 100%
rename from MagTag_Flashcards/basic/code.py
rename to MagTag/MagTag_Flashcards/basic/code.py
diff --git a/MagTag_Flashcards/basic/deck.json b/MagTag/MagTag_Flashcards/basic/deck.json
similarity index 100%
rename from MagTag_Flashcards/basic/deck.json
rename to MagTag/MagTag_Flashcards/basic/deck.json
diff --git a/MagTag_Flashcards/basic/yasashi20.pcf b/MagTag/MagTag_Flashcards/basic/yasashi20.pcf
similarity index 100%
rename from MagTag_Flashcards/basic/yasashi20.pcf
rename to MagTag/MagTag_Flashcards/basic/yasashi20.pcf
diff --git a/MagTag_Flashcards/chapters/.circuitpython.skip b/MagTag/MagTag_Flashcards/chapters/.circuitpython.skip
similarity index 100%
rename from MagTag_Flashcards/chapters/.circuitpython.skip
rename to MagTag/MagTag_Flashcards/chapters/.circuitpython.skip
diff --git a/MagTag_Flashcards/chapters/code.py b/MagTag/MagTag_Flashcards/chapters/code.py
similarity index 100%
rename from MagTag_Flashcards/chapters/code.py
rename to MagTag/MagTag_Flashcards/chapters/code.py
diff --git a/MagTag_Flashcards/chapters/deck.json b/MagTag/MagTag_Flashcards/chapters/deck.json
similarity index 100%
rename from MagTag_Flashcards/chapters/deck.json
rename to MagTag/MagTag_Flashcards/chapters/deck.json
diff --git a/MagTag_Flashcards/chapters/yasashi20.pcf b/MagTag/MagTag_Flashcards/chapters/yasashi20.pcf
similarity index 100%
rename from MagTag_Flashcards/chapters/yasashi20.pcf
rename to MagTag/MagTag_Flashcards/chapters/yasashi20.pcf
diff --git a/MagTag_Google_Calendar/authenticator.py b/MagTag/MagTag_Google_Calendar/authenticator.py
similarity index 100%
rename from MagTag_Google_Calendar/authenticator.py
rename to MagTag/MagTag_Google_Calendar/authenticator.py
diff --git a/MagTag_Google_Calendar/code.py b/MagTag/MagTag_Google_Calendar/code.py
similarity index 100%
rename from MagTag_Google_Calendar/code.py
rename to MagTag/MagTag_Google_Calendar/code.py
diff --git a/MagTag_Google_Calendar/fonts/Arial-12.pcf b/MagTag/MagTag_Google_Calendar/fonts/Arial-12.pcf
similarity index 100%
rename from MagTag_Google_Calendar/fonts/Arial-12.pcf
rename to MagTag/MagTag_Google_Calendar/fonts/Arial-12.pcf
diff --git a/MagTag_Google_Calendar/fonts/Arial-14.pcf b/MagTag/MagTag_Google_Calendar/fonts/Arial-14.pcf
similarity index 100%
rename from MagTag_Google_Calendar/fonts/Arial-14.pcf
rename to MagTag/MagTag_Google_Calendar/fonts/Arial-14.pcf
diff --git a/PyPortal_Google_Calendar/fonts/Arial-18.pcf b/MagTag/MagTag_Google_Calendar/fonts/Arial-18.pcf
old mode 100644
new mode 100755
similarity index 100%
rename from PyPortal_Google_Calendar/fonts/Arial-18.pcf
rename to MagTag/MagTag_Google_Calendar/fonts/Arial-18.pcf
diff --git a/MagTag_Google_Sheets/.circuitpython.skip b/MagTag/MagTag_Google_Sheets/.circuitpython.skip
similarity index 100%
rename from MagTag_Google_Sheets/.circuitpython.skip
rename to MagTag/MagTag_Google_Sheets/.circuitpython.skip
diff --git a/MagTag_Google_Sheets/bitmaps/naughty.bmp b/MagTag/MagTag_Google_Sheets/bitmaps/naughty.bmp
similarity index 100%
rename from MagTag_Google_Sheets/bitmaps/naughty.bmp
rename to MagTag/MagTag_Google_Sheets/bitmaps/naughty.bmp
diff --git a/MagTag_Google_Sheets/bitmaps/nice.bmp b/MagTag/MagTag_Google_Sheets/bitmaps/nice.bmp
similarity index 100%
rename from MagTag_Google_Sheets/bitmaps/nice.bmp
rename to MagTag/MagTag_Google_Sheets/bitmaps/nice.bmp
diff --git a/MagTag_Google_Sheets/fonts/cursive-smart.license b/MagTag/MagTag_Google_Sheets/fonts/cursive-smart.license
similarity index 100%
rename from MagTag_Google_Sheets/fonts/cursive-smart.license
rename to MagTag/MagTag_Google_Sheets/fonts/cursive-smart.license
diff --git a/MagTag_Google_Sheets/fonts/cursive-smart.pcf b/MagTag/MagTag_Google_Sheets/fonts/cursive-smart.pcf
similarity index 100%
rename from MagTag_Google_Sheets/fonts/cursive-smart.pcf
rename to MagTag/MagTag_Google_Sheets/fonts/cursive-smart.pcf
diff --git a/MagTag_Google_Sheets/fonts/helvB12.pcf b/MagTag/MagTag_Google_Sheets/fonts/helvB12.pcf
similarity index 100%
rename from MagTag_Google_Sheets/fonts/helvB12.pcf
rename to MagTag/MagTag_Google_Sheets/fonts/helvB12.pcf
diff --git a/MagTag_Google_Sheets/fonts/helvB24.pcf b/MagTag/MagTag_Google_Sheets/fonts/helvB24.pcf
similarity index 100%
rename from MagTag_Google_Sheets/fonts/helvB24.pcf
rename to MagTag/MagTag_Google_Sheets/fonts/helvB24.pcf
diff --git a/MagTag_Google_Sheets/fonts/ncenR14.pcf b/MagTag/MagTag_Google_Sheets/fonts/ncenR14.pcf
similarity index 100%
rename from MagTag_Google_Sheets/fonts/ncenR14.pcf
rename to MagTag/MagTag_Google_Sheets/fonts/ncenR14.pcf
diff --git a/MagTag_Google_Sheets/fonts/ncen_helv.license b/MagTag/MagTag_Google_Sheets/fonts/ncen_helv.license
similarity index 100%
rename from MagTag_Google_Sheets/fonts/ncen_helv.license
rename to MagTag/MagTag_Google_Sheets/fonts/ncen_helv.license
diff --git a/MagTag_Google_Sheets/naughty_nice/code.py b/MagTag/MagTag_Google_Sheets/naughty_nice/code.py
similarity index 100%
rename from MagTag_Google_Sheets/naughty_nice/code.py
rename to MagTag/MagTag_Google_Sheets/naughty_nice/code.py
diff --git a/MagTag_Google_Sheets/weekly_planner/code.py b/MagTag/MagTag_Google_Sheets/weekly_planner/code.py
similarity index 100%
rename from MagTag_Google_Sheets/weekly_planner/code.py
rename to MagTag/MagTag_Google_Sheets/weekly_planner/code.py
diff --git a/MagTag_Killed_By_Google/bmps/background.bmp b/MagTag/MagTag_Killed_By_Google/bmps/background.bmp
similarity index 100%
rename from MagTag_Killed_By_Google/bmps/background.bmp
rename to MagTag/MagTag_Killed_By_Google/bmps/background.bmp
diff --git a/MagTag_Killed_By_Google/code.py b/MagTag/MagTag_Killed_By_Google/code.py
similarity index 100%
rename from MagTag_Killed_By_Google/code.py
rename to MagTag/MagTag_Killed_By_Google/code.py
diff --git a/MagTag_Killed_By_Google/fonts/Deutsch-Gothic-14.bdf b/MagTag/MagTag_Killed_By_Google/fonts/Deutsch-Gothic-14.bdf
similarity index 100%
rename from MagTag_Killed_By_Google/fonts/Deutsch-Gothic-14.bdf
rename to MagTag/MagTag_Killed_By_Google/fonts/Deutsch-Gothic-14.bdf
diff --git a/MagTag_Kitchen_Timer/.circuitpython.skip b/MagTag/MagTag_Kitchen_Timer/.circuitpython.skip
similarity index 100%
rename from MagTag_Kitchen_Timer/.circuitpython.skip
rename to MagTag/MagTag_Kitchen_Timer/.circuitpython.skip
diff --git a/MagTag_Kitchen_Timer/code.py b/MagTag/MagTag_Kitchen_Timer/code.py
similarity index 100%
rename from MagTag_Kitchen_Timer/code.py
rename to MagTag/MagTag_Kitchen_Timer/code.py
diff --git a/MagTag_NYC_Positivity/Arial-Bold-12.bdf b/MagTag/MagTag_NYC_Positivity/Arial-Bold-12.bdf
similarity index 100%
rename from MagTag_NYC_Positivity/Arial-Bold-12.bdf
rename to MagTag/MagTag_NYC_Positivity/Arial-Bold-12.bdf
diff --git a/MagTag_NYC_Positivity/code.py b/MagTag/MagTag_NYC_Positivity/code.py
similarity index 100%
rename from MagTag_NYC_Positivity/code.py
rename to MagTag/MagTag_NYC_Positivity/code.py
diff --git a/MagTag_NextBus/.circuitpython.skip b/MagTag/MagTag_NextBus/.circuitpython.skip
similarity index 100%
rename from MagTag_NextBus/.circuitpython.skip
rename to MagTag/MagTag_NextBus/.circuitpython.skip
diff --git a/MagTag_NextBus/code.py b/MagTag/MagTag_NextBus/code.py
similarity index 99%
rename from MagTag_NextBus/code.py
rename to MagTag/MagTag_NextBus/code.py
index 65435a46e..1b719fc9f 100644
--- a/MagTag_NextBus/code.py
+++ b/MagTag/MagTag_NextBus/code.py
@@ -160,7 +160,7 @@ def hh_mm(time_struct, twelve_hour=True):
GROUP.append(fillrect(0, 0, DISPLAY.width, DISPLAY.height, 0xFFFFFF))
# Clear the screen ASAP before populating rest of group (erase any old
# prediction data)...
-DISPLAY.show(GROUP)
+DISPLAY.root_group = GROUP
DISPLAY.refresh()
time.sleep(5) # Don't allow another refresh() too soon
@@ -207,7 +207,7 @@ def hh_mm(time_struct, twelve_hour=True):
GROUP[2 + stop_index * 3].anchored_position = (MAX_SIZE[0] + 4, baseline)
# Third element (predictions) is NOT positioned here...see main loop
-DISPLAY.show(GROUP)
+DISPLAY.root_group = GROUP
NETWORK.connect()
diff --git a/MagTag_NextBus/fonts/Impact-16.pcf b/MagTag/MagTag_NextBus/fonts/Impact-16.pcf
similarity index 100%
rename from MagTag_NextBus/fonts/Impact-16.pcf
rename to MagTag/MagTag_NextBus/fonts/Impact-16.pcf
diff --git a/MagTag_NextBus/fonts/Impact-24.pcf b/MagTag/MagTag_NextBus/fonts/Impact-24.pcf
similarity index 100%
rename from MagTag_NextBus/fonts/Impact-24.pcf
rename to MagTag/MagTag_NextBus/fonts/Impact-24.pcf
diff --git a/MagTag_NextBus/fonts/Impact-30.pcf b/MagTag/MagTag_NextBus/fonts/Impact-30.pcf
similarity index 100%
rename from MagTag_NextBus/fonts/Impact-30.pcf
rename to MagTag/MagTag_NextBus/fonts/Impact-30.pcf
diff --git a/MagTag_NextBus/nextbus.py b/MagTag/MagTag_NextBus/nextbus.py
similarity index 100%
rename from MagTag_NextBus/nextbus.py
rename to MagTag/MagTag_NextBus/nextbus.py
diff --git a/MagTag_NextBus/nextbus_routefinder.py b/MagTag/MagTag_NextBus/nextbus_routefinder.py
similarity index 100%
rename from MagTag_NextBus/nextbus_routefinder.py
rename to MagTag/MagTag_NextBus/nextbus_routefinder.py
diff --git a/MagTag_Progress_Displays/.circuitpython.skip b/MagTag/MagTag_Progress_Displays/.circuitpython.skip
similarity index 100%
rename from MagTag_Progress_Displays/.circuitpython.skip
rename to MagTag/MagTag_Progress_Displays/.circuitpython.skip
diff --git a/MagTag_Progress_Displays/weblate_translated_percent/code.py b/MagTag/MagTag_Progress_Displays/weblate_translated_percent/code.py
similarity index 100%
rename from MagTag_Progress_Displays/weblate_translated_percent/code.py
rename to MagTag/MagTag_Progress_Displays/weblate_translated_percent/code.py
diff --git a/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan.license b/MagTag/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan.license
similarity index 100%
rename from MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan.license
rename to MagTag/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan.license
diff --git a/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan11.bdf b/MagTag/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan11.bdf
similarity index 100%
rename from MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan11.bdf
rename to MagTag/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan11.bdf
diff --git a/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan18.bdf b/MagTag/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan18.bdf
similarity index 100%
rename from MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan18.bdf
rename to MagTag/MagTag_Progress_Displays/weblate_translated_percent/fonts/leaguespartan18.bdf
diff --git a/MagTag_Progress_Displays/year_progress_percent/code.py b/MagTag/MagTag_Progress_Displays/year_progress_percent/code.py
similarity index 100%
rename from MagTag_Progress_Displays/year_progress_percent/code.py
rename to MagTag/MagTag_Progress_Displays/year_progress_percent/code.py
diff --git a/MagTag_Progress_Displays/year_progress_percent/fonts/epilogue.license b/MagTag/MagTag_Progress_Displays/year_progress_percent/fonts/epilogue.license
similarity index 100%
rename from MagTag_Progress_Displays/year_progress_percent/fonts/epilogue.license
rename to MagTag/MagTag_Progress_Displays/year_progress_percent/fonts/epilogue.license
diff --git a/MagTag_Progress_Displays/year_progress_percent/fonts/epilogue18.bdf b/MagTag/MagTag_Progress_Displays/year_progress_percent/fonts/epilogue18.bdf
similarity index 100%
rename from MagTag_Progress_Displays/year_progress_percent/fonts/epilogue18.bdf
rename to MagTag/MagTag_Progress_Displays/year_progress_percent/fonts/epilogue18.bdf
diff --git a/MagTag_Project_Selector/bmps/covid.bmp b/MagTag/MagTag_Project_Selector/bmps/covid.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/covid.bmp
rename to MagTag/MagTag_Project_Selector/bmps/covid.bmp
diff --git a/MagTag_Project_Selector/bmps/showerthoughts.bmp b/MagTag/MagTag_Project_Selector/bmps/showerthoughts.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/showerthoughts.bmp
rename to MagTag/MagTag_Project_Selector/bmps/showerthoughts.bmp
diff --git a/MagTag_Project_Selector/bmps/showtimes.bmp b/MagTag/MagTag_Project_Selector/bmps/showtimes.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/showtimes.bmp
rename to MagTag/MagTag_Project_Selector/bmps/showtimes.bmp
diff --git a/MagTag_Project_Selector/bmps/slideshow.bmp b/MagTag/MagTag_Project_Selector/bmps/slideshow.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/slideshow.bmp
rename to MagTag/MagTag_Project_Selector/bmps/slideshow.bmp
diff --git a/MagTag_Project_Selector/bmps/spacex.bmp b/MagTag/MagTag_Project_Selector/bmps/spacex.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/spacex.bmp
rename to MagTag/MagTag_Project_Selector/bmps/spacex.bmp
diff --git a/MagTag_Project_Selector/bmps/tides.bmp b/MagTag/MagTag_Project_Selector/bmps/tides.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/tides.bmp
rename to MagTag/MagTag_Project_Selector/bmps/tides.bmp
diff --git a/MagTag_Project_Selector/bmps/weather.bmp b/MagTag/MagTag_Project_Selector/bmps/weather.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/weather.bmp
rename to MagTag/MagTag_Project_Selector/bmps/weather.bmp
diff --git a/MagTag_Project_Selector/bmps/year.bmp b/MagTag/MagTag_Project_Selector/bmps/year.bmp
similarity index 100%
rename from MagTag_Project_Selector/bmps/year.bmp
rename to MagTag/MagTag_Project_Selector/bmps/year.bmp
diff --git a/MagTag_Project_Selector/code.py b/MagTag/MagTag_Project_Selector/code.py
similarity index 99%
rename from MagTag_Project_Selector/code.py
rename to MagTag/MagTag_Project_Selector/code.py
index 8c631478d..1490c181d 100644
--- a/MagTag_Project_Selector/code.py
+++ b/MagTag/MagTag_Project_Selector/code.py
@@ -73,7 +73,7 @@
rect = Rect(4, 4, 66, 58, outline=0x000000, stroke=2)
group.append(rect)
- display.show(group)
+ display.root_group = group
display.refresh()
time.sleep(5)
diff --git a/MagTag_Project_Selector/secrets.py b/MagTag/MagTag_Project_Selector/secrets.py
similarity index 100%
rename from MagTag_Project_Selector/secrets.py
rename to MagTag/MagTag_Project_Selector/secrets.py
diff --git a/MagTag_Quote_Board/bmps/magtag_quotes_bg.bmp b/MagTag/MagTag_Quote_Board/bmps/magtag_quotes_bg.bmp
similarity index 100%
rename from MagTag_Quote_Board/bmps/magtag_quotes_bg.bmp
rename to MagTag/MagTag_Quote_Board/bmps/magtag_quotes_bg.bmp
diff --git a/MagTag_Quote_Board/code.py b/MagTag/MagTag_Quote_Board/code.py
similarity index 100%
rename from MagTag_Quote_Board/code.py
rename to MagTag/MagTag_Quote_Board/code.py
diff --git a/MagTag_Quote_Board/fonts/Arial-Bold-12.bdf b/MagTag/MagTag_Quote_Board/fonts/Arial-Bold-12.bdf
similarity index 100%
rename from MagTag_Quote_Board/fonts/Arial-Bold-12.bdf
rename to MagTag/MagTag_Quote_Board/fonts/Arial-Bold-12.bdf
diff --git a/MagTag_Quote_Board/fonts/Arial-Italic-12.bdf b/MagTag/MagTag_Quote_Board/fonts/Arial-Italic-12.bdf
similarity index 100%
rename from MagTag_Quote_Board/fonts/Arial-Italic-12.bdf
rename to MagTag/MagTag_Quote_Board/fonts/Arial-Italic-12.bdf
diff --git a/MagTag_Seasonal_Produce/bitmaps/produce.bmp b/MagTag/MagTag_Seasonal_Produce/bitmaps/produce.bmp
similarity index 100%
rename from MagTag_Seasonal_Produce/bitmaps/produce.bmp
rename to MagTag/MagTag_Seasonal_Produce/bitmaps/produce.bmp
diff --git a/MagTag_Seasonal_Produce/code.py b/MagTag/MagTag_Seasonal_Produce/code.py
similarity index 100%
rename from MagTag_Seasonal_Produce/code.py
rename to MagTag/MagTag_Seasonal_Produce/code.py
diff --git a/MagTag_Seasonal_Produce/fonts/cursive-smart.license b/MagTag/MagTag_Seasonal_Produce/fonts/cursive-smart.license
similarity index 100%
rename from MagTag_Seasonal_Produce/fonts/cursive-smart.license
rename to MagTag/MagTag_Seasonal_Produce/fonts/cursive-smart.license
diff --git a/MagTag_Seasonal_Produce/fonts/cursive-smart.pcf b/MagTag/MagTag_Seasonal_Produce/fonts/cursive-smart.pcf
similarity index 100%
rename from MagTag_Seasonal_Produce/fonts/cursive-smart.pcf
rename to MagTag/MagTag_Seasonal_Produce/fonts/cursive-smart.pcf
diff --git a/MagTag_Seasonal_Produce/fonts/helvB12.license b/MagTag/MagTag_Seasonal_Produce/fonts/helvB12.license
similarity index 100%
rename from MagTag_Seasonal_Produce/fonts/helvB12.license
rename to MagTag/MagTag_Seasonal_Produce/fonts/helvB12.license
diff --git a/MagTag_Seasonal_Produce/fonts/helvB12.pcf b/MagTag/MagTag_Seasonal_Produce/fonts/helvB12.pcf
similarity index 100%
rename from MagTag_Seasonal_Produce/fonts/helvB12.pcf
rename to MagTag/MagTag_Seasonal_Produce/fonts/helvB12.pcf
diff --git a/MagTag_Seasonal_Produce/produce.json b/MagTag/MagTag_Seasonal_Produce/produce.json
similarity index 100%
rename from MagTag_Seasonal_Produce/produce.json
rename to MagTag/MagTag_Seasonal_Produce/produce.json
diff --git a/MagTag_Seasonal_Produce/produce.py b/MagTag/MagTag_Seasonal_Produce/produce.py
similarity index 100%
rename from MagTag_Seasonal_Produce/produce.py
rename to MagTag/MagTag_Seasonal_Produce/produce.py
diff --git a/MagTag_Showerthoughts/bmps/magtag_shower_bg.bmp b/MagTag/MagTag_Showerthoughts/bmps/magtag_shower_bg.bmp
similarity index 100%
rename from MagTag_Showerthoughts/bmps/magtag_shower_bg.bmp
rename to MagTag/MagTag_Showerthoughts/bmps/magtag_shower_bg.bmp
diff --git a/MagTag_Showerthoughts/code.py b/MagTag/MagTag_Showerthoughts/code.py
similarity index 100%
rename from MagTag_Showerthoughts/code.py
rename to MagTag/MagTag_Showerthoughts/code.py
diff --git a/MagTag_Showerthoughts/fonts/Arial-Bold-12.pcf b/MagTag/MagTag_Showerthoughts/fonts/Arial-Bold-12.pcf
similarity index 100%
rename from MagTag_Showerthoughts/fonts/Arial-Bold-12.pcf
rename to MagTag/MagTag_Showerthoughts/fonts/Arial-Bold-12.pcf
diff --git a/MagTag_Showerthoughts/fonts/Arial-Italic-12.bdf b/MagTag/MagTag_Showerthoughts/fonts/Arial-Italic-12.bdf
similarity index 100%
rename from MagTag_Showerthoughts/fonts/Arial-Italic-12.bdf
rename to MagTag/MagTag_Showerthoughts/fonts/Arial-Italic-12.bdf
diff --git a/MagTag_Showtimes/bmps/3dh.bmp b/MagTag/MagTag_Showtimes/bmps/3dh.bmp
similarity index 100%
rename from MagTag_Showtimes/bmps/3dh.bmp
rename to MagTag/MagTag_Showtimes/bmps/3dh.bmp
diff --git a/MagTag_Showtimes/bmps/aae.bmp b/MagTag/MagTag_Showtimes/bmps/aae.bmp
similarity index 100%
rename from MagTag_Showtimes/bmps/aae.bmp
rename to MagTag/MagTag_Showtimes/bmps/aae.bmp
diff --git a/MagTag_Showtimes/bmps/dds.bmp b/MagTag/MagTag_Showtimes/bmps/dds.bmp
similarity index 100%
rename from MagTag_Showtimes/bmps/dds.bmp
rename to MagTag/MagTag_Showtimes/bmps/dds.bmp
diff --git a/MagTag_Showtimes/bmps/jpp.bmp b/MagTag/MagTag_Showtimes/bmps/jpp.bmp
similarity index 100%
rename from MagTag_Showtimes/bmps/jpp.bmp
rename to MagTag/MagTag_Showtimes/bmps/jpp.bmp
diff --git a/MagTag_Showtimes/bmps/jpw.bmp b/MagTag/MagTag_Showtimes/bmps/jpw.bmp
similarity index 100%
rename from MagTag_Showtimes/bmps/jpw.bmp
rename to MagTag/MagTag_Showtimes/bmps/jpw.bmp
diff --git a/MagTag_Showtimes/bmps/snt.bmp b/MagTag/MagTag_Showtimes/bmps/snt.bmp
similarity index 100%
rename from MagTag_Showtimes/bmps/snt.bmp
rename to MagTag/MagTag_Showtimes/bmps/snt.bmp
diff --git a/MagTag_Showtimes/code.py b/MagTag/MagTag_Showtimes/code.py
similarity index 100%
rename from MagTag_Showtimes/code.py
rename to MagTag/MagTag_Showtimes/code.py
diff --git a/MagTag_Showtimes/events.json b/MagTag/MagTag_Showtimes/events.json
similarity index 100%
rename from MagTag_Showtimes/events.json
rename to MagTag/MagTag_Showtimes/events.json
diff --git a/MagTag_Showtimes/fonts/Arial-Bold-12.pcf b/MagTag/MagTag_Showtimes/fonts/Arial-Bold-12.pcf
similarity index 100%
rename from MagTag_Showtimes/fonts/Arial-Bold-12.pcf
rename to MagTag/MagTag_Showtimes/fonts/Arial-Bold-12.pcf
diff --git a/MagTag_SimpleClock/Helvetica-Bold-100.bdf b/MagTag/MagTag_SimpleClock/Helvetica-Bold-100.bdf
similarity index 100%
rename from MagTag_SimpleClock/Helvetica-Bold-100.bdf
rename to MagTag/MagTag_SimpleClock/Helvetica-Bold-100.bdf
diff --git a/MagTag_SimpleClock/code.py b/MagTag/MagTag_SimpleClock/code.py
similarity index 100%
rename from MagTag_SimpleClock/code.py
rename to MagTag/MagTag_SimpleClock/code.py
diff --git a/MagTag_SpaceX/.circuitpython.skip b/MagTag/MagTag_SpaceX/.circuitpython.skip
similarity index 100%
rename from MagTag_SpaceX/.circuitpython.skip
rename to MagTag/MagTag_SpaceX/.circuitpython.skip
diff --git a/MagTag_SpaceX/README.md b/MagTag/MagTag_SpaceX/README.md
similarity index 100%
rename from MagTag_SpaceX/README.md
rename to MagTag/MagTag_SpaceX/README.md
diff --git a/MagTag_SpaceX/code.py b/MagTag/MagTag_SpaceX/code.py
similarity index 100%
rename from MagTag_SpaceX/code.py
rename to MagTag/MagTag_SpaceX/code.py
diff --git a/MagTag_SpaceX/fonts/Arial-12.bdf b/MagTag/MagTag_SpaceX/fonts/Arial-12.bdf
similarity index 100%
rename from MagTag_SpaceX/fonts/Arial-12.bdf
rename to MagTag/MagTag_SpaceX/fonts/Arial-12.bdf
diff --git a/MagTag_SpaceX/fonts/Arial-Bold-12.pcf b/MagTag/MagTag_SpaceX/fonts/Arial-Bold-12.pcf
similarity index 100%
rename from MagTag_SpaceX/fonts/Arial-Bold-12.pcf
rename to MagTag/MagTag_SpaceX/fonts/Arial-Bold-12.pcf
diff --git a/MagTag_SpaceX/fonts/Lato-Bold-ltd-25.bdf b/MagTag/MagTag_SpaceX/fonts/Lato-Bold-ltd-25.bdf
similarity index 100%
rename from MagTag_SpaceX/fonts/Lato-Bold-ltd-25.bdf
rename to MagTag/MagTag_SpaceX/fonts/Lato-Bold-ltd-25.bdf
diff --git a/MagTag_Sports_Schedule/code.py b/MagTag/MagTag_Sports_Schedule/code.py
similarity index 100%
rename from MagTag_Sports_Schedule/code.py
rename to MagTag/MagTag_Sports_Schedule/code.py
diff --git a/MagTag_Tides/bmps/tides_bg_land.bmp b/MagTag/MagTag_Tides/bmps/tides_bg_land.bmp
similarity index 100%
rename from MagTag_Tides/bmps/tides_bg_land.bmp
rename to MagTag/MagTag_Tides/bmps/tides_bg_land.bmp
diff --git a/MagTag_Tides/bmps/tides_icons.bmp b/MagTag/MagTag_Tides/bmps/tides_icons.bmp
similarity index 100%
rename from MagTag_Tides/bmps/tides_icons.bmp
rename to MagTag/MagTag_Tides/bmps/tides_icons.bmp
diff --git a/MagTag_Tides/code.py b/MagTag/MagTag_Tides/code.py
similarity index 100%
rename from MagTag_Tides/code.py
rename to MagTag/MagTag_Tides/code.py
diff --git a/MagTag_Tides/fonts/Kanit-Black-24.bdf b/MagTag/MagTag_Tides/fonts/Kanit-Black-24.bdf
similarity index 100%
rename from MagTag_Tides/fonts/Kanit-Black-24.bdf
rename to MagTag/MagTag_Tides/fonts/Kanit-Black-24.bdf
diff --git a/MagTag_Tides/fonts/Kanit-Medium-20.bdf b/MagTag/MagTag_Tides/fonts/Kanit-Medium-20.bdf
similarity index 100%
rename from MagTag_Tides/fonts/Kanit-Medium-20.bdf
rename to MagTag/MagTag_Tides/fonts/Kanit-Medium-20.bdf
diff --git a/MagTag_Twitter/code.py b/MagTag/MagTag_Twitter/code.py
similarity index 100%
rename from MagTag_Twitter/code.py
rename to MagTag/MagTag_Twitter/code.py
diff --git a/MagTag_Twitter/fonts/Arial-12.bdf b/MagTag/MagTag_Twitter/fonts/Arial-12.bdf
similarity index 100%
rename from MagTag_Twitter/fonts/Arial-12.bdf
rename to MagTag/MagTag_Twitter/fonts/Arial-12.bdf
diff --git a/MagTag_Twitter/fonts/Arial-Bold-12.pcf b/MagTag/MagTag_Twitter/fonts/Arial-Bold-12.pcf
similarity index 100%
rename from MagTag_Twitter/fonts/Arial-Bold-12.pcf
rename to MagTag/MagTag_Twitter/fonts/Arial-Bold-12.pcf
diff --git a/MagTag_Twitter/images/background.bmp b/MagTag/MagTag_Twitter/images/background.bmp
similarity index 100%
rename from MagTag_Twitter/images/background.bmp
rename to MagTag/MagTag_Twitter/images/background.bmp
diff --git a/MagTag_Weather/.circuitpython.skip b/MagTag/MagTag_Weather/.circuitpython.skip
similarity index 100%
rename from MagTag_Weather/.circuitpython.skip
rename to MagTag/MagTag_Weather/.circuitpython.skip
diff --git a/MagTag_Weather/forecast/bmps/weather_bg.bmp b/MagTag/MagTag_Weather/forecast/bmps/weather_bg.bmp
similarity index 100%
rename from MagTag_Weather/forecast/bmps/weather_bg.bmp
rename to MagTag/MagTag_Weather/forecast/bmps/weather_bg.bmp
diff --git a/MagTag_Weather/forecast/bmps/weather_icons_20px.bmp b/MagTag/MagTag_Weather/forecast/bmps/weather_icons_20px.bmp
similarity index 100%
rename from MagTag_Weather/forecast/bmps/weather_icons_20px.bmp
rename to MagTag/MagTag_Weather/forecast/bmps/weather_icons_20px.bmp
diff --git a/MagTag_Weather/forecast/bmps/weather_icons_70px.bmp b/MagTag/MagTag_Weather/forecast/bmps/weather_icons_70px.bmp
similarity index 100%
rename from MagTag_Weather/forecast/bmps/weather_icons_70px.bmp
rename to MagTag/MagTag_Weather/forecast/bmps/weather_icons_70px.bmp
diff --git a/MagTag_Weather/forecast/code.py b/MagTag/MagTag_Weather/forecast/code.py
similarity index 100%
rename from MagTag_Weather/forecast/code.py
rename to MagTag/MagTag_Weather/forecast/code.py
diff --git a/MagTag_Weather/onecall/bmps/weather_bg.bmp b/MagTag/MagTag_Weather/onecall/bmps/weather_bg.bmp
similarity index 100%
rename from MagTag_Weather/onecall/bmps/weather_bg.bmp
rename to MagTag/MagTag_Weather/onecall/bmps/weather_bg.bmp
diff --git a/MagTag_Weather/onecall/bmps/weather_icons_20px.bmp b/MagTag/MagTag_Weather/onecall/bmps/weather_icons_20px.bmp
similarity index 100%
rename from MagTag_Weather/onecall/bmps/weather_icons_20px.bmp
rename to MagTag/MagTag_Weather/onecall/bmps/weather_icons_20px.bmp
diff --git a/MagTag_Weather/onecall/bmps/weather_icons_70px.bmp b/MagTag/MagTag_Weather/onecall/bmps/weather_icons_70px.bmp
similarity index 100%
rename from MagTag_Weather/onecall/bmps/weather_icons_70px.bmp
rename to MagTag/MagTag_Weather/onecall/bmps/weather_icons_70px.bmp
diff --git a/MagTag_Weather/onecall/code.py b/MagTag/MagTag_Weather/onecall/code.py
similarity index 100%
rename from MagTag_Weather/onecall/code.py
rename to MagTag/MagTag_Weather/onecall/code.py
diff --git a/MagTag_Webb_Telescope_Status/code.py b/MagTag/MagTag_Webb_Telescope_Status/code.py
similarity index 99%
rename from MagTag_Webb_Telescope_Status/code.py
rename to MagTag/MagTag_Webb_Telescope_Status/code.py
index 1ab136584..b418a8d92 100644
--- a/MagTag_Webb_Telescope_Status/code.py
+++ b/MagTag/MagTag_Webb_Telescope_Status/code.py
@@ -238,7 +238,7 @@ def make_value_text(
top_center_name.anchored_position = (top_right_value.x - 2, 6)
# show the group
-display.show(main_group)
+display.root_group = main_group
# refresh display
try_refresh()
diff --git a/MagTag/MagTag_Webb_Telescope_Status/deprecated_original_version/.circuitpython.skip-screenshot b/MagTag/MagTag_Webb_Telescope_Status/deprecated_original_version/.circuitpython.skip-screenshot
new file mode 100644
index 000000000..e69de29bb
diff --git a/MagTag_Webb_Telescope_Status/deprecated_original_version/code.py b/MagTag/MagTag_Webb_Telescope_Status/deprecated_original_version/code.py
similarity index 99%
rename from MagTag_Webb_Telescope_Status/deprecated_original_version/code.py
rename to MagTag/MagTag_Webb_Telescope_Status/deprecated_original_version/code.py
index c6004e439..cc16bebb9 100644
--- a/MagTag_Webb_Telescope_Status/deprecated_original_version/code.py
+++ b/MagTag/MagTag_Webb_Telescope_Status/deprecated_original_version/code.py
@@ -235,7 +235,7 @@ def make_value_text(anchor_point, anchored_position, custom_font=True):
)
# show the group
-display.show(main_group)
+display.root_group = main_group
# refresh display
try_refresh()
diff --git a/MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.bdf b/MagTag/MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.bdf
similarity index 100%
rename from MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.bdf
rename to MagTag/MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.bdf
diff --git a/MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.license b/MagTag/MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.license
similarity index 100%
rename from MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.license
rename to MagTag/MagTag_Webb_Telescope_Status/fonts/LeagueSpartan-Light.license
diff --git a/Magtag_Slideshow/code.py b/MagTag/Magtag_Slideshow/code.py
similarity index 100%
rename from Magtag_Slideshow/code.py
rename to MagTag/Magtag_Slideshow/code.py
diff --git a/Magtag_Slideshow/slides/adabot.bmp b/MagTag/Magtag_Slideshow/slides/adabot.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/adabot.bmp
rename to MagTag/Magtag_Slideshow/slides/adabot.bmp
diff --git a/Magtag_Slideshow/slides/adafruit_logo_bands.bmp b/MagTag/Magtag_Slideshow/slides/adafruit_logo_bands.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/adafruit_logo_bands.bmp
rename to MagTag/Magtag_Slideshow/slides/adafruit_logo_bands.bmp
diff --git a/Magtag_Slideshow/slides/adafruit_logo_dither.bmp b/MagTag/Magtag_Slideshow/slides/adafruit_logo_dither.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/adafruit_logo_dither.bmp
rename to MagTag/Magtag_Slideshow/slides/adafruit_logo_dither.bmp
diff --git a/Magtag_Slideshow/slides/adafruit_logo_mask.bmp b/MagTag/Magtag_Slideshow/slides/adafruit_logo_mask.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/adafruit_logo_mask.bmp
rename to MagTag/Magtag_Slideshow/slides/adafruit_logo_mask.bmp
diff --git a/Magtag_Slideshow/slides/adafruit_logo_stroked.bmp b/MagTag/Magtag_Slideshow/slides/adafruit_logo_stroked.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/adafruit_logo_stroked.bmp
rename to MagTag/Magtag_Slideshow/slides/adafruit_logo_stroked.bmp
diff --git a/Magtag_Slideshow/slides/chesleden.bmp b/MagTag/Magtag_Slideshow/slides/chesleden.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/chesleden.bmp
rename to MagTag/Magtag_Slideshow/slides/chesleden.bmp
diff --git a/Magtag_Slideshow/slides/mindblown_4-bit_indexed.bmp b/MagTag/Magtag_Slideshow/slides/mindblown_4-bit_indexed.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/mindblown_4-bit_indexed.bmp
rename to MagTag/Magtag_Slideshow/slides/mindblown_4-bit_indexed.bmp
diff --git a/Magtag_Slideshow/slides/quadling.bmp b/MagTag/Magtag_Slideshow/slides/quadling.bmp
similarity index 100%
rename from Magtag_Slideshow/slides/quadling.bmp
rename to MagTag/Magtag_Slideshow/slides/quadling.bmp
diff --git a/Magic_AI_Storybook/bookprompt.txt b/Magic_AI_Storybook/bookprompt.txt
new file mode 100644
index 000000000..265d50df8
--- /dev/null
+++ b/Magic_AI_Storybook/bookprompt.txt
@@ -0,0 +1,4 @@
+Write a complete story. It must begin with a title and have a body of approximately
+{STORY_WORD_LENGTH} words long and a happy ending. The specific
+story request is "{STORY_REQUEST}". The title should each be
+specified and the body should start on the next line.
\ No newline at end of file
diff --git a/Magic_AI_Storybook/fonts/Desdemona Black Regular.otf b/Magic_AI_Storybook/fonts/Desdemona Black Regular.otf
new file mode 100644
index 000000000..7d9c88d06
Binary files /dev/null and b/Magic_AI_Storybook/fonts/Desdemona Black Regular.otf differ
diff --git a/Magic_AI_Storybook/fonts/Desdemona.ttf b/Magic_AI_Storybook/fonts/Desdemona.ttf
new file mode 100644
index 000000000..6b02bbcbc
Binary files /dev/null and b/Magic_AI_Storybook/fonts/Desdemona.ttf differ
diff --git a/Magic_AI_Storybook/fonts/lucida_black.ttf b/Magic_AI_Storybook/fonts/lucida_black.ttf
new file mode 100644
index 000000000..e36e47473
Binary files /dev/null and b/Magic_AI_Storybook/fonts/lucida_black.ttf differ
diff --git a/Magic_AI_Storybook/fonts/times new roman.ttf b/Magic_AI_Storybook/fonts/times new roman.ttf
new file mode 100644
index 000000000..5cdac9ca5
Binary files /dev/null and b/Magic_AI_Storybook/fonts/times new roman.ttf differ
diff --git a/Magic_AI_Storybook/images/button_back.png b/Magic_AI_Storybook/images/button_back.png
new file mode 100644
index 000000000..411399aa1
Binary files /dev/null and b/Magic_AI_Storybook/images/button_back.png differ
diff --git a/Magic_AI_Storybook/images/button_new.png b/Magic_AI_Storybook/images/button_new.png
new file mode 100644
index 000000000..527ca81c5
Binary files /dev/null and b/Magic_AI_Storybook/images/button_new.png differ
diff --git a/Magic_AI_Storybook/images/button_next.png b/Magic_AI_Storybook/images/button_next.png
new file mode 100644
index 000000000..f214e5fa1
Binary files /dev/null and b/Magic_AI_Storybook/images/button_next.png differ
diff --git a/Magic_AI_Storybook/images/loading.png b/Magic_AI_Storybook/images/loading.png
new file mode 100644
index 000000000..639621706
Binary files /dev/null and b/Magic_AI_Storybook/images/loading.png differ
diff --git a/Magic_AI_Storybook/images/magic_book_icon.png b/Magic_AI_Storybook/images/magic_book_icon.png
new file mode 100644
index 000000000..39384bb7d
Binary files /dev/null and b/Magic_AI_Storybook/images/magic_book_icon.png differ
diff --git a/Magic_AI_Storybook/images/paper_background.png b/Magic_AI_Storybook/images/paper_background.png
new file mode 100644
index 000000000..1e7084530
Binary files /dev/null and b/Magic_AI_Storybook/images/paper_background.png differ
diff --git a/Magic_AI_Storybook/images/welcome.png b/Magic_AI_Storybook/images/welcome.png
new file mode 100644
index 000000000..974ded2d9
Binary files /dev/null and b/Magic_AI_Storybook/images/welcome.png differ
diff --git a/Magic_AI_Storybook/keys.txt b/Magic_AI_Storybook/keys.txt
new file mode 100644
index 000000000..41a609c13
--- /dev/null
+++ b/Magic_AI_Storybook/keys.txt
@@ -0,0 +1,2 @@
+[openai]
+OPENAI_API_KEY = sk-...
diff --git a/Magic_AI_Storybook/listener.py b/Magic_AI_Storybook/listener.py
new file mode 100644
index 000000000..908efc4ff
--- /dev/null
+++ b/Magic_AI_Storybook/listener.py
@@ -0,0 +1,118 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+from queue import Queue
+import time
+
+import speech_recognition as sr
+
+
+class Listener:
+ def __init__(
+ self, api_key, energy_threshold=300, phrase_timeout=3.0, record_timeout=30
+ ):
+ self.listener_handle = None
+ self.microphone = sr.Microphone()
+ self.recognizer = sr.Recognizer()
+ self.recognizer.energy_threshold = energy_threshold
+ self.recognizer.dynamic_energy_threshold = False
+ self.recognizer.pause_threshold = 1
+ self.last_sample = bytes()
+ self.phrase_time = time.monotonic()
+ self.phrase_timeout = phrase_timeout
+ with self.microphone as source:
+ self.recognizer.adjust_for_ambient_noise(
+ source
+ ) # we only need to calibrate once, before we start listening
+ self.record_timeout = record_timeout
+ self.phrase_complete = False
+ self.data_queue = Queue()
+ self.listener_handle = None
+ self.api_key = api_key
+
+ def listen(self, ready_callback=None):
+ print("Start listening...")
+ self.phrase_complete = False
+ start = time.monotonic()
+ self._start_listening()
+ if ready_callback:
+ ready_callback()
+ while (
+ self.listener_handle and not self.speech_waiting()
+ ) or not self.phrase_complete:
+ if self.phrase_time and time.monotonic() > start + self.phrase_timeout:
+ self.last_sample = bytes()
+ self.phrase_complete = True
+ self.phrase_time = time.monotonic() - start
+ self.stop_listening()
+
+ def _save_audio_callback(self, _, audio):
+ print("Saving audio")
+ data = audio.get_raw_data()
+ self.data_queue.put(data)
+
+ def _get_audio(self):
+ """Concatenate and convert the queued raw data back to audio and return it"""
+ start = time.monotonic()
+ if self.speech_waiting():
+ self.phrase_complete = False
+ if self.phrase_time and time.monotonic() > start + self.phrase_timeout:
+ self.last_sample = bytes()
+ self.phrase_complete = True
+ self.phrase_time = time.monotonic() - start
+
+ # Concatenate our current audio data with the latest audio data.
+ while self.speech_waiting():
+ data = self.data_queue.get()
+ self.last_sample += data
+
+ # Use AudioData to convert the raw data to wav data.
+ return sr.AudioData(
+ self.last_sample,
+ self.microphone.SAMPLE_RATE,
+ self.microphone.SAMPLE_WIDTH,
+ )
+ return None
+
+ def _start_listening(self):
+ if not self.listener_handle:
+ self.listener_handle = self.recognizer.listen_in_background(
+ self.microphone,
+ self._save_audio_callback,
+ phrase_time_limit=self.record_timeout,
+ )
+
+ def stop_listening(self, wait_for_stop=False):
+ if self.listener_handle:
+ self.listener_handle(wait_for_stop=wait_for_stop)
+ self.listener_handle = None
+ print("Stop listening...")
+
+ def is_listening(self):
+ return self.listener_handle is not None
+
+ def speech_waiting(self):
+ return not self.data_queue.empty()
+
+ def recognize(self):
+ audio = self._get_audio()
+ if audio:
+ # Transcribe the audio data to text using Whisper
+ print("Recognizing...")
+ attempts = 0
+ while attempts < 3:
+ try:
+ result = self.recognizer.recognize_whisper_api(
+ audio, api_key=self.api_key
+ )
+
+ return result.strip()
+ except sr.RequestError as e:
+ print(f"Error: {e}")
+ time.sleep(3)
+ attempts += 1
+ print("Retry attempt: ", attempts)
+ print("Failed to recognize")
+ return None
+ return None
diff --git a/Magic_AI_Storybook/make_shortcut.py b/Magic_AI_Storybook/make_shortcut.py
new file mode 100644
index 000000000..851a02c23
--- /dev/null
+++ b/Magic_AI_Storybook/make_shortcut.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python3
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# Desktop Icon from Book icons created by Freepik - Flaticon
+
+import os
+
+
+def create_folders(file_path):
+ path = os.path.dirname(file_path)
+ if not os.path.exists(path):
+ os.makedirs(path)
+
+
+def write_file(path, contents):
+ create_folders(path)
+ with open(path, "w") as f:
+ f.write(contents)
+
+ print(f"Shortcut created at {path}")
+
+
+def main():
+ APP_TITLE = "Magic Storybook"
+ RUN_IN_TERMINAL = True
+ APP_PATH = "~/Magic_AI_Storybook/story.py"
+ APP_ICON = "~/Magic_AI_Storybook/images/magic_book_icon.png"
+ FILENAME = "storybook.desktop"
+ AUTO_START = True
+
+ if os.geteuid() == 0:
+ username = os.environ["SUDO_USER"]
+ else:
+ username = os.getlogin()
+ user_homedir = os.path.expanduser(f"~{username}")
+
+ print("Username is ", username)
+ print("User home directory is ", user_homedir)
+
+ APP_PATH = APP_PATH.replace("~", user_homedir)
+ APP_ICON = APP_ICON.replace("~", user_homedir)
+
+ shortcut_template = f"""[Desktop Entry]
+Comment=Run {APP_TITLE}
+Terminal={"true" if RUN_IN_TERMINAL else "false"}
+Name={APP_TITLE}
+Exec=sudo python {APP_PATH}
+Type=Application
+Icon={APP_ICON}
+"""
+
+ write_file(f"{user_homedir}/Desktop/{FILENAME}", shortcut_template)
+ if AUTO_START:
+ write_file(f"{user_homedir}/.config/autostart/{FILENAME}", shortcut_template)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/Magic_AI_Storybook/story.py b/Magic_AI_Storybook/story.py
new file mode 100644
index 000000000..cd2ad2a10
--- /dev/null
+++ b/Magic_AI_Storybook/story.py
@@ -0,0 +1,793 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import threading
+import sys
+import os
+import re
+import time
+import argparse
+import math
+import configparser
+from enum import Enum
+from collections import deque
+
+import board
+import digitalio
+import neopixel
+import openai
+import pygame
+from rpi_backlight import Backlight
+from adafruit_led_animation.animation.pulse import Pulse
+
+from listener import Listener
+
+# Base Path is the folder the script resides in
+BASE_PATH = os.path.dirname(sys.argv[0])
+if BASE_PATH != "":
+ BASE_PATH += "/"
+
+# General Settings
+STORY_WORD_LENGTH = 800
+REED_SWITCH_PIN = board.D17
+NEOPIXEL_PIN = board.D18
+API_KEYS_FILE = "~/keys.txt"
+PROMPT_FILE = "/boot/bookprompt.txt"
+
+# Quit Settings (Close book QUIT_CLOSES within QUIT_TIME_PERIOD to quit)
+QUIT_CLOSES = 3
+QUIT_TIME_PERIOD = 5 # Time period in Seconds
+QUIT_DEBOUNCE_DELAY = 0.25 # Time to wait before counting next closeing
+
+# Neopixel Settings
+NEOPIXEL_COUNT = 1
+NEOPIXEL_BRIGHTNESS = 0.2
+NEOPIXEL_ORDER = neopixel.GRBW
+NEOPIXEL_LOADING_COLOR = (0, 255, 0, 0) # Loading/Dreaming (Green)
+NEOPIXEL_SLEEP_COLOR = (0, 0, 0, 0) # Sleeping (Off)
+NEOPIXEL_WAITING_COLOR = (255, 255, 0, 0) # Waiting for Input (Yellow)
+NEOPIXEL_READING_COLOR = (0, 0, 255, 0) # Reading (Blue)
+NEOPIXEL_PULSE_SPEED = 0.1
+
+# Image Settings
+WELCOME_IMAGE = "welcome.png"
+BACKGROUND_IMAGE = "paper_background.png"
+LOADING_IMAGE = "loading.png"
+BUTTON_BACK_IMAGE = "button_back.png"
+BUTTON_NEXT_IMAGE = "button_next.png"
+BUTTON_NEW_IMAGE = "button_new.png"
+
+# Asset Paths
+IMAGES_PATH = BASE_PATH + "images/"
+FONTS_PATH = BASE_PATH + "fonts/"
+
+# Font Path & Size
+TITLE_FONT = (FONTS_PATH + "Desdemona Black Regular.otf", 48)
+TITLE_COLOR = (0, 0, 0)
+TEXT_FONT = (FONTS_PATH + "times new roman.ttf", 24)
+TEXT_COLOR = (0, 0, 0)
+
+# Delays Settings
+# Used to control the speed of the text
+WORD_DELAY = 0.1
+TITLE_FADE_TIME = 0.05
+TITLE_FADE_STEPS = 25
+TEXT_FADE_TIME = 0.25
+TEXT_FADE_STEPS = 51
+ALSA_ERROR_DELAY = 0.5 # Delay to wait after an ALSA errors
+
+# Whitespace Settings (in Pixels)
+PAGE_TOP_MARGIN = 20
+PAGE_SIDE_MARGIN = 20
+PAGE_BOTTOM_MARGIN = 0
+PAGE_NAV_HEIGHT = 100
+EXTRA_LINE_SPACING = 0
+PARAGRAPH_SPACING = 30
+
+# ChatGPT Parameters
+SYSTEM_ROLE = "You are a master AI Storyteller that can tell a story of any length."
+CHATGPT_MODEL = "gpt-3.5-turbo"
+WHISPER_MODEL = "whisper-1"
+
+# Speech Recognition Parameters
+ENERGY_THRESHOLD = 300 # Energy level for mic to detect
+PHRASE_TIMEOUT = 1.0 # Space between recordings for separating phrases
+RECORD_TIMEOUT = 30 # Maximum time in seconds to wait for speech
+
+# Do some checks and Import API keys from API_KEYS_FILE
+config = configparser.ConfigParser()
+
+if os.geteuid() != 0:
+ print("Please run this script as root.")
+ sys.exit(1)
+username = os.environ["SUDO_USER"]
+user_homedir = os.path.expanduser(f"~{username}")
+API_KEYS_FILE = API_KEYS_FILE.replace("~", user_homedir)
+
+print(os.path.expanduser(API_KEYS_FILE))
+config.read(os.path.expanduser(API_KEYS_FILE))
+if not config.has_section("openai"):
+ print("Please make sure API_KEYS_FILE points to a valid file.")
+ sys.exit(1)
+if "OPENAI_API_KEY" not in config["openai"]:
+ print(
+ "Please make sure your API keys file contains an OPENAI_API_KEY under the openai section."
+ )
+ sys.exit(1)
+if len(config["openai"]["OPENAI_API_KEY"]) < 10:
+ print("Please set OPENAI_API_KEY in your API keys file with a valid key.")
+ sys.exit(1)
+openai.api_key = config["openai"]["OPENAI_API_KEY"]
+
+# Check that the prompt file exists and load it
+if not os.path.isfile(PROMPT_FILE):
+ print("Please make sure PROMPT_FILE points to a valid file.")
+ sys.exit(1)
+
+
+def strip_fancy_quotes(text):
+ text = re.sub(r"[\u2018\u2019]", "'", text)
+ text = re.sub(r"[\u201C\u201D]", '"', text)
+ return text
+
+
+class Position(Enum):
+ TOP = 0
+ CENTER = 1
+ BOTTOM = 2
+ LEFT = 3
+ RIGHT = 4
+
+
+class Button:
+ def __init__(self, x, y, image, action, draw_function):
+ self.x = x
+ self.y = y
+ self.image = image
+ self.action = action
+ self._width = self.image.get_width()
+ self._height = self.image.get_height()
+ self._visible = False
+ self._draw_function = draw_function
+
+ def is_in_bounds(self, position):
+ x, y = position
+ return (
+ self.x <= x <= self.x + self.width and self.y <= y <= self.y + self.height
+ )
+
+ def show(self):
+ self._draw_function(self.image, self.x, self.y)
+ self._visible = True
+
+ @property
+ def width(self):
+ return self._width
+
+ @property
+ def height(self):
+ return self._height
+
+ @property
+ def visible(self):
+ return self._visible
+
+
+class Textarea:
+ def __init__(self, x, y, width, height):
+ self.x = x
+ self.y = y
+ self.width = width
+ self.height = height
+
+ @property
+ def size(self):
+ return {"width": self.width, "height": self.height}
+
+
+class Book:
+ def __init__(self, rotation=0):
+ self.paragraph_number = 0
+ self.page = 0
+ self.pages = []
+ self.stories = []
+ self.story = 0
+ self.rotation = rotation
+ self.images = {}
+ self.fonts = {}
+ self.buttons = {}
+ self.width = 0
+ self.height = 0
+ self.textarea = None
+ self.screen = None
+ self.saved_screen = None
+ self._sleeping = False
+ self.sleep_check_delay = 0.1
+ self._sleep_check_thread = None
+ self._sleep_request = False
+ self._running = True
+ self._busy = False
+ self._loading = False
+ # Use a Double Ended Queue to handle the heavy lifting
+ self._closing_times = deque(maxlen=QUIT_CLOSES)
+ # Use a cursor to keep track of where we are in the text area
+ self.cursor = {"x": 0, "y": 0}
+ self.listener = None
+ self.backlight = Backlight()
+ self.pixels = neopixel.NeoPixel(
+ NEOPIXEL_PIN,
+ NEOPIXEL_COUNT,
+ brightness=NEOPIXEL_BRIGHTNESS,
+ pixel_order=NEOPIXEL_ORDER,
+ auto_write=False,
+ )
+ self._prompt = ""
+ self._load_thread = threading.Thread(target=self._handle_loading_status)
+ self._load_thread.start()
+
+ def start(self):
+ # Output to the LCD instead of the console
+ os.putenv("DISPLAY", ":0")
+
+ self._set_status_color(NEOPIXEL_LOADING_COLOR)
+
+ # Initialize the display
+ pygame.init()
+ self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
+ pygame.mouse.set_visible(False)
+ self.screen.fill((255, 255, 255))
+ self.width = self.screen.get_height()
+ self.height = self.screen.get_width()
+
+ # Preload welcome image and display it
+ self._load_image("welcome", WELCOME_IMAGE)
+ self.display_welcome()
+
+ # Load the prompt file
+ with open(PROMPT_FILE, "r") as f:
+ self._prompt = f.read()
+
+ # Initialize the Listener
+ self.listener = Listener(
+ openai.api_key, ENERGY_THRESHOLD, PHRASE_TIMEOUT, RECORD_TIMEOUT
+ )
+
+ # Preload remaining images
+ self._load_image("background", BACKGROUND_IMAGE)
+ self._load_image("loading", LOADING_IMAGE)
+
+ # Preload fonts
+ self._load_font("title", TITLE_FONT)
+ self._load_font("text", TEXT_FONT)
+
+ # Add buttons
+ back_button_image = pygame.image.load(IMAGES_PATH + BUTTON_BACK_IMAGE)
+ next_button_image = pygame.image.load(IMAGES_PATH + BUTTON_NEXT_IMAGE)
+ new_button_image = pygame.image.load(IMAGES_PATH + BUTTON_NEW_IMAGE)
+ button_spacing = (
+ self.width
+ - (
+ back_button_image.get_width()
+ + next_button_image.get_width()
+ + new_button_image.get_width()
+ )
+ ) // 4
+ button_ypos = (
+ self.height
+ - PAGE_NAV_HEIGHT
+ + (PAGE_NAV_HEIGHT - next_button_image.get_height()) // 2
+ )
+
+ self._load_button(
+ "back",
+ button_spacing,
+ button_ypos,
+ back_button_image,
+ self.previous_page,
+ self._display_surface,
+ )
+
+ self._load_button(
+ "new",
+ button_spacing * 2 + back_button_image.get_width(),
+ button_ypos,
+ new_button_image,
+ self.new_story,
+ self._display_surface,
+ )
+
+ self._load_button(
+ "next",
+ button_spacing * 3
+ + back_button_image.get_width()
+ + new_button_image.get_width(),
+ button_ypos,
+ next_button_image,
+ self.next_page,
+ self._display_surface,
+ )
+
+ # Add Text Area
+ self.textarea = Textarea(
+ PAGE_SIDE_MARGIN,
+ PAGE_TOP_MARGIN,
+ self.width - PAGE_SIDE_MARGIN * 2,
+ self.height - PAGE_NAV_HEIGHT - PAGE_TOP_MARGIN - PAGE_BOTTOM_MARGIN,
+ )
+
+ # Start the sleep check thread after everything is initialized
+ self._sleep_check_thread = threading.Thread(target=self._handle_sleep)
+ self._sleep_check_thread.start()
+
+ self._set_status_color(NEOPIXEL_READING_COLOR)
+
+ def deinit(self):
+ self._running = False
+ self._sleep_check_thread.join()
+ self._load_thread.join()
+ self.backlight.power = True
+
+ def _handle_sleep(self):
+ reed_switch = digitalio.DigitalInOut(REED_SWITCH_PIN)
+ reed_switch.direction = digitalio.Direction.INPUT
+ reed_switch.pull = digitalio.Pull.UP
+
+ while self._running:
+ if self._sleeping and reed_switch.value: # Book Open
+ self._wake()
+ elif not self._sleeping and not reed_switch.value:
+ self._sleep()
+ time.sleep(self.sleep_check_delay)
+
+ def _handle_loading_status(self):
+ pulse = Pulse(
+ self.pixels,
+ speed=NEOPIXEL_PULSE_SPEED,
+ color=NEOPIXEL_LOADING_COLOR,
+ period=3,
+ )
+
+ while self._running:
+ if self._loading:
+ pulse.animate()
+ time.sleep(0.1)
+
+ # Turn off the Neopixels
+ self.pixels.fill(0)
+ self.pixels.show()
+
+ def _set_status_color(self, status_color):
+ if status_color not in [
+ NEOPIXEL_READING_COLOR,
+ NEOPIXEL_WAITING_COLOR,
+ NEOPIXEL_SLEEP_COLOR,
+ NEOPIXEL_LOADING_COLOR,
+ ]:
+ raise ValueError(f"Invalid status color {status_color}.")
+
+ # Handle loading color by setting the loading flag
+ self._loading = status_color == NEOPIXEL_LOADING_COLOR
+
+ # Handle other status colors by setting the neopixels
+ if status_color != NEOPIXEL_LOADING_COLOR:
+ self.pixels.fill(status_color)
+ self.pixels.show()
+
+ def handle_events(self):
+ if not self._sleeping:
+ for event in pygame.event.get():
+ if event.type == pygame.QUIT:
+ raise SystemExit
+ if event.type == pygame.MOUSEBUTTONDOWN:
+ self._handle_mousedown_event(event)
+ time.sleep(0.1)
+
+ def _handle_mousedown_event(self, event):
+ if event.button == 1:
+ # If button pressed while visible, trigger action
+ coords = self._rotate_mouse_pos(event.pos)
+ for button in self.buttons.values():
+ if button.visible and button.is_in_bounds(coords):
+ button.action()
+
+ def _rotate_mouse_pos(self, point):
+ # Recalculate the mouse position based on the rotation of the screen
+ # So that we have the coordinates relative to the upper left corner of the screen
+ angle = 360 - self.rotation
+ y, x = point
+ x -= self.width // 2
+ y -= self.height // 2
+ x, y = x * math.sin(math.radians(angle)) + y * math.cos(
+ math.radians(angle)
+ ), x * math.cos(math.radians(angle)) - y * math.sin(math.radians(angle))
+ x += self.width // 2
+ y += self.height // 2
+ return (round(x), round(y))
+
+ def _load_image(self, name, filename):
+ try:
+ image = pygame.image.load(IMAGES_PATH + filename)
+ self.images[name] = image
+ except pygame.error:
+ pass
+
+ def _load_button(self, name, x, y, image, action, display_surface):
+ self.buttons[name] = Button(x, y, image, action, display_surface)
+
+ def _load_font(self, name, details):
+ self.fonts[name] = pygame.font.Font(details[0], details[1])
+
+ def _display_surface(self, surface, x=0, y=0, target_surface=None):
+ # Display a surface either positionally or with a specific x,y coordinate
+ buffer = self._create_transparent_buffer((self.width, self.height))
+ buffer.blit(surface, (x, y))
+ if target_surface is None:
+ buffer = pygame.transform.rotate(buffer, self.rotation)
+ self.screen.blit(buffer, (0, 0))
+ else:
+ target_surface.blit(buffer, (0, 0))
+
+ def _fade_in_surface(self, surface, x, y, fade_time, fade_steps=50):
+ background = self._create_transparent_buffer((self.width, self.height))
+ self._display_surface(self.images["background"], 0, 0, background)
+
+ buffer = self._create_transparent_buffer(surface.get_size())
+ fade_delay = round(
+ fade_time / fade_steps * 1000
+ ) # Time to delay in ms between each fade step
+
+ def draw_alpha(alpha):
+ buffer.blit(background, (-x, -y))
+ surface.set_alpha(alpha)
+ buffer.blit(surface, (0, 0))
+ self._display_surface(buffer, x, y)
+ pygame.display.update()
+
+ for alpha in range(0, 255, round(255 / fade_steps)):
+ draw_alpha(alpha)
+ pygame.time.wait(fade_delay)
+ if self._sleep_request:
+ draw_alpha(255) # Finish up quickly
+ return
+
+ def display_current_page(self):
+ self._busy = True
+ self._display_surface(self.images["background"], 0, 0)
+ pygame.display.update()
+
+ print(f"Loading page {self.page} of {len(self.pages)}")
+ page_data = self.pages[self.page]
+
+ # Display the title
+ if page_data["title"]:
+ self._display_title_text(page_data["title"])
+
+ self._fade_in_surface(
+ page_data["buffer"],
+ self.textarea.x,
+ self.textarea.y + page_data["text_position"],
+ TEXT_FADE_TIME,
+ TEXT_FADE_STEPS,
+ )
+
+ # Display the navigation buttons
+ if self.page > 0 or self.story > 0:
+ self.buttons["back"].show()
+ self.buttons["next"].show()
+ self.buttons["new"].show()
+ pygame.display.update()
+ self._busy = False
+
+ @staticmethod
+ def _create_transparent_buffer(size):
+ if isinstance(size, (tuple, list)):
+ (width, height) = size
+ elif isinstance(size, dict):
+ width = size["width"]
+ height = size["height"]
+ else:
+ raise ValueError(f"Invalid size {size}. Should be tuple, list, or dict.")
+ buffer = pygame.Surface((width, height), pygame.SRCALPHA, 32)
+ buffer = buffer.convert_alpha()
+ return buffer
+
+ def _display_title_text(self, text, y=0):
+ # Render the title as multiple lines if too big
+ lines = self._wrap_text(text, self.fonts["title"], self.textarea.width)
+ self.cursor["y"] = y
+ delay_value = WORD_DELAY
+ for line in lines:
+ words = line.split(" ")
+ self.cursor["x"] = (
+ self.textarea.width // 2 - self.fonts["title"].size(line)[0] // 2
+ )
+ for word in words:
+ text = self.fonts["title"].render(word + " ", True, TITLE_COLOR)
+ if self._sleep_request:
+ delay_value = 0
+ self._display_surface(
+ text,
+ self.cursor["x"] + self.textarea.x,
+ self.cursor["y"] + self.textarea.y,
+ )
+ else:
+ self._fade_in_surface(
+ text,
+ self.cursor["x"] + self.textarea.x,
+ self.cursor["y"] + self.textarea.y,
+ TITLE_FADE_TIME,
+ TITLE_FADE_STEPS,
+ )
+
+ pygame.display.update()
+ self.cursor["x"] += text.get_width()
+ time.sleep(delay_value)
+ self.cursor["y"] += self.fonts["title"].size(line)[1]
+
+ def _title_text_height(self, text):
+ lines = self._wrap_text(text, self.fonts["title"], self.textarea.width)
+ height = 0
+ for line in lines:
+ height += self.fonts["title"].size(line)[1]
+ return height
+
+ @staticmethod
+ def _wrap_text(text, font, width):
+ lines = []
+ line = ""
+ for word in text.split(" "):
+ if font.size(line + word)[0] < width:
+ line += word + " "
+ else:
+ lines.append(line)
+ line = word + " "
+ lines.append(line)
+ return lines
+
+ def previous_page(self):
+ if self.page > 0 or self.story > 0:
+ self.page -= 1
+ if self.page < 0:
+ self.story -= 1
+ self.load_story(self.stories[self.story])
+ self.page = len(self.pages) - 1
+ self.display_current_page()
+
+ def next_page(self):
+ self.page += 1
+ if self.page >= len(self.pages):
+ if self.story < len(self.stories) - 1:
+ self.story += 1
+ self.load_story(self.stories[self.story])
+ self.page = 0
+ else:
+ self.generate_new_story()
+ self.display_current_page()
+
+ def new_story(self):
+ self.generate_new_story()
+ self.display_current_page()
+
+ def display_loading(self):
+ self._display_surface(self.images["loading"], 0, 0)
+ pygame.display.update()
+ self._set_status_color(NEOPIXEL_LOADING_COLOR)
+
+ def display_welcome(self):
+ self._display_surface(self.images["welcome"], 0, 0)
+ pygame.display.update()
+
+ def display_message(self, message):
+ self._busy = True
+ self._display_surface(self.images["background"], 0, 0)
+ height = self._title_text_height(message)
+ self._display_title_text(message, self.height // 2 - height // 2)
+ self._busy = False
+
+ def load_story(self, story):
+ # Parse out the title and story and render into pages
+ self._busy = True
+ self.pages = []
+ if not story.startswith("Title: "):
+ print("Unexpected story format from ChatGPT. Missing Title.")
+ title = "A Story"
+ else:
+ title = story.split("Title: ")[1].split("\n\n")[0]
+ page = self._add_page(title)
+ paragraphs = story.split("\n\n")[1:]
+ for paragraph in paragraphs:
+ lines = self._wrap_text(paragraph, self.fonts["text"], self.textarea.width)
+ for line in lines:
+ self.cursor["x"] = 0
+ text = self.fonts["text"].render(line, True, TEXT_COLOR)
+ if (
+ self.cursor["y"] + self.fonts["text"].get_height()
+ > page["buffer"].get_height()
+ ):
+ page = self._add_page()
+
+ self._display_surface(
+ text, self.cursor["x"], self.cursor["y"], page["buffer"]
+ )
+ self.cursor["y"] += self.fonts["text"].size(line)[1]
+
+ if self.cursor["y"] > 0:
+ self.cursor["y"] += PARAGRAPH_SPACING
+ print(f"Loaded story at index {self.story} with {len(self.pages)} pages")
+ self._set_status_color(NEOPIXEL_READING_COLOR)
+ self._busy = False
+
+ def _add_page(self, title=None):
+ page = {
+ "title": title,
+ "text_position": 0,
+ }
+ if title:
+ page["text_position"] = self._title_text_height(title) + PARAGRAPH_SPACING
+ page["buffer"] = self._create_transparent_buffer(
+ (self.textarea.width, self.textarea.height - page["text_position"])
+ )
+ self.cursor["y"] = 0
+ self.pages.append(page)
+ return page
+
+ def generate_new_story(self):
+ self._busy = True
+ self.display_message("Speak aloud the story you wish to read.")
+
+ if self._sleep_request:
+ self._busy = False
+ time.sleep(0.2)
+ return
+
+ def show_listening():
+ # Pause for a beat because the listener doesn't
+ # immediately start listening sometimes
+ time.sleep(ALSA_ERROR_DELAY)
+ self.pixels.fill(NEOPIXEL_WAITING_COLOR)
+ self.pixels.show()
+
+ self.listener.listen(ready_callback=show_listening)
+
+ if self._sleep_request:
+ self._busy = False
+ return
+
+ if not self.listener.speech_waiting():
+ # No response from user, so return
+ print("No response from user.")
+ return
+
+ story_request = self.listener.recognize()
+ print(f"Whisper heard: {story_request}")
+ story_prompt = self._make_story_prompt(story_request)
+ self.display_loading()
+ response = self._sendchat(story_prompt)
+ if self._sleep_request:
+ self._busy = False
+ return
+ print(response)
+
+ self._busy = True
+ self.stories.append(response)
+ self.story = len(self.stories) - 1
+ self.page = 0
+ self._busy = False
+
+ self.load_story(response)
+
+ def _sleep(self):
+ # Set a sleep request flag so that any busy threads know to finish up
+ self._sleep_request = True
+ if self.listener.is_listening():
+ self.listener.stop_listening()
+ while self._busy:
+ time.sleep(0.1)
+ self._sleep_request = False
+
+ if (
+ len(self._closing_times) == 0
+ or (time.monotonic() - self._closing_times[-1]) > QUIT_DEBOUNCE_DELAY
+ ):
+ self._closing_times.append(time.monotonic())
+
+ # Check if we've closed the book a certain number of times
+ # within a certain number of seconds
+ if (
+ len(self._closing_times) == QUIT_CLOSES
+ and self._closing_times[-1] - self._closing_times[0] < QUIT_TIME_PERIOD
+ ):
+ self._running = False
+ return
+
+ self._sleeping = True
+ self._set_status_color(NEOPIXEL_SLEEP_COLOR)
+ self.sleep_check_delay = 0
+ self.saved_screen = self.screen.copy()
+ self.screen.fill((0, 0, 0))
+ pygame.display.update()
+ self.backlight.power = False
+
+ def _wake(self):
+ # Turn on the screen
+ self.backlight.power = True
+ if self.saved_screen:
+ self.screen.blit(self.saved_screen, (0, 0))
+ pygame.display.update()
+ self.saved_screen = None
+ self.sleep_check_delay = 0.1
+ self._set_status_color(NEOPIXEL_READING_COLOR)
+ self._sleeping = False
+
+ def _make_story_prompt(self, request):
+ return self._prompt.format(
+ STORY_WORD_LENGTH=STORY_WORD_LENGTH, STORY_REQUEST=request
+ )
+
+ def _sendchat(self, prompt):
+ response = ""
+ print("Sending to chatGPT")
+ # Package up the text to send to ChatGPT
+ completion = openai.ChatCompletion.create(
+ model=CHATGPT_MODEL,
+ messages=[
+ {"role": "system", "content": SYSTEM_ROLE},
+ {"role": "user", "content": prompt},
+ ],
+ stream=True,
+ )
+
+ for chunk in completion:
+ if "delta" in chunk.choices[0] and "content" in chunk.choices[0]["delta"]:
+ response += chunk.choices[0]["delta"]["content"]
+ if self._sleep_request:
+ return None
+
+ # Send the heard text to ChatGPT and return the result
+ return strip_fancy_quotes(response)
+
+ @property
+ def running(self):
+ return self._running
+
+ @property
+ def sleeping(self):
+ return self._sleeping
+
+
+def parse_args():
+ parser = argparse.ArgumentParser()
+ # Book will only be rendered vertically for the sake of simplicity
+ parser.add_argument(
+ "--rotation",
+ type=int,
+ choices=[90, 270],
+ dest="rotation",
+ action="store",
+ default=90,
+ help="Rotate everything on the display by this amount",
+ )
+ return parser.parse_args()
+
+
+def main(args):
+ book = Book(args.rotation)
+ try:
+ book.start()
+ while len(book.pages) == 0:
+ if not book.sleeping:
+ book.generate_new_story()
+ book.display_current_page()
+
+ while book.running:
+ book.handle_events()
+ except KeyboardInterrupt:
+ pass
+ finally:
+ book.deinit()
+ pygame.quit()
+
+
+if __name__ == "__main__":
+ main(parse_args())
diff --git a/Magic_Band_Reader/code.py b/Magic_Band_Reader/code.py
index f9b59accc..031b6bffc 100755
--- a/Magic_Band_Reader/code.py
+++ b/Magic_Band_Reader/code.py
@@ -47,7 +47,7 @@ def play_wav(name):
]
while True:
print("Waiting for button press to continue!")
- while button.value:
+ while not button.value:
solid.animate()
play_wav(random.choice(sounds))
while audio.playing:
diff --git a/Magic_Nine_Ball/code.py b/Magic_Nine_Ball/code.py
index b25fafaca..fe1a5f63b 100644
--- a/Magic_Nine_Ball/code.py
+++ b/Magic_Nine_Ball/code.py
@@ -14,7 +14,7 @@
import adafruit_lis3dh
splash = displayio.Group()
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
SENSITIVITY = 5 # reading in Z direction to trigger, adjustable
@@ -23,7 +23,9 @@
i = random.randint(0, (len(images)-1)) # initial image is randomly selected
# Set up accelerometer on I2C bus, 4G range:
-ACCEL = adafruit_lis3dh.LIS3DH_I2C(board.I2C(), address=0x18)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+ACCEL = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x18)
ACCEL.range = adafruit_lis3dh.RANGE_4_G
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAA.bmp
new file mode 100755
index 000000000..ef2c282fd
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAH.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAH.bmp
new file mode 100755
index 000000000..c1c6647e9
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAH.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAL.bmp
new file mode 100755
index 000000000..c7f111d3b
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAR.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAR.bmp
new file mode 100755
index 000000000..fd17af9ea
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AAR.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ACA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ACA.bmp
new file mode 100755
index 000000000..24044c54b
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ACA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AFL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AFL.bmp
new file mode 100755
index 000000000..3b6e4f951
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AFL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AFR.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AFR.bmp
new file mode 100755
index 000000000..6b68341cd
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AFR.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AIC.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AIC.bmp
new file mode 100755
index 000000000..ce9836b62
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AIC.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AJM.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AJM.bmp
new file mode 100755
index 000000000..e9be3b145
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AJM.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ALK.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ALK.bmp
new file mode 100755
index 000000000..29dbcf982
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ALK.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMC.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMC.bmp
new file mode 100755
index 000000000..5f6753136
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMC.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMU.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMU.bmp
new file mode 100755
index 000000000..9b9286b2a
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMU.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMX.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMX.bmp
new file mode 100755
index 000000000..c353b61c4
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AMX.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ANA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ANA.bmp
new file mode 100755
index 000000000..773a3975c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ANA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ANZ.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ANZ.bmp
new file mode 100755
index 000000000..96a0c31c0
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ANZ.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ASA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ASA.bmp
new file mode 100755
index 000000000..8745daae2
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ASA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ATC.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ATC.bmp
new file mode 100755
index 000000000..c19dbe461
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ATC.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AUA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AUA.bmp
new file mode 100755
index 000000000..a87c2337c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AUA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AVA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AVA.bmp
new file mode 100755
index 000000000..afa8a06bb
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AVA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AWE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AWE.bmp
new file mode 100755
index 000000000..cdb049e42
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AWE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AZA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AZA.bmp
new file mode 100755
index 000000000..952587783
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AZA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AZU.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AZU.bmp
new file mode 100755
index 000000000..b207659eb
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/AZU.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BEE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BEE.bmp
new file mode 100755
index 000000000..3d57a5222
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BEE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BER.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BER.bmp
new file mode 100755
index 000000000..59d79d512
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BER.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BMA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BMA.bmp
new file mode 100755
index 000000000..f0c6de295
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BMA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BOE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BOE.bmp
new file mode 100755
index 000000000..5e37f138e
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BOE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BTA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BTA.bmp
new file mode 100755
index 000000000..99b1dbf18
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BTA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BWA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BWA.bmp
new file mode 100755
index 000000000..3dfbda39d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/BWA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CAL.bmp
new file mode 100755
index 000000000..9323945c6
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CCA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CCA.bmp
new file mode 100755
index 000000000..a5836fac3
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CCA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CES.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CES.bmp
new file mode 100755
index 000000000..9846fe287
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CES.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CHH.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CHH.bmp
new file mode 100755
index 000000000..0c7074b38
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CHH.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CJT.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CJT.bmp
new file mode 100755
index 000000000..84dfa8ee4
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CJT.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CLH.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CLH.bmp
new file mode 100755
index 000000000..8a0687780
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CLH.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CLX.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CLX.bmp
new file mode 100755
index 000000000..4327adf8e
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CLX.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CMP.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CMP.bmp
new file mode 100755
index 000000000..161bb77e7
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CMP.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/COA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/COA.bmp
new file mode 100755
index 000000000..f3a820d91
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/COA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CPA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CPA.bmp
new file mode 100755
index 000000000..ace0aec99
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CPA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSA.bmp
new file mode 100755
index 000000000..8ed6b35d6
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSC.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSC.bmp
new file mode 100755
index 000000000..5303e708c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSC.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSN.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSN.bmp
new file mode 100755
index 000000000..6419a9cdf
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSN.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSZ.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSZ.bmp
new file mode 100755
index 000000000..960c141a8
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CSZ.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CXA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CXA.bmp
new file mode 100755
index 000000000..bb32f1a4c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/CXA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/DAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/DAL.bmp
new file mode 100755
index 000000000..a27355341
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/DAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/DLH.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/DLH.bmp
new file mode 100755
index 000000000..c78eb489d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/DLH.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EAL.bmp
new file mode 100755
index 000000000..3c3437b15
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EDV.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EDV.bmp
new file mode 100755
index 000000000..a27355341
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EDV.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EGF.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EGF.bmp
new file mode 100755
index 000000000..dd792be2f
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EGF.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EIN.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EIN.bmp
new file mode 100755
index 000000000..c289da627
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EIN.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ENY.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ENY.bmp
new file mode 100755
index 000000000..cf755ab63
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ENY.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ETD.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ETD.bmp
new file mode 100755
index 000000000..00b53e2d3
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ETD.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ETH.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ETH.bmp
new file mode 100755
index 000000000..7dddb2c2b
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ETH.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EVA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EVA.bmp
new file mode 100755
index 000000000..885f2177d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EVA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EWG.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EWG.bmp
new file mode 100755
index 000000000..95f400afe
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/EWG.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FDX.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FDX.bmp
new file mode 100755
index 000000000..c829c975d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FDX.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FFT.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FFT.bmp
new file mode 100755
index 000000000..1c55328a1
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FFT.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FIN.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FIN.bmp
new file mode 100755
index 000000000..8cb58bf46
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FIN.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FJI.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FJI.bmp
new file mode 100755
index 000000000..f2e62d533
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FJI.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FLG.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FLG.bmp
new file mode 100755
index 000000000..39e115b95
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/FLG.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GEC.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GEC.bmp
new file mode 100755
index 000000000..ec8728180
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GEC.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GFA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GFA.bmp
new file mode 100755
index 000000000..f5994e6d0
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GFA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GIA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GIA.bmp
new file mode 100755
index 000000000..5de92e4c2
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GIA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GLO.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GLO.bmp
new file mode 100755
index 000000000..6ffa0874c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GLO.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GTI.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GTI.bmp
new file mode 100755
index 000000000..5df06dd34
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/GTI.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/HAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/HAL.bmp
new file mode 100755
index 000000000..ed894e322
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/HAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/HTL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/HTL.bmp
new file mode 100755
index 000000000..0086bc7af
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/HTL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/IBE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/IBE.bmp
new file mode 100755
index 000000000..843efcc73
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/IBE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ICE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ICE.bmp
new file mode 100755
index 000000000..3310e5850
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ICE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JAL.bmp
new file mode 100755
index 000000000..3c6dd3a80
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JAT.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JAT.bmp
new file mode 100755
index 000000000..9a1b447ce
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JAT.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JBU.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JBU.bmp
new file mode 100755
index 000000000..e7273f880
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JBU.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JKK.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JKK.bmp
new file mode 100755
index 000000000..0c979e44f
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JKK.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JMC.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JMC.bmp
new file mode 100755
index 000000000..0827ec22c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JMC.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JSX.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JSX.bmp
new file mode 100755
index 000000000..d6e6b87e8
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JSX.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JZA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JZA.bmp
new file mode 100755
index 000000000..24044c54b
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/JZA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/KAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/KAL.bmp
new file mode 100755
index 000000000..807507b1d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/KAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/KLM.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/KLM.bmp
new file mode 100755
index 000000000..3fcfb2554
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/KLM.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LAL.bmp
new file mode 100755
index 000000000..ede649cf4
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LAN.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LAN.bmp
new file mode 100755
index 000000000..0386306f2
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LAN.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LDA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LDA.bmp
new file mode 100755
index 000000000..ed99ff98c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LDA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LGL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LGL.bmp
new file mode 100755
index 000000000..994c9935d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LGL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LNI.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LNI.bmp
new file mode 100755
index 000000000..7605a60b1
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LNI.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LOF.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LOF.bmp
new file mode 100755
index 000000000..d97411499
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LOF.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LOT.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LOT.bmp
new file mode 100755
index 000000000..5bc2fabf0
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LOT.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LTD.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LTD.bmp
new file mode 100755
index 000000000..aec8e2e15
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LTD.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LTG.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LTG.bmp
new file mode 100755
index 000000000..116787a63
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/LTG.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MAS.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MAS.bmp
new file mode 100755
index 000000000..e889cfa35
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MAS.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MEP.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MEP.bmp
new file mode 100755
index 000000000..697f23db8
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MEP.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MGL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MGL.bmp
new file mode 100755
index 000000000..27f10f56f
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MGL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MPG.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MPG.bmp
new file mode 100755
index 000000000..757c5dea8
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MPG.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MPH.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MPH.bmp
new file mode 100755
index 000000000..349b9b7da
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MPH.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MSR.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MSR.bmp
new file mode 100755
index 000000000..46d8c0b4b
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MSR.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MXA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MXA.bmp
new file mode 100755
index 000000000..8cc27a8d2
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/MXA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NGE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NGE.bmp
new file mode 100755
index 000000000..79cc803d7
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NGE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NMB.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NMB.bmp
new file mode 100755
index 000000000..4734c6c2d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NMB.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NRL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NRL.bmp
new file mode 100755
index 000000000..d7d742003
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NRL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NWA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NWA.bmp
new file mode 100755
index 000000000..acd6f8714
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/NWA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/OAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/OAL.bmp
new file mode 100755
index 000000000..43f3726ba
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/OAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PAC.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PAC.bmp
new file mode 100755
index 000000000..59200a2bf
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PAC.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PAL.bmp
new file mode 100755
index 000000000..712e97660
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PGA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PGA.bmp
new file mode 100755
index 000000000..d12a0e6e4
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PGA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PIA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PIA.bmp
new file mode 100755
index 000000000..f1a97e6c6
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PIA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/POE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/POE.bmp
new file mode 100755
index 000000000..a4eb23457
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/POE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PWD.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PWD.bmp
new file mode 100755
index 000000000..769c8ec38
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/PWD.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/QFA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/QFA.bmp
new file mode 100755
index 000000000..3e06a8758
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/QFA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/QTR.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/QTR.bmp
new file mode 100755
index 000000000..c51fe3975
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/QTR.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ROU.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ROU.bmp
new file mode 100755
index 000000000..e387cdd91
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/ROU.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RSP.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RSP.bmp
new file mode 100755
index 000000000..4c5c7b910
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RSP.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RVF.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RVF.bmp
new file mode 100755
index 000000000..529565cd9
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RVF.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RYR.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RYR.bmp
new file mode 100755
index 000000000..b403339ea
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/RYR.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SAA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SAA.bmp
new file mode 100755
index 000000000..27815efba
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SAA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SAS.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SAS.bmp
new file mode 100755
index 000000000..bf2b141d9
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SAS.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SCX.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SCX.bmp
new file mode 100755
index 000000000..07da35aeb
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SCX.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SIA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SIA.bmp
new file mode 100755
index 000000000..5eb833ee6
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SIA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SKW.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SKW.bmp
new file mode 100755
index 000000000..bc40b0ff0
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SKW.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SLI.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SLI.bmp
new file mode 100755
index 000000000..c353b61c4
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SLI.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SLM.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SLM.bmp
new file mode 100755
index 000000000..c631f934b
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SLM.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SVA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SVA.bmp
new file mode 100755
index 000000000..e0f4faf30
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SVA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWA.bmp
new file mode 100755
index 000000000..8edcef60c
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWG.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWG.bmp
new file mode 100755
index 000000000..666050074
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWG.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWR.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWR.bmp
new file mode 100755
index 000000000..ca31b549b
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/SWR.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAI.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAI.bmp
new file mode 100755
index 000000000..afa8a06bb
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAI.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAM.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAM.bmp
new file mode 100755
index 000000000..dc04efcdf
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAM.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAP.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAP.bmp
new file mode 100755
index 000000000..d12a0e6e4
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TAP.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/THA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/THA.bmp
new file mode 100755
index 000000000..acd9b75b7
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/THA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/THY.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/THY.bmp
new file mode 100755
index 000000000..80236661f
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/THY.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TRS.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TRS.bmp
new file mode 100755
index 000000000..8f7ba05f4
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/TRS.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/UAE.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/UAE.bmp
new file mode 100755
index 000000000..a56839a6e
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/UAE.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/UAL.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/UAL.bmp
new file mode 100755
index 000000000..d2c1f2786
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/UAL.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/USA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/USA.bmp
new file mode 100755
index 000000000..5bde51f73
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/USA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VIR.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VIR.bmp
new file mode 100755
index 000000000..8ef276786
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VIR.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VOZ.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VOZ.bmp
new file mode 100755
index 000000000..42ee847c0
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VOZ.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VRD.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VRD.bmp
new file mode 100755
index 000000000..d2c47077d
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VRD.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VRG.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VRG.bmp
new file mode 100755
index 000000000..570c3b872
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/VRG.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/WJA.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/WJA.bmp
new file mode 100755
index 000000000..7ac164d56
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/WJA.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/placeholder.bmp b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/placeholder.bmp
new file mode 100755
index 000000000..752561af6
Binary files /dev/null and b/MatrixPortal_S3_Flight_Proximity_Tracker/airline_logos/placeholder.bmp differ
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/code.py b/MatrixPortal_S3_Flight_Proximity_Tracker/code.py
new file mode 100755
index 000000000..c282173a0
--- /dev/null
+++ b/MatrixPortal_S3_Flight_Proximity_Tracker/code.py
@@ -0,0 +1,332 @@
+# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+import os
+import ssl
+import time
+import board
+import wifi
+import terminalio
+import socketpool
+import adafruit_requests
+import displayio
+import rgbmatrix
+import framebufferio
+import adafruit_display_text.label
+from displayio import OnDiskBitmap, TileGrid, Group
+
+# Release any existing displays
+displayio.release_displays()
+
+# --- Matrix Properties ---
+DISPLAY_WIDTH = 128
+DISPLAY_HEIGHT = 64
+
+# 432 Minutes - 7.2 Hours
+NETWORK_CALL_INTERVAL = 25920
+
+# --- Icon Properties ---
+ICON_WIDTH = 26 # Width of the icons
+ICON_HEIGHT = 26 # Height of the icons
+# Calculate the gap between icons
+gap_between_icons = 5
+
+GAP_BETWEEN_ICONS = 15 # Gap between the icons
+NUMBER_OF_ICONS = 2 # Number of icons to display
+PLACEHOLDER_ICON_PATH = "/airline_logos/placeholder.bmp"
+
+# --- Text Properties ---
+TEXT_START_X = ICON_WIDTH + 4
+TEXT_RESET_X = 170
+FONT = terminalio.FONT
+TEXT_COLOR = 0x22FF00 # e.g., Green
+
+# Initialize the main display group
+main_group = Group()
+
+# Initialize the icon group (this remains static on the display)
+static_icon_group = Group()
+
+# Sample Bounding Box
+bounding_box = {
+ "min_latitude": 40.633013, # Southernmost latitude
+ "max_latitude": 44.953469, # Northernmost latitude
+ "min_longitude": -111.045360, # Westernmost longitude
+ "max_longitude": -104.046570, # Easternmost longitude
+}
+
+# --- Matrix setup ---
+BIT_DEPTH = 2
+matrix = rgbmatrix.RGBMatrix(
+ width=DISPLAY_WIDTH,
+ height=DISPLAY_HEIGHT,
+ bit_depth=BIT_DEPTH,
+ rgb_pins=[
+ board.MTX_B1,
+ board.MTX_G1,
+ board.MTX_R1,
+ board.MTX_B2,
+ board.MTX_G2,
+ board.MTX_R2,
+ ],
+ addr_pins=[
+ board.MTX_ADDRA,
+ board.MTX_ADDRB,
+ board.MTX_ADDRC,
+ board.MTX_ADDRD,
+ board.MTX_ADDRE,
+ ],
+ clock_pin=board.MTX_CLK,
+ latch_pin=board.MTX_LAT,
+ output_enable_pin=board.MTX_OE,
+ tile=1,
+ serpentine=True,
+ doublebuffer=True,
+)
+
+display = framebufferio.FramebufferDisplay(matrix, auto_refresh=True)
+
+# --- Wi-Fi setup ---
+wifi.radio.connect(
+ os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD")
+)
+print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
+
+# --- Networking setup ---
+context = ssl.create_default_context()
+
+with open("/ssl.com-root.pem", "rb") as certfile:
+ context.load_verify_locations(cadata=certfile.read())
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, context)
+
+# --- Icon Positioning ---
+total_icons_height = (ICON_HEIGHT * NUMBER_OF_ICONS) + (
+ GAP_BETWEEN_ICONS * (NUMBER_OF_ICONS - 1)
+)
+
+# Function to scroll objects
+def scroll_text_labels(text_labels):
+ for label in text_labels:
+ label.x -= 1 # Move label left.
+ if label.x < -300: # If label has moved off screen.
+ label.x = TEXT_RESET_X
+
+
+def construct_query_string(params):
+ return "&".join(f"{key}={value}" for key, value in params.items())
+
+def fetch_flight_data():
+ print("Running fetch_flight_data")
+
+ base_url = "https://aeroapi.flightaware.com/aeroapi/flights/search"
+ query_prefix = "-latlong+\""
+ query_suffix = (
+ str(bounding_box['min_latitude']) + "+" +
+ str(bounding_box['min_longitude']) + "+" +
+ str(bounding_box['max_latitude']) + "+" +
+ str(bounding_box['max_longitude']) + "\"")
+ query = query_prefix + query_suffix
+
+ params = {
+ "query": query,
+ "max_pages": "1",}
+
+
+ headers = {
+ "Accept": "application/json; charset=UTF-8",
+ "x-apikey": os.getenv("AERO_API_KEY"), # Replace with your actual API key
+ }
+ full_url = f"{base_url}?{construct_query_string(params)}"
+ response = requests.get(full_url, headers=headers)
+
+ if response.status_code == 200:
+ json_response = response.json() # Parse JSON only once
+ return process_flight_data(json_response) # Process flights and return
+ else:
+ print(f"Request failed with status code {response.status_code}")
+ if response.content:
+ print(f"Response content: {response.content}")
+ return []
+
+def process_flight_data(json_data):
+ # Initialize an empty list to hold processed flight data
+ processed_flights = []
+
+ for flight in json_data.get("flights", []):
+ # Use 'get' with default values to avoid KeyError
+ flight_info = {
+ "ident": flight.get("ident", "N/A"),
+ "ident_icao": flight.get("ident_icao", "N/A"),
+ "fa_flight_id": flight.get("fa_flight_id", "N/A"),
+ "actual_off": flight.get("actual_off", "N/A"),
+ "actual_on": flight.get("actual_on", "N/A"),
+ "origin_code": flight.get("origin", {}).get("code", "UnknownA"),
+ "origin_city": flight.get("origin", {}).get("city", "UnknownB"),
+ "origin_country": flight.get("origin", {}).get("country", "UnknownC"),
+ "destination_code": flight.get("destination", {}).get("code", "UnknownD")
+ if flight.get("destination")
+ else "UnknownE",
+ "destination_city": flight.get("destination", {}).get("city", "UnknownH")
+ if flight.get("destination")
+ else "Unknown Destination",
+ "destination_country": flight.get("destination", {}).get(
+ "country", "UnknownZ"
+ )
+ if flight.get("destination")
+ else "UnknownG",
+ "altitude": flight.get("last_position", {}).get("altitude", "N/A"),
+ "groundspeed": flight.get("last_position", {}).get("groundspeed", "N/A"),
+ "heading": flight.get("last_position", {}).get("heading", "N/A"),
+ "latitude": flight.get("last_position", {}).get("latitude", "N/A"),
+ "longitude": flight.get("last_position", {}).get("longitude", "N/A"),
+ "timestamp": flight.get("last_position", {}).get("timestamp", "N/A"),
+ "aircraft_type": flight.get("aircraft_type", "N/A"),
+ }
+ # Only add flight_info if the 'ident_icao' is present and not 'N/A'
+ if flight_info["ident_icao"] != "N/A":
+ processed_flights.append(flight_info)
+
+ return processed_flights
+
+
+def create_text_labels(flight_data, Ypositions):
+ local_text_labels = []
+ for i, flight in enumerate(flight_data):
+ y_position = Ypositions[i] + GAP_BETWEEN_ICONS
+
+ # Since 'country' is not present, use 'origin_city' and 'destination_city' instead
+ origin_city = flight.get("origin_city", "Unknown City")
+ destination_city = flight.get("destination_city", "Unknown City")
+
+ # Construct the display text for each flight
+ single_line_text = (
+ f"{flight['ident']} | From: {origin_city} To: {destination_city}"
+ )
+
+ text_label = adafruit_display_text.label.Label(
+ FONT, color=TEXT_COLOR, x=TEXT_START_X, y=y_position, text=single_line_text
+ )
+ local_text_labels.append(text_label)
+ return local_text_labels
+
+
+
+def create_icon_tilegrid(ident):
+ airline_code = ident[:3].upper() # Use the first three characters of 'ident'
+ icon_path = f"/airline_logos/{airline_code}.bmp"
+
+ try:
+ file = open(icon_path, "rb")
+ icon_bitmap = OnDiskBitmap(file)
+ except OSError:
+ print(f"Icon for {airline_code} not found. Using placeholder.")
+ file = open(PLACEHOLDER_ICON_PATH, "rb")
+ icon_bitmap = OnDiskBitmap(file)
+
+ icon_tilegrid = TileGrid(icon_bitmap, pixel_shader=icon_bitmap.pixel_shader, x=0, y=0)
+ return icon_tilegrid
+
+
+def update_display_with_flight_data(flight_data, icon_group, display_group):
+ # Clear previous display items
+ while len(display_group):
+ display_group.pop()
+
+ # Clear previous icon items
+ while len(icon_group):
+ icon_group.pop()
+
+ # Limit flight data to the adjusted number of icons
+ flight_data = flight_data[:NUMBER_OF_ICONS]
+
+ # Calculate the y position for each icon
+ y_positions = [
+ gap_between_icons + (ICON_HEIGHT + gap_between_icons) * i
+ for i in range(NUMBER_OF_ICONS)
+ ]
+
+ # Create text labels for up to NUMBER_OF_ICONS flights
+ text_labels = create_text_labels(flight_data, y_positions)
+
+ # Add text labels to the display group first so they are behind icons
+ for label in text_labels:
+ display_group.append(label)
+
+ # Load icons and create icon tilegrids for up to NUMBER_OF_ICONS flights
+ for i, flight in enumerate(flight_data):
+ # Calculate the y position for each icon
+ y_position = y_positions[i]
+
+ # Load the icon dynamically
+ icon_tilegrid = create_icon_tilegrid(flight["ident"])
+ if icon_tilegrid:
+ icon_tilegrid.y = y_position
+ icon_group.append(icon_tilegrid)
+
+ # Add the icon group to the main display group after text labels
+ display_group.append(icon_group)
+
+ # Show the updated group on the display
+ display.show(display_group)
+ display.refresh()
+ return text_labels
+
+
+
+def display_no_flights():
+ # Clear the previous group content
+ while len(main_group):
+ main_group.pop()
+
+ # Create a label for "Looking for flights..."
+ looking_label = adafruit_display_text.label.Label(
+ FONT, color=TEXT_COLOR, text="LOOKING FOR FLIGHTS", x=8, y=DISPLAY_HEIGHT // 2
+ )
+ main_group.append(looking_label)
+
+ # Update the display with the new group
+ display.show(main_group)
+ display.refresh()
+
+
+display_no_flights()
+
+flight_json_response = fetch_flight_data()
+
+# Check if we received any flight data
+if flight_json_response:
+ flight_data_labels = update_display_with_flight_data(
+ flight_json_response, static_icon_group, main_group
+ )
+
+last_network_call_time = time.monotonic()
+
+
+while True:
+ # Scroll the text labels
+ scroll_text_labels(flight_data_labels)
+ # Refresh the display
+ display.refresh(minimum_frames_per_second=0)
+ current_time = time.monotonic()
+
+ # Check if NETWORK_CALL_INTERVAL seconds have passed
+ if (current_time - last_network_call_time) >= NETWORK_CALL_INTERVAL:
+ print("Fetching new flight data...")
+ new_flight_data = fetch_flight_data()
+
+ if new_flight_data:
+ # If flight data is found, update the display with it
+ new_text_labels = update_display_with_flight_data(
+ new_flight_data, static_icon_group, main_group
+ )
+ else:
+ # If no flight data is found, display the "Looking for flights..." message
+ display_no_flights()
+
+ # Reset the last network call time
+ last_network_call_time = current_time
+
+ # Sleep for a short period to prevent maxing out your CPU
+ time.sleep(1) # Sleep for 1 second
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/get_airline_logos.py b/MatrixPortal_S3_Flight_Proximity_Tracker/get_airline_logos.py
new file mode 100644
index 000000000..5bf0fa25b
--- /dev/null
+++ b/MatrixPortal_S3_Flight_Proximity_Tracker/get_airline_logos.py
@@ -0,0 +1,174 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# Written by Liz Clark (Adafruit Industries) with OpenAI ChatGPT v4 Aug 3rd, 2023 build
+# https://help.openai.com/en/articles/6825453-chatgpt-release-notes
+
+# https://chat.openai.com/share/2fabba2b-3f17-4ab6-a4d9-58206a3b9916
+
+# process() function originally written by Phil B. for Adafruit Industries
+# https://raw.githubusercontent.com/adafruit/Adafruit_Media_Converters/master/protomatter_dither.py
+
+# Based on Airline-Logos Scraper by Cal Stephens, 2017 MIT License
+# https://github.com/calda/Airline-Logos
+
+import os
+import math
+import requests
+from PIL import Image
+
+# directory to match CircuitPython code folder names
+bitmap_directories = "airline_logos"
+
+img_width = 32
+img_height = 32
+
+chars = ["A", "B", "C", "D", "E",
+ "F", "G", "H", "I", "J", "K", "L",
+ "M", "N", "O", "P", "Q", "R", "S",
+ "T", "U", "V", "W", "X", "Y", "Z",
+ "0", "1", "2", "3", "4", "5", "6",
+ "7", "8", "9"]
+# pylint: disable=inconsistent-return-statements
+def convert_bytes(num):
+ """
+ this function will convert bytes to MB.... GB... etc
+ """
+ for _ in ['bytes', 'KB', 'MB', 'GB', 'TB']:
+ if num < 1024.0:
+ return f"{num:.1f}"
+ num /= 1024.0
+
+def file_size(file_path):
+ """
+ this function will return the file size
+ """
+ if os.path.isfile(file_path):
+ file_info = os.stat(file_path)
+ print(file_info.st_size)
+ return file_info.st_size
+
+# Constants and function for image processing
+GAMMA = 2.6
+
+PASSTHROUGH = ((0, 0, 0),
+ (255, 0, 0),
+ (255, 255, 0),
+ (0, 255, 0),
+ (0, 255, 255),
+ (0, 0, 255),
+ (255, 0, 255),
+ (255, 255, 255))
+
+def process(filename, output_8_bit=True, passthrough=PASSTHROUGH):
+ """Given a color image filename, load image and apply gamma correction
+ and error-diffusion dithering while quantizing to 565 color
+ resolution. If output_8_bit is True, image is reduced to 8-bit
+ paletted mode after quantization/dithering. If passthrough (a list
+ of 3-tuple RGB values) is provided, dithering won't be applied to
+ colors in the provided list, they'll be quantized only (allows areas
+ of the image to remain clean and dither-free).
+ """
+ img = Image.open(filename).convert('RGB')
+ err_next_pixel = (0, 0, 0)
+ err_next_row = [(0, 0, 0) for _ in range(img.size[0])]
+ for row in range(img.size[1]):
+ for column in range(img.size[0]):
+ pixel = img.getpixel((column, row))
+ want = (math.pow(pixel[0] / 255.0, GAMMA) * 31.0,
+ math.pow(pixel[1] / 255.0, GAMMA) * 63.0,
+ math.pow(pixel[2] / 255.0, GAMMA) * 31.0)
+ if pixel in passthrough:
+ got = (pixel[0] >> 3,
+ pixel[1] >> 2,
+ pixel[2] >> 3)
+ else:
+ got = (min(max(int(err_next_pixel[0] * 0.5 +
+ err_next_row[column][0] * 0.25 +
+ want[0] + 0.5), 0), 31),
+ min(max(int(err_next_pixel[1] * 0.5 +
+ err_next_row[column][1] * 0.25 +
+ want[1] + 0.5), 0), 63),
+ min(max(int(err_next_pixel[2] * 0.5 +
+ err_next_row[column][2] * 0.25 +
+ want[2] + 0.5), 0), 31))
+ err_next_pixel = (want[0] - got[0],
+ want[1] - got[1],
+ want[2] - got[2])
+ err_next_row[column] = err_next_pixel
+ rgb565 = ((got[0] << 3) | (got[0] >> 2),
+ (got[1] << 2) | (got[1] >> 4),
+ (got[2] << 3) | (got[2] >> 2))
+ img.putpixel((column, row), rgb565)
+
+ if output_8_bit:
+ img = img.convert('P', palette=Image.ADAPTIVE)
+
+ img.save(filename.split('.')[0] + '.bmp')
+
+# Create a base directory to store the logos if it doesn't exist
+base_dir = 'airline_logos'
+if not os.path.exists(base_dir):
+ os.makedirs(base_dir)
+
+# Loop through each combo of characters to find all of the airlines
+# this takes a while..
+for f in range(len(chars)):
+ for s in range(len(chars)):
+ # Set the URL for IATA
+ # pylint: disable=line-too-long
+ url = f"https://content.r9cdn.net/rimg/provider-logos/airlines/v/{chars[f]}{chars[s]}.png?crop=false&width=300&height=300"
+ print(f"Downloading logo for {chars[f]}{chars[s]} from IATA...")
+
+ img_path_png = os.path.join(base_dir, f"{chars[f]}{chars[s]}.png")
+ response = requests.get(url, stream=True, timeout=60)
+ try:
+ with open(img_path_png, 'wb') as file:
+ for chunk in response.iter_content(chunk_size=1024):
+ file.write(chunk)
+
+ z = os.stat(img_path_png)
+ print(z.st_size)
+ if z.st_size <= 2506:
+ print("deleting empty file")
+ os.remove(img_path_png)
+ else:
+ with Image.open(img_path_png) as the_img:
+ img_resized = the_img.resize((img_width, img_height))
+ img_resized.save(img_path_png)
+ process(img_path_png)
+
+ # Delete the original .png file
+ os.remove(img_path_png)
+ except Exception: # pylint: disable=broad-except
+ print("file is missing, moving on..")
+ for t in range(len(chars)):
+ # Set the URL for ICAO
+ # pylint: disable=line-too-long
+ url_1 = f"https://flightaware.com/images/airline_logos/90p/{chars[f]}{chars[s]}{chars[t]}.png"
+
+ print(f"Downloading logo for {chars[f]}{chars[s]}{chars[t]} from ICAO...")
+
+ img_path_png_0 = os.path.join(base_dir, f"{chars[f]}{chars[s]}{chars[t]}.png")
+ response_1 = requests.get(url_1, stream=True, timeout=60)
+ try:
+ with open(img_path_png_0, 'wb') as file:
+ for chunk in response_1.iter_content(chunk_size=1024):
+ file.write(chunk)
+
+ z = os.stat(img_path_png_0)
+ print(z.st_size)
+ if z.st_size <= 2506:
+ print("deleting empty file")
+ os.remove(img_path_png_0)
+ else:
+ with Image.open(img_path_png_0) as the_img:
+ img_resized = the_img.resize((img_width, img_height))
+ img_resized.save(img_path_png_0)
+ process(img_path_png_0)
+
+ # Delete the original .png file
+ os.remove(img_path_png_0)
+ except Exception: # pylint: disable=broad-except
+ print("file is missing, moving on..")
diff --git a/MatrixPortal_S3_Flight_Proximity_Tracker/ssl.com-root.pem b/MatrixPortal_S3_Flight_Proximity_Tracker/ssl.com-root.pem
new file mode 100644
index 000000000..77ec988e1
--- /dev/null
+++ b/MatrixPortal_S3_Flight_Proximity_Tracker/ssl.com-root.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE
+BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK
+DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz
+OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv
+dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv
+bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN
+AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R
+xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX
+qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC
+C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3
+6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh
+/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF
+YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E
+JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc
+US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8
+ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm
++Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi
+M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV
+HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G
+A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV
+cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc
+Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs
+PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/
+q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0
+cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr
+a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I
+H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y
+K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu
+nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf
+oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY
+Ic2wBlX7Jz9TkHCpBB5XJ7k=
+-----END CERTIFICATE-----
diff --git a/Matrix_7-Segment_LED_Backpack_Raspberry_Pi/sevensegment_test/code.py b/Matrix_7-Segment_LED_Backpack_Raspberry_Pi/sevensegment_test/code.py
index 324191a5d..39791d258 100644
--- a/Matrix_7-Segment_LED_Backpack_Raspberry_Pi/sevensegment_test/code.py
+++ b/Matrix_7-Segment_LED_Backpack_Raspberry_Pi/sevensegment_test/code.py
@@ -31,11 +31,11 @@
display[3] = 'B'
time.sleep(1)
-numbers = [0.0, 1.0, -1.0, 0.55, -0.55, 10.23, -10.2, 100.5, -100.5]
+numbers = [0.0, 1.0, 0.55, 10.23, 100.5]
-# print negative and positive floating point numbers
+# print floating point numbers
for i in numbers:
- display.print(i)
+ display.print(str(i))
time.sleep(0.5)
# print hex values, enable colon
diff --git a/Matrix_Bluetooth_Controlled_LED_Sign/code.py b/Matrix_Bluetooth_Controlled_LED_Sign/code.py
new file mode 100755
index 000000000..a0ac8b2cd
--- /dev/null
+++ b/Matrix_Bluetooth_Controlled_LED_Sign/code.py
@@ -0,0 +1,90 @@
+# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+
+import time
+import board
+import displayio
+import framebufferio
+import rgbmatrix
+import terminalio
+from adafruit_display_text import label
+from adafruit_ble import BLERadio
+from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
+from adafruit_ble.services.nordic import UARTService
+
+SEND_RATE = 10 # how often in seconds to send text
+
+count = 0
+
+SCROLL_DELAY = 0.05 # delay between scrolls, in seconds
+
+ble = BLERadio()
+uart_server = UARTService()
+advertisement = ProvideServicesAdvertisement(uart_server)
+
+# Release any previously allocated displays
+displayio.release_displays()
+
+matrix = rgbmatrix.RGBMatrix(
+ width=64, height=32, bit_depth=1,
+ rgb_pins=[board.D6, board.A5, board.A1, board.A0, board.A4, board.D11],
+ addr_pins=[board.D10, board.D5, board.D13, board.D9],
+ clock_pin=board.D12, latch_pin=board.RX, output_enable_pin=board.TX,
+)
+display = framebufferio.FramebufferDisplay(matrix, auto_refresh=True)
+
+main_group = displayio.Group()
+
+def scroll(line):
+ line.x -= 1
+ line_width = line.bounding_box[2]
+ if line.x < -line_width:
+ line.x = display.width
+
+def update_display(text, color=0xFFFFFF):
+ """Update the display with the provided text and color."""
+ if len(main_group) > 0:
+ main_group.pop()
+ text_area = label.Label(terminalio.FONT, text=text, color=color)
+ text_area.x = display.width
+ text_area.y = 13
+ main_group.append(text_area)
+ display.show(main_group)
+
+while True:
+ print("WAITING...")
+ update_display("WAITING...")
+ ble.start_advertising(advertisement)
+
+ while not ble.connected:
+ scroll(main_group[0])
+ display.refresh(minimum_frames_per_second=0)
+ time.sleep(SCROLL_DELAY)
+
+ # Connected
+ ble.stop_advertising()
+ print("CONNECTED")
+ update_display("CONNECTED")
+
+ # Loop and read packets
+ last_send = time.monotonic()
+ while ble.connected:
+ if uart_server.in_waiting:
+ raw_bytes = uart_server.read(uart_server.in_waiting)
+ received_text = raw_bytes.decode().strip()
+ print("RX:", received_text)
+ update_display(received_text, color=0x26B7FF)
+
+ if time.monotonic() - last_send > SEND_RATE:
+ transmit_text = "COUNT = {}".format(count)
+ print("TX:", transmit_text)
+ uart_server.write((transmit_text + "\r\n").encode())
+ count += 1
+ last_send = time.monotonic()
+
+ scroll(main_group[0])
+ display.refresh(minimum_frames_per_second=0)
+ time.sleep(SCROLL_DELAY)
+
+ print("DISCONNECTED")
diff --git a/Matrix_On_Air/code.py b/Matrix_On_Air/code.py
index 3cbdb0f92..05657136d 100644
--- a/Matrix_On_Air/code.py
+++ b/Matrix_On_Air/code.py
@@ -142,7 +142,7 @@ def startup_text():
text_line2.x = 2
text_line2.color = color[2]
redraw_wings(0)
- display.show(group)
+ display.root_group = group
startup_text() # display the startup text
@@ -158,7 +158,7 @@ def update_text(state):
text_line2.color = color[1]
redraw_wings(1)
redraw_frame()
- display.show(group)
+ display.root_group = group
else: # else, text if "OFF" at startup
text_line1.text = "OFF"
text_line1.x = off_x
@@ -168,7 +168,7 @@ def update_text(state):
text_line2.color = color[3]
redraw_wings(3)
redraw_frame()
- display.show(group)
+ display.root_group = group
def get_status():
diff --git a/Matrix_Portal_CO2_Monitor/code.py b/Matrix_Portal_CO2_Monitor/code.py
index aae4dc10a..b003a8238 100755
--- a/Matrix_Portal_CO2_Monitor/code.py
+++ b/Matrix_Portal_CO2_Monitor/code.py
@@ -15,7 +15,9 @@
# ---------------------
# the sensor
-scd30 = adafruit_scd30.SCD30(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+scd30 = adafruit_scd30.SCD30(i2c)
# optional if known (pick one)
# scd30.ambient_pressure = 1013.25
@@ -73,7 +75,7 @@
splash.append(co2_value)
# and show em
-display.show(splash)
+display.root_group = splash
def update_display(value):
diff --git a/Matrix_Portal_Eyes/code.py b/Matrix_Portal_Eyes/code.py
index 1138e5037..55cfb5b97 100755
--- a/Matrix_Portal_Eyes/code.py
+++ b/Matrix_Portal_Eyes/code.py
@@ -68,7 +68,7 @@ def __init__(self, filename, transparent=None):
SPRITES.append(Sprite(EYE_DATA['lower_lid_image'], EYE_DATA['transparent']))
SPRITES.append(Sprite(EYE_DATA['upper_lid_image'], EYE_DATA['transparent']))
SPRITES.append(Sprite(EYE_DATA['stencil_image'], EYE_DATA['transparent']))
-DISPLAY.show(SPRITES)
+DISPLAY.root_group = SPRITES
EYE_CENTER = ((EYE_DATA['eye_move_min'][0] + # Pixel coords of eye
EYE_DATA['eye_move_max'][0]) / 2, # image when centered
diff --git a/Matrix_Portal_Flow_Viewer/flow/code.py b/Matrix_Portal_Flow_Viewer/flow/code.py
index 21f4ad3b4..4c9b5ace2 100755
--- a/Matrix_Portal_Flow_Viewer/flow/code.py
+++ b/Matrix_Portal_Flow_Viewer/flow/code.py
@@ -44,7 +44,7 @@
matrix = Matrix(width=MATRIX_WIDTH, height=MATRIX_HEIGHT, bit_depth=6)
display = matrix.display
group = displayio.Group()
-display.show(group)
+display.root_group = group
bitmap = displayio.Bitmap(display.width, display.height, 4)
diff --git a/Matrix_Portal_Flow_Viewer/flow_viewer/code.py b/Matrix_Portal_Flow_Viewer/flow_viewer/code.py
index 63d6c109f..209ca11bb 100755
--- a/Matrix_Portal_Flow_Viewer/flow_viewer/code.py
+++ b/Matrix_Portal_Flow_Viewer/flow_viewer/code.py
@@ -55,7 +55,7 @@
matrix = Matrix(width=MATRIX_WIDTH, height=MATRIX_HEIGHT, bit_depth=6)
display = matrix.display
group = displayio.Group()
-display.show(group)
+display.root_group = group
bitmap = displayio.Bitmap(display.width, display.height, 4)
diff --git a/Matrix_Portal_Handbag/code.py b/Matrix_Portal_Handbag/code.py
index da9f5678d..8e6685406 100644
--- a/Matrix_Portal_Handbag/code.py
+++ b/Matrix_Portal_Handbag/code.py
@@ -101,7 +101,7 @@ def advance():
MODE = 1
elif time.monotonic() > last_movement + SLEEP_DURATION:
MODE = 0
- display.show(empty_group)
+ display.root_group = empty_group
if MODE == 1:
if auto_advance and time.monotonic() > LAST_ADVANCE + IMAGE_DURATION[i]:
advance()
diff --git a/Matrix_Portal_Learn_Stats/code.py b/Matrix_Portal_Learn_Stats/code.py
index 882051678..d8f694f8c 100755
--- a/Matrix_Portal_Learn_Stats/code.py
+++ b/Matrix_Portal_Learn_Stats/code.py
@@ -38,7 +38,7 @@
text_font=FONT,
text_position=(
(matrixportal.graphics.display.width // 12) - 1,
- (matrixportal.graphics.display.height // 2) - 4,
+ (matrixportal.graphics.display.height // 2) - 8,
),
text_color=0x800000,
)
diff --git a/Matrix_Portal_M4_Boxing_Interval_Timer/code.py b/Matrix_Portal_M4_Boxing_Interval_Timer/code.py
new file mode 100755
index 000000000..81e94b5d0
--- /dev/null
+++ b/Matrix_Portal_M4_Boxing_Interval_Timer/code.py
@@ -0,0 +1,91 @@
+# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import displayio
+import terminalio
+from adafruit_display_text.label import Label
+from adafruit_bitmap_font import bitmap_font
+from adafruit_matrixportal.matrix import Matrix
+
+# set the timer length
+TIMER_LENGTH = 180 # 3 minutes
+
+BLINK = True
+DEBUG = False
+
+# --- Display setup ---
+matrix = Matrix()
+display = matrix.display
+
+# --- Drawing setup ---
+group = displayio.Group() # Create a Group
+bitmap = displayio.Bitmap(64, 32, 2) # Create a bitmap object,width, height, bit depth
+color = displayio.Palette(4) # Create a color palette
+color[0] = 0x000000 # black background
+color[1] = 0xFF0000 # red
+color[2] = 0xFF8C00 # yellow
+color[3] = 0x3DEB34 # green
+
+# Create a TileGrid using the Bitmap and Palette
+tile_grid = displayio.TileGrid(bitmap, pixel_shader=color)
+group.append(tile_grid) # Add the TileGrid to the Group
+display.root_group = group
+
+if not DEBUG:
+ font = bitmap_font.load_font("/IBMPlexMono-Medium-24_jep.bdf")
+else:
+ font = terminalio.FONT
+
+clock_label = Label(font)
+
+def update_time(remaining_time):
+ now = time.localtime() # Get the time values we need
+
+ # calculate remaining time in seconds
+ seconds = remaining_time % 60
+ minutes = remaining_time // 60
+
+ if BLINK:
+ colon = ":" if now[5] % 2 else " "
+ else:
+ colon = ":"
+
+ clock_label.text = "{minutes:02d}{colon}{seconds:02d}".format(
+ minutes=minutes, seconds=seconds, colon=colon
+ )
+
+ if remaining_time < 60:
+ clock_label.color = color[1]
+ elif remaining_time < 90:
+ clock_label.color = color[2]
+ elif remaining_time > 90:
+ clock_label.color = color[3]
+
+ bbx, bby, bbwidth, bbh = clock_label.bounding_box
+ # Center the label
+ clock_label.x = round(display.width / 2 - bbwidth / 2)
+ clock_label.y = display.height // 2
+ if DEBUG:
+ print("Label bounding box: {},{},{},{}".format(bbx, bby, bbwidth, bbh))
+ print("Label x: {} y: {}".format(clock_label.x, clock_label.y))
+
+ # decrement remaining time
+ remaining_time -= 1
+ if remaining_time < 0:
+ remaining_time = TIMER_LENGTH
+
+ return remaining_time
+
+def main():
+ remaining_time = TIMER_LENGTH
+ update_time(remaining_time)
+ group.append(clock_label)
+
+ while True:
+ remaining_time = update_time(remaining_time)
+ time.sleep(1)
+
+if __name__ == "__main__":
+ main()
diff --git a/Matrix_Portal_Moon_Clock/code.py b/Matrix_Portal_Moon_Clock/code.py
index 11f9c6b99..415e98152 100755
--- a/Matrix_Portal_Moon_Clock/code.py
+++ b/Matrix_Portal_Moon_Clock/code.py
@@ -4,7 +4,8 @@
"""
MOON PHASE CLOCK for Adafruit Matrix Portal: displays current time, lunar
-phase and time of next moonrise or moonset. Requires WiFi internet access.
+phase and time of next moonrise or moonset. Requires WiFi internet access
+and Adafruit IO user account (basic account is free, just needs registration).
Written by Phil 'PaintYourDragon' Burgess for Adafruit Industries.
MIT license, all text above must be included in any redistribution.
@@ -42,57 +43,47 @@
MONTH_DAY = True # If set, use MM/DD vs DD/MM (e.g. 31/12 vs 12/31)
BITPLANES = 6 # Ideally 6, but can set lower if RAM is tight
+# Moon API requres valid User-Agent header. Only maintainer should edit this.
+HEADERS = { "User-Agent" : "AdafruitMoonClock/1.1 support@adafruit.com" }
# SOME UTILITY FUNCTIONS AND CLASSES ---------------------------------------
-def parse_time(timestring, is_dst=-1):
- """ Given a string of the format YYYY-MM-DDTHH:MM:SS.SS-HH:MM (and
- optionally a DST flag), convert to and return an equivalent
- time.struct_time (strptime() isn't available here). Calling function
- can use time.mktime() on result if epoch seconds is needed instead.
- Time string is assumed local time; UTC offset is ignored. If seconds
- value includes a decimal fraction it's ignored.
+# Notes to Future Self on timekeeping: times are expressed in so many
+# formats throughout this code, a variable naming system is used: local
+# times (i.e. in clock's present geographic time zone) will have _local
+# in their variable name, while UTC times (aka Greenwich or Zulu time)
+# will have _utc. Types are also explicitly stated: strings (e.g.
+# "2023-07-20T08:37-07:00") will have _string in the variable name,
+# struct_time objects will have _struct, and integer "UNIX time" epoch
+# seconds will have _seconds. Conversions (offset is signed, e.g. -700):
+# Convert UTC to local time: add UTC offset; local = utc + offset
+# Convert local to UTC time: subtract UTC offset; utc = local - offset
+
+def update_system_time():
+ """ Update system clock date/time from Adafruit IO. Credentials and time
+ zone are in secrets.py. See http://worldtimeapi.org/api/timezone for
+ list of time zones. If missing, will attempt using IP geolocation.
+ Returns present local (not UTC) time as a struct_time and UTC offset
+ as string "sHH:MM". This may throw an exception on get_local_time(),
+ it is NOT CAUGHT HERE, should be handled in the calling code because
+ different behaviors may be needed for some situations (e.g.
+ reschedule later).
"""
- date_time = timestring.split('T') # Separate into date and time
- year_month_day = date_time[0].split('-') # Separate time into Y/M/D
- hour_minute_second = date_time[1].split('+')[0].split('-')[0].split(':')
- return time.struct_time((int(year_month_day[0]),
- int(year_month_day[1]),
- int(year_month_day[2]),
- int(hour_minute_second[0]),
- int(hour_minute_second[1]),
- int(hour_minute_second[2].split('.')[0]),
- -1, -1, is_dst))
-
-
-def update_time(timezone=None):
- """ Update system date/time from WorldTimeAPI public server;
- no account required. Pass in time zone string
- (http://worldtimeapi.org/api/timezone for list)
- or None to use IP geolocation. Returns current local time as a
- time.struct_time and UTC offset as string. This may throw an
- exception on fetch_data() - it is NOT CAUGHT HERE, should be
- handled in the calling code because different behaviors may be
- needed in different situations (e.g. reschedule for later).
- """
- if timezone: # Use timezone api
- time_url = 'http://worldtimeapi.org/api/timezone/' + timezone
- else: # Use IP geolocation
- time_url = 'http://worldtimeapi.org/api/ip'
-
- time_data = NETWORK.fetch_data(time_url,
- json_path=[['datetime'], ['dst'],
- ['utc_offset']])
- time_struct = parse_time(time_data[0], time_data[1])
- RTC().datetime = time_struct
- return time_struct, time_data[2]
+ local_time_string = NETWORK.get_local_time() # Sets RTC() time, but also
+ elements = local_time_string.split(" ") # returns server response
+ utc_offset = int(elements[-2]) # Format shHMM, e.g. -700 = -7 hr, 0 min
+ # Pad UTC format shHMM to sHH:MM as needed for moon API 3.0
+ utc_offset_string = "{:+03d}:{:02d}".format(utc_offset // 100, # Hours
+ abs(utc_offset) % 100) # Mins
+ return RTC().datetime, utc_offset_string
def hh_mm(time_struct):
- """ Given a time.struct_time, return a string as H:MM or HH:MM, either
- 12- or 24-hour style depending on global TWELVE_HOUR setting.
- This is ONLY for 'clock time,' NOT for countdown time, which is
- handled separately in the one spot where it's needed.
+ """ Used for clock display elements, not for delta-time calculations.
+ Given a struct_time, return a string as H:MM or HH:MM, either 12-
+ or 24-hour style depending on global TWELVE_HOUR setting. This is
+ ONLY for 'clock time,' NOT for countdown time, which is handled
+ separately in the one spot where it's needed.
"""
if TWELVE_HOUR:
if time_struct.tm_hour > 12:
@@ -106,67 +97,98 @@ def hh_mm(time_struct):
return hour_string + ':' + '{0:0>2}'.format(time_struct.tm_min)
+def parse_time_to_utc_seconds(time_local_string):
+ """ Given a string of YYYY-MM-DDTHH:MMsHH:MM or YYYY-MM-DDTHH:MM:SSZ
+ return equivalent UTC epoch seconds.
+ """
+ # This could be UTC or local time, don't know yet, so no tag in var name
+ date_time = time_local_string.split('T') # Separate into date and time
+ date_str = date_time[0].split('-') # Separate date into Y/M/D
+ time_str = date_time[1]
+ # Moon API always puts 00 seconds for interval, while rise/set times
+ # include no seconds value. Thus, only first two values are referenced:
+ hour = int(time_str[0:2]) # HH:MM as encoded in string,
+ minute = int(time_str[3:5]) # still could be UTC or local...
+ if time_str[-1] != 'Z': # If not "Zulu time" (UTC), is local, so:
+ hour -= int(time_str[-6:-3]) # convert local to UTC
+ minute -= int(time_str[-2:])
+ return time.mktime(time.struct_time((int(date_str[0]),
+ int(date_str[1]),
+ int(date_str[2]),
+ hour,
+ minute,
+ 0, -1, -1, False)))
+
+
# pylint: disable=too-few-public-methods
class MoonData():
- """ Class holding lunar data for a given day (00:00:00 to 23:59:59).
- App uses two of these -- one for the current day, and one for the
- following day -- then some interpolations and such can be made.
- Elements include:
- age : Moon phase 'age' at midnight (start of period)
- expressed from 0.0 (new moon) through 0.5 (full moon)
- to 1.0 (next new moon).
- midnight : Epoch time in seconds @ midnight (start of period).
- rise : Epoch time of moon rise within this 24-hour period.
- set : Epoch time of moon set within this 24-hour period.
+ """ Class holding lunar data for a given 24-hour period. App uses two
+ of these -- one for the current day, and one for the following day,
+ then some interpolations and such can be made. Elements include:
+ age : Moon phase 'age' at start of period, expressed
+ from 0.0 (new moon) through 0.5 (full moon) to
+ 1.0 (next new moon).
+ start_utc_seconds : Epoch time at start of period, UTC
+ end_utc_seconds : Epoch time at end of period, "
+ rise_utc_seconds : Epoch time of moon rise within this 24-hour period
+ set_utc_seconds : Epoch time of moon set within this 24-hour period
"""
- def __init__(self, datetime, hours_ahead, utc_offset):
- """ Initialize MoonData object elements (see above) from a
- time.struct_time, hours to skip ahead (typically 0 or 24),
- and a UTC offset (as a string) and a query to the MET Norway
- Sunrise API (also provides lunar data), documented at:
- https://api.met.no/weatherapi/sunrise/2.0/documentation
+ def __init__(self, datetime_local_struct, days_ahead, utc_offset_string):
+ """ Initialize MoonData elements (see above) given a struct_time,
+ days to skip ahead (typically 0 or 1), and a UTC offset (as a
+ string) and a query to the MET Norway Sunrise API (also provides
+ lunar data), documented at:
+ https://docs.api.met.no/doc/sunrise/celestial.html
"""
- if hours_ahead:
- # Can't change attribute in datetime struct, need to create
- # a new one which will roll the date ahead as needed. Convert
- # to epoch seconds and back for the offset to work
- datetime = time.localtime(time.mktime(time.struct_time((
- datetime.tm_year,
- datetime.tm_mon,
- datetime.tm_mday,
- datetime.tm_hour + hours_ahead,
- datetime.tm_min,
- datetime.tm_sec,
- -1, -1, -1))))
- # strftime() not available here
- url = ('https://api.met.no/weatherapi/sunrise/2.0/.json?lat=' +
+ if days_ahead > 0:
+ # Can't change attributes in struct_time, need to create a new
+ # one which will roll the date ahead as needed. Convert to local
+ # epoch seconds and back for the offset to work. :/
+ datetime_local_struct = time.localtime(
+ time.mktime(time.struct_time((
+ datetime_local_struct.tm_year,
+ datetime_local_struct.tm_mon,
+ datetime_local_struct.tm_mday + days_ahead,
+ datetime_local_struct.tm_hour,
+ datetime_local_struct.tm_min,
+ datetime_local_struct.tm_sec,
+ -1, -1, -1))))
+ # URL does not contain local or UTC time, only date. strftime() is
+ # not available in CircuitPython, manual conversion to time string
+ # is needed. Response is moon data for a 24-hour period, based on
+ # longitude and requested date. Some values within are UTC time,
+ # others are local. Anything we parse out of this will be converted
+ # to UTC epoch seconds, period.
+ url = ('https://api.met.no/weatherapi/sunrise/3.0/moon?lat=' +
str(LATITUDE) + '&lon=' + str(LONGITUDE) +
- '&date=' + str(datetime.tm_year) + '-' +
- '{0:0>2}'.format(datetime.tm_mon) + '-' +
- '{0:0>2}'.format(datetime.tm_mday) +
- '&offset=' + utc_offset)
+ '&date=' + str(datetime_local_struct.tm_year) + '-' +
+ '{0:0>2}'.format(datetime_local_struct.tm_mon) + '-' +
+ '{0:0>2}'.format(datetime_local_struct.tm_mday) +
+ '&offset=' + utc_offset_string)
print('Fetching moon data via', url)
# pylint: disable=bare-except
for _ in range(5): # Retries
try:
- location_data = NETWORK.fetch_data(url,
- json_path=[['location']])
- moon_data = location_data['time'][0]
- #print(moon_data)
- # Reconstitute JSON data into the elements we need
- self.age = float(moon_data['moonphase']['value']) / 100
- self.midnight = time.mktime(parse_time(
- moon_data['moonphase']['time']))
- if 'moonrise' in moon_data:
- self.rise = time.mktime(
- parse_time(moon_data['moonrise']['time']))
+ moon_data = NETWORK.fetch_data(url,
+ json_path=[],
+ headers = HEADERS)
+ properties = moon_data['properties']
+ # 0 = new moon, 90 = Q1, 180 = full moon, 270 = LQ
+ self.age = float(properties['moonphase']) / 360
+ interval = moon_data['when']['interval']
+ self.start_utc_seconds = parse_time_to_utc_seconds(interval[0])
+ self.end_utc_seconds = parse_time_to_utc_seconds(interval[1])
+ # Thx user sandorcourane for the properties fixes!
+ if properties['moonrise']['time'] is not None:
+ self.rise_utc_seconds = parse_time_to_utc_seconds(
+ properties['moonrise']['time'])
else:
- self.rise = None
- if 'moonset' in moon_data:
- self.set = time.mktime(
- parse_time(moon_data['moonset']['time']))
+ self.rise_utc_seconds = None
+ if properties['moonset']['time'] is not None:
+ self.set_utc_seconds = parse_time_to_utc_seconds(
+ properties['moonset']['time'])
else:
- self.set = None
+ self.set_utc_seconds = None
return # Success!
except:
# Moon server error (maybe), try again after 15 seconds.
@@ -242,7 +264,7 @@ def __init__(self, datetime, hours_ahead, utc_offset):
# Element 9 is the time of (or time to) next rise/set event
GROUP.append(adafruit_display_text.label.Label(SMALL_FONT, color=0x00FF00,
text='12:00', y=-99))
-DISPLAY.show(GROUP)
+DISPLAY.root_group = GROUP
NETWORK = Network(status_neopixel=board.NEOPIXEL, debug=False)
NETWORK.connect()
@@ -262,59 +284,61 @@ def __init__(self, datetime, hours_ahead, utc_offset):
['geoplugin_longitude']]))
print('Using IP geolocation: ', LATITUDE, LONGITUDE)
-# Load time zone string from secrets.py, else IP geolocation for this too
-# (http://worldtimeapi.org/api/timezone for list).
-try:
- TIMEZONE = secrets['timezone'] # e.g. 'America/New_York'
-except:
- TIMEZONE = None # IP geolocation
-
# Set initial clock time, also fetch initial UTC offset while
# here (NOT stored in secrets.py as it may change with DST).
# pylint: disable=bare-except
try:
- DATETIME, UTC_OFFSET = update_time(TIMEZONE)
+ DATETIME_LOCAL_STRUCT, UTC_OFFSET_STRING = update_system_time()
except:
- DATETIME, UTC_OFFSET = time.localtime(), '+00:00'
-LAST_SYNC = time.mktime(DATETIME)
+ DATETIME_LOCAL_STRUCT, UTC_OFFSET_STRING = time.localtime(), '+00:00'
+LAST_SYNC_LOCAL_SECONDS = time.mktime(DATETIME_LOCAL_STRUCT)
# Poll server for moon data for current 24-hour period and +24 ahead
PERIOD = []
-for DAY in range(2):
- PERIOD.append(MoonData(DATETIME, DAY * 24, UTC_OFFSET))
-# PERIOD[0] is the current 24-hour time period we're in. PERIOD[1] is the
-# following 24 hours. Data is shifted down and new data fetched as days
-# expire. Thought we might need a PERIOD[2] for certain circumstances but
-# it appears not, that's changed easily enough if needed.
+for DAY in range(2): # Today, tomorrow
+ PERIOD.append(MoonData(DATETIME_LOCAL_STRUCT, DAY, UTC_OFFSET_STRING))
+# PERIOD[0] is a current 24-hour time period we're in. PERIOD[1] is the
+# 24 hours following that. Start/end time thresholds vary by longitude.
+# Any values within the object are expressed in UTC seconds. Data is
+# shifted down and new data fetched as days expire. Thought we might need a
+# PERIOD[2] for certain circumstances but it appears not, that's changed
+# easily enough if needed.
# MAIN LOOP ----------------------------------------------------------------
while True:
gc.collect()
- NOW = time.time() # Current epoch time in seconds
+ NOW_LOCAL_SECONDS = time.time() # Current local epoch time in seconds
- # Sync with time server every ~12 hours
- if NOW - LAST_SYNC > 12 * 60 * 60:
+ # Sync with time server every ~3 hours
+ if NOW_LOCAL_SECONDS - LAST_SYNC_LOCAL_SECONDS > 3 * 60 * 60:
try:
- DATETIME, UTC_OFFSET = update_time(TIMEZONE)
- LAST_SYNC = time.mktime(DATETIME)
- continue # Time may have changed; refresh NOW value
+ DATETIME_LOCAL_STRUCT, UTC_OFFSET_STRING = update_system_time()
+ LAST_SYNC_LOCAL_SECONDS = time.mktime(DATETIME_LOCAL_STRUCT)
+ continue # Time may have changed; refresh NOW_LOCAL_SECONDS value
except:
- # update_time() can throw an exception if time server doesn't
+ # update_system_time() can throw an exception if time server doesn't
# respond. That's OK, keep running with our current time, and
# push sync time ahead to retry in 30 minutes (don't overwhelm
# the server with repeated queries).
- LAST_SYNC += 30 * 60 # 30 minutes -> seconds
+ LAST_SYNC_LOCAL_SECONDS += 30 * 60 # 30 minutes -> seconds
+
+ # NOW_LOCAL_SECONDS and DATETIME_LOCAL_STRUCT are local time, while all
+ # moon properties are UTC. Convert 'now' to UTC seconds...
+ # UTC_OFFSET_STRING is a string, like +HH:MM. Convert to integer seconds:
+ hhmm = UTC_OFFSET_STRING.split(':')
+ utc_offset_seconds = ((int(hhmm[0]) * 60 + int(hhmm[1])) * 60)
+ NOW_UTC_SECONDS = NOW_LOCAL_SECONDS - utc_offset_seconds
# If PERIOD has expired, move data down and fetch new +24-hour data
- if NOW >= PERIOD[1].midnight:
+ if NOW_UTC_SECONDS >= PERIOD[0].end_utc_seconds:
PERIOD[0] = PERIOD[1]
- PERIOD[1] = MoonData(time.localtime(), 24, UTC_OFFSET)
+ PERIOD[1] = MoonData(time.localtime(), 1, UTC_OFFSET_STRING)
# Determine weighting of tomorrow's phase vs today's, using current time
- RATIO = ((NOW - PERIOD[0].midnight) /
- (PERIOD[1].midnight - PERIOD[0].midnight))
+ RATIO = ((NOW_UTC_SECONDS - PERIOD[0].start_utc_seconds) /
+ (PERIOD[1].start_utc_seconds - PERIOD[0].start_utc_seconds))
# Determine moon phase 'age'
# 0.0 = new moon
# 0.25 = first quarter
@@ -344,18 +368,20 @@ def __init__(self, datetime, hours_ahead, utc_offset):
# Find next rise/set event, complicated by the fact that some 24-hour
# periods might not have one or the other (but usually do) due to the
# Moon rising ~50 mins later each day. This uses a brute force approach,
- # working backwards through the time periods to locate rise/set events
- # that A) exist in that 24-hour period (are not None), B) are still in
+ # working through the time periods to locate rise/set events that
+ # A) exist in that 24-hour period (are not None), B) are still in
# the future, and C) are closer than the last guess. What's left at the
- # end is the next rise or set (and the inverse of the event type tells
- # us whether Moon's currently risen or not).
- NEXT_EVENT = PERIOD[1].midnight + 100000 # Force first match
- for DAY in reversed(PERIOD):
- if DAY.rise and NEXT_EVENT >= DAY.rise >= NOW:
- NEXT_EVENT = DAY.rise
- RISEN = False
- if DAY.set and NEXT_EVENT >= DAY.set >= NOW:
- NEXT_EVENT = DAY.set
+ # end is the next rise or set time, and a flag whether the moon's
+ # currently risen or not.
+ NEXT_EVENT_UTC_SECONDS = NOW_UTC_SECONDS + 300000 # Way future
+ for DAY in PERIOD:
+ if (DAY.rise_utc_seconds and
+ NOW_UTC_SECONDS < DAY.rise_utc_seconds < NEXT_EVENT_UTC_SECONDS):
+ NEXT_EVENT_UTC_SECONDS = DAY.rise_utc_seconds
+ RISEN = False # Current moon state; next event is inverse
+ if (DAY.set_utc_seconds and
+ NOW_UTC_SECONDS < DAY.set_utc_seconds < NEXT_EVENT_UTC_SECONDS):
+ NEXT_EVENT_UTC_SECONDS = DAY.set_utc_seconds
RISEN = True
if DISPLAY.rotation in (0, 180): # Horizontal 'landscape' orientation
@@ -380,15 +406,16 @@ def __init__(self, datetime, hours_ahead, utc_offset):
FILENAME = 'moon/moon' + '{0:0>2}'.format(FRAME) + '.bmp'
# CircuitPython 6 & 7 compatible
- BITMAP = displayio.OnDiskBitmap(open(FILENAME, 'rb'))
- TILE_GRID = displayio.TileGrid(
- BITMAP,
- pixel_shader=getattr(BITMAP, 'pixel_shader', displayio.ColorConverter())
- )
+ # BITMAP = displayio.OnDiskBitmap(open(FILENAME, 'rb'))
+ # TILE_GRID = displayio.TileGrid(
+ # BITMAP,
+ # pixel_shader=getattr(BITMAP, 'pixel_shader',
+ # displayio.ColorConverter())
+ # )
- # # CircuitPython 7+ compatible
- # BITMAP = displayio.OnDiskBitmap(FILENAME)
- # TILE_GRID = displayio.TileGrid(BITMAP, pixel_shader=BITMAP.pixel_shader)
+ # CircuitPython 7+ compatible
+ BITMAP = displayio.OnDiskBitmap(FILENAME)
+ TILE_GRID = displayio.TileGrid(BITMAP, pixel_shader=BITMAP.pixel_shader)
TILE_GRID.x = 0
TILE_GRID.y = MOON_Y
@@ -399,7 +426,7 @@ def __init__(self, datetime, hours_ahead, utc_offset):
STRING = '100%'
else:
STRING = '{:.1f}'.format(PERCENT + 0.05) + '%'
- print(NOW, STRING, 'full')
+ print(NOW_UTC_SECONDS, STRING, 'full')
# Set element 5 first, use its size and position for setting others
GROUP[5].text = STRING
GROUP[5].x = 16 - GROUP[5].bounding_box[2] // 2
@@ -412,14 +439,13 @@ def __init__(self, datetime, hours_ahead, utc_offset):
GROUP[4].x, GROUP[4].y = GROUP[5].x, GROUP[5].y + 1 # Down
# Update next-event time (GROUP[8] and [9])
- # Do this before time because we need uncorrupted NOW value
- EVENT_TIME = time.localtime(NEXT_EVENT) # Convert to struct for later
- if COUNTDOWN: # Show NEXT_EVENT as countdown to event
- NEXT_EVENT -= NOW # Time until (vs time of) next rise/set
- MINUTES = NEXT_EVENT // 60
+ NEXT_EVENT_LOCAL_STRUCT = time.localtime(NEXT_EVENT_UTC_SECONDS +
+ utc_offset_seconds) # Need later
+ if COUNTDOWN: # Show NEXT_EVENT_UTC_SECONDS as countdown to event
+ MINUTES = (NEXT_EVENT_UTC_SECONDS - NOW_UTC_SECONDS) // 60
STRING = str(MINUTES // 60) + ':' + '{0:0>2}'.format(MINUTES % 60)
- else: # Show NEXT_EVENT in clock time
- STRING = hh_mm(EVENT_TIME)
+ else: # Show NEXT_EVENT_UTC_SECONDS in clock time
+ STRING = hh_mm(NEXT_EVENT_LOCAL_STRUCT)
GROUP[9].text = STRING
XPOS = CENTER_X - (GROUP[9].bounding_box[2] + 6) // 2
GROUP[8].x = XPOS
@@ -434,19 +460,22 @@ def __init__(self, datetime, hours_ahead, utc_offset):
GROUP[9].x = XPOS + 6
GROUP[9].y = EVENT_Y
# Show event time in green if a.m., amber if p.m.
- GROUP[8].color = GROUP[9].color = (0x00FF00 if EVENT_TIME.tm_hour < 12
+ GROUP[8].color = GROUP[9].color = (0x00FF00 if
+ NEXT_EVENT_LOCAL_STRUCT.tm_hour < 12
else 0xC04000)
# Update time (GROUP[6]) and date (GROUP[7])
- NOW = time.localtime()
- STRING = hh_mm(NOW)
+ NOW_LOCAL_STRUCT = time.localtime()
+ STRING = hh_mm(NOW_LOCAL_STRUCT)
GROUP[6].text = STRING
GROUP[6].x = CENTER_X - GROUP[6].bounding_box[2] // 2
GROUP[6].y = TIME_Y
if MONTH_DAY:
- STRING = str(NOW.tm_mon) + '/' + str(NOW.tm_mday)
+ STRING = (str(NOW_LOCAL_STRUCT.tm_mon) + '/' +
+ str(NOW_LOCAL_STRUCT.tm_mday))
else:
- STRING = str(NOW.tm_mday) + '/' + str(NOW.tm_mon)
+ STRING = (str(NOW_LOCAL_STRUCT.tm_mday) + '/' +
+ str(NOW_LOCAL_STRUCT.tm_mon))
GROUP[7].text = STRING
GROUP[7].x = CENTER_X - GROUP[7].bounding_box[2] // 2
GROUP[7].y = TIME_Y + 10
diff --git a/Matrix_Portal_S3_ESPN_API/CircuitPython/code.py b/Matrix_Portal_S3_ESPN_API/CircuitPython/code.py
new file mode 100644
index 000000000..75874cd9b
--- /dev/null
+++ b/Matrix_Portal_S3_ESPN_API/CircuitPython/code.py
@@ -0,0 +1,407 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import gc
+import ssl
+import time
+import wifi
+import socketpool
+import adafruit_requests
+import adafruit_display_text.label
+import board
+import terminalio
+import displayio
+import framebufferio
+import rgbmatrix
+import adafruit_json_stream as json_stream
+import microcontroller
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_datetime import datetime, timedelta
+import neopixel
+
+displayio.release_displays()
+
+# font color for text on matrix
+font_color = 0xFFFFFF
+# your timezone UTC offset and timezone name
+timezone_info = [-4, "EDT"]
+# the name of the sports you want to follow
+sport_name = ["football", "baseball", "soccer", "hockey", "basketball"]
+# the name of the corresponding leages you want to follow
+sport_league = ["nfl", "mlb", "usa.1", "nhl", "nba"]
+# the team names you want to follow
+# must match the order of sport/league arrays
+# include full name and then abbreviation (usually city/region)
+team0 = ["New England Patriots", "NE"]
+team1 = ["Boston Red Sox", "BOS"]
+team2 = ["New England Revolution", "NE"]
+team3 = ["Boston Bruins", "BOS"]
+team4 = ["Boston Celtics", "BOS"]
+# how often the API should be fetched
+fetch_timer = 300 # seconds
+# how often the display should update
+display_timer = 30 # seconds
+
+pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness = 0.3, auto_write=True)
+
+# matrix setup
+base_width = 64
+base_height = 32
+chain_across = 2
+tile_down = 2
+DISPLAY_WIDTH = base_width * chain_across
+DISPLAY_HEIGHT = base_height * tile_down
+matrix = rgbmatrix.RGBMatrix(
+ width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, bit_depth=3,
+ rgb_pins=[
+ board.MTX_R1,
+ board.MTX_G1,
+ board.MTX_B1,
+ board.MTX_R2,
+ board.MTX_G2,
+ board.MTX_B2
+ ],
+ addr_pins=[
+ board.MTX_ADDRA,
+ board.MTX_ADDRB,
+ board.MTX_ADDRC,
+ board.MTX_ADDRD
+ ],
+ clock_pin=board.MTX_CLK,
+ latch_pin=board.MTX_LAT,
+ output_enable_pin=board.MTX_OE,
+ tile=tile_down, serpentine=True,
+ doublebuffer=False
+)
+display = framebufferio.FramebufferDisplay(matrix)
+
+# connect to WIFI
+wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
+print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
+
+# add API URLs
+SPORT_URLS = []
+for i in range(5):
+ d = (
+ f"https://site.api.espn.com/apis/site/v2/sports/{sport_name[i]}/{sport_league[i]}/scoreboard"
+ )
+ SPORT_URLS.append(d)
+
+context = ssl.create_default_context()
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, context)
+
+# arrays for teams, logos and display groups
+teams = []
+logos = []
+groups = []
+# add team to array
+teams.append(team0)
+# grab logo bitmap name
+logo0 = "/team0_logos/" + team0[1] + ".bmp"
+# add logo to array
+logos.append(logo0)
+# create a display group
+group0 = displayio.Group()
+# add group to array
+groups.append(group0)
+# repeat:
+teams.append(team1)
+logo1 = "/team1_logos/" + team1[1] + ".bmp"
+logos.append(logo1)
+group1 = displayio.Group()
+groups.append(group1)
+teams.append(team2)
+logo2 = "/team2_logos/" + team2[1] + ".bmp"
+logos.append(logo2)
+group2 = displayio.Group()
+groups.append(group2)
+teams.append(team3)
+logo3 = "/team3_logos/" + team3[1] + ".bmp"
+logos.append(logo3)
+group3 = displayio.Group()
+groups.append(group3)
+teams.append(team4)
+logo4 = "/team4_logos/" + team4[1] + ".bmp"
+logos.append(logo4)
+group4 = displayio.Group()
+groups.append(group4)
+
+# initial startup screen
+# shows the five team logos you are following
+def sport_startup(logo):
+ try:
+ group = displayio.Group()
+ bitmap0 = displayio.OnDiskBitmap(logo[0])
+ grid0 = displayio.TileGrid(bitmap0, pixel_shader=bitmap0.pixel_shader, x = 0)
+ bitmap1 = displayio.OnDiskBitmap(logo[1])
+ grid1 = displayio.TileGrid(bitmap1, pixel_shader=bitmap1.pixel_shader, x = 32)
+ bitmap2 = displayio.OnDiskBitmap(logo[2])
+ grid2 = displayio.TileGrid(bitmap2, pixel_shader=bitmap2.pixel_shader, x = 64)
+ bitmap3 = displayio.OnDiskBitmap(logo[3])
+ grid3 = displayio.TileGrid(bitmap3, pixel_shader=bitmap3.pixel_shader, x = 96)
+ bitmap4 = displayio.OnDiskBitmap(logo[4])
+ grid4 = displayio.TileGrid(bitmap4, pixel_shader=bitmap4.pixel_shader, x = 48, y=32)
+ group.append(grid0)
+ group.append(grid1)
+ group.append(grid2)
+ group.append(grid3)
+ group.append(grid4)
+ display.root_group = group
+ # pylint: disable=broad-except
+ except Exception:
+ print("Can't find bitmap. Did you run the get_team_logos.py script?")
+
+# takes UTC time from JSON and reformats how its displayed
+def convert_date_format(date, tz_information):
+ # Manually extract year, month, day, hour, and minute from the string
+ year = int(date[0:4])
+ month = int(date[5:7])
+ day = int(date[8:10])
+ hour = int(date[11:13])
+ minute = int(date[14:16])
+ # Construct a datetime object using the extracted values
+ dt = datetime(year, month, day, hour, minute)
+ # Adjust the datetime object for the target timezone offset
+ dt_adjusted = dt + timedelta(hours=tz_information[0])
+ # Extract fields for output format
+ month = dt_adjusted.month
+ day = dt_adjusted.day
+ hour = dt_adjusted.hour
+ minute = dt_adjusted.minute
+ # Convert 24-hour format to 12-hour format and determine AM/PM
+ am_pm = "AM" if hour < 12 else "PM"
+ hour_12 = hour if hour <= 12 else hour - 12
+ minute = f"{minute:02}"
+ # Determine the timezone abbreviation based on the offset
+ time_zone_str = tz_information[1]
+ return f"{month}/{day} - {hour_12}:{minute} {am_pm} {time_zone_str}"
+
+# the actual API and display function
+# pylint: disable=too-many-locals, too-many-branches, too-many-statements
+def get_data(data, team, logo, group):
+ pixel.fill((0, 0, 255))
+ print(f"Fetching data from {data}")
+ playing = False
+ names = []
+ scores = []
+ info = []
+ index = 0
+ # the team you are following's logo
+ bitmap0 = displayio.OnDiskBitmap(logo)
+ grid0 = displayio.TileGrid(bitmap0, pixel_shader=bitmap0.pixel_shader, x = 2)
+ home_text = adafruit_display_text.label.Label(terminalio.FONT, color=font_color,
+ text=" ")
+ away_text = adafruit_display_text.label.Label(terminalio.FONT, color=font_color,
+ text=" ")
+ vs_text = adafruit_display_text.label.Label(terminalio.FONT, color=font_color,
+ text=" ")
+ vs_text.anchor_point = (0.5, 0.0)
+ vs_text.anchored_position = (DISPLAY_WIDTH / 2, 14)
+ info_text = adafruit_display_text.label.Label(terminalio.FONT, color=font_color,
+ text=" ")
+ info_text.anchor_point = (0.5, 1.0)
+ info_text.anchored_position = (DISPLAY_WIDTH / 2, DISPLAY_HEIGHT)
+ # make the request to the API
+ resp = requests.get(data)
+ # stream the json
+ json_data = json_stream.load(resp.iter_content(32))
+ for event in json_data["events"]:
+ # clear the date and then add the date to the array
+ # the date for your game will remain
+ info.clear()
+ info.append(event["date"])
+ # check for your team playing
+ if team[0] not in event["name"]:
+ continue
+ for competition in event["competitions"]:
+ for competitor in competition["competitors"]:
+ # if your team is playing:
+ playing = True
+ # get team names
+ # index indicates home vs. away
+ names.append(competitor["team"]["abbreviation"])
+ # the current score
+ scores.append(competitor["score"])
+ # gets info on game
+ info.append(event["status"]["type"]["shortDetail"])
+ break
+ if playing and len(names) != 2:
+ print("did not get expected response, fetching full JSON..")
+ try:
+ resp.close()
+ # pylint: disable=broad-except
+ except Exception as e:
+ print(f"{e}, continuing..")
+ # pylint: disable=unnecessary-pass
+ pass
+ names.clear()
+ scores.clear()
+ info.clear()
+ resp = requests.get(data)
+ response_as_json = resp.json()
+ for e in response_as_json["events"]:
+ if team[0] in e["name"]:
+ print(index)
+ info.append(response_as_json["events"][0]["date"])
+ names.append(response_as_json["events"][0]["competitions"]
+ [0]["competitors"][0]["team"]["abbreviation"])
+ names.append(response_as_json["events"][0]["competitions"]
+ [0]["competitors"][1]["team"]["abbreviation"])
+ scores.append(response_as_json["events"][0]["competitions"]
+ [0]["competitors"][0]["score"])
+ scores.append(response_as_json["events"][0]["competitions"]
+ [0]["competitors"][1]["score"])
+ info.append(response_as_json["events"][0]["status"]["type"]["shortDetail"])
+ else:
+ index += 1
+ # debug printing
+ print(names)
+ print(scores)
+ print(info)
+ if playing and len(names) == 2:
+ # pull out the date
+ date = info[0]
+ # convert it to be readable
+ date = convert_date_format(date, timezone_info)
+ print(date)
+ # pull out the info
+ info = info[1]
+ # check if it's pre-game
+ if str(info) == date or str(info) == "Scheduled":
+ status = "pre"
+ print("match, pre-game")
+ else:
+ status = info
+ # home and away text
+ # teams index determines which team is home or away
+ home_text.text="HOME"
+ away_text.text="AWAY"
+ if team[1] is names[0]:
+ home_game = True
+ home_text.anchor_point = (0.0, 0.5)
+ home_text.anchored_position = (5, 37)
+ away_text.anchor_point = (1.0, 0.5)
+ away_text.anchored_position = (124, 37)
+ vs_team = names[1]
+ else:
+ home_game = False
+ away_text.anchor_point = (0.0, 0.5)
+ away_text.anchored_position = (5, 37)
+ home_text.anchor_point = (1.0, 0.5)
+ home_text.anchored_position = (124, 37)
+ vs_team = names[0]
+ # if it's pre-game, show "VS"
+ if status == "pre":
+ vs_text.text="VS"
+ info_text.text=date
+ # if it's active or final show score
+ else:
+ info_text.text=info
+ if home_game:
+ vs_text.text=f"{scores[0]} - {scores[1]}"
+ else:
+ vs_text.text=f"{scores[1]} - {scores[0]}"
+ # load in logo from other team
+ vs_logo = logo.replace(team[1], vs_team)
+ # if there is no game matching your team:
+ else:
+ status = "pre"
+ vs_logo = logo
+ info_text.text="NO DATA AVAILABLE"
+ # load in the other team's logo
+ bitmap1 = displayio.OnDiskBitmap(vs_logo)
+ grid1 = displayio.TileGrid(bitmap1, pixel_shader=bitmap1.pixel_shader, x = 94)
+ print("done")
+ # update the display group. try/except in case its the first time it's being added
+ try:
+ group[0] = grid0
+ group[1] = grid1
+ group[2] = home_text
+ group[3] = away_text
+ group[4] = vs_text
+ group[5] = info_text
+ except IndexError:
+ group.append(grid0)
+ group.append(grid1)
+ group.append(home_text)
+ group.append(away_text)
+ group.append(vs_text)
+ group.append(info_text)
+ # close the response
+ try:
+ # sometimes an OSError is thrown:
+ # "invalid syntax for integer with base 16"
+ # the code can continue depite it though
+ resp.close()
+ # pylint: disable=broad-except
+ except Exception as e:
+ print(f"{e}, continuing..")
+ # pylint: disable=unnecessary-pass
+ pass
+ pixel.fill((0, 0, 0))
+ # return that data was just fetched
+ fetch_status = True
+ return fetch_status
+
+# index and clock for fetching
+fetch_index = 0
+fetch_timer = fetch_timer * 1000
+# index and clock for updating display
+display_index = 0
+display_timer = display_timer * 1000
+# load logos
+sport_startup(logos)
+# initial data fetch
+for z in range(5):
+ try:
+ just_fetched = get_data(SPORT_URLS[z],
+ teams[z],
+ logos[z],
+ groups[z])
+ display.root_group = groups[z]
+ # pylint: disable=broad-except
+ except Exception as Error:
+ print(Error)
+ time.sleep(10)
+ gc.collect()
+ time.sleep(5)
+ microcontroller.reset()
+# start clocks
+just_fetched = True
+fetch_clock = ticks_ms()
+display_clock = ticks_ms()
+
+while True:
+ try:
+ if not just_fetched:
+ # garbage collection for display groups
+ gc.collect()
+ # fetch the json for the next team
+ just_fetched = get_data(SPORT_URLS[fetch_index],
+ teams[fetch_index],
+ logos[fetch_index],
+ groups[fetch_index])
+ # advance index
+ fetch_index = (fetch_index + 1) % len(teams)
+ # reset clocks
+ fetch_clock = ticks_add(fetch_clock, fetch_timer)
+ display_clock = ticks_add(display_clock, display_timer)
+ # update display seperate from API request
+ if ticks_diff(ticks_ms(), display_clock) >= display_timer:
+ print("updating display")
+ display.root_group = groups[display_index]
+ display_index = (display_index + 1) % len(teams)
+ display_clock = ticks_add(display_clock, display_timer)
+ # cleared for fetching after time has passed
+ if ticks_diff(ticks_ms(), fetch_clock) >= fetch_timer:
+ just_fetched = False
+ # pylint: disable=broad-except
+ except Exception as Error:
+ print(Error)
+ time.sleep(10)
+ gc.collect()
+ time.sleep(5)
+ microcontroller.reset()
diff --git a/Matrix_Portal_S3_ESPN_API/get_team_logos.py b/Matrix_Portal_S3_ESPN_API/get_team_logos.py
new file mode 100644
index 000000000..bf25fb10b
--- /dev/null
+++ b/Matrix_Portal_S3_ESPN_API/get_team_logos.py
@@ -0,0 +1,130 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# Written by Liz Clark (Adafruit Industries) with OpenAI ChatGPT v4 Aug 3rd, 2023 build
+# https://help.openai.com/en/articles/6825453-chatgpt-release-notes
+
+# https://chat.openai.com/share/2fabba2b-3f17-4ab6-a4d9-58206a3b9916
+
+# process() function originally written by Phil B. for Adafruit Industries
+# https://raw.githubusercontent.com/adafruit/Adafruit_Media_Converters/master/protomatter_dither.py
+
+import os
+import math
+import requests
+from PIL import Image
+
+# the name of the sports you want to follow
+sport_names = ["football", "baseball", "soccer", "hockey", "basketball"]
+# the name of the corresponding leages you want to follow
+sport_leagues = ["nfl", "mlb", "usa.1", "nhl", "nba"]
+# directory to match CircuitPython code folder names
+bitmap_directories = ["team0_logos", "team1_logos", "team2_logos", "team3_logos", "team4_logos"]
+
+# Constants and function for image processing
+GAMMA = 2.6
+
+PASSTHROUGH = ((0, 0, 0),
+ (255, 0, 0),
+ (255, 255, 0),
+ (0, 255, 0),
+ (0, 255, 255),
+ (0, 0, 255),
+ (255, 0, 255),
+ (255, 255, 255))
+
+def process(filename, output_8_bit=True, passthrough=PASSTHROUGH):
+ """Given a color image filename, load image and apply gamma correction
+ and error-diffusion dithering while quantizing to 565 color
+ resolution. If output_8_bit is True, image is reduced to 8-bit
+ paletted mode after quantization/dithering. If passthrough (a list
+ of 3-tuple RGB values) is provided, dithering won't be applied to
+ colors in the provided list, they'll be quantized only (allows areas
+ of the image to remain clean and dither-free).
+ """
+ img = Image.open(filename).convert('RGB')
+ err_next_pixel = (0, 0, 0)
+ err_next_row = [(0, 0, 0) for _ in range(img.size[0])]
+ for row in range(img.size[1]):
+ for column in range(img.size[0]):
+ pixel = img.getpixel((column, row))
+ want = (math.pow(pixel[0] / 255.0, GAMMA) * 31.0,
+ math.pow(pixel[1] / 255.0, GAMMA) * 63.0,
+ math.pow(pixel[2] / 255.0, GAMMA) * 31.0)
+ if pixel in passthrough:
+ got = (pixel[0] >> 3,
+ pixel[1] >> 2,
+ pixel[2] >> 3)
+ else:
+ got = (min(max(int(err_next_pixel[0] * 0.5 +
+ err_next_row[column][0] * 0.25 +
+ want[0] + 0.5), 0), 31),
+ min(max(int(err_next_pixel[1] * 0.5 +
+ err_next_row[column][1] * 0.25 +
+ want[1] + 0.5), 0), 63),
+ min(max(int(err_next_pixel[2] * 0.5 +
+ err_next_row[column][2] * 0.25 +
+ want[2] + 0.5), 0), 31))
+ err_next_pixel = (want[0] - got[0],
+ want[1] - got[1],
+ want[2] - got[2])
+ err_next_row[column] = err_next_pixel
+ rgb565 = ((got[0] << 3) | (got[0] >> 2),
+ (got[1] << 2) | (got[1] >> 4),
+ (got[2] << 3) | (got[2] >> 2))
+ img.putpixel((column, row), rgb565)
+
+ if output_8_bit:
+ img = img.convert('P', palette=Image.ADAPTIVE)
+
+ img.save(filename.split('.')[0] + '.bmp')
+
+# Create a base directory to store the logos if it doesn't exist
+base_dir = 'sport_logos'
+if not os.path.exists(base_dir):
+ os.makedirs(base_dir)
+
+# Loop through each league to get the teams
+for i in range(len(sport_leagues)):
+ sport = sport_names[i]
+ league = sport_leagues[i]
+
+ # Create a directory for the current sport if it doesn't exist
+ sport_dir = os.path.join(base_dir, bitmap_directories[i])
+ if not os.path.exists(sport_dir):
+ os.makedirs(sport_dir)
+
+ # Set the URL for the JSON file for the current league
+ url = f"https://site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams"
+
+ # Fetch the JSON data
+ response = requests.get(url)
+ data = response.json()
+
+ # Extract team data
+ teams = data.get('sports', [{}])[0].get('leagues', [{}])[0].get('teams', [])
+
+ # Download, process, resize, and save each logo
+ for team in teams:
+ abbreviation = team['team']['abbreviation']
+ logo_url = team['team']['logos'][0]['href']
+
+ print(f"Downloading logo for {abbreviation} from {league}...")
+
+ img_path_png = os.path.join(sport_dir, f"{abbreviation}.png")
+ response = requests.get(logo_url, stream=True)
+ with open(img_path_png, 'wb') as file:
+ for chunk in response.iter_content(chunk_size=1024):
+ file.write(chunk)
+
+ # Open, resize, and save the image with PIL
+ with Image.open(img_path_png) as the_img:
+ img_resized = the_img.resize((32, 32))
+ img_resized.save(img_path_png)
+ process(img_path_png)
+
+ # Delete the original .png file
+ os.remove(img_path_png)
+
+print("All logos have been downloaded, processed, and resized!")
diff --git a/Matrix_Portal_S3_Message_Board/Enclosure/3MF_Files.zip b/Matrix_Portal_S3_Message_Board/Enclosure/3MF_Files.zip
new file mode 100644
index 000000000..15872aaa2
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/Enclosure/3MF_Files.zip differ
diff --git a/Matrix_Portal_S3_Message_Board/Enclosure/CAD_Files.zip b/Matrix_Portal_S3_Message_Board/Enclosure/CAD_Files.zip
new file mode 100644
index 000000000..3872cd0f5
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/Enclosure/CAD_Files.zip differ
diff --git a/Matrix_Portal_S3_Message_Board/Enclosure/STL_Files.zip b/Matrix_Portal_S3_Message_Board/Enclosure/STL_Files.zip
new file mode 100644
index 000000000..74db24067
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/Enclosure/STL_Files.zip differ
diff --git a/Matrix_Portal_S3_Message_Board/code.py b/Matrix_Portal_S3_Message_Board/code.py
new file mode 100755
index 000000000..982995b30
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/code.py
@@ -0,0 +1,26 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+from adafruit_matrixportal.matrix import Matrix
+from messageboard import MessageBoard
+from messageboard.fontpool import FontPool
+from messageboard.message import Message
+
+matrix = Matrix(width=128, height=16, bit_depth=5)
+messageboard = MessageBoard(matrix)
+messageboard.set_background("images/background.bmp")
+fontpool = FontPool()
+fontpool.add_font("arial", "fonts/Arial-10.pcf")
+
+# Create the message ahead of time
+message = Message(fontpool.find_font("arial"), mask_color=0xFF00FF, opacity=0.8)
+message.add_image("images/maskedstar.bmp")
+message.add_text("Hello World!", color=0xFFFF00, x_offset=2, y_offset=2)
+
+while True:
+ # Animate the message
+ messageboard.animate(message, "Scroll", "in_from_right")
+ time.sleep(1)
+ messageboard.animate(message, "Scroll", "out_to_left")
diff --git a/Matrix_Portal_S3_Message_Board/demo.py b/Matrix_Portal_S3_Message_Board/demo.py
new file mode 100755
index 000000000..af173e12e
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/demo.py
@@ -0,0 +1,73 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+from adafruit_matrixportal.matrix import Matrix
+from messageboard import MessageBoard
+from messageboard.fontpool import FontPool
+from messageboard.message import Message
+
+matrix = Matrix(width=128, height=16, bit_depth=5)
+messageboard = MessageBoard(matrix)
+messageboard.set_background("images/background.bmp")
+
+fontpool = FontPool()
+fontpool.add_font("comic", "fonts/Comic-10.pcf")
+fontpool.add_font("dejavu", "fonts/DejaVuSans-10.pcf")
+
+message1 = Message(fontpool.find_font("dejavu"))
+
+message2 = Message(fontpool.find_font("comic"), mask_color=0x00FF00)
+print("add blinka")
+message2.add_image("images/maskedblinka.bmp")
+print("add text")
+message2.add_text("CircuitPython", color=0xFFFF00, y_offset=-2)
+
+message3 = Message(fontpool.find_font("dejavu"))
+message3.add_text("circuitpython.com", color=0xFF0000)
+
+message4 = Message(fontpool.find_font("arial"))
+message4.add_text("Buy Electronics", color=0xFFFFFF)
+
+while True:
+ # Set message 1 content and animate
+ message1.clear()
+ message1.add_text("Scroll Text In", color=0xFF0000)
+ messageboard.animate(message1, "Scroll", "in_from_left")
+ time.sleep(1)
+
+ # Change message 1 content and animate
+ message1.clear()
+ message1.add_text("Change Messages")
+ messageboard.animate(message1, "Static", "show")
+ time.sleep(1)
+
+ # Change message 1 content again and animate
+ message1.clear()
+ message1.add_text("And Scroll Out")
+ messageboard.animate(message1, "Static", "show")
+ messageboard.animate(message1, "Scroll", "out_to_right")
+ time.sleep(1)
+
+ # Change message 1 content a final time and animate
+ message1.clear()
+ message1.add_text("Or more effects like looping ", color=0xFFFF00)
+ messageboard.animate(message1, "Split", "in_vertically")
+ messageboard.animate(message1, "Loop", "left")
+ messageboard.animate(message1, "Static", "flash", count=3)
+ messageboard.animate(message1, "Split", "out_vertically")
+ time.sleep(1)
+
+ messageboard.animate(message2, "Static", "fade_in")
+ time.sleep(1)
+ messageboard.animate(message2, "Static", "fade_out")
+
+ messageboard.set_background(0x00FF00)
+ messageboard.animate(message3, "Scroll", "in_from_top")
+ time.sleep(1)
+ messageboard.animate(message3, "Scroll", "out_to_bottom")
+ messageboard.set_background("images/background.bmp")
+
+ messageboard.animate(message4, "Scroll", "in_from_right")
+ time.sleep(1)
diff --git a/Matrix_Portal_S3_Message_Board/fonts/Arial-10.pcf b/Matrix_Portal_S3_Message_Board/fonts/Arial-10.pcf
new file mode 100755
index 000000000..72aa2350f
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/fonts/Arial-10.pcf differ
diff --git a/Matrix_Portal_S3_Message_Board/fonts/Comic-10.pcf b/Matrix_Portal_S3_Message_Board/fonts/Comic-10.pcf
new file mode 100755
index 000000000..9bf570b97
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/fonts/Comic-10.pcf differ
diff --git a/Matrix_Portal_S3_Message_Board/fonts/DejaVuSans-10.pcf b/Matrix_Portal_S3_Message_Board/fonts/DejaVuSans-10.pcf
new file mode 100755
index 000000000..1d9948ec2
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/fonts/DejaVuSans-10.pcf differ
diff --git a/Matrix_Portal_S3_Message_Board/images/adafruit_star.bmp b/Matrix_Portal_S3_Message_Board/images/adafruit_star.bmp
new file mode 100755
index 000000000..fb65f38ef
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/images/adafruit_star.bmp differ
diff --git a/Matrix_Portal_S3_Message_Board/images/background.bmp b/Matrix_Portal_S3_Message_Board/images/background.bmp
new file mode 100755
index 000000000..7495657c9
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/images/background.bmp differ
diff --git a/Matrix_Portal_S3_Message_Board/images/logo.bmp b/Matrix_Portal_S3_Message_Board/images/logo.bmp
new file mode 100755
index 000000000..c68947e58
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/images/logo.bmp differ
diff --git a/Matrix_Portal_S3_Message_Board/images/maskedblinka.bmp b/Matrix_Portal_S3_Message_Board/images/maskedblinka.bmp
new file mode 100755
index 000000000..e0c399a99
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/images/maskedblinka.bmp differ
diff --git a/Matrix_Portal_S3_Message_Board/images/maskedstar.bmp b/Matrix_Portal_S3_Message_Board/images/maskedstar.bmp
new file mode 100755
index 000000000..d1caf70bb
Binary files /dev/null and b/Matrix_Portal_S3_Message_Board/images/maskedstar.bmp differ
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/__init__.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/__init__.py
new file mode 100755
index 000000000..1785e4ecd
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/__init__.py
@@ -0,0 +1,181 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import bitmaptools
+import displayio
+import adafruit_imageload
+from .doublebuffer import DoubleBuffer
+from .message import Message
+
+
+class MessageBoard:
+ def __init__(self, matrix):
+ self.fonts = {}
+ self.display = matrix.display
+ self._buffer_width = self.display.width * 2
+ self._buffer_height = self.display.height * 2
+ self._dbl_buf = DoubleBuffer(
+ self.display, self._buffer_width, self._buffer_height
+ )
+ self._background = None
+ self.set_background() # Set to black
+ self._position = (0, 0)
+ self._shift_count_x = 0
+ self._shift_count_y = 0
+
+ def set_background(self, file_or_color=0x000000):
+ """The background image to a bitmap file."""
+ if isinstance(file_or_color, str): # its a filenme:
+ background, bg_shader = adafruit_imageload.load(file_or_color)
+ self._dbl_buf.shader = bg_shader
+ self._background = background
+ elif isinstance(file_or_color, int):
+ # Make a background color fill
+ bg_shader = displayio.ColorConverter(
+ input_colorspace=displayio.Colorspace.RGB565
+ )
+ background = displayio.Bitmap(
+ self.display.width, self.display.height, 65535
+ )
+ background.fill(displayio.ColorConverter().convert(file_or_color))
+ self._dbl_buf.shader = bg_shader
+ self._background = background
+ else:
+ raise RuntimeError("Unknown type of background")
+
+ def animate(self, message, animation_class, animation_function, **kwargs):
+ anim_class = __import__(
+ f"{self.__module__}.animations.{animation_class.lower()}"
+ )
+ anim_class = getattr(anim_class, "animations")
+ anim_class = getattr(anim_class, animation_class.lower())
+ anim_class = getattr(anim_class, animation_class)
+ animation = anim_class(
+ self.display, self._draw, self._position, (self._shift_count_x, self._shift_count_y)
+ ) # Instantiate the class
+ # Call the animation function and pass kwargs along with the message (positional)
+ anim_func = getattr(animation, animation_function)
+ anim_func(message, **kwargs)
+
+ def set_message_position(self, x, y):
+ """Set the position of the message on the display"""
+ self._position = (x, y)
+ self._shift_count_x = 0
+ self._shift_count_y = 0
+
+ def _draw(
+ self,
+ image,
+ x,
+ y,
+ opacity=None,
+ mask_color=0xFF00FF,
+ blendmode=bitmaptools.BlendMode.Normal,
+ post_draw_position=None,
+ ):
+ """Draws a message to the buffer taking its current settings into account.
+ It also sets the current position and performs a swap.
+ """
+ buffer_x_offset = self._buffer_width - self.display.width
+ buffer_y_offset = self._buffer_height - self.display.height
+
+ # Image can be a message in which case its properties will be used
+ if isinstance(image, Message):
+ if opacity is None:
+ opacity = image.opacity
+ mask_color = image.mask_color
+ blendmode = image.blendmode
+ image = image.buffer
+ if opacity is None:
+ opacity = 1.0
+
+ if mask_color > 65535:
+ mask_color = displayio.ColorConverter().convert(mask_color)
+
+ # New significantly shorter message, so adjust the position
+ while image.width + x < 0:
+ x += self.display.width
+ while image.height + y < 0:
+ y += self.display.height
+
+ self._position = (x, y)
+
+ # Blit the background
+ bitmaptools.blit(
+ self._dbl_buf.active_buffer,
+ self._background,
+ buffer_x_offset,
+ buffer_y_offset,
+ )
+
+ # If the image is wider than the display buffer, we need to shrink it
+ shift_count = 0
+ while x + buffer_x_offset < 0:
+ new_image = displayio.Bitmap(
+ image.width - self.display.width, image.height, 65535
+ )
+ bitmaptools.blit(
+ new_image,
+ image,
+ 0,
+ 0,
+ x1=self.display.width,
+ y1=0,
+ x2=image.width,
+ y2=image.height,
+ )
+ x += self.display.width
+ self._position = (x, y) # Update the stored position
+ shift_count += 1
+ image = new_image
+ self._shift_count_x = shift_count
+
+ # If the image is taller than the display buffer, we need to shrink it
+ shift_count = 0
+ while y + buffer_y_offset < 0:
+ new_image = displayio.Bitmap(
+ image.width, image.height - self.display.height, 65535
+ )
+ bitmaptools.blit(
+ new_image,
+ image,
+ 0,
+ 0,
+ x1=0,
+ y1=self.display.height,
+ x2=image.width,
+ y2=image.height,
+ )
+ y += self.display.height
+ self._position = (x, y) # Update the stored position
+ shift_count += 1
+ image = new_image
+ self._shift_count_y = shift_count
+
+ # Clear the foreground buffer
+ foreground_buffer = displayio.Bitmap(
+ self._buffer_width, self._buffer_height, 65535
+ )
+ foreground_buffer.fill(mask_color)
+
+ bitmaptools.blit(
+ foreground_buffer, image, x + buffer_x_offset, y + buffer_y_offset
+ )
+
+ # Blend the foreground buffer into the main buffer
+ bitmaptools.alphablend(
+ self._dbl_buf.active_buffer,
+ self._dbl_buf.active_buffer,
+ foreground_buffer,
+ displayio.Colorspace.RGB565,
+ 1.0,
+ opacity,
+ blendmode=blendmode,
+ skip_source2_index=mask_color,
+ )
+ self._dbl_buf.show()
+
+ # Allow for an override of the position after drawing (needed for split effects)
+ if post_draw_position is not None and isinstance(post_draw_position, tuple):
+ self._position = post_draw_position
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/__init__.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/__init__.py
new file mode 100755
index 000000000..925e82a15
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/__init__.py
@@ -0,0 +1,28 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+
+
+class Animation:
+ def __init__(self, display, draw_callback, starting_position=(0, 0), shift_count=(0, 0)):
+ self._display = display
+ starting_position = (
+ starting_position[0] - shift_count[0] * self._display.width,
+ starting_position[1] - shift_count[1] * self._display.height
+ )
+ self._position = starting_position
+ self._draw = draw_callback
+
+ @staticmethod
+ def _wait(start_time, duration):
+ """Uses time.monotonic() to wait from the start time for a specified duration"""
+ while time.monotonic() < (start_time + duration):
+ pass
+ return time.monotonic()
+
+ def _get_centered_position(self, message):
+ return int(self._display.width / 2 - message.buffer.width / 2), int(
+ self._display.height / 2 - message.buffer.height / 2
+ )
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/loop.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/loop.py
new file mode 100755
index 000000000..2baad163d
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/loop.py
@@ -0,0 +1,146 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import displayio
+import bitmaptools
+from . import Animation
+
+
+class Loop(Animation):
+ def _create_loop_image(self, image, x_offset, y_offset, mask_color):
+ """Attach a copy of an image by a certain offset so it can be looped."""
+ if 0 < x_offset < self._display.width:
+ x_offset = self._display.width
+ if 0 < y_offset < self._display.height:
+ y_offset = self._display.height
+
+ loop_image = displayio.Bitmap(
+ image.width + x_offset, image.height + y_offset, 65535
+ )
+ loop_image.fill(mask_color)
+ bitmaptools.blit(loop_image, image, 0, 0)
+ bitmaptools.blit(loop_image, image, x_offset, y_offset)
+
+ return loop_image
+
+ def left(self, message, duration=1, count=1):
+ """Loop a message towards the left side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the right and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.width, self._display.width)
+ loop_image = self._create_loop_image(
+ message.buffer, distance, 0, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_x -= 1
+ if current_x < 0 - message.buffer.width:
+ current_x += distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
+
+ def right(self, message, duration=1, count=1):
+ """Loop a message towards the right side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the left and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.width, self._display.width)
+ loop_image = self._create_loop_image(
+ message.buffer, distance, 0, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_x += 1
+ if current_x > 0:
+ current_x -= distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
+
+ def up(self, message, duration=0.5, count=1):
+ """Loop a message towards the top side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the bottom and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.height, self._display.height)
+ loop_image = self._create_loop_image(
+ message.buffer, 0, distance, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_y -= 1
+ if current_y < 0 - message.buffer.height:
+ current_y += distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
+
+ def down(self, message, duration=0.5, count=1):
+ """Loop a message towards the bottom side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the top and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.height, self._display.height)
+ loop_image = self._create_loop_image(
+ message.buffer, 0, distance, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_y += 1
+ if current_y > 0:
+ current_y -= distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/scroll.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/scroll.py
new file mode 100755
index 000000000..008d77d0f
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/scroll.py
@@ -0,0 +1,170 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+from . import Animation
+
+
+class Scroll(Animation):
+ def scroll_from_to(self, message, duration, start_x, start_y, end_x, end_y):
+ """
+ Scroll the message from one position to another over a certain period of
+ time.
+
+ :param message: The message to animate.
+ :param float duration: The period of time to perform the animation over in seconds.
+ :param int start_x: The Starting X Position
+ :param int start_yx: The Starting Y Position
+ :param int end_x: The Ending X Position
+ :param int end_y: The Ending Y Position
+ :type message: Message
+ """
+ steps = max(abs(end_x - start_x), abs(end_y - start_y))
+ if not steps:
+ return
+ increment_x = (end_x - start_x) / steps
+ increment_y = (end_y - start_y) / steps
+ for i in range(steps + 1):
+ start_time = time.monotonic()
+ current_x = start_x + round(i * increment_x)
+ current_y = start_y + round(i * increment_y)
+ self._draw(message, current_x, current_y)
+ if i <= steps:
+ self._wait(start_time, duration / steps)
+
+ def out_to_left(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the left
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, 0 - message.buffer.width, current_y
+ )
+
+ def in_from_left(self, message, duration=1, x=0):
+ """Scroll a message in from the left side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int x: (optional) The amount of x-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ 0 - message.buffer.width,
+ center_y,
+ center_x + x,
+ center_y,
+ )
+
+ def in_from_right(self, message, duration=1, x=0):
+ """Scroll a message in from the right side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int x: (optional) The amount of x-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message, duration, self._display.width - 1, center_y, center_x + x, center_y
+ )
+
+ def in_from_top(self, message, duration=1, y=0):
+ """Scroll a message in from the top side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int y: (optional) The amount of y-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ center_x,
+ 0 - message.buffer.height,
+ center_x,
+ center_y + y,
+ )
+
+ def in_from_bottom(self, message, duration=1, y=0):
+ """Scroll a message in from the bottom side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int y: (optional) The amount of y-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ center_x,
+ self._display.height - 1,
+ center_x,
+ center_y + y,
+ )
+
+ def out_to_right(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the right
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, self._display.width - 1, current_y
+ )
+
+ def out_to_top(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the top
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message,
+ duration,
+ current_x,
+ current_y,
+ current_x,
+ 0 - message.buffer.height,
+ )
+
+ def out_to_bottom(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the bottom
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, current_x, self._display.height - 1
+ )
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/split.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/split.py
new file mode 100755
index 000000000..b22c1953b
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/split.py
@@ -0,0 +1,222 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import displayio
+import bitmaptools
+from . import Animation
+
+
+class Split(Animation):
+ def out_horizontally(self, message, duration=0.5):
+ """Show the effect of a message splitting horizontally
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ image = message.buffer
+ left_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ left_image, image, 0, 0, x1=0, y1=0, x2=image.width // 2, y2=image.height
+ )
+
+ right_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ right_image,
+ image,
+ 0,
+ 0,
+ x1=image.width // 2,
+ y1=0,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.width // 2
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ effect_buffer = displayio.Bitmap(
+ self._display.width + image.width, image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ bitmaptools.blit(effect_buffer, left_image, distance - i, 0)
+ bitmaptools.blit(
+ effect_buffer, right_image, distance + image.width // 2 + i, 0
+ )
+
+ self._draw(
+ effect_buffer,
+ current_x - self._display.width // 2,
+ current_y,
+ message.opacity,
+ post_draw_position=(current_x - self._display.width // 2, current_y),
+ )
+ self._wait(start_time, duration / distance)
+
+ def out_vertically(self, message, duration=0.5):
+ """Show the effect of a message splitting vertically
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ image = message.buffer
+
+ top_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ top_image, image, 0, 0, x1=0, y1=0, x2=image.width, y2=image.height // 2
+ )
+
+ bottom_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ bottom_image,
+ image,
+ 0,
+ 0,
+ x1=0,
+ y1=image.height // 2,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.height // 2
+ effect_buffer_width = self._display.width
+ if current_x < 0:
+ effect_buffer_width -= current_x
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ effect_buffer = displayio.Bitmap(
+ effect_buffer_width, self._display.height + image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ bitmaptools.blit(effect_buffer, top_image, 0, distance - i)
+ bitmaptools.blit(
+ effect_buffer, bottom_image, 0, distance + image.height // 2 + i + 1
+ )
+
+ self._draw(
+ effect_buffer,
+ current_x,
+ current_y - self._display.height // 2,
+ message.opacity,
+ post_draw_position=(current_x, current_y - self._display.height // 2),
+ )
+ self._wait(start_time, duration / distance)
+
+ def in_horizontally(self, message, duration=0.5):
+ """Show the effect of a split message joining horizontally
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x = int(self._display.width / 2 - message.buffer.width / 2)
+ current_y = int(self._display.height / 2 - message.buffer.height / 2)
+ image = message.buffer
+ left_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ left_image, image, 0, 0, x1=0, y1=0, x2=image.width // 2, y2=image.height
+ )
+
+ right_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ right_image,
+ image,
+ 0,
+ 0,
+ x1=image.width // 2,
+ y1=0,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.width // 2
+ effect_buffer = displayio.Bitmap(
+ self._display.width + image.width, image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ bitmaptools.blit(effect_buffer, left_image, i, 0)
+ bitmaptools.blit(
+ effect_buffer,
+ right_image,
+ self._display.width + image.width // 2 - i + 1,
+ 0,
+ )
+ self._draw(
+ effect_buffer,
+ current_x - self._display.width // 2,
+ current_y,
+ message.opacity,
+ post_draw_position=(current_x, current_y),
+ )
+ self._wait(start_time, duration / distance)
+
+ def in_vertically(self, message, duration=0.5):
+ """Show the effect of a split message joining vertically
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x = int(self._display.width / 2 - message.buffer.width / 2)
+ current_y = int(self._display.height / 2 - message.buffer.height / 2)
+
+ image = message.buffer
+ top_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ top_image, image, 0, 0, x1=0, y1=0, x2=image.width, y2=image.height // 2
+ )
+
+ bottom_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ bottom_image,
+ image,
+ 0,
+ 0,
+ x1=0,
+ y1=image.height // 2,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.height // 2
+ effect_buffer_width = self._display.width
+ if current_x < 0:
+ effect_buffer_width -= current_x
+
+ effect_buffer = displayio.Bitmap(
+ effect_buffer_width, self._display.height + image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ bitmaptools.blit(effect_buffer, top_image, 0, i + 1)
+ bitmaptools.blit(
+ effect_buffer,
+ bottom_image,
+ 0,
+ self._display.height + image.height // 2 - i + 1,
+ )
+
+ self._draw(
+ effect_buffer,
+ current_x,
+ current_y - self._display.height // 2,
+ message.opacity,
+ post_draw_position=(current_x, current_y),
+ )
+ self._wait(start_time, duration / distance)
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/static.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/static.py
new file mode 100755
index 000000000..3526077b7
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/static.py
@@ -0,0 +1,101 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+from . import Animation
+
+
+class Static(Animation):
+ def show(self, message):
+ """Show the message at its current position.
+
+ :param message: The message to show.
+ :type message: Message
+ """
+ x, y = self._position
+ self._draw(message, x, y)
+
+ def hide(self, message):
+ """Hide the message at its current position.
+
+ :param message: The message to hide.
+ :type message: Message
+ """
+ x, y = self._position
+ self._draw(message, x, y, opacity=0)
+
+ def blink(self, message, count=3, duration=1):
+ """Blink the foreground on and off a centain number of
+ times over a certain period of time.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to blink. (default=3)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ delay = duration / count / 2
+ for _ in range(count):
+ start_time = time.monotonic()
+ self.hide(message)
+ start_time = self._wait(start_time, delay)
+ self.show(message)
+ self._wait(start_time, delay)
+
+ def flash(self, message, count=3, duration=1):
+ """Fade the foreground in and out a centain number of
+ times over a certain period of time.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to flash. (default=3)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ delay = duration / count / 2
+ steps = 50 // count
+ for _ in range(count):
+ self.fade_out(message, duration=delay, steps=steps)
+ self.fade_in(message, duration=delay, steps=steps)
+
+ def fade_in(self, message, duration=1, steps=50):
+ """Fade the foreground in over a certain period of time
+ by a certain number of steps. More steps is smoother, but too high
+ of a number may slow down the animation too much.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :param float steps: (optional) The number of steps to perform the animation. (default=50)
+ :type message: Message
+ """
+ current_x = int(self._display.width / 2 - message.buffer.width / 2)
+ current_y = int(self._display.height / 2 - message.buffer.height / 2)
+ delay = duration / (steps + 1)
+ for opacity in range(steps + 1):
+ start_time = time.monotonic()
+ self._draw(message, current_x, current_y, opacity=opacity / steps)
+ self._wait(start_time, delay)
+
+ def fade_out(self, message, duration=1, steps=50):
+ """Fade the foreground out over a certain period of time
+ by a certain number of steps. More steps is smoother, but too high
+ of a number may slow down the animation too much.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :param float steps: (optional) The number of steps to perform the animation. (default=50)
+ :type message: Message
+ """
+ delay = duration / (steps + 1)
+ for opacity in range(steps + 1):
+ start_time = time.monotonic()
+ self._draw(
+ message,
+ self._position[0],
+ self._position[1],
+ opacity=(steps - opacity) / steps,
+ )
+ self._wait(start_time, delay)
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/doublebuffer.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/doublebuffer.py
new file mode 100755
index 000000000..998a5a624
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/doublebuffer.py
@@ -0,0 +1,58 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import displayio
+
+
+class DoubleBuffer:
+ def __init__(self, display, width, height, shader=None, bit_depth=16):
+ self._buffer_group = (displayio.Group(), displayio.Group())
+ self._buffer = (
+ displayio.Bitmap(width, height, 2**bit_depth - 1),
+ displayio.Bitmap(width, height, 2**bit_depth - 1),
+ )
+ self._x_offset = display.width - width
+ self._y_offset = display.height - height
+ self.display = display
+ self._active_buffer = 0 # The buffer we are updating
+
+ if shader is None:
+ shader = displayio.ColorConverter()
+
+ buffer0_sprite = displayio.TileGrid(
+ self._buffer[0],
+ pixel_shader=shader,
+ x=self._x_offset,
+ y=self._y_offset,
+ )
+ self._buffer_group[0].append(buffer0_sprite)
+
+ buffer1_sprite = displayio.TileGrid(
+ self._buffer[1],
+ pixel_shader=shader,
+ x=self._x_offset,
+ y=self._y_offset,
+ )
+ self._buffer_group[1].append(buffer1_sprite)
+
+ def show(self, swap=True):
+ self.display.root_group = self._buffer_group[self._active_buffer]
+ if swap:
+ self.swap()
+
+ def swap(self):
+ self._active_buffer = 0 if self._active_buffer else 1
+
+ @property
+ def active_buffer(self):
+ return self._buffer[self._active_buffer]
+
+ @property
+ def shader(self):
+ return self._buffer_group[0][0].pixel_shader
+
+ @shader.setter
+ def shader(self, shader):
+ self._buffer_group[0][0].pixel_shader = shader
+ self._buffer_group[1][0].pixel_shader = shader
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/fontpool.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/fontpool.py
new file mode 100755
index 000000000..7665aa482
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/fontpool.py
@@ -0,0 +1,27 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import terminalio
+from adafruit_bitmap_font import bitmap_font
+
+
+class FontPool:
+ def __init__(self):
+ """Create a pool of fonts for reuse to avoid loading duplicates"""
+ self._fonts = {}
+ self.add_font("terminal")
+
+ def add_font(self, name, file=None):
+ if name in self._fonts:
+ return
+ if name == "terminal":
+ font = terminalio.FONT
+ else:
+ font = bitmap_font.load_font(file)
+ self._fonts[name] = font
+
+ def find_font(self, name):
+ if name in self._fonts:
+ return self._fonts[name]
+ return None
diff --git a/Matrix_Portal_S3_Message_Board/lib/messageboard/message.py b/Matrix_Portal_S3_Message_Board/lib/messageboard/message.py
new file mode 100755
index 000000000..125990641
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/lib/messageboard/message.py
@@ -0,0 +1,144 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import bitmaptools
+import displayio
+import adafruit_imageload
+from adafruit_display_text import bitmap_label
+
+
+class Message:
+ def __init__(
+ self,
+ font,
+ opacity=1.0,
+ mask_color=0xFF00FF,
+ blendmode=bitmaptools.BlendMode.Normal,
+ ):
+ self._current_font = font
+ self._current_color = 0xFF0000
+ self._buffer = displayio.Bitmap(0, 0, 65535)
+ self._cursor = [0, 0]
+ self.opacity = opacity
+ self._blendmode = blendmode
+ self._mask_color = 0
+ self.mask_color = mask_color
+ self._width = 0
+ self._height = 0
+
+ def _enlarge_buffer(self, width, height):
+ """Resize the message buffer to grow as necessary"""
+ new_width = self._width
+ if self._cursor[0] + width >= self._width:
+ new_width = self._cursor[0] + width
+
+ new_height = self._height
+ if self._cursor[1] + height >= self._height:
+ new_height = self._cursor[1] + height
+
+ if new_width > self._width or new_height > self._height:
+ new_buffer = displayio.Bitmap(new_width, new_height, 65535)
+ if self._mask_color is not None:
+ bitmaptools.fill_region(
+ new_buffer, 0, 0, new_width, new_height, self._mask_color
+ )
+ bitmaptools.blit(new_buffer, self._buffer, 0, 0)
+ self._buffer = new_buffer
+ self._width = new_width
+ self._height = new_height
+
+ def _add_bitmap(self, bitmap, x_offset=0, y_offset=0):
+ new_width, new_height = (
+ self._cursor[0] + bitmap.width + x_offset,
+ self._cursor[1] + bitmap.height + y_offset,
+ )
+ # Resize the buffer if necessary
+ self._enlarge_buffer(new_width, new_height)
+ # Blit the image into the buffer
+ source_left, source_top = 0, 0
+ if self._cursor[0] + x_offset < 0:
+ source_left = 0 - (self._cursor[0] + x_offset)
+ x_offset = 0
+ if self._cursor[1] + y_offset < 0:
+ source_top = 0 - (self._cursor[1] + y_offset)
+ y_offset = 0
+ bitmaptools.blit(
+ self._buffer,
+ bitmap,
+ self._cursor[0] + x_offset,
+ self._cursor[1] + y_offset,
+ x1=source_left,
+ y1=source_top,
+ )
+ # Move the cursor
+ self._cursor[0] += bitmap.width + x_offset
+
+ def add_text(
+ self,
+ text,
+ color=None,
+ font=None,
+ x_offset=0,
+ y_offset=0,
+ ):
+ if font is None:
+ font = self._current_font
+ if color is None:
+ color = self._current_color
+ color_565value = displayio.ColorConverter().convert(color)
+ # Create a bitmap label and add it to the buffer
+ bmp_label = bitmap_label.Label(font, text=text)
+ color_overlay = displayio.Bitmap(
+ bmp_label.bitmap.width, bmp_label.bitmap.height, 65535
+ )
+ color_overlay.fill(color_565value)
+ mask_overlay = displayio.Bitmap(
+ bmp_label.bitmap.width, bmp_label.bitmap.height, 65535
+ )
+ mask_overlay.fill(self._mask_color)
+ bitmaptools.blit(color_overlay, bmp_label.bitmap, 0, 0, skip_source_index=1)
+ bitmaptools.blit(
+ color_overlay, mask_overlay, 0, 0, skip_dest_index=color_565value
+ )
+ bmp_label = None
+
+ self._add_bitmap(color_overlay, x_offset, y_offset)
+
+ def add_image(self, image, x_offset=0, y_offset=0):
+ # Load the image with imageload and add it to the buffer
+ bmp_image, _ = adafruit_imageload.load(image)
+ self._add_bitmap(bmp_image, x_offset, y_offset)
+
+ def clear(self):
+ """Clear the canvas content, but retain all of the style settings"""
+ self._buffer = displayio.Bitmap(0, 0, 65535)
+ self._cursor = [0, 0]
+ self._width = 0
+ self._height = 0
+
+ @property
+ def buffer(self):
+ """Return the current buffer"""
+ if self._width == 0 or self._height == 0:
+ raise RuntimeError("No content in the message")
+ return self._buffer
+
+ @property
+ def mask_color(self):
+ """Get or Set the mask color"""
+ return self._mask_color
+
+ @mask_color.setter
+ def mask_color(self, value):
+ self._mask_color = displayio.ColorConverter().convert(value)
+
+ @property
+ def blendmode(self):
+ """Get or Set the blendmode"""
+ return self._blendmode
+
+ @blendmode.setter
+ def blendmode(self, value):
+ if value in bitmaptools.BlendMode:
+ self._blendmode = value
diff --git a/Matrix_Portal_S3_Message_Board/settings.toml b/Matrix_Portal_S3_Message_Board/settings.toml
new file mode 100644
index 000000000..ba919ea8e
--- /dev/null
+++ b/Matrix_Portal_S3_Message_Board/settings.toml
@@ -0,0 +1,11 @@
+# SPDX-FileCopyrightText: 2023 Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# This is where you store the credentials necessary for your code.
+# The associated demo only requires WiFi, but you can include any
+# credentials here, such as Adafruit IO username and key, etc.
+CIRCUITPY_WIFI_SSID = "Your WIFI SSID"
+CIRCUITPY_WIFI_PASSWORD = "Wifi Password"
+AIO_USERNAME = "username"
+AIO_KEY = "adafruitIO key"
\ No newline at end of file
diff --git a/Matrix_Portal_S3_SMS_Scroller/Matrix Portal SMS Fonts.zip b/Matrix_Portal_S3_SMS_Scroller/Matrix Portal SMS Fonts.zip
new file mode 100644
index 000000000..e8bf57361
Binary files /dev/null and b/Matrix_Portal_S3_SMS_Scroller/Matrix Portal SMS Fonts.zip differ
diff --git a/Matrix_Portal_S3_SMS_Scroller/code.py b/Matrix_Portal_S3_SMS_Scroller/code.py
new file mode 100755
index 000000000..0f768643a
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/code.py
@@ -0,0 +1,150 @@
+# SPDX-FileCopyrightText: 2023 Melissa-LeBlanc-Williams for Adafruit Industries
+# SPDX-FileCopyrightText: 2020 John Park for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# Quote board matrix display
+# uses AdafruitIO to serve up a quote text feed and color feed
+# random messages are displayed, updates periodically to look for new messages
+# avoids repeating the same quote twice in a row
+
+import time
+import random
+from collections import deque
+import board
+from adafruit_matrixportal.matrix import Matrix
+from adafruit_matrixportal.network import Network
+from messageboard import MessageBoard
+from messageboard.fontpool import FontPool
+from messageboard.message import Message
+
+WIDTH = 64
+HEIGHT = 32
+DEFAULT_COLOR = 0x0000FF
+DEFAULT_MESSAGE = "Text Adafruit IO to update"
+DEFAULT_FONT = "arial_sm"
+MESSAGES_FEED = "text"
+COLORS_FEED = "color"
+UPDATE_DELAY = 50 # Seconds between updates
+SCROLL_DURATION = 5 # Seconds to scroll entire message
+RANDOMIZE_FONTS = True # Randomize fonts, make "False" to just use the default font
+RANDOMIZE_COLORS = True # Randomise colors, make "False" to just use the default color
+KEEP_LATEST_MESSAGE = True # Keep the last message in the Message Feed
+
+# --- Display setup ---
+matrix = Matrix(width=WIDTH, height=HEIGHT, bit_depth=5)
+network = Network(status_neopixel=board.NEOPIXEL, debug=True)
+messageboard = MessageBoard(matrix)
+
+fontpool = FontPool()
+fontpool.add_font("arial_sm", "fonts/Arial-10.pcf")
+fontpool.add_font("arial_lg", "fonts/Arial-15.pcf")
+fontpool.add_font("sofia", "fonts/Sofia-Regular-15.pcf")
+
+system_message = Message(fontpool.find_font("arial_sm"))
+
+message_fonts = ("sofia", "arial_lg")
+
+message_queue = deque((), 10000) # Use a double-ended queue for messages
+colors = []
+
+def update_data():
+ print("Updating data from Adafruit IO")
+ # Only show connecting message if not connected
+ if not network.is_connected:
+ system_message.clear()
+ system_message.add_text("Connecting", color=0xFFFF00)
+ messageboard.animate(system_message, "Static", "show")
+
+ try:
+ color_data = network.get_io_data(COLORS_FEED)
+ colors.clear()
+ for json_data in color_data:
+ color = network.json_traverse(json_data, ["value"])
+ colors.append(int(color[1:], 16))
+ # pylint: disable=broad-except
+ except Exception as error:
+ print(error)
+
+ try:
+ messages_data = network.get_io_data(MESSAGES_FEED)
+ message_ids = []
+ messages = [] # Temporary place for messages
+ for json_data in messages_data:
+ message_ids.append(network.json_traverse(json_data, ["id"]))
+ messages.append(network.json_traverse(json_data, ["value"]))
+
+ # Results are returned in reverse order, so we reverse that and add to end of queue
+ messages.reverse()
+ for m in messages:
+ message_queue.append(m)
+
+ # Remove any messages that have been grabbed except the latest one if setting enabled
+ start_index = 1 if KEEP_LATEST_MESSAGE else 0
+ for index in range(start_index, len(message_ids)):
+ message_id = message_ids[index]
+ network.delete_io_data(MESSAGES_FEED, message_id)
+
+ # pylint: disable=broad-except
+ except Exception as error:
+ print(error)
+
+ messageboard.animate(system_message, "Static", "hide")
+
+def get_new_rand_item(current_index, item_list):
+ if not item_list:
+ return None
+ if len(item_list) > 1 and current_index is not None:
+ new_index = current_index
+ while new_index == current_index:
+ new_index = random.randrange(0, len(item_list))
+ else:
+ new_index = random.randrange(0, len(item_list))
+ return new_index
+
+
+update_data()
+last_update = time.monotonic()
+quote_index = None
+color_index = None
+font_index = None
+message_text = None
+
+while True:
+ if len(message_queue) >= 1:
+ message_text = message_queue.popleft()
+
+ if message_text is None:
+ message_text = DEFAULT_MESSAGE
+
+ # Choose a random color from colors
+ if RANDOMIZE_COLORS:
+ color_index = get_new_rand_item(color_index, colors)
+ if color_index is None:
+ message_color = DEFAULT_COLOR
+ else:
+ message_color = colors[color_index]
+ else:
+ message_color = DEFAULT_COLOR
+
+ # Choose a random font from message_fonts
+ if RANDOMIZE_FONTS:
+ font_index = get_new_rand_item(font_index, message_fonts)
+ if font_index is None:
+ message_font = DEFAULT_FONT
+ else:
+ message_font = message_fonts[font_index]
+ else:
+ message_font = DEFAULT_FONT
+
+ # Set the quote text and color
+ message = Message(fontpool.find_font(message_font))
+ message.add_text(message_text, color=message_color)
+
+ # Scroll the message
+ duration = SCROLL_DURATION
+ messageboard.animate(message, "Scroll", "right_to_left", duration=SCROLL_DURATION)
+
+ if time.monotonic() > last_update + UPDATE_DELAY:
+ update_data()
+ last_update = time.monotonic()
diff --git a/Matrix_Portal_S3_SMS_Scroller/fonts/Arial-10.pcf b/Matrix_Portal_S3_SMS_Scroller/fonts/Arial-10.pcf
new file mode 100755
index 000000000..72aa2350f
Binary files /dev/null and b/Matrix_Portal_S3_SMS_Scroller/fonts/Arial-10.pcf differ
diff --git a/Matrix_Portal_S3_SMS_Scroller/fonts/Arial-15.pcf b/Matrix_Portal_S3_SMS_Scroller/fonts/Arial-15.pcf
new file mode 100755
index 000000000..440d0bc08
Binary files /dev/null and b/Matrix_Portal_S3_SMS_Scroller/fonts/Arial-15.pcf differ
diff --git a/Matrix_Portal_S3_SMS_Scroller/fonts/Comic-10.pcf b/Matrix_Portal_S3_SMS_Scroller/fonts/Comic-10.pcf
new file mode 100755
index 000000000..9bf570b97
Binary files /dev/null and b/Matrix_Portal_S3_SMS_Scroller/fonts/Comic-10.pcf differ
diff --git a/Matrix_Portal_S3_SMS_Scroller/fonts/DejaVuSans-10.pcf b/Matrix_Portal_S3_SMS_Scroller/fonts/DejaVuSans-10.pcf
new file mode 100755
index 000000000..1d9948ec2
Binary files /dev/null and b/Matrix_Portal_S3_SMS_Scroller/fonts/DejaVuSans-10.pcf differ
diff --git a/Matrix_Portal_S3_SMS_Scroller/fonts/Sofia-Regular-15.pcf b/Matrix_Portal_S3_SMS_Scroller/fonts/Sofia-Regular-15.pcf
new file mode 100755
index 000000000..497e935b9
Binary files /dev/null and b/Matrix_Portal_S3_SMS_Scroller/fonts/Sofia-Regular-15.pcf differ
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/__init__.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/__init__.py
new file mode 100755
index 000000000..949f42fa6
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/__init__.py
@@ -0,0 +1,164 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import bitmaptools
+import displayio
+import adafruit_imageload
+from .doublebuffer import DoubleBuffer
+from .message import Message
+
+
+class MessageBoard:
+ def __init__(self, matrix):
+ self.fonts = {}
+ self.display = matrix.display
+ self._buffer_width = self.display.width * 2
+ self._buffer_height = self.display.height * 2
+ self._dbl_buf = DoubleBuffer(
+ self.display, self._buffer_width, self._buffer_height
+ )
+ self._background = None
+ self.set_background() # Set to black
+ self._position = (0, 0)
+
+ def set_background(self, file_or_color=0x000000):
+ """The background image to a bitmap file."""
+ if isinstance(file_or_color, str): # its a filenme:
+ background, bg_shader = adafruit_imageload.load(file_or_color)
+ self._dbl_buf.shader = bg_shader
+ self._background = background
+ elif isinstance(file_or_color, int):
+ # Make a background color fill
+ bg_shader = displayio.ColorConverter(
+ input_colorspace=displayio.Colorspace.RGB565
+ )
+ background = displayio.Bitmap(
+ self.display.width, self.display.height, 65535
+ )
+ background.fill(displayio.ColorConverter().convert(file_or_color))
+ self._dbl_buf.shader = bg_shader
+ self._background = background
+ else:
+ raise RuntimeError("Unknown type of background")
+
+ def animate(self, message, animation_class, animation_function, **kwargs):
+ anim_class = __import__(
+ f"{self.__module__}.animations.{animation_class.lower()}"
+ )
+ anim_class = getattr(anim_class, "animations")
+ anim_class = getattr(anim_class, animation_class.lower())
+ anim_class = getattr(anim_class, animation_class)
+ animation = anim_class(
+ self.display, self._draw, self._position
+ ) # Instantiate the class
+ # Call the animation function and pass kwargs along with the message (positional)
+ anim_func = getattr(animation, animation_function)
+ anim_func(message, **kwargs)
+
+ def set_message_position(self, x, y):
+ """Set the position of the message on the display"""
+ self._position = (x, y)
+
+ def _draw(
+ self,
+ image,
+ x,
+ y,
+ opacity=None,
+ mask_color=0xFF00FF,
+ blendmode=bitmaptools.BlendMode.Normal,
+ post_draw_position=None,
+ ):
+ """Draws a message to the buffer taking its current settings into account.
+ It also sets the current position and performs a swap.
+ """
+ self._position = (x, y)
+ buffer_x_offset = self._buffer_width - self.display.width
+ buffer_y_offset = self._buffer_height - self.display.height
+
+ # Image can be a message in which case its properties will be used
+ if isinstance(image, Message):
+ if opacity is None:
+ opacity = image.opacity
+ mask_color = image.mask_color
+ blendmode = image.blendmode
+ image = image.buffer
+ if opacity is None:
+ opacity = 1.0
+
+ if mask_color > 65535:
+ mask_color = displayio.ColorConverter().convert(mask_color)
+
+ # Blit the background
+ bitmaptools.blit(
+ self._dbl_buf.active_buffer,
+ self._background,
+ buffer_x_offset,
+ buffer_y_offset,
+ )
+
+ # If the image is wider than the display buffer, we need to shrink it
+ while x + buffer_x_offset < 0:
+ new_image = displayio.Bitmap(
+ image.width - self.display.width, image.height, 65535
+ )
+ bitmaptools.blit(
+ new_image,
+ image,
+ 0,
+ 0,
+ x1=self.display.width,
+ y1=0,
+ x2=image.width,
+ y2=image.height,
+ )
+ x += self.display.width
+ self._position = (x, y) # Update the stored position
+ image = new_image
+
+ # If the image is taller than the display buffer, we need to shrink it
+ while y + buffer_y_offset < 0:
+ new_image = displayio.Bitmap(
+ image.width, image.height - self.display.height, 65535
+ )
+ bitmaptools.blit(
+ new_image,
+ image,
+ 0,
+ 0,
+ x1=0,
+ y1=self.display.height,
+ x2=image.width,
+ y2=image.height,
+ )
+ y += self.display.height
+ self._position = (x, y) # Update the stored position
+ image = new_image
+
+ # Clear the foreground buffer
+ foreground_buffer = displayio.Bitmap(
+ self._buffer_width, self._buffer_height, 65535
+ )
+ foreground_buffer.fill(mask_color)
+
+ bitmaptools.blit(
+ foreground_buffer, image, x + buffer_x_offset, y + buffer_y_offset
+ )
+
+ # Blend the foreground buffer into the main buffer
+ bitmaptools.alphablend(
+ self._dbl_buf.active_buffer,
+ self._dbl_buf.active_buffer,
+ foreground_buffer,
+ displayio.Colorspace.RGB565,
+ 1.0,
+ opacity,
+ blendmode=blendmode,
+ skip_source2_index=mask_color,
+ )
+ self._dbl_buf.show()
+
+ # Allow for an override of the position after drawing (needed for split effects)
+ if post_draw_position is not None and isinstance(post_draw_position, tuple):
+ self._position = post_draw_position
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/__init__.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/__init__.py
new file mode 100755
index 000000000..b72a2a493
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/__init__.py
@@ -0,0 +1,24 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+
+
+class Animation:
+ def __init__(self, display, draw_callback, starting_position=(0, 0)):
+ self._display = display
+ self._position = starting_position
+ self._draw = draw_callback
+
+ @staticmethod
+ def _wait(start_time, duration):
+ """Uses time.monotonic() to wait from the start time for a specified duration"""
+ while time.monotonic() < (start_time + duration):
+ pass
+ return time.monotonic()
+
+ def _get_centered_position(self, message):
+ return int(self._display.width / 2 - message.buffer.width / 2), int(
+ self._display.height / 2 - message.buffer.height / 2
+ )
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/loop.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/loop.py
new file mode 100755
index 000000000..2baad163d
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/loop.py
@@ -0,0 +1,146 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import displayio
+import bitmaptools
+from . import Animation
+
+
+class Loop(Animation):
+ def _create_loop_image(self, image, x_offset, y_offset, mask_color):
+ """Attach a copy of an image by a certain offset so it can be looped."""
+ if 0 < x_offset < self._display.width:
+ x_offset = self._display.width
+ if 0 < y_offset < self._display.height:
+ y_offset = self._display.height
+
+ loop_image = displayio.Bitmap(
+ image.width + x_offset, image.height + y_offset, 65535
+ )
+ loop_image.fill(mask_color)
+ bitmaptools.blit(loop_image, image, 0, 0)
+ bitmaptools.blit(loop_image, image, x_offset, y_offset)
+
+ return loop_image
+
+ def left(self, message, duration=1, count=1):
+ """Loop a message towards the left side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the right and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.width, self._display.width)
+ loop_image = self._create_loop_image(
+ message.buffer, distance, 0, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_x -= 1
+ if current_x < 0 - message.buffer.width:
+ current_x += distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
+
+ def right(self, message, duration=1, count=1):
+ """Loop a message towards the right side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the left and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.width, self._display.width)
+ loop_image = self._create_loop_image(
+ message.buffer, distance, 0, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_x += 1
+ if current_x > 0:
+ current_x -= distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
+
+ def up(self, message, duration=0.5, count=1):
+ """Loop a message towards the top side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the bottom and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.height, self._display.height)
+ loop_image = self._create_loop_image(
+ message.buffer, 0, distance, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_y -= 1
+ if current_y < 0 - message.buffer.height:
+ current_y += distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
+
+ def down(self, message, duration=0.5, count=1):
+ """Loop a message towards the bottom side of the display over a certain period of time by a
+ certain number of times. The message will re-enter from the top and end up back a the
+ starting position.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to loop. (default=1)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ distance = max(message.buffer.height, self._display.height)
+ loop_image = self._create_loop_image(
+ message.buffer, 0, distance, message.mask_color
+ )
+ for _ in range(count):
+ for _ in range(distance):
+ start_time = time.monotonic()
+ current_y += 1
+ if current_y > 0:
+ current_y -= distance
+ self._draw(
+ loop_image,
+ current_x,
+ current_y,
+ message.opacity,
+ )
+ self._wait(start_time, duration / distance / count)
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/scroll.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/scroll.py
new file mode 100755
index 000000000..f05205a46
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/scroll.py
@@ -0,0 +1,188 @@
+# Write your code here :-)
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+from . import Animation
+
+
+class Scroll(Animation):
+ def scroll_from_to(self, message, duration, start_x, start_y, end_x, end_y):
+ """
+ Scroll the message from one position to another over a certain period of
+ time.
+
+ :param message: The message to animate.
+ :param float duration: The period of time to perform the animation over in seconds.
+ :param int start_x: The Starting X Position
+ :param int start_yx: The Starting Y Position
+ :param int end_x: The Ending X Position
+ :param int end_y: The Ending Y Position
+ :type message: Message
+ """
+ steps = max(abs(end_x - start_x), abs(end_y - start_y))
+ if not steps:
+ return
+ increment_x = (end_x - start_x) / steps
+ increment_y = (end_y - start_y) / steps
+ for i in range(steps + 1):
+ start_time = time.monotonic()
+ current_x = start_x + round(i * increment_x)
+ current_y = start_y + round(i * increment_y)
+ self._draw(message, current_x, current_y)
+ if i <= steps:
+ self._wait(start_time, duration / steps)
+
+ def out_to_left(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the left
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, 0 - message.buffer.width, current_y
+ )
+
+ def in_from_left(self, message, duration=1, x=0):
+ """Scroll a message in from the left side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int x: (optional) The amount of x-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ 0 - message.buffer.width,
+ center_y,
+ center_x + x,
+ center_y,
+ )
+
+ def in_from_right(self, message, duration=1, x=0):
+ """Scroll a message in from the right side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int x: (optional) The amount of x-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message, duration, self._display.width - 1, center_y, center_x + x, center_y
+ )
+
+ def in_from_top(self, message, duration=1, y=0):
+ """Scroll a message in from the top side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int y: (optional) The amount of y-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ center_x,
+ 0 - message.buffer.height,
+ center_x,
+ center_y + y,
+ )
+
+ def in_from_bottom(self, message, duration=1, y=0):
+ """Scroll a message in from the bottom side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int y: (optional) The amount of y-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ center_x,
+ self._display.height - 1,
+ center_x,
+ center_y + y,
+ )
+
+ def out_to_right(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the right
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, self._display.width - 1, current_y
+ )
+
+ def out_to_top(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the top
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message,
+ duration,
+ current_x,
+ current_y,
+ current_x,
+ 0 - message.buffer.height,
+ )
+
+ def out_to_bottom(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the bottom
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, current_x, self._display.height - 1
+ )
+
+ def right_to_left(self, message, duration=1):
+ """Scroll a message in from the right side of the display and then out the left side
+ over a certain period of time. The final position is off-screen to the left.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ # pylint: disable=unused-variable
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message, duration,
+ self._display.width - 1, center_y,
+ - message.buffer.width, center_y
+ )
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/scroll.py.sb-9f345cee-oxZXpM b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/scroll.py.sb-9f345cee-oxZXpM
new file mode 100755
index 000000000..008d77d0f
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/scroll.py.sb-9f345cee-oxZXpM
@@ -0,0 +1,170 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+from . import Animation
+
+
+class Scroll(Animation):
+ def scroll_from_to(self, message, duration, start_x, start_y, end_x, end_y):
+ """
+ Scroll the message from one position to another over a certain period of
+ time.
+
+ :param message: The message to animate.
+ :param float duration: The period of time to perform the animation over in seconds.
+ :param int start_x: The Starting X Position
+ :param int start_yx: The Starting Y Position
+ :param int end_x: The Ending X Position
+ :param int end_y: The Ending Y Position
+ :type message: Message
+ """
+ steps = max(abs(end_x - start_x), abs(end_y - start_y))
+ if not steps:
+ return
+ increment_x = (end_x - start_x) / steps
+ increment_y = (end_y - start_y) / steps
+ for i in range(steps + 1):
+ start_time = time.monotonic()
+ current_x = start_x + round(i * increment_x)
+ current_y = start_y + round(i * increment_y)
+ self._draw(message, current_x, current_y)
+ if i <= steps:
+ self._wait(start_time, duration / steps)
+
+ def out_to_left(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the left
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, 0 - message.buffer.width, current_y
+ )
+
+ def in_from_left(self, message, duration=1, x=0):
+ """Scroll a message in from the left side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int x: (optional) The amount of x-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ 0 - message.buffer.width,
+ center_y,
+ center_x + x,
+ center_y,
+ )
+
+ def in_from_right(self, message, duration=1, x=0):
+ """Scroll a message in from the right side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int x: (optional) The amount of x-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message, duration, self._display.width - 1, center_y, center_x + x, center_y
+ )
+
+ def in_from_top(self, message, duration=1, y=0):
+ """Scroll a message in from the top side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int y: (optional) The amount of y-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ center_x,
+ 0 - message.buffer.height,
+ center_x,
+ center_y + y,
+ )
+
+ def in_from_bottom(self, message, duration=1, y=0):
+ """Scroll a message in from the bottom side of the display over a certain period of
+ time. The final position is centered.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :param int y: (optional) The amount of y-offset from the center position (default=0)
+ :type message: Message
+ """
+ center_x, center_y = self._get_centered_position(message)
+ self.scroll_from_to(
+ message,
+ duration,
+ center_x,
+ self._display.height - 1,
+ center_x,
+ center_y + y,
+ )
+
+ def out_to_right(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the right
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, self._display.width - 1, current_y
+ )
+
+ def out_to_top(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the top
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message,
+ duration,
+ current_x,
+ current_y,
+ current_x,
+ 0 - message.buffer.height,
+ )
+
+ def out_to_bottom(self, message, duration=1):
+ """Scroll a message off the display from its current position towards the bottom
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over in seconds. (default=1)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ self.scroll_from_to(
+ message, duration, current_x, current_y, current_x, self._display.height - 1
+ )
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/split.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/split.py
new file mode 100755
index 000000000..b22c1953b
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/split.py
@@ -0,0 +1,222 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import displayio
+import bitmaptools
+from . import Animation
+
+
+class Split(Animation):
+ def out_horizontally(self, message, duration=0.5):
+ """Show the effect of a message splitting horizontally
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ image = message.buffer
+ left_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ left_image, image, 0, 0, x1=0, y1=0, x2=image.width // 2, y2=image.height
+ )
+
+ right_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ right_image,
+ image,
+ 0,
+ 0,
+ x1=image.width // 2,
+ y1=0,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.width // 2
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ effect_buffer = displayio.Bitmap(
+ self._display.width + image.width, image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ bitmaptools.blit(effect_buffer, left_image, distance - i, 0)
+ bitmaptools.blit(
+ effect_buffer, right_image, distance + image.width // 2 + i, 0
+ )
+
+ self._draw(
+ effect_buffer,
+ current_x - self._display.width // 2,
+ current_y,
+ message.opacity,
+ post_draw_position=(current_x - self._display.width // 2, current_y),
+ )
+ self._wait(start_time, duration / distance)
+
+ def out_vertically(self, message, duration=0.5):
+ """Show the effect of a message splitting vertically
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x, current_y = self._position
+ image = message.buffer
+
+ top_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ top_image, image, 0, 0, x1=0, y1=0, x2=image.width, y2=image.height // 2
+ )
+
+ bottom_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ bottom_image,
+ image,
+ 0,
+ 0,
+ x1=0,
+ y1=image.height // 2,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.height // 2
+ effect_buffer_width = self._display.width
+ if current_x < 0:
+ effect_buffer_width -= current_x
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ effect_buffer = displayio.Bitmap(
+ effect_buffer_width, self._display.height + image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ bitmaptools.blit(effect_buffer, top_image, 0, distance - i)
+ bitmaptools.blit(
+ effect_buffer, bottom_image, 0, distance + image.height // 2 + i + 1
+ )
+
+ self._draw(
+ effect_buffer,
+ current_x,
+ current_y - self._display.height // 2,
+ message.opacity,
+ post_draw_position=(current_x, current_y - self._display.height // 2),
+ )
+ self._wait(start_time, duration / distance)
+
+ def in_horizontally(self, message, duration=0.5):
+ """Show the effect of a split message joining horizontally
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x = int(self._display.width / 2 - message.buffer.width / 2)
+ current_y = int(self._display.height / 2 - message.buffer.height / 2)
+ image = message.buffer
+ left_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ left_image, image, 0, 0, x1=0, y1=0, x2=image.width // 2, y2=image.height
+ )
+
+ right_image = displayio.Bitmap(image.width // 2, image.height, 65535)
+ bitmaptools.blit(
+ right_image,
+ image,
+ 0,
+ 0,
+ x1=image.width // 2,
+ y1=0,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.width // 2
+ effect_buffer = displayio.Bitmap(
+ self._display.width + image.width, image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ bitmaptools.blit(effect_buffer, left_image, i, 0)
+ bitmaptools.blit(
+ effect_buffer,
+ right_image,
+ self._display.width + image.width // 2 - i + 1,
+ 0,
+ )
+ self._draw(
+ effect_buffer,
+ current_x - self._display.width // 2,
+ current_y,
+ message.opacity,
+ post_draw_position=(current_x, current_y),
+ )
+ self._wait(start_time, duration / distance)
+
+ def in_vertically(self, message, duration=0.5):
+ """Show the effect of a split message joining vertically
+ over a certain period of time.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=0.5)
+ :type message: Message
+ """
+ current_x = int(self._display.width / 2 - message.buffer.width / 2)
+ current_y = int(self._display.height / 2 - message.buffer.height / 2)
+
+ image = message.buffer
+ top_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ top_image, image, 0, 0, x1=0, y1=0, x2=image.width, y2=image.height // 2
+ )
+
+ bottom_image = displayio.Bitmap(image.width, image.height // 2, 65535)
+ bitmaptools.blit(
+ bottom_image,
+ image,
+ 0,
+ 0,
+ x1=0,
+ y1=image.height // 2,
+ x2=image.width,
+ y2=image.height,
+ )
+
+ distance = self._display.height // 2
+ effect_buffer_width = self._display.width
+ if current_x < 0:
+ effect_buffer_width -= current_x
+
+ effect_buffer = displayio.Bitmap(
+ effect_buffer_width, self._display.height + image.height, 65535
+ )
+ effect_buffer.fill(message.mask_color)
+ for i in range(distance + 1):
+ start_time = time.monotonic()
+ bitmaptools.blit(effect_buffer, top_image, 0, i + 1)
+ bitmaptools.blit(
+ effect_buffer,
+ bottom_image,
+ 0,
+ self._display.height + image.height // 2 - i + 1,
+ )
+
+ self._draw(
+ effect_buffer,
+ current_x,
+ current_y - self._display.height // 2,
+ message.opacity,
+ post_draw_position=(current_x, current_y),
+ )
+ self._wait(start_time, duration / distance)
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/static.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/static.py
new file mode 100755
index 000000000..3526077b7
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/animations/static.py
@@ -0,0 +1,101 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+from . import Animation
+
+
+class Static(Animation):
+ def show(self, message):
+ """Show the message at its current position.
+
+ :param message: The message to show.
+ :type message: Message
+ """
+ x, y = self._position
+ self._draw(message, x, y)
+
+ def hide(self, message):
+ """Hide the message at its current position.
+
+ :param message: The message to hide.
+ :type message: Message
+ """
+ x, y = self._position
+ self._draw(message, x, y, opacity=0)
+
+ def blink(self, message, count=3, duration=1):
+ """Blink the foreground on and off a centain number of
+ times over a certain period of time.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to blink. (default=3)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ delay = duration / count / 2
+ for _ in range(count):
+ start_time = time.monotonic()
+ self.hide(message)
+ start_time = self._wait(start_time, delay)
+ self.show(message)
+ self._wait(start_time, delay)
+
+ def flash(self, message, count=3, duration=1):
+ """Fade the foreground in and out a centain number of
+ times over a certain period of time.
+
+ :param message: The message to animate.
+ :param float count: (optional) The number of times to flash. (default=3)
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :type message: Message
+ """
+ delay = duration / count / 2
+ steps = 50 // count
+ for _ in range(count):
+ self.fade_out(message, duration=delay, steps=steps)
+ self.fade_in(message, duration=delay, steps=steps)
+
+ def fade_in(self, message, duration=1, steps=50):
+ """Fade the foreground in over a certain period of time
+ by a certain number of steps. More steps is smoother, but too high
+ of a number may slow down the animation too much.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :param float steps: (optional) The number of steps to perform the animation. (default=50)
+ :type message: Message
+ """
+ current_x = int(self._display.width / 2 - message.buffer.width / 2)
+ current_y = int(self._display.height / 2 - message.buffer.height / 2)
+ delay = duration / (steps + 1)
+ for opacity in range(steps + 1):
+ start_time = time.monotonic()
+ self._draw(message, current_x, current_y, opacity=opacity / steps)
+ self._wait(start_time, delay)
+
+ def fade_out(self, message, duration=1, steps=50):
+ """Fade the foreground out over a certain period of time
+ by a certain number of steps. More steps is smoother, but too high
+ of a number may slow down the animation too much.
+
+ :param message: The message to animate.
+ :param float duration: (optional) The period of time to perform the animation
+ over. (default=1)
+ :param float steps: (optional) The number of steps to perform the animation. (default=50)
+ :type message: Message
+ """
+ delay = duration / (steps + 1)
+ for opacity in range(steps + 1):
+ start_time = time.monotonic()
+ self._draw(
+ message,
+ self._position[0],
+ self._position[1],
+ opacity=(steps - opacity) / steps,
+ )
+ self._wait(start_time, delay)
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/doublebuffer.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/doublebuffer.py
new file mode 100755
index 000000000..998a5a624
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/doublebuffer.py
@@ -0,0 +1,58 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import displayio
+
+
+class DoubleBuffer:
+ def __init__(self, display, width, height, shader=None, bit_depth=16):
+ self._buffer_group = (displayio.Group(), displayio.Group())
+ self._buffer = (
+ displayio.Bitmap(width, height, 2**bit_depth - 1),
+ displayio.Bitmap(width, height, 2**bit_depth - 1),
+ )
+ self._x_offset = display.width - width
+ self._y_offset = display.height - height
+ self.display = display
+ self._active_buffer = 0 # The buffer we are updating
+
+ if shader is None:
+ shader = displayio.ColorConverter()
+
+ buffer0_sprite = displayio.TileGrid(
+ self._buffer[0],
+ pixel_shader=shader,
+ x=self._x_offset,
+ y=self._y_offset,
+ )
+ self._buffer_group[0].append(buffer0_sprite)
+
+ buffer1_sprite = displayio.TileGrid(
+ self._buffer[1],
+ pixel_shader=shader,
+ x=self._x_offset,
+ y=self._y_offset,
+ )
+ self._buffer_group[1].append(buffer1_sprite)
+
+ def show(self, swap=True):
+ self.display.root_group = self._buffer_group[self._active_buffer]
+ if swap:
+ self.swap()
+
+ def swap(self):
+ self._active_buffer = 0 if self._active_buffer else 1
+
+ @property
+ def active_buffer(self):
+ return self._buffer[self._active_buffer]
+
+ @property
+ def shader(self):
+ return self._buffer_group[0][0].pixel_shader
+
+ @shader.setter
+ def shader(self, shader):
+ self._buffer_group[0][0].pixel_shader = shader
+ self._buffer_group[1][0].pixel_shader = shader
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/fontpool.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/fontpool.py
new file mode 100755
index 000000000..7665aa482
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/fontpool.py
@@ -0,0 +1,27 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import terminalio
+from adafruit_bitmap_font import bitmap_font
+
+
+class FontPool:
+ def __init__(self):
+ """Create a pool of fonts for reuse to avoid loading duplicates"""
+ self._fonts = {}
+ self.add_font("terminal")
+
+ def add_font(self, name, file=None):
+ if name in self._fonts:
+ return
+ if name == "terminal":
+ font = terminalio.FONT
+ else:
+ font = bitmap_font.load_font(file)
+ self._fonts[name] = font
+
+ def find_font(self, name):
+ if name in self._fonts:
+ return self._fonts[name]
+ return None
diff --git a/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/message.py b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/message.py
new file mode 100755
index 000000000..125990641
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/lib/messageboard/message.py
@@ -0,0 +1,144 @@
+# SPDX-FileCopyrightText: 2023 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import bitmaptools
+import displayio
+import adafruit_imageload
+from adafruit_display_text import bitmap_label
+
+
+class Message:
+ def __init__(
+ self,
+ font,
+ opacity=1.0,
+ mask_color=0xFF00FF,
+ blendmode=bitmaptools.BlendMode.Normal,
+ ):
+ self._current_font = font
+ self._current_color = 0xFF0000
+ self._buffer = displayio.Bitmap(0, 0, 65535)
+ self._cursor = [0, 0]
+ self.opacity = opacity
+ self._blendmode = blendmode
+ self._mask_color = 0
+ self.mask_color = mask_color
+ self._width = 0
+ self._height = 0
+
+ def _enlarge_buffer(self, width, height):
+ """Resize the message buffer to grow as necessary"""
+ new_width = self._width
+ if self._cursor[0] + width >= self._width:
+ new_width = self._cursor[0] + width
+
+ new_height = self._height
+ if self._cursor[1] + height >= self._height:
+ new_height = self._cursor[1] + height
+
+ if new_width > self._width or new_height > self._height:
+ new_buffer = displayio.Bitmap(new_width, new_height, 65535)
+ if self._mask_color is not None:
+ bitmaptools.fill_region(
+ new_buffer, 0, 0, new_width, new_height, self._mask_color
+ )
+ bitmaptools.blit(new_buffer, self._buffer, 0, 0)
+ self._buffer = new_buffer
+ self._width = new_width
+ self._height = new_height
+
+ def _add_bitmap(self, bitmap, x_offset=0, y_offset=0):
+ new_width, new_height = (
+ self._cursor[0] + bitmap.width + x_offset,
+ self._cursor[1] + bitmap.height + y_offset,
+ )
+ # Resize the buffer if necessary
+ self._enlarge_buffer(new_width, new_height)
+ # Blit the image into the buffer
+ source_left, source_top = 0, 0
+ if self._cursor[0] + x_offset < 0:
+ source_left = 0 - (self._cursor[0] + x_offset)
+ x_offset = 0
+ if self._cursor[1] + y_offset < 0:
+ source_top = 0 - (self._cursor[1] + y_offset)
+ y_offset = 0
+ bitmaptools.blit(
+ self._buffer,
+ bitmap,
+ self._cursor[0] + x_offset,
+ self._cursor[1] + y_offset,
+ x1=source_left,
+ y1=source_top,
+ )
+ # Move the cursor
+ self._cursor[0] += bitmap.width + x_offset
+
+ def add_text(
+ self,
+ text,
+ color=None,
+ font=None,
+ x_offset=0,
+ y_offset=0,
+ ):
+ if font is None:
+ font = self._current_font
+ if color is None:
+ color = self._current_color
+ color_565value = displayio.ColorConverter().convert(color)
+ # Create a bitmap label and add it to the buffer
+ bmp_label = bitmap_label.Label(font, text=text)
+ color_overlay = displayio.Bitmap(
+ bmp_label.bitmap.width, bmp_label.bitmap.height, 65535
+ )
+ color_overlay.fill(color_565value)
+ mask_overlay = displayio.Bitmap(
+ bmp_label.bitmap.width, bmp_label.bitmap.height, 65535
+ )
+ mask_overlay.fill(self._mask_color)
+ bitmaptools.blit(color_overlay, bmp_label.bitmap, 0, 0, skip_source_index=1)
+ bitmaptools.blit(
+ color_overlay, mask_overlay, 0, 0, skip_dest_index=color_565value
+ )
+ bmp_label = None
+
+ self._add_bitmap(color_overlay, x_offset, y_offset)
+
+ def add_image(self, image, x_offset=0, y_offset=0):
+ # Load the image with imageload and add it to the buffer
+ bmp_image, _ = adafruit_imageload.load(image)
+ self._add_bitmap(bmp_image, x_offset, y_offset)
+
+ def clear(self):
+ """Clear the canvas content, but retain all of the style settings"""
+ self._buffer = displayio.Bitmap(0, 0, 65535)
+ self._cursor = [0, 0]
+ self._width = 0
+ self._height = 0
+
+ @property
+ def buffer(self):
+ """Return the current buffer"""
+ if self._width == 0 or self._height == 0:
+ raise RuntimeError("No content in the message")
+ return self._buffer
+
+ @property
+ def mask_color(self):
+ """Get or Set the mask color"""
+ return self._mask_color
+
+ @mask_color.setter
+ def mask_color(self, value):
+ self._mask_color = displayio.ColorConverter().convert(value)
+
+ @property
+ def blendmode(self):
+ """Get or Set the blendmode"""
+ return self._blendmode
+
+ @blendmode.setter
+ def blendmode(self, value):
+ if value in bitmaptools.BlendMode:
+ self._blendmode = value
diff --git a/Matrix_Portal_S3_SMS_Scroller/settings.toml b/Matrix_Portal_S3_SMS_Scroller/settings.toml
new file mode 100755
index 000000000..ba919ea8e
--- /dev/null
+++ b/Matrix_Portal_S3_SMS_Scroller/settings.toml
@@ -0,0 +1,11 @@
+# SPDX-FileCopyrightText: 2023 Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# This is where you store the credentials necessary for your code.
+# The associated demo only requires WiFi, but you can include any
+# credentials here, such as Adafruit IO username and key, etc.
+CIRCUITPY_WIFI_SSID = "Your WIFI SSID"
+CIRCUITPY_WIFI_PASSWORD = "Wifi Password"
+AIO_USERNAME = "username"
+AIO_KEY = "adafruitIO key"
\ No newline at end of file
diff --git a/Matrix_Portal_Tip_Jar/code.py b/Matrix_Portal_Tip_Jar/code.py
index 7b2b822f5..609148fbb 100644
--- a/Matrix_Portal_Tip_Jar/code.py
+++ b/Matrix_Portal_Tip_Jar/code.py
@@ -34,7 +34,7 @@
# --- Display setup ---
matrix = Matrix(bit_depth=4)
sprite_group = displayio.Group()
-matrix.display.show(sprite_group)
+matrix.display.root_group = sprite_group
# --- Button setup ---
pin_down = DigitalInOut(board.BUTTON_DOWN)
diff --git a/Matrix_Sprite_Animation_Player/code.py b/Matrix_Sprite_Animation_Player/code.py
index 4a84eee9b..a2258c40f 100644
--- a/Matrix_Sprite_Animation_Player/code.py
+++ b/Matrix_Sprite_Animation_Player/code.py
@@ -22,7 +22,7 @@
# --- Display setup ---
matrix = Matrix(bit_depth=4)
sprite_group = displayio.Group()
-matrix.display.show(sprite_group)
+matrix.display.root_group = sprite_group
# --- Button setup ---
pin_down = DigitalInOut(board.BUTTON_DOWN)
diff --git a/Meowsic_MIDI/code.py b/Meowsic_MIDI/code.py
new file mode 100644
index 000000000..244ffa6b9
--- /dev/null
+++ b/Meowsic_MIDI/code.py
@@ -0,0 +1,232 @@
+# SPDX-FileCopyrightText: 2023 John Park for Adafruit
+#
+# SPDX-License-Identifier: MIT
+# Cyber Cat MIDI Keyboard conversion for Meowsic Cat Piano
+
+# Functions:
+# --28 keys
+# --left five toe buttons: patches
+# --right five toe buttons: picking CC number for ice cream cone control
+# --volume arrows: octave up/down
+# --tempo arrows: pitchbend up/down
+# --on switch: reset
+# --nose button: midi panic
+# --record button: ice cream cone CC enable/disable (led indicator)
+# --play button: start stop arp or sequence in soft synth via cc 16 0/127
+# --treble clef button: hold notes (use nose to turn off all notes)
+# --face button: momentary CC 0/127 on CC number 17
+
+import keypad
+import board
+import busio
+import supervisor
+import digitalio
+from adafruit_simplemath import map_range
+from adafruit_msa3xx import MSA311
+import usb_midi
+import adafruit_midi
+from adafruit_midi.note_on import NoteOn
+from adafruit_midi.note_off import NoteOff
+from adafruit_midi.control_change import ControlChange
+from adafruit_midi.program_change import ProgramChange
+from adafruit_midi.pitch_bend import PitchBend
+
+supervisor.runtime.autoreload = True # set False to prevent unwanted restarts due to OS weirdness
+
+ledpin = digitalio.DigitalInOut(board.A3)
+ledpin.direction = digitalio.Direction.OUTPUT
+ledpin.value = True
+
+i2c = board.STEMMA_I2C()
+msa = MSA311(i2c)
+
+key_matrix = keypad.KeyMatrix(
+ column_pins=(board.D2, board.D3, board.D4, board.D5, board.D6, board.D7, board.D8, board.D9),
+ row_pins=(board.D10, board.MOSI, board.MISO, board.CLK, board.A0, board.A1)
+)
+
+midi_uart = busio.UART(board.TX, None, baudrate=31250, timeout=0.001)
+
+midi_usb_channel = 1
+midi_usb = adafruit_midi.MIDI(midi_out=usb_midi.ports[1], out_channel=midi_usb_channel-1)
+midi_serial_channel = 1
+midi_serial = adafruit_midi.MIDI(midi_out=midi_uart, out_channel=midi_serial_channel-1)
+
+octave = 4
+note_offset = 9 # first note on keyboard is an A, first key in keypad matrix is 0
+
+def send_note_on(note, octv):
+ note = ((note+note_offset)+(12*octv))
+ midi_usb.send(NoteOn(note, 120))
+ midi_serial.send(NoteOn(note, 120))
+
+def send_note_off(note, octv):
+ note = ((note+note_offset)+(12*octv))
+ midi_usb.send(NoteOff(note, 0))
+ midi_serial.send(NoteOff(note, 0))
+
+def send_cc(number, val):
+ midi_usb.send(ControlChange(number, val))
+ midi_serial.send(ControlChange(number, val))
+
+def send_pc(bank, folder, patch):
+ send_cc(0, bank)
+ send_cc(32, folder)
+ midi_usb.send(ProgramChange(patch))
+ midi_serial.send(ProgramChange(patch))
+
+def send_bend(bend_start, bend_val, rate, bend_dir):
+ b = bend_start
+ if bend_dir == 0:
+ while b > bend_val + rate:
+ print(b)
+ b = b - rate
+ midi_usb.send(PitchBend(b))
+ midi_serial.send(PitchBend(b))
+ if bend_dir == 1:
+ while b < bend_val - rate:
+ print(b)
+ b = b + rate
+ midi_usb.send(PitchBend(b))
+ midi_serial.send(PitchBend(b))
+
+def send_midi_panic():
+ for x in range(128):
+ midi_usb.send(NoteOff(x, 0))
+ midi_serial.send(NoteOff(x, 0))
+
+# key ranges
+piano_keys = range(0, 28) # 'range()' excludes last value, so add one
+patch_toes = list(range(28, 33))
+cc_toes = list(range(35, 40))
+clef_button = 33
+nose_button = 47
+face_button = 34
+record_button = 44
+play_button = 45
+vol_down_button = 43
+vol_up_button = 42
+tempo_down_button = 41
+tempo_up_button = 40
+
+# patch assigments
+patch_list = (
+ (0, 0, 0), # bank 0, folder 0, patch 0
+ (1, 0, 0),
+ (1, 0, 1),
+ (2, 0, 0),
+ (3, 0, 0),
+)
+
+pb_max = 16383 # bend up value
+pb_default = 8192 # bend center value
+pb_min = 0 # bend down value
+pb_change_rate = 100 # interval for pitch bend, lower number is slower
+pb_return_rate = 100 # interval for pitch bend release
+
+# accelerometer filtering variables
+slop = 0.2 # threshold for accelerometer send
+filter_percent = 0.5 # ranges from 0.0 to 1.0
+accel_data_y = msa.acceleration[1]
+last_accel_data_y = msa.acceleration[1]
+
+# midi cc variables
+cc_enable = True
+cc_numbers = (1, 43, 44, 14, 15) # mod wheel, filter cutoff, resonance, user, user
+cc_current = 0
+cc_play = 16
+cc_face_number = 17
+
+started = False # state of arp/seq play
+note_hold = False
+
+print("Cyber Cat MIDI Keyboard")
+
+
+while True:
+ if cc_enable:
+ new_data_y = msa.acceleration[1]
+ accel_data_y = ((new_data_y * filter_percent) + (1-filter_percent) * accel_data_y) # smooth
+ if abs(accel_data_y - last_accel_data_y) > slop:
+ modulation = int(map_range(accel_data_y, 9, -9, 0, 127))
+ send_cc(cc_numbers[cc_current], modulation)
+ last_accel_data_y = accel_data_y
+
+ event = key_matrix.events.get()
+ if event:
+ if event.pressed:
+ key = event.key_number
+
+ # Note keys
+ if key in piano_keys:
+ send_note_on(key, octave)
+
+ # Volume buttons
+ if key is vol_down_button:
+ octave = min(max((octave - 1), 0), 7)
+ if key is vol_up_button:
+ octave = min(max((octave + 1), 0), 7)
+
+ # Tempo buttons
+ if key is tempo_down_button:
+ send_bend(pb_default, pb_min, pb_change_rate, 0)
+ if key is tempo_up_button:
+ send_bend(pb_default, pb_max, pb_change_rate, 1)
+
+ # Patch buttons (left cat toes)
+ if key in patch_toes:
+ pc_key = patch_toes.index(key) # remove offset for patch list indexing
+ send_pc(patch_list[pc_key][0], patch_list[pc_key][1], patch_list[pc_key][2])
+
+ # cc buttons (right cat toes)
+ if key in cc_toes:
+ cc_current = cc_toes.index(key) # remove offset for cc list indexing
+
+ # Play key -- use MIDI learn to have arp/seq start or stop with this
+ if key is play_button:
+ if not started:
+ send_cc(cc_play, 127) # map to seq/arp on/off Synth One, e.g.
+ started = True
+ else:
+ send_cc(cc_play, 0)
+ started = False
+
+ # Record key -- enable icecream cone
+ if key is record_button:
+ if cc_enable is True:
+ cc_enable = False
+ ledpin.value = False
+
+ elif cc_enable is False:
+ send_cc(cc_numbers[cc_current], 0) # zero it
+ cc_enable = True
+ ledpin.value = True
+
+ # Clef
+ if key is clef_button: # hold
+ note_hold = not note_hold
+
+ # Face
+ if key is face_button: # momentary cc
+ send_cc(cc_face_number, 127)
+
+ # Nose
+ if key is nose_button:
+ send_midi_panic() # all notes off
+
+ if event.released:
+ key = event.key_number
+ if key in piano_keys:
+ if not note_hold:
+ send_note_off(key, octave)
+ if note_hold:
+ pass
+
+ if key is face_button: # momentary cc release
+ send_cc(cc_face_number, 0)
+
+ if key is tempo_down_button:
+ send_bend(pb_min, pb_default, pb_return_rate, 1)
+
+ if key is tempo_up_button:
+ send_bend(pb_max, pb_default, pb_return_rate, 0)
diff --git a/Metro_M7_Examples/Digital_Input/code.py b/Metro_M7_Examples/Digital_Input/code.py
new file mode 100644
index 000000000..d51f7cd94
--- /dev/null
+++ b/Metro_M7_Examples/Digital_Input/code.py
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Digital Input Example - Blinking an LED using a button switch.
+"""
+import board
+import digitalio
+
+led = digitalio.DigitalInOut(board.LED)
+led.direction = digitalio.Direction.OUTPUT
+
+button = digitalio.DigitalInOut(board.D5)
+button.switch_to_input(pull=digitalio.Pull.UP)
+
+while True:
+ if not button.value:
+ led.value = True
+ else:
+ led.value = False
diff --git a/Metro_M7_Examples/I2S_Tone/code.py b/Metro_M7_Examples/I2S_Tone/code.py
new file mode 100644
index 000000000..61cd92426
--- /dev/null
+++ b/Metro_M7_Examples/I2S_Tone/code.py
@@ -0,0 +1,29 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S Tone playback example.
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.D10, board.D9, board.D12)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("h", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+sine_wave_sample = audiocore.RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Metro_M7_Examples/I2S_Wav/StreetChicken.wav b/Metro_M7_Examples/I2S_Wav/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/Metro_M7_Examples/I2S_Wav/StreetChicken.wav differ
diff --git a/Metro_M7_Examples/I2S_Wav/code.py b/Metro_M7_Examples/I2S_Wav/code.py
new file mode 100644
index 000000000..9fff8e3b6
--- /dev/null
+++ b/Metro_M7_Examples/I2S_Wav/code.py
@@ -0,0 +1,21 @@
+# SPDX-FileCopyrightText: 2021 Kattni Rembor for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython I2S WAV file playback.
+Plays a WAV file once.
+"""
+import audiocore
+import board
+import audiobusio
+
+audio = audiobusio.I2SOut(board.D10, board.D9, board.D12)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wav = audiocore.WaveFile(wave_file)
+
+ print("Playing wav file!")
+ audio.play(wav)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Metro_M7_Examples/PWM_Tone/code.py b/Metro_M7_Examples/PWM_Tone/code.py
new file mode 100644
index 000000000..1fa2abceb
--- /dev/null
+++ b/Metro_M7_Examples/PWM_Tone/code.py
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out tone example
+Plays a tone for one second on, one
+second off, in a loop.
+"""
+import time
+import array
+import math
+import board
+from audiocore import RawSample
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.A1)
+
+tone_volume = 0.1 # Increase this to increase the volume of the tone.
+frequency = 440 # Set this to the Hz of the tone you want to generate.
+length = 8000 // frequency
+sine_wave = array.array("H", [0] * length)
+for i in range(length):
+ sine_wave[i] = int((1 + math.sin(math.pi * 2 * i / length)) * tone_volume * (2 ** 15 - 1))
+
+sine_wave_sample = RawSample(sine_wave)
+
+while True:
+ audio.play(sine_wave_sample, loop=True)
+ time.sleep(1)
+ audio.stop()
+ time.sleep(1)
diff --git a/Metro_M7_Examples/PWM_Wav/StreetChicken.wav b/Metro_M7_Examples/PWM_Wav/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/Metro_M7_Examples/PWM_Wav/StreetChicken.wav differ
diff --git a/Metro_M7_Examples/PWM_Wav/code.py b/Metro_M7_Examples/PWM_Wav/code.py
new file mode 100644
index 000000000..9892ce94d
--- /dev/null
+++ b/Metro_M7_Examples/PWM_Wav/code.py
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+CircuitPython PWM Audio Out WAV example
+Play a WAV file once.
+"""
+import board
+from audiocore import WaveFile
+from audiopwmio import PWMAudioOut as AudioOut
+
+audio = AudioOut(board.A1)
+
+with open("StreetChicken.wav", "rb") as wave_file:
+ wave = WaveFile(wave_file)
+ print("Playing wav file!")
+ audio.play(wave)
+ while audio.playing:
+ pass
+
+print("Done!")
diff --git a/Metro_M7_Examples/WiFi/code.py b/Metro_M7_Examples/WiFi/code.py
new file mode 100644
index 000000000..7d348f182
--- /dev/null
+++ b/Metro_M7_Examples/WiFi/code.py
@@ -0,0 +1,65 @@
+# SPDX-FileCopyrightText: 2019 ladyada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import os
+import board
+import busio
+from digitalio import DigitalInOut
+import adafruit_requests as requests
+import adafruit_esp32spi.adafruit_esp32spi_socket as socket
+from adafruit_esp32spi import adafruit_esp32spi
+
+print("ESP32 SPI webclient test")
+
+TEXT_URL = "http://wifitest.adafruit.com/testwifi/index.html"
+JSON_URL = "http://api.coindesk.com/v1/bpi/currentprice/USD.json"
+
+# If you are using a board with pre-defined ESP32 Pins:
+esp32_cs = DigitalInOut(board.ESP_CS)
+esp32_ready = DigitalInOut(board.ESP_BUSY)
+esp32_reset = DigitalInOut(board.ESP_RESET)
+
+spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
+esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
+
+requests.set_socket(socket, esp)
+
+if esp.status == adafruit_esp32spi.WL_IDLE_STATUS:
+ print("ESP32 found and in idle mode")
+print("Firmware vers.", esp.firmware_version)
+print("MAC addr:", [hex(i) for i in esp.MAC_address])
+
+for ap in esp.scan_networks():
+ print("\t%s\t\tRSSI: %d" % (str(ap["ssid"], "utf-8"), ap["rssi"]))
+
+print("Connecting to AP...")
+while not esp.is_connected:
+ try:
+ esp.connect_AP(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+ except OSError as e:
+ print("could not connect to AP, retrying: ", e)
+ continue
+print("Connected to", str(esp.ssid, "utf-8"), "\tRSSI:", esp.rssi)
+print("My IP address is", esp.pretty_ip(esp.ip_address))
+print(
+ "IP lookup adafruit.com: %s" % esp.pretty_ip(esp.get_host_by_name("adafruit.com"))
+)
+print("Ping google.com: %d ms" % esp.ping("google.com"))
+
+# esp._debug = True
+print("Fetching text from", TEXT_URL)
+r = requests.get(TEXT_URL)
+print("-" * 40)
+print(r.text)
+print("-" * 40)
+r.close()
+
+print()
+print("Fetching json from", JSON_URL)
+r = requests.get(JSON_URL)
+print("-" * 40)
+print(r.json())
+print("-" * 40)
+r.close()
+
+print("Done!")
diff --git a/Metro_Matrix_Clock/code.py b/Metro_Matrix_Clock/code.py
index 3794523e6..acb389a55 100644
--- a/Metro_Matrix_Clock/code.py
+++ b/Metro_Matrix_Clock/code.py
@@ -43,7 +43,7 @@
# Create a TileGrid using the Bitmap and Palette
tile_grid = displayio.TileGrid(bitmap, pixel_shader=color)
group.append(tile_grid) # Add the TileGrid to the Group
-display.show(group)
+display.root_group = group
if not DEBUG:
font = bitmap_font.load_font("/IBMPlexMono-Medium-24_jep.bdf")
diff --git a/Minecraft_Turbopad/code.py b/Minecraft_Turbopad/code.py
index e8cf23587..8f022a327 100644
--- a/Minecraft_Turbopad/code.py
+++ b/Minecraft_Turbopad/code.py
@@ -70,7 +70,7 @@
main_group = displayio.Group()
-macropad.display.show(main_group)
+macropad.display.root_group = main_group
title = label.Label(
y=4,
font=terminalio.FONT,
diff --git a/Minesweep/code.py b/Minesweep/code.py
index a3f83a142..409686310 100644
--- a/Minesweep/code.py
+++ b/Minesweep/code.py
@@ -82,7 +82,7 @@
-display.show(group)
+display.root_group = group
board_data = bytearray(b'\x00' * 300)
diff --git a/Mini_GIF_Players/Mini_GIF_Players.ino b/Mini_GIF_Players/Mini_GIF_Players.ino
index 3198b93cd..c1462c4bc 100644
--- a/Mini_GIF_Players/Mini_GIF_Players.ino
+++ b/Mini_GIF_Players/Mini_GIF_Players.ino
@@ -9,8 +9,8 @@
#include // Hardware-specific library for ST7735
#include // Hardware-specific library for ST7789
-#define TFT_CS 5
-#define TFT_DC 6
+#define TFT_CS 7
+#define TFT_DC 8
#define TFT_RST 9
#define DISPLAY_WIDTH 320
diff --git a/Motion_Buddy/code.py b/Motion_Buddy/code.py
index 1d5c51868..0568897b6 100644
--- a/Motion_Buddy/code.py
+++ b/Motion_Buddy/code.py
@@ -17,7 +17,8 @@
from adafruit_ble_apple_media import AppleMediaService, UnsupportedCommand
# Initialize the accelerometer
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
# Initialize BLE radio
diff --git a/Motorized_Turntable/code.py b/Motorized_Turntable/code.py
index 235e1900d..3078463ef 100644
--- a/Motorized_Turntable/code.py
+++ b/Motorized_Turntable/code.py
@@ -4,27 +4,25 @@
import time
-import adafruit_motor.servo
+from adafruit_motor import servo
import board
import pwmio
from analogio import AnalogIn
from digitalio import DigitalInOut, Direction, Pull
pwm = pwmio.PWMOut(board.D5, frequency=50)
-servo = adafruit_motor.servo.Servo(pwm)
+
switch = DigitalInOut(board.D7)
switch.direction = Direction.INPUT
switch.pull = Pull.UP
pot = AnalogIn(board.A0)
-continuous = adafruit_motor.servo.ContinuousServo(pwm)
-
+continuous = servo.ContinuousServo(pwm)
def val(pin):
# divides voltage (65535) to get a value between 0 and 1
return pin.value / 65535
-
while True:
if switch.value:
diff --git a/NeoDriver_seesaw_Examples/Arduino_NeoDriver_strandtest/.feather_rp2040.test.only b/NeoDriver_seesaw_Examples/Arduino_NeoDriver_strandtest/.feather_rp2040.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/NeoDriver_seesaw_Examples/Arduino_NeoDriver_strandtest/Arduino_NeoDriver_strandtest.ino b/NeoDriver_seesaw_Examples/Arduino_NeoDriver_strandtest/Arduino_NeoDriver_strandtest.ino
new file mode 100644
index 000000000..9f44cc1ac
--- /dev/null
+++ b/NeoDriver_seesaw_Examples/Arduino_NeoDriver_strandtest/Arduino_NeoDriver_strandtest.ino
@@ -0,0 +1,80 @@
+// SPDX-FileCopyrightText: 2023 Phil B. for Adafruit Industries
+// SPDX-License-Identifier: MIT
+
+#include
+#define PIN 15
+
+// Parameter 1 = number of pixels in strip
+// Parameter 2 = Arduino pin number (most are valid)
+// Parameter 3 = pixel type flags, add together as needed:
+// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
+// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
+// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
+// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
+// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
+seesaw_NeoPixel strip = seesaw_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);
+
+// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
+// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
+// and minimize distance between Arduino and first pixel. Avoid connecting
+// on a live circuit...if you must, connect GND first.
+
+void setup() {
+ Serial.begin(115200);
+
+ while (!Serial) delay(10); // wait until serial port is opened
+
+ if(!strip.begin(0x60)){
+ Serial.println("seesaw not found!");
+ while(1) delay(10);
+ }
+
+ Serial.println(F("seesaw started OK!"));
+
+ strip.show(); // Initialize all pixels to 'off'
+}
+
+void loop() {
+ rainbowCycle(20);
+
+}
+
+void rainbow(uint8_t wait) {
+ uint16_t i, j;
+
+ for(j=0; j<256; j++) {
+ for(i=0; i
+#include
+
+#define LED_PIN A3
+#define MX_PIN A2
+#define LED_COUNT 1
+
+int mxState = 0;
+
+Adafruit_NeoPixel pixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
+
+void setup() {
+ Serial.begin(115200);
+ Keyboard.begin();
+ delay(5000);
+ pinMode(MX_PIN, INPUT);
+ pixel.begin();
+ pixel.show();
+ pixel.setBrightness(50);
+}
+
+void loop() {
+ mxState = digitalRead(MX_PIN);
+
+ if(mxState == HIGH) {
+ pixel.setPixelColor(0, pixel.Color(150, 0, 0));
+ pixel.show();
+ Keyboard.print("Hello World!");
+ }
+
+ if(mxState == LOW) {
+ pixel.setPixelColor(0, pixel.Color(0, 0, 0));
+ pixel.show();
+ }
+
+}
diff --git a/NeoKey_BFF_Examples/CP_Keyboard_Example/code.py b/NeoKey_BFF_Examples/CP_Keyboard_Example/code.py
new file mode 100644
index 000000000..8814a1ab9
--- /dev/null
+++ b/NeoKey_BFF_Examples/CP_Keyboard_Example/code.py
@@ -0,0 +1,52 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""Basic HID Macro with NeoKey BFF Example"""
+import time
+import board
+from digitalio import DigitalInOut, Direction, Pull
+import neopixel
+import usb_hid
+from adafruit_hid.keyboard import Keyboard
+from adafruit_hid.keycode import Keycode
+
+# setup onboard NeoPixel
+pixel_pin = board.A3
+num_pixels = 1
+pixel_color = (0, 255, 0)
+off = (0, 0, 0)
+
+pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
+
+# The Keycode sent for each button, will be paired with a control key
+key = Keycode.F
+modifier_key = Keycode.CONTROL
+
+# The keyboard object!
+time.sleep(1) # Sleep for a bit to avoid a race condition on some systems
+keyboard = Keyboard(usb_hid.devices)
+
+# setup onboard button
+switch = DigitalInOut(board.A2)
+switch.direction = Direction.INPUT
+switch.pull = Pull.UP
+switch_state = False
+
+while True:
+
+ # if the button is not pressed..
+ if switch.value and switch_state:
+ pixels.fill(off)
+ pixels.show()
+ keyboard.release_all()
+ switch_state = False
+
+ # if the button is pressed..
+ elif not switch.value and not switch_state:
+ pixels.fill(pixel_color)
+ pixels.show()
+ keyboard.press(modifier_key, key)
+ switch_state = True
+
+ time.sleep(0.05)
diff --git a/NeoKey_MX_and_CHOC_Breakouts/Arduino/NeoKey_NeoPixel_Rainbow_and_HID/.qt_py_rp2040.test.only b/NeoKey_MX_and_CHOC_Breakouts/Arduino/NeoKey_NeoPixel_Rainbow_and_HID/.qt_py_rp2040.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/NeoKey_MX_and_CHOC_Breakouts/Arduino/NeoKey_NeoPixel_Rainbow_and_HID/NeoKey_NeoPixel_Rainbow_and_HID.ino b/NeoKey_MX_and_CHOC_Breakouts/Arduino/NeoKey_NeoPixel_Rainbow_and_HID/NeoKey_NeoPixel_Rainbow_and_HID.ino
new file mode 100644
index 000000000..1cfd7c235
--- /dev/null
+++ b/NeoKey_MX_and_CHOC_Breakouts/Arduino/NeoKey_NeoPixel_Rainbow_and_HID/NeoKey_NeoPixel_Rainbow_and_HID.ino
@@ -0,0 +1,64 @@
+// SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+
+#define NEOPIXEL_PIN A3
+#define NUM_PIXELS 2
+
+#define SWITCHA_PIN A1
+#define SWITCHB_PIN A2
+
+Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIXELS, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
+
+void setup() {
+ Serial.begin(115200);
+ //while (!Serial);
+ strip.begin();
+ strip.setBrightness(25);
+ strip.show(); // Initialize all pixels to 'off'
+ pinMode(SWITCHA_PIN, INPUT_PULLUP);
+ pinMode(SWITCHB_PIN, INPUT_PULLUP);
+}
+
+uint8_t j=0;
+void loop() {
+ for(int i=0; i< strip.numPixels(); i++) {
+ strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
+ }
+
+ // turn off LED if not pressed!
+ if (!digitalRead(SWITCHA_PIN)) {
+ Serial.println("A");
+ strip.setPixelColor(0, 0);
+ }
+ if (!digitalRead(SWITCHB_PIN)) {
+ Serial.println("B");
+ strip.setPixelColor(1, 0);
+ }
+
+ strip.show();
+
+ j++; // go to next color
+ delay(10);
+}
+
+// Slightly different, this makes the rainbow equally distributed throughout
+void rainbowCycle(uint8_t wait) {
+
+}
+
+// Input a value 0 to 255 to get a color value.
+// The colours are a transition r - g - b - back to r.
+uint32_t Wheel(byte WheelPos) {
+ if(WheelPos < 85) {
+ return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
+ } else if(WheelPos < 170) {
+ WheelPos -= 85;
+ return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
+ } else {
+ WheelPos -= 170;
+ return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
+ }
+}
diff --git a/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/HID/code.py b/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/HID/code.py
new file mode 100644
index 000000000..25e8a911c
--- /dev/null
+++ b/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/HID/code.py
@@ -0,0 +1,76 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+NeoKey Breakout HID Demo
+
+WILL NOT WORK ON RASPBERRY PI
+"""
+
+import time
+import board
+import keypad
+import usb_hid
+import neopixel
+from adafruit_hid.keyboard import Keyboard
+from adafruit_hid.keycode import Keycode
+
+# --- CONFIGURATION ---
+# Keycode to send on key press.
+SEND_ON_PRESS = (
+ Keycode.B,
+ Keycode.THREE,
+)
+
+# NeoPixel colors for each key when pressed.
+COLORS = (
+ (255, 255, 0), # Yellow
+ (0, 255, 255), # Cyan
+)
+
+# NeoPixel brightness. Must be a float or integer between 0.0 and 1.0, where 0 is off and
+# 1 is maximum brightness. Defaults to 0.3.
+BRIGHTNESS = 0.3
+
+# NeoPixel and key switch pins. Update to match your wiring setup.
+PIXEL_PIN = board.A3
+KEY_PINS = (
+ board.A1,
+ board.A2,
+)
+
+# --- SETUP AND CODE ---
+# Number of NeoPixels. This will always match the number of breakouts and
+# therefore the number of key pins listed.
+NUM_PIXELS = len(KEY_PINS)
+
+# Create NeoPixel object.
+pixels = neopixel.NeoPixel(PIXEL_PIN, NUM_PIXELS, brightness=BRIGHTNESS)
+
+# Create keypad object.
+keys = keypad.Keys(KEY_PINS, value_when_pressed=False, pull=True)
+
+# Create keyboard object.
+time.sleep(1) # Delay to avoid a race condition on some systems.
+keyboard = Keyboard(usb_hid.devices)
+
+while True:
+ # Begin getting key events.
+ event = keys.events.get()
+
+ # If there is a key press event, run this block.
+ if event and event.pressed:
+ # Save the number of the key pressed to `key_number` to use in multiple places.
+ key_number = event.key_number
+ # Light up the corresponding NeoPixel to the appropriate color in the `COLORS` tuple.
+ pixels[key_number] = COLORS[key_number]
+ # Send the appropriate `Keycode` as identified in the `SEND_ON_PRESS` tuple.
+ keyboard.press(SEND_ON_PRESS[key_number])
+
+ # If there is a key released event, run this block.
+ if event and event.released:
+ # Turn off the LEDs.
+ pixels[event.key_number] = (0, 0, 0)
+ # Report that the key switch has been released.
+ keyboard.release_all()
diff --git a/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/NeoPixel_Rainbow_Press/code.py b/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/NeoPixel_Rainbow_Press/code.py
new file mode 100644
index 000000000..4159f914d
--- /dev/null
+++ b/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/NeoPixel_Rainbow_Press/code.py
@@ -0,0 +1,68 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 Dan Halbert for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""NeoKey Breakout NeoPixel Rainbow Cycle Demo"""
+
+import time
+import board
+import keypad
+import neopixel
+from rainbowio import colorwheel
+
+# --- CONFIGURATION ---
+# NeoPixel brightness. Must be a float or integer between 0.0 and 1.0, where 0 is off and
+# 1 is maximum brightness. Defaults to 0.3.
+BRIGHTNESS = 0.3
+
+# NeoPixel and key switch pins. If using different pins, update to match your wiring setup.
+# pylint: disable=simplifiable-condition
+# Check to see if a Raspberry Pi is present, and set the appropriate pins.
+if "CE0" and "CE1" in dir(board): # These pins are Pi-specific.
+ PIXEL_PIN = board.D18
+ KEY_PINS = (
+ board.D4,
+ board.D17,
+ )
+# Otherwise, assume a microcontroller, and set the appropriate pins.
+else:
+ PIXEL_PIN = board.A3
+ KEY_PINS = (
+ board.A1,
+ board.A2,
+ )
+
+# --- SETUP AND CODE ---
+# Number of NeoPixels. This will always match the number of breakouts and
+# therefore the number of key pins listed.
+NUM_PIXELS = len(KEY_PINS)
+
+# Create NeoPixel object.
+pixels = neopixel.NeoPixel(PIXEL_PIN, NUM_PIXELS, brightness=BRIGHTNESS)
+
+# Create keypad object.
+keys = keypad.Keys(KEY_PINS, value_when_pressed=False, pull=True)
+
+# Create two lists.
+# The `pressed` list is used to track the key press state.
+pressed = [False] * NUM_PIXELS
+# The `color_value` list is used to track the current color value for a specific NeoPixel.
+color_value = [0] * NUM_PIXELS
+
+while True:
+ # Begin getting key events.
+ event = keys.events.get()
+ if event:
+ # Remember the last state of the key when pressed.
+ pressed[event.key_number] = event.pressed
+
+ # Advance the rainbow for the key that is currently pressed.
+ for index in range(NUM_PIXELS):
+ if pressed[index]:
+ # Increase the color value by 1.
+ color_value[index] += 1
+ # Set the pixel color to the current color value.
+ pixels[index] = colorwheel(color_value[index])
+
+ time.sleep(0.01)
diff --git a/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/NeoPixel_Random_Color_Press/code.py b/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/NeoPixel_Random_Color_Press/code.py
new file mode 100644
index 000000000..c634fbab7
--- /dev/null
+++ b/NeoKey_MX_and_CHOC_Breakouts/CircuitPython/NeoPixel_Random_Color_Press/code.py
@@ -0,0 +1,54 @@
+# SPDX-FileCopyrightText: 2023 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""NeoKey Breakout Random NeoPixel Color Demo"""
+
+import random
+import board
+import keypad
+import neopixel
+from rainbowio import colorwheel
+
+# --- CONFIGURATION ---
+# NeoPixel brightness. Must be a float or integer between 0.0 and 1.0, where 0 is off and
+# 1 is maximum brightness. Defaults to 0.3.
+BRIGHTNESS = 0.3
+
+# NeoPixel and key switch pins. If using different pins, update to match your wiring setup.
+# pylint: disable=simplifiable-condition
+# Check to see if a Raspberry Pi is present, and set the appropriate pins.
+if "CE0" and "CE1" in dir(board): # These pins are Pi-specific.
+ PIXEL_PIN = board.D18
+ KEY_PINS = (
+ board.D4,
+ board.D17,
+ )
+# Otherwise, assume a microcontroller, and set the appropriate pins.
+else:
+ PIXEL_PIN = board.A3
+ KEY_PINS = (
+ board.A1,
+ board.A2,
+ )
+
+# --- SET UP AND CODE ---
+# Number of NeoPixels. This will always match the number of breakouts and
+# therefore the number of key pins listed.
+NUM_PIXELS = len(KEY_PINS)
+
+# Create NeoPixel object.
+pixels = neopixel.NeoPixel(PIXEL_PIN, NUM_PIXELS, brightness=BRIGHTNESS)
+
+# Create keypad object.
+keys = keypad.Keys(KEY_PINS, value_when_pressed=False, pull=True)
+
+while True:
+ # Begin getting key events.
+ event = keys.events.get()
+ # If there is a key press event, run this block.
+ if event and event.pressed:
+ # Print the key number of the pressed key.
+ print(f"Key {event.key_number} pressed!")
+ # Light up the corresponding NeoPixel to a random color.
+ pixels[event.key_number] = colorwheel(random.randint(0, 255))
diff --git a/NeoPixel_Fidget_Spinner/code.py b/NeoPixel_Fidget_Spinner/code.py
new file mode 100644
index 000000000..7af43c527
--- /dev/null
+++ b/NeoPixel_Fidget_Spinner/code.py
@@ -0,0 +1,190 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import random
+import board
+import neopixel
+from adafruit_seesaw import seesaw, rotaryio, digitalio
+from adafruit_debouncer import Button
+from rainbowio import colorwheel
+from adafruit_led_animation import color
+
+# NeoPixel ring setup. Update num_pixels if using a different ring.
+num_pixels = 24
+pixels = neopixel.NeoPixel(board.D5, num_pixels, auto_write=False)
+
+i2c = board.STEMMA_I2C()
+seesaw = seesaw.Seesaw(i2c, addr=0x49)
+
+buttons = []
+for b in range(1, 6):
+ seesaw.pin_mode(b, seesaw.INPUT_PULLUP)
+ ss_pin = digitalio.DigitalIO(seesaw, b)
+ button = Button(ss_pin, long_duration_ms=1000)
+ buttons.append(button)
+
+encoder = rotaryio.IncrementalEncoder(seesaw)
+last_position = 0
+
+button_names = ["Select", "Up", "Left", "Down", "Right"]
+colors = [color.RED, color.YELLOW, color.ORANGE, color.GREEN,
+ color.TEAL, color.CYAN, color.BLUE, color.PURPLE, color.MAGENTA]
+
+# rainbow cycle function
+def rainbow_cycle(wait):
+ for j in range(255):
+ for i in range(num_pixels):
+ rc_index = (i * 256 // num_pixels) + j
+ pixels[i] = colorwheel(rc_index & 255)
+ pixels.show()
+ time.sleep(wait)
+
+color_index = 0
+game_mode = False
+pixel = 0
+num = 0
+last_num = 0
+now_color = 0
+next_color = 1
+speed = 0.1
+level = 0.005
+final_level = 0.001
+new_target = True
+
+while True:
+ if not game_mode:
+ for b in range(5):
+ buttons[b].update()
+ if buttons[b].released or buttons[b].pressed:
+ pixels.fill(color.BLACK)
+ position = encoder.position
+ if position != last_position:
+ pixels[last_position % num_pixels] = color.BLACK
+ pixels[position % num_pixels] = colors[color_index]
+ # print("Position: {}".format(position))
+ last_position = position
+
+ if buttons[0].pressed:
+ # print("Center button!")
+ pixels.fill(colors[color_index])
+
+ elif buttons[0].long_press:
+ # print("long press detected")
+ pixels.fill(color.BLACK)
+ new_target = True
+ game_mode = True
+
+ if buttons[1].pressed:
+ # print("Up button!")
+ color_index = (color_index + 1) % len(colors)
+ pixels[10] = colors[color_index]
+
+ if buttons[2].pressed:
+ # print("Left button!")
+ color_index = (color_index + 1) % len(colors)
+ pixels[4] = colors[color_index]
+
+ if buttons[3].pressed:
+ # print("Down button!")
+ color_index = (color_index - 1) % len(colors)
+ pixels[22] = colors[color_index]
+
+ if buttons[4].pressed:
+ # print("Right button!")
+ color_index = (color_index - 1) % len(colors)
+ pixels[16] = colors[color_index]
+
+ pixels.show()
+ if game_mode:
+ buttons[0].update()
+ if buttons[0].long_press:
+ # print("long press detected")
+ pixels.fill(color.BLACK)
+ pixels.show()
+ game_mode = False
+ pixels.fill(colors[color_index])
+ # if new level starting..
+ if new_target:
+ if buttons[0].released:
+ # randomize target location
+ y = random.randint(5, 22)
+ x = y - 1
+ z = y + 1
+ new_target = False
+ pixels[x] = color.WHITE
+ pixels[y] = colors[next_color]
+ pixels[z] = color.WHITE
+ else:
+ # delay without time.sleep()
+ if (pixel + speed) < time.monotonic():
+ # turn off pixel behind chaser
+ if num > 0:
+ last_num = num - 1
+ pixels[last_num] = color.BLACK
+ pixels.show()
+ # keep target pixels their colors when the chaser passes
+ if last_num in (x, y, z):
+ pixels[x] = color.WHITE
+ pixels[y] = colors[next_color]
+ pixels[z] = color.WHITE
+ # move chaser pixel by one
+ if num < num_pixels:
+ pixels[num] = colors[now_color]
+ pixels.show()
+ num += 1
+ # send chaser back to the beginning of the circle
+ if num == num_pixels:
+ last_num = num - 1
+ pixels[last_num] = color.BLACK
+ pixels.show()
+ num = 0
+ # if the chaser hits the target...
+ if last_num in [x, y, z] and not buttons[0].value:
+ # fills with the next color
+ pixels.fill(colors[next_color])
+ pixels.show()
+ # chaser resets
+ num = 0
+ time.sleep(0.5)
+ pixels.fill(color.BLACK)
+ pixels.show()
+ # speed increases for next level
+ speed = speed - level
+ # color updates
+ next_color = (next_color + 1) % 9
+ now_color = (now_color + 1) % 9
+ # setup for new target
+ new_target = True
+ # if the chaser misses the target...
+ if last_num not in [x, y, z] and not buttons[0].value:
+ # fills with current chaser color
+ pixels.fill(color.BLACK)
+ pixels.show()
+ # chaser is reset
+ num = 0
+ # speed is reset to default
+ speed = 0.1
+ # colors are reset
+ next_color = 1
+ now_color = 0
+ # setup for new target
+ new_target = True
+ # when you have beaten all the levels...
+ if speed < final_level:
+ # rainbows!
+ rainbow_cycle(0.01)
+ time.sleep(1)
+ # chaser is reset
+ num = 0
+ pixels.fill(color.BLACK)
+ pixels.show()
+ # speed is reset to default
+ speed = 0.1
+ # colors are reset
+ next_color = 1
+ now_color = 0
+ # setup for new target
+ new_target = True
+ # time.monotonic() is reset for the delay
+ pixel = time.monotonic()
diff --git a/NeoPixel_Novelty_Cufflinks/README.md b/NeoPixel_Novelty_Cufflinks/README.md
new file mode 100644
index 000000000..728a41fd5
--- /dev/null
+++ b/NeoPixel_Novelty_Cufflinks/README.md
@@ -0,0 +1,6 @@
+# NeoPixel Novelty Cufflinks
+
+CircuitPython Code for Cufflinks with scrolling text that chooses a random string to display and a heart icon. Built on the QT Py RP2040 with the NeoPixel 5x5 BFF attached.
+
+Tutorial at https://learn.adafruit.com/neopixel-novelty-cufflinks-with-scrolling-text/overview
+
diff --git a/NeoPixel_Novelty_Cufflinks/code.py b/NeoPixel_Novelty_Cufflinks/code.py
new file mode 100755
index 000000000..fb496d135
--- /dev/null
+++ b/NeoPixel_Novelty_Cufflinks/code.py
@@ -0,0 +1,84 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Erin St. Blaine for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+import time
+from random import randint
+import board
+import neopixel
+import fontio
+from adafruit_display_text.bitmap_label import Label
+from adafruit_bitmap_font import bitmap_font
+from displayio import Bitmap
+from rainbowio import colorwheel
+
+tom_thumb = bitmap_font.load_font("tom-thumb.pcf", Bitmap)
+
+_glyph_keys = ['bitmap', 'tile_index', 'width', 'height', 'dx', 'dy', 'shift_x', 'shift_y']
+def patch_glyph(base, **kw):
+ d = {}
+ for k in _glyph_keys:
+ d[k] = kw.get(k, getattr(base, k))
+ return fontio.Glyph(**d)
+
+class PatchedFont:
+ def __init__(self, base_font, patches):
+ self.base_font = base_font
+ self.patches = patches
+
+ def get_glyph(self, glyph):
+ g = self.base_font.get_glyph(glyph)
+ patch = self.patches.get(glyph)
+ if patch is not None:
+ # print("patching", repr(chr(glyph)), g)
+ g = patch_glyph(g, **patch)
+ # print("patched", g)
+ return g
+
+ def get_bounding_box(self):
+ return self.base_font.get_bounding_box()
+
+font = PatchedFont(tom_thumb,
+ {32: {'shift_x': 1, 'dx': 0},
+ 105: {'dx': 0, 'shift_x': 2},
+ 33: {'dx': 0, 'shift_x': 2},
+ })
+
+# List of text strings
+text_strings = [" love bun ", " dear me ", " my bear ",
+ " my my ", " you are babe "]
+# Create a label object
+label = Label(text="text", font=font)
+bitmap = label.bitmap
+heart_bitmap = [
+ 0, 1, 1, 0, 0,
+ 1, 1, 1, 1, 0,
+ 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0,
+ 0, 1, 1, 0, 0
+]
+pixels = neopixel.NeoPixel(board.A1, 5*5, brightness=.08, auto_write=False)
+while True:
+ for hue in range(0, 255, 3):
+ color = colorwheel(hue)
+ pixels[:] = [pixel * color for pixel in heart_bitmap]
+ pixels.show()
+ time.sleep(.05)
+ hue = 0
+ string_index = randint(0, 4)
+ label.text = text_strings[string_index]
+ bitmap = label.bitmap
+ print(string_index)
+ for i in range(bitmap.width):
+ # Use a rainbow of colors, shifting each column of pixels
+ hue = hue + 7
+ if hue >= 256:
+ hue = hue - 256
+ color = colorwheel(hue)
+ # Scoot the old text left by 1 pixel
+ pixels[:20] = pixels[5:]
+ # Draw in the next line of text
+ for y in range(5):
+ # Select black or color depending on the bitmap pixel
+ pixels[20+y] = color * bitmap[i,y]
+ pixels.show()
+ time.sleep(.2)
diff --git a/NeoPixel_Novelty_Cufflinks/tom-thumb.pcf b/NeoPixel_Novelty_Cufflinks/tom-thumb.pcf
new file mode 100755
index 000000000..b9f2ae728
Binary files /dev/null and b/NeoPixel_Novelty_Cufflinks/tom-thumb.pcf differ
diff --git a/NeoPixel_Sprite_Weather_Display/code.py b/NeoPixel_Sprite_Weather_Display/code.py
new file mode 100644
index 000000000..8c3b34fc2
--- /dev/null
+++ b/NeoPixel_Sprite_Weather_Display/code.py
@@ -0,0 +1,187 @@
+# SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import os
+import ssl
+import time
+import board
+import wifi
+import socketpool
+import fontio
+import neopixel
+import simpleio
+from adafruit_display_text.bitmap_label import Label
+from adafruit_bitmap_font import bitmap_font
+from displayio import Bitmap
+from rainbowio import colorwheel
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+import adafruit_requests
+from weather_codes import weather_codes
+
+# minimum expected temperature
+min_temp = 0
+# maximum expected temperature
+max_temp = 100
+# first daylight hour
+daytime_min = 7
+# last daylight hour
+daytime_max = 17
+# latitude
+lat = 42.36
+# longitude
+long = -71.06
+# temp unit for API request
+temperature_unit = "fahrenheit"
+# temp unit for display
+temp_unit = "F"
+
+# API request to open-meteo
+weather_url = "https://api.open-meteo.com/v1/forecast?"
+# pass latitude and longitude
+weather_url += "latitude=%d&longitude=%d&timezone=auto" % (lat, long)
+# pass temperature_unit
+weather_url += "¤t_weather=true&temperature_unit=%s&windspeed_unit=mph" % temperature_unit
+
+# connect to SSID
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+def get_the_weather():
+ # make the API request
+ response = requests.get(weather_url)
+ # packs the response into a JSON
+ response_as_json = response.json()
+ print()
+ # prints the entire JSON
+ print(response_as_json)
+ print()
+ # gets current weather code
+ w = int(response_as_json['current_weather']['weathercode'])
+ # gets temperature
+ t = response_as_json['current_weather']['temperature']
+ temp_int = int(t)
+ t_c = simpleio.map_range(temp_int, min_temp, max_temp, 255, 0)
+ # gets time
+ json_time = response_as_json['current_weather']['time']
+ n_t = json_time.rsplit("T", 1)[-1]
+ n_t = int(n_t[:2])
+ return w, t, t_c, n_t
+
+# initial API call
+weather, temp, temp_color, new_time = get_the_weather()
+
+# font edit code by Jeff Epler
+tom_thumb = bitmap_font.load_font("tom-thumb.pcf", Bitmap)
+
+_glyph_keys = ['bitmap', 'tile_index', 'width', 'height', 'dx', 'dy', 'shift_x', 'shift_y']
+def patch_glyph(base, **kw):
+ d = {}
+ for k in _glyph_keys:
+ d[k] = kw.get(k, getattr(base, k))
+ return fontio.Glyph(**d)
+
+class PatchedFont:
+ def __init__(self, base_font, patches):
+ self.base_font = base_font
+ self.patches = patches
+
+ def get_glyph(self, glyph):
+ g = self.base_font.get_glyph(glyph)
+ patch = self.patches.get(glyph)
+ if patch is not None:
+ #print("patching", repr(chr(glyph)), g)
+ g = patch_glyph(g, **patch)
+ #print("patched", g)
+ return g
+
+ def get_bounding_box(self):
+ return self.base_font.get_bounding_box()
+
+font = PatchedFont(tom_thumb,
+ {
+ 32: {'shift_x': 1, 'dx': 0},
+ 105: {'dx': 0, 'shift_x': 2},
+ 33: {'dx': 0, 'shift_x': 2},
+ })
+# thank you Jeff for this PatchedFont() function!
+
+# temperature for scrolling text
+label = Label(text=" %s°%s " % (temp, temp_unit), font=font)
+text = label.bitmap
+
+# create 5x5 neopixels
+pixels = neopixel.NeoPixel(board.A3, 5*5, brightness=.08, auto_write=False)
+# count for pixels when drawing bitmaps
+count = 0
+# arrays to pack assets from weather_codes helper
+# weather condition code
+codes = []
+# bitmaps for daytime
+day_images = []
+# bitmaps for nighttime
+night_images = []
+
+for i in weather_codes:
+ codes.append(i['code'])
+ day_images.append(i['day_img'])
+ night_images.append(i['night_img'])
+
+# checks if it's day or night based on hour
+def day_or_night(t):
+ if t in range(daytime_min, daytime_max):
+ z = day_images[weather]
+ else:
+ z = night_images[weather]
+ return z
+
+# initial sprite selection
+img = day_or_night(new_time)
+
+# draw bitmap sprite
+def draw_sprite(c):
+ for pixel in img:
+ pixels[c] = pixel
+ pixels.show()
+ c += 1
+ time.sleep(0.001)
+ c = 0
+
+# ticks time tracker
+clock = ticks_ms()
+
+# 15 minutes in milliseconds
+weather_check = 900000
+
+# display current weather sprite & scroll temperature
+while True:
+ # checks the time
+ if ticks_diff(ticks_ms(), clock) > weather_check:
+ print("pinging Open-Meteo")
+ # make the API request with function
+ # return weather ID, temp, temp color & hour
+ weather, temp, temp_color, new_time = get_the_weather()
+ # checks if it's day or night based on hour
+ # & returns day or night version of sprite
+ img = day_or_night(new_time)
+ label.text = " %s°%s " % (temp, temp_unit)
+ # reset clock
+ clock = ticks_add(clock, weather_check)
+ # draw bitmap sprite
+ draw_sprite(count)
+ # blocking delay to hold the sprite on the display
+ time.sleep(5)
+ # draw scrolling text
+ for v in range(2):
+ for i in range(text.width):
+ # Scoot the old text left by 1 pixel
+ pixels[:20] = pixels[5:]
+ # adjust color based on temperature
+ color = colorwheel(temp_color)
+ # Draw in the next line of text
+ for y in range(5):
+ # Select black or color depending on the bitmap pixel
+ pixels[20+y] = color * text[i,y]
+ pixels.show()
+ time.sleep(.1)
diff --git a/NeoPixel_Sprite_Weather_Display/tom-thumb.pcf b/NeoPixel_Sprite_Weather_Display/tom-thumb.pcf
new file mode 100644
index 000000000..b9f2ae728
Binary files /dev/null and b/NeoPixel_Sprite_Weather_Display/tom-thumb.pcf differ
diff --git a/NeoPixel_Sprite_Weather_Display/weather_codes.py b/NeoPixel_Sprite_Weather_Display/weather_codes.py
new file mode 100644
index 000000000..a2a10065f
--- /dev/null
+++ b/NeoPixel_Sprite_Weather_Display/weather_codes.py
@@ -0,0 +1,191 @@
+# SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+y = (255, 125, 0)
+o = (0, 0, 0)
+a = (0, 75, 125)
+w = (255, 255, 255)
+v = (127, 0, 255)
+b = (0, 0, 255)
+z = (0, 0, 25)
+g = (25, 25, 25)
+sun_bitmap = [
+ y,a,y,a,y,
+ a,y,y,y,a,
+ y,y,y,y,y,
+ a,y,y,y,a,
+ y,a,y,a,y,
+]
+cloud_bitmap = [
+ a,a,a,w,a,
+ a,w,w,w,a,
+ a,w,w,w,a,
+ a,a,w,w,a,
+ a,a,a,w,a,
+]
+partSun_bitmap = [
+ a,w,w,w,a,
+ a,w,w,w,w,
+ y,y,w,w,a,
+ a,y,y,w,a,
+ y,a,y,a,a,
+]
+rain_bitmap = [
+ z,z,v,z,b,
+ v,v,v,b,z,
+ v,v,v,z,b,
+ z,v,v,b,z,
+ z,z,v,z,b,
+]
+thunder_bitmap = [
+ z,z,v,z,b,
+ v,v,v,b,z,
+ v,v,y,z,y,
+ z,y,v,y,z,
+ z,z,v,z,b,
+]
+snow_bitmap = [
+ z,z,v,z,w,
+ v,v,v,w,z,
+ v,v,v,z,w,
+ z,v,v,w,z,
+ z,z,v,z,w,
+]
+night_bitmap = [
+ y,g,g,y,g,
+ g,g,y,g,g,
+ g,y,g,g,y,
+ y,y,y,g,g,
+ g,y,g,g,g,
+]
+nightCloud_bitmap = [
+ g,w,w,w,g,
+ g,w,w,w,g,
+ y,g,w,w,g,
+ g,g,g,w,g,
+ g,g,y,g,g,
+]
+nightRain_bitmap = [
+ g,v,v,v,b,
+ g,v,v,v,g,
+ y,g,v,v,b,
+ g,g,g,v,g,
+ g,g,y,g,g,
+]
+nightThunder_bitmap = [
+ g,v,v,v,b,
+ g,v,v,v,g,
+ g,g,y,v,y,
+ v,y,g,y,b,
+ v,v,b,g,g,
+]
+nightSnow_bitmap = [
+ g,v,v,v,w,
+ g,v,v,v,g,
+ y,g,v,v,w,
+ g,g,g,v,g,
+ g,g,y,g,g,
+]
+
+weather_codes = [
+{"code" : 0, "day_img" : sun_bitmap, "night_img" : night_bitmap},
+{"code" : 1, "day_img" : sun_bitmap, "night_img" : night_bitmap},
+{"code" : 2, "day_img" : sun_bitmap, "night_img" : night_bitmap},
+{"code" : 3, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 4, "day_img" : partSun_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 5, "day_img" : partSun_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 6, "day_img" : partSun_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 7, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 8, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 9, "day_img" : partSun_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 10, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 11, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 12, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 13, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 14, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 15, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 16, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 17, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 18, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 19, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 20, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 21, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 22, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 23, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 24, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 25, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 26, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 27, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 28, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 29, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 30, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 31, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 32, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 33, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 34, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 35, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 36, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 37, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 38, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 39, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 40, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 41, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 42, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 43, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 44, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 45, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 46, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 47, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 48, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 49, "day_img" : cloud_bitmap, "night_img" : nightCloud_bitmap},
+{"code" : 50, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 51, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 52, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 53, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 54, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 55, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 56, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 57, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 58, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 59, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 60, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 61, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 62, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 63, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 64, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 65, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 66, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 67, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 68, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 69, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 70, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 71, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 72, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 73, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 74, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 75, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 76, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 77, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 78, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 79, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 80, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 81, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 82, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 83, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 84, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 85, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 86, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 87, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 88, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 89, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 90, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 91, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 92, "day_img" : rain_bitmap, "night_img" : nightRain_bitmap},
+{"code" : 93, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 94, "day_img" : snow_bitmap, "night_img" : nightSnow_bitmap},
+{"code" : 95, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 96, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 97, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 98, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap},
+{"code" : 99, "day_img" : thunder_bitmap, "night_img" : nightThunder_bitmap}
+]
diff --git a/NeoTrellisM4_Dice/code.py b/NeoTrellis/NeoTrellisM4_Dice/code.py
similarity index 100%
rename from NeoTrellisM4_Dice/code.py
rename to NeoTrellis/NeoTrellisM4_Dice/code.py
diff --git a/NeoTrellis_Color_Game/code.py b/NeoTrellis/NeoTrellis_Color_Game/code.py
similarity index 100%
rename from NeoTrellis_Color_Game/code.py
rename to NeoTrellis/NeoTrellis_Color_Game/code.py
diff --git a/NeoTrellis_Color_Game/files/NeoTrellis Case.f3d b/NeoTrellis/NeoTrellis_Color_Game/files/NeoTrellis Case.f3d
similarity index 100%
rename from NeoTrellis_Color_Game/files/NeoTrellis Case.f3d
rename to NeoTrellis/NeoTrellis_Color_Game/files/NeoTrellis Case.f3d
diff --git a/NeoTrellis_Color_Game/files/NeoTrellis Case.step b/NeoTrellis/NeoTrellis_Color_Game/files/NeoTrellis Case.step
similarity index 100%
rename from NeoTrellis_Color_Game/files/NeoTrellis Case.step
rename to NeoTrellis/NeoTrellis_Color_Game/files/NeoTrellis Case.step
diff --git a/NeoTrellis_Color_Game/files/circuit diagram.fzz b/NeoTrellis/NeoTrellis_Color_Game/files/circuit diagram.fzz
similarity index 100%
rename from NeoTrellis_Color_Game/files/circuit diagram.fzz
rename to NeoTrellis/NeoTrellis_Color_Game/files/circuit diagram.fzz
diff --git a/NeoTrellis_Color_Game/files/nt-bottom.stl b/NeoTrellis/NeoTrellis_Color_Game/files/nt-bottom.stl
similarity index 100%
rename from NeoTrellis_Color_Game/files/nt-bottom.stl
rename to NeoTrellis/NeoTrellis_Color_Game/files/nt-bottom.stl
diff --git a/NeoTrellis_Color_Game/files/nt-frame.stl b/NeoTrellis/NeoTrellis_Color_Game/files/nt-frame.stl
similarity index 100%
rename from NeoTrellis_Color_Game/files/nt-frame.stl
rename to NeoTrellis/NeoTrellis_Color_Game/files/nt-frame.stl
diff --git a/NeoTrellis_Color_Game/files/nt-top.stl b/NeoTrellis/NeoTrellis_Color_Game/files/nt-top.stl
similarity index 100%
rename from NeoTrellis_Color_Game/files/nt-top.stl
rename to NeoTrellis/NeoTrellis_Color_Game/files/nt-top.stl
diff --git a/NeoTrellis_Color_Game/files/nt-tray.stl b/NeoTrellis/NeoTrellis_Color_Game/files/nt-tray.stl
similarity index 100%
rename from NeoTrellis_Color_Game/files/nt-tray.stl
rename to NeoTrellis/NeoTrellis_Color_Game/files/nt-tray.stl
diff --git a/NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.f3d b/NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.f3d
similarity index 100%
rename from NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.f3d
rename to NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.f3d
diff --git a/NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.step b/NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.step
similarity index 100%
rename from NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.step
rename to NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis M4 Bumper.step
diff --git a/NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-simple.stl b/NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-simple.stl
similarity index 100%
rename from NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-simple.stl
rename to NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-simple.stl
diff --git a/NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-triangles.stl b/NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-triangles.stl
similarity index 100%
rename from NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-triangles.stl
rename to NeoTrellis/NeoTrellis_M4_Bumper/NeoTrellis_M4-bumper-triangles.stl
diff --git a/NeoTrellis_M4_Grains_of_Sand/README.md b/NeoTrellis/NeoTrellis_M4_Grains_of_Sand/README.md
similarity index 100%
rename from NeoTrellis_M4_Grains_of_Sand/README.md
rename to NeoTrellis/NeoTrellis_M4_Grains_of_Sand/README.md
diff --git a/NeoTrellis_M4_Grains_of_Sand/code.py b/NeoTrellis/NeoTrellis_M4_Grains_of_Sand/code.py
similarity index 100%
rename from NeoTrellis_M4_Grains_of_Sand/code.py
rename to NeoTrellis/NeoTrellis_M4_Grains_of_Sand/code.py
diff --git a/NeoTrellis_M4_Grains_of_Sand/water-click.wav b/NeoTrellis/NeoTrellis_M4_Grains_of_Sand/water-click.wav
similarity index 100%
rename from NeoTrellis_M4_Grains_of_Sand/water-click.wav
rename to NeoTrellis/NeoTrellis_M4_Grains_of_Sand/water-click.wav
diff --git a/NeoTrellis/NeoTrellis_M4_Live_Launcher/.neotrellis_m4.test.only b/NeoTrellis/NeoTrellis_M4_Live_Launcher/.neotrellis_m4.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Neotrellis_M4_Live_Launcher/Neotrellis_M4_Live_Launcher.ino b/NeoTrellis/NeoTrellis_M4_Live_Launcher/NeoTrellis_M4_Live_Launcher.ino
similarity index 100%
rename from Neotrellis_M4_Live_Launcher/Neotrellis_M4_Live_Launcher.ino
rename to NeoTrellis/NeoTrellis_M4_Live_Launcher/NeoTrellis_M4_Live_Launcher.ino
diff --git a/NeoTrellis_M4_MIDI_Synth/.circuitpython.skip b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/.circuitpython.skip
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/.circuitpython.skip
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/.circuitpython.skip
diff --git a/NeoTrellis_M4_MIDI_Synth/code.py b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/code.py
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/code.py
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/code.py
diff --git a/NeoTrellis_M4_MIDI_Synth/events.py b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/events.py
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/events.py
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/events.py
diff --git a/NeoTrellis_M4_MIDI_Synth/header.py b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/header.py
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/header.py
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/header.py
diff --git a/NeoTrellis_M4_MIDI_Synth/midi/01_scale.mid b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/01_scale.mid
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/midi/01_scale.mid
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/01_scale.mid
diff --git a/NeoTrellis_M4_MIDI_Synth/midi/02_2_note_chords.mid b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/02_2_note_chords.mid
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/midi/02_2_note_chords.mid
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/02_2_note_chords.mid
diff --git a/NeoTrellis_M4_MIDI_Synth/midi/03_multi_note.mid b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/03_multi_note.mid
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/midi/03_multi_note.mid
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/03_multi_note.mid
diff --git a/NeoTrellis_M4_MIDI_Synth/midi/04_up_down.mid b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/04_up_down.mid
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/midi/04_up_down.mid
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/midi/04_up_down.mid
diff --git a/NeoTrellis_M4_MIDI_Synth/parser.py b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/parser.py
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/parser.py
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/parser.py
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A1.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A1.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A1.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A1.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_A5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B1.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B1.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B1.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B1.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_B5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C1.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C1.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C1.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C1.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C6.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C6.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C6.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_C6.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D1.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D1.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D1.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D1.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_D5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E1.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E1.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E1.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E1.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_E5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F1.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F1.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F1.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F1.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_F5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G1.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G1.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G1.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G1.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Arp/Arp_G5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_A5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_B5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C6.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C6.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C6.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_C6.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_D5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_E5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_F5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G2.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G2.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G2.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G2.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G3.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G3.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G3.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G3.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G4.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G4.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G4.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G4.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G5.wav b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G5.wav
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G5.wav
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/Horn/Horn_G5.wav
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/README.txt b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/README.txt
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/README.txt
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/README.txt
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/arp.txt b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/arp.txt
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/arp.txt
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/arp.txt
diff --git a/NeoTrellis_M4_MIDI_Synth/samples/horn.txt b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/horn.txt
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/samples/horn.txt
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/samples/horn.txt
diff --git a/NeoTrellis_M4_MIDI_Synth/sequencer.py b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/sequencer.py
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/sequencer.py
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/sequencer.py
diff --git a/NeoTrellis_M4_MIDI_Synth/synth.py b/NeoTrellis/NeoTrellis_M4_MIDI_Synth/synth.py
similarity index 100%
rename from NeoTrellis_M4_MIDI_Synth/synth.py
rename to NeoTrellis/NeoTrellis_M4_MIDI_Synth/synth.py
diff --git a/NeoTrellis_M4_Memory_Game/code.py b/NeoTrellis/NeoTrellis_M4_Memory_Game/code.py
similarity index 100%
rename from NeoTrellis_M4_Memory_Game/code.py
rename to NeoTrellis/NeoTrellis_M4_Memory_Game/code.py
diff --git a/NeoTrellis_M4_RPG_Sound_Board/.circuitpython.skip b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/.circuitpython.skip
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/.circuitpython.skip
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/.circuitpython.skip
diff --git a/NeoTrellis_M4_RPG_Sound_Board/code.py b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/code.py
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/code.py
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/code.py
diff --git a/NeoTrellis_M4_RPG_Sound_Board/color_names.py b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/color_names.py
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/color_names.py
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/color_names.py
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/37_Catacombs_1m_8000.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/37_Catacombs_1m_8000.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/37_Catacombs_1m_8000.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/37_Catacombs_1m_8000.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/65_Dungeon_I_1m_8000.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/65_Dungeon_I_1m_8000.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/65_Dungeon_I_1m_8000.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/65_Dungeon_I_1m_8000.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/README.txt b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/README.txt
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/README.txt
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/README.txt
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/bats.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/bats.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/bats.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/bats.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/construct_attack.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/construct_attack.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/construct_attack.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/construct_attack.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/creature1.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/creature1.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/creature1.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/creature1.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/door_close.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/door_close.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/door_close.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/door_close.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/door_open.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/door_open.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/door_open.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/door_open.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/dragon_attack.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/dragon_attack.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/dragon_attack.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/dragon_attack.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/drips1_lp.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/drips1_lp.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/drips1_lp.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/drips1_lp.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/elemental_attack.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/elemental_attack.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/elemental_attack.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/elemental_attack.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/flies.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/flies.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/flies.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/flies.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/goblin_attack.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/goblin_attack.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/goblin_attack.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/goblin_attack.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/growl1.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/growl1.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/growl1.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/growl1.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/humanoid_attack.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/humanoid_attack.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/humanoid_attack.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/humanoid_attack.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/large_beast_attack.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/large_beast_attack.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/large_beast_attack.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/large_beast_attack.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/low_tone1.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/low_tone1.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/low_tone1.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/low_tone1.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/rats.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/rats.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/rats.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/rats.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/roar.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/roar.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/roar.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/roar.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/rumble.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/rumble.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/rumble.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/rumble.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/scrape1a.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/scrape1a.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/scrape1a.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/scrape1a.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/screams.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/screams.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/screams.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/screams.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/secret_door.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/secret_door.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/secret_door.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/secret_door.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/stream.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/stream.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/stream.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/stream.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/trap_arrow.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_arrow.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/trap_arrow.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_arrow.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/trap_gate.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_gate.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/trap_gate.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_gate.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/trap_magic.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_magic.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/trap_magic.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_magic.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/trap_pit.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_pit.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/trap_pit.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_pit.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/trap_poison.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_poison.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/trap_poison.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_poison.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/trap_spike.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_spike.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/trap_spike.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/trap_spike.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/samples/unlock_door.wav b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/unlock_door.wav
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/samples/unlock_door.wav
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/samples/unlock_door.wav
diff --git a/NeoTrellis_M4_RPG_Sound_Board/soundboard.txt b/NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/soundboard.txt
similarity index 100%
rename from NeoTrellis_M4_RPG_Sound_Board/soundboard.txt
rename to NeoTrellis/NeoTrellis_M4_RPG_Sound_Board/soundboard.txt
diff --git a/NeoTrellis_M4_Sand/water-click.wav b/NeoTrellis/NeoTrellis_M4_Sand/water-click.wav
similarity index 100%
rename from NeoTrellis_M4_Sand/water-click.wav
rename to NeoTrellis/NeoTrellis_M4_Sand/water-click.wav
diff --git a/NeoTrellis_M4_Simple_Drum_Machine/code.py b/NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/code.py
similarity index 100%
rename from NeoTrellis_M4_Simple_Drum_Machine/code.py
rename to NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/code.py
diff --git a/NeoTrellis_M4_Simple_Drum_Machine/samples/voice01.wav b/NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice01.wav
similarity index 100%
rename from NeoTrellis_M4_Simple_Drum_Machine/samples/voice01.wav
rename to NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice01.wav
diff --git a/NeoTrellis_M4_Simple_Drum_Machine/samples/voice02.wav b/NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice02.wav
similarity index 100%
rename from NeoTrellis_M4_Simple_Drum_Machine/samples/voice02.wav
rename to NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice02.wav
diff --git a/NeoTrellis_M4_Simple_Drum_Machine/samples/voice03.wav b/NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice03.wav
similarity index 100%
rename from NeoTrellis_M4_Simple_Drum_Machine/samples/voice03.wav
rename to NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice03.wav
diff --git a/NeoTrellis_M4_Simple_Drum_Machine/samples/voice04.wav b/NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice04.wav
similarity index 100%
rename from NeoTrellis_M4_Simple_Drum_Machine/samples/voice04.wav
rename to NeoTrellis/NeoTrellis_M4_Simple_Drum_Machine/samples/voice04.wav
diff --git a/NeoTrellis_M4_Sound_Board/.circuitpython.skip b/NeoTrellis/NeoTrellis_M4_Sound_Board/.circuitpython.skip
similarity index 100%
rename from NeoTrellis_M4_Sound_Board/.circuitpython.skip
rename to NeoTrellis/NeoTrellis_M4_Sound_Board/.circuitpython.skip
diff --git a/NeoTrellis_M4_Sound_Board/code.py b/NeoTrellis/NeoTrellis_M4_Sound_Board/code.py
similarity index 100%
rename from NeoTrellis_M4_Sound_Board/code.py
rename to NeoTrellis/NeoTrellis_M4_Sound_Board/code.py
diff --git a/NeoTrellis_M4_Sound_Board/color_names.py b/NeoTrellis/NeoTrellis_M4_Sound_Board/color_names.py
similarity index 100%
rename from NeoTrellis_M4_Sound_Board/color_names.py
rename to NeoTrellis/NeoTrellis_M4_Sound_Board/color_names.py
diff --git a/NeoTrellis_MIDI_Feedback_Controller/code.py b/NeoTrellis/NeoTrellis_MIDI_Feedback_Controller/code.py
similarity index 100%
rename from NeoTrellis_MIDI_Feedback_Controller/code.py
rename to NeoTrellis/NeoTrellis_MIDI_Feedback_Controller/code.py
diff --git a/NeoTrellis_Paint/code.py b/NeoTrellis/NeoTrellis_Paint/code.py
similarity index 100%
rename from NeoTrellis_Paint/code.py
rename to NeoTrellis/NeoTrellis_Paint/code.py
diff --git a/NeoTrellis_Soundbox/.circuitpython.skip b/NeoTrellis/NeoTrellis_Soundbox/.circuitpython.skip
similarity index 100%
rename from NeoTrellis_Soundbox/.circuitpython.skip
rename to NeoTrellis/NeoTrellis_Soundbox/.circuitpython.skip
diff --git a/NeoTrellis_Soundbox/README.md b/NeoTrellis/NeoTrellis_Soundbox/README.md
similarity index 100%
rename from NeoTrellis_Soundbox/README.md
rename to NeoTrellis/NeoTrellis_Soundbox/README.md
diff --git a/NeoTrellis_Soundbox/code.py b/NeoTrellis/NeoTrellis_Soundbox/code.py
similarity index 100%
rename from NeoTrellis_Soundbox/code.py
rename to NeoTrellis/NeoTrellis_Soundbox/code.py
diff --git a/Nunchuck_Laser/code.py b/Nunchuck_Laser/code.py
index 00fed3ad3..e7ee4ae97 100755
--- a/Nunchuck_Laser/code.py
+++ b/Nunchuck_Laser/code.py
@@ -17,7 +17,8 @@
# STEMMA QT 3V needs to be activated
i2c_power = digitalio.DigitalInOut(board.I2C_POWER)
i2c_power.switch_to_output(value=False)
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
wing = adafruit_pca9685.PCA9685(i2c)
wing.frequency = 50
diff --git a/Nunchuck_Ring/code.py b/Nunchuck_Ring/code.py
index 28d16ab4f..2e3eabdcd 100644
--- a/Nunchuck_Ring/code.py
+++ b/Nunchuck_Ring/code.py
@@ -8,7 +8,9 @@
import neopixel
import simpleio
-nc = adafruit_nunchuk.Nunchuk(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+nc = adafruit_nunchuk.Nunchuk(i2c)
# create neopixel object
NEOPIN = board.D6
NEOLENGTH = 60
diff --git a/OV5640_Breakout/CircuitPython_Kaluga-ascii-mirror/code.py b/OV5640_Breakout/CircuitPython_Kaluga-ascii-mirror/code.py
new file mode 100644
index 000000000..0895f640d
--- /dev/null
+++ b/OV5640_Breakout/CircuitPython_Kaluga-ascii-mirror/code.py
@@ -0,0 +1,68 @@
+# SPDX-FileCopyrightText: Copyright (c) 2021 Jeff Epler for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+"""
+This demo is designed for the Kaluga development kit version 1.3.
+
+To fix the MemoryError when creating a Camera object, Place the line
+```toml
+CIRCUITPY_RESERVED_PSRAM=1048576
+```
+in the file **CIRCUITPY/settings.toml** and restart.
+"""
+
+import sys
+
+import board
+import keypad
+import displayio
+import espcamera
+import espidf
+
+# The demo runs very slowly if the LCD display is enabled!
+# It's intended to be viewed on the REPL on a host computer
+displayio.release_displays()
+
+if espidf.get_reserved_psram() < 1047586:
+ print("""Place the following line in CIRCUITPY/settings.toml, then hard-reset the board:
+CIRCUITPY_RESERVED_PSRAM=1048576
+""")
+ raise SystemExit
+
+print("Initializing camera")
+cam = espcamera.Camera(
+ data_pins=board.CAMERA_DATA,
+ external_clock_pin=board.CAMERA_XCLK,
+ pixel_clock_pin=board.CAMERA_PCLK,
+ vsync_pin=board.CAMERA_VSYNC,
+ href_pin=board.CAMERA_HREF,
+ pixel_format=espcamera.PixelFormat.GRAYSCALE,
+ frame_size=espcamera.FrameSize.QQVGA,
+ i2c=board.I2C(),
+ external_clock_frequency=20_000_000,
+ framebuffer_count=2)
+print("initialized")
+
+k = keypad.Keys([board.IO0], value_when_pressed=False)
+
+chars = b" .:-=+*#%@"
+remap = [chars[i * (len(chars) - 1) // 255] for i in range(256)]
+width = cam.width
+row = bytearray(width//2)
+
+sys.stdout.write("\033[2J")
+
+while True:
+ if (e := k.events.get()) is not None and e.pressed:
+ cam.colorbar = not cam.colorbar
+
+ frame = cam.take(1)
+
+ for j in range(0, cam.height, 5):
+ sys.stdout.write(f"\033[{j//5}H")
+ for i in range(cam.width // 2):
+ row[i] = remap[frame[width * j + 2 * i]]
+ sys.stdout.write(row)
+ sys.stdout.write("\033[K")
+ sys.stdout.write("\033[J")
diff --git a/OV5640_Breakout/CircuitPython_Kaluga-jpeg/code.py b/OV5640_Breakout/CircuitPython_Kaluga-jpeg/code.py
new file mode 100644
index 000000000..946e8761f
--- /dev/null
+++ b/OV5640_Breakout/CircuitPython_Kaluga-jpeg/code.py
@@ -0,0 +1,146 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Jeff Epler for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+"""
+This demo is designed for the Kaluga development kit version 1.3 with the
+ILI9341 display. It requires CircuitPython 8.
+
+This demo needs reserved psram properly configured in settings.toml:
+CIRCUITPY_RESERVED_PSRAM=1048576
+
+This example also requires an SD card breakout wired as follows:
+ * IO18: SD Clock Input
+ * IO17: SD Serial Output (MISO)
+ * IO14: SD Serial Input (MOSI)
+ * IO12: SD Chip Select
+
+Insert a CircuitPython-compatible SD card before powering on the Kaluga.
+Press the "BOOT" button to take a photo in BMP format.
+"""
+
+import os
+import struct
+
+import board
+import busio
+import displayio
+import espcamera
+import espidf
+import keypad
+import sdcardio
+import storage
+
+print("Initializing display")
+displayio.release_displays()
+spi = busio.SPI(MOSI=board.LCD_MOSI, clock=board.LCD_CLK)
+display_bus = displayio.FourWire(
+ spi,
+ command=board.LCD_D_C,
+ chip_select=board.LCD_CS,
+ reset=board.LCD_RST,
+ baudrate=80_000_000,
+)
+_INIT_SEQUENCE = (
+ b"\x01\x80\x80" # Software reset then delay 0x80 (128ms)
+ b"\xEF\x03\x03\x80\x02"
+ b"\xCF\x03\x00\xC1\x30"
+ b"\xED\x04\x64\x03\x12\x81"
+ b"\xE8\x03\x85\x00\x78"
+ b"\xCB\x05\x39\x2C\x00\x34\x02"
+ b"\xF7\x01\x20"
+ b"\xEA\x02\x00\x00"
+ b"\xc0\x01\x23" # Power control VRH[5:0]
+ b"\xc1\x01\x10" # Power control SAP[2:0];BT[3:0]
+ b"\xc5\x02\x3e\x28" # VCM control
+ b"\xc7\x01\x86" # VCM control2
+ b"\x36\x01\x40" # Memory Access Control
+ b"\x37\x01\x00" # Vertical scroll zero
+ b"\x3a\x01\x55" # COLMOD: Pixel Format Set
+ b"\xb1\x02\x00\x18" # Frame Rate Control (In Normal Mode/Full Colors)
+ b"\xb6\x03\x08\x82\x27" # Display Function Control
+ b"\xF2\x01\x00" # 3Gamma Function Disable
+ b"\x26\x01\x01" # Gamma curve selected
+ b"\xe0\x0f\x0F\x31\x2B\x0C\x0E\x08\x4E\xF1\x37\x07\x10\x03\x0E\x09\x00" # Set Gamma
+ b"\xe1\x0f\x00\x0E\x14\x03\x11\x07\x31\xC1\x48\x08\x0F\x0C\x31\x36\x0F" # Set Gamma
+ b"\x11\x80\x78" # Exit Sleep then delay 0x78 (120ms)
+ b"\x29\x80\x78" # Display on then delay 0x78 (120ms)
+)
+
+display = displayio.Display(display_bus, _INIT_SEQUENCE, width=320, height=240)
+
+if espidf.get_reserved_psram() < 1047586:
+ print("""Place the following line in CIRCUITPY/settings.toml, then hard-reset the board:
+CIRCUITPY_RESERVED_PSRAM=1048576
+""")
+ raise SystemExit
+
+print("Initializing SD card")
+sd_spi = busio.SPI(clock=board.IO18, MOSI=board.IO14, MISO=board.IO17)
+sd_cs = board.IO12
+sdcard = sdcardio.SDCard(sd_spi, sd_cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+print("Initializing camera")
+cam = espcamera.Camera(
+ data_pins=board.CAMERA_DATA,
+ external_clock_pin=board.CAMERA_XCLK,
+ pixel_clock_pin=board.CAMERA_PCLK,
+ vsync_pin=board.CAMERA_VSYNC,
+ href_pin=board.CAMERA_HREF,
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.QVGA,
+ i2c=board.I2C(),
+ external_clock_frequency=20_000_000,
+ framebuffer_count=1)
+print("initialized")
+display.auto_refresh = False
+
+def exists(filename):
+ try:
+ os.stat(filename)
+ return True
+ except OSError:
+ return False
+
+
+_image_counter = 0
+
+
+def open_next_image(extension="jpg"):
+ global _image_counter # pylint: disable=global-statement
+ while True:
+ filename = f"/sd/img{_image_counter:04d}.{extension}"
+ _image_counter += 1
+ if exists(filename):
+ continue
+ print("#", filename)
+ return open(filename, "wb")
+
+ow = (display.width - cam.width) // 2
+oh = (display.height - cam.height) // 2
+
+k = keypad.Keys([board.IO0], value_when_pressed=False)
+
+while True:
+ frame = cam.take(1)
+ display_bus.send(42, struct.pack(">hh", ow, cam.width + ow - 1))
+ display_bus.send(43, struct.pack(">hh", oh, cam.height + ow - 1))
+ display_bus.send(44, frame)
+ if (e := k.events.get()) is not None and e.pressed:
+ cam.reconfigure(
+ pixel_format=espcamera.PixelFormat.JPEG,
+ frame_size=espcamera.FrameSize.SVGA,
+ )
+ frame = cam.take(1)
+ if isinstance(frame, memoryview):
+ jpeg = frame
+ print(f"Captured {len(jpeg)} bytes of jpeg data")
+
+ with open_next_image() as f:
+ f.write(jpeg)
+ cam.reconfigure(
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.QVGA,
+ )
diff --git a/OV5640_Breakout/CircuitPython_Kaluga-lcd-mirror/code.py b/OV5640_Breakout/CircuitPython_Kaluga-lcd-mirror/code.py
new file mode 100644
index 000000000..ad9d09b60
--- /dev/null
+++ b/OV5640_Breakout/CircuitPython_Kaluga-lcd-mirror/code.py
@@ -0,0 +1,97 @@
+# SPDX-FileCopyrightText: Copyright (c) 2021 Jeff Epler for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+
+"""
+This demo is designed for the Kaluga development kit version 1.3 with the
+ILI9341 display. It requires CircuitPython 8.
+
+To fix the MemoryError when creating a Camera object, Place the line
+```toml
+CIRCUITPY_RESERVED_PSRAM=1048576
+```
+in the file **CIRCUITPY/settings.toml** and restart.
+"""
+
+import struct
+
+import board
+import busio
+import keypad
+import displayio
+import espcamera
+import espidf
+
+print("Initializing display")
+displayio.release_displays()
+spi = busio.SPI(MOSI=board.LCD_MOSI, clock=board.LCD_CLK)
+display_bus = displayio.FourWire(
+ spi,
+ command=board.LCD_D_C,
+ chip_select=board.LCD_CS,
+ reset=board.LCD_RST,
+ baudrate=80_000_000,
+)
+_INIT_SEQUENCE = (
+ b"\x01\x80\x80" # Software reset then delay 0x80 (128ms)
+ b"\xEF\x03\x03\x80\x02"
+ b"\xCF\x03\x00\xC1\x30"
+ b"\xED\x04\x64\x03\x12\x81"
+ b"\xE8\x03\x85\x00\x78"
+ b"\xCB\x05\x39\x2C\x00\x34\x02"
+ b"\xF7\x01\x20"
+ b"\xEA\x02\x00\x00"
+ b"\xc0\x01\x23" # Power control VRH[5:0]
+ b"\xc1\x01\x10" # Power control SAP[2:0];BT[3:0]
+ b"\xc5\x02\x3e\x28" # VCM control
+ b"\xc7\x01\x86" # VCM control2
+ b"\x36\x01\x40" # Memory Access Control
+ b"\x37\x01\x00" # Vertical scroll zero
+ b"\x3a\x01\x55" # COLMOD: Pixel Format Set
+ b"\xb1\x02\x00\x18" # Frame Rate Control (In Normal Mode/Full Colors)
+ b"\xb6\x03\x08\x82\x27" # Display Function Control
+ b"\xF2\x01\x00" # 3Gamma Function Disable
+ b"\x26\x01\x01" # Gamma curve selected
+ b"\xe0\x0f\x0F\x31\x2B\x0C\x0E\x08\x4E\xF1\x37\x07\x10\x03\x0E\x09\x00" # Set Gamma
+ b"\xe1\x0f\x00\x0E\x14\x03\x11\x07\x31\xC1\x48\x08\x0F\x0C\x31\x36\x0F" # Set Gamma
+ b"\x11\x80\x78" # Exit Sleep then delay 0x78 (120ms)
+ b"\x29\x80\x78" # Display on then delay 0x78 (120ms)
+)
+
+display = displayio.Display(display_bus, _INIT_SEQUENCE, width=320, height=240)
+
+if espidf.get_reserved_psram() < 1047586:
+ print("""Place the following line in CIRCUITPY/settings.toml, then hard-reset the board:
+CIRCUITPY_RESERVED_PSRAM=1048576
+""")
+ raise SystemExit
+
+
+print("Initializing camera")
+cam = espcamera.Camera(
+ data_pins=board.CAMERA_DATA,
+ external_clock_pin=board.CAMERA_XCLK,
+ pixel_clock_pin=board.CAMERA_PCLK,
+ vsync_pin=board.CAMERA_VSYNC,
+ href_pin=board.CAMERA_HREF,
+ pixel_format=espcamera.PixelFormat.RGB565,
+ frame_size=espcamera.FrameSize.QVGA,
+ i2c=board.I2C(),
+ external_clock_frequency=20_000_000,
+ framebuffer_count=2)
+print(cam.width, cam.height)
+display.auto_refresh = False
+
+k = keypad.Keys([board.IO0], value_when_pressed=False)
+
+ow = (display.width - cam.width) // 2
+oh = (display.height - cam.height) // 2
+display_bus.send(42, struct.pack(">hh", ow, cam.width + ow - 1))
+display_bus.send(43, struct.pack(">hh", oh, cam.height + ow - 1))
+
+while True:
+ if (e := k.events.get()) is not None and e.pressed:
+ cam.colorbar = not cam.colorbar
+
+ frame = cam.take(1)
+ display_bus.send(44, frame)
diff --git a/OV5640_Breakout/CircuitPython_Pico-ascii-mirror/code.py b/OV5640_Breakout/CircuitPython_Pico-ascii-mirror/code.py
new file mode 100644
index 000000000..aa73ca41b
--- /dev/null
+++ b/OV5640_Breakout/CircuitPython_Pico-ascii-mirror/code.py
@@ -0,0 +1,72 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+"""
+This demo is designed for the Raspberry Pi Pico.
+
+It shows the camera image as ASCII art on the USB REPL.
+"""
+
+
+import sys
+import time
+import busio
+import board
+import digitalio
+import adafruit_ov5640
+
+print("construct bus")
+bus = busio.I2C(board.GP9, board.GP8)
+print("construct camera")
+reset = digitalio.DigitalInOut(board.GP10)
+cam = adafruit_ov5640.OV5640(
+ bus,
+ data_pins=(
+ board.GP12,
+ board.GP13,
+ board.GP14,
+ board.GP15,
+ board.GP16,
+ board.GP17,
+ board.GP18,
+ board.GP19,
+ ),
+ clock=board.GP11,
+ vsync=board.GP7,
+ href=board.GP21,
+ mclk=board.GP20,
+ shutdown=None,
+ reset=reset,
+ size=adafruit_ov5640.OV5640_SIZE_QQVGA,
+)
+print("print chip id")
+print(cam.chip_id)
+
+
+cam.colorspace = adafruit_ov5640.OV5640_COLOR_YUV
+cam.flip_y = True
+cam.flip_x = True
+cam.test_pattern = False
+
+buf = bytearray(cam.capture_buffer_size)
+chars = b" .':-+=*%$#"
+remap = [chars[i * (len(chars) - 1) // 255] for i in range(256)]
+
+width = cam.width
+row = bytearray(width)
+
+print("capturing")
+cam.capture(buf)
+print("capture complete")
+
+sys.stdout.write("\033[2J")
+while True:
+ cam.capture(buf)
+ for j in range(0, cam.height, 2):
+ sys.stdout.write(f"\033[{j//2}H")
+ for i in range(cam.width):
+ row[i] = remap[buf[2 * (width * j + i)]]
+ sys.stdout.write(row)
+ sys.stdout.write("\033[K")
+ sys.stdout.write("\033[J")
+ time.sleep(0.1)
diff --git a/OV5640_Breakout/CircuitPython_Pico-lcd-mirror/code.py b/OV5640_Breakout/CircuitPython_Pico-lcd-mirror/code.py
new file mode 100644
index 000000000..24b6d8c43
--- /dev/null
+++ b/OV5640_Breakout/CircuitPython_Pico-lcd-mirror/code.py
@@ -0,0 +1,79 @@
+# SPDX-FileCopyrightText: Copyright (c) 2023 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: Unlicense
+"""
+This demo is designed for the Raspberry Pi Pico. with 240x240 SPI TFT display
+
+It shows the camera image on the LCD
+"""
+import time
+import busio
+import board
+import digitalio
+import adafruit_ov5640
+import adafruit_st7789
+import displayio
+
+# Set up the display (You must customize this block for your display!)
+displayio.release_displays()
+spi = busio.SPI(clock=board.GP2, MOSI=board.GP3)
+display_bus = displayio.FourWire(spi, command=board.GP0, chip_select=board.GP1, reset=None)
+display = adafruit_st7789.ST7789(display_bus, width=240, height=240, rowstart=80, rotation=0)
+
+print("construct bus")
+bus = busio.I2C(board.GP9, board.GP8)
+print("construct camera")
+reset = digitalio.DigitalInOut(board.GP10)
+cam = adafruit_ov5640.OV5640(
+ bus,
+ data_pins=(
+ board.GP12,
+ board.GP13,
+ board.GP14,
+ board.GP15,
+ board.GP16,
+ board.GP17,
+ board.GP18,
+ board.GP19,
+ ),
+ clock=board.GP11,
+ vsync=board.GP7,
+ href=board.GP21,
+ mclk=board.GP20,
+ shutdown=None,
+ reset=reset,
+ size=adafruit_ov5640.OV5640_SIZE_240X240,
+)
+print("print chip id")
+print(cam.chip_id)
+
+cam.colorspace = adafruit_ov5640.OV5640_COLOR_RGB
+cam.flip_y = False
+cam.flip_x = False
+cam.test_pattern = False
+
+width = display.width
+height = display.height
+
+#cam.test_pattern = OV7670_TEST_PATTERN_COLOR_BAR_FADE
+bitmap = displayio.Bitmap(cam.width, cam.height, 65535)
+print(width, height, cam.width, cam.height)
+if bitmap is None:
+ raise SystemExit("Could not allocate a bitmap")
+
+g = displayio.Group(scale=1, x=(width-cam.width)//2, y=(height-cam.height)//2)
+tg = displayio.TileGrid(bitmap,
+ pixel_shader=displayio.ColorConverter(input_colorspace=displayio.Colorspace.RGB565_SWAPPED)
+)
+g.append(tg)
+display.root_group = g
+
+t0 = time.monotonic_ns()
+display.auto_refresh = False
+while True:
+ cam.capture(bitmap)
+ bitmap.dirty()
+ display.refresh(minimum_frames_per_second=0)
+ t1 = time.monotonic_ns()
+ print("fps", 1e9 / (t1 - t0))
+ t0 = t1
diff --git a/Ocean_Resin_Lightbox/code.py b/Ocean_Resin_Lightbox/code.py
index f8469bfe4..7ae9409a1 100644
--- a/Ocean_Resin_Lightbox/code.py
+++ b/Ocean_Resin_Lightbox/code.py
@@ -61,7 +61,7 @@ def do_crawl_down(image_file, *,
group = displayio.Group()
tile_grid = displayio.TileGrid(bitmap=the_bitmap, pixel_shader=the_palette)
group.append(tile_grid)
- display.show(group)
+ display.root_group = group
start_time = time.monotonic_ns()
start_y = display.height # High enough to be "off the top"
@@ -100,7 +100,7 @@ def do_pulse(image_file, *, duration=4, pulse_speed=1/8, pulse=.5):
group.append(tile_grid)
group.x = (display.width - the_bitmap.width) // 2
group.y = (display.height - the_bitmap.height) // 2
- display.show(group)
+ display.root_group = group
start_time = time.monotonic_ns()
end_time = start_time + int(duration * 1e9)
diff --git a/OctoPrint_MQTT_Controller/.trinket_m0.test.skip b/OctoPrint_MQTT_Controller/.trinket_m0.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/OctoPrint_MQTT_Controller/code.py b/OctoPrint_MQTT_Controller/code.py
new file mode 100644
index 000000000..4091b05c1
--- /dev/null
+++ b/OctoPrint_MQTT_Controller/code.py
@@ -0,0 +1,278 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import ssl
+import os
+import json
+import socketpool
+import wifi
+import board
+import digitalio
+import terminalio
+import adafruit_requests
+from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError
+import displayio
+from adafruit_progressbar.horizontalprogressbar import (
+ HorizontalProgressBar,
+ HorizontalFillDirection,
+)
+from adafruit_display_shapes.rect import Rect
+from adafruit_display_text import bitmap_label, wrap_text_to_lines
+import neopixel
+from adafruit_led_animation.animation.rainbow import Rainbow
+from adafruit_led_animation.animation.blink import Blink
+
+aio_username = os.getenv('aio_username')
+aio_key = os.getenv('aio_key')
+
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+
+# Make the display context
+splash = displayio.Group()
+board.DISPLAY.root_group = splash
+
+# set progress bar width and height relative to board's display
+width = 183
+height = 30
+
+x = 50
+#y = board.DISPLAY.height // 3
+y = 100
+
+# Create a new progress_bar object at (x, y)
+progress_bar = HorizontalProgressBar(
+ (x, y),
+ (width, height),
+ fill_color=0x000000,
+ outline_color=0xFFFFFF,
+ bar_color=0x13c100,
+ direction=HorizontalFillDirection.LEFT_TO_RIGHT
+)
+
+# Append progress_bar to the splash group
+splash.append(progress_bar)
+
+rect = Rect(40, 0, 2, 135, fill=0xFFFFFF)
+splash.append(rect)
+
+img = displayio.OnDiskBitmap("octoprint_logo.bmp")
+idle_icons = displayio.OnDiskBitmap("idle_icons.bmp")
+printing_icons = displayio.OnDiskBitmap("printing_icons.bmp")
+finished_icon = displayio.OnDiskBitmap("finished_icon.bmp")
+
+tile_grid = displayio.TileGrid(bitmap=img, pixel_shader=img.pixel_shader, x = 185, y=5)
+splash.append(tile_grid)
+
+icon_grid = displayio.TileGrid(bitmap=idle_icons, pixel_shader=idle_icons.pixel_shader, x = 0, y=0)
+splash.append(icon_grid)
+
+text = bitmap_label.Label(terminalio.FONT, text="Connecting", scale=2, x=55, y=45)
+splash.append(text)
+
+led = digitalio.DigitalInOut(board.LED)
+led.direction = digitalio.Direction.OUTPUT
+
+button0 = digitalio.DigitalInOut(board.D0)
+button0.direction = digitalio.Direction.INPUT
+button0.pull = digitalio.Pull.UP
+
+button1 = digitalio.DigitalInOut(board.D1)
+button1.direction = digitalio.Direction.INPUT
+button1.pull = digitalio.Pull.DOWN
+
+button2 = digitalio.DigitalInOut(board.D2)
+button2.direction = digitalio.Direction.INPUT
+button2.pull = digitalio.Pull.DOWN
+# Our array of key objects
+button0_state = False
+button1_state = False
+button2_state = False
+
+pixel = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness = 0.6)
+
+# Create a socket pool
+pool = socketpool.SocketPool(wifi.radio)
+
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+# Initialize an Adafruit IO HTTP API object
+io = IO_HTTP(aio_username, aio_key, requests)
+
+try:
+ # get feed
+ # printing monitors the printer progress feed
+ printing_status = io.get_feed("printing")
+except AdafruitIO_RequestError:
+ # if no feed exists, create one
+ printing_status = io.create_new_feed("printing")
+try:
+ print_done = io.get_feed("printdone")
+except AdafruitIO_RequestError:
+ print_done = io.create_new_feed("printdone")
+try:
+ printer_state = io.get_feed("printerstatechanged")
+except AdafruitIO_RequestError:
+ printer_state = io.create_new_feed("printerstatechanged")
+try:
+ shutdown = io.get_feed("shutdown")
+except AdafruitIO_RequestError:
+ shutdown = io.create_new_feed("shutdown")
+try:
+ heat_up = io.get_feed("heatup")
+except AdafruitIO_RequestError:
+ heat_up = io.create_new_feed("heatup")
+try:
+ cooldown = io.get_feed("cooldown")
+except AdafruitIO_RequestError:
+ cooldown = io.create_new_feed("cooldown")
+try:
+ resume = io.get_feed("printresumed")
+except AdafruitIO_RequestError:
+ resume = io.create_new_feed("printresumed")
+try:
+ pause = io.get_feed("printpaused")
+except AdafruitIO_RequestError:
+ pause = io.create_new_feed("printpaused")
+try:
+ cancelled = io.get_feed("printcancelled")
+except AdafruitIO_RequestError:
+ cancelled = io.create_new_feed("printcancelled")
+
+read_feeds = [printing_status, printer_state, print_done]
+send_while_idle_feeds = [cooldown, heat_up, shutdown]
+send_while_printing_feeds = [pause, resume, cancelled]
+new_feed_msg = ["None", "None", "None"]
+last_feed_msg = ["none","none","none"]
+msg_json = [{"path": "none"}, {"state_id": "NONE"}, {"path": "none"}]
+print_progress = 0
+current_state = 0
+last_state = None
+state_value = 0
+current_file = None
+finished_file = None
+red = (255, 0, 0)
+green = (0, 255, 0)
+blue = (0, 0, 255)
+cyan = (0, 255, 255)
+purple = (255, 0, 255)
+yellow = (255, 255, 0)
+
+printer_state_options = ["OPEN_SERIAL", "DETECT_SERIAL",
+"DETECT_BAUDRATE", "CONNECTING", "OPERATIONAL", "PRINTING", "PAUSING", "PAUSED",
+"CLOSED", "ERROR", "FINISHING", "CLOSED_WITH_ERROR", "TRANSFERING_FILE", "OFFLINE", "STARTING",
+"CANCELLING", "UNKNOWN", "NONE"]
+colors = [green, yellow, cyan, yellow,
+ green, purple, yellow, yellow, red,
+ red, blue, red, yellow, red,
+ purple, red, red, red]
+
+clock = 5
+
+rainbow = Rainbow(pixel, speed=0.1, period=2)
+blink = Blink(pixel, speed=0.5, color=green)
+
+while True:
+ if button0.value and button0_state:
+ led.value = False
+ button0_state = False
+ if not button1.value and button1_state:
+ led.value = False
+ button1_state = False
+ if not button2.value and button2_state:
+ led.value = False
+ button2_state = False
+
+ if current_state in ("PRINTING", "PAUSED", "PAUSING"):
+ rainbow.animate()
+ if not button0.value and not button0_state:
+ led.value = True
+ io.send_data(send_while_printing_feeds[0]["key"], "ping")
+ button0_state = True
+ if button1.value and not button1_state:
+ led.value = True
+ io.send_data(send_while_printing_feeds[1]["key"], "ping")
+ button1_state = True
+ if button2.value and not button2_state:
+ led.value = True
+ io.send_data(send_while_printing_feeds[2]["key"], "ping")
+ button2_state = True
+ else:
+ blink.color=colors[state_value]
+ blink.animate()
+ if not button0.value and not button0_state:
+ if finished_file == current_file:
+ current_file = "None"
+ progress_bar.value = 100
+ progress_bar.bar_color = colors[state_value]
+ text.text = "\n".join(wrap_text_to_lines("Status: %s" % current_state, 11))
+ icon_grid.bitmap = idle_icons
+ icon_grid.pixel_shader = idle_icons.pixel_shader
+ button0_state = True
+ else:
+ led.value = True
+ io.send_data(send_while_idle_feeds[0]["key"], "ping")
+ button0_state = True
+ if button1.value and not button1_state:
+ led.value = True
+ io.send_data(send_while_idle_feeds[1]["key"], "ping")
+ button1_state = True
+ if button2.value and not button2_state:
+ led.value = True
+ io.send_data(send_while_idle_feeds[2]["key"], "ping")
+ button2_state = True
+ if (time.monotonic() - clock) > 15:
+ # get data
+ for feed in range(3):
+ try:
+ data = io.receive_data(read_feeds[feed]["key"])
+ except AdafruitIO_RequestError:
+ print("Check that OctoPrint is sending data! Check your IO dashboard.")
+ # if a new value is detected
+ if data["value"] != last_feed_msg[feed]:
+ # assign value to new_msg
+ new_feed_msg[feed] = data["value"]
+ msg_json[feed] = json.loads(data["value"])
+ # set servo angle
+ print(read_feeds[feed]["key"])
+ print()
+ print(new_feed_msg[feed])
+ print()
+ #time.sleep(1)
+ print_progress = int(msg_json[0]['progress'])
+ current_file = str(msg_json[0]['path'])
+ current_state = str(msg_json[1]['state_id'])
+ finished_file = str(msg_json[2]['path'])
+ state_value = printer_state_options.index(current_state)
+ # log msg
+ last_feed_msg[feed] = new_feed_msg[feed]
+ #time.sleep(1)
+ if current_state == "PRINTING":
+ #print_progress = int(msg_json[0]['progress'])
+ progress_bar.value = print_progress
+ #octoprint green
+ progress_bar.bar_color = 0x13c100
+ text.text = "\n".join(wrap_text_to_lines("%d%% Printed" % print_progress, 7))
+ icon_grid.bitmap = printing_icons
+ icon_grid.pixel_shader = printing_icons.pixel_shader
+ elif current_state in ("PAUSED", "PAUSING"):
+ progress_bar.value = print_progress
+ progress_bar.bar_color = colors[state_value]
+ text.text = "\n".join(wrap_text_to_lines("Status: %s" % current_state, 11))
+ icon_grid.bitmap = printing_icons
+ icon_grid.pixel_shader = printing_icons.pixel_shader
+ # when a print is finished:
+ elif finished_file == current_file and print_progress == 100:
+ progress_bar.value = 100
+ progress_bar.bar_color = purple
+ text.text = "\n".join(wrap_text_to_lines("Print Finished!", 11))
+ icon_grid.bitmap = finished_icon
+ icon_grid.pixel_shader = finished_icon.pixel_shader
+ # when printer is idle, display status
+ else:
+ progress_bar.value = 100
+ progress_bar.bar_color = colors[state_value]
+ text.text = "\n".join(wrap_text_to_lines("Status: %s" % current_state, 11))
+ icon_grid.bitmap = idle_icons
+ icon_grid.pixel_shader = idle_icons.pixel_shader
+ # reset clock
+ clock = time.monotonic()
diff --git a/OctoPrint_MQTT_Controller/finished_icon.bmp b/OctoPrint_MQTT_Controller/finished_icon.bmp
new file mode 100644
index 000000000..41cabcf0d
Binary files /dev/null and b/OctoPrint_MQTT_Controller/finished_icon.bmp differ
diff --git a/OctoPrint_MQTT_Controller/idle_icons.bmp b/OctoPrint_MQTT_Controller/idle_icons.bmp
new file mode 100644
index 000000000..4c432d1c0
Binary files /dev/null and b/OctoPrint_MQTT_Controller/idle_icons.bmp differ
diff --git a/OctoPrint_MQTT_Controller/octoprint_logo.bmp b/OctoPrint_MQTT_Controller/octoprint_logo.bmp
new file mode 100644
index 000000000..ecbb2de88
Binary files /dev/null and b/OctoPrint_MQTT_Controller/octoprint_logo.bmp differ
diff --git a/OctoPrint_MQTT_Controller/printing_icons.bmp b/OctoPrint_MQTT_Controller/printing_icons.bmp
new file mode 100644
index 000000000..210de88e5
Binary files /dev/null and b/OctoPrint_MQTT_Controller/printing_icons.bmp differ
diff --git a/OozeMaster3000/OozeMaster3000.ino b/OozeMaster3000/OozeMaster3000.ino
index 491ce1d1c..de8b7e82a 100644
--- a/OozeMaster3000/OozeMaster3000.ino
+++ b/OozeMaster3000/OozeMaster3000.ino
@@ -5,30 +5,34 @@
// OOZE MASTER 3000: NeoPixel simulated liquid physics. Up to 7 NeoPixel
// strands dribble light, while an 8th strand "catches the drips."
// Designed for the Adafruit Feather M0 or M4 with matching version of
-// NeoPXL8 FeatherWing. This can be adapted for other M0 or M4 boards but
-// you will need to do your own "pin sudoku" and level shifting
-// (e.g. NeoPXL8 Friend breakout or similar).
+// NeoPXL8 FeatherWing, or for RP2040 boards including SCORPIO. This can be
+// adapted for other M0, M4, RP2040 or ESP32-S3 boards but you will need to
+// do your own "pin sudoku" & level shifting (e.g. NeoPXL8 Friend breakout).
// See here: https://learn.adafruit.com/adafruit-neopxl8-featherwing-and-library
// Requires Adafruit_NeoPixel, Adafruit_NeoPXL8 and Adafruit_ZeroDMA libraries.
#include
-uint8_t dripColor[] = { 0, 255, 0 }; // Bright green ectoplasm
-#define PIXEL_PITCH (1.0 / 150.0) // 150 pixels/m
-#define ICE_BRIGHTNESS 0 // Icycle effect Brightness (0 to <100%)
+#define PIXEL_PITCH (1.0 / 150.0) // 150 pixels/m
+#define ICE_BRIGHTNESS 0 // Icycle effect Brightness (0 to <100%)
+#define COLOR_ORDER NEO_GRB // NeoPixel color format (see Adafruit_NeoPixel)
-#define GAMMA 2.6
+#define GAMMA 2.6 // For linear brightness correction
#define G_CONST 9.806 // Standard acceleration due to gravity
-// While the above G_CONST is correct for "real time" drips, you can dial it back
-// for a more theatric effect / to slow down the drips like they've still got a
-// syrupy "drool string" attached (try much lower values like 2.0 to 3.0).
+// While the above G_CONST is correct for "real time" drips, you can dial it
+// back for a more theatric effect / to slow the drips like they've still got
+// a syrupy "drool string" attached (try much lower values like 2.0 to 3.0).
-// NeoPXL8 pin numbers (these are default connections on NeoPXL8 M0 FeatherWing)
+// NeoPXL8 pin numbers
+#if defined(ARDUINO_ADAFRUIT_FEATHER_RP2040_SCORPIO)
+#define USE_HDR // RP2040 has enough "oomph" for HDR color!
+int8_t pins[8] = { 16, 17, 18, 19, 20, 21, 22, 23 };
+#else
+// These are default connections on NeoPXL8 M0 FeatherWing:
int8_t pins[8] = { PIN_SERIAL1_RX, PIN_SERIAL1_TX, MISO, 13, 5, SDA, A4, A3 };
-
// If using an M4 Feather & NeoPXL8 FeatherWing, use these values instead:
//int8_t pins[8] = { 13, 12, 11, 10, SCK, 5, 9, 6 };
-
+#endif
typedef enum {
MODE_IDLE,
@@ -38,10 +42,47 @@ typedef enum {
MODE_DRIPPING
} dropState;
+// A color palette allows one to "theme" a project. By default there's just
+// one color, and all drips use only that. Setting up a color list, and then
+// declaring a range of indices in the drip[] table later, allows some
+// randomization while still keeping appearance within a predictable range.
+// Each drip could be its own fixed color, or each could be randomly picked
+// from a set of colors. Explained further in Adafruit Learning System guide.
+// Q: WHY NOT JUST PICK RANDOM RGB COLORS?
+// Because that would pick a lot of ugly or too-dark RGB combinations.
+// WHY NOT RANDOM FULL-BRIGHTNESS HUES FROM THE ColorHSV() FUNCTION?
+// Two reasons: First, to apply a consistent color theme to a project;
+// Halloween, Christmas, fire, water, etc. Second, because NeoPixels
+// have been around for over a decade and it's time we mature past the
+// Lisa Frank stage of all-rainbows-all-the-time and consider matters of
+// taste and restraint. If you WANT all rainbows, that's still entirely
+// possile just by setting up a palette of bright colors!
+uint8_t palette[][3] = {
+ { 0, 255, 0 }, // Bright green ectoplasm
+};
+#define NUM_COLORS (sizeof palette / sizeof palette[0])
+// Note that color randomization does not pair well with the ICE_BRIGHTNESS
+// effect; you'll probably want to pick one or the other: random colors
+// (from palette) and no icicles, or fixed color (per strand or overall)
+// with ice. Otherwise the color jump of the icicle looks bad and wrong.
+
+// Optional "Carrie mode" -- if a pin is defined here, and a switch or button
+// added between this pin and ground -- when active, each new drip is drawn
+// using the last color in the palette table (and slowly returns to original
+// color scheme when released). i.e. there might normally be pleasant wintry
+// colors in the palette, then plop pure red at the end of the list and watch
+// the fun unfold!
+//#define CARRIE_PIN A2
+// If you could use an extra ground pin for that, define that here; this
+// is a signal ground only, for the switch, NOT for powering anything.
+//#define CARRIE_GROUND A3
+
struct {
uint16_t length; // Length of NeoPixel strip IN PIXELS
uint16_t dribblePixel; // Index of pixel where dribble pauses before drop (0 to length-1)
float height; // Height IN METERS of dribblePixel above ground
+ uint16_t palette_min; // Lower color palette index for this strip
+ uint16_t palette_max; // Upper color palette index for this strip
dropState mode; // One of the above states (MODE_IDLE, etc.)
uint32_t eventStartUsec; // Starting time of current event
uint32_t eventDurationUsec; // Duration of current event, in microseconds
@@ -49,26 +90,48 @@ struct {
uint32_t splatStartUsec; // Starting time of most recent "splat"
uint32_t splatDurationUsec; // Fade duration of splat
float pos; // Position of drip on prior frame
+ uint8_t color[3]; // RGB color (randomly picked from from palette[])
+ uint8_t splatColor[3]; // RGB color of "splat" (may be from prior drip)
} drip[] = {
// THIS TABLE CONTAINS INFO FOR UP TO 8 NEOPIXEL DRIPS
- { 16, 7, 0.157 }, // NeoPXL8 output 0: 16 pixels long, drip pauses at index 7, 0.157 meters above ground
- { 19, 6, 0.174 }, // NeoPXL8 output 1: 19 pixels long, pause at index 6, 0.174 meters up
- { 18, 5, 0.195 }, // NeoPXL8 output 2: etc.
- { 17, 6, 0.16 }, // NeoPXL8 output 3
- { 16, 1, 0.21 }, // NeoPXL8 output 4
- { 16, 1, 0.21 }, // NeoPXL8 output 5
- { 21, 10, 0.143 }, // NeoPXL8 output 6
+ { 16, 7, 0.157, 0, 0 }, // NeoPXL8 output 0: 16 pixels long, drip pauses at index 7, 0.157 meters above ground, use palette colors 0-0
+ { 19, 6, 0.174, 0, 0 }, // NeoPXL8 output 1: 19 pixels long, pause at index 6, 0.174 meters up
+ { 18, 5, 0.195, 0, 0 }, // NeoPXL8 output 2: etc.
+ { 17, 6, 0.16 , 0, 0 }, // NeoPXL8 output 3
+ { 16, 1, 0.21 , 0, 0 }, // NeoPXL8 output 4
+ { 16, 1, 0.21 , 0, 0 }, // NeoPXL8 output 5
+ { 21, 10, 0.143, 0, 0 }, // NeoPXL8 output 6
// NeoPXL8 output 7 is normally reserved for ground splats
// You CAN add an eighth drip here, but then will not get splats
};
+// There might be situations where the "splat" pixels are more easily
+// installed using a longer strand of fixed-spacing "pebble style" NeoPixels
+// rather than soldering up separate pixels for each one...and then lighting
+// up only specific pixels along that strand for splats, leaving the others
+// un-lit. This table holds indices for seven pixels along that strand
+// corresponding to the seven splats. Could also be used to reverse the
+// order of splat indices, etc.
+uint8_t splatmap[] = { 0, 1, 2, 3, 4, 5, 6 };
-#define N_DRIPS (sizeof drip / sizeof drip[0])
-int longestStrand = (N_DRIPS < 8) ? N_DRIPS : 0;
-Adafruit_NeoPXL8 *pixels;
+#ifdef USE_HDR
+Adafruit_NeoPXL8HDR *pixels = NULL;
+#else
+Adafruit_NeoPXL8 *pixels = NULL;
+#endif
+#define N_DRIPS (sizeof drip / sizeof drip[0])
+int longestStrand = (N_DRIPS < 8) ? N_DRIPS : 0;
void setup() {
Serial.begin(9600);
- randomSeed(analogRead(A0) + analogRead(A5));
+ randomSeed(analogRead(A0) + analogRead(A1));
+
+#ifdef CARRIE_PIN
+ pinMode(CARRIE_PIN, INPUT_PULLUP);
+#endif
+#ifdef CARRIE_GROUND
+ pinMode(CARRIE_GROUND, OUTPUT);
+ digitalWrite(CARRIE_GROUND, LOW);
+#endif
for(int i=0; i longestStrand) longestStrand = drip[i].length;
+ if(drip[i].length > longestStrand) longestStrand = drip[i].length;
+ if((splatmap[i] + 1) > longestStrand) longestStrand = splatmap[i] + 1;
+ // Randomize initial color:
+ memcpy(drip[i].color, palette[random(drip[i].palette_min, drip[i].palette_max + 1)], sizeof palette[0]);
+ memcpy(drip[i].splatColor, drip[i].color, sizeof palette[0]);
+#ifdef CARRIE_PIN
+ // If "Carrie" switch is on, override above color with last palette entry
+ if (!digitalRead(CARRIE_PIN)) {
+ memcpy(drip[i].color, palette[NUM_COLORS - 1], sizeof palette[0]);
+ }
+#endif
}
- pixels = new Adafruit_NeoPXL8(longestStrand, pins, NEO_GRB);
+#ifdef USE_HDR
+ pixels = new Adafruit_NeoPXL8HDR(longestStrand, pins, COLOR_ORDER);
+ if (!pixels->begin(true, 4, true)) {
+ // HDR requires inordinate RAM! Blink onboard LED if there's trouble:
+ pinMode(LED_BUILTIN, OUTPUT);
+ for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
+ }
+ pixels->setBrightness(65535, GAMMA); // NeoPXL8HDR handles gamma correction
+#else
+ pixels = new Adafruit_NeoPXL8(longestStrand, pins, COLOR_ORDER);
pixels->begin();
+#endif
}
void loop() {
uint32_t t = micros(); // Current time, in microseconds
- float x; // multipurpose interim result
+ float x = 0.0; // multipurpose interim result
pixels->clear();
for(int i=0; i 0
// Draw icycles if ICE_BRIGHTNESS is set
- x = pow((float)ICE_BRIGHTNESS * 0.01, GAMMA);
+ x = (float)ICE_BRIGHTNESS * 0.01;
for(int d=0; d<=drip[i].dribblePixel; d++) {
- set(i, d, x);
+ set(i, i, d, x);
}
#endif
switch(drip[i].mode) {
@@ -158,8 +250,7 @@ void loop() {
x = ((float)ICE_BRIGHTNESS * 0.01) +
x * (float)(100 - ICE_BRIGHTNESS) * 0.01;
#endif
- x = pow(x, GAMMA);
- set(i, 0, x);
+ set(i, i, 0, x);
break;
case MODE_DRIBBLING_1:
// Point b moves from first to second pixel over event time
@@ -185,8 +276,7 @@ void loop() {
dtUsec = t - drip[i].splatStartUsec; // Elapsed time, in microseconds, since start of splat
if(dtUsec < drip[i].splatDurationUsec) {
x = 1.0 - sqrt((float)dtUsec / (float)drip[i].splatDurationUsec);
- x = pow(x, GAMMA);
- set(7, i, x);
+ set(7, i, splatmap[i], x);
}
}
}
@@ -235,15 +325,68 @@ void dripDraw(uint8_t dNum, float a, float b, bool fade) {
x * (float)(100 - ICE_BRIGHTNESS) * 0.01;
}
#endif
- x = pow(x, GAMMA);
- set(dNum, i, x);
+ set(dNum, dNum, i, x);
}
}
-// Set one pixel to a given brightness level (0.0 to 1.0)
-void set(uint8_t strand, uint8_t pixel, float brightness) {
- pixels->setPixelColor(pixel + strand * longestStrand,
- (int)((float)dripColor[0] * brightness + 0.5),
- (int)((float)dripColor[1] * brightness + 0.5),
- (int)((float)dripColor[2] * brightness + 0.5));
+// Set one pixel to a given brightness level (0.0 to 1.0).
+// Strand # and drip # are BOTH passed in because "splats" are always
+// on strand 7 but colors come from drip indices.
+void set(uint8_t strand, uint8_t d, uint8_t pixel, float brightness) {
+#if !defined(USE_HDR) // NeoPXL8HDR does its own gamma correction, else...
+ brightness = pow(brightness, GAMMA);
+#endif
+ if ((strand < 7) || (N_DRIPS >= 8)) {
+ pixels->setPixelColor(pixel + strand * longestStrand,
+ (int)((float)drip[d].color[0] * brightness + 0.5),
+ (int)((float)drip[d].color[1] * brightness + 0.5),
+ (int)((float)drip[d].color[2] * brightness + 0.5));
+ } else {
+ pixels->setPixelColor(pixel + strand * longestStrand,
+ (int)((float)drip[d].splatColor[0] * brightness + 0.5),
+ (int)((float)drip[d].splatColor[1] * brightness + 0.5),
+ (int)((float)drip[d].splatColor[2] * brightness + 0.5));
+ }
}
+
+// NeoPXL8HDR requires some background processing in a second thread.
+// See NeoPXL8 library examples (NeoPXL8HDR/strandtest) for explanation.
+// Currently this sketch only enables HDR if using Feather SCORPIO,
+// but it could be useful for other RP2040s and for ESP32S3too.
+#ifdef USE_HDR
+
+#if defined(ARDUINO_ARCH_RP2040)
+
+void loop1() {
+ if (pixels) pixels->refresh();
+}
+
+void setup1() {
+}
+
+#elif defined(CONFIG_IDF_TARGET_ESP32S3)
+
+void loop0(void *param) {
+ for(;;) {
+ yield();
+ if (pixels) pixels->refresh();
+ }
+}
+
+#else // SAMD
+
+#include "Adafruit_ZeroTimer.h"
+
+Adafruit_ZeroTimer zerotimer = Adafruit_ZeroTimer(3);
+
+void TC3_Handler() {
+ Adafruit_ZeroTimer::timerHandler(3);
+}
+
+void timerCallback(void) {
+ if (pixels) pixels->refresh();
+}
+
+#endif // end SAMD
+
+#endif // end USE_HDR
diff --git a/Ouija_Board_Bluefruit/code.py b/Ouija_Board_Bluefruit/code.py
index faff0224d..c193d5061 100644
--- a/Ouija_Board_Bluefruit/code.py
+++ b/Ouija_Board_Bluefruit/code.py
@@ -30,7 +30,9 @@
num_motors = 1 # up to 4 motors depending on the prop you are driving
-motorwing = MotorKit(i2c=board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+motorwing = MotorKit(i2c=i2c)
motorwing.frequency = 122 # tune this 50 - 200 range
max_throttle = 0.65 # tune this 0.2 - 1 range
diff --git a/PCA9546_Demos/PCA9546_I2C_Scanner/.metro_m0.test.only b/PCA9546_Demos/PCA9546_I2C_Scanner/.metro_m0.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/PCA9546_Demos/PCA9546_I2C_Scanner/PCA9546_I2C_Scanner.ino b/PCA9546_Demos/PCA9546_I2C_Scanner/PCA9546_I2C_Scanner.ino
new file mode 100644
index 000000000..bb0dc36b7
--- /dev/null
+++ b/PCA9546_Demos/PCA9546_I2C_Scanner/PCA9546_I2C_Scanner.ino
@@ -0,0 +1,53 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+/**
+ * PCA9546 I2CScanner.ino -- I2C bus scanner for Arduino
+ *
+ * Based on https://playground.arduino.cc/Main/I2cScanner/
+ *
+ */
+
+#include "Wire.h"
+
+#define PCAADDR 0x70
+
+void pcaselect(uint8_t i) {
+ if (i > 3) return;
+
+ Wire.beginTransmission(PCAADDR);
+ Wire.write(1 << i);
+ Wire.endTransmission();
+}
+
+
+// standard Arduino setup()
+void setup()
+{
+ while (!Serial);
+ delay(1000);
+
+ Wire.begin();
+
+ Serial.begin(115200);
+ Serial.println("\nPCAScanner ready!");
+
+ for (uint8_t t=0; t<4; t++) {
+ pcaselect(t);
+ Serial.print("PCA Port #"); Serial.println(t);
+
+ for (uint8_t addr = 0; addr<=127; addr++) {
+ if (addr == PCAADDR) continue;
+
+ Wire.beginTransmission(addr);
+ if (!Wire.endTransmission()) {
+ Serial.print("Found I2C 0x"); Serial.println(addr,HEX);
+ }
+ }
+ }
+ Serial.println("\ndone");
+}
+
+void loop()
+{
+}
diff --git a/PCA9546_Demos/PCA9546_MultiSensors/.metro_m0.test.only b/PCA9546_Demos/PCA9546_MultiSensors/.metro_m0.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/PCA9546_Demos/PCA9546_MultiSensors/PCA9546_MultiSensors.ino b/PCA9546_Demos/PCA9546_MultiSensors/PCA9546_MultiSensors.ino
new file mode 100644
index 000000000..126382639
--- /dev/null
+++ b/PCA9546_Demos/PCA9546_MultiSensors/PCA9546_MultiSensors.ino
@@ -0,0 +1,117 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+/**
+ * PCA9546 I2C Multi Sensor Example
+ *
+ * Using two VL53L4CD sensors on ports 0 and 1
+ *
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define PCAADDR 0x70
+#define DEV_I2C Wire
+
+#define SerialPort Serial
+
+// create two instances of the sensor
+VL53L4CD tof1(&DEV_I2C, A1);
+VL53L4CD tof2(&DEV_I2C, A1);
+
+void pcaselect(uint8_t i) {
+ if (i > 3) return;
+
+ Wire.beginTransmission(PCAADDR);
+ Wire.write(1 << i);
+ Wire.endTransmission();
+}
+
+// standard Arduino setup()
+void setup()
+{
+ while (!Serial);
+ delay(1000);
+
+ Wire.begin();
+
+ Serial.begin(115200);
+ Serial.println("\nMultiSensor PCA9546");
+
+ // define the port on the PCA9546 for the first sensor
+ pcaselect(0);
+ // setup the first sensor
+ tof1.begin();
+ tof1.VL53L4CD_Off();
+ tof1.InitSensor();
+ tof1.VL53L4CD_SetRangeTiming(200, 0);
+ tof1.VL53L4CD_StartRanging();
+
+ // define the port on the PCA9546 for the 2nd sensor
+ pcaselect(1);
+
+ // setup the 2nd sensor
+ tof2.begin();
+ tof2.VL53L4CD_Off();
+ tof2.InitSensor();
+ tof2.VL53L4CD_SetRangeTiming(200, 0);
+ tof2.VL53L4CD_StartRanging();
+
+}
+
+void loop()
+{
+ uint8_t NewDataReady = 0;
+ VL53L4CD_Result_t results;
+ uint8_t status;
+ char report[64];
+
+ // define port on the PCA9546
+ pcaselect(0);
+
+ // loop for time of flight sensor 1
+ do {
+ status = tof1.VL53L4CD_CheckForDataReady(&NewDataReady);
+ } while (!NewDataReady);
+
+ if ((!status) && (NewDataReady != 0)) {
+ // (Mandatory) Clear HW interrupt to restart measurements
+ tof1.VL53L4CD_ClearInterrupt();
+
+ // Read measured distance. RangeStatus = 0 means valid data
+ tof1.VL53L4CD_GetResult(&results);
+ snprintf(report, sizeof(report), "ToF 1 - Status = %3u, Distance = %5u mm, Signal = %6u kcps/spad\r\n",
+ results.range_status,
+ results.distance_mm,
+ results.signal_per_spad_kcps);
+ SerialPort.println(report);
+ }
+
+ // define port on PCA9546
+ pcaselect(1);
+
+ // loop for time of flight sensor 2
+ do {
+ status = tof2.VL53L4CD_CheckForDataReady(&NewDataReady);
+ } while (!NewDataReady);
+
+ if ((!status) && (NewDataReady != 0)) {
+ // (Mandatory) Clear HW interrupt to restart measurements
+ tof2.VL53L4CD_ClearInterrupt();
+
+ // Read measured distance. RangeStatus = 0 means valid data
+ tof2.VL53L4CD_GetResult(&results);
+ snprintf(report, sizeof(report), "ToF 2 - Status = %3u, Distance = %5u mm, Signal = %6u kcps/spad\r\n",
+ results.range_status,
+ results.distance_mm,
+ results.signal_per_spad_kcps);
+ SerialPort.println(report);
+ }
+}
diff --git a/PCB_Art_Jewelry/525floppy.kicad_pcb b/PCB_Art_Jewelry/525floppy.kicad_pcb
new file mode 100644
index 000000000..2c83adebf
--- /dev/null
+++ b/PCB_Art_Jewelry/525floppy.kicad_pcb
@@ -0,0 +1,781 @@
+(kicad_pcb (version 20221018) (generator pcbnew)
+
+ (general
+ (thickness 1.6)
+ )
+
+ (paper "A4")
+ (layers
+ (0 "F.Cu" signal)
+ (31 "B.Cu" signal)
+ (32 "B.Adhes" user "B.Adhesive")
+ (33 "F.Adhes" user "F.Adhesive")
+ (34 "B.Paste" user)
+ (35 "F.Paste" user)
+ (36 "B.SilkS" user "B.Silkscreen")
+ (37 "F.SilkS" user "F.Silkscreen")
+ (38 "B.Mask" user)
+ (39 "F.Mask" user)
+ (40 "Dwgs.User" user "User.Drawings")
+ (41 "Cmts.User" user "User.Comments")
+ (42 "Eco1.User" user "User.Eco1")
+ (43 "Eco2.User" user "User.Eco2")
+ (44 "Edge.Cuts" user)
+ (45 "Margin" user)
+ (46 "B.CrtYd" user "B.Courtyard")
+ (47 "F.CrtYd" user "F.Courtyard")
+ (48 "B.Fab" user)
+ (49 "F.Fab" user)
+ (50 "User.1" user)
+ (51 "User.2" user)
+ (52 "User.3" user)
+ (53 "User.4" user)
+ (54 "User.5" user)
+ (55 "User.6" user)
+ (56 "User.7" user)
+ (57 "User.8" user)
+ (58 "User.9" user)
+ )
+
+ (setup
+ (pad_to_mask_clearance 0)
+ (pcbplotparams
+ (layerselection 0x00010fc_ffffffff)
+ (plot_on_all_layers_selection 0x0000000_00000000)
+ (disableapertmacros false)
+ (usegerberextensions false)
+ (usegerberattributes true)
+ (usegerberadvancedattributes true)
+ (creategerberjobfile true)
+ (dashed_line_dash_ratio 12.000000)
+ (dashed_line_gap_ratio 3.000000)
+ (svgprecision 4)
+ (plotframeref false)
+ (viasonmask false)
+ (mode 1)
+ (useauxorigin false)
+ (hpglpennumber 1)
+ (hpglpenspeed 20)
+ (hpglpendiameter 15.000000)
+ (dxfpolygonmode true)
+ (dxfimperialunits true)
+ (dxfusepcbnewfont true)
+ (psnegative false)
+ (psa4output false)
+ (plotreference true)
+ (plotvalue true)
+ (plotinvisibletext false)
+ (sketchpadsonfab false)
+ (subtractmaskfromsilk false)
+ (outputformat 1)
+ (mirror false)
+ (drillshape 0)
+ (scaleselection 1)
+ (outputdirectory "OSHPARK/")
+ )
+ )
+
+ (net 0 "")
+
+ (footprint "Anne:5.25 Floppy Final" (layer "F.Cu")
+ (tstamp 4fdffb0d-b2c9-4db0-9304-6a6670c852e8)
+ (at 149.86 96.52)
+ (fp_text reference "REF**" (at 0 -0.5 unlocked) (layer "F.SilkS") hide
+ (effects (font (size 1 1) (thickness 0.1)))
+ (tstamp 93d4f45a-156a-4471-bc28-b9d0be1ab131)
+ )
+ (fp_text value "5.25 Floppy Final" (at 0 15.24 unlocked) (layer "F.Fab") hide
+ (effects (font (size 1 1) (thickness 0.15)))
+ (tstamp a9d7add8-66c2-443b-9bc3-182b0d61f18e)
+ )
+ (fp_poly
+ (pts
+ (xy 0.908 -3.66)
+ (xy 1.625 -3.404)
+ (xy 2.269 -3.01)
+ (xy 2.785 -2.53)
+ (xy 3.236 -1.907)
+ (xy 3.556 -1.204)
+ (xy 3.722 -0.51)
+ (xy 3.743 -0.247)
+ (xy 3.747 0.083)
+ (xy 3.735 0.391)
+ (xy 3.722 0.51)
+ (xy 3.546 1.246)
+ (xy 3.241 1.912)
+ (xy 3.231 1.929)
+ (xy 2.782 2.538)
+ (xy 2.223 3.042)
+ (xy 1.576 3.426)
+ (xy 0.862 3.676)
+ (xy 0.53 3.74)
+ (xy 0.358 3.755)
+ (xy 0.116 3.767)
+ (xy -0.124 3.772)
+ (xy -0.288 3.769)
+ (xy -0.3 3.768)
+ (xy -0.568 3.734)
+ (xy -0.741 3.707)
+ (xy -0.866 3.68)
+ (xy -1.599 3.426)
+ (xy -2.253 3.038)
+ (xy -2.812 2.53)
+ (xy -3.261 1.912)
+ (xy -3.4 1.65)
+ (xy -3.663 0.93)
+ (xy -3.774 0.186)
+ (xy -3.735 -0.56)
+ (xy -3.55 -1.287)
+ (xy -3.219 -1.975)
+ (xy -3.02 -2.27)
+ (xy -2.514 -2.822)
+ (xy -1.912 -3.259)
+ (xy -1.239 -3.57)
+ (xy -0.519 -3.743)
+ (xy 0.13 -3.773)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "F.Cu") (tstamp 6e0de492-07fe-46ff-8da6-3f0145f90472))
+ (fp_poly
+ (pts
+ (xy 0.197 4.976)
+ (xy 0.328 4.995)
+ (xy 0.426 5.024)
+ (xy 0.842 5.24)
+ (xy 1.167 5.565)
+ (xy 1.373 5.968)
+ (xy 1.41 6.11)
+ (xy 1.419 6.175)
+ (xy 1.427 6.271)
+ (xy 1.432 6.418)
+ (xy 1.435 6.636)
+ (xy 1.437 6.943)
+ (xy 1.438 7.359)
+ (xy 1.437 7.902)
+ (xy 1.436 8.35)
+ (xy 1.43 10.43)
+ (xy 1.383 10.57)
+ (xy 1.188 10.958)
+ (xy 0.902 11.272)
+ (xy 0.881 11.289)
+ (xy 0.619 11.448)
+ (xy 0.357 11.552)
+ (xy 0.156 11.582)
+ (xy -0.09 11.591)
+ (xy -0.248 11.58)
+ (xy -0.703 11.42)
+ (xy -1.075 11.129)
+ (xy -1.322 10.767)
+ (xy -1.362 10.684)
+ (xy -1.394 10.607)
+ (xy -1.418 10.516)
+ (xy -1.435 10.392)
+ (xy -1.447 10.214)
+ (xy -1.454 9.964)
+ (xy -1.458 9.622)
+ (xy -1.459 9.167)
+ (xy -1.459 8.581)
+ (xy -1.459 8.28)
+ (xy -1.459 7.63)
+ (xy -1.459 7.119)
+ (xy -1.456 6.729)
+ (xy -1.45 6.44)
+ (xy -1.44 6.232)
+ (xy -1.424 6.084)
+ (xy -1.402 5.978)
+ (xy -1.371 5.893)
+ (xy -1.332 5.81)
+ (xy -1.307 5.76)
+ (xy -1.209 5.588)
+ (xy -1.077 5.435)
+ (xy -1.042 5.4)
+ (xy -0.74 5.157)
+ (xy -0.45 5.026)
+ (xy -0.318 4.989)
+ (xy -0.176 4.974)
+ (xy -0.01 4.972)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "F.Cu") (tstamp e98f5231-470d-413b-a097-abce3b54cc2d))
+ (fp_poly
+ (pts
+ (xy 4.811 1.472)
+ (xy 5.016 1.671)
+ (xy 5.104 1.949)
+ (xy 5.09 2.143)
+ (xy 4.963 2.388)
+ (xy 4.737 2.555)
+ (xy 4.465 2.614)
+ (xy 4.317 2.59)
+ (xy 4.059 2.435)
+ (xy 3.903 2.192)
+ (xy 3.877 1.907)
+ (xy 3.881 1.885)
+ (xy 4.012 1.603)
+ (xy 4.247 1.429)
+ (xy 4.372 1.385)
+ (xy 4.517 1.384)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "B.Cu") (tstamp ecb7bbae-476f-4817-8243-216d43cefdd7))
+ (fp_poly
+ (pts
+ (xy 0.908 -3.66)
+ (xy 1.625 -3.404)
+ (xy 2.269 -3.01)
+ (xy 2.785 -2.53)
+ (xy 3.236 -1.907)
+ (xy 3.556 -1.204)
+ (xy 3.722 -0.51)
+ (xy 3.743 -0.247)
+ (xy 3.747 0.083)
+ (xy 3.735 0.391)
+ (xy 3.722 0.51)
+ (xy 3.546 1.246)
+ (xy 3.241 1.912)
+ (xy 3.231 1.929)
+ (xy 2.782 2.538)
+ (xy 2.223 3.042)
+ (xy 1.576 3.426)
+ (xy 0.862 3.676)
+ (xy 0.53 3.74)
+ (xy 0.358 3.755)
+ (xy 0.116 3.767)
+ (xy -0.124 3.772)
+ (xy -0.288 3.769)
+ (xy -0.3 3.768)
+ (xy -0.568 3.734)
+ (xy -0.741 3.707)
+ (xy -0.866 3.68)
+ (xy -1.599 3.426)
+ (xy -2.253 3.038)
+ (xy -2.812 2.53)
+ (xy -3.261 1.912)
+ (xy -3.4 1.65)
+ (xy -3.663 0.93)
+ (xy -3.774 0.186)
+ (xy -3.735 -0.56)
+ (xy -3.55 -1.287)
+ (xy -3.219 -1.975)
+ (xy -3.02 -2.27)
+ (xy -2.514 -2.822)
+ (xy -1.912 -3.259)
+ (xy -1.239 -3.57)
+ (xy -0.519 -3.743)
+ (xy 0.13 -3.773)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "B.Cu") (tstamp 33d3e19d-2e95-4100-988b-d519f2cd9d2f))
+ (fp_poly
+ (pts
+ (xy 0.197 4.976)
+ (xy 0.328 4.995)
+ (xy 0.426 5.024)
+ (xy 0.842 5.24)
+ (xy 1.167 5.565)
+ (xy 1.373 5.968)
+ (xy 1.41 6.11)
+ (xy 1.419 6.175)
+ (xy 1.427 6.271)
+ (xy 1.432 6.418)
+ (xy 1.435 6.636)
+ (xy 1.437 6.943)
+ (xy 1.438 7.359)
+ (xy 1.437 7.902)
+ (xy 1.436 8.35)
+ (xy 1.43 10.43)
+ (xy 1.383 10.57)
+ (xy 1.188 10.958)
+ (xy 0.902 11.272)
+ (xy 0.881 11.289)
+ (xy 0.619 11.448)
+ (xy 0.357 11.552)
+ (xy 0.156 11.582)
+ (xy -0.09 11.591)
+ (xy -0.248 11.58)
+ (xy -0.703 11.42)
+ (xy -1.075 11.129)
+ (xy -1.322 10.767)
+ (xy -1.362 10.684)
+ (xy -1.394 10.607)
+ (xy -1.418 10.516)
+ (xy -1.435 10.392)
+ (xy -1.447 10.214)
+ (xy -1.454 9.964)
+ (xy -1.458 9.622)
+ (xy -1.459 9.167)
+ (xy -1.459 8.581)
+ (xy -1.459 8.28)
+ (xy -1.459 7.63)
+ (xy -1.459 7.119)
+ (xy -1.456 6.729)
+ (xy -1.45 6.44)
+ (xy -1.44 6.232)
+ (xy -1.424 6.084)
+ (xy -1.402 5.978)
+ (xy -1.371 5.893)
+ (xy -1.332 5.81)
+ (xy -1.307 5.76)
+ (xy -1.209 5.588)
+ (xy -1.077 5.435)
+ (xy -1.042 5.4)
+ (xy -0.74 5.157)
+ (xy -0.45 5.026)
+ (xy -0.318 4.989)
+ (xy -0.176 4.974)
+ (xy -0.01 4.972)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "B.Cu") (tstamp bc6317c2-ce36-49a6-859d-0e6c2fb9d0e2))
+ (fp_poly
+ (pts
+ (xy 5.501 -11.79)
+ (xy 6.415 -11.789)
+ (xy 7.27 -11.788)
+ (xy 8.054 -11.787)
+ (xy 8.753 -11.785)
+ (xy 9.356 -11.784)
+ (xy 9.849 -11.781)
+ (xy 10.22 -11.779)
+ (xy 10.456 -11.777)
+ (xy 10.544 -11.774)
+ (xy 10.722 -11.676)
+ (xy 10.855 -11.506)
+ (xy 10.857 -11.503)
+ (xy 10.9 -11.401)
+ (xy 10.895 -8.964)
+ (xy 10.89 -6.527)
+ (xy 10.829 -6.429)
+ (xy 10.671 -6.271)
+ (xy 10.573 -6.21)
+ (xy 4.582 -6.206)
+ (xy 3.437 -6.205)
+ (xy 2.443 -6.205)
+ (xy 1.588 -6.205)
+ (xy 0.863 -6.205)
+ (xy 0.259 -6.206)
+ (xy -0.237 -6.207)
+ (xy -0.632 -6.209)
+ (xy -0.938 -6.211)
+ (xy -1.164 -6.214)
+ (xy -1.321 -6.218)
+ (xy -1.418 -6.222)
+ (xy -1.466 -6.227)
+ (xy -1.473 -6.229)
+ (xy -1.647 -6.362)
+ (xy -1.734 -6.496)
+ (xy -1.744 -6.531)
+ (xy -1.752 -6.586)
+ (xy -1.758 -6.68)
+ (xy -1.763 -6.83)
+ (xy -1.766 -7.054)
+ (xy -1.768 -7.368)
+ (xy -1.769 -7.79)
+ (xy -1.77 -8.338)
+ (xy -1.77 -9.01)
+ (xy -1.77 -11.43)
+ (xy -1.727 -11.51)
+ (xy -1.532 -11.72)
+ (xy -1.48 -11.748)
+ (xy -1.39 -11.79)
+ (xy 4.54 -11.79)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "B.SilkS") (tstamp bd454459-c279-4bf2-9c92-fbc724ac2bf7))
+ (fp_poly
+ (pts
+ (xy -4.241 -11.79)
+ (xy -3.272 -11.79)
+ (xy -2.441 -11.789)
+ (xy -1.737 -11.789)
+ (xy -1.15 -11.788)
+ (xy -0.669 -11.787)
+ (xy -0.282 -11.785)
+ (xy 0.02 -11.783)
+ (xy 0.25 -11.78)
+ (xy 0.417 -11.777)
+ (xy 0.532 -11.773)
+ (xy 0.607 -11.768)
+ (xy 0.652 -11.762)
+ (xy 0.679 -11.756)
+ (xy 0.683 -11.754)
+ (xy 0.861 -11.625)
+ (xy 0.962 -11.468)
+ (xy 0.97 -11.422)
+ (xy 0.977 -11.323)
+ (xy 0.982 -11.156)
+ (xy 0.985 -10.904)
+ (xy 0.988 -10.551)
+ (xy 0.989 -10.081)
+ (xy 0.99 -9.478)
+ (xy 0.99 -8.99)
+ (xy 0.99 -8.306)
+ (xy 0.989 -7.765)
+ (xy 0.988 -7.348)
+ (xy 0.986 -7.039)
+ (xy 0.983 -6.821)
+ (xy 0.978 -6.674)
+ (xy 0.972 -6.583)
+ (xy 0.964 -6.529)
+ (xy 0.953 -6.495)
+ (xy 0.834 -6.329)
+ (xy 0.667 -6.222)
+ (xy 0.662 -6.22)
+ (xy 0.566 -6.216)
+ (xy 0.311 -6.212)
+ (xy -0.103 -6.209)
+ (xy -0.674 -6.206)
+ (xy -1.4 -6.204)
+ (xy -2.282 -6.202)
+ (xy -3.318 -6.201)
+ (xy -4.507 -6.201)
+ (xy -5.36 -6.201)
+ (xy -6.489 -6.201)
+ (xy -7.468 -6.201)
+ (xy -8.309 -6.202)
+ (xy -9.021 -6.203)
+ (xy -9.614 -6.204)
+ (xy -10.101 -6.206)
+ (xy -10.49 -6.208)
+ (xy -10.793 -6.21)
+ (xy -11.02 -6.213)
+ (xy -11.182 -6.217)
+ (xy -11.288 -6.221)
+ (xy -11.351 -6.226)
+ (xy -11.379 -6.231)
+ (xy -11.379 -6.232)
+ (xy -11.593 -6.4)
+ (xy -11.632 -6.468)
+ (xy -11.68 -6.57)
+ (xy -11.68 -8.99)
+ (xy -11.68 -11.41)
+ (xy -11.633 -11.511)
+ (xy -11.452 -11.718)
+ (xy -11.38 -11.758)
+ (xy -11.356 -11.764)
+ (xy -11.306 -11.769)
+ (xy -11.218 -11.774)
+ (xy -11.082 -11.778)
+ (xy -10.888 -11.781)
+ (xy -10.625 -11.783)
+ (xy -10.281 -11.785)
+ (xy -9.847 -11.787)
+ (xy -9.312 -11.788)
+ (xy -8.665 -11.789)
+ (xy -7.895 -11.79)
+ (xy -6.992 -11.79)
+ (xy -5.944 -11.79)
+ (xy -5.36 -11.79)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 0bf4afeb-29c3-4171-838f-c374c127fc7a))
+ (fp_poly
+ (pts
+ (xy 4.81 1.516)
+ (xy 5.007 1.712)
+ (xy 5.096 1.972)
+ (xy 5.068 2.207)
+ (xy 4.949 2.395)
+ (xy 4.772 2.542)
+ (xy 4.745 2.556)
+ (xy 4.488 2.61)
+ (xy 4.339 2.594)
+ (xy 4.067 2.447)
+ (xy 3.908 2.207)
+ (xy 3.877 2.023)
+ (xy 3.946 1.741)
+ (xy 4.133 1.531)
+ (xy 4.401 1.428)
+ (xy 4.531 1.425)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "B.Mask") (tstamp 674b167a-68dc-4944-abd9-2c920d2c028b))
+ (fp_poly
+ (pts
+ (xy 0.594 5.396)
+ (xy 0.602 5.4)
+ (xy 0.9 5.661)
+ (xy 1.103 6.011)
+ (xy 1.15 6.17)
+ (xy 1.16 6.299)
+ (xy 1.169 6.561)
+ (xy 1.175 6.927)
+ (xy 1.18 7.371)
+ (xy 1.182 7.865)
+ (xy 1.183 8.38)
+ (xy 1.181 8.891)
+ (xy 1.178 9.368)
+ (xy 1.173 9.786)
+ (xy 1.166 10.115)
+ (xy 1.157 10.328)
+ (xy 1.15 10.39)
+ (xy 0.994 10.767)
+ (xy 0.718 11.072)
+ (xy 0.357 11.268)
+ (xy 0.287 11.288)
+ (xy 0.029 11.318)
+ (xy -0.249 11.3)
+ (xy -0.33 11.283)
+ (xy -0.712 11.092)
+ (xy -0.842 10.981)
+ (xy -1.031 10.748)
+ (xy -1.138 10.522)
+ (xy -1.19 10.39)
+ (xy -1.196 8.36)
+ (xy -1.197 7.653)
+ (xy -1.197 7.097)
+ (xy -1.194 6.681)
+ (xy -1.19 6.397)
+ (xy -1.183 6.234)
+ (xy -1.179 6.195)
+ (xy -1.055 5.861)
+ (xy -0.827 5.557)
+ (xy -0.634 5.404)
+ (xy -0.232 5.25)
+ (xy 0.188 5.247)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "B.Mask") (tstamp 01d9d42b-dcae-4691-8bc5-d7e48dd6619e))
+ (fp_poly
+ (pts
+ (xy 0.43 -3.486)
+ (xy 0.47 -3.481)
+ (xy 1.168 -3.307)
+ (xy 1.824 -2.993)
+ (xy 2.019 -2.864)
+ (xy 2.309 -2.623)
+ (xy 2.611 -2.319)
+ (xy 2.845 -2.034)
+ (xy 3.2 -1.399)
+ (xy 3.416 -0.707)
+ (xy 3.488 0.014)
+ (xy 3.412 0.736)
+ (xy 3.307 1.12)
+ (xy 3.028 1.749)
+ (xy 2.633 2.298)
+ (xy 2.442 2.5)
+ (xy 1.86 2.969)
+ (xy 1.21 3.294)
+ (xy 0.495 3.473)
+ (xy 0.09 3.508)
+ (xy -0.111 3.512)
+ (xy -0.238 3.509)
+ (xy -0.24 3.508)
+ (xy -0.615 3.458)
+ (xy -0.908 3.396)
+ (xy -1.195 3.306)
+ (xy -1.214 3.3)
+ (xy -1.851 2.991)
+ (xy -2.418 2.55)
+ (xy -2.889 2.001)
+ (xy -3.145 1.57)
+ (xy -3.394 0.913)
+ (xy -3.5 0.208)
+ (xy -3.505 0)
+ (xy -3.431 -0.75)
+ (xy -3.21 -1.439)
+ (xy -2.84 -2.069)
+ (xy -2.537 -2.429)
+ (xy -1.978 -2.906)
+ (xy -1.334 -3.253)
+ (xy -0.627 -3.459)
+ (xy -0.49 -3.481)
+ (xy -0.209 -3.502)
+ (xy 0.132 -3.504)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "B.Mask") (tstamp 4e1264e5-a208-45e1-96d8-69a1d25749b0))
+ (fp_poly
+ (pts
+ (xy 4.648 1.438)
+ (xy 4.889 1.579)
+ (xy 5.022 1.77)
+ (xy 5.068 2.02)
+ (xy 5.026 2.244)
+ (xy 4.849 2.472)
+ (xy 4.599 2.598)
+ (xy 4.355 2.599)
+ (xy 4.088 2.456)
+ (xy 3.919 2.204)
+ (xy 3.889 2.095)
+ (xy 3.911 1.845)
+ (xy 4.035 1.61)
+ (xy 4.105 1.541)
+ (xy 4.37 1.421)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "F.Mask") (tstamp c85434ea-cefb-48ef-b839-2b3848ce9865))
+ (fp_poly
+ (pts
+ (xy 0.594 5.396)
+ (xy 0.602 5.4)
+ (xy 0.9 5.661)
+ (xy 1.103 6.011)
+ (xy 1.15 6.17)
+ (xy 1.16 6.299)
+ (xy 1.169 6.561)
+ (xy 1.175 6.927)
+ (xy 1.18 7.371)
+ (xy 1.182 7.865)
+ (xy 1.183 8.38)
+ (xy 1.181 8.891)
+ (xy 1.178 9.368)
+ (xy 1.173 9.786)
+ (xy 1.166 10.115)
+ (xy 1.157 10.328)
+ (xy 1.15 10.39)
+ (xy 0.994 10.767)
+ (xy 0.718 11.072)
+ (xy 0.357 11.268)
+ (xy 0.287 11.288)
+ (xy 0.029 11.318)
+ (xy -0.249 11.3)
+ (xy -0.33 11.283)
+ (xy -0.712 11.092)
+ (xy -0.842 10.981)
+ (xy -1.031 10.748)
+ (xy -1.138 10.522)
+ (xy -1.19 10.39)
+ (xy -1.196 8.36)
+ (xy -1.197 7.653)
+ (xy -1.197 7.097)
+ (xy -1.194 6.681)
+ (xy -1.19 6.397)
+ (xy -1.183 6.234)
+ (xy -1.179 6.195)
+ (xy -1.055 5.861)
+ (xy -0.827 5.557)
+ (xy -0.634 5.404)
+ (xy -0.232 5.25)
+ (xy 0.188 5.247)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "F.Mask") (tstamp 203efd64-06fd-4432-be91-f6cfd1916b56))
+ (fp_poly
+ (pts
+ (xy 0.43 -3.486)
+ (xy 0.47 -3.481)
+ (xy 1.168 -3.307)
+ (xy 1.824 -2.993)
+ (xy 2.019 -2.864)
+ (xy 2.309 -2.623)
+ (xy 2.611 -2.319)
+ (xy 2.845 -2.034)
+ (xy 3.2 -1.399)
+ (xy 3.416 -0.707)
+ (xy 3.488 0.014)
+ (xy 3.412 0.736)
+ (xy 3.307 1.12)
+ (xy 3.028 1.749)
+ (xy 2.633 2.298)
+ (xy 2.442 2.5)
+ (xy 1.86 2.969)
+ (xy 1.21 3.294)
+ (xy 0.495 3.473)
+ (xy 0.09 3.508)
+ (xy -0.111 3.512)
+ (xy -0.238 3.509)
+ (xy -0.24 3.508)
+ (xy -0.615 3.458)
+ (xy -0.908 3.396)
+ (xy -1.195 3.306)
+ (xy -1.214 3.3)
+ (xy -1.851 2.991)
+ (xy -2.418 2.55)
+ (xy -2.889 2.001)
+ (xy -3.145 1.57)
+ (xy -3.394 0.913)
+ (xy -3.5 0.208)
+ (xy -3.505 0)
+ (xy -3.431 -0.75)
+ (xy -3.21 -1.439)
+ (xy -2.84 -2.069)
+ (xy -2.537 -2.429)
+ (xy -1.978 -2.906)
+ (xy -1.334 -3.253)
+ (xy -0.627 -3.459)
+ (xy -0.49 -3.481)
+ (xy -0.209 -3.502)
+ (xy 0.132 -3.504)
+ )
+
+ (stroke (width 0) (type solid)) (fill solid) (layer "F.Mask") (tstamp b8cfd746-f181-4cee-8d64-c6ee8acd3b44))
+ (fp_poly
+ (pts
+ (xy 12.678 -11.228)
+ (xy 12.668 -11.397)
+ (xy 12.64 -11.56)
+ (xy 12.595 -11.716)
+ (xy 12.533 -11.865)
+ (xy 12.456 -12.005)
+ (xy 12.365 -12.135)
+ (xy 12.261 -12.254)
+ (xy 12.144 -12.362)
+ (xy 12.017 -12.457)
+ (xy 11.879 -12.537)
+ (xy 11.732 -12.603)
+ (xy 11.578 -12.653)
+ (xy 11.416 -12.685)
+ (xy 11.249 -12.699)
+ (xy 11.206 -12.7)
+ (xy -11.228 -12.7)
+ (xy -11.397 -12.69)
+ (xy -11.56 -12.662)
+ (xy -11.716 -12.617)
+ (xy -11.865 -12.555)
+ (xy -12.005 -12.478)
+ (xy -12.135 -12.387)
+ (xy -12.254 -12.283)
+ (xy -12.362 -12.166)
+ (xy -12.457 -12.039)
+ (xy -12.537 -11.901)
+ (xy -12.603 -11.754)
+ (xy -12.653 -11.6)
+ (xy -12.685 -11.438)
+ (xy -12.699 -11.271)
+ (xy -12.7 -11.228)
+ (xy -12.7 11.23)
+ (xy -12.69 11.399)
+ (xy -12.662 11.562)
+ (xy -12.617 11.718)
+ (xy -12.555 11.867)
+ (xy -12.478 12.007)
+ (xy -12.387 12.137)
+ (xy -12.283 12.257)
+ (xy -12.166 12.364)
+ (xy -12.039 12.459)
+ (xy -11.901 12.54)
+ (xy -11.754 12.605)
+ (xy -11.6 12.655)
+ (xy -11.438 12.687)
+ (xy -11.271 12.702)
+ (xy -11.228 12.702)
+ (xy 11.206 12.702)
+ (xy 11.375 12.693)
+ (xy 11.538 12.665)
+ (xy 11.694 12.619)
+ (xy 11.843 12.558)
+ (xy 11.983 12.481)
+ (xy 12.113 12.389)
+ (xy 12.232 12.285)
+ (xy 12.34 12.169)
+ (xy 12.435 12.041)
+ (xy 12.515 11.903)
+ (xy 12.581 11.757)
+ (xy 12.631 11.602)
+ (xy 12.663 11.441)
+ (xy 12.677 11.273)
+ (xy 12.678 11.23)
+ (xy 12.678 -11.228)
+ )
+
+ (stroke (width 1) (type solid)) (fill none) (layer "Edge.Cuts") (tstamp ddc2c6af-2915-4e62-b517-baabe4e0698d))
+ (pad "" np_thru_hole circle (at -0.011 0.001) (size 5.005 5.005) (drill 5.005) (layers "*.Cu" "*.Mask")
+ (clearance 0.1) (zone_connect 0) (tstamp 8ef46f5f-ec31-482f-ac36-edd35f1392a6))
+ (pad "" np_thru_hole circle (at 4.486 1.995) (size 0.97 0.97) (drill 0.97) (layers "*.Cu" "*.Mask")
+ (clearance 0.1) (zone_connect 0) (tstamp 9dadc7db-9bec-4fcd-91a2-be702e605225))
+ (pad "" np_thru_hole circle (at 11.393 -11.409) (size 0.859 0.859) (drill 0.859) (layers "*.Cu" "*.Mask")
+ (clearance 0.1) (zone_connect 0) (tstamp 40f3e87c-8c68-484f-9fc4-88c4e7408410))
+ )
+
+)
diff --git a/PCB_Art_Jewelry/525floppyGERBERS.zip b/PCB_Art_Jewelry/525floppyGERBERS.zip
new file mode 100644
index 000000000..d2dfeb5cc
Binary files /dev/null and b/PCB_Art_Jewelry/525floppyGERBERS.zip differ
diff --git a/PCB_Art_Jewelry/525floppyGuide.afdesign b/PCB_Art_Jewelry/525floppyGuide.afdesign
new file mode 100644
index 000000000..0be3d77b9
Binary files /dev/null and b/PCB_Art_Jewelry/525floppyGuide.afdesign differ
diff --git a/PCB_Art_Jewelry/README.md b/PCB_Art_Jewelry/README.md
new file mode 100644
index 000000000..9448df8d8
--- /dev/null
+++ b/PCB_Art_Jewelry/README.md
@@ -0,0 +1,9 @@
+## PCB Art - Making PCB jewelry
+
+An Adafruit Learning System Guide Making PCB Art with Gingerbread and KiCad
+
+https://learn.adafruit.com/making-pcb-art-with-gingerbread-and-kicad/overview
+
+Author: Anne Barela for Adafruit Insustries
+
+All files license: MIT
diff --git a/PCB_LCARS_Panel/LCARS Final.afdesign b/PCB_LCARS_Panel/LCARS Final.afdesign
new file mode 100644
index 000000000..af05c3805
Binary files /dev/null and b/PCB_LCARS_Panel/LCARS Final.afdesign differ
diff --git a/PCB_LCARS_Panel/LCARS Final.svg b/PCB_LCARS_Panel/LCARS Final.svg
new file mode 100644
index 000000000..689673a58
--- /dev/null
+++ b/PCB_LCARS_Panel/LCARS Final.svg
@@ -0,0 +1,54 @@
+
+
+
diff --git a/PCB_LCARS_Panel/LCARS Rev C.zip b/PCB_LCARS_Panel/LCARS Rev C.zip
new file mode 100644
index 000000000..9c2877f67
Binary files /dev/null and b/PCB_LCARS_Panel/LCARS Rev C.zip differ
diff --git a/PCB_LCARS_Panel/README.md b/PCB_LCARS_Panel/README.md
new file mode 100644
index 000000000..bc085a38d
--- /dev/null
+++ b/PCB_LCARS_Panel/README.md
@@ -0,0 +1,9 @@
+## PCB Art - LCARS capacitive touch door panel
+
+An Adafruit Learning System Guide Making PCB Art with Gingerbread and KiCad
+
+https://learn.adafruit.com/create-an-lcars-inspired-circuit-board-panel/overview
+
+Author: Anne Barela for Adafruit Insustries
+
+All files license: MIT
diff --git a/Pep_Talk_Generator/clue/code.py b/Pep_Talk_Generator/clue/code.py
index c935c9154..fe480460a 100644
--- a/Pep_Talk_Generator/clue/code.py
+++ b/Pep_Talk_Generator/clue/code.py
@@ -142,7 +142,7 @@
)
clue_group.append(title)
-display.show(clue_group)
+display.root_group = clue_group
while True:
if clue.button_a or clue.button_b:
diff --git a/Pi400_Knobs/code.py b/Pi400_Knobs/code.py
index 18785c956..e69b1514d 100644
--- a/Pi400_Knobs/code.py
+++ b/Pi400_Knobs/code.py
@@ -14,7 +14,8 @@
sender = udp_client.SimpleUDPClient("127.0.0.1", 4560)
sender.send_message("/trigger/prophet", [43, 110, 1, 0.7])
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
pcf = PCF.PCF8591(i2c)
pcf_in_0 = AnalogIn(pcf, PCF.A0)
diff --git a/PiCowbell_Adalogger_Examples/Arduino_PiCowbell_Adalogger_Example/.none.test.only b/PiCowbell_Adalogger_Examples/Arduino_PiCowbell_Adalogger_Example/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/PiCowbell_Adalogger_Examples/Arduino_PiCowbell_Adalogger_Example/Arduino_PiCowbell_Adalogger_Example.ino b/PiCowbell_Adalogger_Examples/Arduino_PiCowbell_Adalogger_Example/Arduino_PiCowbell_Adalogger_Example.ino
new file mode 100644
index 000000000..1044ac91f
--- /dev/null
+++ b/PiCowbell_Adalogger_Examples/Arduino_PiCowbell_Adalogger_Example/Arduino_PiCowbell_Adalogger_Example.ino
@@ -0,0 +1,163 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+const int _MISO = 16;
+const int _MOSI = 19;
+const int _CS = 17;
+const int _SCK = 18;
+
+#include
+#include
+#include
+#include "Adafruit_MCP9808.h"
+#include "RTClib.h"
+
+RTC_PCF8523 rtc;
+
+char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
+
+// Create the MCP9808 temperature sensor object
+Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
+
+File logfile;
+
+// blink out an error code
+void error(uint8_t errno) {
+ while(1) {
+ uint8_t i;
+ for (i=0; iThis is a Pico W running an HTTP server with CircuitPython.
The current ambient temperature near the Pico W is
- {temp_test}°{unit}
+ {temp_test:.2f}°{unit}
Control the LED on the Pico W with these buttons:
@@ -137,14 +137,14 @@ def webpage():
# route default static IP
@server.route("/")
-def base(request): # pylint: disable=unused-argument
+def base(request: Request): # pylint: disable=unused-argument
# serve the HTML f string
# with content type text/html
- return HTTPResponse(content_type="text/html", body=webpage())
+ return Response(request, f"{webpage()}", content_type='text/html')
# if a button is pressed on the site
-@server.route("/", "POST")
-def buttonpress(request):
+@server.route("/", POST)
+def buttonpress(request: Request):
# get the raw text
raw_text = request.raw_request.decode("utf8")
print(raw_text)
@@ -161,7 +161,7 @@ def buttonpress(request):
# toggle the parrot_pin value
parrot_pin.value = not parrot_pin.value
# reload site
- return HTTPResponse(content_type="text/html", body=webpage())
+ return Response(request, f"{webpage()}", content_type='text/html')
print("starting server..")
# startup the server
@@ -178,19 +178,19 @@ def buttonpress(request):
# text objects for screen
# connected to SSID text
connect_text_area.text = "Connected to:"
-ssid_text = "%s" % os.getenv('WIFI_SSID')
+ssid_text = f"{os.getenv('CIRCUITPY_WIFI_SSID')}"
ssid_text_area = label.Label(
terminalio.FONT, text=ssid_text, color=0xFFFFFF, x=0, y=offset_y+15
)
splash.append(ssid_text_area)
# display ip address
-ip_text = "IP: %s" % wifi.radio.ipv4_address
+ip_text = f"IP: {wifi.radio.ipv4_address}"
ip_text_area = label.Label(
terminalio.FONT, text=ip_text, color=0xFFFFFF, x=0, y=offset_y+30
)
splash.append(ip_text_area)
# display temp reading
-temp_text = "Temperature: %.02f F" % float(temp_test)
+temp_text = f"Temperature: {temp_test:.2f} F"
temp_text_area = label.Label(
terminalio.FONT, text=temp_text, color=0xFFFFFF, x=0, y=offset_y+45
)
@@ -224,18 +224,18 @@ def buttonpress(request):
print("lost connection")
else:
connect_text_area.text = "Connected to:"
- ssid_text_area.text = "%s" % os.getenv('WIFI_SSID')
+ ssid_text_area.text = f"{os.getenv('CIRCUITPY_WIFI_SSID')}"
print("connected")
clock = time.monotonic()
# comment/uncomment for desired units
- # temp_test = str(ds18.temperature)
- temp_test = str(c_to_f(ds18.temperature))
- temp_text_area.text = "Temperature: %d F" % temp_test
+ # temp_test = ds18.temperature
+ temp_test = c_to_f(ds18.temperature)
+ temp_text_area.text = f"Temperature: {temp_test:.2f} F"
#if parrot is True:
if parrot_pin.value is True:
# switch to party parrot display group
- display.show(parrot_group)
+ display.root_group = parrot_group
if (party + 0.1) < time.monotonic():
# the party parrot animation cycles
parrot_grid[0] = p
@@ -245,9 +245,10 @@ def buttonpress(request):
# if it isn't a party
else:
# show default display with info
- display.show(splash)
+ display.root_group = splash
# poll the server for incoming/outgoing requests
server.poll()
# pylint: disable=broad-except
- except Exception:
+ except Exception as e:
+ print(e)
continue
diff --git a/Pico_MIDI_Fighter/code.py b/Pico_MIDI_Fighter/code.py
index 124c57597..51ecff4f3 100644
--- a/Pico_MIDI_Fighter/code.py
+++ b/Pico_MIDI_Fighter/code.py
@@ -214,7 +214,7 @@
midi_notes = [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75]
# show main display GUI
-display.show(splash)
+display.root_group = splash
while True:
@@ -314,7 +314,7 @@
# if an arcade button is selected to change the MIDI note...
if sub_state:
# display the secondary GUI menu
- display.show(big_splash)
+ display.root_group = big_splash
# display the selected button's MIDI note
big_text.text = str(midi_num)
@@ -368,6 +368,6 @@
# update new MIDI number text label
text_labels[button_pos].text = str(midi_num)
# show main GUI display
- display.show(splash)
+ display.root_group = splash
# turn off blinking LED
leds[button_pos].value = False
diff --git a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Adafruit_IO/code.py b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Adafruit_IO/code.py
index f3bb24af4..91d535665 100644
--- a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Adafruit_IO/code.py
+++ b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Adafruit_IO/code.py
@@ -13,7 +13,7 @@
import adafruit_ahtx0
from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError
-wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
aio_username = os.getenv('aio_username')
aio_key = os.getenv('aio_key')
diff --git a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Azure_IoT_Central/code.py b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Azure_IoT_Central/code.py
index 0de3cb21a..e59fef060 100644
--- a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Azure_IoT_Central/code.py
+++ b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Azure_IoT_Central/code.py
@@ -19,7 +19,7 @@
aht20 = adafruit_ahtx0.AHTx0(i2c)
print("Connecting to WiFi...")
-wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
print("Connected to WiFi!")
diff --git a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Basic_WiFi_Test/code.py b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Basic_WiFi_Test/code.py
index b96d1b2f1..53992c0da 100644
--- a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Basic_WiFi_Test/code.py
+++ b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Basic_WiFi_Test/code.py
@@ -11,7 +11,7 @@
print("Connecting to WiFi")
# connect to your SSID
-wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
print("Connected to WiFi")
diff --git a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_JSON_Feed/code.py b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_JSON_Feed/code.py
index ef815a6d7..e70db1f79 100644
--- a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_JSON_Feed/code.py
+++ b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_JSON_Feed/code.py
@@ -10,7 +10,7 @@
import microcontroller
import adafruit_requests
-wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
# Use cityname, country code where countrycode is ISO3166 format.
# E.g. "New York, US" or "London, GB"
diff --git a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Requests/code.py b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Requests/code.py
index 882ce5687..232326c80 100644
--- a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Requests/code.py
+++ b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Requests/code.py
@@ -14,7 +14,7 @@
quotes_url = "https://www.adafruit.com/api/quotes.php"
# connect to SSID
-wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
diff --git a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Twitter_Feed/code.py b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Twitter_Feed/code.py
index 1933fd630..b81ce9921 100644
--- a/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Twitter_Feed/code.py
+++ b/Pico_W_CircuitPython_WiFi_Examples/Pico_W_Twitter_Feed/code.py
@@ -17,7 +17,7 @@
headers = {'Authorization': 'Bearer ' + os.getenv('bearer_token')}
-wifi.radio.connect(os.getenv('WIFI_SSID'), os.getenv('WIFI_PASSWORD'))
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
diff --git a/Piezo_Driver_Examples/Arduino_Piezo_Driver_Example/.feather_rp2040.test.only b/Piezo_Driver_Examples/Arduino_Piezo_Driver_Example/.feather_rp2040.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Piezo_Driver_Examples/Arduino_Piezo_Driver_Example/Arduino_Piezo_Driver_Example.ino b/Piezo_Driver_Examples/Arduino_Piezo_Driver_Example/Arduino_Piezo_Driver_Example.ino
new file mode 100644
index 000000000..e5556b78d
--- /dev/null
+++ b/Piezo_Driver_Examples/Arduino_Piezo_Driver_Example/Arduino_Piezo_Driver_Example.ino
@@ -0,0 +1,28 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#define PIEZO_PIN 5 // Pin connected to the piezo buzzer.
+
+int toneFreq[] = {262, 294, 330, 349, 392, 440, 494, 523};
+int toneCount = 8;
+
+void setup() {
+ Serial.begin(115200);
+ Serial.println("Piezo Tone Example");
+}
+
+void loop() {
+
+ for (int i=0; i < toneCount; i++) {
+ Serial.print("Playing frequency: ");
+ Serial.println(toneFreq[i]);
+ tone(PIEZO_PIN, toneFreq[i]);
+ delay(250); // Pause for half a second.
+ noTone(PIEZO_PIN);
+ delay(50);
+ }
+ Serial.println();
+ delay(1000);
+
+}
diff --git a/Piezo_Driver_Examples/CircuitPython_Piezo_Driver_Example/code.py b/Piezo_Driver_Examples/CircuitPython_Piezo_Driver_Example/code.py
new file mode 100644
index 000000000..bcc28a6f8
--- /dev/null
+++ b/Piezo_Driver_Examples/CircuitPython_Piezo_Driver_Example/code.py
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2018 Kattni Rembor for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import pwmio
+
+piezo = pwmio.PWMOut(board.D5, duty_cycle=0, frequency=440, variable_frequency=True)
+
+while True:
+ for f in (262, 294, 330, 349, 392, 440, 494, 523):
+ piezo.frequency = f
+ piezo.duty_cycle = 65535 // 2 # On 50%
+ time.sleep(0.25) # On for 1/4 second
+ piezo.duty_cycle = 0 # Off
+ time.sleep(0.05) # Pause between notes
+ time.sleep(0.5)
diff --git a/PipBoy_2040/code.py b/PipBoy_2040/code.py
index f1a4c3443..997875c08 100644
--- a/PipBoy_2040/code.py
+++ b/PipBoy_2040/code.py
@@ -10,8 +10,9 @@
displayio.release_displays()
-i2c_bus = board.I2C()
-ss = Seesaw(i2c_bus)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+ss = Seesaw(i2c)
spi = board.SPI() # setup for display over SPI
tft_cs = board.D5
@@ -23,7 +24,7 @@
display = ST7789(display_bus, width=280, height=240, rowstart=20, rotation=270)
screen = displayio.Group() # Create a Group to hold content
-display.show(screen) # Add it to the Display
+display.root_group = screen # Add it to the Display
# display image
image = displayio.OnDiskBitmap("/img/bootpip0.bmp")
@@ -42,7 +43,7 @@
cursor.x = 0 # hide cursor during bootup
cursor.y = 0
-display.show(screen)
+display.root_group = screen
boot_file_names = [
"/img/bootpip0.bmp",
diff --git a/PlayStation_Controller_Spinner/code.py b/PlayStation_Controller_Spinner/code.py
new file mode 100644
index 000000000..336bfdcba
--- /dev/null
+++ b/PlayStation_Controller_Spinner/code.py
@@ -0,0 +1,81 @@
+# SPDX-FileCopyrightText: 2023 John Park w/ Tod Kurt ps2controller library
+#
+# SPDX-License-Identifier: MIT
+# The Takara Game of Life PlayStation roulette wheel controller spinner (TAKC-00001)
+# sends two sets of held CIRCLE buttons with randomized hold time periods
+# this code turns that into mouse click spamming (the CIRCLE button also spams)
+# Tested on QT Py RP2040
+
+import time
+import board
+import usb_hid
+import neopixel
+from adafruit_hid.keycode import Keycode
+from adafruit_hid.keyboard import Keyboard
+from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
+from adafruit_hid.mouse import Mouse
+from ps2controller import PS2Controller
+
+# turn on neopixel
+led = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.1)
+led.fill(0x331000) # amber while we wait for controller to connect
+
+mouse = Mouse(usb_hid.devices)
+
+keyboard = Keyboard(usb_hid.devices)
+layout = KeyboardLayoutUS(keyboard)
+
+# create controller object with QT Py wiring
+psx = PS2Controller(
+ dat=board.A0,
+ cmd=board.A1,
+ att=board.A2,
+ clk=board.A3
+)
+led.fill(0x0010ee) # a nice PlayStation blue
+
+circle_held = False
+spam_speed = 0.001
+
+buttonmap = {
+ ("SELECT"): (0, Keycode.SPACEBAR),
+ ("START"): (0, Keycode.X),
+ ("UP"): (0, Keycode.W),
+ ("DOWN"): (0, Keycode.S),
+ ("RIGHT"): (0, Keycode.D),
+ ("LEFT"): (0, Keycode.A),
+ ("L3"): (0, Keycode.V),
+ ("R3"): (0, Keycode.B),
+ ("L2"): (0, Keycode.R),
+ ("R2"): (0, Keycode.T),
+ ("L1"): (0, Keycode.F),
+ ("R1"): (0, Keycode.G),
+ ("TRIANGLE"): (0, Keycode.I),
+ ("CIRCLE"): (1, Mouse.LEFT_BUTTON), # for mouse clicks
+ ("CROSS"): (0, Keycode.K),
+ ("SQUARE"): (0, Keycode.L),
+}
+
+print("PlayStation Roulette Wheel controller")
+
+while True:
+ events = psx.update()
+ if events:
+ print(events)
+ for event in events:
+ if buttonmap[event.name][0] == 0: # regular button
+ if event.pressed:
+ keyboard.press(buttonmap[event.name][1])
+ if event.released:
+ keyboard.release(buttonmap[event.name][1])
+
+ if buttonmap[event.name][0] == 1: # mouse button
+ if event.pressed:
+ circle_held = True
+ if event.released:
+ circle_held = False
+
+ if circle_held: # spam the mouse click
+ mouse.press(buttonmap["CIRCLE"][1])
+ mouse.release_all()
+ time.sleep(spam_speed)
diff --git a/PowerGlove_BLE_MIDI/code.py b/PowerGlove_BLE_MIDI/code.py
index bf024a69f..65047faf4 100644
--- a/PowerGlove_BLE_MIDI/code.py
+++ b/PowerGlove_BLE_MIDI/code.py
@@ -18,7 +18,8 @@
import simpleio
from analogio import AnalogIn
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
sense_accel = adafruit_lsm6ds.lsm6ds33.LSM6DS33(i2c)
analog_in_thumb = AnalogIn(board.A3)
diff --git a/PowerWash_Controller/code.py b/PowerWash_Controller/code.py
new file mode 100644
index 000000000..2f9e723c5
--- /dev/null
+++ b/PowerWash_Controller/code.py
@@ -0,0 +1,267 @@
+# SPDX-FileCopyrightText: 2023 John Park for Adafruit Industries
+# SPDX-License-Identifier: MIT
+# PowerWash Simulator controller
+"""
+Hardware:
+# QT Py RP2040, BNO055, Wiichuck adapter, Piezo driver on D10 ('MO' pin on silk)
+ User control:
+ nozzle heading/roll (sensor is mounted "sideways" in washer handle) = mouse x/y
+ nozzle tap/shake = next nozzle tip
+ wii C button (while level) = rotate nozzle tip
+ wii Z button = trigger water
+ wii joystick = WASD
+ wii roll right = change stance stand/crouch/prone
+ wii roll left = jump
+ wii pitch up + C button = set target angle offset
+ wii pitch down = show dirt
+ wii pitch down + C button = toggle aim mode
+"""
+
+import time
+import math
+import board
+from simpleio import map_range, tone
+import adafruit_bno055
+import usb_hid
+from adafruit_hid.mouse import Mouse
+from adafruit_hid.keycode import Keycode
+from adafruit_hid.keyboard import Keyboard
+from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
+from adafruit_nunchuk import Nunchuk
+
+# ===========================================
+# constants
+DEBUG = False
+CURSOR = True # use to toggle cursor movment during testing/use
+SENSOR_PACKET_FACTOR = 10 # Ratio of BNo055 data packets per Wiichuck packet
+HORIZONTAL_RATE = 127 # mouse x speed
+VERTICAL_RATE = 63 # mouse y speed
+WII_C_KEY_1 = Keycode.R # rotate nozzle
+WII_C_KEY_2 = Keycode.C # aim mode
+WII_PITCH_UP = 270 # value to trigger wiichuk up state
+WII_PITCH_DOWN = 730 # value to trigger wiichuck down state
+WII_ROLL_LEFT = 280 # value to trigger wiichuck left state
+WII_ROLL_RIGHT = 740 # value to trigger wiichuck right state
+TAP_THRESHOLD = 6 # Tap sensitivity threshold; depends on the physical sensor mount
+TAP_DEBOUNCE = 0.3 # Time for accelerometer to settle after tap (seconds)
+
+# ===========================================
+# Instantiate I2C interface connection
+# i2c = board.I2C() # For board.SCL and board.SDA
+i2c = board.STEMMA_I2C() # For the built-in STEMMA QT connection
+
+# ===========================================
+# setup USB HID mouse and keyboard
+mouse = Mouse(usb_hid.devices)
+keyboard = Keyboard(usb_hid.devices)
+layout = KeyboardLayoutUS(keyboard)
+
+# ===========================================
+# wii nunchuk setup
+wiichuk = Nunchuk(i2c)
+
+# ===========================================
+# Instantiate the BNo055 sensor
+sensor = adafruit_bno055.BNO055_I2C(i2c)
+sensor.mode = 0x0C # Set the sensor to NDOF_MODE
+
+# ===========================================
+# beep function
+def beep(freq=440, duration=0.2):
+ """Play the piezo element for duration (sec) at freq (Hz).
+ This is a blocking method."""
+ tone(board.D10, freq, duration)
+
+# ===========================================
+# debug print function
+def printd(line):
+ """Prints a string if DEBUG is True."""
+ if DEBUG:
+ print(line)
+
+# ===========================================
+# euclidean distance function
+def euclidean_distance(reference, measured):
+ """Calculate the Euclidean distance between reference and measured points
+ in a universe. The point position tuples can be colors, compass,
+ accelerometer, absolute position, or almost any other multiple value data
+ set.
+ reference: A tuple or list of reference point position values.
+ measured: A tuple or list of measured point position values."""
+ # Create list of deltas using list comprehension
+ deltas = [(reference[idx] - count) for idx, count in enumerate(measured)]
+ # Resolve squared deltas to a Euclidean difference and return the result
+ # pylint:disable=c-extension-no-member
+ return math.sqrt(sum([d ** 2 for d in deltas]))
+
+# ===========================================
+# BNO055 offsets
+# Preset the sensor calibration offsets
+# User sets this up once for geographic location using `bno055_calibrator.py` in library examples
+sensor.offsets_magnetometer = (198, 238, 465)
+sensor.offsets_gyroscope = (-2, 0, -1)
+sensor.offsets_accelerometer = (-28, -5, -29)
+printd(f"offsets_magnetometer set to: {sensor.offsets_magnetometer}")
+printd(f"offsets_gyroscope set to: {sensor.offsets_gyroscope}")
+printd(f"offsets_accelerometer set to: {sensor.offsets_accelerometer}")
+
+# ===========================================
+# controller states
+wii_roll_state = 1 # roll left 0, center 1, roll right 2
+wii_pitch_state = 1 # pitch down 0, center 1, pitch up 2
+wii_last_roll_state = 1
+wii_last_pitch_state = 1
+c_button_state = False
+z_button_state = False
+
+sensor_packet_count = 0 # Initialize the BNo055 packet counter
+
+print("PowerWash controller ready, point at center of screen for initial offset:")
+beep(400, 0.1)
+beep(440, 0.2)
+time.sleep(3)
+# The target angle offset used to reorient the wand to point at the display
+#pylint:disable=(unnecessary-comprehension)
+target_angle_offset = [angle for angle in sensor.euler]
+beep(220, 0.4)
+print("......reoriented", target_angle_offset)
+
+
+while True:
+ # ===========================================
+ # BNO055
+ # Get the Euler angle values from the sensor
+ # The Euler angle limits are: +180 to -180 pitch, +360 to -360 heading, +90 to -90 roll
+ sensor_euler = sensor.euler
+ sensor_packet_count += 1 # Increment the BNo055 packet counter
+ # Adjust the Euler angle values with the target_position_offset
+ heading, roll, pitch = [
+ position - target_angle_offset[idx] for idx,
+ position in enumerate(sensor_euler)
+ ]
+ printd(f"heading {heading}, roll {roll}")
+ # Scale the heading for horizontal movement range
+ # horizontal_mov = map_range(heading, 220, 260, -30.0, 30.0)
+ horizontal_mov = int(map_range(heading, -16, 16, HORIZONTAL_RATE*-1, HORIZONTAL_RATE))
+ printd(f"mouse x: {horizontal_mov}")
+
+ # Scale the roll for vertical movement range
+ vertical_mov = int(map_range(roll, 9, -9, VERTICAL_RATE*-1, VERTICAL_RATE))
+ printd(f"mouse y: {vertical_mov}")
+ if CURSOR:
+ mouse.move(x=horizontal_mov)
+ mouse.move(y=vertical_mov)
+
+ # ===========================================
+ # sensor packet ratio
+ # Read the wiichuck every "n" times the BNo055 is read
+ if sensor_packet_count >= SENSOR_PACKET_FACTOR:
+ sensor_packet_count = 0 # Reset the BNo055 packet counter
+
+ # ===========================================
+ # wiichuck joystick
+ joy_x, joy_y = wiichuk.joystick
+ printd(f"joystick = {wiichuk.joystick}")
+ if joy_x < 25:
+ keyboard.press(Keycode.A)
+ else:
+ keyboard.release(Keycode.A)
+
+ if joy_x > 225:
+ keyboard.press(Keycode.D)
+ else:
+ keyboard.release(Keycode.D)
+
+ if joy_y > 225:
+ keyboard.press(Keycode.W)
+ else:
+ keyboard.release(Keycode.W)
+
+ if joy_y < 25:
+ keyboard.press(Keycode.S)
+ else:
+ keyboard.release(Keycode.S)
+
+ # ===========================================
+ # wiichuck accel
+ wii_roll, wii_pitch, wii_az = wiichuk.acceleration
+ printd(f"roll:, {wii_roll}, pitch:, {wii_pitch}")
+ if wii_roll <= WII_ROLL_LEFT:
+ wii_roll_state = 0
+ if wii_last_roll_state != 0:
+ keyboard.press(Keycode.SPACE) # jump
+ wii_last_roll_state = 0
+ elif WII_ROLL_LEFT < wii_roll < WII_ROLL_RIGHT: # centered
+ wii_roll_state = 1
+ if wii_last_roll_state != 1:
+ keyboard.release(Keycode.LEFT_CONTROL)
+ keyboard.release(Keycode.SPACE)
+ wii_last_roll_state = 1
+ else:
+ wii_roll_state = 2
+ if wii_last_roll_state != 2:
+ keyboard.press(Keycode.LEFT_CONTROL) # change stance
+ wii_last_roll_state = 2
+
+ if wii_pitch <= WII_PITCH_UP: # up used as modifier
+ wii_pitch_state = 0
+ if wii_last_pitch_state != 0:
+ beep(freq=660)
+ wii_last_pitch_state = 0
+ elif WII_PITCH_UP < wii_pitch < WII_PITCH_DOWN: # level
+ wii_pitch_state = 1
+ if wii_last_pitch_state != 1:
+ wii_last_pitch_state = 1
+ else:
+ wii_pitch_state = 2 # down sends command and is modifier
+ if wii_last_pitch_state != 2:
+ keyboard.send(Keycode.TAB)
+ beep(freq=110)
+ wii_last_pitch_state = 2
+
+ # ===========================================
+ # wiichuck buttons
+ if wii_pitch_state == 0: # button use when wiichuck is held level
+ if wiichuk.buttons.C and c_button_state is False:
+ target_angle_offset = [angle for angle in sensor_euler]
+ beep()
+ beep()
+ c_button_state = True
+ if not wiichuk.buttons.C and c_button_state is True:
+ c_button_state = False
+
+ elif wii_pitch_state == 1: # level
+ if wiichuk.buttons.C and c_button_state is False:
+ keyboard.press(WII_C_KEY_1)
+ c_button_state = True
+ if not wiichuk.buttons.C and c_button_state is True:
+ keyboard.release(WII_C_KEY_1)
+ c_button_state = False
+
+ elif wii_pitch_state == 2: # down
+ if wiichuk.buttons.C and c_button_state is False:
+ keyboard.press(WII_C_KEY_2)
+ c_button_state = True
+ if not wiichuk.buttons.C and c_button_state is True:
+ keyboard.release(WII_C_KEY_2)
+ c_button_state = False
+
+ if wiichuk.buttons.Z and z_button_state is False:
+ mouse.press(Mouse.LEFT_BUTTON)
+ z_button_state = True
+ if not wiichuk.buttons.Z and z_button_state is True:
+ mouse.release(Mouse.LEFT_BUTTON)
+ z_button_state = False
+
+ # ===========================================
+ # BNO055 tap detection
+ # Detect a single tap on any axis of the BNo055 accelerometer
+ accel_sample_1 = sensor.acceleration # Read one sample
+ accel_sample_2 = sensor.acceleration # Read the next sample
+ if euclidean_distance(accel_sample_1, accel_sample_2) >= TAP_THRESHOLD:
+ # The difference between two consecutive samples exceeded the threshold ()
+ # (equivalent to a high-pass filter)
+ mouse.move(wheel=1)
+ printd("SINGLE tap detected")
+ beep()
+ time.sleep(TAP_DEBOUNCE) # Debounce delay
diff --git a/Propmaker_Master_Sword/code.py b/Propmaker_Master_Sword/code.py
index d4aa5dfc4..cd1deb340 100644
--- a/Propmaker_Master_Sword/code.py
+++ b/Propmaker_Master_Sword/code.py
@@ -58,7 +58,8 @@
wave_file = None
# Set up accelerometer on I2C bus, 4G range:
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
accel.range = adafruit_lis3dh.RANGE_4_G
diff --git a/Propmaker_Tron_Disk/code.py b/Propmaker_Tron_Disk/code.py
new file mode 100755
index 000000000..e44882e74
--- /dev/null
+++ b/Propmaker_Tron_Disk/code.py
@@ -0,0 +1,242 @@
+# SPDX-FileCopyrightText: 2021 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+Prop-Maker based Tron Disk
+Adapted from the Darksaber code
+Adafruit invests time and resources providing this open source code.
+Please support Adafruit and open source hardware by purchasing
+products from Adafruit!
+Written by Liz Clark for Adafruit Industries
+Copyright (c) 2023 Adafruit Industries
+Licensed under the MIT license.
+All text above must be included in any redistribution.
+"""
+
+import time
+import random
+import board
+from digitalio import DigitalInOut, Direction
+import neopixel
+import adafruit_lis3dh
+from adafruit_led_animation.animation.solid import Solid
+from adafruit_led_animation.animation.pulse import Pulse
+from adafruit_led_animation.animation.comet import Comet
+
+from adafruit_bluefruit_connect.packet import Packet
+from adafruit_bluefruit_connect.color_packet import ColorPacket
+
+from adafruit_ble import BLERadio
+from adafruit_ble.advertising.standard import ProvideServicesAdvertisement
+from adafruit_ble.services.nordic import UARTService
+
+# BLE setup
+ble = BLERadio()
+uart_service = UARTService()
+advertisement = ProvideServicesAdvertisement(uart_service)
+
+# CUSTOMISE SENSITIVITY HERE: smaller numbers = more sensitive to motion
+HIT_THRESHOLD = 250
+SWING_THRESHOLD = 150
+
+# Set to the length in seconds of the "on.wav" file
+POWER_ON_SOUND_DURATION = 1.7
+
+# NeoPixel setup
+NUM_PIXELS = 37 # Number of pixels used in project
+NEOPIXEL_PIN = board.D5
+POWER_PIN = board.D10
+
+enable = DigitalInOut(POWER_PIN)
+enable.direction = Direction.OUTPUT
+enable.value = False
+
+strip = neopixel.NeoPixel(NEOPIXEL_PIN, NUM_PIXELS, brightness=.5, auto_write=False)
+strip.fill(0) # NeoPixels off ASAP on startup
+strip.show()
+
+# default NeoPixel color is white
+COLOR = (0, 161, 255)
+
+# NeoPixel animations
+pulse = Pulse(strip, speed=0.05, color=COLOR, period=3)
+solid = Solid(strip, color=COLOR)
+comet = Comet(strip, speed=0.05, color=COLOR, tail_length=40)
+
+#audio
+try:
+ from audiocore import WaveFile
+except ImportError:
+ from audioio import WaveFile
+
+try:
+ from audioio import AudioOut
+except ImportError:
+ try:
+ from audiopwmio import PWMAudioOut as AudioOut
+ except ImportError:
+ pass # not always supported by every board!
+
+audio = AudioOut(board.A0) # Speaker
+wave_file = None
+
+# Set up accelerometer on I2C bus, 4G range:
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
+accel.range = adafruit_lis3dh.RANGE_4_G
+
+def play_wav(name, loop=False):
+ """
+ Play a WAV file in the 'sounds' directory.
+ :param name: partial file name string, complete name will be built around
+ this, e.g. passing 'foo' will play file 'sounds/foo.wav'.
+ :param loop: if True, sound will repeat indefinitely (until interrupted
+ by another sound).
+ """
+ global wave_file # pylint: disable=global-statement
+ print("playing", name)
+ if wave_file:
+ wave_file.close()
+ try:
+ wave_file = open('sounds/' + name + '.wav', 'rb')
+ wave = WaveFile(wave_file)
+ audio.play(wave, loop=loop)
+ except OSError:
+ pass # we'll just skip playing then
+
+
+def power_on(sound, duration):
+ """
+ Animate NeoPixels with accompanying sound effect for power on.
+ :param sound: sound name (similar format to play_wav() above)
+ :param duration: estimated duration of sound, in seconds (>0.0)
+ """
+ start_time = time.monotonic() # Save audio start time
+ play_wav(sound)
+ while True:
+ elapsed = time.monotonic() - start_time # Time spent playing sound
+ if elapsed > duration: # Past sound duration?
+ break # Stop animating
+ comet.animate()
+
+# List of swing wav files without the .wav in the name for use with play_wav()
+swing_sounds = [
+ 'swing1',
+ 'swing2',
+ 'swing3',
+ 'swing4',
+]
+
+# List of hit wav files without the .wav in the name for use with play_wav()
+hit_sounds = [
+ 'hit1',
+ 'hit2',
+ 'hit3',
+ 'hit4',
+]
+
+mode = 0 # Initial mode = OFF
+
+#RGB LED
+red_led = DigitalInOut(board.D11)
+green_led = DigitalInOut(board.D12)
+blue_led = DigitalInOut(board.D13)
+
+red_led.direction = Direction.OUTPUT
+green_led.direction = Direction.OUTPUT
+blue_led.direction = Direction.OUTPUT
+
+blue_led.value = True
+red_led.value = True
+green_led.value = True
+
+# Darksaber start-up before loop
+if mode == 0: # If currently off...
+ enable.value = True
+ power_on('on', POWER_ON_SOUND_DURATION) # Power up!
+ play_wav('idle', loop=True) # Play idle sound now
+ mode = 1 # Idle mode
+
+while True:
+ # begin advertising BLE
+ ble.start_advertising(advertisement)
+ # if no BLE connection...
+ # allows it to be used without the bluefruit app connection
+ while not ble.connected:
+ if mode >= 1: # If not OFF mode...
+ x, y, z = accel.acceleration # Read accelerometer
+ accel_total = x * x + z * z
+ # (Y axis isn't needed, due to the orientation that the Prop-Maker
+ # Wing is mounted. Also, square root isn't needed, since we're
+ # comparing thresholds...use squared values instead.)
+ if accel_total > HIT_THRESHOLD: # Large acceleration = HIT
+ TRIGGER_TIME = time.monotonic() # Save initial time of hit
+ play_wav(random.choice(hit_sounds)) # Start playing 'hit' sound
+ # NeoPixels are solid on with a hit
+ solid.animate()
+ mode = 3 # HIT mode
+ elif mode == 1 and accel_total > SWING_THRESHOLD: # Mild = SWING
+ TRIGGER_TIME = time.monotonic() # Save initial time of swing
+ play_wav(random.choice(swing_sounds)) # Randomly choose from available swing sounds
+ while audio.playing:
+ pass # wait till we're done
+ mode = 2 # we'll go back to idle mode
+ elif mode == 1:
+ # pulse animation when idling or swinging
+ pulse.animate()
+ elif mode > 1: # If in SWING or HIT mode...
+ if audio.playing: # And sound currently playing...
+ blend = time.monotonic() - TRIGGER_TIME # Time since triggered
+ if mode == 2: # If SWING,
+ blend = abs(0.5 - blend) * 2.0 # ramp up, down
+ else: # No sound now, but still SWING or HIT modes
+ play_wav('idle', loop=True) # Resume idle sound
+ mode = 1 # Return to idle mode
+ ble.stop_advertising()
+
+ # if BLE is connected...
+ while ble.connected:
+ # color picker from bluefruit app
+ if uart_service.in_waiting:
+ packet = Packet.from_stream(uart_service)
+ # if a color packet is recieved...
+ if isinstance(packet, ColorPacket):
+ print(packet.color)
+ # color for the different animations are updated
+ comet.color = packet.color
+ solid.color = packet.color
+ pulse.color = packet.color
+ solid.animate()
+ # repeat of the above code
+ if mode >= 1: # If not OFF mode...
+ x, y, z = accel.acceleration # Read accelerometer
+ accel_total = x * x + z * z
+ # (Y axis isn't needed, due to the orientation that the Prop-Maker
+ # Wing is mounted. Also, square root isn't needed, since we're
+ # comparing thresholds...use squared values instead.)
+ if accel_total > HIT_THRESHOLD: # Large acceleration = HIT
+ TRIGGER_TIME = time.monotonic() # Save initial time of hit
+ play_wav(random.choice(hit_sounds)) # Start playing 'hit' sound
+ # NeoPixels are solid on with a hit
+ solid.animate()
+ mode = 3 # HIT mode
+ elif mode == 1 and accel_total > SWING_THRESHOLD: # Mild = SWING
+ TRIGGER_TIME = time.monotonic() # Save initial time of swing
+ play_wav(random.choice(swing_sounds)) # Randomly choose from available swing sounds
+ while audio.playing:
+ pass # wait till we're done
+ mode = 2 # we'll go back to idle mode
+
+ elif mode == 1:
+ # pulse animation when idling or swinging
+ pulse.animate()
+ elif mode > 1: # If in SWING or HIT mode...
+ if audio.playing: # And sound currently playing...
+ blend = time.monotonic() - TRIGGER_TIME # Time since triggered
+ if mode == 2: # If SWING,
+ blend = abs(0.5 - blend) * 2.0 # ramp up, down
+ else: # No sound now, but still SWING or HIT modes
+ play_wav('idle', loop=True) # Resume idle sound
+ mode = 1 # Return to idle mode
diff --git a/Propmaker_Tron_Disk/sounds/hit1.wav b/Propmaker_Tron_Disk/sounds/hit1.wav
new file mode 100755
index 000000000..142d043df
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/hit1.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/hit2.wav b/Propmaker_Tron_Disk/sounds/hit2.wav
new file mode 100755
index 000000000..3929fe607
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/hit2.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/hit3.wav b/Propmaker_Tron_Disk/sounds/hit3.wav
new file mode 100755
index 000000000..bd8da9ad0
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/hit3.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/hit4.wav b/Propmaker_Tron_Disk/sounds/hit4.wav
new file mode 100755
index 000000000..a5eb36d14
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/hit4.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/idle.wav b/Propmaker_Tron_Disk/sounds/idle.wav
new file mode 100755
index 000000000..301548687
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/idle.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/on.wav b/Propmaker_Tron_Disk/sounds/on.wav
new file mode 100755
index 000000000..1d98e14ed
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/on.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/swing1.wav b/Propmaker_Tron_Disk/sounds/swing1.wav
new file mode 100755
index 000000000..aae9e949c
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/swing1.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/swing2.wav b/Propmaker_Tron_Disk/sounds/swing2.wav
new file mode 100755
index 000000000..ac23ace06
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/swing2.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/swing3.wav b/Propmaker_Tron_Disk/sounds/swing3.wav
new file mode 100755
index 000000000..1c901f8fc
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/swing3.wav differ
diff --git a/Propmaker_Tron_Disk/sounds/swing4.wav b/Propmaker_Tron_Disk/sounds/swing4.wav
new file mode 100755
index 000000000..5b9f15df4
Binary files /dev/null and b/Propmaker_Tron_Disk/sounds/swing4.wav differ
diff --git a/Purple_Air_Display/code.py b/Purple_Air_Display/code.py
index 6b1edad30..ef68d009a 100644
--- a/Purple_Air_Display/code.py
+++ b/Purple_Air_Display/code.py
@@ -12,6 +12,13 @@
import terminalio
from adafruit_matrixportal.matrixportal import MatrixPortal
+# Get wifi details and more from a secrets.py file
+try:
+ from secrets import secrets
+except ImportError:
+ print("WiFi secrets are kept in secrets.py, please add them there!")
+ raise
+
def aqi_transform(val):
aqi = pm_to_aqi(val) # derive Air Quality Index from Particulate Matter 2.5 value
return "AQI: %d" % aqi
@@ -32,16 +39,19 @@ def message_transform(val): # picks message based on thresholds
return "Unknown"
SENSOR_ID = 3085 # Poughkeepsie # 30183 LA outdoor / 37823 oregon / 21441 NYC
-SENSOR_REFRESH_PERIOD = 30 # seconds
-DATA_SOURCE = "https://www.purpleair.com/json?show=" + str(SENSOR_ID)
+SENSOR_REFRESH_PERIOD = 300 # seconds
+DATA_SOURCE = f"https://api.purpleair.com/v1/sensors/{SENSOR_ID}?fields=pm2.5_10minute"
SCROLL_DELAY = 0.02
-DATA_LOCATION = ["results", 0, "PM2_5Value"] # navigate the JSON response
+DATA_LOCATION = ["sensor", "stats", "pm2.5_10minute"] # navigate the JSON response
# --- Display setup ---
matrixportal = MatrixPortal(
status_neopixel=board.NEOPIXEL,
debug=True,
url=DATA_SOURCE,
+ headers={"X-API-Key": secrets["purple_air_api_key"], # purpleair.com
+ "Accept": "application/json"
+ },
json_path=(DATA_LOCATION, DATA_LOCATION),
)
diff --git a/PyBadge_Blinka_Jump_Game/code.py b/PyBadge_Blinka_Jump_Game/code.py
index 22f4d6d4b..88fb29f1e 100644
--- a/PyBadge_Blinka_Jump_Game/code.py
+++ b/PyBadge_Blinka_Jump_Game/code.py
@@ -162,7 +162,7 @@
group.append(text_group)
# displaying main display group
-display.show(group)
+display.root_group = group
# state for hit detection
crash = False
diff --git a/PyBadge_Conference_Badge/code.py b/PyBadge_Conference_Badge/code.py
index 358c08047..42f96c674 100755
--- a/PyBadge_Conference_Badge/code.py
+++ b/PyBadge_Conference_Badge/code.py
@@ -65,7 +65,7 @@
# Make the Display Background
splash = displayio.Group()
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
color_bitmap = displayio.Bitmap(160, 128, 1)
color_palette = displayio.Palette(1)
diff --git a/PyGamer_Improved_Thermal_Camera/code.py b/PyGamer_Improved_Thermal_Camera/code.py
index d14feb1d8..166464118 100755
--- a/PyGamer_Improved_Thermal_Camera/code.py
+++ b/PyGamer_Improved_Thermal_Camera/code.py
@@ -81,7 +81,7 @@
splash = displayio.Group(scale=display.width // 160)
bitmap = displayio.OnDiskBitmap("/thermalcamera_splash.bmp")
splash.append(displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader))
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
# Thermal sensor grid axis size; AMG8833 sensor is 8x8
SENSOR_AXIS = 8
@@ -381,7 +381,7 @@ def get_joystick():
orig_min_range_f = 0
# Activate display, show preloaded sample spectrum, and play welcome tone
-display.show(image_group)
+display.root_group = image_group
update_image_frame()
flash_status("IRON", 0.75)
play_tone(880, 0.010) # Musical note A5
diff --git a/PyGamer_NeoPixel_Strip_Control/code.py b/PyGamer_NeoPixel_Strip_Control/code.py
index 979711f4d..bb5e4126b 100755
--- a/PyGamer_NeoPixel_Strip_Control/code.py
+++ b/PyGamer_NeoPixel_Strip_Control/code.py
@@ -82,7 +82,7 @@
cursor = DebouncedCursorManager(mouse_cursor)
# Show splash group
-display.show(splash)
+display.root_group = splash
prev_btn = None
while True:
diff --git a/PyGamer_Thermal_Camera/code.py b/PyGamer_Thermal_Camera/code.py
index 3eb790427..99a340801 100644
--- a/PyGamer_Thermal_Camera/code.py
+++ b/PyGamer_Thermal_Camera/code.py
@@ -27,28 +27,20 @@
else: panel.has_joystick = False # Must be PyBadge
# Establish I2C interface for the AMG8833 Thermal Camera
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
amg8833 = adafruit_amg88xx.AMG88XX(i2c)
# Load the text font from the fonts folder
font = bitmap_font.load_font("/fonts/OpenSans-9.bdf")
# Display splash graphics and play startup tones
-# CircuitPython 6 & 7 compatible
-with open("/thermal_cam_splash.bmp", "rb") as bitmap_file:
- bitmap = displayio.OnDiskBitmap(bitmap_file)
- splash = displayio.Group()
- splash.append(displayio.TileGrid(bitmap,
- pixel_shader=getattr(bitmap, 'pixel_shader', displayio.ColorConverter())))
- board.DISPLAY.show(splash)
- time.sleep(0.1) # Allow the splash to display
-
-# # CircuitPython 7+ compatible
-# splash = displayio.Group()
-# bitmap = displayio.OnDiskBitmap("/thermal_cam_splash.bmp")
-# splash.append(displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader))
-# board.DISPLAY.show(splash)
-# time.sleep(0.1) # Allow the splash to display
+
+splash = displayio.Group()
+bitmap = displayio.OnDiskBitmap("/thermal_cam_splash.bmp")
+splash.append(displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader))
+board.DISPLAY.root_group = splash
+time.sleep(0.1) # Allow the splash to display
panel.play_tone(440, 0.1) # A4
panel.play_tone(880, 0.1) # A5
@@ -345,7 +337,7 @@ def move_buttons(joystick=False): # Read position buttons and joystick
orig_min_range_f = 0
# Activate display and play welcome tone
-board.DISPLAY.show(image_group)
+board.DISPLAY.root_group = image_group
panel.play_tone(880, 0.1) # A5; ready to start looking
###--- PRIMARY PROCESS LOOP ---###
diff --git a/PyLeap_Bluefruit_Light_Meter/code.py b/PyLeap/PyLeap_Bluefruit_Light_Meter/code.py
similarity index 100%
rename from PyLeap_Bluefruit_Light_Meter/code.py
rename to PyLeap/PyLeap_Bluefruit_Light_Meter/code.py
diff --git a/PyLeap_Bluefruit_MP3/beats.mp3 b/PyLeap/PyLeap_Bluefruit_MP3/beats.mp3
similarity index 100%
rename from PyLeap_Bluefruit_MP3/beats.mp3
rename to PyLeap/PyLeap_Bluefruit_MP3/beats.mp3
diff --git a/PyLeap_Bluefruit_MP3/code.py b/PyLeap/PyLeap_Bluefruit_MP3/code.py
similarity index 100%
rename from PyLeap_Bluefruit_MP3/code.py
rename to PyLeap/PyLeap_Bluefruit_MP3/code.py
diff --git a/PyLeap_Bluefruit_MP3/happy.mp3 b/PyLeap/PyLeap_Bluefruit_MP3/happy.mp3
similarity index 100%
rename from PyLeap_Bluefruit_MP3/happy.mp3
rename to PyLeap/PyLeap_Bluefruit_MP3/happy.mp3
diff --git a/PyLeap_Bluefruit_Sound_Meter/code.py b/PyLeap/PyLeap_Bluefruit_Sound_Meter/code.py
similarity index 100%
rename from PyLeap_Bluefruit_Sound_Meter/code.py
rename to PyLeap/PyLeap_Bluefruit_Sound_Meter/code.py
diff --git a/PyLeap_Bluefruit_Tone_Piano/code.py b/PyLeap/PyLeap_Bluefruit_Tone_Piano/code.py
similarity index 100%
rename from PyLeap_Bluefruit_Tone_Piano/code.py
rename to PyLeap/PyLeap_Bluefruit_Tone_Piano/code.py
diff --git a/PyLeap_Bluefruit_Touch_NeoPixel_Rainbow/code.py b/PyLeap/PyLeap_Bluefruit_Touch_NeoPixel_Rainbow/code.py
similarity index 100%
rename from PyLeap_Bluefruit_Touch_NeoPixel_Rainbow/code.py
rename to PyLeap/PyLeap_Bluefruit_Touch_NeoPixel_Rainbow/code.py
diff --git a/PyLeap_Bluefruit_WAV/code.py b/PyLeap/PyLeap_Bluefruit_WAV/code.py
similarity index 100%
rename from PyLeap_Bluefruit_WAV/code.py
rename to PyLeap/PyLeap_Bluefruit_WAV/code.py
diff --git a/PyLeap_Bluefruit_WAV/dip.wav b/PyLeap/PyLeap_Bluefruit_WAV/dip.wav
similarity index 100%
rename from PyLeap_Bluefruit_WAV/dip.wav
rename to PyLeap/PyLeap_Bluefruit_WAV/dip.wav
diff --git a/PyLeap_Bluefruit_WAV/rise.wav b/PyLeap/PyLeap_Bluefruit_WAV/rise.wav
similarity index 100%
rename from PyLeap_Bluefruit_WAV/rise.wav
rename to PyLeap/PyLeap_Bluefruit_WAV/rise.wav
diff --git a/PyLeap_Button_Half_NeoPixel_Control/code.py b/PyLeap/PyLeap_Button_Half_NeoPixel_Control/code.py
similarity index 100%
rename from PyLeap_Button_Half_NeoPixel_Control/code.py
rename to PyLeap/PyLeap_Button_Half_NeoPixel_Control/code.py
diff --git a/PyLeap_CLUE_BLE_NeoPixels/code.py b/PyLeap/PyLeap_CLUE_BLE_NeoPixels/code.py
similarity index 99%
rename from PyLeap_CLUE_BLE_NeoPixels/code.py
rename to PyLeap/PyLeap_CLUE_BLE_NeoPixels/code.py
index a6fcd2860..18be65f09 100644
--- a/PyLeap_CLUE_BLE_NeoPixels/code.py
+++ b/PyLeap/PyLeap_CLUE_BLE_NeoPixels/code.py
@@ -67,7 +67,7 @@
text_area.scale = 2
clue_group.append(text_area)
-display.show(clue_group)
+display.root_group = clue_group
class RainbowFade(Animation):
''' fades the entire strip through the whole spectrum '''
diff --git a/PyLeap_CLUE_Conference_Badge/code.py b/PyLeap/PyLeap_CLUE_Conference_Badge/code.py
similarity index 100%
rename from PyLeap_CLUE_Conference_Badge/code.py
rename to PyLeap/PyLeap_CLUE_Conference_Badge/code.py
diff --git a/PyLeap_CPB_EyeLights_LED_Glasses_RainbowSwirl/code.py b/PyLeap/PyLeap_CPB_EyeLights_LED_Glasses_RainbowSwirl/code.py
similarity index 68%
rename from PyLeap_CPB_EyeLights_LED_Glasses_RainbowSwirl/code.py
rename to PyLeap/PyLeap_CPB_EyeLights_LED_Glasses_RainbowSwirl/code.py
index de1ac3e64..1a0f68876 100755
--- a/PyLeap_CPB_EyeLights_LED_Glasses_RainbowSwirl/code.py
+++ b/PyLeap/PyLeap_CPB_EyeLights_LED_Glasses_RainbowSwirl/code.py
@@ -6,7 +6,9 @@
from adafruit_is31fl3741.adafruit_ledglasses import LED_Glasses
import adafruit_is31fl3741
-glasses = LED_Glasses(board.I2C(), allocate=adafruit_is31fl3741.MUST_BUFFER)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+glasses = LED_Glasses(i2c, allocate=adafruit_is31fl3741.MUST_BUFFER)
wheeloffset = 0
while True:
diff --git a/PyLeap_CPB_EyeLights_LED_Glasses_Sparkle/code.py b/PyLeap/PyLeap_CPB_EyeLights_LED_Glasses_Sparkle/code.py
similarity index 78%
rename from PyLeap_CPB_EyeLights_LED_Glasses_Sparkle/code.py
rename to PyLeap/PyLeap_CPB_EyeLights_LED_Glasses_Sparkle/code.py
index 00af74f09..86d2f02d3 100755
--- a/PyLeap_CPB_EyeLights_LED_Glasses_Sparkle/code.py
+++ b/PyLeap/PyLeap_CPB_EyeLights_LED_Glasses_Sparkle/code.py
@@ -9,7 +9,9 @@
from adafruit_is31fl3741.adafruit_ledglasses import MUST_BUFFER, LED_Glasses
from adafruit_is31fl3741.led_glasses_animation import LED_Glasses_Animation
-glasses = LED_Glasses(board.I2C(), allocate=MUST_BUFFER)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+glasses = LED_Glasses(i2c, allocate=MUST_BUFFER)
glasses.set_led_scaling(255)
glasses.global_current = 0xFE
glasses.enable = True
diff --git a/PyLeap_CPB_NeoPixel_Blinky_demo/code.py b/PyLeap/PyLeap_CPB_NeoPixel_Blinky_demo/code.py
similarity index 100%
rename from PyLeap_CPB_NeoPixel_Blinky_demo/code.py
rename to PyLeap/PyLeap_CPB_NeoPixel_Blinky_demo/code.py
diff --git a/PyLeap_NeoPixel_Blinky_demo/code.py b/PyLeap/PyLeap_NeoPixel_Blinky_demo/code.py
similarity index 100%
rename from PyLeap_NeoPixel_Blinky_demo/code.py
rename to PyLeap/PyLeap_NeoPixel_Blinky_demo/code.py
diff --git a/PyLeap_NeoPixel_demo/code.py b/PyLeap/PyLeap_NeoPixel_demo/code.py
similarity index 100%
rename from PyLeap_NeoPixel_demo/code.py
rename to PyLeap/PyLeap_NeoPixel_demo/code.py
diff --git a/PyLeap/README.md b/PyLeap/README.md
new file mode 100644
index 000000000..c76a525ee
--- /dev/null
+++ b/PyLeap/README.md
@@ -0,0 +1,3 @@
+## PyLeap Projects Repo
+
+This folder contains a collection of projects that are related to PyLeap for iOS and Android.
diff --git a/Dashblock_API/Coin.wav b/PyPortal/Dashblock_API/Coin.wav
similarity index 100%
rename from Dashblock_API/Coin.wav
rename to PyPortal/Dashblock_API/Coin.wav
diff --git a/Dashblock_API/adabot_cover.bmp b/PyPortal/Dashblock_API/adabot_cover.bmp
similarity index 100%
rename from Dashblock_API/adabot_cover.bmp
rename to PyPortal/Dashblock_API/adabot_cover.bmp
diff --git a/Dashblock_API/code.py b/PyPortal/Dashblock_API/code.py
similarity index 100%
rename from Dashblock_API/code.py
rename to PyPortal/Dashblock_API/code.py
diff --git a/Dashblock_API/fonts/Collegiate-24.bdf b/PyPortal/Dashblock_API/fonts/Collegiate-24.bdf
similarity index 100%
rename from Dashblock_API/fonts/Collegiate-24.bdf
rename to PyPortal/Dashblock_API/fonts/Collegiate-24.bdf
diff --git a/Dashblock_API/fonts/Collegiate-50.bdf b/PyPortal/Dashblock_API/fonts/Collegiate-50.bdf
similarity index 100%
rename from Dashblock_API/fonts/Collegiate-50.bdf
rename to PyPortal/Dashblock_API/fonts/Collegiate-50.bdf
diff --git a/Pathfinder/.circuitpython.skip b/PyPortal/Pathfinder/.circuitpython.skip
similarity index 100%
rename from Pathfinder/.circuitpython.skip
rename to PyPortal/Pathfinder/.circuitpython.skip
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_bracket_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_nub_x4.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_nub_x4.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_abdomen_nub_x4.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_nub_x4.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_roller.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_roller.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_abdomen_roller.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_abdomen_roller.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_assembled.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_assembled.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_assembled.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_assembled.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_base_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_base_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_base_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_base_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_cap_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_cap_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_cap_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_cap_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_cup_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_cup_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_cup_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_cup_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_handle_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_handle_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_handle_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_handle_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_socket_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_tab_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_tab_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_tab_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_tab_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_canister_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_canister_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_canister_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_collarbone_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_collarbone_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pin_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_collarbone_pipe_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_cowl_form_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_drawer_front.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_front.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_drawer_front.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_front.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_drawer_front_bar.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_front_bar.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_drawer_front_bar.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_front_bar.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_arm_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_arm_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_arm_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_arm_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_side_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_drawer_support.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_support.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_drawer_support.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_drawer_support.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_C.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_C.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_front_handle_C.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_C.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_front_handle_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_front_handle_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_front_handle_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_handle_nub_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_handle_nub_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_handle_nub_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_handle_nub_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_head.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_head.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_head.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_head.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_lens_hood.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_lens_hood.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_lens_hood.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_lens_hood.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_lens_protector_x2.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_lens_protector_x2.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_lens_protector_x2.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_lens_protector_x2.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_monitor_frame.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_monitor_frame.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_monitor_frame.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_monitor_frame.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_neck.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_neck.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_neck.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_neck.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_pelvis.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_pelvis.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_pelvis.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_pelvis.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_shoulder_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_shoulder_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_R.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket1.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket1.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket1.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_shoulder_socket1.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_torso_back_L.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_torso_back_L.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_torso_back_L.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_torso_back_L.stl
diff --git a/Pathfinder/Pathfinder_STLs/pathfinder_torso_back_R.stl b/PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_torso_back_R.stl
similarity index 100%
rename from Pathfinder/Pathfinder_STLs/pathfinder_torso_back_R.stl
rename to PyPortal/Pathfinder/Pathfinder_STLs/pathfinder_torso_back_R.stl
diff --git a/Pathfinder/emotes/01_love.bmp b/PyPortal/Pathfinder/emotes/01_love.bmp
similarity index 100%
rename from Pathfinder/emotes/01_love.bmp
rename to PyPortal/Pathfinder/emotes/01_love.bmp
diff --git a/Pathfinder/emotes/02_anger.bmp b/PyPortal/Pathfinder/emotes/02_anger.bmp
similarity index 100%
rename from Pathfinder/emotes/02_anger.bmp
rename to PyPortal/Pathfinder/emotes/02_anger.bmp
diff --git a/Pathfinder/emotes/03_KO.bmp b/PyPortal/Pathfinder/emotes/03_KO.bmp
similarity index 100%
rename from Pathfinder/emotes/03_KO.bmp
rename to PyPortal/Pathfinder/emotes/03_KO.bmp
diff --git a/Pathfinder/emotes/04_sad.bmp b/PyPortal/Pathfinder/emotes/04_sad.bmp
similarity index 100%
rename from Pathfinder/emotes/04_sad.bmp
rename to PyPortal/Pathfinder/emotes/04_sad.bmp
diff --git a/Pathfinder/emotes/05_happy.bmp b/PyPortal/Pathfinder/emotes/05_happy.bmp
similarity index 100%
rename from Pathfinder/emotes/05_happy.bmp
rename to PyPortal/Pathfinder/emotes/05_happy.bmp
diff --git a/Pathfinder/emotes/06_bang.bmp b/PyPortal/Pathfinder/emotes/06_bang.bmp
similarity index 100%
rename from Pathfinder/emotes/06_bang.bmp
rename to PyPortal/Pathfinder/emotes/06_bang.bmp
diff --git a/Pathfinder/emotes/07_sick.bmp b/PyPortal/Pathfinder/emotes/07_sick.bmp
similarity index 100%
rename from Pathfinder/emotes/07_sick.bmp
rename to PyPortal/Pathfinder/emotes/07_sick.bmp
diff --git a/Pathfinder/emotes/08_thumbsup.bmp b/PyPortal/Pathfinder/emotes/08_thumbsup.bmp
similarity index 100%
rename from Pathfinder/emotes/08_thumbsup.bmp
rename to PyPortal/Pathfinder/emotes/08_thumbsup.bmp
diff --git a/Pathfinder/emotes/09_question.bmp b/PyPortal/Pathfinder/emotes/09_question.bmp
similarity index 100%
rename from Pathfinder/emotes/09_question.bmp
rename to PyPortal/Pathfinder/emotes/09_question.bmp
diff --git a/Pathfinder/emotes/10_glitch.bmp b/PyPortal/Pathfinder/emotes/10_glitch.bmp
similarity index 100%
rename from Pathfinder/emotes/10_glitch.bmp
rename to PyPortal/Pathfinder/emotes/10_glitch.bmp
diff --git a/Pathfinder/emotes/11_static.bmp b/PyPortal/Pathfinder/emotes/11_static.bmp
similarity index 100%
rename from Pathfinder/emotes/11_static.bmp
rename to PyPortal/Pathfinder/emotes/11_static.bmp
diff --git a/Pathfinder/pathfinder_auto/code.py b/PyPortal/Pathfinder/pathfinder_auto/code.py
similarity index 82%
rename from Pathfinder/pathfinder_auto/code.py
rename to PyPortal/Pathfinder/pathfinder_auto/code.py
index 325ea860a..94b48575d 100755
--- a/Pathfinder/pathfinder_auto/code.py
+++ b/PyPortal/Pathfinder/pathfinder_auto/code.py
@@ -86,7 +86,7 @@
# Add the TileGrid to the Group
group.append(tile_grid)
# Add the Group to the Display
- display.show(group)
+ display.root_group = group
if sound_mode != 0:
# play a sound file
pyportal.play_file(vo_sound[10])
@@ -107,23 +107,12 @@
pixel.show()
time.sleep(1)
- # CircuitPython 6 & 7 compatible
- with open(emote_img[i], "rb") as bitmap_file:
- bitmap = displayio.OnDiskBitmap(bitmap_file)
- tile_grid = displayio.TileGrid(
- bitmap,
- pixel_shader=getattr(bitmap, 'pixel_shader', displayio.ColorConverter())
- )
- group = displayio.Group()
- group.append(tile_grid)
- display.show(group)
-
- # # CircuitPython 7+ compatible
- # bitmap = displayio.OnDiskBitmap(emote_img[i])
- # tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
- # group = displayio.Group()
- # group.append(tile_grid)
- # display.show(group)
+ # CircuitPython 7+ compatible
+ bitmap = displayio.OnDiskBitmap(emote_img[i])
+ tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
+ group = displayio.Group()
+ group.append(tile_grid)
+ display.root_group = group
if sound_mode != 0:
# play a sound file
diff --git a/Pathfinder/pathfinder_touch/code.py b/PyPortal/Pathfinder/pathfinder_touch/code.py
similarity index 81%
rename from Pathfinder/pathfinder_touch/code.py
rename to PyPortal/Pathfinder/pathfinder_touch/code.py
index f58827d1e..7db6fcda1 100755
--- a/Pathfinder/pathfinder_touch/code.py
+++ b/PyPortal/Pathfinder/pathfinder_touch/code.py
@@ -84,7 +84,7 @@
# Add the TileGrid to the Group
group.append(tile_grid)
# Add the Group to the Display
- display.show(group)
+ display.root_group = group
if sound_mode != 0:
# play a sound file
pyportal.play_file(vo_sound[10])
@@ -101,23 +101,12 @@
pixel.show()
time.sleep(1)
- # CircuitPython 6 & 7 compatible
- with open(emote_img[i], "rb") as bitmap_file:
- bitmap = displayio.OnDiskBitmap(bitmap_file)
- tile_grid = displayio.TileGrid(
- bitmap,
- pixel_shader=getattr(bitmap, 'pixel_shader', displayio.ColorConverter())
- )
- group = displayio.Group()
- group.append(tile_grid)
- display.show(group)
-
- # # CircuitPython 7+ compatible
- # bitmap = displayio.OnDiskBitmap(emote_img[i])
- # tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
- # group = displayio.Group()
- # group.append(tile_grid)
- # display.show(group)
+ # CircuitPython 7+ compatible
+ bitmap = displayio.OnDiskBitmap(emote_img[i])
+ tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
+ group = displayio.Group()
+ group.append(tile_grid)
+ display.root_group = group
if sound_mode != 0:
# play a sound file
diff --git a/Pathfinder/vo/pathfnd_45.wav b/PyPortal/Pathfinder/vo/pathfnd_45.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_45.wav
rename to PyPortal/Pathfinder/vo/pathfnd_45.wav
diff --git a/Pathfinder/vo/pathfnd_46.wav b/PyPortal/Pathfinder/vo/pathfnd_46.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_46.wav
rename to PyPortal/Pathfinder/vo/pathfnd_46.wav
diff --git a/Pathfinder/vo/pathfnd_47.wav b/PyPortal/Pathfinder/vo/pathfnd_47.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_47.wav
rename to PyPortal/Pathfinder/vo/pathfnd_47.wav
diff --git a/Pathfinder/vo/pathfnd_48.wav b/PyPortal/Pathfinder/vo/pathfnd_48.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_48.wav
rename to PyPortal/Pathfinder/vo/pathfnd_48.wav
diff --git a/Pathfinder/vo/pathfnd_49.wav b/PyPortal/Pathfinder/vo/pathfnd_49.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_49.wav
rename to PyPortal/Pathfinder/vo/pathfnd_49.wav
diff --git a/Pathfinder/vo/pathfnd_50.wav b/PyPortal/Pathfinder/vo/pathfnd_50.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_50.wav
rename to PyPortal/Pathfinder/vo/pathfnd_50.wav
diff --git a/Pathfinder/vo/pathfnd_51.wav b/PyPortal/Pathfinder/vo/pathfnd_51.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_51.wav
rename to PyPortal/Pathfinder/vo/pathfnd_51.wav
diff --git a/Pathfinder/vo/pathfnd_52.wav b/PyPortal/Pathfinder/vo/pathfnd_52.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_52.wav
rename to PyPortal/Pathfinder/vo/pathfnd_52.wav
diff --git a/Pathfinder/vo/pathfnd_53.wav b/PyPortal/Pathfinder/vo/pathfnd_53.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_53.wav
rename to PyPortal/Pathfinder/vo/pathfnd_53.wav
diff --git a/Pathfinder/vo/pathfnd_54.wav b/PyPortal/Pathfinder/vo/pathfnd_54.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_54.wav
rename to PyPortal/Pathfinder/vo/pathfnd_54.wav
diff --git a/Pathfinder/vo/pathfnd_55.wav b/PyPortal/Pathfinder/vo/pathfnd_55.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_55.wav
rename to PyPortal/Pathfinder/vo/pathfnd_55.wav
diff --git a/Pathfinder/vo/pathfnd_56.wav b/PyPortal/Pathfinder/vo/pathfnd_56.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_56.wav
rename to PyPortal/Pathfinder/vo/pathfnd_56.wav
diff --git a/Pathfinder/vo/pathfnd_silent.wav b/PyPortal/Pathfinder/vo/pathfnd_silent.wav
similarity index 100%
rename from Pathfinder/vo/pathfnd_silent.wav
rename to PyPortal/Pathfinder/vo/pathfnd_silent.wav
diff --git a/PyPortal_AWS_IOT_Planter/.circuitpython.skip b/PyPortal/PyPortal_AWS_IOT_Planter/.circuitpython.skip
similarity index 100%
rename from PyPortal_AWS_IOT_Planter/.circuitpython.skip
rename to PyPortal/PyPortal_AWS_IOT_Planter/.circuitpython.skip
diff --git a/PyPortal_AWS_IOT_Planter/aws_gfx_helper.py b/PyPortal/PyPortal_AWS_IOT_Planter/aws_gfx_helper.py
similarity index 97%
rename from PyPortal_AWS_IOT_Planter/aws_gfx_helper.py
rename to PyPortal/PyPortal_AWS_IOT_Planter/aws_gfx_helper.py
index 8f101a114..ac94561af 100755
--- a/PyPortal_AWS_IOT_Planter/aws_gfx_helper.py
+++ b/PyPortal/PyPortal_AWS_IOT_Planter/aws_gfx_helper.py
@@ -25,7 +25,7 @@ def __init__(self, is_celsius=False):
# root displayio group
root_group = displayio.Group()
self.display = board.DISPLAY
- self.display.show(root_group)
+ self.display.root_group = root_group
super().__init__()
# temperature display option
@@ -33,7 +33,7 @@ def __init__(self, is_celsius=False):
# create background icon group
self._icon_group = displayio.Group()
- self.display.show(self._icon_group)
+ self.display.root_group = self._icon_group
# create text object group
self._text_group = displayio.Group()
@@ -85,7 +85,7 @@ def __init__(self, is_celsius=False):
status_group.append(self.aws_status_label)
self._text_group.append(status_group)
- self.display.show(self._text_group)
+ self.display.root_group = self._text_group
def show_aws_status(self, status_text):
"""Displays the system status on the PyPortal
diff --git a/PyPortal_AWS_IOT_Planter/aws_splash.bmp b/PyPortal/PyPortal_AWS_IOT_Planter/aws_splash.bmp
similarity index 100%
rename from PyPortal_AWS_IOT_Planter/aws_splash.bmp
rename to PyPortal/PyPortal_AWS_IOT_Planter/aws_splash.bmp
diff --git a/PyPortal_AWS_IOT_Planter/code.py b/PyPortal/PyPortal_AWS_IOT_Planter/code.py
similarity index 100%
rename from PyPortal_AWS_IOT_Planter/code.py
rename to PyPortal/PyPortal_AWS_IOT_Planter/code.py
diff --git a/PyPortal_AdafruitIO/adafruitio_background.bmp b/PyPortal/PyPortal_AdafruitIO/adafruitio_background.bmp
similarity index 100%
rename from PyPortal_AdafruitIO/adafruitio_background.bmp
rename to PyPortal/PyPortal_AdafruitIO/adafruitio_background.bmp
diff --git a/PyPortal_AdafruitIO/code.py b/PyPortal/PyPortal_AdafruitIO/code.py
similarity index 100%
rename from PyPortal_AdafruitIO/code.py
rename to PyPortal/PyPortal_AdafruitIO/code.py
diff --git a/PyPortal_AdafruitIO/fonts/Collegiate-24.bdf b/PyPortal/PyPortal_AdafruitIO/fonts/Collegiate-24.bdf
similarity index 100%
rename from PyPortal_AdafruitIO/fonts/Collegiate-24.bdf
rename to PyPortal/PyPortal_AdafruitIO/fonts/Collegiate-24.bdf
diff --git a/PyPortal_AdafruitIO_Logger/code.py b/PyPortal/PyPortal_AdafruitIO_Logger/code.py
similarity index 100%
rename from PyPortal_AdafruitIO_Logger/code.py
rename to PyPortal/PyPortal_AdafruitIO_Logger/code.py
diff --git a/PyPortal_AirQuality/code.py b/PyPortal/PyPortal_AirQuality/code.py
similarity index 100%
rename from PyPortal_AirQuality/code.py
rename to PyPortal/PyPortal_AirQuality/code.py
diff --git a/PyPortal_AirQuality/fonts/Helvetica-Bold-100.bdf b/PyPortal/PyPortal_AirQuality/fonts/Helvetica-Bold-100.bdf
similarity index 100%
rename from PyPortal_AirQuality/fonts/Helvetica-Bold-100.bdf
rename to PyPortal/PyPortal_AirQuality/fonts/Helvetica-Bold-100.bdf
diff --git a/PyPortal_AirQuality/fonts/HelveticaNeue-24.bdf b/PyPortal/PyPortal_AirQuality/fonts/HelveticaNeue-24.bdf
similarity index 100%
rename from PyPortal_AirQuality/fonts/HelveticaNeue-24.bdf
rename to PyPortal/PyPortal_AirQuality/fonts/HelveticaNeue-24.bdf
diff --git a/PyPortal_Alarm_Clock/.circuitpython.skip b/PyPortal/PyPortal_Alarm_Clock/.circuitpython.skip
similarity index 100%
rename from PyPortal_Alarm_Clock/.circuitpython.skip
rename to PyPortal/PyPortal_Alarm_Clock/.circuitpython.skip
diff --git a/PyPortal_Alarm_Clock/alarm.wav b/PyPortal/PyPortal_Alarm_Clock/alarm.wav
similarity index 100%
rename from PyPortal_Alarm_Clock/alarm.wav
rename to PyPortal/PyPortal_Alarm_Clock/alarm.wav
diff --git a/PyPortal_Alarm_Clock/code.py b/PyPortal/PyPortal_Alarm_Clock/code.py
similarity index 100%
rename from PyPortal_Alarm_Clock/code.py
rename to PyPortal/PyPortal_Alarm_Clock/code.py
diff --git a/PyPortal_Alarm_Clock/computer-alert20.wav b/PyPortal/PyPortal_Alarm_Clock/computer-alert20.wav
similarity index 100%
rename from PyPortal_Alarm_Clock/computer-alert20.wav
rename to PyPortal/PyPortal_Alarm_Clock/computer-alert20.wav
diff --git a/PyPortal_Alarm_Clock/fonts/Anton-Regular-104.bdf b/PyPortal/PyPortal_Alarm_Clock/fonts/Anton-Regular-104.bdf
similarity index 100%
rename from PyPortal_Alarm_Clock/fonts/Anton-Regular-104.bdf
rename to PyPortal/PyPortal_Alarm_Clock/fonts/Anton-Regular-104.bdf
diff --git a/PyPortal_Alarm_Clock/fonts/Arial-16.bdf b/PyPortal/PyPortal_Alarm_Clock/fonts/Arial-16.bdf
similarity index 100%
rename from PyPortal_Alarm_Clock/fonts/Arial-16.bdf
rename to PyPortal/PyPortal_Alarm_Clock/fonts/Arial-16.bdf
diff --git a/PyPortal_Alarm_Clock/fonts/Helvetica-Bold-36.bdf b/PyPortal/PyPortal_Alarm_Clock/fonts/Helvetica-Bold-36.bdf
similarity index 100%
rename from PyPortal_Alarm_Clock/fonts/Helvetica-Bold-36.bdf
rename to PyPortal/PyPortal_Alarm_Clock/fonts/Helvetica-Bold-36.bdf
diff --git a/PyPortal_Alarm_Clock/icons/01d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/01d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/01d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/01d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/01n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/01n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/01n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/01n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/02d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/02d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/02d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/02d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/02n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/02n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/02n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/02n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/03d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/03d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/03d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/03d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/03n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/03n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/03n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/03n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/04d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/04d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/04d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/04d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/04n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/04n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/04n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/04n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/09d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/09d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/09d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/09d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/09n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/09n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/09n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/09n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/10d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/10d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/10d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/10d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/10n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/10n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/10n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/10n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/11d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/11d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/11d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/11d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/11n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/11n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/11n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/11n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/13d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/13d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/13d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/13d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/13n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/13n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/13n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/13n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/50d.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/50d.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/50d.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/50d.bmp
diff --git a/PyPortal_Alarm_Clock/icons/50n.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/50n.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/50n.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/50n.bmp
diff --git a/PyPortal_Alarm_Clock/icons/zzz.bmp b/PyPortal/PyPortal_Alarm_Clock/icons/zzz.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/icons/zzz.bmp
rename to PyPortal/PyPortal_Alarm_Clock/icons/zzz.bmp
diff --git a/PyPortal_Alarm_Clock/main_background_day.bmp b/PyPortal/PyPortal_Alarm_Clock/main_background_day.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/main_background_day.bmp
rename to PyPortal/PyPortal_Alarm_Clock/main_background_day.bmp
diff --git a/PyPortal_Alarm_Clock/main_background_night.bmp b/PyPortal/PyPortal_Alarm_Clock/main_background_night.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/main_background_night.bmp
rename to PyPortal/PyPortal_Alarm_Clock/main_background_night.bmp
diff --git a/PyPortal_Alarm_Clock/mugsy_background.bmp b/PyPortal/PyPortal_Alarm_Clock/mugsy_background.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/mugsy_background.bmp
rename to PyPortal/PyPortal_Alarm_Clock/mugsy_background.bmp
diff --git a/PyPortal_Alarm_Clock/red_alert.bmp b/PyPortal/PyPortal_Alarm_Clock/red_alert.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/red_alert.bmp
rename to PyPortal/PyPortal_Alarm_Clock/red_alert.bmp
diff --git a/PyPortal_Alarm_Clock/settings_background.bmp b/PyPortal/PyPortal_Alarm_Clock/settings_background.bmp
similarity index 100%
rename from PyPortal_Alarm_Clock/settings_background.bmp
rename to PyPortal/PyPortal_Alarm_Clock/settings_background.bmp
diff --git a/PyPortal_ArduinoSelfTest/.pyportal.test.only b/PyPortal/PyPortal_ArduinoSelfTest/.pyportal.test.only
similarity index 100%
rename from PyPortal_ArduinoSelfTest/.pyportal.test.only
rename to PyPortal/PyPortal_ArduinoSelfTest/.pyportal.test.only
diff --git a/PyPortal_ArduinoSelfTest/PyPortal_ArduinoSelfTest.ino b/PyPortal/PyPortal_ArduinoSelfTest/PyPortal_ArduinoSelfTest.ino
similarity index 100%
rename from PyPortal_ArduinoSelfTest/PyPortal_ArduinoSelfTest.ino
rename to PyPortal/PyPortal_ArduinoSelfTest/PyPortal_ArduinoSelfTest.ino
diff --git a/PyPortal_ArduinoSelfTest/coin.h b/PyPortal/PyPortal_ArduinoSelfTest/coin.h
similarity index 100%
rename from PyPortal_ArduinoSelfTest/coin.h
rename to PyPortal/PyPortal_ArduinoSelfTest/coin.h
diff --git a/PyPortal_Astronauts/astronauts_background.bmp b/PyPortal/PyPortal_Astronauts/astronauts_background.bmp
similarity index 100%
rename from PyPortal_Astronauts/astronauts_background.bmp
rename to PyPortal/PyPortal_Astronauts/astronauts_background.bmp
diff --git a/PyPortal_Astronauts/code.py b/PyPortal/PyPortal_Astronauts/code.py
similarity index 100%
rename from PyPortal_Astronauts/code.py
rename to PyPortal/PyPortal_Astronauts/code.py
diff --git a/PyPortal_Astronauts/fonts/Helvetica-Bold-100.bdf b/PyPortal/PyPortal_Astronauts/fonts/Helvetica-Bold-100.bdf
similarity index 100%
rename from PyPortal_Astronauts/fonts/Helvetica-Bold-100.bdf
rename to PyPortal/PyPortal_Astronauts/fonts/Helvetica-Bold-100.bdf
diff --git a/PyPortal_Astronauts/fonts/Helvetica-Bold-16.bdf b/PyPortal/PyPortal_Astronauts/fonts/Helvetica-Bold-16.bdf
similarity index 100%
rename from PyPortal_Astronauts/fonts/Helvetica-Bold-16.bdf
rename to PyPortal/PyPortal_Astronauts/fonts/Helvetica-Bold-16.bdf
diff --git a/PyPortal_Azure_Plant_Monitor/azure_gfx_helper.py b/PyPortal/PyPortal_Azure_Plant_Monitor/azure_gfx_helper.py
similarity index 97%
rename from PyPortal_Azure_Plant_Monitor/azure_gfx_helper.py
rename to PyPortal/PyPortal_Azure_Plant_Monitor/azure_gfx_helper.py
index 1c0f70337..1ca97732a 100755
--- a/PyPortal_Azure_Plant_Monitor/azure_gfx_helper.py
+++ b/PyPortal/PyPortal_Azure_Plant_Monitor/azure_gfx_helper.py
@@ -25,7 +25,7 @@ def __init__(self, is_celsius):
"""
# root displayio group
root_group = displayio.Group()
- board.DISPLAY.show(root_group)
+ board.DISPLAY.root_group = root_group
super().__init__()
# temperature display option
@@ -33,7 +33,7 @@ def __init__(self, is_celsius):
# create background icon group
self._icon_group = displayio.Group()
- board.DISPLAY.show(self._icon_group)
+ board.DISPLAY.root_group = self._icon_group
# create text object group
self._text_group = displayio.Group()
@@ -83,7 +83,7 @@ def __init__(self, is_celsius):
self._text_group.append(self.azure_status_text)
def show_text(self):
- board.DISPLAY.show(self._text_group)
+ board.DISPLAY.root_group = self._text_group
def display_azure_status(self, status_text):
"""Displays the system status on the PyPortal
diff --git a/PyPortal_Azure_Plant_Monitor/code.py b/PyPortal/PyPortal_Azure_Plant_Monitor/code.py
similarity index 100%
rename from PyPortal_Azure_Plant_Monitor/code.py
rename to PyPortal/PyPortal_Azure_Plant_Monitor/code.py
diff --git a/PyPortal_Azure_Plant_Monitor/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_Azure_Plant_Monitor/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_Azure_Plant_Monitor/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_Azure_Plant_Monitor/fonts/Collegiate-50.bdf
diff --git a/PyPortal_Azure_Plant_Monitor/fonts/EarthHeart-26.bdf b/PyPortal/PyPortal_Azure_Plant_Monitor/fonts/EarthHeart-26.bdf
similarity index 100%
rename from PyPortal_Azure_Plant_Monitor/fonts/EarthHeart-26.bdf
rename to PyPortal/PyPortal_Azure_Plant_Monitor/fonts/EarthHeart-26.bdf
diff --git a/PyPortal_Azure_Plant_Monitor/images/azure_splash.bmp b/PyPortal/PyPortal_Azure_Plant_Monitor/images/azure_splash.bmp
similarity index 100%
rename from PyPortal_Azure_Plant_Monitor/images/azure_splash.bmp
rename to PyPortal/PyPortal_Azure_Plant_Monitor/images/azure_splash.bmp
diff --git a/PyPortal_Bitcoin/bitcoin/code.py b/PyPortal/PyPortal_Bitcoin/bitcoin/code.py
similarity index 100%
rename from PyPortal_Bitcoin/bitcoin/code.py
rename to PyPortal/PyPortal_Bitcoin/bitcoin/code.py
diff --git a/PyPortal_Bitcoin/bitcoin_2/code.py b/PyPortal/PyPortal_Bitcoin/bitcoin_2/code.py
similarity index 100%
rename from PyPortal_Bitcoin/bitcoin_2/code.py
rename to PyPortal/PyPortal_Bitcoin/bitcoin_2/code.py
diff --git a/PyPortal_Bitcoin/bitcoin_background.bmp b/PyPortal/PyPortal_Bitcoin/bitcoin_background.bmp
similarity index 100%
rename from PyPortal_Bitcoin/bitcoin_background.bmp
rename to PyPortal/PyPortal_Bitcoin/bitcoin_background.bmp
diff --git a/PyPortal_Bitcoin/fonts/Arial-Bold-24-Complete.bdf b/PyPortal/PyPortal_Bitcoin/fonts/Arial-Bold-24-Complete.bdf
similarity index 100%
rename from PyPortal_Bitcoin/fonts/Arial-Bold-24-Complete.bdf
rename to PyPortal/PyPortal_Bitcoin/fonts/Arial-Bold-24-Complete.bdf
diff --git a/PyPortal_Bitcoin/fonts/Arial-BoldItalic-12-Complete.bdf b/PyPortal/PyPortal_Bitcoin/fonts/Arial-BoldItalic-12-Complete.bdf
similarity index 100%
rename from PyPortal_Bitcoin/fonts/Arial-BoldItalic-12-Complete.bdf
rename to PyPortal/PyPortal_Bitcoin/fonts/Arial-BoldItalic-12-Complete.bdf
diff --git a/PyPortal_BusySimulator/busysim_background.bmp b/PyPortal/PyPortal_BusySimulator/busysim_background.bmp
similarity index 100%
rename from PyPortal_BusySimulator/busysim_background.bmp
rename to PyPortal/PyPortal_BusySimulator/busysim_background.bmp
diff --git a/PyPortal_BusySimulator/code.py b/PyPortal/PyPortal_BusySimulator/code.py
similarity index 99%
rename from PyPortal_BusySimulator/code.py
rename to PyPortal/PyPortal_BusySimulator/code.py
index a6926ffec..25501cbdf 100644
--- a/PyPortal_BusySimulator/code.py
+++ b/PyPortal/PyPortal_BusySimulator/code.py
@@ -67,7 +67,7 @@ def next_index():
# Make the display context.
display = board.DISPLAY
main_group = displayio.Group()
-display.show(main_group)
+display.root_group = main_group
# Touchscreen initialization
ts = adafruit_touchscreen.Touchscreen(
diff --git a/PyPortal_BusySimulator/icons/applemail.bmp b/PyPortal/PyPortal_BusySimulator/icons/applemail.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/applemail.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/applemail.bmp
diff --git a/PyPortal_BusySimulator/icons/discord.bmp b/PyPortal/PyPortal_BusySimulator/icons/discord.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/discord.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/discord.bmp
diff --git a/PyPortal_BusySimulator/icons/gcal.bmp b/PyPortal/PyPortal_BusySimulator/icons/gcal.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/gcal.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/gcal.bmp
diff --git a/PyPortal_BusySimulator/icons/gchat.bmp b/PyPortal/PyPortal_BusySimulator/icons/gchat.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/gchat.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/gchat.bmp
diff --git a/PyPortal_BusySimulator/icons/imessage.bmp b/PyPortal/PyPortal_BusySimulator/icons/imessage.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/imessage.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/imessage.bmp
diff --git a/PyPortal_BusySimulator/icons/outlook.bmp b/PyPortal/PyPortal_BusySimulator/icons/outlook.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/outlook.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/outlook.bmp
diff --git a/PyPortal_BusySimulator/icons/phone.bmp b/PyPortal/PyPortal_BusySimulator/icons/phone.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/phone.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/phone.bmp
diff --git a/PyPortal_BusySimulator/icons/skype.bmp b/PyPortal/PyPortal_BusySimulator/icons/skype.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/skype.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/skype.bmp
diff --git a/PyPortal_BusySimulator/icons/slack.bmp b/PyPortal/PyPortal_BusySimulator/icons/slack.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/slack.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/slack.bmp
diff --git a/PyPortal_BusySimulator/icons/stop.bmp b/PyPortal/PyPortal_BusySimulator/icons/stop.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/stop.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/stop.bmp
diff --git a/PyPortal_BusySimulator/icons/teams.bmp b/PyPortal/PyPortal_BusySimulator/icons/teams.bmp
similarity index 100%
rename from PyPortal_BusySimulator/icons/teams.bmp
rename to PyPortal/PyPortal_BusySimulator/icons/teams.bmp
diff --git a/PyPortal_BusySimulator/sounds/RE.wav b/PyPortal/PyPortal_BusySimulator/sounds/RE.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/RE.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/RE.wav
diff --git a/PyPortal_BusySimulator/sounds/applemail.wav b/PyPortal/PyPortal_BusySimulator/sounds/applemail.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/applemail.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/applemail.wav
diff --git a/PyPortal_BusySimulator/sounds/discord.wav b/PyPortal/PyPortal_BusySimulator/sounds/discord.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/discord.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/discord.wav
diff --git a/PyPortal_BusySimulator/sounds/gchat.wav b/PyPortal/PyPortal_BusySimulator/sounds/gchat.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/gchat.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/gchat.wav
diff --git a/PyPortal_BusySimulator/sounds/imessage.wav b/PyPortal/PyPortal_BusySimulator/sounds/imessage.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/imessage.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/imessage.wav
diff --git a/PyPortal_BusySimulator/sounds/imessage_r.wav b/PyPortal/PyPortal_BusySimulator/sounds/imessage_r.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/imessage_r.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/imessage_r.wav
diff --git a/PyPortal_BusySimulator/sounds/outlook.wav b/PyPortal/PyPortal_BusySimulator/sounds/outlook.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/outlook.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/outlook.wav
diff --git a/PyPortal_BusySimulator/sounds/phone.wav b/PyPortal/PyPortal_BusySimulator/sounds/phone.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/phone.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/phone.wav
diff --git a/PyPortal_BusySimulator/sounds/skype.wav b/PyPortal/PyPortal_BusySimulator/sounds/skype.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/skype.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/skype.wav
diff --git a/PyPortal_BusySimulator/sounds/slack.wav b/PyPortal/PyPortal_BusySimulator/sounds/slack.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/slack.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/slack.wav
diff --git a/PyPortal_BusySimulator/sounds/teams.wav b/PyPortal/PyPortal_BusySimulator/sounds/teams.wav
similarity index 100%
rename from PyPortal_BusySimulator/sounds/teams.wav
rename to PyPortal/PyPortal_BusySimulator/sounds/teams.wav
diff --git a/PyPortal_CMA_Art_Frame/background.bmp b/PyPortal/PyPortal_CMA_Art_Frame/background.bmp
similarity index 100%
rename from PyPortal_CMA_Art_Frame/background.bmp
rename to PyPortal/PyPortal_CMA_Art_Frame/background.bmp
diff --git a/PyPortal_CMA_Art_Frame/background_480.bmp b/PyPortal/PyPortal_CMA_Art_Frame/background_480.bmp
similarity index 100%
rename from PyPortal_CMA_Art_Frame/background_480.bmp
rename to PyPortal/PyPortal_CMA_Art_Frame/background_480.bmp
diff --git a/PyPortal_CMA_Art_Frame/code.py b/PyPortal/PyPortal_CMA_Art_Frame/code.py
similarity index 100%
rename from PyPortal_CMA_Art_Frame/code.py
rename to PyPortal/PyPortal_CMA_Art_Frame/code.py
diff --git a/PyPortal_CMA_Art_Frame/fonts/OpenSans-9.bdf b/PyPortal/PyPortal_CMA_Art_Frame/fonts/OpenSans-9.bdf
similarity index 100%
rename from PyPortal_CMA_Art_Frame/fonts/OpenSans-9.bdf
rename to PyPortal/PyPortal_CMA_Art_Frame/fonts/OpenSans-9.bdf
diff --git a/PyPortal_CMA_Art_Frame/secrets.py b/PyPortal/PyPortal_CMA_Art_Frame/secrets.py
similarity index 100%
rename from PyPortal_CMA_Art_Frame/secrets.py
rename to PyPortal/PyPortal_CMA_Art_Frame/secrets.py
diff --git a/PyPortal_CMA_Art_Frame/unsafe_boot.py b/PyPortal/PyPortal_CMA_Art_Frame/unsafe_boot.py
similarity index 100%
rename from PyPortal_CMA_Art_Frame/unsafe_boot.py
rename to PyPortal/PyPortal_CMA_Art_Frame/unsafe_boot.py
diff --git a/PyPortal_Calculator/calculator.py b/PyPortal/PyPortal_Calculator/calculator.py
similarity index 100%
rename from PyPortal_Calculator/calculator.py
rename to PyPortal/PyPortal_Calculator/calculator.py
diff --git a/PyPortal_Calculator/code.py b/PyPortal/PyPortal_Calculator/code.py
similarity index 99%
rename from PyPortal_Calculator/code.py
rename to PyPortal/PyPortal_Calculator/code.py
index 1e1877b03..68324b919 100755
--- a/PyPortal_Calculator/code.py
+++ b/PyPortal/PyPortal_Calculator/code.py
@@ -35,7 +35,7 @@
# Make the display context
calc_group = displayio.Group()
-board.DISPLAY.show(calc_group)
+board.DISPLAY.root_group = calc_group
# Make a background color fill
color_bitmap = displayio.Bitmap(320, 240, 1)
diff --git a/PyPortal_Calculator/fonts/Arial-12.bdf b/PyPortal/PyPortal_Calculator/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Calculator/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Calculator/fonts/Arial-12.bdf
diff --git a/PyPortal_Calculator/fonts/Arial-Bold-24.bdf b/PyPortal/PyPortal_Calculator/fonts/Arial-Bold-24.bdf
similarity index 100%
rename from PyPortal_Calculator/fonts/Arial-Bold-24.bdf
rename to PyPortal/PyPortal_Calculator/fonts/Arial-Bold-24.bdf
diff --git a/PyPortal_Calculator/titano_code.py b/PyPortal/PyPortal_Calculator/titano_code.py
similarity index 99%
rename from PyPortal_Calculator/titano_code.py
rename to PyPortal/PyPortal_Calculator/titano_code.py
index 9ae0c59fa..a1d17cde7 100644
--- a/PyPortal_Calculator/titano_code.py
+++ b/PyPortal/PyPortal_Calculator/titano_code.py
@@ -38,7 +38,7 @@
# Make the display context
calc_group = displayio.Group()
-board.DISPLAY.show(calc_group)
+board.DISPLAY.root_group = calc_group
# Make a background color fill
color_bitmap = displayio.Bitmap(SCREEN_WIDTH, SCREEN_HEIGHT, 1)
diff --git a/PyPortal_Case/source/PyPortal_Case.f3d b/PyPortal/PyPortal_Case/source/PyPortal_Case.f3d
similarity index 100%
rename from PyPortal_Case/source/PyPortal_Case.f3d
rename to PyPortal/PyPortal_Case/source/PyPortal_Case.f3d
diff --git a/PyPortal_Case/source/PyPortal_Case.step b/PyPortal/PyPortal_Case/source/PyPortal_Case.step
similarity index 100%
rename from PyPortal_Case/source/PyPortal_Case.step
rename to PyPortal/PyPortal_Case/source/PyPortal_Case.step
diff --git a/PyPortal_Case/stls/pyp-back.stl b/PyPortal/PyPortal_Case/stls/pyp-back.stl
similarity index 100%
rename from PyPortal_Case/stls/pyp-back.stl
rename to PyPortal/PyPortal_Case/stls/pyp-back.stl
diff --git a/PyPortal_Case/stls/pyp-box.stl b/PyPortal/PyPortal_Case/stls/pyp-box.stl
similarity index 100%
rename from PyPortal_Case/stls/pyp-box.stl
rename to PyPortal/PyPortal_Case/stls/pyp-box.stl
diff --git a/PyPortal_Case/stls/pyp-bracket.stl b/PyPortal/PyPortal_Case/stls/pyp-bracket.stl
similarity index 100%
rename from PyPortal_Case/stls/pyp-bracket.stl
rename to PyPortal/PyPortal_Case/stls/pyp-bracket.stl
diff --git a/PyPortal_Case/stls/pyp-keyPlate.stl b/PyPortal/PyPortal_Case/stls/pyp-keyPlate.stl
similarity index 100%
rename from PyPortal_Case/stls/pyp-keyPlate.stl
rename to PyPortal/PyPortal_Case/stls/pyp-keyPlate.stl
diff --git a/PyPortal_Case/stls/pyp-top-blank.stl b/PyPortal/PyPortal_Case/stls/pyp-top-blank.stl
similarity index 100%
rename from PyPortal_Case/stls/pyp-top-blank.stl
rename to PyPortal/PyPortal_Case/stls/pyp-top-blank.stl
diff --git a/PyPortal_Case/stls/pyp-tube-plate.stl b/PyPortal/PyPortal_Case/stls/pyp-tube-plate.stl
similarity index 100%
rename from PyPortal_Case/stls/pyp-tube-plate.stl
rename to PyPortal/PyPortal_Case/stls/pyp-tube-plate.stl
diff --git a/PyPortal_Case/stls/tripod-base.stl b/PyPortal/PyPortal_Case/stls/tripod-base.stl
similarity index 100%
rename from PyPortal_Case/stls/tripod-base.stl
rename to PyPortal/PyPortal_Case/stls/tripod-base.stl
diff --git a/PyPortal_Case/stls/tripod-hinge-a.stl b/PyPortal/PyPortal_Case/stls/tripod-hinge-a.stl
similarity index 100%
rename from PyPortal_Case/stls/tripod-hinge-a.stl
rename to PyPortal/PyPortal_Case/stls/tripod-hinge-a.stl
diff --git a/PyPortal_Case/stls/tripod-hinge-b.stl b/PyPortal/PyPortal_Case/stls/tripod-hinge-b.stl
similarity index 100%
rename from PyPortal_Case/stls/tripod-hinge-b.stl
rename to PyPortal/PyPortal_Case/stls/tripod-hinge-b.stl
diff --git a/PyPortal_CircuitPython_2020/circuitpython_day_countdown_background.bmp b/PyPortal/PyPortal_CircuitPython_2020/circuitpython_day_countdown_background.bmp
similarity index 100%
rename from PyPortal_CircuitPython_2020/circuitpython_day_countdown_background.bmp
rename to PyPortal/PyPortal_CircuitPython_2020/circuitpython_day_countdown_background.bmp
diff --git a/PyPortal_CircuitPython_2020/code.py b/PyPortal/PyPortal_CircuitPython_2020/code.py
similarity index 100%
rename from PyPortal_CircuitPython_2020/code.py
rename to PyPortal/PyPortal_CircuitPython_2020/code.py
diff --git a/PyPortal_CircuitPython_2020/countdown_event.bmp b/PyPortal/PyPortal_CircuitPython_2020/countdown_event.bmp
similarity index 100%
rename from PyPortal_CircuitPython_2020/countdown_event.bmp
rename to PyPortal/PyPortal_CircuitPython_2020/countdown_event.bmp
diff --git a/PyPortal_CircuitPython_2020/fonts/Helvetica-Bold-36.bdf b/PyPortal/PyPortal_CircuitPython_2020/fonts/Helvetica-Bold-36.bdf
similarity index 100%
rename from PyPortal_CircuitPython_2020/fonts/Helvetica-Bold-36.bdf
rename to PyPortal/PyPortal_CircuitPython_2020/fonts/Helvetica-Bold-36.bdf
diff --git a/PyPortal_Cutefuzz/code.py b/PyPortal/PyPortal_Cutefuzz/code.py
similarity index 100%
rename from PyPortal_Cutefuzz/code.py
rename to PyPortal/PyPortal_Cutefuzz/code.py
diff --git a/PyPortal_Cutefuzz/cute_background.bmp b/PyPortal/PyPortal_Cutefuzz/cute_background.bmp
similarity index 100%
rename from PyPortal_Cutefuzz/cute_background.bmp
rename to PyPortal/PyPortal_Cutefuzz/cute_background.bmp
diff --git a/PyPortal_Cutefuzz/unsafe_boot.py b/PyPortal/PyPortal_Cutefuzz/unsafe_boot.py
similarity index 100%
rename from PyPortal_Cutefuzz/unsafe_boot.py
rename to PyPortal/PyPortal_Cutefuzz/unsafe_boot.py
diff --git a/PyPortal_Discord/code.py b/PyPortal/PyPortal_Discord/code.py
similarity index 100%
rename from PyPortal_Discord/code.py
rename to PyPortal/PyPortal_Discord/code.py
diff --git a/PyPortal_Discord/discord_background.bmp b/PyPortal/PyPortal_Discord/discord_background.bmp
similarity index 100%
rename from PyPortal_Discord/discord_background.bmp
rename to PyPortal/PyPortal_Discord/discord_background.bmp
diff --git a/PyPortal_Discord/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_Discord/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_Discord/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_Discord/fonts/Collegiate-50.bdf
diff --git a/PyPortal_EZ_Make_Oven/.circuitpython.skip b/PyPortal/PyPortal_EZ_Make_Oven/.circuitpython.skip
similarity index 100%
rename from PyPortal_EZ_Make_Oven/.circuitpython.skip
rename to PyPortal/PyPortal_EZ_Make_Oven/.circuitpython.skip
diff --git a/PyPortal_EZ_Make_Oven/README.md b/PyPortal/PyPortal_EZ_Make_Oven/README.md
similarity index 100%
rename from PyPortal_EZ_Make_Oven/README.md
rename to PyPortal/PyPortal_EZ_Make_Oven/README.md
diff --git a/PyPortal_EZ_Make_Oven/code.py b/PyPortal/PyPortal_EZ_Make_Oven/code.py
similarity index 60%
rename from PyPortal_EZ_Make_Oven/code.py
rename to PyPortal/PyPortal_EZ_Make_Oven/code.py
index 6f7048fa0..e370ea3db 100644
--- a/PyPortal_EZ_Make_Oven/code.py
+++ b/PyPortal/PyPortal_EZ_Make_Oven/code.py
@@ -13,6 +13,7 @@
import audiocore
import displayio
import digitalio
+import os
from adafruit_bitmap_font import bitmap_font
from adafruit_display_text import bitmap_label as label
from adafruit_display_shapes.circle import Circle
@@ -21,14 +22,11 @@
from adafruit_mcp9600 import MCP9600
TITLE = "EZ Make Oven Controller"
-VERSION = "1.3.2"
+VERSION = "1.3.3"
print(TITLE, "version ", VERSION)
time.sleep(2)
-display_group = displayio.Group()
-board.DISPLAY.show(display_group)
-
PROFILE_SIZE = 2 # plot thickness
GRID_SIZE = 2
GRID_STYLE = 3
@@ -63,11 +61,6 @@
GYSTART = 80
GWIDTH = WIDTH - GXSTART
GHEIGHT = HEIGHT - GYSTART
-plot = displayio.Bitmap(GWIDTH, GHEIGHT, 4)
-
-display_group.append(
- displayio.TileGrid(plot, pixel_shader=palette, x=GXSTART, y=GYSTART)
-)
ts = adafruit_touchscreen.Touchscreen(
board.TOUCH_XL,
@@ -128,6 +121,8 @@ def refresh(self):
class ReflowOvenControl(object):
+ global message, timediff, sgraph, timer_data
+
states = ("wait", "ready", "start", "preheat", "soak", "reflow", "cool")
def __init__(self, pin):
@@ -372,6 +367,8 @@ def draw_point(self, x, y, size=PROFILE_SIZE, color=1):
def draw_profile(graph, profile):
+ global label_reflow
+
"""Update the display with current info."""
for i in range(GWIDTH * GHEIGHT):
plot[i] = 0
@@ -541,182 +538,352 @@ def format_time(seconds):
return "{:02d}:{:02d}".format(minutes, seconds, width=2)
-timediff = 0
-oven = ReflowOvenControl(board.D4)
-print("melting point: ", oven.sprofile["melting_point"])
-font1 = bitmap_font.load_font("/fonts/OpenSans-9.bdf")
+def check_buttons_press_location(p, button_details):
+ """
+ Function to easily check a button press within a list of Buttons
+ """
+ for button in button_details:
+ if button.contains(p):
+ return button
+ return None
-font2 = bitmap_font.load_font("/fonts/OpenSans-12.bdf")
-font3 = bitmap_font.load_font("/fonts/OpenSans-16.bdf")
+def change_profile(oven):
+ """
+ Function added to render the available profile selections to screen and then load into memory
-label_reflow = label.Label(font1, text="", color=0xFFFFFF, line_spacing=0)
-label_reflow.x = 0
-label_reflow.y = -20
-display_group.append(label_reflow)
-title_label = label.Label(font3, text=TITLE)
-title_label.x = 5
-title_label.y = 14
-display_group.append(title_label)
-# version_label = label.Label(font1, text=VERSION, color=0xAAAAAA)
-# version_label.x = 300
-# version_label.y = 40
-# display_group.append(version_label)
-message = label.Label(font2, text="Wait")
-message.x = 100
-message.y = 40
-display_group.append(message)
-alloy_label = label.Label(font1, text="Alloy:", color=0xAAAAAA)
-alloy_label.x = 5
-alloy_label.y = 40
-display_group.append(alloy_label)
-alloy_data = label.Label(font1, text=str(oven.sprofile["alloy"]))
-alloy_data.x = 10
-alloy_data.y = 60
-display_group.append(alloy_data)
-profile_label = label.Label(font1, text="Profile:", color=0xAAAAAA)
-profile_label.x = 5
-profile_label.y = 80
-display_group.append(profile_label)
-profile_data = label.Label(font1, text=oven.sprofile["title"])
-profile_data.x = 10
-profile_data.y = 100
-display_group.append(profile_data)
-timer_label = label.Label(font1, text="Time:", color=0xAAAAAA)
-timer_label.x = 5
-timer_label.y = 120
-display_group.append(timer_label)
-timer_data = label.Label(font3, text=format_time(timediff))
-timer_data.x = 10
-timer_data.y = 140
-display_group.append(timer_data)
-temp_label = label.Label(font1, text="Temp(C):", color=0xAAAAAA)
-temp_label.x = 5
-temp_label.y = 160
-display_group.append(temp_label)
-temp_data = label.Label(font3, text="--")
-temp_data.x = 10
-temp_data.y = 180
-display_group.append(temp_data)
-circle = Circle(308, 12, 8, fill=0)
-display_group.append(circle)
-
-sgraph = Graph()
-
-# sgraph.xstart = 100
-# sgraph.ystart = 4
-sgraph.xstart = 0
-sgraph.ystart = 0
-# sgraph.width = WIDTH - sgraph.xstart - 4 # 216 for standard PyPortal
-# sgraph.height = HEIGHT - 80 # 160 for standard PyPortal
-sgraph.width = GWIDTH # 216 for standard PyPortal
-sgraph.height = GHEIGHT # 160 for standard PyPortal
-sgraph.xmin = oven.sprofile["time_range"][0]
-sgraph.xmax = oven.sprofile["time_range"][1]
-sgraph.ymin = oven.sprofile["temp_range"][0]
-sgraph.ymax = oven.sprofile["temp_range"][1] * 1.1
-print("x range:", sgraph.xmin, sgraph.xmax)
-print("y range:", sgraph.ymin, sgraph.ymax)
-draw_profile(sgraph, oven.sprofile)
-buttons = []
-if oven.sensor_status:
- button = Button(
- x=0, y=HEIGHT - 40, width=80, height=40, label="Start", label_font=font2
- )
- buttons.append(button)
-
-for b in buttons:
- display_group.append(b.group)
-
-try:
- board.DISPLAY.refresh(target_frames_per_second=60)
-except AttributeError:
- board.DISPLAY.refresh_soon()
-print("display complete")
-last_temp = 0
-last_state = "ready"
-last_control = False
-second_timer = time.monotonic()
-timer = time.monotonic()
-while True:
+ Limitations: Only the first 6 profiles will be displayed to honor to the size format of the screen
+ """
+ selected_file = None
+
+ display_group = displayio.Group()
gc.collect()
+
+ title_label = label.Label(font3, text=TITLE)
+ title_label.x = 5
+ title_label.y = 14
+ display_group.append(title_label)
+ profile_label = label.Label(font2, text="Profile Change")
+ profile_label.x = 5
+ profile_label.y = 45
+ display_group.append(profile_label)
+
+ selected_label_default_text = "Selected Profile: "
+ selected_label = label.Label(font1, text=selected_label_default_text)
+ selected_label.x = 5
+ selected_label.y = HEIGHT - 20
+ display_group.append(selected_label)
+
+ buttons = []
+ button_details = {}
+ button_x = 20
+ button_y = 60
+ button_y_start = 60
+ button_height = 30
+ button_width = 120
+ spacing = 10
+ profile_limit = 6
+ count = 0
+ dir_list = os.listdir("/profiles/")
+ for f in dir_list:
+ f = f.split('.')[0]
+ button = Button(
+ x=button_x, y=button_y, width=button_width, height=button_height, label=f, label_font=font1
+ )
+ button_details[f] = [button_x, button_y, button_width, button_height]
+ buttons.append(button)
+ button_y += button_height + spacing
+
+ count+=1
+
+ if count == 3:
+ button_x += button_width + spacing
+ button_y = button_y_start
+
+ if count >= 6:
+ break
+
+ save_button = Button(x=WIDTH-70, y=HEIGHT-50, width=60, height=40, label="Save", label_font=font2)
+ button_details["Save"] = [WIDTH-70, HEIGHT-50, 60, 40]
+ buttons.append(save_button)
+
+ for b in buttons:
+ display_group.append(b)
+
+ board.DISPLAY.root_group = display_group
+
try:
board.DISPLAY.refresh(target_frames_per_second=60)
except AttributeError:
board.DISPLAY.refresh_soon()
- oven.beep.refresh() # this allows beeps less than one second in length
+ print("Profile change display complete")
+
+ while True:
+ gc.collect()
+ try:
+ board.DISPLAY.refresh(target_frames_per_second=60)
+ except AttributeError:
+ board.DISPLAY.refresh_soon()
+
+ p = ts.touch_point
+
+ if p:
+ button_pressed = check_buttons_press_location(p, buttons)
+ if button_pressed:
+ print(f"{button_pressed.label} button pressed")
+ if button_pressed.label == "Save":
+ with open("/profiles/" + selected_file + ".json", mode="r") as fpr:
+ oven.sprofile = json.load(fpr)
+ fpr.close()
+ oven.reset()
+ return
+ else:
+ selected_file = button_pressed.label
+ print(f"Profile selected: {selected_file}")
+ selected_label.text = selected_label_default_text + " " + button_pressed.label
+
+ time.sleep(1) # for debounce
+
+
+def default_view():
+ """
+ The below code was wrapped into this fucntion to give execution back and forth between this the default view
+ of the EZ Make Oven and the alternative profile selection view.
+
+ As such there were numerous global variables that have been declared as needed in the various other functions
+ that use them.
+ """
+
+ global label_reflow, oven, message, timediff, plot, sgraph, timer_data
+
+ display_group = displayio.Group()
+ board.DISPLAY.root_group = display_group
+
+ plot = displayio.Bitmap(GWIDTH, GHEIGHT, 4)
+
+ display_group.append(
+ displayio.TileGrid(plot, pixel_shader=palette, x=GXSTART, y=GYSTART)
+ )
+
+ timediff = 0
+
+ print("melting point: ", oven.sprofile["melting_point"])
+
+ label_reflow = label.Label(font1, text="", color=0xFFFFFF, line_spacing=0)
+ label_reflow.x = 0
+ label_reflow.y = -20
+ display_group.append(label_reflow)
+ title_label = label.Label(font3, text=TITLE)
+ title_label.x = 5
+ title_label.y = 14
+ display_group.append(title_label)
+ # version_label = label.Label(font1, text=VERSION, color=0xAAAAAA)
+ # version_label.x = 300
+ # version_label.y = 40
+ # display_group.append(version_label)
+ message = label.Label(font2, text="Wait")
+ message.x = 100
+ message.y = 40
+ display_group.append(message)
+ alloy_label = label.Label(font1, text="Alloy:", color=0xAAAAAA)
+ alloy_label.x = 5
+ alloy_label.y = 40
+ display_group.append(alloy_label)
+ alloy_data = label.Label(font1, text=str(oven.sprofile["alloy"]))
+ alloy_data.x = 10
+ alloy_data.y = 60
+ display_group.append(alloy_data)
+ profile_label = label.Label(font1, text="Profile:", color=0xAAAAAA)
+ profile_label.x = 5
+ profile_label.y = 80
+ display_group.append(profile_label)
+ profile_data = label.Label(font1, text=oven.sprofile["title"])
+ profile_data.x = 10
+ profile_data.y = 100
+ display_group.append(profile_data)
+ timer_label = label.Label(font1, text="Time:", color=0xAAAAAA)
+ timer_label.x = 5
+ timer_label.y = 120
+ display_group.append(timer_label)
+ timer_data = label.Label(font3, text=format_time(timediff))
+ timer_data.x = 10
+ timer_data.y = 140
+ display_group.append(timer_data)
+ temp_label = label.Label(font1, text="Temp(C):", color=0xAAAAAA)
+ temp_label.x = 5
+ temp_label.y = 160
+ display_group.append(temp_label)
+ temp_data = label.Label(font3, text="--")
+ temp_data.x = 10
+ temp_data.y = 180
+ display_group.append(temp_data)
+ circle = Circle(308, 12, 8, fill=0)
+ display_group.append(circle)
+
+ sgraph = Graph()
+
+ # sgraph.xstart = 100
+ # sgraph.ystart = 4
+ sgraph.xstart = 0
+ sgraph.ystart = 0
+ # sgraph.width = WIDTH - sgraph.xstart - 4 # 216 for standard PyPortal
+ # sgraph.height = HEIGHT - 80 # 160 for standard PyPortal
+ sgraph.width = GWIDTH # 216 for standard PyPortal
+ sgraph.height = GHEIGHT # 160 for standard PyPortal
+ sgraph.xmin = oven.sprofile["time_range"][0]
+ sgraph.xmax = oven.sprofile["time_range"][1]
+ sgraph.ymin = oven.sprofile["temp_range"][0]
+ sgraph.ymax = oven.sprofile["temp_range"][1] * 1.1
+ print("x range:", sgraph.xmin, sgraph.xmax)
+ print("y range:", sgraph.ymin, sgraph.ymax)
+ draw_profile(sgraph, oven.sprofile)
+ buttons = []
+ if oven.sensor_status:
+ button = Button(
+ x=0, y=HEIGHT - 40, width=80, height=40, label="Start", label_font=font2
+ )
+ buttons.append(button)
+ profile_button = Button(
+ x=WIDTH - 100, y=40, width=100, height=30, label="Profile Change", label_font=font1
+ )
+ buttons.append(profile_button)
+
+ for b in buttons:
+ display_group.append(b)
+
try:
- oven_temp = int(oven.sensor.temperature)
+ board.DISPLAY.refresh(target_frames_per_second=60)
except AttributeError:
- oven_temp = 32 # testing
- oven.sensor_status = False
- message.text = "Bad/missing temp sensor"
- if oven.control != last_control:
- last_control = oven.control
- if oven.control:
- circle.fill = 0xFF0000
- else:
- circle.fill = 0x0
- p = ts.touch_point
- status = ""
- last_status = ""
-
- if p:
- if p[0] >= 0 and p[0] <= 80 and p[1] >= HEIGHT - 40 and p[1] <= HEIGHT:
- print("touch!")
+ board.DISPLAY.refresh_soon()
+ print("display complete")
+ last_temp = 0
+ last_state = "ready"
+ last_control = False
+ second_timer = time.monotonic()
+ timer = time.monotonic()
+
+ display_profile_button = True
+ is_Running = True
+ while is_Running:
+ gc.collect()
+ try:
+ board.DISPLAY.refresh(target_frames_per_second=60)
+ except AttributeError:
+ board.DISPLAY.refresh_soon()
+ oven.beep.refresh() # this allows beeps less than one second in length
+ try:
+ oven_temp = int(oven.sensor.temperature)
+ except AttributeError:
+ oven_temp = 32 # testing
+ oven.sensor_status = False
+ message.text = "Bad/missing temp sensor"
+ if oven.control != last_control:
+ last_control = oven.control
+ if oven.control:
+ circle.fill = 0xFF0000
+ else:
+ circle.fill = 0x0
+ p = ts.touch_point
+ status = ""
+ last_status = ""
+
+ if p:
+ if button.contains(p):
+ print("touch!")
+ if oven.state == "ready":
+ button.label = "Stop"
+ oven.set_state("start")
+ else:
+ # cancel operation
+ message.text = "Wait"
+ button.label = "Wait"
+ oven.set_state("wait")
+ time.sleep(1) # for debounce
+
+ elif profile_button.contains(p):
+ if message.text == "Ready": # only allow profile change when NOT running
+ print("Profile change button pressed")
+ is_Running = False
+ change_profile(oven)
+
+ if oven.sensor_status:
if oven.state == "ready":
- button.label = "Stop"
- oven.set_state("start")
+ status = "Ready"
+ display_profile_button = True
+ if last_state != "ready":
+ oven.beep.refresh()
+ oven.reset()
+ draw_profile(sgraph, oven.sprofile)
+ timer_data.text = format_time(0)
+ if button.label != "Start":
+ button.label = "Start"
+ if oven.state == "start":
+ status = "Starting"
+ display_profile_button = False
+ if last_state != "start":
+ timer = time.monotonic()
+ if oven.state == "preheat":
+ if last_state != "preheat":
+ timer = time.monotonic() # reset timer when preheat starts
+ status = "Preheat"
+ display_profile_button = False
+ if oven.state == "soak":
+ status = "Soak"
+ display_profile_button = False
+ if oven.state == "reflow":
+ status = "Reflow"
+ display_profile_button = False
+ if oven.state == "cool" or oven.state == "wait":
+ status = "Cool Down, Open Door"
+ if last_status != status:
+ message.text = status
+ last_status = status
+
+ if oven_temp != last_temp and oven.sensor_status:
+ last_temp = oven_temp
+ temp_data.text = str(oven_temp)
+ # update once per second when oven is active
+ if oven.state != "ready" and time.monotonic() - second_timer >= 1.0:
+ second_timer = time.monotonic()
+ oven.check_state()
+ if oven.state == "preheat" and last_state != "preheat":
+ timer = time.monotonic() # reset timer at start of preheat
+ timediff = int(time.monotonic() - timer)
+ timer_data.text = format_time(timediff)
+ print(oven.state)
+ if oven_temp >= 50:
+ sgraph.draw_graph_point(
+ int(timediff), oven_temp, size=TEMP_SIZE, color=TEMP_COLOR
+ )
+
+ last_state = oven.state
+
+ # Manage whether the Profile Button should be displayed or not
+ if display_profile_button == True:
+ try:
+ display_group.append(profile_button)
+ except ValueError:
+ # profile_button already in the display_group
+ pass
+ else:
+ try:
+ display_group.remove(profile_button)
+ except ValueError:
+ # profile_button is missing, handle gracefully
+ pass
- else:
- # cancel operation
- message.text = "Wait"
- button.label = "Wait"
- oven.set_state("wait")
- time.sleep(1) # for debounce
- if oven.sensor_status:
- if oven.state == "ready":
- status = "Ready"
- if last_state != "ready":
- oven.beep.refresh()
- oven.reset()
- draw_profile(sgraph, oven.sprofile)
- timer_data.text = format_time(0)
- if button.label != "Start":
- button.label = "Start"
- if oven.state == "start":
- status = "Starting"
- if last_state != "start":
- timer = time.monotonic()
- if oven.state == "preheat":
- if last_state != "preheat":
- timer = time.monotonic() # reset timer when preheat starts
- status = "Preheat"
- if oven.state == "soak":
- status = "Soak"
- if oven.state == "reflow":
- status = "Reflow"
- if oven.state == "cool" or oven.state == "wait":
- status = "Cool Down, Open Door"
- if last_status != status:
- message.text = status
- last_status = status
-
- if oven_temp != last_temp and oven.sensor_status:
- last_temp = oven_temp
- temp_data.text = str(oven_temp)
- # update once per second when oven is active
- if oven.state != "ready" and time.monotonic() - second_timer >= 1.0:
- second_timer = time.monotonic()
- oven.check_state()
- if oven.state == "preheat" and last_state != "preheat":
- timer = time.monotonic() # reset timer at start of preheat
- timediff = int(time.monotonic() - timer)
- timer_data.text = format_time(timediff)
- print(oven.state)
- if oven_temp >= 50:
- sgraph.draw_graph_point(
- int(timediff), oven_temp, size=TEMP_SIZE, color=TEMP_COLOR
- )
+# Global variables that are used in numerous of the supporting functions
+font1 = bitmap_font.load_font("/fonts/OpenSans-9.bdf")
+font2 = bitmap_font.load_font("/fonts/OpenSans-12.bdf")
+font3 = bitmap_font.load_font("/fonts/OpenSans-16.bdf")
+label_reflow = None
+oven = ReflowOvenControl(board.D4)
+message = None
+timediff = 0
+plot = None
+sgraph = None
+timer_data = None
- last_state = oven.state
+# Essentially the main function of the entire codebase
+while True:
+ default_view()
\ No newline at end of file
diff --git a/PyPortal_EZ_Make_Oven/codecalibrate/code.py b/PyPortal/PyPortal_EZ_Make_Oven/codecalibrate/code.py
similarity index 100%
rename from PyPortal_EZ_Make_Oven/codecalibrate/code.py
rename to PyPortal/PyPortal_EZ_Make_Oven/codecalibrate/code.py
diff --git a/PyPortal_EZ_Make_Oven/config.json b/PyPortal/PyPortal_EZ_Make_Oven/config.json
similarity index 100%
rename from PyPortal_EZ_Make_Oven/config.json
rename to PyPortal/PyPortal_EZ_Make_Oven/config.json
diff --git a/PyPortal_EZ_Make_Oven/fonts/OpenSans-12.bdf b/PyPortal/PyPortal_EZ_Make_Oven/fonts/OpenSans-12.bdf
similarity index 100%
rename from PyPortal_EZ_Make_Oven/fonts/OpenSans-12.bdf
rename to PyPortal/PyPortal_EZ_Make_Oven/fonts/OpenSans-12.bdf
diff --git a/PyPortal_EZ_Make_Oven/fonts/OpenSans-16.bdf b/PyPortal/PyPortal_EZ_Make_Oven/fonts/OpenSans-16.bdf
similarity index 100%
rename from PyPortal_EZ_Make_Oven/fonts/OpenSans-16.bdf
rename to PyPortal/PyPortal_EZ_Make_Oven/fonts/OpenSans-16.bdf
diff --git a/PyPortal_EZ_Make_Oven/fonts/OpenSans-9.bdf b/PyPortal/PyPortal_EZ_Make_Oven/fonts/OpenSans-9.bdf
similarity index 100%
rename from PyPortal_EZ_Make_Oven/fonts/OpenSans-9.bdf
rename to PyPortal/PyPortal_EZ_Make_Oven/fonts/OpenSans-9.bdf
diff --git a/PyPortal_EZ_Make_Oven/profiles/sn42bi573ag04.json b/PyPortal/PyPortal_EZ_Make_Oven/profiles/sn42bi573ag04.json
similarity index 100%
rename from PyPortal_EZ_Make_Oven/profiles/sn42bi573ag04.json
rename to PyPortal/PyPortal_EZ_Make_Oven/profiles/sn42bi573ag04.json
diff --git a/PyPortal_EZ_Make_Oven/profiles/sn63pb37.json b/PyPortal/PyPortal_EZ_Make_Oven/profiles/sn63pb37.json
similarity index 100%
rename from PyPortal_EZ_Make_Oven/profiles/sn63pb37.json
rename to PyPortal/PyPortal_EZ_Make_Oven/profiles/sn63pb37.json
diff --git a/PyPortal_EZ_Make_Oven/profiles/sn965ag30cu05.json b/PyPortal/PyPortal_EZ_Make_Oven/profiles/sn965ag30cu05.json
similarity index 100%
rename from PyPortal_EZ_Make_Oven/profiles/sn965ag30cu05.json
rename to PyPortal/PyPortal_EZ_Make_Oven/profiles/sn965ag30cu05.json
diff --git a/PyPortal_Electioncal_US/.circuitpython.skip b/PyPortal/PyPortal_Electioncal_US/.circuitpython.skip
similarity index 100%
rename from PyPortal_Electioncal_US/.circuitpython.skip
rename to PyPortal/PyPortal_Electioncal_US/.circuitpython.skip
diff --git a/PyPortal_Electioncal_US/code.py b/PyPortal/PyPortal_Electioncal_US/code.py
similarity index 100%
rename from PyPortal_Electioncal_US/code.py
rename to PyPortal/PyPortal_Electioncal_US/code.py
diff --git a/PyPortal_Electioncal_US/electioncal_graphics.py b/PyPortal/PyPortal_Electioncal_US/electioncal_graphics.py
similarity index 100%
rename from PyPortal_Electioncal_US/electioncal_graphics.py
rename to PyPortal/PyPortal_Electioncal_US/electioncal_graphics.py
diff --git a/PyPortal_Electioncal_US/fonts/Arial-12.bdf b/PyPortal/PyPortal_Electioncal_US/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Electioncal_US/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Electioncal_US/fonts/Arial-12.bdf
diff --git a/PyPortal_Electioncal_US/fonts/Arial-16.bdf b/PyPortal/PyPortal_Electioncal_US/fonts/Arial-16.bdf
similarity index 100%
rename from PyPortal_Electioncal_US/fonts/Arial-16.bdf
rename to PyPortal/PyPortal_Electioncal_US/fonts/Arial-16.bdf
diff --git a/PyPortal_Electioncal_US/icons/electioncal.bmp b/PyPortal/PyPortal_Electioncal_US/icons/electioncal.bmp
similarity index 100%
rename from PyPortal_Electioncal_US/icons/electioncal.bmp
rename to PyPortal/PyPortal_Electioncal_US/icons/electioncal.bmp
diff --git a/PyPortal_Electioncal_US/pyportal_splash.bmp b/PyPortal/PyPortal_Electioncal_US/pyportal_splash.bmp
similarity index 100%
rename from PyPortal_Electioncal_US/pyportal_splash.bmp
rename to PyPortal/PyPortal_Electioncal_US/pyportal_splash.bmp
diff --git a/PyPortal_Electioncal_US/pyportal_startup.wav b/PyPortal/PyPortal_Electioncal_US/pyportal_startup.wav
similarity index 100%
rename from PyPortal_Electioncal_US/pyportal_startup.wav
rename to PyPortal/PyPortal_Electioncal_US/pyportal_startup.wav
diff --git a/PyPortal_Email_Display/Helvetica-Oblique-17.bdf b/PyPortal/PyPortal_Email_Display/Helvetica-Oblique-17.bdf
similarity index 100%
rename from PyPortal_Email_Display/Helvetica-Oblique-17.bdf
rename to PyPortal/PyPortal_Email_Display/Helvetica-Oblique-17.bdf
diff --git a/PyPortal_Email_Display/code.py b/PyPortal/PyPortal_Email_Display/code.py
similarity index 100%
rename from PyPortal_Email_Display/code.py
rename to PyPortal/PyPortal_Email_Display/code.py
diff --git a/PyPortal_Email_Display/pyportal_email.bmp b/PyPortal/PyPortal_Email_Display/pyportal_email.bmp
similarity index 100%
rename from PyPortal_Email_Display/pyportal_email.bmp
rename to PyPortal/PyPortal_Email_Display/pyportal_email.bmp
diff --git a/PyPortal_EventCountdown/code.py b/PyPortal/PyPortal_EventCountdown/code.py
similarity index 100%
rename from PyPortal_EventCountdown/code.py
rename to PyPortal/PyPortal_EventCountdown/code.py
diff --git a/PyPortal_EventCountdown/countdown_background.bmp b/PyPortal/PyPortal_EventCountdown/countdown_background.bmp
similarity index 100%
rename from PyPortal_EventCountdown/countdown_background.bmp
rename to PyPortal/PyPortal_EventCountdown/countdown_background.bmp
diff --git a/PyPortal_EventCountdown/countdown_event.bmp b/PyPortal/PyPortal_EventCountdown/countdown_event.bmp
similarity index 100%
rename from PyPortal_EventCountdown/countdown_event.bmp
rename to PyPortal/PyPortal_EventCountdown/countdown_event.bmp
diff --git a/PyPortal_EventCountdown/fonts/Helvetica-Bold-36.bdf b/PyPortal/PyPortal_EventCountdown/fonts/Helvetica-Bold-36.bdf
similarity index 100%
rename from PyPortal_EventCountdown/fonts/Helvetica-Bold-36.bdf
rename to PyPortal/PyPortal_EventCountdown/fonts/Helvetica-Bold-36.bdf
diff --git a/PyPortal_EventCountup/code.py b/PyPortal/PyPortal_EventCountup/code.py
similarity index 100%
rename from PyPortal_EventCountup/code.py
rename to PyPortal/PyPortal_EventCountup/code.py
diff --git a/PyPortal_EventCountup/countup_background.bmp b/PyPortal/PyPortal_EventCountup/countup_background.bmp
similarity index 100%
rename from PyPortal_EventCountup/countup_background.bmp
rename to PyPortal/PyPortal_EventCountup/countup_background.bmp
diff --git a/PyPortal_EventCountup/fonts/Helvetica-Bold-24.bdf b/PyPortal/PyPortal_EventCountup/fonts/Helvetica-Bold-24.bdf
similarity index 100%
rename from PyPortal_EventCountup/fonts/Helvetica-Bold-24.bdf
rename to PyPortal/PyPortal_EventCountup/fonts/Helvetica-Bold-24.bdf
diff --git a/PyPortal/PyPortal_Floppy_with_Display/README.md b/PyPortal/PyPortal_Floppy_with_Display/README.md
new file mode 100644
index 000000000..87ca9c572
--- /dev/null
+++ b/PyPortal/PyPortal_Floppy_with_Display/README.md
@@ -0,0 +1,9 @@
+SPDX-FileCopyrightText: 2023 Anne Barela for Adafruit Industries
+
+SPDX-License-Identifier: MIT
+
+This directory contains the files for the Adafruit Learning System project
+
+A Floppy Thumb Drive with a Color File Icon Display
+
+https://learn.adafruit.com/a-floppy-thumb-drive-with-a-color-file-icon-display/overview
diff --git a/PyPortal/PyPortal_Floppy_with_Display/code.py b/PyPortal/PyPortal_Floppy_with_Display/code.py
new file mode 100644
index 000000000..e8adbed90
--- /dev/null
+++ b/PyPortal/PyPortal_Floppy_with_Display/code.py
@@ -0,0 +1,206 @@
+# SPDX-FileCopyrightText: 2023 Anne Barela for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+#
+# Faux Floppy Disk with LCD Screen
+# Display file icons on screen
+
+import os
+import time
+import board
+import displayio
+import adafruit_imageload
+import terminalio
+import adafruit_touchscreen
+from adafruit_display_text import label
+from adafruit_display_shapes.rect import Rect
+
+# Get a dictionary of filenames at the passed base directory
+# each entry is a tuple (filename, bool) where bool = true
+# means the filename is a directory, else false.
+def get_files(base):
+ files = os.listdir(base)
+ file_names = []
+ for isdir, filetext in enumerate(files):
+ if not filetext.startswith("."):
+ if filetext not in ('boot_out.txt', 'System Volume Information'):
+ stats = os.stat(base + filetext)
+ isdir = stats[0] & 0x4000
+ if isdir:
+ file_names.append((filetext, True))
+ else:
+ file_names.append((filetext, False))
+ return file_names
+
+def get_touch(screen):
+ p = None
+ while p is None:
+ time.sleep(0.05)
+ p = screen.touch_point
+ return p[0]
+
+# Icon Positions
+ICONSIZE = 48
+SPACING = 18
+LEFTSPACE = 38
+TOPSPACE = 10
+TEXTSPACE = 10
+ICONSACROSS = 4
+ICONSDOWN = 3
+PAGEMAXFILES = ICONSACROSS * ICONSDOWN # For the chosen display, this is the
+# maximum number of file icons that will fit
+# on the display at once (display dependent)
+# File Types
+BLANK = 0
+FILE = 1
+DIR = 2
+BMP = 3
+WAV = 4
+PY = 5
+RIGHT = 6
+LEFT = 7
+
+# Use the builtin display
+display = board.DISPLAY
+WIDTH = board.DISPLAY.width
+HEIGHT = board.DISPLAY.height
+ts = adafruit_touchscreen.Touchscreen(board.TOUCH_XL, board.TOUCH_XR,
+ board.TOUCH_YD, board.TOUCH_YU,
+ calibration=((5200, 59000), (5800, 57000)),
+ size=(WIDTH, HEIGHT))
+
+# Create base display group
+displaygroup = displayio.Group()
+
+# Load the bitmap (this is the "spritesheet")
+sprite_sheet, palette = adafruit_imageload.load("/icons.bmp")
+
+background = Rect(0, 0, WIDTH - 1, HEIGHT - 1, fill=0x000000)
+displaygroup.append(background)
+
+# Create enough sprites & labels for the icons that will fit on screen
+sprites = []
+labels = []
+for _ in range(PAGEMAXFILES):
+ sprite = displayio.TileGrid(sprite_sheet, pixel_shader=palette,
+ width=1, height=1, tile_height=48,
+ tile_width=48,)
+ sprites.append(sprite) # Append the sprite to the sprite array
+ displaygroup.append(sprite)
+ filelabel = label.Label(terminalio.FONT, color=0xFFFFFF)
+ labels.append(filelabel)
+ displaygroup.append(filelabel)
+
+# Make the more files and less files icons (> <)
+moresprite = displayio.TileGrid(sprite_sheet, pixel_shader=palette,
+ width=1, height=1, tile_height=48,
+ tile_width=48,)
+displaygroup.append(moresprite)
+moresprite.x = WIDTH - ICONSIZE + TEXTSPACE
+moresprite.y = int((HEIGHT - ICONSIZE) / 2)
+lesssprite = displayio.TileGrid(sprite_sheet, pixel_shader=palette,
+ width=1, height=1, tile_height=48,
+ tile_width=48,)
+displaygroup.append(lesssprite)
+lesssprite.x = -10
+lesssprite.y = int((HEIGHT - ICONSIZE) / 2)
+
+display.root_group = displaygroup
+
+filecount = 0
+xpos = LEFTSPACE
+ypos = TOPSPACE
+
+displaybase = "/" # Get file names in base directory
+filenames = get_files(displaybase)
+
+currentfile = 0 # Which file is being processed in all files
+spot = 0 # Which spot on the screen is getting a file icon
+PAGE = 1 # Which page of icons is displayed on screen, 1 is first
+
+while True:
+ if currentfile < len(filenames) and spot < PAGEMAXFILES:
+ filename, dirfile = filenames[currentfile]
+ if dirfile:
+ filetype = DIR
+ elif filename.endswith(".bmp"):
+ filetype = BMP
+ elif filename.endswith(".wav"):
+ filetype = WAV
+ elif filename.endswith(".py"):
+ filetype = PY
+ else:
+ filetype = FILE
+ # Set icon location information and icon type
+ sprites[spot].x = xpos
+ sprites[spot].y = ypos
+ sprites[spot][0] = filetype
+ #
+ # Set filename
+ labels[spot].x = xpos
+ labels[spot].y = ypos + ICONSIZE + TEXTSPACE
+ # The next line gets the filename without the extension, first 11 chars
+ labels[spot].text = filename.rsplit('.', 1)[0][0:10]
+
+ currentpage = PAGE
+
+ # Pagination Handling
+ if spot >= PAGEMAXFILES - 1:
+ if currentfile < (len(filenames) + 1):
+ # Need to display the greater than touch sprite
+ moresprite[0] = RIGHT
+ else:
+ # Blank out more and extra icon spaces
+ moresprite[0] = BLANK
+ if PAGE > 1: # Need to display the less than touch sprite
+ lesssprite[0] = LEFT
+ else:
+ lesssprite[0] = BLANK
+
+ # Time to check for user touch of screen (BLOCKING)
+ touch_x = get_touch(ts)
+ print("Touch Registered ")
+ # Check if touch_x is around the LEFT or RIGHT arrow
+ currentpage = PAGE
+ if touch_x >= int(WIDTH - ICONSIZE): # > Touched
+ if moresprite[0] != BLANK: # Ensure there are more
+ if spot == (PAGEMAXFILES - 1): # Page full
+ if currentfile < (len(filenames)): # and more files
+ PAGE = PAGE + 1 # Increment page
+ if touch_x <= ICONSIZE: # < Touched
+ if PAGE > 1:
+ PAGE = PAGE - 1 # Decrement page
+ else:
+ lesssprite[0] = BLANK # Not show < for first page
+ print("Page ", PAGE)
+ # Icon Positioning
+
+ if PAGE != currentpage: # We have a page change
+ # Reset icon locations to upper left
+ xpos = LEFTSPACE
+ ypos = TOPSPACE
+ spot = 0
+ if currentpage > PAGE:
+ # Decrement files by a page (current page & previous page)
+ currentfile = currentfile - (PAGEMAXFILES * 2) + 1
+ else:
+ # Forward go to the next file
+ currentfile = currentfile + 1
+ else:
+ currentfile += 1 # Increment file counter
+ spot += 1 # Increment icon space counter
+ if spot == PAGEMAXFILES: # Last page ended with
+ print("hit")
+ # calculate next icon location
+ if spot % ICONSACROSS: # not at end of icon row
+ xpos += SPACING + ICONSIZE
+ else: # start new icon row
+ ypos += ICONSIZE + SPACING + TEXTSPACE
+ xpos = LEFTSPACE
+ # End If Changed Page
+ # Blank out rest if needed
+ if currentfile == len(filenames):
+ for i in range(spot, PAGEMAXFILES):
+ sprites[i][0] = BLANK
+ labels[i].text = " "
+# End while
diff --git a/PyPortal/PyPortal_Floppy_with_Display/icons.bmp b/PyPortal/PyPortal_Floppy_with_Display/icons.bmp
new file mode 100644
index 000000000..a806b57f9
Binary files /dev/null and b/PyPortal/PyPortal_Floppy_with_Display/icons.bmp differ
diff --git a/PyPortal_GCP_IOT_Planter/code.py b/PyPortal/PyPortal_GCP_IOT_Planter/code.py
similarity index 100%
rename from PyPortal_GCP_IOT_Planter/code.py
rename to PyPortal/PyPortal_GCP_IOT_Planter/code.py
diff --git a/PyPortal_GCP_IOT_Planter/gcp_gfx_helper.py b/PyPortal/PyPortal_GCP_IOT_Planter/gcp_gfx_helper.py
similarity index 97%
rename from PyPortal_GCP_IOT_Planter/gcp_gfx_helper.py
rename to PyPortal/PyPortal_GCP_IOT_Planter/gcp_gfx_helper.py
index 0c9e962c8..fe6aa0720 100644
--- a/PyPortal_GCP_IOT_Planter/gcp_gfx_helper.py
+++ b/PyPortal/PyPortal_GCP_IOT_Planter/gcp_gfx_helper.py
@@ -25,7 +25,7 @@ def __init__(self, is_celsius=False):
# root displayio group
root_group = displayio.Group()
self.display = board.DISPLAY
- self.display.show(root_group)
+ self.display.root_group = root_group
super().__init__()
# temperature display option
@@ -33,7 +33,7 @@ def __init__(self, is_celsius=False):
# create background icon group
self._icon_group = displayio.Group()
- self.display.show(self._icon_group)
+ self.display.root_group = self._icon_group
# create text object group
self._text_group = displayio.Group()
@@ -85,7 +85,7 @@ def __init__(self, is_celsius=False):
status_group.append(self.gcp_status_label)
self._text_group.append(status_group)
- self.display.show(self._text_group)
+ self.display.root_group = self._text_group
def show_gcp_status(self, status_text):
"""Displays the system status on the PyPortal
diff --git a/PyPortal_GCP_IOT_Planter/images/gcp_splash.bmp b/PyPortal/PyPortal_GCP_IOT_Planter/images/gcp_splash.bmp
similarity index 100%
rename from PyPortal_GCP_IOT_Planter/images/gcp_splash.bmp
rename to PyPortal/PyPortal_GCP_IOT_Planter/images/gcp_splash.bmp
diff --git a/PyPortal_GithubStars/Coin.wav b/PyPortal/PyPortal_GithubStars/Coin.wav
similarity index 100%
rename from PyPortal_GithubStars/Coin.wav
rename to PyPortal/PyPortal_GithubStars/Coin.wav
diff --git a/PyPortal_GithubStars/code.py b/PyPortal/PyPortal_GithubStars/code.py
similarity index 100%
rename from PyPortal_GithubStars/code.py
rename to PyPortal/PyPortal_GithubStars/code.py
diff --git a/PyPortal_GithubStars/fonts/Arial.bdf b/PyPortal/PyPortal_GithubStars/fonts/Arial.bdf
similarity index 100%
rename from PyPortal_GithubStars/fonts/Arial.bdf
rename to PyPortal/PyPortal_GithubStars/fonts/Arial.bdf
diff --git a/PyPortal_GithubStars/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_GithubStars/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_GithubStars/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_GithubStars/fonts/Collegiate-50.bdf
diff --git a/PyPortal_GithubStars/stars_background.bmp b/PyPortal/PyPortal_GithubStars/stars_background.bmp
similarity index 100%
rename from PyPortal_GithubStars/stars_background.bmp
rename to PyPortal/PyPortal_GithubStars/stars_background.bmp
diff --git a/PyPortal_Google_Calendar/authenticator/code.py b/PyPortal/PyPortal_Google_Calendar/authenticator/code.py
similarity index 100%
rename from PyPortal_Google_Calendar/authenticator/code.py
rename to PyPortal/PyPortal_Google_Calendar/authenticator/code.py
diff --git a/PyPortal_Google_Calendar/code.py b/PyPortal/PyPortal_Google_Calendar/code.py
similarity index 100%
rename from PyPortal_Google_Calendar/code.py
rename to PyPortal/PyPortal_Google_Calendar/code.py
diff --git a/PyPortal_Google_Calendar/fonts/Arial-12.pcf b/PyPortal/PyPortal_Google_Calendar/fonts/Arial-12.pcf
similarity index 100%
rename from PyPortal_Google_Calendar/fonts/Arial-12.pcf
rename to PyPortal/PyPortal_Google_Calendar/fonts/Arial-12.pcf
diff --git a/PyPortal_Google_Calendar/fonts/Arial-14.pcf b/PyPortal/PyPortal_Google_Calendar/fonts/Arial-14.pcf
similarity index 100%
rename from PyPortal_Google_Calendar/fonts/Arial-14.pcf
rename to PyPortal/PyPortal_Google_Calendar/fonts/Arial-14.pcf
diff --git a/PyPortal/PyPortal_Google_Calendar/fonts/Arial-18.pcf b/PyPortal/PyPortal_Google_Calendar/fonts/Arial-18.pcf
new file mode 100644
index 000000000..10ac07262
Binary files /dev/null and b/PyPortal/PyPortal_Google_Calendar/fonts/Arial-18.pcf differ
diff --git a/PyPortal_Guitar_Tuner/code.py b/PyPortal/PyPortal_Guitar_Tuner/code.py
similarity index 100%
rename from PyPortal_Guitar_Tuner/code.py
rename to PyPortal/PyPortal_Guitar_Tuner/code.py
diff --git a/PyPortal_Guitar_Tuner/secrets.py b/PyPortal/PyPortal_Guitar_Tuner/secrets.py
similarity index 100%
rename from PyPortal_Guitar_Tuner/secrets.py
rename to PyPortal/PyPortal_Guitar_Tuner/secrets.py
diff --git a/PyPortal_Guitar_Tuner/sounds/A.wav b/PyPortal/PyPortal_Guitar_Tuner/sounds/A.wav
similarity index 100%
rename from PyPortal_Guitar_Tuner/sounds/A.wav
rename to PyPortal/PyPortal_Guitar_Tuner/sounds/A.wav
diff --git a/PyPortal_Guitar_Tuner/sounds/B.wav b/PyPortal/PyPortal_Guitar_Tuner/sounds/B.wav
similarity index 100%
rename from PyPortal_Guitar_Tuner/sounds/B.wav
rename to PyPortal/PyPortal_Guitar_Tuner/sounds/B.wav
diff --git a/PyPortal_Guitar_Tuner/sounds/D.wav b/PyPortal/PyPortal_Guitar_Tuner/sounds/D.wav
similarity index 100%
rename from PyPortal_Guitar_Tuner/sounds/D.wav
rename to PyPortal/PyPortal_Guitar_Tuner/sounds/D.wav
diff --git a/PyPortal_Guitar_Tuner/sounds/G.wav b/PyPortal/PyPortal_Guitar_Tuner/sounds/G.wav
similarity index 100%
rename from PyPortal_Guitar_Tuner/sounds/G.wav
rename to PyPortal/PyPortal_Guitar_Tuner/sounds/G.wav
diff --git a/PyPortal_Guitar_Tuner/sounds/highE.wav b/PyPortal/PyPortal_Guitar_Tuner/sounds/highE.wav
similarity index 100%
rename from PyPortal_Guitar_Tuner/sounds/highE.wav
rename to PyPortal/PyPortal_Guitar_Tuner/sounds/highE.wav
diff --git a/PyPortal_Guitar_Tuner/sounds/lowE.wav b/PyPortal/PyPortal_Guitar_Tuner/sounds/lowE.wav
similarity index 100%
rename from PyPortal_Guitar_Tuner/sounds/lowE.wav
rename to PyPortal/PyPortal_Guitar_Tuner/sounds/lowE.wav
diff --git a/PyPortal_Guitar_Tuner/stock-pyportal.bmp b/PyPortal/PyPortal_Guitar_Tuner/stock-pyportal.bmp
similarity index 100%
rename from PyPortal_Guitar_Tuner/stock-pyportal.bmp
rename to PyPortal/PyPortal_Guitar_Tuner/stock-pyportal.bmp
diff --git a/PyPortal_HaDSkulls/Coin.wav b/PyPortal/PyPortal_HaDSkulls/Coin.wav
similarity index 100%
rename from PyPortal_HaDSkulls/Coin.wav
rename to PyPortal/PyPortal_HaDSkulls/Coin.wav
diff --git a/PyPortal_HaDSkulls/code.py b/PyPortal/PyPortal_HaDSkulls/code.py
similarity index 100%
rename from PyPortal_HaDSkulls/code.py
rename to PyPortal/PyPortal_HaDSkulls/code.py
diff --git a/PyPortal_HaDSkulls/fonts/Arial.bdf b/PyPortal/PyPortal_HaDSkulls/fonts/Arial.bdf
similarity index 100%
rename from PyPortal_HaDSkulls/fonts/Arial.bdf
rename to PyPortal/PyPortal_HaDSkulls/fonts/Arial.bdf
diff --git a/PyPortal_HaDSkulls/fonts/Checkbook-50.bdf b/PyPortal/PyPortal_HaDSkulls/fonts/Checkbook-50.bdf
similarity index 100%
rename from PyPortal_HaDSkulls/fonts/Checkbook-50.bdf
rename to PyPortal/PyPortal_HaDSkulls/fonts/Checkbook-50.bdf
diff --git a/PyPortal_HaDSkulls/had_background.bmp b/PyPortal/PyPortal_HaDSkulls/had_background.bmp
similarity index 100%
rename from PyPortal_HaDSkulls/had_background.bmp
rename to PyPortal/PyPortal_HaDSkulls/had_background.bmp
diff --git a/PyPortal_Hackster/Coin.wav b/PyPortal/PyPortal_Hackster/Coin.wav
similarity index 100%
rename from PyPortal_Hackster/Coin.wav
rename to PyPortal/PyPortal_Hackster/Coin.wav
diff --git a/PyPortal_Hackster/code.py b/PyPortal/PyPortal_Hackster/code.py
similarity index 100%
rename from PyPortal_Hackster/code.py
rename to PyPortal/PyPortal_Hackster/code.py
diff --git a/PyPortal_Hackster/fonts/Arial-12.bdf b/PyPortal/PyPortal_Hackster/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Hackster/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Hackster/fonts/Arial-12.bdf
diff --git a/PyPortal_Hackster/fonts/Arial-Bold-24.bdf b/PyPortal/PyPortal_Hackster/fonts/Arial-Bold-24.bdf
similarity index 100%
rename from PyPortal_Hackster/fonts/Arial-Bold-24.bdf
rename to PyPortal/PyPortal_Hackster/fonts/Arial-Bold-24.bdf
diff --git a/PyPortal_Hackster/hackster_background.bmp b/PyPortal/PyPortal_Hackster/hackster_background.bmp
similarity index 100%
rename from PyPortal_Hackster/hackster_background.bmp
rename to PyPortal/PyPortal_Hackster/hackster_background.bmp
diff --git a/PyPortal_HacksterStream/code.py b/PyPortal/PyPortal_HacksterStream/code.py
similarity index 100%
rename from PyPortal_HacksterStream/code.py
rename to PyPortal/PyPortal_HacksterStream/code.py
diff --git a/PyPortal_HacksterStream/fonts/Arial-Bold-12.bdf b/PyPortal/PyPortal_HacksterStream/fonts/Arial-Bold-12.bdf
similarity index 100%
rename from PyPortal_HacksterStream/fonts/Arial-Bold-12.bdf
rename to PyPortal/PyPortal_HacksterStream/fonts/Arial-Bold-12.bdf
diff --git a/PyPortal_HacksterStream/hackster_background.bmp b/PyPortal/PyPortal_HacksterStream/hackster_background.bmp
similarity index 100%
rename from PyPortal_HacksterStream/hackster_background.bmp
rename to PyPortal/PyPortal_HacksterStream/hackster_background.bmp
diff --git a/PyPortal_HacksterStream/unsafe_boot.py b/PyPortal/PyPortal_HacksterStream/unsafe_boot.py
similarity index 100%
rename from PyPortal_HacksterStream/unsafe_boot.py
rename to PyPortal/PyPortal_HacksterStream/unsafe_boot.py
diff --git a/PyPortal_Halloween_Countdown/background_1.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_1.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_1.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_1.bmp
diff --git a/PyPortal_Halloween_Countdown/background_10.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_10.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_10.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_10.bmp
diff --git a/PyPortal_Halloween_Countdown/background_11.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_11.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_11.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_11.bmp
diff --git a/PyPortal_Halloween_Countdown/background_12.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_12.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_12.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_12.bmp
diff --git a/PyPortal_Halloween_Countdown/background_13.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_13.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_13.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_13.bmp
diff --git a/PyPortal_Halloween_Countdown/background_14.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_14.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_14.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_14.bmp
diff --git a/PyPortal_Halloween_Countdown/background_15.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_15.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_15.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_15.bmp
diff --git a/PyPortal_Halloween_Countdown/background_16.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_16.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_16.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_16.bmp
diff --git a/PyPortal_Halloween_Countdown/background_17.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_17.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_17.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_17.bmp
diff --git a/PyPortal_Halloween_Countdown/background_2.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_2.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_2.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_2.bmp
diff --git a/PyPortal_Halloween_Countdown/background_3.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_3.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_3.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_3.bmp
diff --git a/PyPortal_Halloween_Countdown/background_4.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_4.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_4.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_4.bmp
diff --git a/PyPortal_Halloween_Countdown/background_5.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_5.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_5.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_5.bmp
diff --git a/PyPortal_Halloween_Countdown/background_6.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_6.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_6.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_6.bmp
diff --git a/PyPortal_Halloween_Countdown/background_7.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_7.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_7.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_7.bmp
diff --git a/PyPortal_Halloween_Countdown/background_8.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_8.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_8.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_8.bmp
diff --git a/PyPortal_Halloween_Countdown/background_9.bmp b/PyPortal/PyPortal_Halloween_Countdown/background_9.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/background_9.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/background_9.bmp
diff --git a/PyPortal_Halloween_Countdown/code.py b/PyPortal/PyPortal_Halloween_Countdown/code.py
similarity index 100%
rename from PyPortal_Halloween_Countdown/code.py
rename to PyPortal/PyPortal_Halloween_Countdown/code.py
diff --git a/PyPortal_Halloween_Countdown/fonts/Terror-31.bdf b/PyPortal/PyPortal_Halloween_Countdown/fonts/Terror-31.bdf
similarity index 100%
rename from PyPortal_Halloween_Countdown/fonts/Terror-31.bdf
rename to PyPortal/PyPortal_Halloween_Countdown/fonts/Terror-31.bdf
diff --git a/PyPortal_Halloween_Countdown/fonts/Terror-94.bdf b/PyPortal/PyPortal_Halloween_Countdown/fonts/Terror-94.bdf
similarity index 100%
rename from PyPortal_Halloween_Countdown/fonts/Terror-94.bdf
rename to PyPortal/PyPortal_Halloween_Countdown/fonts/Terror-94.bdf
diff --git a/PyPortal_Halloween_Countdown/happy_halloween.bmp b/PyPortal/PyPortal_Halloween_Countdown/happy_halloween.bmp
similarity index 100%
rename from PyPortal_Halloween_Countdown/happy_halloween.bmp
rename to PyPortal/PyPortal_Halloween_Countdown/happy_halloween.bmp
diff --git a/PyPortal_Halloween_Countdown/secrets.py b/PyPortal/PyPortal_Halloween_Countdown/secrets.py
similarity index 100%
rename from PyPortal_Halloween_Countdown/secrets.py
rename to PyPortal/PyPortal_Halloween_Countdown/secrets.py
diff --git a/PyPortal_Hurricane_Tracker/code.py b/PyPortal/PyPortal_Hurricane_Tracker/code.py
similarity index 100%
rename from PyPortal_Hurricane_Tracker/code.py
rename to PyPortal/PyPortal_Hurricane_Tracker/code.py
diff --git a/PyPortal_Hurricane_Tracker/map.bmp b/PyPortal/PyPortal_Hurricane_Tracker/map.bmp
similarity index 100%
rename from PyPortal_Hurricane_Tracker/map.bmp
rename to PyPortal/PyPortal_Hurricane_Tracker/map.bmp
diff --git a/PyPortal_Hurricane_Tracker/storm_icons.bmp b/PyPortal/PyPortal_Hurricane_Tracker/storm_icons.bmp
similarity index 100%
rename from PyPortal_Hurricane_Tracker/storm_icons.bmp
rename to PyPortal/PyPortal_Hurricane_Tracker/storm_icons.bmp
diff --git a/PyPortal_IOT_Scale/code.py b/PyPortal/PyPortal_IOT_Scale/code.py
similarity index 99%
rename from PyPortal_IOT_Scale/code.py
rename to PyPortal/PyPortal_IOT_Scale/code.py
index 800262910..a10cd0c59 100644
--- a/PyPortal_IOT_Scale/code.py
+++ b/PyPortal/PyPortal_IOT_Scale/code.py
@@ -61,7 +61,7 @@
text_label.color = 0xFFFFFF
root_group.append(text_label)
-board.DISPLAY.show(root_group)
+board.DISPLAY.root_group = root_group
# PyPortal ESP32 Setup
esp32_cs = digitalio.DigitalInOut(board.ESP_CS)
diff --git a/PyPortal_IOT_Scale/fonts/Helvetica-Bold-16.bdf b/PyPortal/PyPortal_IOT_Scale/fonts/Helvetica-Bold-16.bdf
similarity index 100%
rename from PyPortal_IOT_Scale/fonts/Helvetica-Bold-16.bdf
rename to PyPortal/PyPortal_IOT_Scale/fonts/Helvetica-Bold-16.bdf
diff --git a/PyPortal_IOT_Scale/fonts/Helvetica-Bold-36.bdf b/PyPortal/PyPortal_IOT_Scale/fonts/Helvetica-Bold-36.bdf
similarity index 100%
rename from PyPortal_IOT_Scale/fonts/Helvetica-Bold-36.bdf
rename to PyPortal/PyPortal_IOT_Scale/fonts/Helvetica-Bold-36.bdf
diff --git a/PyPortal_ISS_Tracker/code.py b/PyPortal/PyPortal_ISS_Tracker/code.py
similarity index 100%
rename from PyPortal_ISS_Tracker/code.py
rename to PyPortal/PyPortal_ISS_Tracker/code.py
diff --git a/PyPortal_ISS_Tracker/map.bmp b/PyPortal/PyPortal_ISS_Tracker/map.bmp
similarity index 100%
rename from PyPortal_ISS_Tracker/map.bmp
rename to PyPortal/PyPortal_ISS_Tracker/map.bmp
diff --git a/PyPortal_LIFX_Controller/code.py b/PyPortal/PyPortal_LIFX_Controller/code.py
similarity index 99%
rename from PyPortal_LIFX_Controller/code.py
rename to PyPortal/PyPortal_LIFX_Controller/code.py
index 2614aff63..4fa95bd93 100755
--- a/PyPortal_LIFX_Controller/code.py
+++ b/PyPortal/PyPortal_LIFX_Controller/code.py
@@ -62,7 +62,7 @@
# Make the display context
button_group = displayio.Group()
-board.DISPLAY.show(button_group)
+board.DISPLAY.root_group = button_group
# preload the font
print('loading font...')
font = bitmap_font.load_font("/fonts/Arial-12.bdf")
diff --git a/PyPortal_LIFX_Controller/fonts/Arial-12.bdf b/PyPortal/PyPortal_LIFX_Controller/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_LIFX_Controller/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_LIFX_Controller/fonts/Arial-12.bdf
diff --git a/PyPortal_LastFM/code.py b/PyPortal/PyPortal_LastFM/code.py
similarity index 100%
rename from PyPortal_LastFM/code.py
rename to PyPortal/PyPortal_LastFM/code.py
diff --git a/PyPortal_LastFM/fonts/Collegiate-24.bdf b/PyPortal/PyPortal_LastFM/fonts/Collegiate-24.bdf
similarity index 100%
rename from PyPortal_LastFM/fonts/Collegiate-24.bdf
rename to PyPortal/PyPortal_LastFM/fonts/Collegiate-24.bdf
diff --git a/PyPortal_LastFM/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_LastFM/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_LastFM/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_LastFM/fonts/Collegiate-50.bdf
diff --git a/PyPortal_LastFM/lastfm_background.bmp b/PyPortal/PyPortal_LastFM/lastfm_background.bmp
similarity index 100%
rename from PyPortal_LastFM/lastfm_background.bmp
rename to PyPortal/PyPortal_LastFM/lastfm_background.bmp
diff --git a/PyPortal_LeagueLevel/code.py b/PyPortal/PyPortal_LeagueLevel/code.py
similarity index 100%
rename from PyPortal_LeagueLevel/code.py
rename to PyPortal/PyPortal_LeagueLevel/code.py
diff --git a/PyPortal_LeagueLevel/fonts/Collegiate-24.bdf b/PyPortal/PyPortal_LeagueLevel/fonts/Collegiate-24.bdf
similarity index 100%
rename from PyPortal_LeagueLevel/fonts/Collegiate-24.bdf
rename to PyPortal/PyPortal_LeagueLevel/fonts/Collegiate-24.bdf
diff --git a/PyPortal_LeagueLevel/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_LeagueLevel/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_LeagueLevel/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_LeagueLevel/fonts/Collegiate-50.bdf
diff --git a/PyPortal_LeagueLevel/lol_background.bmp b/PyPortal/PyPortal_LeagueLevel/lol_background.bmp
similarity index 100%
rename from PyPortal_LeagueLevel/lol_background.bmp
rename to PyPortal/PyPortal_LeagueLevel/lol_background.bmp
diff --git a/PyPortal_LeagueLevel/triode_low_fade.wav b/PyPortal/PyPortal_LeagueLevel/triode_low_fade.wav
similarity index 100%
rename from PyPortal_LeagueLevel/triode_low_fade.wav
rename to PyPortal/PyPortal_LeagueLevel/triode_low_fade.wav
diff --git a/PyPortal_MQTT_Control/README.md b/PyPortal/PyPortal_MQTT_Control/README.md
similarity index 100%
rename from PyPortal_MQTT_Control/README.md
rename to PyPortal/PyPortal_MQTT_Control/README.md
diff --git a/PyPortal_MQTT_Control/code.py b/PyPortal/PyPortal_MQTT_Control/code.py
similarity index 99%
rename from PyPortal_MQTT_Control/code.py
rename to PyPortal/PyPortal_MQTT_Control/code.py
index 3890b01b7..9d38d5f40 100644
--- a/PyPortal_MQTT_Control/code.py
+++ b/PyPortal/PyPortal_MQTT_Control/code.py
@@ -90,7 +90,7 @@ def set_backlight(val):
# Make the display context
splash = displayio.Group()
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
# Make a background color fill
color_bitmap = displayio.Bitmap(320, 240, 1)
diff --git a/PyPortal_MQTT_Control/fonts/Helvetica-Bold-16.bdf b/PyPortal/PyPortal_MQTT_Control/fonts/Helvetica-Bold-16.bdf
similarity index 100%
rename from PyPortal_MQTT_Control/fonts/Helvetica-Bold-16.bdf
rename to PyPortal/PyPortal_MQTT_Control/fonts/Helvetica-Bold-16.bdf
diff --git a/PyPortal_MQTT_Control/secrets.py b/PyPortal/PyPortal_MQTT_Control/secrets.py
similarity index 100%
rename from PyPortal_MQTT_Control/secrets.py
rename to PyPortal/PyPortal_MQTT_Control/secrets.py
diff --git a/PyPortal_Mirror_Display/code.py b/PyPortal/PyPortal_Mirror_Display/code.py
similarity index 100%
rename from PyPortal_Mirror_Display/code.py
rename to PyPortal/PyPortal_Mirror_Display/code.py
diff --git a/PyPortal_Mirror_Display/fonts/Arial-12.bdf b/PyPortal/PyPortal_Mirror_Display/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Mirror_Display/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Mirror_Display/fonts/Arial-12.bdf
diff --git a/PyPortal_Mirror_Display/fonts/Arial-16.bdf b/PyPortal/PyPortal_Mirror_Display/fonts/Arial-16.bdf
similarity index 100%
rename from PyPortal_Mirror_Display/fonts/Arial-16.bdf
rename to PyPortal/PyPortal_Mirror_Display/fonts/Arial-16.bdf
diff --git a/PyPortal_Mirror_Display/fonts/Arial-Bold-24.bdf b/PyPortal/PyPortal_Mirror_Display/fonts/Arial-Bold-24.bdf
similarity index 100%
rename from PyPortal_Mirror_Display/fonts/Arial-Bold-24.bdf
rename to PyPortal/PyPortal_Mirror_Display/fonts/Arial-Bold-24.bdf
diff --git a/PyPortal_Mirror_Display/icons/01d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/01d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/01d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/01d.bmp
diff --git a/PyPortal_Mirror_Display/icons/01n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/01n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/01n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/01n.bmp
diff --git a/PyPortal_Mirror_Display/icons/02d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/02d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/02d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/02d.bmp
diff --git a/PyPortal_Mirror_Display/icons/02n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/02n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/02n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/02n.bmp
diff --git a/PyPortal_Mirror_Display/icons/03d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/03d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/03d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/03d.bmp
diff --git a/PyPortal_Mirror_Display/icons/03n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/03n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/03n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/03n.bmp
diff --git a/PyPortal_Mirror_Display/icons/04d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/04d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/04d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/04d.bmp
diff --git a/PyPortal_Mirror_Display/icons/04n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/04n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/04n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/04n.bmp
diff --git a/PyPortal_Mirror_Display/icons/09d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/09d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/09d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/09d.bmp
diff --git a/PyPortal_Mirror_Display/icons/09n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/09n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/09n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/09n.bmp
diff --git a/PyPortal_Mirror_Display/icons/10d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/10d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/10d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/10d.bmp
diff --git a/PyPortal_Mirror_Display/icons/10n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/10n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/10n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/10n.bmp
diff --git a/PyPortal_Mirror_Display/icons/11d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/11d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/11d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/11d.bmp
diff --git a/PyPortal_Mirror_Display/icons/11n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/11n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/11n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/11n.bmp
diff --git a/PyPortal_Mirror_Display/icons/13d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/13d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/13d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/13d.bmp
diff --git a/PyPortal_Mirror_Display/icons/13n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/13n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/13n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/13n.bmp
diff --git a/PyPortal_Mirror_Display/icons/50d.bmp b/PyPortal/PyPortal_Mirror_Display/icons/50d.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/50d.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/50d.bmp
diff --git a/PyPortal_Mirror_Display/icons/50n.bmp b/PyPortal/PyPortal_Mirror_Display/icons/50n.bmp
similarity index 100%
rename from PyPortal_Mirror_Display/icons/50n.bmp
rename to PyPortal/PyPortal_Mirror_Display/icons/50n.bmp
diff --git a/PyPortal_Mirror_Display/openweather_graphics.py b/PyPortal/PyPortal_Mirror_Display/openweather_graphics.py
similarity index 100%
rename from PyPortal_Mirror_Display/openweather_graphics.py
rename to PyPortal/PyPortal_Mirror_Display/openweather_graphics.py
diff --git a/PyPortal_MogwaiClock/code.py b/PyPortal/PyPortal_MogwaiClock/code.py
similarity index 100%
rename from PyPortal_MogwaiClock/code.py
rename to PyPortal/PyPortal_MogwaiClock/code.py
diff --git a/PyPortal_MogwaiClock/fonts/DSEG-LICENSE.txt b/PyPortal/PyPortal_MogwaiClock/fonts/DSEG-LICENSE.txt
similarity index 100%
rename from PyPortal_MogwaiClock/fonts/DSEG-LICENSE.txt
rename to PyPortal/PyPortal_MogwaiClock/fonts/DSEG-LICENSE.txt
diff --git a/PyPortal_MogwaiClock/fonts/DSEG14ModernMiniBI-44.bdf b/PyPortal/PyPortal_MogwaiClock/fonts/DSEG14ModernMiniBI-44.bdf
similarity index 100%
rename from PyPortal_MogwaiClock/fonts/DSEG14ModernMiniBI-44.bdf
rename to PyPortal/PyPortal_MogwaiClock/fonts/DSEG14ModernMiniBI-44.bdf
diff --git a/PyPortal_MogwaiClock/gremlin_alarm.wav b/PyPortal/PyPortal_MogwaiClock/gremlin_alarm.wav
similarity index 100%
rename from PyPortal_MogwaiClock/gremlin_alarm.wav
rename to PyPortal/PyPortal_MogwaiClock/gremlin_alarm.wav
diff --git a/PyPortal_MogwaiClock/gremlin_background.bmp b/PyPortal/PyPortal_MogwaiClock/gremlin_background.bmp
similarity index 100%
rename from PyPortal_MogwaiClock/gremlin_background.bmp
rename to PyPortal/PyPortal_MogwaiClock/gremlin_background.bmp
diff --git a/PyPortal_MogwaiClock/mogwai_alarm.wav b/PyPortal/PyPortal_MogwaiClock/mogwai_alarm.wav
similarity index 100%
rename from PyPortal_MogwaiClock/mogwai_alarm.wav
rename to PyPortal/PyPortal_MogwaiClock/mogwai_alarm.wav
diff --git a/PyPortal_MogwaiClock/mogwai_background.bmp b/PyPortal/PyPortal_MogwaiClock/mogwai_background.bmp
similarity index 100%
rename from PyPortal_MogwaiClock/mogwai_background.bmp
rename to PyPortal/PyPortal_MogwaiClock/mogwai_background.bmp
diff --git a/PyPortal_MogwaiClock/pyportal_startup.bmp b/PyPortal/PyPortal_MogwaiClock/pyportal_startup.bmp
similarity index 100%
rename from PyPortal_MogwaiClock/pyportal_startup.bmp
rename to PyPortal/PyPortal_MogwaiClock/pyportal_startup.bmp
diff --git a/PyPortal_MogwaiClock/pyportal_startup.wav b/PyPortal/PyPortal_MogwaiClock/pyportal_startup.wav
similarity index 100%
rename from PyPortal_MogwaiClock/pyportal_startup.wav
rename to PyPortal/PyPortal_MogwaiClock/pyportal_startup.wav
diff --git a/PyPortal_MogwaiClock/thankyou.bmp b/PyPortal/PyPortal_MogwaiClock/thankyou.bmp
similarity index 100%
rename from PyPortal_MogwaiClock/thankyou.bmp
rename to PyPortal/PyPortal_MogwaiClock/thankyou.bmp
diff --git a/PyPortal_NASA/code.py b/PyPortal/PyPortal_NASA/code.py
similarity index 100%
rename from PyPortal_NASA/code.py
rename to PyPortal/PyPortal_NASA/code.py
diff --git a/PyPortal_NASA/fonts/Arial-12.bdf b/PyPortal/PyPortal_NASA/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_NASA/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_NASA/fonts/Arial-12.bdf
diff --git a/PyPortal_NASA/nasa_background.bmp b/PyPortal/PyPortal_NASA/nasa_background.bmp
similarity index 100%
rename from PyPortal_NASA/nasa_background.bmp
rename to PyPortal/PyPortal_NASA/nasa_background.bmp
diff --git a/PyPortal_NASA/unsafe_boot.py b/PyPortal/PyPortal_NASA/unsafe_boot.py
similarity index 100%
rename from PyPortal_NASA/unsafe_boot.py
rename to PyPortal/PyPortal_NASA/unsafe_boot.py
diff --git a/PyPortal_NeoPixel_Color_Picker/code.py b/PyPortal/PyPortal_NeoPixel_Color_Picker/code.py
similarity index 100%
rename from PyPortal_NeoPixel_Color_Picker/code.py
rename to PyPortal/PyPortal_NeoPixel_Color_Picker/code.py
diff --git a/PyPortal_NeoPixel_Color_Picker/secrets.py b/PyPortal/PyPortal_NeoPixel_Color_Picker/secrets.py
similarity index 100%
rename from PyPortal_NeoPixel_Color_Picker/secrets.py
rename to PyPortal/PyPortal_NeoPixel_Color_Picker/secrets.py
diff --git a/PyPortal_NewNewNew/code.py b/PyPortal/PyPortal_NewNewNew/code.py
similarity index 100%
rename from PyPortal_NewNewNew/code.py
rename to PyPortal/PyPortal_NewNewNew/code.py
diff --git a/PyPortal_NewNewNew/fonts/Arial-12.bdf b/PyPortal/PyPortal_NewNewNew/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_NewNewNew/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_NewNewNew/fonts/Arial-12.bdf
diff --git a/PyPortal_NewNewNew/fonts/Arial-Bold-12.bdf b/PyPortal/PyPortal_NewNewNew/fonts/Arial-Bold-12.bdf
similarity index 100%
rename from PyPortal_NewNewNew/fonts/Arial-Bold-12.bdf
rename to PyPortal/PyPortal_NewNewNew/fonts/Arial-Bold-12.bdf
diff --git a/PyPortal_NewNewNew/new_background.bmp b/PyPortal/PyPortal_NewNewNew/new_background.bmp
similarity index 100%
rename from PyPortal_NewNewNew/new_background.bmp
rename to PyPortal/PyPortal_NewNewNew/new_background.bmp
diff --git a/PyPortal_NewNewNew/unsafe_boot.py b/PyPortal/PyPortal_NewNewNew/unsafe_boot.py
similarity index 100%
rename from PyPortal_NewNewNew/unsafe_boot.py
rename to PyPortal/PyPortal_NewNewNew/unsafe_boot.py
diff --git a/PyPortal_ObliqueStrategies/code.py b/PyPortal/PyPortal_ObliqueStrategies/code.py
similarity index 100%
rename from PyPortal_ObliqueStrategies/code.py
rename to PyPortal/PyPortal_ObliqueStrategies/code.py
diff --git a/PyPortal_ObliqueStrategies/fonts/Arial-ItalicMT-17.bdf b/PyPortal/PyPortal_ObliqueStrategies/fonts/Arial-ItalicMT-17.bdf
similarity index 100%
rename from PyPortal_ObliqueStrategies/fonts/Arial-ItalicMT-17.bdf
rename to PyPortal/PyPortal_ObliqueStrategies/fonts/Arial-ItalicMT-17.bdf
diff --git a/PyPortal_ObliqueStrategies/strategies.py b/PyPortal/PyPortal_ObliqueStrategies/strategies.py
similarity index 100%
rename from PyPortal_ObliqueStrategies/strategies.py
rename to PyPortal/PyPortal_ObliqueStrategies/strategies.py
diff --git a/PyPortal_OpenWeather/code.py b/PyPortal/PyPortal_OpenWeather/code.py
similarity index 100%
rename from PyPortal_OpenWeather/code.py
rename to PyPortal/PyPortal_OpenWeather/code.py
diff --git a/PyPortal_OpenWeather/fonts/Arial-12.bdf b/PyPortal/PyPortal_OpenWeather/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_OpenWeather/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_OpenWeather/fonts/Arial-12.bdf
diff --git a/PyPortal_OpenWeather/fonts/Arial-16.bdf b/PyPortal/PyPortal_OpenWeather/fonts/Arial-16.bdf
similarity index 100%
rename from PyPortal_OpenWeather/fonts/Arial-16.bdf
rename to PyPortal/PyPortal_OpenWeather/fonts/Arial-16.bdf
diff --git a/PyPortal_OpenWeather/fonts/Arial-Bold-24.bdf b/PyPortal/PyPortal_OpenWeather/fonts/Arial-Bold-24.bdf
similarity index 100%
rename from PyPortal_OpenWeather/fonts/Arial-Bold-24.bdf
rename to PyPortal/PyPortal_OpenWeather/fonts/Arial-Bold-24.bdf
diff --git a/PyPortal_OpenWeather/icons/01d.bmp b/PyPortal/PyPortal_OpenWeather/icons/01d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/01d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/01d.bmp
diff --git a/PyPortal_OpenWeather/icons/01n.bmp b/PyPortal/PyPortal_OpenWeather/icons/01n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/01n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/01n.bmp
diff --git a/PyPortal_OpenWeather/icons/02d.bmp b/PyPortal/PyPortal_OpenWeather/icons/02d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/02d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/02d.bmp
diff --git a/PyPortal_OpenWeather/icons/02n.bmp b/PyPortal/PyPortal_OpenWeather/icons/02n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/02n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/02n.bmp
diff --git a/PyPortal_OpenWeather/icons/03d.bmp b/PyPortal/PyPortal_OpenWeather/icons/03d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/03d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/03d.bmp
diff --git a/PyPortal_OpenWeather/icons/03n.bmp b/PyPortal/PyPortal_OpenWeather/icons/03n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/03n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/03n.bmp
diff --git a/PyPortal_OpenWeather/icons/04d.bmp b/PyPortal/PyPortal_OpenWeather/icons/04d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/04d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/04d.bmp
diff --git a/PyPortal_OpenWeather/icons/04n.bmp b/PyPortal/PyPortal_OpenWeather/icons/04n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/04n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/04n.bmp
diff --git a/PyPortal_OpenWeather/icons/09d.bmp b/PyPortal/PyPortal_OpenWeather/icons/09d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/09d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/09d.bmp
diff --git a/PyPortal_OpenWeather/icons/09n.bmp b/PyPortal/PyPortal_OpenWeather/icons/09n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/09n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/09n.bmp
diff --git a/PyPortal_OpenWeather/icons/10d.bmp b/PyPortal/PyPortal_OpenWeather/icons/10d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/10d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/10d.bmp
diff --git a/PyPortal_OpenWeather/icons/10n.bmp b/PyPortal/PyPortal_OpenWeather/icons/10n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/10n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/10n.bmp
diff --git a/PyPortal_OpenWeather/icons/11d.bmp b/PyPortal/PyPortal_OpenWeather/icons/11d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/11d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/11d.bmp
diff --git a/PyPortal_OpenWeather/icons/11n.bmp b/PyPortal/PyPortal_OpenWeather/icons/11n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/11n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/11n.bmp
diff --git a/PyPortal_OpenWeather/icons/13d.bmp b/PyPortal/PyPortal_OpenWeather/icons/13d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/13d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/13d.bmp
diff --git a/PyPortal_OpenWeather/icons/13n.bmp b/PyPortal/PyPortal_OpenWeather/icons/13n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/13n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/13n.bmp
diff --git a/PyPortal_OpenWeather/icons/50d.bmp b/PyPortal/PyPortal_OpenWeather/icons/50d.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/50d.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/50d.bmp
diff --git a/PyPortal_OpenWeather/icons/50n.bmp b/PyPortal/PyPortal_OpenWeather/icons/50n.bmp
similarity index 100%
rename from PyPortal_OpenWeather/icons/50n.bmp
rename to PyPortal/PyPortal_OpenWeather/icons/50n.bmp
diff --git a/PyPortal_OpenWeather/openweather_graphics.py b/PyPortal/PyPortal_OpenWeather/openweather_graphics.py
similarity index 100%
rename from PyPortal_OpenWeather/openweather_graphics.py
rename to PyPortal/PyPortal_OpenWeather/openweather_graphics.py
diff --git a/PyPortal_OpenWeather/weather_background.bmp b/PyPortal/PyPortal_OpenWeather/weather_background.bmp
similarity index 100%
rename from PyPortal_OpenWeather/weather_background.bmp
rename to PyPortal/PyPortal_OpenWeather/weather_background.bmp
diff --git a/PyPortal_Philips_Hue_Controller/code.py b/PyPortal/PyPortal_Philips_Hue_Controller/code.py
similarity index 99%
rename from PyPortal_Philips_Hue_Controller/code.py
rename to PyPortal/PyPortal_Philips_Hue_Controller/code.py
index eda154651..4713eecef 100644
--- a/PyPortal_Philips_Hue_Controller/code.py
+++ b/PyPortal/PyPortal_Philips_Hue_Controller/code.py
@@ -64,7 +64,7 @@
# Make the display context
button_group = displayio.Group()
-board.DISPLAY.show(button_group)
+board.DISPLAY.root_group = button_group
# preload the font
print('loading font...')
font = bitmap_font.load_font("/fonts/Arial-12.bdf")
diff --git a/PyPortal_Philips_Hue_Controller/fonts/Arial-12.bdf b/PyPortal/PyPortal_Philips_Hue_Controller/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Philips_Hue_Controller/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Philips_Hue_Controller/fonts/Arial-12.bdf
diff --git a/PyPortal_Quarantine_Clock/code.py b/PyPortal/PyPortal_Quarantine_Clock/code.py
similarity index 100%
rename from PyPortal_Quarantine_Clock/code.py
rename to PyPortal/PyPortal_Quarantine_Clock/code.py
diff --git a/PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-24.bdf b/PyPortal/PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-24.bdf
similarity index 100%
rename from PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-24.bdf
rename to PyPortal/PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-24.bdf
diff --git a/PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-44.bdf b/PyPortal/PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-44.bdf
similarity index 100%
rename from PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-44.bdf
rename to PyPortal/PyPortal_Quarantine_Clock/fonts/Helvetica-Bold-44.bdf
diff --git a/PyPortal_Quarantine_Clock/month_clock/code.py b/PyPortal/PyPortal_Quarantine_Clock/month_clock/code.py
similarity index 100%
rename from PyPortal_Quarantine_Clock/month_clock/code.py
rename to PyPortal/PyPortal_Quarantine_Clock/month_clock/code.py
diff --git a/PyPortal_Quotes/code.py b/PyPortal/PyPortal_Quotes/code.py
similarity index 100%
rename from PyPortal_Quotes/code.py
rename to PyPortal/PyPortal_Quotes/code.py
diff --git a/PyPortal_Quotes/fonts/Arial-ItalicMT-17.bdf b/PyPortal/PyPortal_Quotes/fonts/Arial-ItalicMT-17.bdf
similarity index 100%
rename from PyPortal_Quotes/fonts/Arial-ItalicMT-17.bdf
rename to PyPortal/PyPortal_Quotes/fonts/Arial-ItalicMT-17.bdf
diff --git a/PyPortal_Quotes/quote_background.bmp b/PyPortal/PyPortal_Quotes/quote_background.bmp
similarity index 100%
rename from PyPortal_Quotes/quote_background.bmp
rename to PyPortal/PyPortal_Quotes/quote_background.bmp
diff --git a/PyPortal_Reddit/Coin.wav b/PyPortal/PyPortal_Reddit/Coin.wav
similarity index 100%
rename from PyPortal_Reddit/Coin.wav
rename to PyPortal/PyPortal_Reddit/Coin.wav
diff --git a/PyPortal_Reddit/code.py b/PyPortal/PyPortal_Reddit/code.py
similarity index 100%
rename from PyPortal_Reddit/code.py
rename to PyPortal/PyPortal_Reddit/code.py
diff --git a/PyPortal_Reddit/fonts/Collegiate-24.bdf b/PyPortal/PyPortal_Reddit/fonts/Collegiate-24.bdf
similarity index 100%
rename from PyPortal_Reddit/fonts/Collegiate-24.bdf
rename to PyPortal/PyPortal_Reddit/fonts/Collegiate-24.bdf
diff --git a/PyPortal_Reddit/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_Reddit/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_Reddit/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_Reddit/fonts/Collegiate-50.bdf
diff --git a/PyPortal_Reddit/reddit_background.bmp b/PyPortal/PyPortal_Reddit/reddit_background.bmp
similarity index 100%
rename from PyPortal_Reddit/reddit_background.bmp
rename to PyPortal/PyPortal_Reddit/reddit_background.bmp
diff --git a/PyPortal_Remote/code.py b/PyPortal/PyPortal_Remote/code.py
similarity index 99%
rename from PyPortal_Remote/code.py
rename to PyPortal/PyPortal_Remote/code.py
index fd5cde24c..7a1c24af9 100644
--- a/PyPortal_Remote/code.py
+++ b/PyPortal/PyPortal_Remote/code.py
@@ -212,7 +212,7 @@ def switchpage(tup):
page = page_1
page_vals = page_1_vals
-board.DISPLAY.show(my_display_group)
+board.DISPLAY.root_group = my_display_group
print("READY")
diff --git a/PyPortal_Remote/images/page_1.bmp b/PyPortal/PyPortal_Remote/images/page_1.bmp
similarity index 100%
rename from PyPortal_Remote/images/page_1.bmp
rename to PyPortal/PyPortal_Remote/images/page_1.bmp
diff --git a/PyPortal_Remote/images/page_2.bmp b/PyPortal/PyPortal_Remote/images/page_2.bmp
similarity index 100%
rename from PyPortal_Remote/images/page_2.bmp
rename to PyPortal/PyPortal_Remote/images/page_2.bmp
diff --git a/PyPortal_Remote/images/page_3.bmp b/PyPortal/PyPortal_Remote/images/page_3.bmp
similarity index 100%
rename from PyPortal_Remote/images/page_3.bmp
rename to PyPortal/PyPortal_Remote/images/page_3.bmp
diff --git a/PyPortal_Remote/source_images.zip b/PyPortal/PyPortal_Remote/source_images.zip
similarity index 100%
rename from PyPortal_Remote/source_images.zip
rename to PyPortal/PyPortal_Remote/source_images.zip
diff --git a/PyPortal_Smart_Switch/.circuitpython.skip b/PyPortal/PyPortal_Smart_Switch/.circuitpython.skip
similarity index 100%
rename from PyPortal_Smart_Switch/.circuitpython.skip
rename to PyPortal/PyPortal_Smart_Switch/.circuitpython.skip
diff --git a/PyPortal_Smart_Switch/background.bmp b/PyPortal/PyPortal_Smart_Switch/background.bmp
similarity index 100%
rename from PyPortal_Smart_Switch/background.bmp
rename to PyPortal/PyPortal_Smart_Switch/background.bmp
diff --git a/PyPortal_Smart_Switch/code.py b/PyPortal/PyPortal_Smart_Switch/code.py
similarity index 100%
rename from PyPortal_Smart_Switch/code.py
rename to PyPortal/PyPortal_Smart_Switch/code.py
diff --git a/PyPortal_Smart_Switch/fonts/RobotoMono-18.bdf b/PyPortal/PyPortal_Smart_Switch/fonts/RobotoMono-18.bdf
similarity index 100%
rename from PyPortal_Smart_Switch/fonts/RobotoMono-18.bdf
rename to PyPortal/PyPortal_Smart_Switch/fonts/RobotoMono-18.bdf
diff --git a/PyPortal_Smart_Switch/fonts/RobotoMono-72.bdf b/PyPortal/PyPortal_Smart_Switch/fonts/RobotoMono-72.bdf
similarity index 100%
rename from PyPortal_Smart_Switch/fonts/RobotoMono-72.bdf
rename to PyPortal/PyPortal_Smart_Switch/fonts/RobotoMono-72.bdf
diff --git a/PyPortal_Smart_Switch/secrets.py b/PyPortal/PyPortal_Smart_Switch/secrets.py
similarity index 100%
rename from PyPortal_Smart_Switch/secrets.py
rename to PyPortal/PyPortal_Smart_Switch/secrets.py
diff --git a/PyPortal_Smart_Thermometer/.circuitpython.skip b/PyPortal/PyPortal_Smart_Thermometer/.circuitpython.skip
similarity index 100%
rename from PyPortal_Smart_Thermometer/.circuitpython.skip
rename to PyPortal/PyPortal_Smart_Thermometer/.circuitpython.skip
diff --git a/PyPortal_Smart_Thermometer/code.py b/PyPortal/PyPortal_Smart_Thermometer/code.py
similarity index 100%
rename from PyPortal_Smart_Thermometer/code.py
rename to PyPortal/PyPortal_Smart_Thermometer/code.py
diff --git a/PyPortal_Smart_Thermometer/Nunito-Black-17.bdf b/PyPortal/PyPortal_Smart_Thermometer/fonts/Nunito-Black-17.bdf
similarity index 100%
rename from PyPortal_Smart_Thermometer/Nunito-Black-17.bdf
rename to PyPortal/PyPortal_Smart_Thermometer/fonts/Nunito-Black-17.bdf
diff --git a/PyPortal_Smart_Thermometer/Nunito-Light-75.bdf b/PyPortal/PyPortal_Smart_Thermometer/fonts/Nunito-Light-75.bdf
similarity index 100%
rename from PyPortal_Smart_Thermometer/Nunito-Light-75.bdf
rename to PyPortal/PyPortal_Smart_Thermometer/fonts/Nunito-Light-75.bdf
diff --git a/PyPortal_Smart_Thermometer/pyportal_splash.bmp b/PyPortal/PyPortal_Smart_Thermometer/icons/pyportal_splash.bmp
similarity index 100%
rename from PyPortal_Smart_Thermometer/pyportal_splash.bmp
rename to PyPortal/PyPortal_Smart_Thermometer/icons/pyportal_splash.bmp
diff --git a/PyPortal_Smart_Thermometer/thermometer_helper.py b/PyPortal/PyPortal_Smart_Thermometer/thermometer_helper.py
similarity index 89%
rename from PyPortal_Smart_Thermometer/thermometer_helper.py
rename to PyPortal/PyPortal_Smart_Thermometer/thermometer_helper.py
index e016f641d..1786f253e 100644
--- a/PyPortal_Smart_Thermometer/thermometer_helper.py
+++ b/PyPortal/PyPortal_Smart_Thermometer/thermometer_helper.py
@@ -25,7 +25,7 @@ def __init__(self, celsius=True, usa_date=True):
"""
# root displayio group
root_group = displayio.Group()
- board.DISPLAY.show(root_group)
+ board.DISPLAY.root_group = root_group
super().__init__()
self._celsius = celsius
@@ -33,7 +33,7 @@ def __init__(self, celsius=True, usa_date=True):
# create background icon group
self._icon_group = displayio.Group()
- board.DISPLAY.show(self._icon_group)
+ board.DISPLAY.root_group = self._icon_group
# create text object group
self._text_group = displayio.Group()
@@ -82,7 +82,7 @@ def __init__(self, celsius=True, usa_date=True):
self.io_status_text.y = 220
self._text_group.append(self.io_status_text)
- board.DISPLAY.show(self._text_group)
+ board.DISPLAY.root_group = self._text_group
def display_date_time(self, io_time):
@@ -136,13 +136,13 @@ def set_icon(self, filename):
self._icon_file.close()
# CircuitPython 6 & 7 compatible
- self._icon_file = open(filename, "rb")
- icon = displayio.OnDiskBitmap(self._icon_file)
- self._icon_sprite = displayio.TileGrid(icon,
- pixel_shader=getattr(icon, 'pixel_shader', displayio.ColorConverter()))
+ # self._icon_file = open(filename, "rb")
+ # icon = displayio.OnDiskBitmap(self._icon_file)
+ # self._icon_sprite = displayio.TileGrid(icon,
+ # pixel_shader=getattr(icon, 'pixel_shader', displayio.ColorConverter()))
# # CircuitPython 7+ compatible
- # icon = displayio.OnDiskBitmap(filename)
- # self._icon_sprite = displayio.TileGrid(icon, pixel_shader=icon.pixel_shader)
+ icon = displayio.OnDiskBitmap(filename)
+ self._icon_sprite = displayio.TileGrid(icon, pixel_shader=icon.pixel_shader)
self._icon_group.append(self._icon_sprite)
diff --git a/PyPortal_Stand/PyPortal Stand.f3d b/PyPortal/PyPortal_Stand/PyPortal Stand.f3d
similarity index 100%
rename from PyPortal_Stand/PyPortal Stand.f3d
rename to PyPortal/PyPortal_Stand/PyPortal Stand.f3d
diff --git a/PyPortal_Stand/PyPortal Stand.step b/PyPortal/PyPortal_Stand/PyPortal Stand.step
similarity index 100%
rename from PyPortal_Stand/PyPortal Stand.step
rename to PyPortal/PyPortal_Stand/PyPortal Stand.step
diff --git a/PyPortal_Stand/pyportal-stand-b.stl b/PyPortal/PyPortal_Stand/pyportal-stand-b.stl
similarity index 100%
rename from PyPortal_Stand/pyportal-stand-b.stl
rename to PyPortal/PyPortal_Stand/pyportal-stand-b.stl
diff --git a/PyPortal_Stand/pyportal-stand-horz.stl b/PyPortal/PyPortal_Stand/pyportal-stand-horz.stl
similarity index 100%
rename from PyPortal_Stand/pyportal-stand-horz.stl
rename to PyPortal/PyPortal_Stand/pyportal-stand-horz.stl
diff --git a/PyPortal_Stand/pyportal-stand-vert.stl b/PyPortal/PyPortal_Stand/pyportal-stand-vert.stl
similarity index 100%
rename from PyPortal_Stand/pyportal-stand-vert.stl
rename to PyPortal/PyPortal_Stand/pyportal-stand-vert.stl
diff --git a/PyPortal_TOTP_Friend/code.py b/PyPortal/PyPortal_TOTP_Friend/code.py
similarity index 99%
rename from PyPortal_TOTP_Friend/code.py
rename to PyPortal/PyPortal_TOTP_Friend/code.py
index d209f8c75..99cceb019 100644
--- a/PyPortal_TOTP_Friend/code.py
+++ b/PyPortal/PyPortal_TOTP_Friend/code.py
@@ -165,7 +165,7 @@ def display_otp_key(secret_name, secret_otp):
# Root DisplayIO
root_group = displayio.Group()
-display.show(root_group)
+display.root_group = root_group
BACKGROUND = BACKGROUND if isinstance(BACKGROUND, int) else 0x0
bg_bitmap = displayio.Bitmap(display.width, display.height, 1)
@@ -195,7 +195,7 @@ def display_otp_key(secret_name, secret_otp):
splash.append(key_group)
# Show the group
-display.show(splash)
+display.root_group = splash
print("Connecting to AP...")
while not esp.is_connected:
diff --git a/PyPortal_TOTP_Friend/secrets.py b/PyPortal/PyPortal_TOTP_Friend/secrets.py
similarity index 100%
rename from PyPortal_TOTP_Friend/secrets.py
rename to PyPortal/PyPortal_TOTP_Friend/secrets.py
diff --git a/PyPortal_Thingiverse/code.py b/PyPortal/PyPortal_Thingiverse/code.py
similarity index 100%
rename from PyPortal_Thingiverse/code.py
rename to PyPortal/PyPortal_Thingiverse/code.py
diff --git a/PyPortal_Thingiverse/fonts/Arial-12.bdf b/PyPortal/PyPortal_Thingiverse/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Thingiverse/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Thingiverse/fonts/Arial-12.bdf
diff --git a/PyPortal_Thingiverse/thingiverse_background.bmp b/PyPortal/PyPortal_Thingiverse/thingiverse_background.bmp
similarity index 100%
rename from PyPortal_Thingiverse/thingiverse_background.bmp
rename to PyPortal/PyPortal_Thingiverse/thingiverse_background.bmp
diff --git a/PyPortal_Thingiverse/unsafe_boot.py b/PyPortal/PyPortal_Thingiverse/unsafe_boot.py
similarity index 100%
rename from PyPortal_Thingiverse/unsafe_boot.py
rename to PyPortal/PyPortal_Thingiverse/unsafe_boot.py
diff --git a/PyPortal_Tides/admiralty_tides/code.py b/PyPortal/PyPortal_Tides/admiralty_tides/code.py
similarity index 100%
rename from PyPortal_Tides/admiralty_tides/code.py
rename to PyPortal/PyPortal_Tides/admiralty_tides/code.py
diff --git a/PyPortal_Tides/admiralty_tides/fonts/Arial-12.bdf b/PyPortal/PyPortal_Tides/admiralty_tides/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Tides/admiralty_tides/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Tides/admiralty_tides/fonts/Arial-12.bdf
diff --git a/PyPortal_Tides/admiralty_tides/fonts/cq-mono-30.bdf b/PyPortal/PyPortal_Tides/admiralty_tides/fonts/cq-mono-30.bdf
similarity index 100%
rename from PyPortal_Tides/admiralty_tides/fonts/cq-mono-30.bdf
rename to PyPortal/PyPortal_Tides/admiralty_tides/fonts/cq-mono-30.bdf
diff --git a/PyPortal_Tides/admiralty_tides/images/tides_bg.bmp b/PyPortal/PyPortal_Tides/admiralty_tides/images/tides_bg.bmp
similarity index 100%
rename from PyPortal_Tides/admiralty_tides/images/tides_bg.bmp
rename to PyPortal/PyPortal_Tides/admiralty_tides/images/tides_bg.bmp
diff --git a/PyPortal_Tides/admiralty_tides_graphical/code.py b/PyPortal/PyPortal_Tides/admiralty_tides_graphical/code.py
similarity index 100%
rename from PyPortal_Tides/admiralty_tides_graphical/code.py
rename to PyPortal/PyPortal_Tides/admiralty_tides_graphical/code.py
diff --git a/PyPortal_Tides/admiralty_tides_graphical/fonts/mono-bold-8.bdf b/PyPortal/PyPortal_Tides/admiralty_tides_graphical/fonts/mono-bold-8.bdf
similarity index 100%
rename from PyPortal_Tides/admiralty_tides_graphical/fonts/mono-bold-8.bdf
rename to PyPortal/PyPortal_Tides/admiralty_tides_graphical/fonts/mono-bold-8.bdf
diff --git a/PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph.bmp b/PyPortal/PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph.bmp
similarity index 100%
rename from PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph.bmp
rename to PyPortal/PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph.bmp
diff --git a/PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph_480-320.bmp b/PyPortal/PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph_480-320.bmp
similarity index 100%
rename from PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph_480-320.bmp
rename to PyPortal/PyPortal_Tides/admiralty_tides_graphical/images/tides_bg_graph_480-320.bmp
diff --git a/PyPortal_Tides/pp_tides/code.py b/PyPortal/PyPortal_Tides/pp_tides/code.py
similarity index 100%
rename from PyPortal_Tides/pp_tides/code.py
rename to PyPortal/PyPortal_Tides/pp_tides/code.py
diff --git a/PyPortal_Tides/pp_tides/fonts/Arial-12.bdf b/PyPortal/PyPortal_Tides/pp_tides/fonts/Arial-12.bdf
similarity index 100%
rename from PyPortal_Tides/pp_tides/fonts/Arial-12.bdf
rename to PyPortal/PyPortal_Tides/pp_tides/fonts/Arial-12.bdf
diff --git a/PyPortal_Tides/pp_tides/fonts/cq-mono-30.bdf b/PyPortal/PyPortal_Tides/pp_tides/fonts/cq-mono-30.bdf
similarity index 100%
rename from PyPortal_Tides/pp_tides/fonts/cq-mono-30.bdf
rename to PyPortal/PyPortal_Tides/pp_tides/fonts/cq-mono-30.bdf
diff --git a/PyPortal_Tides/pp_tides/images/tides_bg.bmp b/PyPortal/PyPortal_Tides/pp_tides/images/tides_bg.bmp
similarity index 100%
rename from PyPortal_Tides/pp_tides/images/tides_bg.bmp
rename to PyPortal/PyPortal_Tides/pp_tides/images/tides_bg.bmp
diff --git a/PyPortal_Tides/pp_tides_graphical/code.py b/PyPortal/PyPortal_Tides/pp_tides_graphical/code.py
similarity index 100%
rename from PyPortal_Tides/pp_tides_graphical/code.py
rename to PyPortal/PyPortal_Tides/pp_tides_graphical/code.py
diff --git a/PyPortal_Tides/pp_tides_graphical/fonts/mono-bold-8.bdf b/PyPortal/PyPortal_Tides/pp_tides_graphical/fonts/mono-bold-8.bdf
similarity index 100%
rename from PyPortal_Tides/pp_tides_graphical/fonts/mono-bold-8.bdf
rename to PyPortal/PyPortal_Tides/pp_tides_graphical/fonts/mono-bold-8.bdf
diff --git a/PyPortal_Tides/pp_tides_graphical/images/tides_bg_graph.bmp b/PyPortal/PyPortal_Tides/pp_tides_graphical/images/tides_bg_graph.bmp
similarity index 100%
rename from PyPortal_Tides/pp_tides_graphical/images/tides_bg_graph.bmp
rename to PyPortal/PyPortal_Tides/pp_tides_graphical/images/tides_bg_graph.bmp
diff --git a/PyPortal_Titano_ArduinoSelfTest/.pyportal.test.only b/PyPortal/PyPortal_Titano_ArduinoSelfTest/.pyportal.test.only
similarity index 100%
rename from PyPortal_Titano_ArduinoSelfTest/.pyportal.test.only
rename to PyPortal/PyPortal_Titano_ArduinoSelfTest/.pyportal.test.only
diff --git a/PyPortal_Titano_ArduinoSelfTest/PyPortal_Titano_ArduinoSelfTest.ino b/PyPortal/PyPortal_Titano_ArduinoSelfTest/PyPortal_Titano_ArduinoSelfTest.ino
similarity index 100%
rename from PyPortal_Titano_ArduinoSelfTest/PyPortal_Titano_ArduinoSelfTest.ino
rename to PyPortal/PyPortal_Titano_ArduinoSelfTest/PyPortal_Titano_ArduinoSelfTest.ino
diff --git a/PyPortal_Titano_ArduinoSelfTest/click.h b/PyPortal/PyPortal_Titano_ArduinoSelfTest/click.h
similarity index 100%
rename from PyPortal_Titano_ArduinoSelfTest/click.h
rename to PyPortal/PyPortal_Titano_ArduinoSelfTest/click.h
diff --git a/PyPortal_Titano_Weather_Station/.circuitpython.skip b/PyPortal/PyPortal_Titano_Weather_Station/.circuitpython.skip
similarity index 100%
rename from PyPortal_Titano_Weather_Station/.circuitpython.skip
rename to PyPortal/PyPortal_Titano_Weather_Station/.circuitpython.skip
diff --git a/PyPortal_Titano_Weather_Station/calendar.py b/PyPortal/PyPortal_Titano_Weather_Station/calendar.py
similarity index 100%
rename from PyPortal_Titano_Weather_Station/calendar.py
rename to PyPortal/PyPortal_Titano_Weather_Station/calendar.py
diff --git a/PyPortal_Titano_Weather_Station/code.py b/PyPortal/PyPortal_Titano_Weather_Station/code.py
similarity index 100%
rename from PyPortal_Titano_Weather_Station/code.py
rename to PyPortal/PyPortal_Titano_Weather_Station/code.py
diff --git a/PyPortal_Titano_Weather_Station/eatBMP.bmp b/PyPortal/PyPortal_Titano_Weather_Station/eatBMP.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/eatBMP.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/eatBMP.bmp
diff --git a/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-24.bdf b/PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-24.bdf
similarity index 100%
rename from PyPortal_Titano_Weather_Station/fonts/EffectsEighty-24.bdf
rename to PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-24.bdf
diff --git a/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-32.bdf b/PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-32.bdf
similarity index 100%
rename from PyPortal_Titano_Weather_Station/fonts/EffectsEighty-32.bdf
rename to PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-32.bdf
diff --git a/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-48.bdf b/PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-48.bdf
similarity index 100%
rename from PyPortal_Titano_Weather_Station/fonts/EffectsEighty-48.bdf
rename to PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEighty-48.bdf
diff --git a/PyPortal_Titano_Weather_Station/fonts/EffectsEightyBold-68.bdf b/PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEightyBold-68.bdf
similarity index 100%
rename from PyPortal_Titano_Weather_Station/fonts/EffectsEightyBold-68.bdf
rename to PyPortal/PyPortal_Titano_Weather_Station/fonts/EffectsEightyBold-68.bdf
diff --git a/PyPortal_Titano_Weather_Station/icons/01d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/01d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/01d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/01d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/01n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/01n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/01n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/01n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/02d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/02d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/02d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/02d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/02n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/02n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/02n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/02n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/03d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/03d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/03d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/03d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/03n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/03n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/03n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/03n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/04d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/04d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/04d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/04d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/04n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/04n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/04n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/04n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/09d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/09d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/09d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/09d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/09n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/09n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/09n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/09n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/10d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/10d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/10d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/10d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/10n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/10n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/10n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/10n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/11d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/11d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/11d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/11d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/11n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/11n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/11n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/11n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/13d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/13d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/13d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/13d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/13n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/13n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/13n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/13n.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/50d.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/50d.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/50d.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/50d.bmp
diff --git a/PyPortal_Titano_Weather_Station/icons/50n.bmp b/PyPortal/PyPortal_Titano_Weather_Station/icons/50n.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/icons/50n.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/icons/50n.bmp
diff --git a/PyPortal_Titano_Weather_Station/openweather_graphics.py b/PyPortal/PyPortal_Titano_Weather_Station/openweather_graphics.py
similarity index 100%
rename from PyPortal_Titano_Weather_Station/openweather_graphics.py
rename to PyPortal/PyPortal_Titano_Weather_Station/openweather_graphics.py
diff --git a/PyPortal_Titano_Weather_Station/pyportal_startup.bmp b/PyPortal/PyPortal_Titano_Weather_Station/pyportal_startup.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/pyportal_startup.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/pyportal_startup.bmp
diff --git a/PyPortal_Titano_Weather_Station/secrets.py b/PyPortal/PyPortal_Titano_Weather_Station/secrets.py
similarity index 100%
rename from PyPortal_Titano_Weather_Station/secrets.py
rename to PyPortal/PyPortal_Titano_Weather_Station/secrets.py
diff --git a/PyPortal_Titano_Weather_Station/sleepBMP.bmp b/PyPortal/PyPortal_Titano_Weather_Station/sleepBMP.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/sleepBMP.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/sleepBMP.bmp
diff --git a/PyPortal_Titano_Weather_Station/sounds/eat.wav b/PyPortal/PyPortal_Titano_Weather_Station/sounds/eat.wav
similarity index 100%
rename from PyPortal_Titano_Weather_Station/sounds/eat.wav
rename to PyPortal/PyPortal_Titano_Weather_Station/sounds/eat.wav
diff --git a/PyPortal_Titano_Weather_Station/sounds/sleep.wav b/PyPortal/PyPortal_Titano_Weather_Station/sounds/sleep.wav
similarity index 100%
rename from PyPortal_Titano_Weather_Station/sounds/sleep.wav
rename to PyPortal/PyPortal_Titano_Weather_Station/sounds/sleep.wav
diff --git a/PyPortal_Titano_Weather_Station/sounds/trash.wav b/PyPortal/PyPortal_Titano_Weather_Station/sounds/trash.wav
similarity index 100%
rename from PyPortal_Titano_Weather_Station/sounds/trash.wav
rename to PyPortal/PyPortal_Titano_Weather_Station/sounds/trash.wav
diff --git a/PyPortal_Titano_Weather_Station/trashBMP.bmp b/PyPortal/PyPortal_Titano_Weather_Station/trashBMP.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/trashBMP.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/trashBMP.bmp
diff --git a/PyPortal_Titano_Weather_Station/weather_background.bmp b/PyPortal/PyPortal_Titano_Weather_Station/weather_background.bmp
similarity index 100%
rename from PyPortal_Titano_Weather_Station/weather_background.bmp
rename to PyPortal/PyPortal_Titano_Weather_Station/weather_background.bmp
diff --git a/PyPortal_Trivia_Time/code.py b/PyPortal/PyPortal_Trivia_Time/code.py
similarity index 100%
rename from PyPortal_Trivia_Time/code.py
rename to PyPortal/PyPortal_Trivia_Time/code.py
diff --git a/PyPortal_Trivia_Time/fonts/Arial-ItalicMT-17.bdf b/PyPortal/PyPortal_Trivia_Time/fonts/Arial-ItalicMT-17.bdf
similarity index 100%
rename from PyPortal_Trivia_Time/fonts/Arial-ItalicMT-17.bdf
rename to PyPortal/PyPortal_Trivia_Time/fonts/Arial-ItalicMT-17.bdf
diff --git a/PyPortal_Trivia_Time/trivia.bmp b/PyPortal/PyPortal_Trivia_Time/trivia.bmp
similarity index 100%
rename from PyPortal_Trivia_Time/trivia.bmp
rename to PyPortal/PyPortal_Trivia_Time/trivia.bmp
diff --git a/PyPortal_Trivia_Time/trivia_title.bmp b/PyPortal/PyPortal_Trivia_Time/trivia_title.bmp
similarity index 100%
rename from PyPortal_Trivia_Time/trivia_title.bmp
rename to PyPortal/PyPortal_Trivia_Time/trivia_title.bmp
diff --git a/PyPortal_Twin_Peaks/README.md b/PyPortal/PyPortal_Twin_Peaks/README.md
similarity index 100%
rename from PyPortal_Twin_Peaks/README.md
rename to PyPortal/PyPortal_Twin_Peaks/README.md
diff --git a/PyPortal_Twin_Peaks/code.py b/PyPortal/PyPortal_Twin_Peaks/code.py
similarity index 100%
rename from PyPortal_Twin_Peaks/code.py
rename to PyPortal/PyPortal_Twin_Peaks/code.py
diff --git a/PyPortal_Twin_Peaks/gottaLight.wav b/PyPortal/PyPortal_Twin_Peaks/gottaLight.wav
similarity index 100%
rename from PyPortal_Twin_Peaks/gottaLight.wav
rename to PyPortal/PyPortal_Twin_Peaks/gottaLight.wav
diff --git a/PyPortal_Twin_Peaks/laura.bmp b/PyPortal/PyPortal_Twin_Peaks/laura.bmp
similarity index 100%
rename from PyPortal_Twin_Peaks/laura.bmp
rename to PyPortal/PyPortal_Twin_Peaks/laura.bmp
diff --git a/PyPortal_Twin_Peaks/woodsman.bmp b/PyPortal/PyPortal_Twin_Peaks/woodsman.bmp
similarity index 100%
rename from PyPortal_Twin_Peaks/woodsman.bmp
rename to PyPortal/PyPortal_Twin_Peaks/woodsman.bmp
diff --git a/PyPortal_TwitterFollowers/Coin.wav b/PyPortal/PyPortal_TwitterFollowers/Coin.wav
similarity index 100%
rename from PyPortal_TwitterFollowers/Coin.wav
rename to PyPortal/PyPortal_TwitterFollowers/Coin.wav
diff --git a/PyPortal_TwitterFollowers/code.py b/PyPortal/PyPortal_TwitterFollowers/code.py
similarity index 100%
rename from PyPortal_TwitterFollowers/code.py
rename to PyPortal/PyPortal_TwitterFollowers/code.py
diff --git a/PyPortal_TwitterFollowers/fonts/Collegiate-24.bdf b/PyPortal/PyPortal_TwitterFollowers/fonts/Collegiate-24.bdf
similarity index 100%
rename from PyPortal_TwitterFollowers/fonts/Collegiate-24.bdf
rename to PyPortal/PyPortal_TwitterFollowers/fonts/Collegiate-24.bdf
diff --git a/PyPortal_TwitterFollowers/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_TwitterFollowers/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_TwitterFollowers/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_TwitterFollowers/fonts/Collegiate-50.bdf
diff --git a/PyPortal_TwitterFollowers/twitter_background.bmp b/PyPortal/PyPortal_TwitterFollowers/twitter_background.bmp
similarity index 100%
rename from PyPortal_TwitterFollowers/twitter_background.bmp
rename to PyPortal/PyPortal_TwitterFollowers/twitter_background.bmp
diff --git a/PyPortal_TwitterPlayer/backgrounds/mybrothercomesnow.bmp b/PyPortal/PyPortal_TwitterPlayer/backgrounds/mybrothercomesnow.bmp
similarity index 100%
rename from PyPortal_TwitterPlayer/backgrounds/mybrothercomesnow.bmp
rename to PyPortal/PyPortal_TwitterPlayer/backgrounds/mybrothercomesnow.bmp
diff --git a/PyPortal_TwitterPlayer/backgrounds/whatsinthebox.bmp b/PyPortal/PyPortal_TwitterPlayer/backgrounds/whatsinthebox.bmp
similarity index 100%
rename from PyPortal_TwitterPlayer/backgrounds/whatsinthebox.bmp
rename to PyPortal/PyPortal_TwitterPlayer/backgrounds/whatsinthebox.bmp
diff --git a/PyPortal_TwitterPlayer/fonts/Arial-Italic-12.bdf b/PyPortal/PyPortal_TwitterPlayer/fonts/Arial-Italic-12.bdf
similarity index 100%
rename from PyPortal_TwitterPlayer/fonts/Arial-Italic-12.bdf
rename to PyPortal/PyPortal_TwitterPlayer/fonts/Arial-Italic-12.bdf
diff --git a/PyPortal_TwitterPlayer/twitterplayer.py b/PyPortal/PyPortal_TwitterPlayer/twitterplayer.py
similarity index 100%
rename from PyPortal_TwitterPlayer/twitterplayer.py
rename to PyPortal/PyPortal_TwitterPlayer/twitterplayer.py
diff --git a/PyPortal_UV_Index/code.py b/PyPortal/PyPortal_UV_Index/code.py
similarity index 100%
rename from PyPortal_UV_Index/code.py
rename to PyPortal/PyPortal_UV_Index/code.py
diff --git a/PyPortal_UV_Index/fonts/Arial-Bold-12.bdf b/PyPortal/PyPortal_UV_Index/fonts/Arial-Bold-12.bdf
similarity index 100%
rename from PyPortal_UV_Index/fonts/Arial-Bold-12.bdf
rename to PyPortal/PyPortal_UV_Index/fonts/Arial-Bold-12.bdf
diff --git a/PyPortal_UV_Index/fonts/Helvetica-Bold-16.bdf b/PyPortal/PyPortal_UV_Index/fonts/Helvetica-Bold-16.bdf
similarity index 100%
rename from PyPortal_UV_Index/fonts/Helvetica-Bold-16.bdf
rename to PyPortal/PyPortal_UV_Index/fonts/Helvetica-Bold-16.bdf
diff --git a/PyPortal_UV_Index/secrets.py b/PyPortal/PyPortal_UV_Index/secrets.py
similarity index 100%
rename from PyPortal_UV_Index/secrets.py
rename to PyPortal/PyPortal_UV_Index/secrets.py
diff --git a/PyPortal_User_Interface/.circuitpython.skip b/PyPortal/PyPortal_User_Interface/.circuitpython.skip
similarity index 100%
rename from PyPortal_User_Interface/.circuitpython.skip
rename to PyPortal/PyPortal_User_Interface/.circuitpython.skip
diff --git a/PyPortal_User_Interface/code.py b/PyPortal/PyPortal_User_Interface/code.py
similarity index 99%
rename from PyPortal_User_Interface/code.py
rename to PyPortal/PyPortal_User_Interface/code.py
index a4682fde2..4feee76fe 100644
--- a/PyPortal_User_Interface/code.py
+++ b/PyPortal/PyPortal_User_Interface/code.py
@@ -422,7 +422,7 @@ def switch_view(what_view):
28,
)
-board.DISPLAY.show(splash)
+board.DISPLAY.root_group = splash
# ------------- Code Loop ------------- #
diff --git a/PyPortal_User_Interface/fonts/Helvetica-Bold-16.bdf b/PyPortal/PyPortal_User_Interface/fonts/Helvetica-Bold-16.bdf
similarity index 100%
rename from PyPortal_User_Interface/fonts/Helvetica-Bold-16.bdf
rename to PyPortal/PyPortal_User_Interface/fonts/Helvetica-Bold-16.bdf
diff --git a/PyPortal_User_Interface/images/BGimage.bmp b/PyPortal/PyPortal_User_Interface/images/BGimage.bmp
similarity index 100%
rename from PyPortal_User_Interface/images/BGimage.bmp
rename to PyPortal/PyPortal_User_Interface/images/BGimage.bmp
diff --git a/PyPortal_User_Interface/images/Billie.bmp b/PyPortal/PyPortal_User_Interface/images/Billie.bmp
similarity index 100%
rename from PyPortal_User_Interface/images/Billie.bmp
rename to PyPortal/PyPortal_User_Interface/images/Billie.bmp
diff --git a/PyPortal_User_Interface/images/Gus.bmp b/PyPortal/PyPortal_User_Interface/images/Gus.bmp
similarity index 100%
rename from PyPortal_User_Interface/images/Gus.bmp
rename to PyPortal/PyPortal_User_Interface/images/Gus.bmp
diff --git a/PyPortal_User_Interface/images/Ruby.bmp b/PyPortal/PyPortal_User_Interface/images/Ruby.bmp
similarity index 100%
rename from PyPortal_User_Interface/images/Ruby.bmp
rename to PyPortal/PyPortal_User_Interface/images/Ruby.bmp
diff --git a/PyPortal_User_Interface/images/loading.bmp b/PyPortal/PyPortal_User_Interface/images/loading.bmp
similarity index 100%
rename from PyPortal_User_Interface/images/loading.bmp
rename to PyPortal/PyPortal_User_Interface/images/loading.bmp
diff --git a/PyPortal_User_Interface/secrets.py b/PyPortal/PyPortal_User_Interface/secrets.py
similarity index 100%
rename from PyPortal_User_Interface/secrets.py
rename to PyPortal/PyPortal_User_Interface/secrets.py
diff --git a/PyPortal_User_Interface/sounds/beep.wav b/PyPortal/PyPortal_User_Interface/sounds/beep.wav
similarity index 100%
rename from PyPortal_User_Interface/sounds/beep.wav
rename to PyPortal/PyPortal_User_Interface/sounds/beep.wav
diff --git a/PyPortal_User_Interface/sounds/sound.wav b/PyPortal/PyPortal_User_Interface/sounds/sound.wav
similarity index 100%
rename from PyPortal_User_Interface/sounds/sound.wav
rename to PyPortal/PyPortal_User_Interface/sounds/sound.wav
diff --git a/PyPortal_User_Interface/sounds/tab.wav b/PyPortal/PyPortal_User_Interface/sounds/tab.wav
similarity index 100%
rename from PyPortal_User_Interface/sounds/tab.wav
rename to PyPortal/PyPortal_User_Interface/sounds/tab.wav
diff --git a/PyPortal_ViewMaster/.circuitpython.skip b/PyPortal/PyPortal_ViewMaster/.circuitpython.skip
similarity index 100%
rename from PyPortal_ViewMaster/.circuitpython.skip
rename to PyPortal/PyPortal_ViewMaster/.circuitpython.skip
diff --git a/PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.f3d b/PyPortal/PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.f3d
similarity index 100%
rename from PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.f3d
rename to PyPortal/PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.f3d
diff --git a/PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.step b/PyPortal/PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.step
similarity index 100%
rename from PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.step
rename to PyPortal/PyPortal_ViewMaster/CAD/PyPortal_ViewMaster.step
diff --git a/PyPortal_ViewMaster/CAD/pypvm-cover.stl b/PyPortal/PyPortal_ViewMaster/CAD/pypvm-cover.stl
similarity index 100%
rename from PyPortal_ViewMaster/CAD/pypvm-cover.stl
rename to PyPortal/PyPortal_ViewMaster/CAD/pypvm-cover.stl
diff --git a/PyPortal_ViewMaster/CAD/pypvm-crank-holder.stl b/PyPortal/PyPortal_ViewMaster/CAD/pypvm-crank-holder.stl
similarity index 100%
rename from PyPortal_ViewMaster/CAD/pypvm-crank-holder.stl
rename to PyPortal/PyPortal_ViewMaster/CAD/pypvm-crank-holder.stl
diff --git a/PyPortal_ViewMaster/CAD/pypvm-crank.stl b/PyPortal/PyPortal_ViewMaster/CAD/pypvm-crank.stl
similarity index 100%
rename from PyPortal_ViewMaster/CAD/pypvm-crank.stl
rename to PyPortal/PyPortal_ViewMaster/CAD/pypvm-crank.stl
diff --git a/PyPortal_ViewMaster/CAD/pypvm-eyepiece-side.stl b/PyPortal/PyPortal_ViewMaster/CAD/pypvm-eyepiece-side.stl
similarity index 100%
rename from PyPortal_ViewMaster/CAD/pypvm-eyepiece-side.stl
rename to PyPortal/PyPortal_ViewMaster/CAD/pypvm-eyepiece-side.stl
diff --git a/PyPortal_ViewMaster/CAD/pypvm-eyepiece.stl b/PyPortal/PyPortal_ViewMaster/CAD/pypvm-eyepiece.stl
similarity index 100%
rename from PyPortal_ViewMaster/CAD/pypvm-eyepiece.stl
rename to PyPortal/PyPortal_ViewMaster/CAD/pypvm-eyepiece.stl
diff --git a/PyPortal_ViewMaster/CAD/pypvm-frame.stl b/PyPortal/PyPortal_ViewMaster/CAD/pypvm-frame.stl
similarity index 100%
rename from PyPortal_ViewMaster/CAD/pypvm-frame.stl
rename to PyPortal/PyPortal_ViewMaster/CAD/pypvm-frame.stl
diff --git a/PyPortal_ViewMaster/CAD/pypvm-lid.stl b/PyPortal/PyPortal_ViewMaster/CAD/pypvm-lid.stl
similarity index 100%
rename from PyPortal_ViewMaster/CAD/pypvm-lid.stl
rename to PyPortal/PyPortal_ViewMaster/CAD/pypvm-lid.stl
diff --git a/PyPortal_ViewMaster/code.py b/PyPortal/PyPortal_ViewMaster/code.py
similarity index 100%
rename from PyPortal_ViewMaster/code.py
rename to PyPortal/PyPortal_ViewMaster/code.py
diff --git a/PyPortal_Wakeup_Light/code.py b/PyPortal/PyPortal_Wakeup_Light/code.py
similarity index 100%
rename from PyPortal_Wakeup_Light/code.py
rename to PyPortal/PyPortal_Wakeup_Light/code.py
diff --git a/PyPortal_Wakeup_Light/fonts/Nunito-Black-17.bdf b/PyPortal/PyPortal_Wakeup_Light/fonts/Nunito-Black-17.bdf
similarity index 100%
rename from PyPortal_Wakeup_Light/fonts/Nunito-Black-17.bdf
rename to PyPortal/PyPortal_Wakeup_Light/fonts/Nunito-Black-17.bdf
diff --git a/PyPortal_Wakeup_Light/fonts/Nunito-Light-75.bdf b/PyPortal/PyPortal_Wakeup_Light/fonts/Nunito-Light-75.bdf
similarity index 100%
rename from PyPortal_Wakeup_Light/fonts/Nunito-Light-75.bdf
rename to PyPortal/PyPortal_Wakeup_Light/fonts/Nunito-Light-75.bdf
diff --git a/PyPortal_WallMount/pyp-feet.stl b/PyPortal/PyPortal_WallMount/pyp-feet.stl
similarity index 100%
rename from PyPortal_WallMount/pyp-feet.stl
rename to PyPortal/PyPortal_WallMount/pyp-feet.stl
diff --git a/PyPortal_WallMount/pyp-lightswitch-mount.stl b/PyPortal/PyPortal_WallMount/pyp-lightswitch-mount.stl
similarity index 100%
rename from PyPortal_WallMount/pyp-lightswitch-mount.stl
rename to PyPortal/PyPortal_WallMount/pyp-lightswitch-mount.stl
diff --git a/PyPortal_WallMount/pyp-outlet-mount.stl b/PyPortal/PyPortal_WallMount/pyp-outlet-mount.stl
similarity index 100%
rename from PyPortal_WallMount/pyp-outlet-mount.stl
rename to PyPortal/PyPortal_WallMount/pyp-outlet-mount.stl
diff --git a/PyPortal_WallMount/pyp-pcb-mount.stl b/PyPortal/PyPortal_WallMount/pyp-pcb-mount.stl
similarity index 100%
rename from PyPortal_WallMount/pyp-pcb-mount.stl
rename to PyPortal/PyPortal_WallMount/pyp-pcb-mount.stl
diff --git a/PyPortal_WallMount/pyp-wall-mount.f3d b/PyPortal/PyPortal_WallMount/pyp-wall-mount.f3d
similarity index 100%
rename from PyPortal_WallMount/pyp-wall-mount.f3d
rename to PyPortal/PyPortal_WallMount/pyp-wall-mount.f3d
diff --git a/PyPortal_WallMount/pyp-wall-mount.step b/PyPortal/PyPortal_WallMount/pyp-wall-mount.step
similarity index 100%
rename from PyPortal_WallMount/pyp-wall-mount.step
rename to PyPortal/PyPortal_WallMount/pyp-wall-mount.step
diff --git a/PyPortal_WallMount/pyp-wall-outlet.f3d b/PyPortal/PyPortal_WallMount/pyp-wall-outlet.f3d
similarity index 100%
rename from PyPortal_WallMount/pyp-wall-outlet.f3d
rename to PyPortal/PyPortal_WallMount/pyp-wall-outlet.f3d
diff --git a/PyPortal_WallMount/pyp-wall-outlet.step b/PyPortal/PyPortal_WallMount/pyp-wall-outlet.step
similarity index 100%
rename from PyPortal_WallMount/pyp-wall-outlet.step
rename to PyPortal/PyPortal_WallMount/pyp-wall-outlet.step
diff --git a/PyPortal_WeeklyCountdown/code.py b/PyPortal/PyPortal_WeeklyCountdown/code.py
similarity index 100%
rename from PyPortal_WeeklyCountdown/code.py
rename to PyPortal/PyPortal_WeeklyCountdown/code.py
diff --git a/PyPortal_WeeklyCountdown/countdown_background.bmp b/PyPortal/PyPortal_WeeklyCountdown/countdown_background.bmp
similarity index 100%
rename from PyPortal_WeeklyCountdown/countdown_background.bmp
rename to PyPortal/PyPortal_WeeklyCountdown/countdown_background.bmp
diff --git a/PyPortal_WeeklyCountdown/countdown_event.bmp b/PyPortal/PyPortal_WeeklyCountdown/countdown_event.bmp
similarity index 100%
rename from PyPortal_WeeklyCountdown/countdown_event.bmp
rename to PyPortal/PyPortal_WeeklyCountdown/countdown_event.bmp
diff --git a/PyPortal_WeeklyCountdown/fonts/Helvetica-Bold-36.bdf b/PyPortal/PyPortal_WeeklyCountdown/fonts/Helvetica-Bold-36.bdf
similarity index 100%
rename from PyPortal_WeeklyCountdown/fonts/Helvetica-Bold-36.bdf
rename to PyPortal/PyPortal_WeeklyCountdown/fonts/Helvetica-Bold-36.bdf
diff --git a/PyPortal/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/.circuitpython.skip-screenshot b/PyPortal/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/.circuitpython.skip-screenshot
new file mode 100644
index 000000000..e69de29bb
diff --git a/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/base_320x480.bmp b/PyPortal/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/base_320x480.bmp
similarity index 100%
rename from PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/base_320x480.bmp
rename to PyPortal/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/base_320x480.bmp
diff --git a/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/convert_winamp_skin.py b/PyPortal/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/convert_winamp_skin.py
similarity index 100%
rename from PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/convert_winamp_skin.py
rename to PyPortal/PyPortal_Winamp_Player/PyPortal_Winamp_Skin_Converter/convert_winamp_skin.py
diff --git a/PyPortal_Winamp_Player/base_240x320.bmp b/PyPortal/PyPortal_Winamp_Player/base_240x320.bmp
similarity index 100%
rename from PyPortal_Winamp_Player/base_240x320.bmp
rename to PyPortal/PyPortal_Winamp_Player/base_240x320.bmp
diff --git a/PyPortal_Winamp_Player/base_config.json b/PyPortal/PyPortal_Winamp_Player/base_config.json
similarity index 100%
rename from PyPortal_Winamp_Player/base_config.json
rename to PyPortal/PyPortal_Winamp_Player/base_config.json
diff --git a/PyPortal_Winamp_Player/code.py b/PyPortal/PyPortal_Winamp_Player/code.py
similarity index 99%
rename from PyPortal_Winamp_Player/code.py
rename to PyPortal/PyPortal_Winamp_Player/code.py
index 947ade1c7..aae76c5d7 100644
--- a/PyPortal_Winamp_Player/code.py
+++ b/PyPortal/PyPortal_Winamp_Player/code.py
@@ -102,7 +102,7 @@
)
# Add the Group to the Display
-display.show(winamp_application)
+display.root_group = winamp_application
# previous iteration touch events
_previous_touch = None
diff --git a/PyPortal_Winamp_Player/playlist.json b/PyPortal/PyPortal_Winamp_Player/playlist.json
similarity index 100%
rename from PyPortal_Winamp_Player/playlist.json
rename to PyPortal/PyPortal_Winamp_Player/playlist.json
diff --git a/PyPortal_Winamp_Player/winamp_helpers.py b/PyPortal/PyPortal_Winamp_Player/winamp_helpers.py
similarity index 100%
rename from PyPortal_Winamp_Player/winamp_helpers.py
rename to PyPortal/PyPortal_Winamp_Player/winamp_helpers.py
diff --git a/PyPortal_Word_of_the_Day/code.py b/PyPortal/PyPortal_Word_of_the_Day/code.py
similarity index 100%
rename from PyPortal_Word_of_the_Day/code.py
rename to PyPortal/PyPortal_Word_of_the_Day/code.py
diff --git a/PyPortal_Word_of_the_Day/fonts/Arial-ItalicMT-17.bdf b/PyPortal/PyPortal_Word_of_the_Day/fonts/Arial-ItalicMT-17.bdf
similarity index 100%
rename from PyPortal_Word_of_the_Day/fonts/Arial-ItalicMT-17.bdf
rename to PyPortal/PyPortal_Word_of_the_Day/fonts/Arial-ItalicMT-17.bdf
diff --git a/PyPortal_Word_of_the_Day/wordoftheday_background.bmp b/PyPortal/PyPortal_Word_of_the_Day/wordoftheday_background.bmp
similarity index 100%
rename from PyPortal_Word_of_the_Day/wordoftheday_background.bmp
rename to PyPortal/PyPortal_Word_of_the_Day/wordoftheday_background.bmp
diff --git a/PyPortal_Youtube/Coin.wav b/PyPortal/PyPortal_Youtube/Coin.wav
similarity index 100%
rename from PyPortal_Youtube/Coin.wav
rename to PyPortal/PyPortal_Youtube/Coin.wav
diff --git a/PyPortal_Youtube/code.py b/PyPortal/PyPortal_Youtube/code.py
similarity index 100%
rename from PyPortal_Youtube/code.py
rename to PyPortal/PyPortal_Youtube/code.py
diff --git a/PyPortal_Youtube/fonts/Collegiate-24.bdf b/PyPortal/PyPortal_Youtube/fonts/Collegiate-24.bdf
similarity index 100%
rename from PyPortal_Youtube/fonts/Collegiate-24.bdf
rename to PyPortal/PyPortal_Youtube/fonts/Collegiate-24.bdf
diff --git a/PyPortal_Youtube/fonts/Collegiate-50.bdf b/PyPortal/PyPortal_Youtube/fonts/Collegiate-50.bdf
similarity index 100%
rename from PyPortal_Youtube/fonts/Collegiate-50.bdf
rename to PyPortal/PyPortal_Youtube/fonts/Collegiate-50.bdf
diff --git a/PyPortal_Youtube/youtube_background.bmp b/PyPortal/PyPortal_Youtube/youtube_background.bmp
similarity index 100%
rename from PyPortal_Youtube/youtube_background.bmp
rename to PyPortal/PyPortal_Youtube/youtube_background.bmp
diff --git a/PyPortal_on_this_day/code.py b/PyPortal/PyPortal_on_this_day/code.py
similarity index 100%
rename from PyPortal_on_this_day/code.py
rename to PyPortal/PyPortal_on_this_day/code.py
diff --git a/PyPortal_on_this_day/fonts/Arial-ItalicMT-17.bdf b/PyPortal/PyPortal_on_this_day/fonts/Arial-ItalicMT-17.bdf
similarity index 100%
rename from PyPortal_on_this_day/fonts/Arial-ItalicMT-17.bdf
rename to PyPortal/PyPortal_on_this_day/fonts/Arial-ItalicMT-17.bdf
diff --git a/PyPortal_on_this_day/on_this_day_bg.bmp b/PyPortal/PyPortal_on_this_day/on_this_day_bg.bmp
similarity index 100%
rename from PyPortal_on_this_day/on_this_day_bg.bmp
rename to PyPortal/PyPortal_on_this_day/on_this_day_bg.bmp
diff --git a/pyportal_pet_planter/code.py b/PyPortal/pyportal_pet_planter/code.py
similarity index 99%
rename from pyportal_pet_planter/code.py
rename to PyPortal/pyportal_pet_planter/code.py
index 37d7de561..9ad39984e 100755
--- a/pyportal_pet_planter/code.py
+++ b/PyPortal/pyportal_pet_planter/code.py
@@ -91,7 +91,7 @@
splash = displayio.Group()
# show splash group
-display.show(splash)
+display.root_group = splash
# Palette for water bitmap
palette = displayio.Palette(2)
diff --git a/pyportal_pet_planter/fonts/GothamBlack-25.bdf b/PyPortal/pyportal_pet_planter/fonts/GothamBlack-25.bdf
similarity index 100%
rename from pyportal_pet_planter/fonts/GothamBlack-25.bdf
rename to PyPortal/pyportal_pet_planter/fonts/GothamBlack-25.bdf
diff --git a/pyportal_pet_planter/fonts/GothamBlack-50.bdf b/PyPortal/pyportal_pet_planter/fonts/GothamBlack-50.bdf
similarity index 100%
rename from pyportal_pet_planter/fonts/GothamBlack-50.bdf
rename to PyPortal/pyportal_pet_planter/fonts/GothamBlack-50.bdf
diff --git a/pyportal_pet_planter/images/icon-temp.bmp b/PyPortal/pyportal_pet_planter/images/icon-temp.bmp
similarity index 100%
rename from pyportal_pet_planter/images/icon-temp.bmp
rename to PyPortal/pyportal_pet_planter/images/icon-temp.bmp
diff --git a/pyportal_pet_planter/images/icon-wetness.bmp b/PyPortal/pyportal_pet_planter/images/icon-wetness.bmp
similarity index 100%
rename from pyportal_pet_planter/images/icon-wetness.bmp
rename to PyPortal/pyportal_pet_planter/images/icon-wetness.bmp
diff --git a/pyportal_pet_planter/images/roots.bmp b/PyPortal/pyportal_pet_planter/images/roots.bmp
similarity index 100%
rename from pyportal_pet_planter/images/roots.bmp
rename to PyPortal/pyportal_pet_planter/images/roots.bmp
diff --git a/pyportal_pet_planter/sounds/water-high.wav b/PyPortal/pyportal_pet_planter/sounds/water-high.wav
similarity index 100%
rename from pyportal_pet_planter/sounds/water-high.wav
rename to PyPortal/pyportal_pet_planter/sounds/water-high.wav
diff --git a/pyportal_pet_planter/sounds/water-low.wav b/PyPortal/pyportal_pet_planter/sounds/water-low.wav
similarity index 100%
rename from pyportal_pet_planter/sounds/water-low.wav
rename to PyPortal/pyportal_pet_planter/sounds/water-low.wav
diff --git a/pyportal_weather_station/.circuitpython.skip b/PyPortal/pyportal_weather_station/.circuitpython.skip
similarity index 100%
rename from pyportal_weather_station/.circuitpython.skip
rename to PyPortal/pyportal_weather_station/.circuitpython.skip
diff --git a/pyportal_weather_station/code.py b/PyPortal/pyportal_weather_station/code.py
similarity index 98%
rename from pyportal_weather_station/code.py
rename to PyPortal/pyportal_weather_station/code.py
index c84462032..bba8cc2b5 100755
--- a/pyportal_weather_station/code.py
+++ b/PyPortal/pyportal_weather_station/code.py
@@ -24,7 +24,7 @@
# sensor libs
import adafruit_veml6075
import adafruit_sgp30
-import adafruit_bme280
+from adafruit_bme280 import basic as adafruit_bme280
# weatherstation graphics helper
import weatherstation_helper
diff --git a/pyportal_weather_station/fonts/Arial-16.bdf b/PyPortal/pyportal_weather_station/fonts/Arial-16.bdf
similarity index 100%
rename from pyportal_weather_station/fonts/Arial-16.bdf
rename to PyPortal/pyportal_weather_station/fonts/Arial-16.bdf
diff --git a/pyportal_weather_station/fonts/Collegiate-24.bdf b/PyPortal/pyportal_weather_station/fonts/Collegiate-24.bdf
similarity index 100%
rename from pyportal_weather_station/fonts/Collegiate-24.bdf
rename to PyPortal/pyportal_weather_station/fonts/Collegiate-24.bdf
diff --git a/pyportal_weather_station/pyportal_splash.bmp b/PyPortal/pyportal_weather_station/icons/pyportal_splash.bmp
similarity index 100%
rename from pyportal_weather_station/pyportal_splash.bmp
rename to PyPortal/pyportal_weather_station/icons/pyportal_splash.bmp
diff --git a/pyportal_weather_station/weatherstation_helper.py b/PyPortal/pyportal_weather_station/weatherstation_helper.py
similarity index 80%
rename from pyportal_weather_station/weatherstation_helper.py
rename to PyPortal/pyportal_weather_station/weatherstation_helper.py
index 947310319..7a1b79b63 100755
--- a/pyportal_weather_station/weatherstation_helper.py
+++ b/PyPortal/pyportal_weather_station/weatherstation_helper.py
@@ -23,18 +23,16 @@ class WeatherStation_GFX(displayio.Group):
def __init__(self, celsius=True):
# root displayio group
root_group = displayio.Group()
- board.DISPLAY.show(root_group)
+ board.DISPLAY.root_group = root_group
super().__init__()
self._celsius = celsius
# create background icon group
self._icon_group = displayio.Group()
- self.append(self._icon_group)
- board.DISPLAY.show(self._icon_group)
+ board.DISPLAY.root_group = self._icon_group
# create text object group
self._text_group = displayio.Group()
- self.append(self._text_group)
self._icon_sprite = None
self._icon_file = None
@@ -51,51 +49,40 @@ def __init__(self, celsius=True):
self.title_text = Label(self.c_font, text = "PyPortal Weather Station")
self.title_text.x = 50
self.title_text.y = 10
- self._text_group.append(self.title_text)
self.io_status_text = Label(self.c_font)
self.io_status_text.x = 65
self.io_status_text.y = 190
- self._text_group.append(self.io_status_text)
# Set up Labels to label sensor data
self.veml_text = Label(self.medium_font)
self.veml_text.x = 3
self.veml_text.y = 40
- self._text_group.append(self.veml_text)
self.bme_temp_humid_text = Label(self.medium_font)
self.bme_temp_humid_text.x = 0
self.bme_temp_humid_text.y = 70
- self._text_group.append(self.bme_temp_humid_text)
self.wind_speed_text = Label(self.medium_font)
self.wind_speed_text.x = 0
self.wind_speed_text.y = 100
- self._text_group.append(self.wind_speed_text)
self.bme_pres_alt_text = Label(self.medium_font)
self.bme_pres_alt_text.x = 0
self.bme_pres_alt_text.y = 130
- self._text_group.append(self.bme_pres_alt_text)
self.sgp_text = Label(self.medium_font)
self.sgp_text.x = 0
self.sgp_text.y = 155
- self._text_group.append(self.sgp_text)
- board.DISPLAY.show(self._text_group)
+ board.DISPLAY.root_group = self._text_group
def display_io_status(self, status_text):
"""Displays the current IO status.
:param str status_text: Description of Adafruit IO status
"""
self.io_status_text.text = status_text
- try:
- board.DISPLAY.refresh(target_frames_per_second=60)
- except AttributeError:
- board.DISPLAY.refresh_soon()
- board.DISPLAY.wait_for_frame()
+ board.DISPLAY.refresh(target_frames_per_second=60)
def display_data(self, uv_index, bme_data, sgp_data, wind_speed):
@@ -131,11 +118,7 @@ def display_data(self, uv_index, bme_data, sgp_data, wind_speed):
print("eCO2 = %d ppm \t TVOC = %d ppb"%(sgp_data[0], sgp_data[1]))
self.sgp_text.text = "eCO2: %d ppm, TVOC: %d ppb"%(sgp_data[0], sgp_data[1])
- try:
- board.DISPLAY.refresh(target_frames_per_second=60)
- except AttributeError:
- board.DISPLAY.refresh_soon()
- board.DISPLAY.wait_for_frame()
+ board.DISPLAY.refresh(target_frames_per_second=60)
def set_icon(self, filename):
@@ -163,10 +146,4 @@ def set_icon(self, filename):
# self._icon_sprite = displayio.TileGrid(
# icon,
# pixel_shader=icon.pixel_shader)
-
- self._icon_group.append(self._icon_sprite)
- try:
- board.DISPLAY.refresh(target_frames_per_second=60)
- except AttributeError:
- board.DISPLAY.refresh_soon()
- board.DISPLAY.wait_for_frame()
+ board.DISPLAY.refresh(target_frames_per_second=60)
diff --git a/Pylint_and_CircuitPython/pylint_example.py b/Pylint_and_CircuitPython/pylint_example.py
index b1b719798..8ef863116 100644
--- a/Pylint_and_CircuitPython/pylint_example.py
+++ b/Pylint_and_CircuitPython/pylint_example.py
@@ -12,7 +12,8 @@
pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=0.2)
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
int1 = digitalio.DigitalInOut(board.ACCELEROMETER_UNTERRUPT)
lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1)
diff --git a/QT2040_Trinkey/U2IF_I2C_Example/code.py b/QT2040_Trinkey/U2IF_I2C_Example/code.py
index 552752b44..56506ba74 100644
--- a/QT2040_Trinkey/U2IF_I2C_Example/code.py
+++ b/QT2040_Trinkey/U2IF_I2C_Example/code.py
@@ -13,6 +13,7 @@
import adafruit_mcp9808
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
mcp9808 = adafruit_mcp9808.MCP9808(i2c)
while True:
diff --git a/QT_Py_ESP32-S2_Sunrise_Lamp/AIO/code.py b/QT_Py/AT_Py_ESP32-S2_Sunrise_Lamp/AIO/code.py
similarity index 100%
rename from QT_Py_ESP32-S2_Sunrise_Lamp/AIO/code.py
rename to QT_Py/AT_Py_ESP32-S2_Sunrise_Lamp/AIO/code.py
diff --git a/QT_Py_ESP32-S2_Sunrise_Lamp/NTP/code.py b/QT_Py/AT_Py_ESP32-S2_Sunrise_Lamp/NTP/code.py
similarity index 100%
rename from QT_Py_ESP32-S2_Sunrise_Lamp/NTP/code.py
rename to QT_Py/AT_Py_ESP32-S2_Sunrise_Lamp/NTP/code.py
diff --git a/QTPy_Heart/code.py b/QT_Py/QTPy_Heart/code.py
similarity index 100%
rename from QTPy_Heart/code.py
rename to QT_Py/QTPy_Heart/code.py
diff --git a/QT_Py_Acrylic_Lamp/code.py b/QT_Py/QT_Py_Acrylic_Lamp/code.py
similarity index 100%
rename from QT_Py_Acrylic_Lamp/code.py
rename to QT_Py/QT_Py_Acrylic_Lamp/code.py
diff --git a/QT_Py_Bracelet/.circuitpython.skip b/QT_Py/QT_Py_Bracelet/.circuitpython.skip
similarity index 100%
rename from QT_Py_Bracelet/.circuitpython.skip
rename to QT_Py/QT_Py_Bracelet/.circuitpython.skip
diff --git a/QT_Py_Bracelet/README.md b/QT_Py/QT_Py_Bracelet/README.md
similarity index 100%
rename from QT_Py_Bracelet/README.md
rename to QT_Py/QT_Py_Bracelet/README.md
diff --git a/QT_Py_Bracelet/code.py b/QT_Py/QT_Py_Bracelet/code.py
similarity index 100%
rename from QT_Py_Bracelet/code.py
rename to QT_Py/QT_Py_Bracelet/code.py
diff --git a/QT_Py_Cube/README.md b/QT_Py/QT_Py_Cube/README.md
similarity index 100%
rename from QT_Py_Cube/README.md
rename to QT_Py/QT_Py_Cube/README.md
diff --git a/QT_Py_Cube/code.py b/QT_Py/QT_Py_Cube/code.py
similarity index 100%
rename from QT_Py_Cube/code.py
rename to QT_Py/QT_Py_Cube/code.py
diff --git a/QT_Py_Cube/cube.py b/QT_Py/QT_Py_Cube/cube.py
similarity index 100%
rename from QT_Py_Cube/cube.py
rename to QT_Py/QT_Py_Cube/cube.py
diff --git a/QT_Py_NeoPixels/code.py b/QT_Py/QT_Py_NeoPixels/code.py
similarity index 100%
rename from QT_Py_NeoPixels/code.py
rename to QT_Py/QT_Py_NeoPixels/code.py
diff --git a/QT_Py_RP2040/digital_input_neopixel/code.py b/QT_Py/QT_Py_RP2040/digital_input_neopixel/code.py
similarity index 100%
rename from QT_Py_RP2040/digital_input_neopixel/code.py
rename to QT_Py/QT_Py_RP2040/digital_input_neopixel/code.py
diff --git a/QT_Py_RP2040_Lemon_Keypad/code.py b/QT_Py/QT_Py_RP2040_Lemon_Keypad/code.py
similarity index 100%
rename from QT_Py_RP2040_Lemon_Keypad/code.py
rename to QT_Py/QT_Py_RP2040_Lemon_Keypad/code.py
diff --git a/QT_Py_RP2040_USB_to_Serial_MIDI_Friends/code.py b/QT_Py/QT_Py_RP2040_USB_to_Serial_MIDI_Friends/code.py
similarity index 93%
rename from QT_Py_RP2040_USB_to_Serial_MIDI_Friends/code.py
rename to QT_Py/QT_Py_RP2040_USB_to_Serial_MIDI_Friends/code.py
index e8a481f4a..359a7e74d 100644
--- a/QT_Py_RP2040_USB_to_Serial_MIDI_Friends/code.py
+++ b/QT_Py/QT_Py_RP2040_USB_to_Serial_MIDI_Friends/code.py
@@ -13,7 +13,7 @@
from adafruit_midi.program_change import ProgramChange
# uart setup
-uart = busio.UART(board.TX, board.RX, baudrate=31250)
+uart = busio.UART(board.TX, board.RX, baudrate=31250, timeout=0.001)
# midi channel setup
midi_in_channel = 1
midi_out_channel = 1
diff --git a/QT_Py_Timer/QT_Py_Activity_Timer/code.py b/QT_Py/QT_Py_Timer/QT_Py_Activity_Timer/code.py
similarity index 96%
rename from QT_Py_Timer/QT_Py_Activity_Timer/code.py
rename to QT_Py/QT_Py_Timer/QT_Py_Activity_Timer/code.py
index f1b7edec1..f51a71cdb 100755
--- a/QT_Py_Timer/QT_Py_Activity_Timer/code.py
+++ b/QT_Py/QT_Py_Timer/QT_Py_Activity_Timer/code.py
@@ -36,7 +36,9 @@
number_of_pixels = 32
# Set up accelerometer and LEDs.
-lis3dh = adafruit_lis3dh.LIS3DH_I2C(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
pixels = neopixel.NeoPixel(board.A3, number_of_pixels, brightness=led_brightness)
pixels.fill(0) # Turn off the LEDs if they're on.
diff --git a/QT_Py_Timer/QT_Py_Hydration_Reminder/code.py b/QT_Py/QT_Py_Timer/QT_Py_Hydration_Reminder/code.py
similarity index 96%
rename from QT_Py_Timer/QT_Py_Hydration_Reminder/code.py
rename to QT_Py/QT_Py_Timer/QT_Py_Hydration_Reminder/code.py
index e7f7c68c3..7dee7e45f 100755
--- a/QT_Py_Timer/QT_Py_Hydration_Reminder/code.py
+++ b/QT_Py/QT_Py_Timer/QT_Py_Hydration_Reminder/code.py
@@ -35,7 +35,9 @@
number_of_pixels = 32
# Set up accelerometer and LEDs.
-lis3dh = adafruit_lis3dh.LIS3DH_I2C(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c)
pixels = neopixel.NeoPixel(board.A3, number_of_pixels, brightness=led_brightness)
pixels.fill(0) # Turn off the LEDs if they're on.
diff --git a/Qualia/Qualia_S3_OrnamentVideoPlayer/.none.test.only b/Qualia/Qualia_S3_OrnamentVideoPlayer/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Qualia/Qualia_S3_OrnamentVideoPlayer/MjpegClass.h b/Qualia/Qualia_S3_OrnamentVideoPlayer/MjpegClass.h
new file mode 100644
index 000000000..336fee41b
--- /dev/null
+++ b/Qualia/Qualia_S3_OrnamentVideoPlayer/MjpegClass.h
@@ -0,0 +1,210 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+/*******************************************************************************
+ * ESP32_JPEG Wrapper Class
+ *
+ * Dependent libraries:
+ * ESP32_JPEG: https://github.com/esp-arduino-libs/ESP32_JPEG.git
+ ******************************************************************************/
+#pragma once
+
+#if defined(ESP32)
+
+#define READ_BUFFER_SIZE 1024
+#define MAXOUTPUTSIZE (MAX_BUFFERED_PIXELS / 16 / 16)
+
+#include
+
+#include
+
+class MjpegClass
+{
+public:
+ bool setup(
+ Stream *input, uint8_t *mjpeg_buf,
+ uint16_t *output_buf, size_t output_buf_size, bool useBigEndian)
+ {
+ _input = input;
+ _mjpeg_buf = mjpeg_buf;
+ _output_buf = (uint8_t *)output_buf;
+ _output_buf_size = output_buf_size;
+ _useBigEndian = useBigEndian;
+ _inputindex = 0;
+
+ if (!_read_buf)
+ {
+ _read_buf = (uint8_t *)malloc(READ_BUFFER_SIZE);
+ }
+
+ if (!_read_buf)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool readMjpegBuf()
+ {
+ if (_inputindex == 0)
+ {
+ _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE);
+ _inputindex += _buf_read;
+ }
+ _mjpeg_buf_offset = 0;
+ int i = 0;
+ bool found_FFD8 = false;
+ while ((_buf_read > 0) && (!found_FFD8))
+ {
+ i = 0;
+ while ((i < _buf_read) && (!found_FFD8))
+ {
+ if ((_read_buf[i] == 0xFF) && (_read_buf[i + 1] == 0xD8)) // JPEG header
+ {
+ // Serial.printf("Found FFD8 at: %d.\n", i);
+ found_FFD8 = true;
+ }
+ ++i;
+ }
+ if (found_FFD8)
+ {
+ --i;
+ }
+ else
+ {
+ _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE);
+ }
+ }
+ uint8_t *_p = _read_buf + i;
+ _buf_read -= i;
+ bool found_FFD9 = false;
+ if (_buf_read > 0)
+ {
+ i = 3;
+ while ((_buf_read > 0) && (!found_FFD9))
+ {
+ if ((_mjpeg_buf_offset > 0) && (_mjpeg_buf[_mjpeg_buf_offset - 1] == 0xFF) && (_p[0] == 0xD9)) // JPEG trailer
+ {
+ // Serial.printf("Found FFD9 at: %d.\n", i);
+ found_FFD9 = true;
+ }
+ else
+ {
+ while ((i < _buf_read) && (!found_FFD9))
+ {
+ if ((_p[i] == 0xFF) && (_p[i + 1] == 0xD9)) // JPEG trailer
+ {
+ found_FFD9 = true;
+ ++i;
+ }
+ ++i;
+ }
+ }
+
+ // Serial.printf("i: %d\n", i);
+ memcpy(_mjpeg_buf + _mjpeg_buf_offset, _p, i);
+ _mjpeg_buf_offset += i;
+ size_t o = _buf_read - i;
+ if (o > 0)
+ {
+ // Serial.printf("o: %d\n", o);
+ memcpy(_read_buf, _p + i, o);
+ _buf_read = _input->readBytes(_read_buf + o, READ_BUFFER_SIZE - o);
+ _p = _read_buf;
+ _inputindex += _buf_read;
+ _buf_read += o;
+ // Serial.printf("_buf_read: %d\n", _buf_read);
+ }
+ else
+ {
+ _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE);
+ _p = _read_buf;
+ _inputindex += _buf_read;
+ }
+ i = 0;
+ }
+ if (found_FFD9)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ bool decodeJpg()
+ {
+ _remain = _mjpeg_buf_offset;
+
+ // Generate default configuration
+ jpeg_dec_config_t config = {
+ .output_type = JPEG_RAW_TYPE_RGB565_BE,
+ .rotate = JPEG_ROTATE_0D,
+ };
+ // Create jpeg_dec
+ _jpeg_dec = jpeg_dec_open(&config);
+
+ // Create io_callback handle
+ _jpeg_io = (jpeg_dec_io_t *)calloc(1, sizeof(jpeg_dec_io_t));
+
+ // Create out_info handle
+ _out_info = (jpeg_dec_header_info_t *)calloc(1, sizeof(jpeg_dec_header_info_t));
+
+ // Set input buffer and buffer len to io_callback
+ _jpeg_io->inbuf = _mjpeg_buf;
+ _jpeg_io->inbuf_len = _remain;
+
+ jpeg_dec_parse_header(_jpeg_dec, _jpeg_io, _out_info);
+
+ _w = _out_info->width;
+ _h = _out_info->height;
+
+ if ((_w * _h * 2) > _output_buf_size)
+ {
+ return false;
+ }
+ _jpeg_io->outbuf = _output_buf;
+
+ jpeg_dec_process(_jpeg_dec, _jpeg_io);
+ jpeg_dec_close(_jpeg_dec);
+
+ free(_jpeg_io);
+ free(_out_info);
+
+ return true;
+ }
+
+ int16_t getWidth()
+ {
+ return _w;
+ }
+
+ int16_t getHeight()
+ {
+ return _h;
+ }
+
+private:
+ Stream *_input;
+ uint8_t *_mjpeg_buf;
+ uint8_t *_output_buf;
+ size_t _output_buf_size;
+ bool _useBigEndian;
+
+ uint8_t *_read_buf;
+ int32_t _mjpeg_buf_offset = 0;
+
+ jpeg_dec_handle_t *_jpeg_dec;
+ jpeg_dec_io_t *_jpeg_io;
+ jpeg_dec_header_info_t *_out_info;
+
+ int16_t _w = 0, _h = 0;
+
+ int32_t _inputindex = 0;
+ int32_t _buf_read;
+ int32_t _remain = 0;
+};
+
+#endif // defined(ESP32)
diff --git a/Qualia/Qualia_S3_OrnamentVideoPlayer/Qualia_S3_OrnamentVideoPlayer.ino b/Qualia/Qualia_S3_OrnamentVideoPlayer/Qualia_S3_OrnamentVideoPlayer.ino
new file mode 100644
index 000000000..818f62b74
--- /dev/null
+++ b/Qualia/Qualia_S3_OrnamentVideoPlayer/Qualia_S3_OrnamentVideoPlayer.ino
@@ -0,0 +1,244 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+/*******************************************************************************
+ * Motion JPEG Image Viewer
+ * This is a simple Motion JPEG image viewer example
+
+encode with
+ffmpeg -i "wash.mp4" -vf "fps=10,vflip,hflip,scale=-1:480:flags=lanczos,crop=480:480" -pix_fmt yuvj420p -q:v 9 wash.mjpeg
+
+ ******************************************************************************/
+#define MJPEG_FOLDER "/videos" // cannot be root!
+#define MJPEG_OUTPUT_SIZE (480 * 480 * 2) // memory for a output image frame
+#define MJPEG_BUFFER_SIZE (MJPEG_OUTPUT_SIZE / 5) // memory for a single JPEG frame
+#define MJPEG_LOOPS 0
+
+#include
+#include
+//#include // uncomment either SD or SD_MMC
+#include
+
+Arduino_XCA9554SWSPI *expander = new Arduino_XCA9554SWSPI(
+ PCA_TFT_RESET, PCA_TFT_CS, PCA_TFT_SCK, PCA_TFT_MOSI,
+ &Wire, 0x3F);
+
+Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
+ TFT_DE, TFT_VSYNC, TFT_HSYNC, TFT_PCLK,
+ TFT_R1, TFT_R2, TFT_R3, TFT_R4, TFT_R5,
+ TFT_G0, TFT_G1, TFT_G2, TFT_G3, TFT_G4, TFT_G5,
+ TFT_B1, TFT_B2, TFT_B3, TFT_B4, TFT_B5,
+ 1 /* hsync_polarity */, 50 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
+ 1 /* vsync_polarity */, 16 /* vsync_front_porch */, 2 /* vsync_pulse_width */, 18 /* vsync_back_porch */
+ //,1, 30000000
+ );
+
+Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
+// 2.1" 480x480 round display
+ 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+ expander, GFX_NOT_DEFINED /* RST */, TL021WVC02_init_operations, sizeof(TL021WVC02_init_operations));
+
+Adafruit_CST8XX ctp = Adafruit_CST8XX(); // This library also supports FT6336U!
+#define I2C_TOUCH_ADDR 0x15
+bool touchOK = false;
+
+#include
+
+#include "MjpegClass.h"
+static MjpegClass mjpeg;
+File mjpegFile, video_dir;
+uint8_t *mjpeg_buf;
+uint16_t *output_buf;
+
+unsigned long total_show_video = 0;
+
+void setup()
+{
+ Serial.begin(115200);
+ Serial.setDebugOutput(true);
+ //while(!Serial) delay(10);
+ Serial.println("MJPEG Video Playback Demo");
+
+#ifdef GFX_EXTRA_PRE_INIT
+ GFX_EXTRA_PRE_INIT();
+#endif
+
+ // Init Display
+ Wire.setClock(400000); // speed up I2C
+ if (!gfx->begin()) {
+ Serial.println("gfx->begin() failed!");
+ }
+ gfx->fillScreen(BLUE);
+
+ expander->pinMode(PCA_TFT_BACKLIGHT, OUTPUT);
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
+
+ //while (!SD.begin(ss, SPI, 64000000UL))
+ //SD_MMC.setPins(SCK /* CLK */, MOSI /* CMD/MOSI */, MISO /* D0/MISO */);
+ SD_MMC.setPins(SCK, MOSI /* CMD/MOSI */, MISO /* D0/MISO */, A0 /* D1 */, A1 /* D2 */, SS /* D3/CS */); // quad MMC!
+ while (!SD_MMC.begin("/root", true))
+ {
+ Serial.println(F("ERROR: File System Mount Failed!"));
+ gfx->println(F("ERROR: File System Mount Failed!"));
+ delay(1000);
+ }
+ Serial.println("Found SD Card");
+
+ // open filesystem
+ //video_dir = SD.open(MJPEG_FOLDER);
+ video_dir = SD_MMC.open(MJPEG_FOLDER);
+ if (!video_dir || !video_dir.isDirectory()){
+ Serial.println("Failed to open " MJPEG_FOLDER " directory");
+ while (1) delay(100);
+ }
+ Serial.println("Opened Dir");
+
+ mjpeg_buf = (uint8_t *)malloc(MJPEG_BUFFER_SIZE);
+ if (!mjpeg_buf) {
+ Serial.println(F("mjpeg_buf malloc failed!"));
+ while (1) delay(100);
+ }
+ Serial.println("Allocated decoding buffer");
+
+ output_buf = (uint16_t *)heap_caps_aligned_alloc(16, MJPEG_OUTPUT_SIZE, MALLOC_CAP_8BIT);
+ if (!output_buf) {
+ Serial.println(F("output_buf malloc failed!"));
+ while (1) delay(100);
+ }
+
+ expander->pinMode(PCA_BUTTON_UP, INPUT);
+ expander->pinMode(PCA_BUTTON_DOWN, INPUT);
+
+ if (!ctp.begin(&Wire, I2C_TOUCH_ADDR)) {
+ Serial.println("No touchscreen found");
+ touchOK = false;
+ } else {
+ Serial.println("Touchscreen found");
+ touchOK = true;
+ }
+}
+
+void loop()
+{
+ /* variables */
+ int total_frames = 0;
+ unsigned long total_read_video = 0;
+ unsigned long total_decode_video = 0;
+ unsigned long start_ms, curr_ms;
+ uint8_t check_UI_count = 0;
+ int16_t x = -1, y = -1, w = -1, h = -1;
+ total_show_video = 0;
+
+ if (mjpegFile) mjpegFile.close();
+ Serial.println("looking for a file...");
+
+ if (!video_dir || !video_dir.isDirectory()){
+ Serial.println("Failed to open " MJPEG_FOLDER " directory");
+ while (1) delay(100);
+ }
+
+ // look for first mjpeg file
+ while ((mjpegFile = video_dir.openNextFile()) != 0) {
+ if (!mjpegFile.isDirectory()) {
+ Serial.print(" FILE: ");
+ Serial.print(mjpegFile.name());
+ Serial.print(" SIZE: ");
+ Serial.println(mjpegFile.size());
+ if ((strstr(mjpegFile.name(), ".mjpeg") != 0) || (strstr(mjpegFile.name(), ".MJPEG") != 0)) {
+ Serial.println(" <---- found a video!");
+ break;
+ }
+ }
+ if (mjpegFile) mjpegFile.close();
+ }
+
+ if (!mjpegFile || mjpegFile.isDirectory())
+ {
+ Serial.println(F("ERROR: Failed to find a MJPEG file for reading, resetting..."));
+ //gfx->println(F("ERROR: Failed to find a MJPEG file for reading"));
+
+ // We kept getting hard crashes when trying to rewindDirectory or close/open dir
+ // so we're just going to do a softreset
+ esp_sleep_enable_timer_wakeup(1000);
+ esp_deep_sleep_start();
+ }
+
+ bool done_looping = false;
+ while (!done_looping) {
+ mjpegFile.seek(0);
+ total_frames = 0;
+ total_read_video = 0;
+ total_decode_video = 0;
+ total_show_video = 0;
+
+ Serial.println(F("MJPEG start"));
+
+ start_ms = millis();
+ curr_ms = millis();
+ if (! mjpeg.setup(&mjpegFile, mjpeg_buf, output_buf, MJPEG_OUTPUT_SIZE, true /* useBigEndian */)) {
+ Serial.println("mjpeg.setup() failed");
+ while (1) delay(100);
+ }
+
+ while (mjpegFile.available() && mjpeg.readMjpegBuf())
+ {
+ // Read video
+ total_read_video += millis() - curr_ms;
+ curr_ms = millis();
+
+ // Play video
+ mjpeg.decodeJpg();
+ total_decode_video += millis() - curr_ms;
+ curr_ms = millis();
+
+ if (x == -1) {
+ w = mjpeg.getWidth();
+ h = mjpeg.getHeight();
+ x = (w > gfx->width()) ? 0 : ((gfx->width() - w) / 2);
+ y = (h > gfx->height()) ? 0 : ((gfx->height() - h) / 2);
+ }
+ gfx->draw16bitBeRGBBitmap(x, y, output_buf, w, h);
+ total_show_video += millis() - curr_ms;
+
+ curr_ms = millis();
+ total_frames++;
+ check_UI_count++;
+ if (check_UI_count >= 5) {
+ check_UI_count = 0;
+ Serial.print('.');
+
+ if (! expander->digitalRead(PCA_BUTTON_DOWN)) {
+ Serial.println("\nDown pressed");
+ done_looping = true;
+ while (! expander->digitalRead(PCA_BUTTON_DOWN)) delay(10);
+ break;
+ }
+ if (! expander->digitalRead(PCA_BUTTON_UP)) {
+ Serial.println("\nUp pressed");
+ done_looping = true;
+ while (! expander->digitalRead(PCA_BUTTON_UP)) delay(10);
+ break;
+ }
+
+ if (touchOK && ctp.touched()) {
+ CST_TS_Point p = ctp.getPoint(0);
+ Serial.printf("(%d, %d)\n", p.x, p.y);
+ done_looping = true;
+ break;
+ }
+ }
+ }
+ int time_used = millis() - start_ms;
+ Serial.println(F("MJPEG end"));
+
+ float fps = 1000.0 * total_frames / time_used;
+ total_decode_video -= total_show_video;
+ Serial.printf("Total frames: %d\n", total_frames);
+ Serial.printf("Time used: %d ms\n", time_used);
+ Serial.printf("Average FPS: %0.1f\n", fps);
+ Serial.printf("Read MJPEG: %lu ms (%0.1f %%)\n", total_read_video, 100.0 * total_read_video / time_used);
+ Serial.printf("Decode video: %lu ms (%0.1f %%)\n", total_decode_video, 100.0 * total_decode_video / time_used);
+ Serial.printf("Show video: %lu ms (%0.1f %%)\n", total_show_video, 100.0 * total_show_video / time_used);
+ }
+}
diff --git a/Qualia/Qualia_S3_OrnamentVideoPlayer/Qualia_S3_OrnamentVideoPlayer_480x480_2.1round.uf2 b/Qualia/Qualia_S3_OrnamentVideoPlayer/Qualia_S3_OrnamentVideoPlayer_480x480_2.1round.uf2
new file mode 100644
index 000000000..423d8d362
Binary files /dev/null and b/Qualia/Qualia_S3_OrnamentVideoPlayer/Qualia_S3_OrnamentVideoPlayer_480x480_2.1round.uf2 differ
diff --git a/Qualia/Qualia_S3_Product_Demo/.none.test.only b/Qualia/Qualia_S3_Product_Demo/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Qualia/Qualia_S3_Product_Demo/Qualia_S3_Product_Demo.ino b/Qualia/Qualia_S3_Product_Demo/Qualia_S3_Product_Demo.ino
new file mode 100644
index 000000000..798de63ea
--- /dev/null
+++ b/Qualia/Qualia_S3_Product_Demo/Qualia_S3_Product_Demo.ino
@@ -0,0 +1,116 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include "Adafruit_FT6206.h"
+
+Arduino_XCA9554SWSPI *expander = new Arduino_XCA9554SWSPI(
+ PCA_TFT_RESET, PCA_TFT_CS, PCA_TFT_SCK, PCA_TFT_MOSI,
+ &Wire, 0x3F);
+
+Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
+ TFT_DE, TFT_VSYNC, TFT_HSYNC, TFT_PCLK,
+ TFT_R1, TFT_R2, TFT_R3, TFT_R4, TFT_R5,
+ TFT_G0, TFT_G1, TFT_G2, TFT_G3, TFT_G4, TFT_G5,
+ TFT_B1, TFT_B2, TFT_B3, TFT_B4, TFT_B5,
+ 1 /* hync_polarity */, 46 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
+ 1 /* vsync_polarity */, 50 /* vsync_front_porch */, 16 /* vsync_pulse_width */, 16 /* vsync_back_porch */);
+
+Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
+/* 3.4" square */
+// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, tl034wvs05_b1477a_init_operations, sizeof(tl034wvs05_b1477a_init_operations));
+/* 3.2" bar */
+// 320 /* width */, 820 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, tl032fwv01_init_operations, sizeof(tl032fwv01_init_operations));
+/* 4.0" 720x720 square */
+// 720 /* width */, 720 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, NULL, 0);
+/* 4.0" 480x480 square */
+// 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+// expander, GFX_NOT_DEFINED /* RST */, tl040wvs03_init_operations, sizeof(tl040wvs03_init_operations));
+// 2.1" round
+ 480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+ expander, GFX_NOT_DEFINED /* RST */, TL021WVC02_init_operations, sizeof(TL021WVC02_init_operations));
+
+
+Adafruit_FT6206 ctp = Adafruit_FT6206(); // This library also supports FT6336U!
+#define I2C_TOUCH_ADDR 0x15
+bool touchOK = false;
+
+void setup(void)
+{
+ //while (!Serial) delay(100);
+
+#ifdef GFX_EXTRA_PRE_INIT
+ GFX_EXTRA_PRE_INIT();
+#endif
+
+ Serial.println("Starting touch paint");
+
+ // Init Display
+ Wire.setClock(400000); // speed up I2C
+ if (!gfx->begin()) {
+ Serial.println("gfx->begin() failed!");
+ while (1) yield();
+ }
+
+ gfx->fillScreen(BLACK);
+
+ expander->pinMode(PCA_TFT_BACKLIGHT, OUTPUT);
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
+
+ Serial.println("Hello!");
+ gfx->fillScreen(BLACK);
+ gfx->setCursor(100, gfx->height() / 2 - 75);
+ gfx->setTextSize(5);
+ gfx->setTextColor(WHITE);
+ gfx->println("Hello World!");
+
+ gfx->setCursor(100, gfx->height() / 2 - 25);
+ gfx->setTextColor(RED);
+ gfx->println("RED");
+
+ gfx->setCursor(100, gfx->height() / 2 + 25);
+ gfx->setTextColor(GREEN);
+ gfx->println("GREEN");
+
+ gfx->setCursor(100, gfx->height() / 2 + 75);
+ gfx->setTextColor(BLUE);
+ gfx->println("BLUE");
+
+ if (!ctp.begin(0, &Wire, I2C_TOUCH_ADDR)) {
+ //gfx->setTextColor(RED);
+ //gfx->println("\nTouch not found");
+ Serial.println("No touchscreen found");
+ touchOK = false;
+ } else {
+ gfx->setTextColor(WHITE);
+ gfx->println("\nTouch found");
+ Serial.println("Touchscreen found");
+ touchOK = true;
+ }
+
+ expander->pinMode(PCA_BUTTON_UP, INPUT);
+ expander->pinMode(PCA_BUTTON_DOWN, INPUT);
+}
+
+void loop()
+{
+ if (touchOK && ctp.touched()) {
+ TS_Point p = ctp.getPoint(0);
+ Serial.printf("(%d, %d)\n", p.x, p.y);
+ gfx->fillRect(p.x, p.y, 5, 5, WHITE);
+ }
+
+ // use the buttons to turn off
+ if (! expander->digitalRead(PCA_BUTTON_DOWN)) {
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, LOW);
+ }
+ // and on the backlight
+ if (! expander->digitalRead(PCA_BUTTON_UP)) {
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
+ }
+
+}
diff --git a/Qualia/Qualia_S3_YuleLogPlayer/.none.test.only b/Qualia/Qualia_S3_YuleLogPlayer/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Qualia/Qualia_S3_YuleLogPlayer/MjpegClass.h b/Qualia/Qualia_S3_YuleLogPlayer/MjpegClass.h
new file mode 100644
index 000000000..336fee41b
--- /dev/null
+++ b/Qualia/Qualia_S3_YuleLogPlayer/MjpegClass.h
@@ -0,0 +1,210 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+/*******************************************************************************
+ * ESP32_JPEG Wrapper Class
+ *
+ * Dependent libraries:
+ * ESP32_JPEG: https://github.com/esp-arduino-libs/ESP32_JPEG.git
+ ******************************************************************************/
+#pragma once
+
+#if defined(ESP32)
+
+#define READ_BUFFER_SIZE 1024
+#define MAXOUTPUTSIZE (MAX_BUFFERED_PIXELS / 16 / 16)
+
+#include
+
+#include
+
+class MjpegClass
+{
+public:
+ bool setup(
+ Stream *input, uint8_t *mjpeg_buf,
+ uint16_t *output_buf, size_t output_buf_size, bool useBigEndian)
+ {
+ _input = input;
+ _mjpeg_buf = mjpeg_buf;
+ _output_buf = (uint8_t *)output_buf;
+ _output_buf_size = output_buf_size;
+ _useBigEndian = useBigEndian;
+ _inputindex = 0;
+
+ if (!_read_buf)
+ {
+ _read_buf = (uint8_t *)malloc(READ_BUFFER_SIZE);
+ }
+
+ if (!_read_buf)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ bool readMjpegBuf()
+ {
+ if (_inputindex == 0)
+ {
+ _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE);
+ _inputindex += _buf_read;
+ }
+ _mjpeg_buf_offset = 0;
+ int i = 0;
+ bool found_FFD8 = false;
+ while ((_buf_read > 0) && (!found_FFD8))
+ {
+ i = 0;
+ while ((i < _buf_read) && (!found_FFD8))
+ {
+ if ((_read_buf[i] == 0xFF) && (_read_buf[i + 1] == 0xD8)) // JPEG header
+ {
+ // Serial.printf("Found FFD8 at: %d.\n", i);
+ found_FFD8 = true;
+ }
+ ++i;
+ }
+ if (found_FFD8)
+ {
+ --i;
+ }
+ else
+ {
+ _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE);
+ }
+ }
+ uint8_t *_p = _read_buf + i;
+ _buf_read -= i;
+ bool found_FFD9 = false;
+ if (_buf_read > 0)
+ {
+ i = 3;
+ while ((_buf_read > 0) && (!found_FFD9))
+ {
+ if ((_mjpeg_buf_offset > 0) && (_mjpeg_buf[_mjpeg_buf_offset - 1] == 0xFF) && (_p[0] == 0xD9)) // JPEG trailer
+ {
+ // Serial.printf("Found FFD9 at: %d.\n", i);
+ found_FFD9 = true;
+ }
+ else
+ {
+ while ((i < _buf_read) && (!found_FFD9))
+ {
+ if ((_p[i] == 0xFF) && (_p[i + 1] == 0xD9)) // JPEG trailer
+ {
+ found_FFD9 = true;
+ ++i;
+ }
+ ++i;
+ }
+ }
+
+ // Serial.printf("i: %d\n", i);
+ memcpy(_mjpeg_buf + _mjpeg_buf_offset, _p, i);
+ _mjpeg_buf_offset += i;
+ size_t o = _buf_read - i;
+ if (o > 0)
+ {
+ // Serial.printf("o: %d\n", o);
+ memcpy(_read_buf, _p + i, o);
+ _buf_read = _input->readBytes(_read_buf + o, READ_BUFFER_SIZE - o);
+ _p = _read_buf;
+ _inputindex += _buf_read;
+ _buf_read += o;
+ // Serial.printf("_buf_read: %d\n", _buf_read);
+ }
+ else
+ {
+ _buf_read = _input->readBytes(_read_buf, READ_BUFFER_SIZE);
+ _p = _read_buf;
+ _inputindex += _buf_read;
+ }
+ i = 0;
+ }
+ if (found_FFD9)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ bool decodeJpg()
+ {
+ _remain = _mjpeg_buf_offset;
+
+ // Generate default configuration
+ jpeg_dec_config_t config = {
+ .output_type = JPEG_RAW_TYPE_RGB565_BE,
+ .rotate = JPEG_ROTATE_0D,
+ };
+ // Create jpeg_dec
+ _jpeg_dec = jpeg_dec_open(&config);
+
+ // Create io_callback handle
+ _jpeg_io = (jpeg_dec_io_t *)calloc(1, sizeof(jpeg_dec_io_t));
+
+ // Create out_info handle
+ _out_info = (jpeg_dec_header_info_t *)calloc(1, sizeof(jpeg_dec_header_info_t));
+
+ // Set input buffer and buffer len to io_callback
+ _jpeg_io->inbuf = _mjpeg_buf;
+ _jpeg_io->inbuf_len = _remain;
+
+ jpeg_dec_parse_header(_jpeg_dec, _jpeg_io, _out_info);
+
+ _w = _out_info->width;
+ _h = _out_info->height;
+
+ if ((_w * _h * 2) > _output_buf_size)
+ {
+ return false;
+ }
+ _jpeg_io->outbuf = _output_buf;
+
+ jpeg_dec_process(_jpeg_dec, _jpeg_io);
+ jpeg_dec_close(_jpeg_dec);
+
+ free(_jpeg_io);
+ free(_out_info);
+
+ return true;
+ }
+
+ int16_t getWidth()
+ {
+ return _w;
+ }
+
+ int16_t getHeight()
+ {
+ return _h;
+ }
+
+private:
+ Stream *_input;
+ uint8_t *_mjpeg_buf;
+ uint8_t *_output_buf;
+ size_t _output_buf_size;
+ bool _useBigEndian;
+
+ uint8_t *_read_buf;
+ int32_t _mjpeg_buf_offset = 0;
+
+ jpeg_dec_handle_t *_jpeg_dec;
+ jpeg_dec_io_t *_jpeg_io;
+ jpeg_dec_header_info_t *_out_info;
+
+ int16_t _w = 0, _h = 0;
+
+ int32_t _inputindex = 0;
+ int32_t _buf_read;
+ int32_t _remain = 0;
+};
+
+#endif // defined(ESP32)
diff --git a/Qualia/Qualia_S3_YuleLogPlayer/Qualia_S3_3.2_320x820_Yule_Log.UF2 b/Qualia/Qualia_S3_YuleLogPlayer/Qualia_S3_3.2_320x820_Yule_Log.UF2
new file mode 100644
index 000000000..44c9ca00f
Binary files /dev/null and b/Qualia/Qualia_S3_YuleLogPlayer/Qualia_S3_3.2_320x820_Yule_Log.UF2 differ
diff --git a/Qualia/Qualia_S3_YuleLogPlayer/Qualia_S3_YuleLogPlayer.ino b/Qualia/Qualia_S3_YuleLogPlayer/Qualia_S3_YuleLogPlayer.ino
new file mode 100644
index 000000000..820e27760
--- /dev/null
+++ b/Qualia/Qualia_S3_YuleLogPlayer/Qualia_S3_YuleLogPlayer.ino
@@ -0,0 +1,244 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+/*******************************************************************************
+ * Motion JPEG Image Viewer
+ * This is a simple Motion JPEG image viewer example
+
+encode with
+ffmpeg -i "wash.mp4" -vf "fps=10,vflip,hflip,scale=-1:480:flags=lanczos,crop=480:480" -pix_fmt yuvj420p -q:v 9 wash.mjpeg
+
+ ******************************************************************************/
+#define MJPEG_FOLDER "/videos" // cannot be root!
+#define MJPEG_OUTPUT_SIZE (820 * 320 * 2) // memory for a output image frame
+#define MJPEG_BUFFER_SIZE (MJPEG_OUTPUT_SIZE / 5) // memory for a single JPEG frame
+#define MJPEG_LOOPS 0
+
+#include
+#include "Adafruit_FT6206.h"
+//#include // uncomment either SD or SD_MMC
+#include
+
+Arduino_XCA9554SWSPI *expander = new Arduino_XCA9554SWSPI(
+ PCA_TFT_RESET, PCA_TFT_CS, PCA_TFT_SCK, PCA_TFT_MOSI,
+ &Wire, 0x3F);
+
+Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
+ TFT_DE, TFT_VSYNC, TFT_HSYNC, TFT_PCLK,
+ TFT_R1, TFT_R2, TFT_R3, TFT_R4, TFT_R5,
+ TFT_G0, TFT_G1, TFT_G2, TFT_G3, TFT_G4, TFT_G5,
+ TFT_B1, TFT_B2, TFT_B3, TFT_B4, TFT_B5,
+ 1 /* hsync_polarity */, 50 /* hsync_front_porch */, 2 /* hsync_pulse_width */, 44 /* hsync_back_porch */,
+ 1 /* vsync_polarity */, 16 /* vsync_front_porch */, 2 /* vsync_pulse_width */, 18 /* vsync_back_porch */
+ //,1, 30000000
+ );
+
+Arduino_RGB_Display *gfx = new Arduino_RGB_Display(
+/* 3.2" bar */
+ 320 /* width */, 820 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
+ expander, GFX_NOT_DEFINED /* RST */, tl032fwv01_init_operations, sizeof(tl032fwv01_init_operations));
+
+Adafruit_FT6206 ctp = Adafruit_FT6206(); // This library also supports FT6336U!
+#define I2C_TOUCH_ADDR 0x38
+bool touchOK = false;
+
+#include
+
+#include "MjpegClass.h"
+static MjpegClass mjpeg;
+File mjpegFile, video_dir;
+uint8_t *mjpeg_buf;
+uint16_t *output_buf;
+
+unsigned long total_show_video = 0;
+
+void setup()
+{
+ Serial.begin(115200);
+ Serial.setDebugOutput(true);
+ //while(!Serial) delay(10);
+ Serial.println("MJPEG Video Playback Demo");
+
+#ifdef GFX_EXTRA_PRE_INIT
+ GFX_EXTRA_PRE_INIT();
+#endif
+
+ // Init Display
+ Wire.setClock(400000); // speed up I2C
+ if (!gfx->begin()) {
+ Serial.println("gfx->begin() failed!");
+ }
+ gfx->fillScreen(BLUE);
+
+ expander->pinMode(PCA_TFT_BACKLIGHT, OUTPUT);
+ expander->digitalWrite(PCA_TFT_BACKLIGHT, HIGH);
+
+ //while (!SD.begin(ss, SPI, 64000000UL))
+ //SD_MMC.setPins(SCK /* CLK */, MOSI /* CMD/MOSI */, MISO /* D0/MISO */);
+ SD_MMC.setPins(SCK, MOSI /* CMD/MOSI */, MISO /* D0/MISO */, A0 /* D1 */, A1 /* D2 */, SS /* D3/CS */); // quad MMC!
+ while (!SD_MMC.begin("/root", true))
+ {
+ Serial.println(F("ERROR: File System Mount Failed!"));
+ gfx->println(F("ERROR: File System Mount Failed!"));
+ delay(1000);
+ }
+ Serial.println("Found SD Card");
+
+ // open filesystem
+ //video_dir = SD.open(MJPEG_FOLDER);
+ video_dir = SD_MMC.open(MJPEG_FOLDER);
+ if (!video_dir || !video_dir.isDirectory()){
+ Serial.println("Failed to open " MJPEG_FOLDER " directory");
+ while (1) delay(100);
+ }
+ Serial.println("Opened Dir");
+
+ mjpeg_buf = (uint8_t *)malloc(MJPEG_BUFFER_SIZE);
+ if (!mjpeg_buf) {
+ Serial.println(F("mjpeg_buf malloc failed!"));
+ while (1) delay(100);
+ }
+ Serial.println("Allocated decoding buffer");
+
+ output_buf = (uint16_t *)heap_caps_aligned_alloc(16, MJPEG_OUTPUT_SIZE, MALLOC_CAP_8BIT);
+ if (!output_buf) {
+ Serial.println(F("output_buf malloc failed!"));
+ while (1) delay(100);
+ }
+
+ expander->pinMode(PCA_BUTTON_UP, INPUT);
+ expander->pinMode(PCA_BUTTON_DOWN, INPUT);
+
+ if (!ctp.begin(0, &Wire, I2C_TOUCH_ADDR)) {
+ Serial.println("No touchscreen found");
+ touchOK = false;
+ } else {
+ Serial.println("Touchscreen found");
+ touchOK = true;
+ }
+}
+
+void loop()
+{
+ /* variables */
+ int total_frames = 0;
+ unsigned long total_read_video = 0;
+ unsigned long total_decode_video = 0;
+ unsigned long start_ms, curr_ms;
+ uint8_t check_UI_count = 0;
+ int16_t x = -1, y = -1, w = -1, h = -1;
+ total_show_video = 0;
+
+ if (mjpegFile) mjpegFile.close();
+ Serial.println("looking for a file...");
+
+ if (!video_dir || !video_dir.isDirectory()){
+ Serial.println("Failed to open " MJPEG_FOLDER " directory");
+ while (1) delay(100);
+ }
+
+ // look for first mjpeg file
+ while ((mjpegFile = video_dir.openNextFile()) != 0) {
+ if (!mjpegFile.isDirectory()) {
+ Serial.print(" FILE: ");
+ Serial.print(mjpegFile.name());
+ Serial.print(" SIZE: ");
+ Serial.println(mjpegFile.size());
+ if ((strstr(mjpegFile.name(), ".mjpeg") != 0) || (strstr(mjpegFile.name(), ".MJPEG") != 0)) {
+ Serial.println(" <---- found a video!");
+ break;
+ }
+ }
+ if (mjpegFile) mjpegFile.close();
+ }
+
+ if (!mjpegFile || mjpegFile.isDirectory())
+ {
+ Serial.println(F("ERROR: Failed to find a MJPEG file for reading, resetting..."));
+ //gfx->println(F("ERROR: Failed to find a MJPEG file for reading"));
+
+ // We kept getting hard crashes when trying to rewindDirectory or close/open dir
+ // so we're just going to do a softreset
+ esp_sleep_enable_timer_wakeup(1000);
+ esp_deep_sleep_start();
+ }
+
+ bool done_looping = false;
+ while (!done_looping) {
+ mjpegFile.seek(0);
+ total_frames = 0;
+ total_read_video = 0;
+ total_decode_video = 0;
+ total_show_video = 0;
+
+ Serial.println(F("MJPEG start"));
+
+ start_ms = millis();
+ curr_ms = millis();
+ if (! mjpeg.setup(&mjpegFile, mjpeg_buf, output_buf, MJPEG_OUTPUT_SIZE, true /* useBigEndian */)) {
+ Serial.println("mjpeg.setup() failed");
+ while (1) delay(100);
+ }
+
+ while (mjpegFile.available() && mjpeg.readMjpegBuf())
+ {
+ // Read video
+ total_read_video += millis() - curr_ms;
+ curr_ms = millis();
+
+ // Play video
+ mjpeg.decodeJpg();
+ total_decode_video += millis() - curr_ms;
+ curr_ms = millis();
+
+ if (x == -1) {
+ w = mjpeg.getWidth();
+ h = mjpeg.getHeight();
+ x = (w > gfx->width()) ? 0 : ((gfx->width() - w) / 2);
+ y = (h > gfx->height()) ? 0 : ((gfx->height() - h) / 2);
+ }
+ gfx->draw16bitBeRGBBitmap(x, y, output_buf, w, h);
+ total_show_video += millis() - curr_ms;
+
+ curr_ms = millis();
+ total_frames++;
+ check_UI_count++;
+ if (check_UI_count >= 5) {
+ check_UI_count = 0;
+ Serial.print('.');
+
+ if (! expander->digitalRead(PCA_BUTTON_DOWN)) {
+ Serial.println("\nDown pressed");
+ done_looping = true;
+ while (! expander->digitalRead(PCA_BUTTON_DOWN)) delay(10);
+ break;
+ }
+ if (! expander->digitalRead(PCA_BUTTON_UP)) {
+ Serial.println("\nUp pressed");
+ done_looping = true;
+ while (! expander->digitalRead(PCA_BUTTON_UP)) delay(10);
+ break;
+ }
+
+ if (touchOK && ctp.touched()) {
+ TS_Point p = ctp.getPoint(0);
+ Serial.printf("(%d, %d)\n", p.x, p.y);
+ done_looping = true;
+ break;
+ }
+ }
+ }
+ int time_used = millis() - start_ms;
+ Serial.println(F("MJPEG end"));
+
+ float fps = 1000.0 * total_frames / time_used;
+ total_decode_video -= total_show_video;
+ Serial.printf("Total frames: %d\n", total_frames);
+ Serial.printf("Time used: %d ms\n", time_used);
+ Serial.printf("Average FPS: %0.1f\n", fps);
+ Serial.printf("Read MJPEG: %lu ms (%0.1f %%)\n", total_read_video, 100.0 * total_read_video / time_used);
+ Serial.printf("Decode video: %lu ms (%0.1f %%)\n", total_decode_video, 100.0 * total_decode_video / time_used);
+ Serial.printf("Show video: %lu ms (%0.1f %%)\n", total_show_video, 100.0 * total_show_video / time_used);
+ }
+}
diff --git a/Qualia_S3_Space_Clock/Roboto-Regular-47.pcf b/Qualia_S3_Space_Clock/Roboto-Regular-47.pcf
new file mode 100644
index 000000000..ec0386846
Binary files /dev/null and b/Qualia_S3_Space_Clock/Roboto-Regular-47.pcf differ
diff --git a/Qualia_S3_Space_Clock/code.py b/Qualia_S3_Space_Clock/code.py
new file mode 100644
index 000000000..dfcfff9ba
--- /dev/null
+++ b/Qualia_S3_Space_Clock/code.py
@@ -0,0 +1,244 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+# Written by Liz Clark (Adafruit Industries) with OpenAI ChatGPT v4 Aug 3rd, 2023 build
+# https://help.openai.com/en/articles/6825453-chatgpt-release-notes
+
+# https://chat.openai.com/share/63cbe4c6-007f-4934-a458-a9c8a521620e
+# https://chat.openai.com/share/674c0f13-bc78-4d1e-be79-3bc777e29991
+
+import time
+from math import pi, cos, sin
+import os
+import ssl
+import wifi
+import socketpool
+import adafruit_requests
+import board
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+import vectorio
+import displayio
+from adafruit_io.adafruit_io import IO_HTTP
+from jepler_udecimal import Decimal
+import keypad
+from adafruit_display_text import label
+from adafruit_bitmap_font import bitmap_font
+from adafruit_qualia.graphics import Graphics, Displays
+
+# timezone offset for calculating mars time
+timezone = -5
+
+key = keypad.Keys((board.A0,), value_when_pressed=False, pull=True)
+
+wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
+print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
+
+aio_username = os.getenv('ADAFRUIT_AIO_USERNAME')
+aio_key = os.getenv('ADAFRUIT_AIO_KEY')
+
+context = ssl.create_default_context()
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, context)
+io = IO_HTTP(aio_username, aio_key, requests)
+
+earth_bitmap = displayio.OnDiskBitmap("/earth.bmp")
+mars_bitmap = displayio.OnDiskBitmap("/mars.bmp")
+
+graphics = Graphics(Displays.ROUND40, default_bg=None, auto_refresh=True)
+
+earth_grid = displayio.TileGrid(earth_bitmap, pixel_shader=earth_bitmap.pixel_shader)
+earth_group = displayio.Group()
+earth_group.append(earth_grid)
+
+mars_grid = displayio.TileGrid(mars_bitmap, pixel_shader=mars_bitmap.pixel_shader)
+mars_group = displayio.Group()
+mars_group.append(mars_grid)
+
+def center(grid, bitmap):
+ # center the image
+ grid.x -= (bitmap.width - graphics.display.width) // 2
+ grid.y -= (bitmap.height - graphics.display.height) // 2
+
+center(mars_grid, mars_bitmap)
+center(earth_grid, earth_bitmap)
+
+graphics.display.root_group = mars_group
+
+# pointer using vectorio, first the hub
+pointer_pal = displayio.Palette(4)
+pointer_pal[0] = 0xff0000
+pointer_pal[1] = 0x000000
+pointer_pal[2] = 0x0000ff
+pointer_pal[3] = 0xffffff
+pointer_hub = vectorio.Circle(pixel_shader=pointer_pal, radius=26, x=0, y=0)
+pointer_hub.x = graphics.display.width // 2
+pointer_hub.y = graphics.display.height // 2
+
+# minute hand
+mw = 23
+mh = 225
+min_points = [(mw,0), (mw,-mh), (-mw,-mh), (-mw,0)]
+min_hand = vectorio.Polygon(pixel_shader=pointer_pal, points=min_points, x=0,y=0)
+min_hand.x = graphics.display.width // 2
+min_hand.y = graphics.display.height // 2
+mars_group.append(min_hand)
+earth_group.append(min_hand)
+# hour hand
+hw = 25
+hh = 175
+hour_points = [(hw,0), (hw,-hh), (-hw,-hh), (-hw,0)]
+hour_hand = vectorio.Polygon(pixel_shader=pointer_pal, points=hour_points,
+ x=0, y=0, color_index=1)
+hour_hand.x = graphics.display.width // 2
+hour_hand.y = graphics.display.height // 2
+mars_group.append(hour_hand)
+earth_group.append(hour_hand)
+
+# add numbers to the clock face
+def calculate_number_position(number, center_x, center_y, radius):
+ angle = (360 / 12) * (number - 3) # -3 adjusts the angle to start at 12 o'clock
+ rad_angle = pi * angle / 180
+ if number >=8:
+ x = int(center_x + cos(rad_angle) * radius-40)
+ x = int(center_x + cos(rad_angle) * radius)
+ y = int(center_y + sin(rad_angle) * radius)
+ return x, y
+
+clock_face_numbers = {i: calculate_number_position(i, graphics.display.width // 2,
+ graphics.display.height // 2, 300) for i in range(1, 13)}
+
+font_file = "/Roboto-Regular-47.pcf"
+
+for i in range(1, 13):
+ mars_c = vectorio.Circle(pixel_shader=pointer_pal, radius=30, x=clock_face_numbers[i][0]+12,
+ y=clock_face_numbers[i][1], color_index=1)
+ earth_c = vectorio.Circle(pixel_shader=pointer_pal, radius=30, x=clock_face_numbers[i][0]+12,
+ y=clock_face_numbers[i][1], color_index=3)
+ if i >= 10:
+ mars_c.x = mars_c.x + 14
+ earth_c.x = earth_c.x + 14
+ mars_group.append(mars_c)
+ earth_group.append(earth_c)
+ text = str(i)
+ font = bitmap_font.load_font(font_file)
+
+ mars_text = label.Label(font, text=text, color=0xFFFFFF)
+ earth_text = label.Label(font, text=text, color=0x000000)
+ mars_text.x = clock_face_numbers[i][0]
+ mars_text.y = clock_face_numbers[i][1]
+ earth_text.x = clock_face_numbers[i][0]
+ earth_text.y = clock_face_numbers[i][1]
+ mars_group.append(mars_text)
+ earth_group.append(earth_text)
+
+mars_group.append(pointer_hub)
+earth_group.append(pointer_hub)
+
+# get time from adafruit io
+# called once an hour in the loop
+def update_time():
+ print("time")
+ now = io.receive_time()
+ return now
+
+def convert_time(the_time):
+ h = the_time[3]
+ if h >= 12:
+ h -= 12
+ a = "PM"
+ else:
+ a = "AM"
+ if h == 0:
+ h = 12
+ return h, a
+
+# get mars time
+def mars_time():
+ dt = io.receive_time()
+ print(dt)
+ utc_offset = 3600 * -timezone
+ tai_offset = 37
+ millis = time.mktime(dt)
+ unix_timestamp = millis + utc_offset
+
+ # Convert to MSD
+ msd = (unix_timestamp + tai_offset) / Decimal("88775.244147") + Decimal("34127.2954262")
+ print(msd)
+ # Convert MSD to MTC
+ mtc = (msd % 1) * 24
+ mtc_hours = int(mtc)
+ mtc_minutes = int((mtc * 60) % 60)
+ mtc_seconds = int(((mtc * 3600)) % 60)
+
+ print(f"Mars Time: {mtc_hours:02d}:{mtc_minutes:02d}:{mtc_seconds:02d}")
+ return mtc_minutes, mtc_hours
+
+def time_angle(m, the_hour):
+ m_offset = 25 if 12 <= m < 18 or 42 <= m < 48 else 5
+ h_offset = 25 if 2 <= the_hour % 12 < 4 or 8 <= the_hour % 12 < 10 else 5
+ # Adjusted angle calculation for minute hand
+ theta_minute = 360 - (m / 60) * 360
+ theta_hour = ((the_hour / 12) + (m / (12 * 60))) * 360
+ # Calculate coordinates for minute hand (mirrored)
+ minute_x = -int(cos(pi * (theta_minute - 90) / 180) * mh)
+ minute_y = int(sin(pi * (theta_minute + 90) / 180) * mh)
+ hour_x = int(cos(pi * (theta_hour - 90) / 180) * hh)
+ hour_y = int(sin(pi * (theta_hour + 90) / 180) * hh)
+ min_hand.points = [(mw, 0), (minute_x + m_offset, -minute_y),
+ (minute_x - m_offset, -minute_y), (-mw, 0)]
+ hour_hand.points = [(hw, 0), (hour_x + h_offset, -hour_y),
+ (hour_x - h_offset, -hour_y), (-hw, 0)]
+
+clock_timer = 1 * 1000
+clock_clock = ticks_ms()
+clock = update_time()
+hour, am_pm = convert_time(clock)
+tick = clock[5]
+minute = clock[4]
+mars_min, mars_hour = mars_time()
+show_earth = True
+
+time_angle(minute, hour)
+
+while True:
+ event = key.events.get()
+ # swap between earth or mars time
+ if event:
+ if event.pressed:
+ print("updating display")
+ show_earth = not show_earth
+ # update background image
+ # change minute hand color depending on background
+ if show_earth:
+ if min_hand.color_index != 2:
+ time_angle(minute, hour)
+ graphics.display.root_group = earth_group
+ min_hand.color_index = 2
+ pointer_hub.color_index = 2
+ else:
+ if min_hand.color_index != 0:
+ time_angle(mars_min, mars_hour)
+ graphics.display.root_group = mars_group
+ min_hand.color_index = 0
+ pointer_hub.color_index = 0
+ # use ticks for timekeeping
+ # every minute update clock hands
+ # recheck IO time every hour
+ if ticks_diff(ticks_ms(), clock_clock) >= clock_timer:
+ tick += 1
+ if tick > 59:
+ tick = 0
+ minute += 1
+ if minute > 59:
+ clock = update_time()
+ hour, am_pm = convert_time(clock)
+ tick = clock[5]
+ minute = clock[4]
+ print(f"{hour}:{minute:02} {am_pm}")
+ mars_min, mars_hour = mars_time()
+ if show_earth:
+ time_angle(minute, hour)
+ else:
+ time_angle(mars_min, mars_hour)
+ clock_clock = ticks_add(clock_clock, clock_timer)
diff --git a/Qualia_S3_Space_Clock/earth.bmp b/Qualia_S3_Space_Clock/earth.bmp
new file mode 100644
index 000000000..7c4fcf326
Binary files /dev/null and b/Qualia_S3_Space_Clock/earth.bmp differ
diff --git a/Qualia_S3_Space_Clock/mars.bmp b/Qualia_S3_Space_Clock/mars.bmp
new file mode 100644
index 000000000..b8c4677fd
Binary files /dev/null and b/Qualia_S3_Space_Clock/mars.bmp differ
diff --git a/RBG_Matrix/code.py b/RBG_Matrix/code.py
index df6b13457..f49e47b15 100644
--- a/RBG_Matrix/code.py
+++ b/RBG_Matrix/code.py
@@ -47,26 +47,13 @@
g.append(R)
g.append(B)
g.append(G)
-display.show(g)
+display.root_group = g
display.auto_refresh = True
-
-# CircuitPython 6 & 7 compatible
-bitmap_file = open("/rbg.bmp", "rb")
-# Setup the file as the bitmap data source
-bitmap = displayio.OnDiskBitmap(bitmap_file)
+# Setup the filename as the bitmap data source
+bitmap = displayio.OnDiskBitmap("/rbg.bmp")
# Create a TileGrid to hold the bitmap
-tile_grid = displayio.TileGrid(
- bitmap,
- pixel_shader=getattr(bitmap, 'pixel_shader', displayio.ColorConverter())
-)
-
-# # CircuitPython 7+ compatible
-# # Setup the filename as the bitmap data source
-# bitmap = displayio.OnDiskBitmap("/rbg.bmp")
-# # Create a TileGrid to hold the bitmap
-# tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
-
+tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
print(dir(tile_grid))
diff --git a/README.md b/README.md
index 0bd0b6793..aa915102f 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,57 @@
-[](https://travis-ci.com/adafruit/Adafruit_Learning_System_Guides)
# Introduction
-This is a collection of smaller programs and scripts to display "inline" in
-[Adafruit Learning System][learn] guides. Subdirectories here will generally
-contain a README with a link to their corresponding guide.
+This is a collection of smaller programs and scripts to display "inline" in [Adafruit Learning System][learn] guides.
-## Testing
+Adafruit is an Open Source company. To support Adafruit, please consider buying products at [adafruit.com](https://www.adafruit.com/).
-The code here is partially checked by GitHub Actions against Pylint (for
-CircuitPython code) or the Arduino compilation process.
+Starting in 2023, guides using a specific Adafruit board will be placed in a subdirectory with that product name to reduce the number of directories under the main directory. If you are creating a new guide, please check if your Adafruit board falls into one of these groups and make your project code directory in the appropriate subfolder.
-Code in directories containing a file called `.circuitpython.skip` will be
-skipped by Pylint checks.
+* Flora/
+* ItsyBitsy/
+* MagTag/
+* MEMENTO/
+* NeoTrellis/
+* PyLeap/
+* PyPortal/
+* QTPy/
-Code in directories containing a `.[platformname].test` file, such as
-`.uno.test` will be compiled against the corresponding platform.
+If a new product or project group is contemplated, contact Learn moderators for guidance.
-This is a work in progress.
+## Issues
+
+Issues with guides should be reported in the guide itself under "Feedback? Corrections?"
+
+## Make Your Own Guides
+
+This repo is only for Adafruit approved Learning System Guides. If you'd like to write your own guide, see [Create your own content with Adafruit Playground!](https://learn.adafruit.com/adafruit-playground-notes).
+
+## Contributing and Testing
+
+For details on contributing for Adafruit approved guides, see the guide [Contribute to the Adafruit Learning System with Git and GitHub](https://learn.adafruit.com/contribute-to-the-adafruit-learning-system-with-git-and-github) and [Contribute to CircuitPython with Git and GitHub](https://learn.adafruit.com/contribute-to-circuitpython-with-git-and-github/github-personal-access-token).
+
+The code here is checked by GitHub Actions against Pylint (for CircuitPython code) or the Arduino compilation process.
+
+Code in directories containing a file called `.circuitpython.skip` will be skipped by Pylint checks.
+
+Code in directories containing a `.[platformname].test` file, such as `.uno.test` will be compiled against the corresponding platform.
[learn]: https://learn.adafruit.com/
+## Running pylint locally
+Install a specific version of pylint under the name "pylint-learn":
+```
+pip install pipx
+pipx install --suffix=-learn pylint==2.7.1
+```
+Then use the `pylint_check` script to run pylint on the files or directories
+of your choice (note that your terminal *must* be in the top directory of
+Adafruit_Learning_System_Guides, not a sub-directory):
+```
+./pylint_check CircuitPython_Cool_Project
+```
+## Licensing
+
+Adafruit Learning System code files should have author and license information conforming to the open [SPDX specification](https://www.iso.org/standard/81870.html).
+See [this page](https://learn.adafruit.com/contribute-to-the-adafruit-learning-system-with-git-and-github/add-author-and-license-information) for more.
+
+Updated November 29, 2023
diff --git a/RGB_Matrix_Dreidel_Game/code.py b/RGB_Matrix_Dreidel_Game/code.py
index 15be691be..f5a7ad0c0 100644
--- a/RGB_Matrix_Dreidel_Game/code.py
+++ b/RGB_Matrix_Dreidel_Game/code.py
@@ -9,11 +9,18 @@
import displayio
import adafruit_imageload
from audiocore import WaveFile
-from audioio import AudioOut
from adafruit_motor import servo
from digitalio import DigitalInOut, Direction, Pull
from adafruit_matrixportal.matrix import Matrix
+I2S_VERSION = False # set to True if using I2S audio out
+
+# import the appropriate audio module
+if I2S_VERSION:
+ from audiobusio import I2SOut
+else:
+ from audioio import AudioOut
+
# setup for down button on matrixportal
switch = DigitalInOut(board.BUTTON_DOWN)
switch.direction = Direction.INPUT
@@ -36,7 +43,10 @@
wave = WaveFile(wave_file)
# setup for audio out
-audio = AudioOut(board.A0)
+if I2S_VERSION:
+ audio = I2SOut(board.A2, board.A3, board.TX)
+else:
+ audio = AudioOut(board.A0)
# setup for matrix display
matrix = Matrix(width=32, height=32)
@@ -58,7 +68,7 @@
group.append(dreidel_grid)
# show dreidel bitmap
-display.show(group)
+display.root_group = group
timer = 0 # time.monotonic() holder
spin = 0 # index for tilegrid
diff --git a/RGB_Matrix_New_York_Times_Title_Scroller/api-nytimes-com-chain.pem b/RGB_Matrix_New_York_Times_Title_Scroller/api-nytimes-com-chain.pem
new file mode 100755
index 000000000..205685f17
--- /dev/null
+++ b/RGB_Matrix_New_York_Times_Title_Scroller/api-nytimes-com-chain.pem
@@ -0,0 +1,98 @@
+-----BEGIN CERTIFICATE-----
+MIIHnzCCBYegAwIBAgIQD2xhgnbWafj8ozVqw5o/EDANBgkqhkiG9w0BAQsFADBc
+MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xNDAyBgNVBAMT
+K1JhcGlkU1NMIEdsb2JhbCBUTFMgUlNBNDA5NiBTSEEyNTYgMjAyMiBDQTEwHhcN
+MjIxMjE1MDAwMDAwWhcNMjQwMTE1MjM1OTU5WjAaMRgwFgYDVQQDEw9hcGkubnl0
+aW1lcy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmPNlU5Ufy
+Sj5lpHfbJV/EIbjWcMd/jUyuiLdfiIkkNe5LLodDhMWIiVFaaFt1cn67UMpjb9lH
+RB2Ndf1ymDysmrg3qc8mLvNbQqZytF3l5t80wzi18XuNsJb9Q+RTMsimYRV5aN3c
+LKhhVV8jDC+fl0kpF6DS/M2adWxhGWebu7oZAgo2dw1cue1rvWcOx+Qs4U5hxWZ1
+2qCG5lQtBQmtMb9iCoaaBC8YuB/+1zMNw6kReCOj9eEgmYYsIzHTjt7uU3+yh0St
+Bdz1NQkoaq27GaM+J7NCwJvqMr2QBeSFmlijCJbSj+2WWneaEj7zjIkhhEEFQcoA
+yRR1RDDh6PGbAgMBAAGjggOdMIIDmTAfBgNVHSMEGDAWgBTwnIX9op99j8lou9XU
+iU0dvtOQ/zAdBgNVHQ4EFgQU3WgqBFsQws321vqwe1pzjTZlN5EwLwYDVR0RBCgw
+JoIPYXBpLm55dGltZXMuY29tghN3d3cuYXBpLm55dGltZXMuY29tMA4GA1UdDwEB
+/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwgZ8GA1UdHwSB
+lzCBlDBIoEagRIZCaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xv
+YmFsVExTUlNBNDA5NlNIQTI1NjIwMjJDQTEuY3JsMEigRqBEhkJodHRwOi8vY3Js
+NC5kaWdpY2VydC5jb20vUmFwaWRTU0xHbG9iYWxUTFNSU0E0MDk2U0hBMjU2MjAy
+MkNBMS5jcmwwPgYDVR0gBDcwNTAzBgZngQwBAgEwKTAnBggrBgEFBQcCARYbaHR0
+cDovL3d3dy5kaWdpY2VydC5jb20vQ1BTMIGHBggrBgEFBQcBAQR7MHkwJAYIKwYB
+BQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBRBggrBgEFBQcwAoZFaHR0
+cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL1JhcGlkU1NMR2xvYmFsVExTUlNBNDA5
+NlNIQTI1NjIwMjJDQTEuY3J0MAkGA1UdEwQCMAAwggF+BgorBgEEAdZ5AgQCBIIB
+bgSCAWoBaAB2AO7N0GTV2xrOxVy3nbTNE6Iyh0Z8vOzew1FIWUZxH7WbAAABhRaF
+wuEAAAQDAEcwRQIgKLCeqkrjGe9nSC/sbLDMHvfQDvi8RFzgjnz5qicayc8CIQCg
+guI7j2ciedxxEsR7mMiA2aD9Z3ro0zLEMHTBILX76gB3AHPZnokbTJZ4oCB9R53m
+ssYc0FFecRkqjGuAEHrBd3K1AAABhRaFw0cAAAQDAEgwRgIhAKBU50wlOLjF3zzS
+UhZHC57tDPTIab3BdyX6Z5E1hLZAAiEAkZFZJ/JtfykHDaOjQvSEiv9S7SAs0jQa
+MCBaFN14Ku8AdQBIsONr2qZHNA/lagL6nTDrHFIBy1bdLIHZu7+rOdiEcwAAAYUW
+hcMFAAAEAwBGMEQCIF8lbd6U3N7GCS24Dm/Hge5Rojk8rtF8kXTjTemPTMaOAiAJ
+pVGauhZb0KtXRmw0bA+sUjV4f+CXGxSY7jqXnbUngTANBgkqhkiG9w0BAQsFAAOC
+AgEAZvUvxSgTCZ4Bh9Pb9mwSUrVvOq652qoiSn6C1GiInXn/auNS54cT5kYXxK1j
+DEZXswyAilEKPeqgcSqF7xXdiTBAey0MOqqr4+BPjjz2kDQ6ABfkYkwiqTWq76Ag
+0BNe1O970ghOVds/4KqekBiTce4Ynq+TsxURWGh9U1IqfpKpZf2Y1nVmGhGRuW2M
+Ddj7UesSSdHCepBOtbaxDu1TY3aizN6MhJtnX7nxGUyhxcTBmLgzi0MBPrna/w4n
+4m+v1DcGe+s+uu/J/Q7A4OPijlVnaDHIEBGx1VJj8WRy70sQTWihbKoRkcTBBo+/
+JPdSVsCoSQuMe1fWDO0Q6GvoZqnEgdAfvkLDmfUKo3TXHK99YEcMjPYB+nG6/oce
+EERCPqvT/d2IM5uv3ygGZpmL0c0DoaddkbZvlD5ecPBLCv0qIPbXCVlh6pku/dgp
+NDoXlCJiBAJQtMGpTZxRzrMUf3wIhBYisZuWjet7tXG6r+mkH0e+czpzGxrsfD6i
+UZ+C98AP2Ulz65Fdp0qWqSw0fzgGAolG2orthYQCFgio1n7y9Z9HgA+JAFygfzjD
+rd2ariejy+cFLQGQSfbeD+/IQ6DlKMWJFfr5GOc67Q1VL0+99wq/zIjidfCqBazX
+XoyjoXl3T+HH8yNk1jqgMxWVvz1eGVsi2vu6uLe5/27RIfQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFyzCCBLOgAwIBAgIQCgWbJfVLPYeUzGYxR3U4ozANBgkqhkiG9w0BAQsFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0yMjA1MDQwMDAwMDBaFw0zMTExMDkyMzU5NTlaMFwxCzAJBgNVBAYTAlVT
+MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE0MDIGA1UEAxMrUmFwaWRTU0wgR2xv
+YmFsIFRMUyBSU0E0MDk2IFNIQTI1NiAyMDIyIENBMTCCAiIwDQYJKoZIhvcNAQEB
+BQADggIPADCCAgoCggIBAKY5PJhwCX2UyBb1nelu9APen53D5+C40T+BOZfSFaB0
+v0WJM3BGMsuiHZX2IHtwnjUhLL25d8tgLASaUNHCBNKKUlUGRXGztuDIeXb48d64
+k7Gk7u7mMRSrj+yuLSWOKnK6OGKe9+s6oaVIjHXY+QX8p2I2S3uew0bW3BFpkeAr
+LBCU25iqeaoLEOGIa09DVojd3qc/RKqr4P11173R+7Ub05YYhuIcSv8e0d7qN1sO
+1+lfoNMVfV9WcqPABmOasNJ+ol0hAC2PTgRLy/VZo1L0HRMr6j8cbR7q0nKwdbn4
+Ar+ZMgCgCcG9zCMFsuXYl/rqobiyV+8U37dDScAebZTIF/xPEvHcmGi3xxH6g+dT
+CjetOjJx8sdXUHKXGXC9ka33q7EzQIYlZISF7EkbT5dZHsO2DOMVLBdP1N1oUp0/
+1f6fc8uTDduELoKBRzTTZ6OOBVHeZyFZMMdi6tA5s/jxmb74lqH1+jQ6nTU2/Mma
+hGNxUuJpyhUHezgBA6sto5lNeyqc+3Cr5ehFQzUuwNsJaWbDdQk1v7lqRaqOlYjn
+iomOl36J5txTs0wL7etCeMRfyPsmc+8HmH77IYVMUOcPJb+0gNuSmAkvf5QXbgPI
+Zursn/UYnP9obhNbHc/9LYdQkB7CXyX9mPexnDNO7pggNA2jpbEarLmZGi4grMmf
+AgMBAAGjggGCMIIBfjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTwnIX9
+op99j8lou9XUiU0dvtOQ/zAfBgNVHSMEGDAWgBQD3lA1VtFMu2bwo+IbG8OXsj3R
+VTAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
+MHYGCCsGAQUFBwEBBGowaDAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl
+cnQuY29tMEAGCCsGAQUFBzAChjRodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v
+RGlnaUNlcnRHbG9iYWxSb290Q0EuY3J0MEIGA1UdHwQ7MDkwN6A1oDOGMWh0dHA6
+Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwPQYD
+VR0gBDYwNDALBglghkgBhv1sAgEwBwYFZ4EMAQEwCAYGZ4EMAQIBMAgGBmeBDAEC
+AjAIBgZngQwBAgMwDQYJKoZIhvcNAQELBQADggEBAAfjh/s1f5dDdfm0sNm74/dW
+MbbsxfYV1LoTpFt+3MSUWvSbiPQfUkoV57b5rutRJvnPP9mSlpFwcZ3e1nSUbi2o
+ITGA7RCOj23I1F4zk0YJm42qAwJIqOVenR3XtyQ2VR82qhC6xslxtNf7f2Ndx2G7
+Mem4wpFhyPDT2P6UJ2MnrD+FC//ZKH5/ERo96ghz8VqNlmL5RXo8Ks9rMr/Ad9xw
+Y4hyRvAz5920myUffwdUqc0SvPlFnahsZg15uT5HkK48tHR0TLuLH8aRpzh4KJ/Y
+p0sARNb+9i1R4Fg5zPNvHs2BbIve0vkwxAy+R4727qYzl3027w9jEFC6HMXRaDc=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
diff --git a/RGB_Matrix_New_York_Times_Title_Scroller/code.py b/RGB_Matrix_New_York_Times_Title_Scroller/code.py
new file mode 100755
index 000000000..89dc43b1b
--- /dev/null
+++ b/RGB_Matrix_New_York_Times_Title_Scroller/code.py
@@ -0,0 +1,70 @@
+# SPDX-FileCopyrightText: 2023 Trevor Beaton for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import time
+import ssl
+import wifi
+import board
+import terminalio
+import socketpool
+from adafruit_matrixportal.matrixportal import MatrixPortal
+import adafruit_requests
+
+SCROLL_DELAY = 0.03
+time_interval = 5
+
+text_color = 0xFC6900 # e.g., Retro Orange
+
+BASE_URL = "https://api.nytimes.com/svc/topstories/v2/"
+CATEGORY = "arts" # Change this to whatever category you want
+
+# The following values are allowed:
+# arts, automobiles, books/review, business, fashion, food, health, home, insider, magazine, movies,
+# nyregion, obituaries, opinion, politics, realestate, science, sports, sundayreview, technology,
+# theater, t-magazine, travel, upshot, us, world
+
+# --- Wi-Fi setup ---
+wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
+print(f"Connected to {os.getenv('CIRCUITPY_WIFI_SSID')}")
+
+# --- Display setup ---
+matrixportal = MatrixPortal(status_neopixel=board.NEOPIXEL, debug=True)
+
+matrixportal.add_text(
+ text_font=terminalio.FONT,
+ text_position=(0, (matrixportal.graphics.display.height // 2) - 1),
+ scrolling=True,
+)
+
+NYT_header_text_area = matrixportal.add_text(
+ text_font=terminalio.FONT,
+ text_position=(0, (matrixportal.graphics.display.height // 6) - 1),
+)
+
+matrixportal.set_text("NYT:", NYT_header_text_area)
+
+# --- Networking setup ---
+context = ssl.create_default_context()
+with open("/api-nytimes-com-chain.pem", "rb") as certfile:
+ context.load_verify_locations(cadata=certfile.read())
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, context)
+
+NYT_API_KEY = os.getenv("NYT_API_KEY")
+DATA_SOURCE = BASE_URL + CATEGORY + ".json?api-key=" + NYT_API_KEY
+
+# --- Main Loop ---
+while True:
+ print("Fetching json from", DATA_SOURCE)
+ response = requests.get(DATA_SOURCE)
+ titles = [result["title"] for result in response.json()["results"]]
+
+ for title in titles:
+ matrixportal.set_text(title)
+ matrixportal.set_text_color(text_color)
+ matrixportal.scroll_text(SCROLL_DELAY)
+
+ time.sleep(time_interval)
diff --git a/RGB_Matrix_Slot_Machine/code.py b/RGB_Matrix_Slot_Machine/code.py
index 747b2f0a7..456297e9c 100644
--- a/RGB_Matrix_Slot_Machine/code.py
+++ b/RGB_Matrix_Slot_Machine/code.py
@@ -113,7 +113,7 @@ def kick(self, i):
wheel.y = -20
g.append(wheel)
wheels.append(wheel)
-display.show(g)
+display.root_group = g
# We want a digital input to trigger the fruit machine
button = digitalio.DigitalInOut(board.A1)
diff --git a/RP2040_Prop-Maker_Feather_Examples/Arduino_Prop-Maker_Feather_Example/.none.test.only b/RP2040_Prop-Maker_Feather_Examples/Arduino_Prop-Maker_Feather_Example/.none.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/RP2040_Prop-Maker_Feather_Examples/Arduino_Prop-Maker_Feather_Example/Arduino_Prop-Maker_Feather_Example.ino b/RP2040_Prop-Maker_Feather_Examples/Arduino_Prop-Maker_Feather_Example/Arduino_Prop-Maker_Feather_Example.ino
new file mode 100644
index 000000000..db39e3a9b
--- /dev/null
+++ b/RP2040_Prop-Maker_Feather_Examples/Arduino_Prop-Maker_Feather_Example/Arduino_Prop-Maker_Feather_Example.ino
@@ -0,0 +1,146 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include
+#include
+#include
+#include
+
+Adafruit_NeoPixel strip(60, PIN_EXTERNAL_NEOPIXELS, NEO_GRB + NEO_KHZ800);
+
+Adafruit_LIS3DH lis = Adafruit_LIS3DH();
+
+Servo servo_0;
+
+uint8_t x = 0;
+
+void setup() {
+ // core1 setup
+ Serial.begin(115200);
+
+ if (! lis.begin(0x18)) { // change this to 0x19 for alternative i2c address
+ Serial.println("Couldnt start LIS3DH");
+ while (1) yield();
+ }
+
+ lis.setRange(LIS3DH_RANGE_2_G);
+
+ pinMode(PIN_EXTERNAL_POWER, OUTPUT);
+ digitalWrite(PIN_EXTERNAL_POWER, HIGH);
+
+ strip.begin();
+ strip.show();
+ strip.setBrightness(50);
+
+ pinMode(PIN_EXTERNAL_BUTTON, INPUT_PULLUP);
+
+ servo_0.attach(PIN_EXTERNAL_SERVO);
+}
+
+void loop() {
+
+ delay(10);
+ x++;
+ for(int32_t i=0; i< strip.numPixels(); i++) {
+ strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + x) & 255));
+ }
+ strip.show();
+ // Print X Y & Z accelerometer data
+ if (x % 10 == 0) {
+ // every 100ms
+ sensors_event_t event;
+ lis.getEvent(&event);
+ /* Display the results (acceleration is measured in m/s^2) */
+ Serial.print("Accel X: "); Serial.print(event.acceleration.x);
+ Serial.print(" \tY: "); Serial.print(event.acceleration.y);
+ Serial.print(" \tZ: "); Serial.print(event.acceleration.z);
+ Serial.println(" m/s^2 ");
+ Serial.println(x);
+ }
+ // external button press disable external power
+ if (! digitalRead(PIN_EXTERNAL_BUTTON)) {
+ Serial.println("External button pressed");
+ digitalWrite(PIN_EXTERNAL_POWER, LOW);
+ }
+ else {
+ digitalWrite(PIN_EXTERNAL_POWER, HIGH);
+ }
+
+ if (x < 128) {
+ // forward
+ servo_0.writeMicroseconds(map(x, 0, 127, 1000, 2000));
+ } else {
+ // and back
+ servo_0.writeMicroseconds(map(x-128, 0, 127, 2000, 1000));
+ }
+ return;
+
+}
+
+uint32_t Wheel(byte WheelPos) {
+ WheelPos = 255 - WheelPos;
+ if(WheelPos < 85) {
+ return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
+ }
+ if(WheelPos < 170) {
+ WheelPos -= 85;
+ return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
+ }
+ WheelPos -= 170;
+ return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
+}
+
+// audio runs on core 2!
+
+#include
+
+#include "boot.h"
+#include "hithere.h"
+
+struct {
+ const uint8_t *data;
+ uint32_t len;
+ uint32_t rate;
+} sound[] = {
+ hithereAudioData, sizeof(hithereAudioData), hithereSampleRate,
+ bootAudioData , sizeof(bootAudioData) , bootSampleRate,
+};
+#define N_SOUNDS (sizeof(sound) / sizeof(sound[0]))
+
+I2S i2s(OUTPUT);
+
+uint8_t sndIdx = 0;
+
+
+void setup1(void) {
+ i2s.setBCLK(PIN_I2S_BIT_CLOCK);
+ i2s.setDATA(PIN_I2S_DATA);
+ i2s.setBitsPerSample(16);
+}
+
+void loop1() {
+ Serial.printf("Core #2 Playing audio clip #%d\n", sndIdx);
+ play_i2s(sound[sndIdx].data, sound[sndIdx].len, sound[sndIdx].rate);
+ delay(5000);
+ if(++sndIdx >= N_SOUNDS) sndIdx = 0;
+}
+
+void play_i2s(const uint8_t *data, uint32_t len, uint32_t rate) {
+
+ // start I2S at the sample rate with 16-bits per sample
+ if (!i2s.begin(rate)) {
+ Serial.println("Failed to initialize I2S!");
+ delay(500);
+ i2s.end();
+ return;
+ }
+
+ for(uint32_t i=0; i 1000:
+ last_pot = analog_pin.value
+ volume = 1.0 - last_pot / 65535
+ print(volume)
+ mixer.voice[0].level = volume
+
+ if sound and not mixer.voice[0].playing:
+ print("Playing now!")
+ mixer.voice[0].play(music)
+
+ event = keys.events.get()
+ if event and event.pressed:
+ print("click")
+ sound = not sound
+ mixer.voice[0].stop()
diff --git a/RP2040_Prop-Maker_Feather_Examples/CircuitPython_Prop-Maker_Example/StreetChicken.wav b/RP2040_Prop-Maker_Feather_Examples/CircuitPython_Prop-Maker_Example/StreetChicken.wav
new file mode 100644
index 000000000..55d4eb0f2
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Examples/CircuitPython_Prop-Maker_Example/StreetChicken.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Examples/CircuitPython_Prop-Maker_Example/code.py b/RP2040_Prop-Maker_Feather_Examples/CircuitPython_Prop-Maker_Example/code.py
new file mode 100644
index 000000000..ee320efff
--- /dev/null
+++ b/RP2040_Prop-Maker_Feather_Examples/CircuitPython_Prop-Maker_Example/code.py
@@ -0,0 +1,85 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+'''RP2040 Prop-Maker Feather Example'''
+
+import time
+import board
+import audiocore
+import audiobusio
+import audiomixer
+import pwmio
+from digitalio import DigitalInOut, Direction, Pull
+import neopixel
+from adafruit_led_animation.animation.rainbow import Rainbow
+from adafruit_motor import servo
+import adafruit_lis3dh
+
+# enable external power pin
+# provides power to the external components
+external_power = DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = Direction.OUTPUT
+external_power.value = True
+
+# i2s playback
+wave_file = open("StreetChicken.wav", "rb")
+wave = audiocore.WaveFile(wave_file)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True)
+audio.play(mixer)
+mixer.voice[0].play(wave, loop=True)
+mixer.voice[0].level = 0.5
+
+# servo control
+pwm = pwmio.PWMOut(board.EXTERNAL_SERVO, duty_cycle=2 ** 15, frequency=50)
+prop_servo = servo.Servo(pwm)
+angle = 0
+angle_plus = True
+
+# external button
+switch = DigitalInOut(board.EXTERNAL_BUTTON)
+switch.direction = Direction.INPUT
+switch.pull = Pull.UP
+switch_state = False
+
+# external neopixels
+num_pixels = 30
+pixels = neopixel.NeoPixel(board.EXTERNAL_NEOPIXELS, num_pixels)
+pixels.brightness = 0.3
+rainbow = Rainbow(pixels, speed=0.05, period=2)
+
+# onboard LIS3DH
+i2c = board.I2C()
+int1 = DigitalInOut(board.ACCELEROMETER_INTERRUPT)
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1)
+lis3dh.range = adafruit_lis3dh.RANGE_2_G
+
+while True:
+ # rainbow animation on external neopixels
+ rainbow.animate()
+ # read and print LIS3DH values
+ x, y, z = [
+ value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration
+ ]
+ print(f"x = {x:.3f} G, y = {y:.3f} G, z = {z:.3f} G")
+ # move servo back and forth
+ prop_servo.angle = angle
+ if angle_plus:
+ angle += 5
+ else:
+ angle -= 5
+ if angle == 180:
+ angle_plus = False
+ elif angle == 0:
+ angle_plus = True
+ # if the switched is pressed, turn off power to external components
+ if not switch.value and switch_state is False:
+ external_power.value = False
+ switch_state = True
+ if switch.value and switch_state is True:
+ external_power.value = True
+ switch_state = False
+
+ time.sleep(0.02)
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/code.py b/RP2040_Prop-Maker_Feather_Master_Sword/code.py
new file mode 100644
index 000000000..aaed14478
--- /dev/null
+++ b/RP2040_Prop-Maker_Feather_Master_Sword/code.py
@@ -0,0 +1,215 @@
+# SPDX-FileCopyrightText: 2019 Kattni Rembor for Adafruit Industries
+# SPDX-FileCopyrightText: 2019 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+RP2040 Prop-Maker Feather Master Sword
+Adafruit invests time and resources providing this open source code.
+Please support Adafruit and open source hardware by purchasing
+products from Adafruit!
+Written by Kattni Rembor & Limor Fried for Adafruit Industries
+Copyright (c) 2019-2020 Adafruit Industries
+Licensed under the MIT license.
+All text above must be included in any redistribution.
+"""
+
+import time
+import random
+import digitalio
+import audiocore
+import audiobusio
+import board
+import neopixel
+import adafruit_lis3dh
+
+# CUSTOMISE COLORS HERE:
+COLOR = (0, 120, 120) # Default idle is light blue
+ALT_COLOR = (255, 50, 0) # hit color is orange
+
+# CUSTOMISE IDLE PULSE SPEED HERE: 0 is fast, above 0 slows down
+IDLE_PULSE_SPEED = 0 # Default is 0 seconds
+SWING_BLAST_SPEED = 0.0007
+
+# CUSTOMISE BRIGHTNESS HERE: must be a number between 0 and 1
+IDLE_PULSE_BRIGHTNESS_MIN = 0.2 # Default minimum idle pulse brightness
+IDLE_PULSE_BRIGHTNESS_MAX = 1 # Default maximum idle pulse brightness
+
+# CUSTOMISE SENSITIVITY HERE: smaller numbers = more sensitive to motion
+HIT_THRESHOLD = 250
+SWING_THRESHOLD = 150
+
+# Set to the length in seconds of the "on.wav" file
+POWER_ON_SOUND_DURATION = 1.7
+
+NUM_PIXELS = 73 # Number of pixels used in project
+NEOPIXEL_PIN = board.EXTERNAL_NEOPIXELS
+
+enable = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+enable.direction = digitalio.Direction.OUTPUT
+enable.value = True
+
+strip = neopixel.NeoPixel(NEOPIXEL_PIN, NUM_PIXELS, brightness=1, auto_write=False)
+strip.fill(0) # NeoPixels off ASAP on startup
+strip.show()
+
+# i2s audio
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+wave_file = None
+
+# Set up accelerometer on I2C bus, 4G range:
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+accel = adafruit_lis3dh.LIS3DH_I2C(i2c)
+accel.range = adafruit_lis3dh.RANGE_4_G
+
+COLOR_IDLE = COLOR # 'idle' color is the default
+COLOR_HIT = ALT_COLOR # "hit" color is ALT_COLOR set above
+COLOR_SWING = ALT_COLOR # "swing" color is ALT_COLOR set above
+
+
+def play_wav(name, loop=False):
+ """
+ Play a WAV file in the 'sounds' directory.
+ :param name: partial file name string, complete name will be built around
+ this, e.g. passing 'foo' will play file 'sounds/foo.wav'.
+ :param loop: if True, sound will repeat indefinitely (until interrupted
+ by another sound).
+ """
+ global wave_file # pylint: disable=global-statement
+ print("playing", name)
+ if wave_file:
+ wave_file.close()
+ try:
+ wave_file = open('sounds/' + name + '.wav', 'rb')
+ wave = audiocore.WaveFile(wave_file)
+ audio.play(wave, loop=loop)
+ except OSError:
+ pass # we'll just skip playing then
+
+
+def power_on(sound, duration):
+ """
+ Animate NeoPixels with accompanying sound effect for power on.
+ :param sound: sound name (similar format to play_wav() above)
+ :param duration: estimated duration of sound, in seconds (>0.0)
+ """
+ prev = 0
+ start_time = time.monotonic() # Save audio start time
+ play_wav(sound)
+ while True:
+ elapsed = time.monotonic() - start_time # Time spent playing sound
+ if elapsed > duration: # Past sound duration?
+ break # Stop animating
+ animation_time = elapsed / duration # Animation time, 0.0 to 1.0
+ threshold = int(NUM_PIXELS * animation_time + 0.5)
+ num = threshold - prev # Number of pixels to light on this pass
+ if num != 0:
+ strip[prev:threshold] = [ALT_COLOR] * num
+ strip.show()
+ prev = threshold
+
+
+def mix(color_1, color_2, weight_2):
+ """
+ Blend between two colors with a given ratio.
+ :param color_1: first color, as an (r,g,b) tuple
+ :param color_2: second color, as an (r,g,b) tuple
+ :param weight_2: Blend weight (ratio) of second color, 0.0 to 1.0
+ :return (r,g,b) tuple, blended color
+ """
+ if weight_2 < 0.0:
+ weight_2 = 0.0
+ elif weight_2 > 1.0:
+ weight_2 = 1.0
+ weight_1 = 1.0 - weight_2
+ return (int(color_1[0] * weight_1 + color_2[0] * weight_2),
+ int(color_1[1] * weight_1 + color_2[1] * weight_2),
+ int(color_1[2] * weight_1 + color_2[2] * weight_2))
+
+# List of swing wav files without the .wav in the name for use with play_wav()
+swing_sounds = [
+ 'swing1',
+ 'swing2',
+ 'swing3',
+ 'swing4',
+]
+
+# List of hit wav files without the .wav in the name for use with play_wav()
+hit_sounds = [
+ 'hit1',
+ 'hit2',
+ 'hit3',
+ 'hit4',
+]
+
+
+mode = 0 # Initial mode = OFF
+
+# Setup idle pulse
+idle_brightness = IDLE_PULSE_BRIGHTNESS_MIN # current brightness of idle pulse
+idle_increment = 0.01 # Initial idle pulse direction
+
+# Main loop
+while True:
+
+ if mode == 0: # If currently off...
+ enable.value = True
+ power_on('on', POWER_ON_SOUND_DURATION) # Power up!
+ play_wav('idle', loop=True) # Play idle sound now
+ mode = 1 # Idle mode
+
+ # Setup for idle pulse
+ idle_brightness = IDLE_PULSE_BRIGHTNESS_MIN
+ idle_increment = 0.01
+ strip.fill([int(c*idle_brightness) for c in COLOR])
+ strip.show()
+
+ elif mode >= 1: # If not OFF mode...
+ x, y, z = accel.acceleration # Read accelerometer
+ accel_total = x * x + z * z
+ # (Y axis isn't needed, due to the orientation that the Prop-Maker
+ # Wing is mounted. Also, square root isn't needed, since we're
+ # comparing thresholds...use squared values instead.)
+ if accel_total > HIT_THRESHOLD: # Large acceleration = HIT
+ TRIGGER_TIME = time.monotonic() # Save initial time of hit
+ play_wav(random.choice(hit_sounds)) # Start playing 'hit' sound
+ COLOR_ACTIVE = COLOR_HIT # Set color to fade from
+ mode = 3 # HIT mode
+ elif mode == 1 and accel_total > SWING_THRESHOLD: # Mild = SWING
+ TRIGGER_TIME = time.monotonic() # Save initial time of swing
+ play_wav(random.choice(swing_sounds)) # Randomly choose from available swing sounds
+ # make a larson scanner animation_time
+ strip_backup = strip[0:-1]
+ for p in range(-1, len(strip)):
+ for i in range (p-1, p+2): # shoot a 'ray' of 3 pixels
+ if 0 <= i < len(strip):
+ strip[i] = COLOR_SWING
+ strip.show()
+ time.sleep(SWING_BLAST_SPEED)
+ if 0 <= (p-1) < len(strip):
+ strip[p-1] = strip_backup[p-1] # restore previous color at the tail
+ strip.show()
+ while audio.playing:
+ pass # wait till we're done
+ mode = 2 # we'll go back to idle mode
+
+ elif mode == 1:
+ # Idle pulse
+ idle_brightness += idle_increment # Pulse up
+ if idle_brightness > IDLE_PULSE_BRIGHTNESS_MAX or \
+ idle_brightness < IDLE_PULSE_BRIGHTNESS_MIN: # Then...
+ idle_increment *= -1 # Pulse direction flip
+ strip.fill([int(c*idle_brightness) for c in COLOR_IDLE])
+ strip.show()
+ time.sleep(IDLE_PULSE_SPEED) # Idle pulse speed set above
+ elif mode > 1: # If in SWING or HIT mode...
+ if audio.playing: # And sound currently playing...
+ blend = time.monotonic() - TRIGGER_TIME # Time since triggered
+ if mode == 2: # If SWING,
+ blend = abs(0.5 - blend) * 2.0 # ramp up, down
+ strip.fill(mix(COLOR_ACTIVE, COLOR, blend)) # Fade from hit/swing to base color
+ strip.show()
+ else: # No sound now, but still SWING or HIT modes
+ play_wav('idle', loop=True) # Resume idle sound
+ mode = 1 # Return to idle mode
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit1.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit1.wav
new file mode 100644
index 000000000..eb86f1add
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit1.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit2.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit2.wav
new file mode 100644
index 000000000..0a295fc07
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit2.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit3.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit3.wav
new file mode 100644
index 000000000..446edad1a
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit3.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit4.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit4.wav
new file mode 100644
index 000000000..ebb1ad5bd
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/hit4.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/idle.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/idle.wav
new file mode 100644
index 000000000..fc8f6ed18
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/idle.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/on.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/on.wav
new file mode 100644
index 000000000..b2f5ed387
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/on.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing1.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing1.wav
new file mode 100644
index 000000000..8eb696f2c
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing1.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing2.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing2.wav
new file mode 100644
index 000000000..09d5b4f03
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing2.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing3.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing3.wav
new file mode 100644
index 000000000..ac67e69a7
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing3.wav differ
diff --git a/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing4.wav b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing4.wav
new file mode 100644
index 000000000..ca71d8f81
Binary files /dev/null and b/RP2040_Prop-Maker_Feather_Master_Sword/sounds/swing4.wav differ
diff --git a/RP2040_Radio_Messenger/client.py b/RP2040_Radio_Messenger/client.py
new file mode 100644
index 000000000..834398dc8
--- /dev/null
+++ b/RP2040_Radio_Messenger/client.py
@@ -0,0 +1,149 @@
+# SPDX-FileCopyrightText: 2023 Eva Herrada for Adafruit Industries
+# SPDX-FileCopyrightText: 2018 MikeTheWatchGuy
+# SPDX-License-Identifier: LGPL-3.0-only
+
+# Partially based on:
+# https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Chat_With_History.py
+
+import time
+import pathlib
+import os
+
+import PySimpleGUI as sg
+import serial
+from cryptography.fernet import Fernet
+
+# Replace NUMBER with your phone number including country code
+NUMBER = "REPLACE_ME"
+
+try:
+ with open("secret.key", "rb") as key_file:
+ key = key_file.read()
+except FileNotFoundError:
+ with open("secret.key", "wb") as key_file:
+ key_file.write(Fernet.generate_key())
+
+ with open("secret.key", "rb") as key_file:
+ key = key_file.read()
+
+aes = Fernet(key)
+
+port = int(input("port: /dev/ttyACM"))
+
+s = int(input("signal?"))
+
+ser = serial.Serial(f"/dev/ttyACM{port}", 115200, timeout=0.050)
+
+last_time = time.monotonic()
+
+
+def ChatBotWithHistory(): # pylint: disable=too-many-statements,too-many-branches,too-many-locals
+ # ------- Make a new Window ------- #
+ # give our form a spiffy set of colors
+ sg.theme("DarkPurple4")
+
+ layout = [
+ [sg.Text("Encrypted LoRa Messaging Client", size=(40, 1))],
+ [sg.Output(size=(127, 30), key="history", font=("Helvetica 10"))],
+ [sg.Button("CLEAR", button_color=(sg.YELLOWS[0], sg.BLUES[0]))],
+ [
+ sg.ML(size=(85, 5), enter_submits=True, key="query", do_not_clear=False),
+ sg.Button(
+ "SEND", button_color=(sg.YELLOWS[0], sg.BLUES[0]), bind_return_key=True
+ ),
+ sg.Button("EXIT", button_color=(sg.YELLOWS[0], sg.GREENS[0])),
+ ],
+ ]
+
+ window = sg.Window(
+ "Chat window with history",
+ layout,
+ default_element_size=(30, 2),
+ font=("Helvetica", " 13"),
+ default_button_element_size=(8, 2),
+ return_keyboard_events=True,
+ )
+
+ # ---===--- Loop taking in user input and using it --- #
+ command_history = []
+ history_offset = 0
+
+ last_id = None
+ while True:
+ event, value = window.read(timeout=0.05)
+
+ while ser.in_waiting:
+ data_in = ser.readline()
+ mess = data_in.decode()[:-1]
+ try:
+ if mess.startswith("Received"):
+ mess = mess.split(" ", 1)[1]
+ mess_id, text = mess.split("|", 1)
+ text = aes.decrypt(text.encode()).decode()
+ print(f"> {text}")
+ if s:
+ os.system(f'signal-cli send -m "{text}" {NUMBER}')
+ elif "|" in mess:
+ mess_id, text = mess.split("|", 1)
+ last_id = int(mess_id)
+ if "Delivered" in mess:
+ mess_id = int(mess.split(" ", 1)[1])
+ if mess_id == last_id:
+ print("Delivered")
+ if "RSSI" in mess:
+ print(mess + "\n")
+ except Exception as error: # pylint: disable=broad-except
+ print(error)
+
+ if os.path.isfile("message"):
+ print("entered")
+ time.sleep(0.1)
+ path = pathlib.Path("message")
+ with path.open() as file:
+ signal = file.readline().rstrip()
+ print(f"< {signal}")
+ ser.write(aes.encrypt(signal.encode()))
+ ser.write(signal.encode())
+ ser.write("\r".encode())
+ command_history.append(signal)
+ history_offset = len(command_history) - 1
+ # manually clear input because keyboard events blocks clear
+ window["query"].update("")
+ os.system("rm message")
+
+ if event:
+ if event == "SEND":
+ query = value["query"].rstrip()
+ print(f"< {query}")
+ ser.write(aes.encrypt(query.encode()))
+ ser.write(query.encode())
+ ser.write("\r".encode())
+ command_history.append(query)
+ history_offset = len(command_history) - 1
+ # manually clear input because keyboard events blocks clear
+ window["query"].update("")
+ # EXECUTE YOUR COMMAND HERE
+
+ elif event in (sg.WIN_CLOSED, "EXIT"): # quit if exit event or X
+ break
+
+ elif "Up" in event and len(command_history) != 0:
+ command = command_history[history_offset]
+ # decrement is not zero
+ history_offset -= 1 * (history_offset > 0)
+ window["query"].update(command)
+
+ elif "Down" in event and len(command_history) != 0:
+ # increment up to end of list
+ history_offset += 1 * (history_offset < len(command_history) - 1)
+ command = command_history[history_offset]
+ window["query"].update(command)
+
+ elif event == "CLEAR":
+ window["history"].update("")
+
+ elif "Escape" in event:
+ window["query"].update("")
+
+
+ChatBotWithHistory()
diff --git a/RP2040_Radio_Messenger/code.py b/RP2040_Radio_Messenger/code.py
new file mode 100644
index 000000000..ea0c804bd
--- /dev/null
+++ b/RP2040_Radio_Messenger/code.py
@@ -0,0 +1,75 @@
+# SPDX-FileCopyrightText: 2023 Eva Herrada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import random
+import board
+import usb_cdc
+import digitalio
+
+import adafruit_rfm9x
+
+spi = board.SPI()
+
+# radio setup
+RADIO_FREQ_MHZ = 915.0
+
+LED = digitalio.DigitalInOut(board.LED)
+LED.direction = digitalio.Direction.OUTPUT
+
+CS = digitalio.DigitalInOut(board.RFM_CS)
+RESET = digitalio.DigitalInOut(board.RFM_RST)
+
+rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, RADIO_FREQ_MHZ)
+
+rfm9x.tx_power = 23
+
+# Wait to receive packets. Note that this library can't receive data at a fast
+# rate, in fact it can only receive and process one 252 byte packet at a time.
+# This means you should only use this for low bandwidth scenarios, like sending
+# and receiving a single message at a time.
+print("Waiting for packets...")
+
+MESSAGE = b""
+ID = None
+while True:
+ char = usb_cdc.console.read(usb_cdc.console.in_waiting)
+ if char:
+ MESSAGE += char
+ # print(char.decode('utf-8'), end="")
+ if char[-1:] == b"\r":
+ MESSAGE = MESSAGE[:-1]
+ ID = random.randint(0, 1000)
+ rfm9x.send(bytes(f"{ID}|", "utf-8") + MESSAGE)
+ print(f"{ID}|{MESSAGE.decode()}")
+ timestamp = time.monotonic()
+ sent = MESSAGE
+ MESSAGE = b""
+ continue
+
+ packet = rfm9x.receive()
+
+ if packet is None:
+ # Packet has not been received
+ LED.value = False
+ else:
+ # Received a packet!
+ LED.value = True
+
+ try:
+ PACKET_TEXT = str(packet, "ascii")
+ except UnicodeError:
+ print("error")
+ continue
+
+ print(PACKET_TEXT)
+ mess_id, text = PACKET_TEXT.split("|")
+ if mess_id != "-1":
+ rfm9x.send(bytes(f"-1|{mess_id}", "utf-8"))
+ print(f"Received: {PACKET_TEXT}")
+ else:
+ print(f"Delivered: {text}")
+ ID = None
+
+ rssi = rfm9x.last_rssi
+ print(f"RSSI: {rssi} dB")
diff --git a/RP2040_Radio_Messenger/signal_reader.py b/RP2040_Radio_Messenger/signal_reader.py
new file mode 100644
index 000000000..480174789
--- /dev/null
+++ b/RP2040_Radio_Messenger/signal_reader.py
@@ -0,0 +1,14 @@
+# SPDX-FileCopyrightText: 2023 Eva Herrada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+from subprocess import check_output
+import os
+
+while True:
+ SIGNAL = check_output('signal-cli receive', shell=True).decode("utf-8")
+ if "Body" in SIGNAL:
+ signal_msg = SIGNAL.split("Body")[1].split("\n")[0][2:]
+ print(signal_msg)
+ os.system("touch message")
+ with open("message", "w") as F:
+ F.write(signal_msg)
diff --git a/Rapunzel_Hair/code.py b/Rapunzel_Hair/code.py
new file mode 100644
index 000000000..cc048d427
--- /dev/null
+++ b/Rapunzel_Hair/code.py
@@ -0,0 +1,64 @@
+# SPDX-FileCopyrightText: Erin St Blaine and ChatGPT for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+from adafruit_circuitplayground import cp
+import neopixel
+
+# Constants
+NUM_PIXELS_STRIP = 20
+NUM_PIXELS_FACE = 10 # Number of NeoPixels on the face
+PIXEL_PIN_STRIP = board.A1
+SOUND_THRESHOLD = 50 # Adjust this threshold based on your environment
+
+# Variables
+DELAY_AFTER_LIGHT_UP = 2.0
+COLOR = (255, 100, 0) # Warm yellow color
+SPEED = 0.3 # Animation speed (adjust as needed, higher number moves more slowly)
+
+# Initialize NeoPixels on face
+pixels_face = cp.pixels
+pixels_face.brightness = 0.5
+
+# Initialize NeoPixels on strip (A1)
+pixels_strip = neopixel.NeoPixel(PIXEL_PIN_STRIP, NUM_PIXELS_STRIP, brightness=0.5)
+
+# Main loop
+while True:
+ # Read sound level
+ sound_level = cp.sound_level
+
+ # Debugging: Print sound level to the serial monitor
+ print("Sound Level:", sound_level)
+
+ # Check if sound threshold is reached
+ if sound_level > SOUND_THRESHOLD:
+ # Sequentially light up NeoPixels on the face
+ for i in range(NUM_PIXELS_FACE):
+ if i < len(pixels_face):
+ pixels_face[i] = COLOR
+ time.sleep(SPEED) # Adjust speed if needed
+ pixels_face.show() # Show all pixels at once
+
+ # Sequentially light up NeoPixels on strip (A1)
+ for i in range(NUM_PIXELS_STRIP):
+ if i < len(pixels_strip):
+ pixels_strip[i] = COLOR
+ time.sleep(SPEED) # Adjust speed if needed
+ pixels_strip.show() # Show all pixels at once
+
+ # Delay for the specified duration after lighting up all pixels
+ time.sleep(DELAY_AFTER_LIGHT_UP)
+
+ # Turn off all pixels on strip
+ pixels_strip.fill((0, 0, 0))
+ pixels_strip.show()
+
+ # Turn off all pixels on face
+ pixels_face.fill((0, 0, 0))
+ pixels_face.show()
+
+ # Add a delay to avoid rapid detection
+ time.sleep(0.1)
diff --git a/Raspberry_Pi_Animated_Gif_Player/mini_pitft_player.py b/Raspberry_Pi_Animated_Gif_Player/mini_pitft_player.py
index f1961bdb6..588e7ccb1 100644
--- a/Raspberry_Pi_Animated_Gif_Player/mini_pitft_player.py
+++ b/Raspberry_Pi_Animated_Gif_Player/mini_pitft_player.py
@@ -15,7 +15,9 @@
from adafruit_seesaw import seesaw, rotaryio, digitalio as ss_digitalio
from adafruit_rgb_display import st7789
-seesaw = seesaw.Seesaw(board.I2C(), addr=0x36)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+seesaw = seesaw.Seesaw(i2c, addr=0x36)
seesaw_product = (seesaw.get_version() >> 16) & 0xFFFF
print("Found product {}".format(seesaw_product))
diff --git a/Raspberry_Pi_Azure_IoT_Hub_Dashboard/azure_pi/code.py b/Raspberry_Pi_Azure_IoT_Hub_Dashboard/azure_pi/code.py
index da5a79b67..d75cf60b7 100644
--- a/Raspberry_Pi_Azure_IoT_Hub_Dashboard/azure_pi/code.py
+++ b/Raspberry_Pi_Azure_IoT_Hub_Dashboard/azure_pi/code.py
@@ -102,7 +102,7 @@
for x in display_objects:
main_group.append(x)
-display.show(main_group)
+display.root_group = main_group
# convert UTC time to local timezone
def utc_to_local(utc_dt):
diff --git a/Raspberry_Pi_Azure_IoT_Hub_Dashboard/featherTft_bme680/code.py b/Raspberry_Pi_Azure_IoT_Hub_Dashboard/featherTft_bme680/code.py
index 555b9aa17..ceee73fa3 100644
--- a/Raspberry_Pi_Azure_IoT_Hub_Dashboard/featherTft_bme680/code.py
+++ b/Raspberry_Pi_Azure_IoT_Hub_Dashboard/featherTft_bme680/code.py
@@ -64,6 +64,7 @@
minute = cal[4]
i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
bme680 = adafruit_bme680.Adafruit_BME680_I2C(i2c, debug=False)
# change this to match the location's pressure (hPa) at sea level
@@ -72,7 +73,9 @@
temperature_offset = -5
# Create sensor object, using the board's default I2C bus.
-battery_monitor = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+battery_monitor = LC709203F(i2c)
# Update to match the mAh of your battery for more accurate readings.
# Can be MAH100, MAH200, MAH400, MAH500, MAH1000, MAH2000, MAH3000.
@@ -119,7 +122,7 @@
group.append(humid_text)
group.append(press_text)
group.append(time_text)
-display.show(group)
+display.root_group = group
# clock to count down to sending data to Azure
azure_clock = 500
diff --git a/Raspberry_Pi_PiPyPirate_Radio/freq_scan.py b/Raspberry_Pi_PiPyPirate_Radio/freq_scan.py
new file mode 100755
index 000000000..85b34ea0b
--- /dev/null
+++ b/Raspberry_Pi_PiPyPirate_Radio/freq_scan.py
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2023 Carter N. for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import board
+import digitalio
+import adafruit_si4713
+
+radio = adafruit_si4713.SI4713(
+ board.I2C(),
+ reset=digitalio.DigitalInOut(board.D26),
+ timeout_s=0.5
+)
+
+with open("freq_scan.dat", "w") as fp:
+ for f_khz in range(87500, 108000, 50):
+ noise = radio.received_noise_level(f_khz)
+ fp.write("{},{}\n".format(f_khz/1000.0, noise))
+ print('{0:0.3f} mhz = {1} dBuV'.format(f_khz/1000.0, noise))
diff --git a/Raspberry_Pi_PiPyPirate_Radio/mpd.conf b/Raspberry_Pi_PiPyPirate_Radio/mpd.conf
new file mode 100644
index 000000000..c2a33f30f
--- /dev/null
+++ b/Raspberry_Pi_PiPyPirate_Radio/mpd.conf
@@ -0,0 +1,8 @@
+music_directory "/home/pi/music"
+playlist_directory "/home/pi/playlists"
+
+audio_output {
+ type "alsa"
+ name "USB Audio Adapter"
+ device "hw:2,0"
+}
diff --git a/Raspberry_Pi_PiPyPirate_Radio/radio.py b/Raspberry_Pi_PiPyPirate_Radio/radio.py
new file mode 100755
index 000000000..1c6582fc5
--- /dev/null
+++ b/Raspberry_Pi_PiPyPirate_Radio/radio.py
@@ -0,0 +1,141 @@
+# SPDX-FileCopyrightText: 2023 Carter N. for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import adafruit_si4713
+from PIL import Image, ImageDraw, ImageFont
+from adafruit_rgb_display import st7789
+import mpd
+
+#--| User Config |-----------------------------------
+FREQ = 89.00
+PLAYLIST = "test"
+STATION_NAME = "PiPyPirate Radio"
+UPDATE_RATE = 0.5
+#----------------------------------------------------
+
+#==| SETUP |=========================================================
+
+# Display
+disp = st7789.ST7789(
+ board.SPI(),
+ height=240,
+ y_offset=80,
+ rotation=180,
+ cs=digitalio.DigitalInOut(board.CE0),
+ dc=digitalio.DigitalInOut(board.D25),
+ rst=digitalio.DigitalInOut(board.D24),
+ baudrate=64000000,
+)
+
+backlight = digitalio.DigitalInOut(board.D22)
+backlight.switch_to_output()
+backlight.value = True
+
+background = Image.open("radio_bg.png")
+STAT_FNT = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf", 55)
+STAT_CLR = (30, 100, 200)
+INFO_FNT = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 20)
+ARTS_CLR = (0, 100, 0)
+ALBM_CLR = (0, 100, 0)
+TITL_CLR = (0, 100, 0)
+PROG_CLR = (0, 100, 0)
+
+# Buttons
+button1 = digitalio.DigitalInOut(board.D23)
+button1.switch_to_input(pull=digitalio.Pull.UP)
+button2 = digitalio.DigitalInOut(board.D24)
+button2.switch_to_input(pull=digitalio.Pull.UP)
+
+# Radio
+radio = adafruit_si4713.SI4713(
+ board.I2C(),
+ reset=digitalio.DigitalInOut(board.D26),
+ timeout_s = 0.5
+)
+radio.tx_frequency_khz = int(FREQ * 1000)
+radio.tx_power = 115
+radio.configure_rds(0xADAF, station=STATION_NAME.encode())
+
+# MPD
+mpc = mpd.MPDClient()
+mpc.connect("localhost", 6600)
+mpc.stop()
+mpc.clear()
+mpc.load(PLAYLIST)
+mpc.play()
+mpc.repeat(1)
+#====================================================================
+
+def button1_handler():
+ if status['state'] == 'play':
+ mpc.pause()
+ else:
+ mpc.play()
+
+def button2_handler():
+ mpc.next()
+
+def update_display():
+ image = background.copy()
+ draw = ImageDraw.Draw(image)
+
+ draw.text(
+ (150, 20),
+ "{:>5.1f}".format(FREQ),
+ anchor="mt",
+ font=STAT_FNT,
+ fill=STAT_CLR
+ )
+
+ if status['state'] == 'play':
+ r = 10 * (1 + int(time.monotonic() % 3))
+ draw.arc( (30-r, 20-r, 30+r, 20+r),
+ 120, 60,
+ fill = (0, 0, 0),
+ width = 3
+ )
+
+ info = mpc.currentsong()
+ artist = info.get('artist', 'unknown')
+ album = info.get('album', 'unknown')
+ song = info.get('title', 'unknown')
+ draw.text( (5, 150), artist, font=INFO_FNT, fill=ARTS_CLR )
+ draw.text( (5, 170), album, font=INFO_FNT, fill=ALBM_CLR)
+ draw.text( (5, 190), song, font=INFO_FNT, fill=TITL_CLR)
+ rds_info = "{}:{}:{}".format(artist, album, song)
+ radio.rds_buffer = rds_info.encode()
+
+ perc = float(status['elapsed']) / float(status['duration'])
+ draw.rectangle( (5, 215, 235, 230), outline=PROG_CLR)
+ draw.rectangle (
+ (5, 215, 5 + int(230*perc), 230),
+ fill=PROG_CLR
+ )
+
+ disp.image(image)
+
+last_update = time.monotonic()
+
+print("Now broadcasting {} on {}FM".format(STATION_NAME, FREQ))
+
+while True:
+ now = time.monotonic()
+ try:
+ status = mpc.status()
+ except ConnectionError:
+ mpc.connect("localhost", 6600)
+ status = mpc.status()
+ if not button1.value:
+ button1_handler()
+ while not button1.value:
+ time.sleep(0.001)
+ if not button2.value:
+ button2_handler()
+ while not button2.value:
+ time.sleep(0.001)
+ if now - last_update > UPDATE_RATE:
+ update_display()
+ last_update = now
diff --git a/Raspberry_Pi_PiPyPirate_Radio/radio_bg.png b/Raspberry_Pi_PiPyPirate_Radio/radio_bg.png
new file mode 100755
index 000000000..6c918120f
Binary files /dev/null and b/Raspberry_Pi_PiPyPirate_Radio/radio_bg.png differ
diff --git a/Raspberry_Pi_Video_Synth/BlinkaRaspberryPiVideoSynth.py b/Raspberry_Pi_Video_Synth/BlinkaRaspberryPiVideoSynth.py
index 14cef650e..7f51da299 100644
--- a/Raspberry_Pi_Video_Synth/BlinkaRaspberryPiVideoSynth.py
+++ b/Raspberry_Pi_Video_Synth/BlinkaRaspberryPiVideoSynth.py
@@ -11,10 +11,12 @@
from adafruit_seesaw.analoginput import AnalogInput
# VL53L4CD setup
-vl53 = adafruit_vl53l4cd.VL53L4CD(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+vl53 = adafruit_vl53l4cd.VL53L4CD(i2c)
# rotary encoder setup
-encoder = seesaw.Seesaw(board.I2C(), addr=0x36)
+encoder = seesaw.Seesaw(i2c, addr=0x36)
encoder.pin_mode(24, encoder.INPUT_PULLUP)
rot_encoder = rotaryio.IncrementalEncoder(encoder)
@@ -22,15 +24,15 @@
# 0x30 = red control
# 0x31 = green control
# 0x32 = blue control
-red_slider = seesaw.Seesaw(board.I2C(), 0x30)
+red_slider = seesaw.Seesaw(i2c, 0x30)
red_pot = AnalogInput(red_slider, 18)
r_pix = neopixel.NeoPixel(red_slider, 14, 4)
-g_slider = seesaw.Seesaw(board.I2C(), 0x31)
+g_slider = seesaw.Seesaw(i2c, 0x31)
green_pot = AnalogInput(g_slider, 18)
g_pix = neopixel.NeoPixel(g_slider, 14, 4)
-b_slider = seesaw.Seesaw(board.I2C(), 0x32)
+b_slider = seesaw.Seesaw(i2c, 0x32)
blue_pot = AnalogInput(b_slider, 18)
b_pix = neopixel.NeoPixel(b_slider, 14, 4)
@@ -143,4 +145,3 @@
c.send(str.encode(' '.join(["flight", str(flight)])))
# reset last_flight
last_flight = flight
-
\ No newline at end of file
diff --git a/Reading_QR_Codes/code.py b/Reading_QR_Codes/code.py
new file mode 100644
index 000000000..367789f02
--- /dev/null
+++ b/Reading_QR_Codes/code.py
@@ -0,0 +1,75 @@
+# SPDX-FileCopyrightText: 2023 Pete Warden
+# SPDX-License-Identifier: Apache-2.0
+#
+# Example of accessing the Tiny Code Reader from Useful Sensors on a Trinkey
+# using CircuitPython. See https://usfl.ink/tcr_dev for the full developer guide.
+
+import struct
+import time
+import board
+import usb_hid
+
+from adafruit_hid.keyboard import Keyboard
+from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
+
+# The code reader has the I2C ID of hex 0c, or decimal 12.
+TINY_CODE_READER_I2C_ADDRESS = 0x0C
+
+# How long to pause between sensor polls.
+TINY_CODE_READER_DELAY = 0.2
+
+TINY_CODE_READER_LENGTH_OFFSET = 0
+TINY_CODE_READER_LENGTH_FORMAT = "H"
+TINY_CODE_READER_MESSAGE_OFFSET = TINY_CODE_READER_LENGTH_OFFSET + \
+ struct.calcsize(TINY_CODE_READER_LENGTH_FORMAT)
+TINY_CODE_READER_MESSAGE_SIZE = 254
+TINY_CODE_READER_MESSAGE_FORMAT = "B" * TINY_CODE_READER_MESSAGE_SIZE
+TINY_CODE_READER_I2C_FORMAT = TINY_CODE_READER_LENGTH_FORMAT + TINY_CODE_READER_MESSAGE_FORMAT
+TINY_CODE_READER_I2C_BYTE_COUNT = struct.calcsize(TINY_CODE_READER_I2C_FORMAT)
+
+i2c = board.I2C()
+
+# Wait until we can access the bus.
+while not i2c.try_lock():
+ pass
+
+# For debugging purposes print out the peripheral addresses on the I2C bus.
+# 98 (0x62 in hex) is the address of our person sensor, and should be
+# present in the list. Uncomment the following three lines if you want to see
+# what I2C addresses are found.
+# while True:
+# print(i2c.scan())
+# time.sleep(TINY_CODE_READER_DELAY)
+
+# Create a keyboard device so we can send the screen lock command.
+keyboard = Keyboard(usb_hid.devices)
+layout = KeyboardLayoutUS(keyboard)
+
+last_message_string = None
+last_code_time = 0.0
+
+while True:
+ read_data = bytearray(TINY_CODE_READER_I2C_BYTE_COUNT)
+ i2c.readfrom_into(TINY_CODE_READER_I2C_ADDRESS, read_data)
+
+ message_length, = struct.unpack_from(TINY_CODE_READER_LENGTH_FORMAT, read_data,
+ TINY_CODE_READER_LENGTH_OFFSET)
+ message_bytes = struct.unpack_from(TINY_CODE_READER_MESSAGE_FORMAT, read_data,
+ TINY_CODE_READER_MESSAGE_OFFSET)
+
+ if message_length > 0:
+ message_string = bytearray(message_bytes)[0:message_length].decode("utf-8")
+ is_same = (message_string == last_message_string)
+ last_message_string = message_string
+ current_time = time.monotonic()
+ time_since_last_code = current_time - last_code_time
+ last_code_time = current_time
+ # Debounce the input by making sure there's been a gap in time since we
+ # last saw this code.
+ if (not is_same) or (time_since_last_code > 1.0):
+ print(message_string)
+ try:
+ layout.write(message_string)
+ except ValueError as e:
+ pass
+ layout.write("\n")
diff --git a/Robot_Lyre/code.py b/Robot_Lyre/code.py
new file mode 100644
index 000000000..3218f376d
--- /dev/null
+++ b/Robot_Lyre/code.py
@@ -0,0 +1,57 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+from adafruit_motor import servo
+from adafruit_pca9685 import PCA9685
+import usb_midi
+import adafruit_midi
+from adafruit_midi.note_on import NoteOn
+
+# MIDI input setup
+midi = adafruit_midi.MIDI(midi_in=usb_midi.ports[0], in_channel=0)
+
+# i2c PCA9685 setup
+i2c = board.STEMMA_I2C()
+pca = PCA9685(i2c)
+
+pca.frequency = 50
+
+# create the servo objects and add them to the servos array
+servos = [servo.Servo(pca.channels[i]) for i in range(16)]
+
+# array of midi notes, high to low
+midi_notes = [83, 81, 79, 77, 76, 74, 72, 71, 69, 67, 65, 64, 62, 60, 59, 57]
+angle0 = 20
+angle1 = 70
+
+# set servos to the same angle on boot
+# easier to adjust angles of the horns if needed
+print("setting servos")
+for i in range(16):
+ s = servos[i]
+ s.angle = angle1
+ time.sleep(0.05)
+print("servos set")
+
+while True:
+ # msg holds MIDI messages
+ msg = midi.receive()
+
+ for i in range(16):
+ # iterate through servos array & midi notes array
+ servo = servos[i]
+ note_played = midi_notes[i]
+
+ # if a noteon msg comes in that matches a note in the midi notes array..
+ if isinstance(msg, NoteOn) and msg.note == note_played:
+ # print(servo)
+ # print(note_played)
+ # servo moves
+ # angle alternates between angle0 and angle1
+ if servo.angle <= angle0:
+ servo.angle = angle1
+ else:
+ servo.angle = angle0
+ # print(servo.angle)
diff --git a/Rotary_Trinkey/surfacedial_encoder_demo/surfacedial_encoder_demo.ino b/Rotary_Trinkey/surfacedial_encoder_demo/surfacedial_encoder_demo.ino
index cf58ce896..0fdb0caf3 100644
--- a/Rotary_Trinkey/surfacedial_encoder_demo/surfacedial_encoder_demo.ino
+++ b/Rotary_Trinkey/surfacedial_encoder_demo/surfacedial_encoder_demo.ino
@@ -47,7 +47,7 @@ void loop() {
int curr_rotary = encoder.getPosition();
RotaryEncoder::Direction direction = encoder.getDirection();
// read switch
- bool curr_button = !digitalRead(PIN_ENCODER_SWITCH);
+ bool curr_button = digitalRead(PIN_ENCODER_SWITCH);
if (direction != RotaryEncoder::Direction::NOROTATION) {
Serial.print("Encoder value: ");
diff --git a/Rotary_Trinkey/volumemute_encoder_demo/volumemute_encoder_demo.ino b/Rotary_Trinkey/volumemute_encoder_demo/volumemute_encoder_demo.ino
index 459f91e0a..48fbb6d14 100644
--- a/Rotary_Trinkey/volumemute_encoder_demo/volumemute_encoder_demo.ino
+++ b/Rotary_Trinkey/volumemute_encoder_demo/volumemute_encoder_demo.ino
@@ -47,7 +47,7 @@ void loop() {
int curr_rotary = encoder.getPosition();
RotaryEncoder::Direction direction = encoder.getDirection();
// read switch
- bool curr_button = !digitalRead(PIN_ENCODER_SWITCH);
+ bool curr_button = digitalRead(PIN_ENCODER_SWITCH);
if (direction != RotaryEncoder::Direction::NOROTATION) {
Serial.print("Encoder value: ");
diff --git a/SPI_Breakout_Flash_Info/.uno.test.only b/SPI_Breakout_Flash_Info/.uno.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/SPI_Breakout_Flash_Info/SPI_Breakout_Flash_Info.ino b/SPI_Breakout_Flash_Info/SPI_Breakout_Flash_Info.ino
new file mode 100644
index 000000000..bab9aa4bc
--- /dev/null
+++ b/SPI_Breakout_Flash_Info/SPI_Breakout_Flash_Info.ino
@@ -0,0 +1,37 @@
+// SPDX-FileCopyrightText: 2019 Ha Thach for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// The MIT License (MIT)
+// Copyright (c) 2019 Ha Thach for Adafruit Industries
+
+#include
+#include
+
+#include
+
+#define CS_PIN 10
+
+Adafruit_FlashTransport_SPI flashTransport(CS_PIN, SPI);
+Adafruit_SPIFlash flash(&flashTransport);
+
+// the setup function runs once when you press reset or power the board
+void setup() {
+ Serial.begin(115200);
+ while (!Serial) {
+ delay(100); // wait for native usb
+ }
+
+ Serial.println("Adafruit Serial Flash Info example");
+ flash.begin();
+
+ Serial.print("JEDEC ID: 0x");
+ Serial.println(flash.getJEDECID(), HEX);
+ Serial.print("Flash size: ");
+ Serial.print(flash.size() / 1024);
+ Serial.println(" KB");
+}
+
+void loop() {
+ // nothing to do
+}
diff --git a/Say_Their_Names_LEDMatrix/code.py b/Say_Their_Names_LEDMatrix/code.py
index 644cff3fc..7bdf089bb 100644
--- a/Say_Their_Names_LEDMatrix/code.py
+++ b/Say_Their_Names_LEDMatrix/code.py
@@ -161,7 +161,7 @@
g.append(line)
for line in names_font:
g.append(line)
-display.show(g)
+display.root_group = g
while True:
diff --git a/Scrolling_Alphanumeric_Countdown_Clock/.gemma.test.skip b/Scrolling_Alphanumeric_Countdown_Clock/.gemma.test.skip
new file mode 100644
index 000000000..e69de29bb
diff --git a/Scrolling_Alphanumeric_Countdown_Clock/code.py b/Scrolling_Alphanumeric_Countdown_Clock/code.py
new file mode 100644
index 000000000..8d7b94d00
--- /dev/null
+++ b/Scrolling_Alphanumeric_Countdown_Clock/code.py
@@ -0,0 +1,130 @@
+# SPDX-FileCopyrightText: 2022 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+"""
+CircuitPython Quad-Alphanumeric Display Holiday Countdown.
+
+This demo requires a separate file named settings.toml on your CIRCUITPY drive, which
+should contain your WiFi credentials and Adafruit IO credentials.
+"""
+
+import os
+import time
+import ssl
+import wifi
+import socketpool
+import microcontroller
+import board
+import adafruit_requests
+from adafruit_ht16k33.segments import Seg14x4
+from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError # pylint: disable=unused-import
+
+# Date and time of event. Update YEAR, MONTH, DAY, HOUR, MINUTE to match the date and time of the
+# event to which you are counting down. Update NAME to the name of the event. Update MSG to the
+# message you'd like to display when the countdown has completed and the event has started.
+EVENT_YEAR = 2022
+EVENT_MONTH = 12
+EVENT_DAY = 25
+EVENT_HOUR = 0
+EVENT_MINUTE = 0
+EVENT_NAME = "Christmas"
+EVENT_MSG = "Merry Christmas * "
+
+# The speed of the text scrolling on the displays. Increase this to slow down the scrolling.
+# Decrease it to speed up the scrolling.
+scroll_speed = 0.25
+
+# Create the I2C object using STEMMA_I2C()
+i2c = board.STEMMA_I2C()
+# Alphanumeric segment display setup using three displays in series.
+display = Seg14x4(i2c, address=(0x70, 0x71, 0x72))
+# Display brightness is a number between 0.0 (off) and 1.0 (maximum). Update this if you want
+# to alter the brightness of the characters on the displays.
+display.brightness = 0.2
+# The setup-successful message. If this shows up on your displays, you have wired them up
+# properly and the code setup is correct.
+display.print("HELLO WORLD")
+
+
+def reset_on_error(delay, error):
+ """Resets the code after a specified delay, when encountering an error."""
+ print("Error:\n", str(error))
+ display.print("Error :(")
+ print("Resetting microcontroller in %d seconds" % delay)
+ time.sleep(delay)
+ microcontroller.reset()
+
+
+try:
+ wifi.radio.connect(os.getenv("CIRCUITPY_WIFI_SSID"), os.getenv("CIRCUITPY_WIFI_PASSWORD"))
+# any errors, reset MCU
+except Exception as e: # pylint: disable=broad-except
+ reset_on_error(10, e)
+
+aio_username = os.getenv("aio_username")
+aio_key = os.getenv("aio_key")
+location = os.getenv("aio_location")
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+# Initialize an Adafruit IO HTTP API object
+try:
+ io = IO_HTTP(aio_username, aio_key, requests)
+except Exception as e: # pylint: disable=broad-except
+ reset_on_error(10, e)
+print("Connected to Adafruit IO")
+display.print("Connected IO")
+
+clock = time.monotonic()
+
+event_time = time.struct_time(
+ (EVENT_YEAR, EVENT_MONTH, EVENT_DAY, EVENT_HOUR, EVENT_MINUTE, 0, -1, -1, False)
+)
+scroll_time = 0
+
+while True:
+ try:
+ if (clock + scroll_time) < time.monotonic():
+ now = io.receive_time()
+ # print(now)
+ # print(event_time)
+ remaining = time.mktime(event_time) - time.mktime(now)
+ # if it's the day of the event...
+ if remaining < 0:
+ # scroll the event message on a loop
+ display.marquee(EVENT_MSG, scroll_speed, loop=True)
+ # calculate the seconds remaining
+ secs_remaining = remaining % 60
+ remaining //= 60
+ # calculate the minutes remaining
+ mins_remaining = remaining % 60
+ remaining //= 60
+ # calculate the hours remaining
+ hours_remaining = remaining % 24
+ remaining //= 24
+ # calculate the days remaining
+ days_remaining = remaining
+ # pack the calculated times into a string to scroll
+ countdown_string = (
+ "* %d Days, %d Hours, %d Minutes & %s Seconds until %s *"
+ % (
+ days_remaining,
+ hours_remaining,
+ mins_remaining,
+ secs_remaining,
+ EVENT_NAME,
+ )
+ )
+ # get the length of the packed string
+ display_length = len(countdown_string)
+ # print(display_length)
+ # calculate the amount of time needed to scroll the string
+ scroll_time = display_length * scroll_speed
+ # print(scroll_time)
+ # reset the clock
+ clock = time.monotonic()
+ # scroll the string once
+ display.marquee(countdown_string, scroll_speed, loop=False)
+
+ # any errors, reset MCU
+ except Exception as e: # pylint: disable=broad-except
+ reset_on_error(10, e)
diff --git a/See_N_Say/code.py b/See_N_Say/code.py
new file mode 100644
index 000000000..534e969be
--- /dev/null
+++ b/See_N_Say/code.py
@@ -0,0 +1,48 @@
+# SPDX-FileCopyrightText: 2023 John Park for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import audiocore
+import board
+import audiobusio
+import audiomixer
+from digitalio import DigitalInOut, Pull
+from adafruit_debouncer import Button
+
+button_pins = (
+ board.D2, board.D3, board.D4, board.D5,
+ board.D6, board.D7, board.D8, board.D9,
+ board.D10, board.MOSI, board.MISO, board.SCK,
+)
+buttons = [] # will hold list of Debouncer button objects
+for pin in button_pins: # set up each pin
+ tmp_pin = DigitalInOut(pin) # defaults to input
+ tmp_pin.pull = Pull.UP # turn on internal pull-down resistor
+ buttons.append(Button(tmp_pin, value_when_pressed=False))
+
+# get the filenames in aplha order from files in the 'wavs' directory
+sounds = []
+for filename in sorted(os.listdir("/wavs")):
+ filename = filename.lower()
+ if filename.endswith(".wav") and not filename.startswith("."):
+ sounds.append(filename)
+
+audio = audiobusio.I2SOut(bit_clock=board.A1, word_select=board.A2, data=board.A3)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=11025, channel_count=1,
+ bits_per_sample=16, samples_signed=True)
+
+audio.play(mixer)
+mixer.voice[0].level = 0.5
+
+def play_sound(sound_number):
+ wave_file = open(("wavs/" + sounds[sound_number]), "rb")
+ wave = audiocore.WaveFile(wave_file)
+ mixer.voice[0].play(wave, loop=False)
+
+
+while True:
+ for i in range(len(buttons)):
+ buttons[i].update()
+ if buttons[i].pressed:
+ play_sound(i)
diff --git a/See_N_Say/soundsources.txt b/See_N_Say/soundsources.txt
new file mode 100644
index 000000000..d5e020e8b
--- /dev/null
+++ b/See_N_Say/soundsources.txt
@@ -0,0 +1,14 @@
+The following sounds from freesound.org are used:
+
+https://freesound.org/s/86938/
+https://freesound.org/s/125557/
+https://freesound.org/s/200338/
+https://freesound.org/s/339918/
+https://freesound.org/s/353180/
+https://freesound.org/s/405628/
+https://freesound.org/s/417281/
+https://freesound.org/s/434085/
+https://freesound.org/s/523952/
+https://freesound.org/s/612857/
+https://freesound.org/s/619087/
+https://freesound.org/s/633976/
diff --git a/See_N_Say/wavs/01_icecream_truck.wav b/See_N_Say/wavs/01_icecream_truck.wav
new file mode 100644
index 000000000..1bf638f23
Binary files /dev/null and b/See_N_Say/wavs/01_icecream_truck.wav differ
diff --git a/See_N_Say/wavs/02_fire_truck.wav b/See_N_Say/wavs/02_fire_truck.wav
new file mode 100644
index 000000000..641b17745
Binary files /dev/null and b/See_N_Say/wavs/02_fire_truck.wav differ
diff --git a/See_N_Say/wavs/03_dog_bark.wav b/See_N_Say/wavs/03_dog_bark.wav
new file mode 100644
index 000000000..b0580b2dc
Binary files /dev/null and b/See_N_Say/wavs/03_dog_bark.wav differ
diff --git a/See_N_Say/wavs/04_motorcycle.wav b/See_N_Say/wavs/04_motorcycle.wav
new file mode 100644
index 000000000..b148cb24e
Binary files /dev/null and b/See_N_Say/wavs/04_motorcycle.wav differ
diff --git a/See_N_Say/wavs/05_subway_doors.wav b/See_N_Say/wavs/05_subway_doors.wav
new file mode 100644
index 000000000..174634614
Binary files /dev/null and b/See_N_Say/wavs/05_subway_doors.wav differ
diff --git a/See_N_Say/wavs/06_jackhammer.wav b/See_N_Say/wavs/06_jackhammer.wav
new file mode 100644
index 000000000..5c289aaf8
Binary files /dev/null and b/See_N_Say/wavs/06_jackhammer.wav differ
diff --git a/See_N_Say/wavs/07_bike_bell.wav b/See_N_Say/wavs/07_bike_bell.wav
new file mode 100644
index 000000000..76a331444
Binary files /dev/null and b/See_N_Say/wavs/07_bike_bell.wav differ
diff --git a/See_N_Say/wavs/08_car_horns.wav b/See_N_Say/wavs/08_car_horns.wav
new file mode 100644
index 000000000..091c4947a
Binary files /dev/null and b/See_N_Say/wavs/08_car_horns.wav differ
diff --git a/See_N_Say/wavs/09_crosswalk.wav b/See_N_Say/wavs/09_crosswalk.wav
new file mode 100644
index 000000000..143ddfc38
Binary files /dev/null and b/See_N_Say/wavs/09_crosswalk.wav differ
diff --git a/See_N_Say/wavs/10_railroad_crossing.wav b/See_N_Say/wavs/10_railroad_crossing.wav
new file mode 100644
index 000000000..c6bd3bad6
Binary files /dev/null and b/See_N_Say/wavs/10_railroad_crossing.wav differ
diff --git a/See_N_Say/wavs/11_bus_air_brakes.wav b/See_N_Say/wavs/11_bus_air_brakes.wav
new file mode 100644
index 000000000..d3317e2c8
Binary files /dev/null and b/See_N_Say/wavs/11_bus_air_brakes.wav differ
diff --git a/See_N_Say/wavs/12_last_stop.wav b/See_N_Say/wavs/12_last_stop.wav
new file mode 100644
index 000000000..9b4eb8341
Binary files /dev/null and b/See_N_Say/wavs/12_last_stop.wav differ
diff --git a/Seesaw_QT_Rotary_Encoder_Multiples/code.py b/Seesaw_QT_Rotary_Encoder_Multiples/code.py
index edbbde48d..8bf28980f 100755
--- a/Seesaw_QT_Rotary_Encoder_Multiples/code.py
+++ b/Seesaw_QT_Rotary_Encoder_Multiples/code.py
@@ -7,8 +7,11 @@
import board
from adafruit_seesaw import seesaw, rotaryio, digitalio, neopixel
-qt_enc1 = seesaw.Seesaw(board.I2C(), addr=0x36)
-qt_enc2 = seesaw.Seesaw(board.I2C(), addr=0x37)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+
+qt_enc1 = seesaw.Seesaw(i2c, addr=0x36)
+qt_enc2 = seesaw.Seesaw(i2c, addr=0x37)
qt_enc1.pin_mode(24, qt_enc1.INPUT_PULLUP)
button1 = digitalio.DigitalIO(qt_enc1, 24)
diff --git a/Slider_Trinkey/MIDI_CC_Cross_Fader/code.py b/Slider_Trinkey/MIDI_CC_Cross_Fader/code.py
index d0408b974..f6b7f6a0b 100644
--- a/Slider_Trinkey/MIDI_CC_Cross_Fader/code.py
+++ b/Slider_Trinkey/MIDI_CC_Cross_Fader/code.py
@@ -64,11 +64,10 @@ def hsv2rgb(h, s, v):
hue_b = 127
sat_b = 255
val_b = 255
-color_b = hsv2rgb(hue_a, sat_a, val_a)
+color_b = hsv2rgb(hue_b, sat_b, val_b)
pixels[0] = color_a
pixels[1] = color_b
-pixels.show()
while True:
cc_val = slider.value // 512 # make 0-127 range for MIDI CC
diff --git a/Smart_Alarm_Clock/code.py b/Smart_Alarm_Clock/code.py
index 4e2c5a5d5..c7fe68600 100644
--- a/Smart_Alarm_Clock/code.py
+++ b/Smart_Alarm_Clock/code.py
@@ -200,9 +200,10 @@ def on_enable(client, feed_id, payload):
# Set up rotary encoder
-i2c_bus = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
-seesaw = Seesaw(i2c_bus, addr=0x36)
+seesaw = Seesaw(i2c, addr=0x36)
seesaw_product = (seesaw.get_version() >> 16) & 0xFFFF
print("Found product {}".format(seesaw_product))
@@ -223,7 +224,7 @@ def on_enable(client, feed_id, payload):
display = framebufferio.FramebufferDisplay(framebuffer)
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
# Set up PWM LEDs
diff --git a/Star_Fragment_Lamp/code.py b/Star_Fragment_Lamp/code.py
new file mode 100644
index 000000000..cc9a83220
--- /dev/null
+++ b/Star_Fragment_Lamp/code.py
@@ -0,0 +1,278 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import os
+import ssl
+import time
+import microcontroller
+import board
+import wifi
+import socketpool
+import adafruit_requests
+import neopixel
+import simpleio
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_io.adafruit_io import IO_HTTP
+
+# latitude
+lat = 42.36
+# longitude
+long = -71.06
+
+# neopixel setup
+NUMPIXELS = 30 # number of neopixels
+BRIGHTNESS = 0.5 # A number between 0.0 and 1.0, where 0.0 is off, and 1.0 is max.
+PIN = board.A3 # This is the default pin on the NeoPixel Driver BFF.
+
+pixels = neopixel.NeoPixel(PIN, NUMPIXELS, brightness=BRIGHTNESS, auto_write=False)
+
+# turn on NeoPixels on boot to check wiring
+pixels.fill((255, 125, 0))
+pixels.show()
+
+# API request to open-meteo
+weather_url = "https://api.open-meteo.com/v1/forecast?"
+# pass latitude and longitude
+# will return sunrise and sunset times
+weather_url += "latitude=%d&longitude=%d&timezone=auto&daily=sunrise,sunset" % (lat, long)
+
+# connect to SSID
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+pool = socketpool.SocketPool(wifi.radio)
+
+# adafruit IO info
+aio_username = os.getenv('aio_username')
+aio_key = os.getenv('aio_key')
+location = "America/New York"
+
+# io HTTP for getting the time from the internet
+io = IO_HTTP(aio_username, aio_key, requests)
+
+def reset_on_error(delay, error):
+ print("Error:\n", str(error))
+ print("Resetting microcontroller in %d seconds" % delay)
+ time.sleep(delay)
+ microcontroller.reset()
+
+# function for making http requests with try/except
+def get_request(tries, ping):
+ for i in range(tries):
+ try:
+ n = ping
+ except Exception as error:
+ print(error)
+ time.sleep(10)
+ if i < tries - 1:
+ continue
+ raise
+ break
+ return n
+
+# get the time on start-up
+# pylint: disable=broad-except
+try:
+ now = get_request(5, io.receive_time())
+except Exception as e:
+ reset_on_error(10, e)
+print(now)
+today = now.tm_mday
+
+# function to make a request to open-meteo
+def sun_clock():
+ # make the API request
+ response = get_request(5, requests.get(weather_url))
+ # packs the response into a JSON
+ response_as_json = response.json()
+ # gets sunrise
+ _rise = response_as_json['daily']['sunrise'][0]
+ # gets sunset
+ _set = response_as_json['daily']['sunset'][0]
+ return _rise, _set
+
+# initial API call
+try:
+ sunrise, sunset = sun_clock()
+except Exception as e:
+ reset_on_error(10, e)
+
+print(sunrise)
+print(sunset)
+
+# the sunrise/sunset time is returned as a JSON aka a string
+# this function chops up the string to get the hours and minutes as integers
+def divide_time(z):
+ string_time = z.split("-")
+ clock_time = string_time[2].split("T")
+ int_time = clock_time[1].split(":")
+ event_time = time.struct_time(
+ (int(string_time[0]), int(string_time[1]), int(clock_time[0]), int(int_time[0]),
+ int(int_time[1]), 0, -1, -1, False)
+ )
+ # print(event_time)
+ return event_time
+
+rise_time = divide_time(sunrise)
+set_time = divide_time(sunset)
+
+# function that tracks how many hours/minutes until sunrise or sunset
+def sun_countdown(sun_event):
+ n = get_request(5, io.receive_time())
+ remaining = time.mktime(sun_event) - time.mktime(n)
+ r = remaining
+ # print(remaining)
+ # calculate the seconds remaining
+ secs_remaining = remaining % 60 # pylint: disable=unused-variable
+ remaining //= 60
+ # calculate the minutes remaining
+ minutes_until = remaining % 60
+ remaining //= 60
+ # calculate the hours remaining
+ hours_until = remaining % 24
+ remaining //= 24
+ return r, hours_until, minutes_until, n
+try:
+ total_until_rise, hours_until_sunrise, mins_until_sunrise, now = sun_countdown(rise_time)
+except Exception as e:
+ reset_on_error(10, e)
+try:
+ total_until_set, hours_until_sunset, mins_until_sunset, now = sun_countdown(set_time)
+except Exception as e:
+ reset_on_error(10, e)
+
+# red and yellow color percentage for neopixels
+percent_red = 0
+percent_yellow = 0
+
+print(total_until_set)
+# check to see if the star fragment should be lit up on start-up
+if total_until_set < 0:
+ print("star glow true")
+ star_glow = True
+ percent_red = 255
+ percent_yellow = 125
+ # turn neopixels on using RGB values
+ pixels.fill((percent_red, percent_yellow, 0))
+ pixels.show()
+else:
+ print("star glow false")
+ star_glow = False
+ percent_red = 0
+ percent_yellow = 0
+ # turn neopixels on using RGB values
+ pixels.fill((percent_red, percent_yellow, 0))
+ pixels.show()
+
+# ticks time tracker
+clock = ticks_ms()
+
+# tracker for initial start-up state
+first_run = True
+
+# 15 minutes in milliseconds
+time_check = 900000
+# state to tell if it's after midnight yet before sunrise
+looking_for_sunrise = False
+
+while True:
+ try:
+ # if it's daytime
+ if not star_glow:
+ # every 15 minutes...
+ if first_run or ticks_diff(ticks_ms(), clock) > time_check:
+ print("pinging Open-Meteo")
+ sunrise, sunset = sun_clock()
+ (total_until_set, hours_until_sunset,
+ mins_until_sunset, now) = sun_countdown(set_time)
+ print(now)
+ print("%d hour(s) until sunset" % hours_until_sunset)
+ print("%d minutes(s) until sunset" % mins_until_sunset)
+ print(sunset)
+ print(percent_red)
+ print()
+ # less than an hour until sunset...
+ if hours_until_sunset in (0, 23):
+ # check every minute
+ time_check = 300000
+ # map color to ramp up in brightness over the course of the final hour
+ percent_red = simpleio.map_range(mins_until_sunset, 59, 0, 0, 255)
+ percent_yellow = simpleio.map_range(mins_until_sunset, 59, 0, 0, 125)
+ # if the sun has set..
+ if total_until_set < 0:
+ percent_red = 255
+ percent_yellow = 125
+ time_check = 900000
+ star_glow = True
+ print("star is glowing")
+ # otherwise just keep checking every 15 minutes
+ else:
+ time_check = 900000
+ percent_red = 0
+ percent_yellow = 0
+ if first_run:
+ first_run = False
+ else:
+ # reset clock
+ clock = ticks_add(clock, time_check)
+ # if it's nighttime...
+ else:
+ if first_run or ticks_diff(ticks_ms(), clock) > time_check:
+ if today != now.tm_mday or (first_run and now.tm_hour < rise_time.tm_hour):
+ today = now.tm_mday
+ looking_for_sunrise = True
+ # begin tracking the incoming sunrise
+ if looking_for_sunrise:
+ print("pinging Open-Meteo")
+ sunrise, sunset = sun_clock()
+ (total_until_rise, hours_until_sunrise,
+ mins_until_sunrise, now) = sun_countdown(rise_time)
+ print(now)
+ print("%d hour(s) until sunrise" % hours_until_sunrise)
+ print("%d minutes(s) until sunrise" % mins_until_sunrise)
+ print(sunrise)
+ print(now)
+ print()
+ # less than an hour until sunset...
+ if hours_until_sunrise in (0, 23):
+ # check every minute
+ time_check = 300000
+ # map color to decrease brightness over the course of the final hour
+ percent_red = simpleio.map_range(mins_until_sunrise, 59, 0, 255, 0)
+ percent_yellow = simpleio.map_range(mins_until_sunrise, 59, 0, 125, 0)
+ # if the sun has risen..
+ if total_until_rise < 0:
+ percent_red = 0
+ percent_yellow = 0
+ time_check = 900000
+ star_glow = False
+ looking_for_sunrise = False
+ print("star is off")
+ # otherwise just keep checking every 15 minutes
+ # and keep neopixels on
+ else:
+ time_check = 900000
+ percent_red = 255
+ percent_yellow = 125
+ # otherwise just keep checking every 15 minutes
+ # and keep neopixels on
+ else:
+ now = get_request(5, io.receive_time())
+ print("not looking for sunrise")
+ print(now)
+ print()
+ time_check = 900000
+ percent_red = 255
+ percent_yellow = 125
+ if first_run:
+ first_run = False
+ else:
+ # reset clock
+ clock = ticks_add(clock, time_check)
+ # turn neopixels on using RGB values
+ pixels.fill((percent_red, percent_yellow, 0))
+ pixels.show()
+ except Exception as e:
+ reset_on_error(10, e)
diff --git a/Super_Nintendo_USB_Controller/boot.py b/Super_Nintendo_USB_Controller/boot.py
new file mode 100755
index 000000000..7521ca275
--- /dev/null
+++ b/Super_Nintendo_USB_Controller/boot.py
@@ -0,0 +1,75 @@
+# SPDX-FileCopyrightText: 2023 Robert Dale Smith for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# USB HID descriptor for generic DirectInput compatible gamepad.
+
+import usb_hid
+
+# This is only one example of a gamepad descriptor, and may not suit your needs.
+GAMEPAD_REPORT_DESCRIPTOR = bytes((
+ 0x05, 0x01, # USAGE_PAGE (Generic Desktop)
+ 0x09, 0x05, # USAGE (Gamepad)
+ 0xa1, 0x01, # COLLECTION (Application)
+ 0x15, 0x00, # LOGICAL_MINIMUM (0)
+ 0x25, 0x01, # LOGICAL_MAXIMUM (1)
+ 0x35, 0x00, # PHYSICAL_MINIMUM (0)
+ 0x45, 0x01, # PHYSICAL_MAXIMUM (1)
+ 0x75, 0x01, # REPORT_SIZE (1)
+ 0x95, 0x0e, # REPORT_COUNT (14)
+ 0x05, 0x09, # USAGE_PAGE (Button)
+ 0x19, 0x01, # USAGE_MINIMUM (Button 1)
+ 0x29, 0x0e, # USAGE_MAXIMUM (Button 14)
+ 0x81, 0x02, # INPUT (Data,Var,Abs)
+ 0x95, 0x02, # REPORT_COUNT (3)
+ 0x81, 0x01, # INPUT (Cnst,Ary,Abs)
+ 0x05, 0x01, # USAGE_PAGE (Generic Desktop)
+ 0x25, 0x07, # LOGICAL_MAXIMUM (7)
+ 0x46, 0x3b, 0x01, # PHYSICAL_MAXIMUM (315)
+ 0x75, 0x04, # REPORT_SIZE (4)
+ 0x95, 0x01, # REPORT_COUNT (1)
+ 0x65, 0x14, # UNIT (Eng Rot:Angular Pos)
+ 0x09, 0x39, # USAGE (Hat switch)
+ 0x81, 0x42, # INPUT (Data,Var,Abs,Null)
+ 0x65, 0x00, # UNIT (None)
+ 0x95, 0x01, # REPORT_COUNT (1)
+ 0x81, 0x01, # INPUT (Cnst,Ary,Abs)
+ 0x26, 0xff, 0x00, # LOGICAL_MAXIMUM (255)
+ 0x46, 0xff, 0x00, # PHYSICAL_MAXIMUM (255)
+ 0x09, 0x30, # USAGE (X)
+ 0x09, 0x31, # USAGE (Y)
+ 0x09, 0x32, # USAGE (Z)
+ 0x09, 0x35, # USAGE (Rz)
+ 0x75, 0x08, # REPORT_SIZE (8)
+ 0x95, 0x04, # REPORT_COUNT (6)
+ 0x81, 0x02, # INPUT (Data,Var,Abs)
+ 0x06, 0x00, 0xff, # USAGE_PAGE (Vendor Specific)
+ 0x09, 0x20, # Unknown
+ 0x09, 0x21, # Unknown
+ 0x09, 0x22, # Unknown
+ 0x09, 0x23, # Unknown
+ 0x09, 0x24, # Unknown
+ 0x09, 0x25, # Unknown
+ 0x09, 0x26, # Unknown
+ 0x09, 0x27, # Unknown
+ 0x09, 0x28, # Unknown
+ 0x09, 0x29, # Unknown
+ 0x09, 0x2a, # Unknown
+ 0x09, 0x2b, # Unknown
+ 0x95, 0x0c, # REPORT_COUNT (12)
+ 0x81, 0x02, # INPUT (Data,Var,Abs)
+ 0x0a, 0x21, 0x26, # Unknown
+ 0x95, 0x08, # REPORT_COUNT (8)
+ 0xb1, 0x02, # FEATURE (Data,Var,Abs)
+ 0xc0 # END_COLLECTION
+))
+
+gamepad = usb_hid.Device(
+ report_descriptor=GAMEPAD_REPORT_DESCRIPTOR,
+ usage_page=0x01, # Generic Desktop Control
+ usage=0x05, # Gamepad
+ report_ids=(0,), # Descriptor uses report ID 0.
+ in_report_lengths=(19,), # This gamepad sends 19 bytes in its report.
+ out_report_lengths=(0,), # It does not receive any reports.
+)
+
+usb_hid.enable((gamepad,))
diff --git a/Super_Nintendo_USB_Controller/code.py b/Super_Nintendo_USB_Controller/code.py
new file mode 100755
index 000000000..085e08193
--- /dev/null
+++ b/Super_Nintendo_USB_Controller/code.py
@@ -0,0 +1,133 @@
+# SPDX-FileCopyrightText: 2023 Robert Dale Smith for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# Simple Super Nintendo controller to standard USB HID gamepad with DirectInput button mapping.
+# Tested on KB2040
+
+import time
+import board
+import digitalio
+import usb_hid
+
+# Update the SNES Controller pins based on your input
+LATCH_PIN = board.D6
+CLOCK_PIN = board.D5
+DATA_PIN = board.D7
+
+# Set up pins for SNES Controller
+latch = digitalio.DigitalInOut(LATCH_PIN)
+latch.direction = digitalio.Direction.OUTPUT
+
+clock = digitalio.DigitalInOut(CLOCK_PIN)
+clock.direction = digitalio.Direction.OUTPUT
+
+data = digitalio.DigitalInOut(DATA_PIN)
+data.direction = digitalio.Direction.INPUT
+data.pull = digitalio.Pull.UP # pull-up as a default
+
+# SNES to USB button mapping
+buttonmap = {
+ "B": (0, 0, 0x2), # Button 1
+ "Y": (1, 0, 0x1), # Button 3
+ "Select": (2, 1, 0x01), # Button 9
+ "Start": (3, 1, 0x02), # Button 10
+ "Up": (4, 0, 0), # D-pad North
+ "Down": (5, 0, 0), # D-pad South
+ "Left": (6, 0, 0), # D-pad East
+ "Right": (7, 0, 0), # D-pad West
+ "A": (8, 0, 0x4), # Button 2
+ "X": (9, 0, 0x8), # Button 4
+ "L": (10, 0, 0x10), # Button 5
+ "R": (11, 0, 0x20) # Button 6
+}
+
+# D-pad buttons to hat-switch value
+dpad_state = {
+ "Up": 0,
+ "Down": 0,
+ "Left": 0,
+ "Right": 0,
+}
+
+hat_map = {
+ (0, 0, 0, 0): 0x08, # Released
+ (1, 0, 0, 0): 0x00, # N
+ (1, 1, 0, 0): 0x01, # NE
+ (0, 1, 0, 0): 0x02, # E
+ (0, 1, 0, 1): 0x03, # SE
+ (0, 0, 0, 1): 0x04, # S
+ (0, 0, 1, 1): 0x05, # SW
+ (0, 0, 1, 0): 0x06, # W
+ (1, 0, 1, 0): 0x07, # NW
+}
+
+def read_snes_controller():
+ data_bits = []
+ latch.value = True
+ time.sleep(0.000012) # 12µs
+ latch.value = False
+
+ for _ in range(16):
+ time.sleep(0.000006) # Wait 6µs
+ data_bits.append(data.value)
+
+ clock.value = True
+ time.sleep(0.000006) # 6µs
+ clock.value = False
+ time.sleep(0.000006) # 6µs
+
+ return data_bits
+
+# Find the gamepad device in the usb_hid devices
+gamepad_device = None
+for device in usb_hid.devices:
+ if device.usage_page == 0x01 and device.usage == 0x05:
+ gamepad_device = device
+ break
+
+if gamepad_device is not None:
+ print("Gamepad device found!")
+else:
+ print("Gamepad device not found.")
+
+report = bytearray(19)
+report[2] = 0x08 # default released hat switch value
+report[3] = 127 # default x center value
+report[4] = 127 # default y center value
+report[5] = 127 # default z center value
+report[6] = 127 # default rz center value
+
+prev_report = bytearray(report)
+
+while True:
+ button_state = read_snes_controller()
+ all_buttons = list(buttonmap.keys())
+
+ for idx, button in enumerate(all_buttons):
+ index, byte_index, button_value = buttonmap[button]
+ is_pressed = not button_state [index] # True if button is pressed
+
+ if button in dpad_state: # If it's a direction button
+ dpad_state[button] = 1 if is_pressed else 0
+ else:
+ if is_pressed:
+ report[byte_index] |= button_value
+ else: # not pressed, reset button state
+ report[byte_index] &= ~button_value
+
+ # SOCD (up priority and neutral horizontal)
+ if (dpad_state["Up"] and dpad_state["Down"]):
+ dpad_state["Down"] = 0
+ if (dpad_state["Left"] and dpad_state["Right"]):
+ dpad_state["Left"] = 0
+ dpad_state["Right"] = 0
+
+ # Extract the dpad_state to a tuple and get the corresponding hat value
+ dpad_tuple = (dpad_state["Up"], dpad_state["Right"], dpad_state["Left"], dpad_state["Down"])
+ report[2] = hat_map[dpad_tuple] # Assuming report[2] is the byte for the hat switch
+
+ if prev_report != report:
+ gamepad_device.send_report(report)
+ prev_report[:] = report
+
+ time.sleep(0.1)
diff --git a/Synth_Guitar/code.py b/Synth_Guitar/code.py
new file mode 100644
index 000000000..49f4b7840
--- /dev/null
+++ b/Synth_Guitar/code.py
@@ -0,0 +1,309 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import digitalio
+import audiobusio
+import board
+import neopixel
+import adafruit_lis3dh
+import synthio
+import keypad
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+import ulab.numpy as np
+from adafruit_seesaw.seesaw import Seesaw
+from adafruit_seesaw.neopixel import NeoPixel as SS_NeoPixel
+from adafruit_seesaw.digitalio import DigitalIO
+from adafruit_seesaw.rotaryio import IncrementalEncoder
+import audiomixer
+import busio
+import simpleio
+
+i2c = busio.I2C(board.SCL, board.SDA, frequency=800000)
+
+int1 = digitalio.DigitalInOut(board.ACCELEROMETER_INTERRUPT)
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, int1=int1)
+lis3dh.range = adafruit_lis3dh.RANGE_2_G
+
+ss_enc0 = Seesaw(i2c, addr=0x36)
+ss_enc0.pin_mode(24, ss_enc0.INPUT_PULLUP)
+button0 = DigitalIO(ss_enc0, 24)
+button0_state = False
+enc0 = IncrementalEncoder(ss_enc0)
+ss_enc0.set_GPIO_interrupts(1 << 24, True)
+ss_enc0.enable_encoder_interrupt(encoder=0)
+
+ss_enc1 = Seesaw(i2c, addr=0x37)
+ss_enc1.pin_mode(24, ss_enc1.INPUT_PULLUP)
+button1 = DigitalIO(ss_enc1, 24)
+button1_state = False
+enc1 = IncrementalEncoder(ss_enc1)
+ss_enc1.set_GPIO_interrupts(1 << 24, True)
+ss_enc1.enable_encoder_interrupt(encoder=0)
+
+ss_enc2 = Seesaw(i2c, addr=0x38)
+ss_enc2.pin_mode(24, ss_enc2.INPUT_PULLUP)
+button2 = DigitalIO(ss_enc2, 24)
+button2_state = False
+enc2 = IncrementalEncoder(ss_enc2)
+ss_enc2.set_GPIO_interrupts(1 << 24, True)
+ss_enc2.enable_encoder_interrupt(encoder=0)
+
+neokey0 = Seesaw(i2c, addr=0x30)
+neokey1 = Seesaw(i2c, addr=0x31)
+
+keys = []
+for k in range(4, 8):
+ key0 = DigitalIO(neokey0, k)
+ key0.direction = digitalio.Direction.INPUT
+ key0.pull = digitalio.Pull.UP
+ keys.append(key0)
+for k in range(4, 8):
+ key1 = DigitalIO(neokey1, k)
+ key1.direction = digitalio.Direction.INPUT
+ key1.pull = digitalio.Pull.UP
+ keys.append(key1)
+
+NUM_PIXELS = 8
+NEOPIXEL_PIN = board.EXTERNAL_NEOPIXELS
+
+pixels = neopixel.NeoPixel(NEOPIXEL_PIN, NUM_PIXELS, auto_write=True)
+
+pixels.brightness = 0.1
+
+enable = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+enable.direction = digitalio.Direction.OUTPUT
+enable.value = True
+strum_switch = digitalio.DigitalInOut(board.D12)
+strum_switch.direction = digitalio.Direction.INPUT
+strum_switch.pull = digitalio.Pull.UP
+
+int_keys = keypad.Keys((board.D5, board.D6, board.D9, board.EXTERNAL_BUTTON),
+ value_when_pressed=False, pull=True, interval = 0.001)
+
+key_pix0 = SS_NeoPixel(neokey0, 3, 4, auto_write = True)
+key_pix0.brightness = 1
+key_pix1 = SS_NeoPixel(neokey1, 3, 4, auto_write = True)
+key_pix1.brightness = 1
+
+key_pixels = [key_pix0[0], key_pix0[1], key_pix0[2], key_pix0[3],
+ key_pix1[0], key_pix1[1], key_pix1[2], key_pix1[3]]
+
+# i2s audio
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+key_states = [False, False, False, False, False, False, False, False]
+key_colors = [0xFF0000, 0xFF5500, 0xFFFF00, 0x00FF00, 0x00FFFF, 0x0000FF, 0x5500FF, 0xFF00FF]
+for c in range(4):
+ key_pix0[c] = key_colors[c]
+ key_pix1[c] = key_colors[c + 4]
+
+SAMPLE_RATE = 22050
+SAMPLE_SIZE = 512
+VOLUME = 32000
+
+square = np.concatenate((np.ones(SAMPLE_SIZE//2, dtype=np.int16)*VOLUME,np.ones(SAMPLE_SIZE//2,
+ dtype=np.int16)*-VOLUME))
+sine = np.array(np.sin(np.linspace(0, 2*np.pi, SAMPLE_SIZE, endpoint=False)) * VOLUME,
+ dtype=np.int16)
+
+amp_env = synthio.Envelope(attack_time=0.01,
+ sustain_level=0.5,
+ release_time=0.1)
+
+lfo_tremo = synthio.LFO(waveform=sine, rate=5)
+
+synth = synthio.Synthesizer(sample_rate=SAMPLE_RATE)
+
+synth_notes = []
+
+octave = 12
+mult = 2
+octave_range = 6
+tones = [36, 40, 43, 47, 50, 53, 57, 60]
+diatonic = 0
+t = [0, 0, 0, 0, 0, 0, 0, 0]
+current_freq = []
+for s in range(8):
+ t[s] = tones[s] + (octave * mult)
+ print(t[s])
+ note = synthio.Note(frequency=synthio.midi_to_hz(t[s]),
+ envelope=amp_env, waveform=square,
+ amplitude = lfo_tremo)
+ synth_notes.append(note)
+ current_freq.append(synth_notes[s].frequency)
+
+lfo_frequency = 2000
+lfo_resonance = 1.5
+lpf = synth.low_pass_filter(lfo_frequency, lfo_resonance)
+hpf = synth.high_pass_filter(lfo_frequency, lfo_resonance)
+
+synth_volume = 0.3
+last_pos0 = synth_volume
+last_pos1 = 0
+last_pos2 = 0
+
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=SAMPLE_RATE, channel_count=1,
+ bits_per_sample=16, samples_signed=True, buffer_size=2048)
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = synth_volume
+
+int_number = 0
+def normalize(val, min_v, max_v):
+ return max(min(max_v, val), min_v)
+
+key_pressed = 0
+strum = False
+last_strum = strum
+tremolo = True
+pressed_notes = []
+last_y = 0
+accel_time = 0.1
+accel_clock = ticks_ms()
+accel_time = int(accel_time * 1000)
+
+while True:
+
+ interrupt_event = int_keys.events.get()
+ strum = strum_switch.value
+ if last_strum != strum:
+ synth.release_all()
+ last_strum = strum
+ if interrupt_event:
+ int_number = interrupt_event.key_number
+ if int_number == 0 and interrupt_event.pressed:
+ pos0 = -enc0.position
+ if pos0 != last_pos0:
+ if pos0 > last_pos0:
+ synth_volume = synth_volume + 0.1
+ else:
+ synth_volume = synth_volume - 0.1
+ synth_volume = normalize(synth_volume, 0.0, 1.0)
+ print(synth_volume)
+ mixer.voice[0].level = synth_volume
+ last_pos0 = pos0
+ if not button0.value and not button0_state:
+ button0_state = True
+ if mixer.voice[0].level > 0:
+ mixer.voice[0].level = 0
+ else:
+ mixer.voice[0].level = synth_volume
+ if button0.value and button0_state:
+ button0_state = False
+ elif int_number == 1 and interrupt_event.pressed:
+ pos1 = -enc1.position
+ if pos1 != last_pos1:
+ if pos1 > last_pos1:
+ lfo_tremo.rate = lfo_tremo.rate + 0.5
+ else:
+ lfo_tremo.rate = lfo_tremo.rate - 0.5
+ lfo_tremo.rate = normalize(lfo_tremo.rate, 1.0, 20.0)
+ print(lfo_tremo.rate)
+ last_pos1 = pos1
+ if tremolo:
+ if not button1.value and not button1_state:
+ button1_state = True
+ tremolo = False
+ for i in range(8):
+ synth_notes[i].amplitude = 1.0
+ if button1.value and button1_state:
+ button1_state = False
+ else:
+ if not button1.value and not button1_state:
+ button1_state = True
+ tremolo = True
+ for i in range(8):
+ lfo_tremo.rate = 5.0
+ synth_notes[i].amplitude = lfo_tremo
+ if button1.value and button1_state:
+ button1_state = False
+ elif int_number == 2 and interrupt_event.pressed:
+ pos2 = -enc2.position
+ if pos2 != last_pos2:
+ if pos2 > last_pos2:
+ mult = (mult + 1) % octave_range
+ print(mult)
+ for o in range(8):
+ t[o] = tones[o] + (octave * mult)
+ print(t[o])
+ synth_notes[o].frequency = synthio.midi_to_hz(t[o])
+ current_freq[o] = synth_notes[o].frequency
+ else:
+ mult = (mult - 1) % octave_range
+ print(mult)
+ for o in range(8):
+ t[o] = tones[o] + (octave * mult)
+ print(t[o])
+ synth_notes[o].frequency = synthio.midi_to_hz(t[o])
+ current_freq[o] = synth_notes[o].frequency
+ last_pos2 = pos2
+ if not button2.value and not button2_state:
+ button2_state = True
+ diatonic = (diatonic + 1) % 2
+ print(diatonic)
+ if diatonic == 0:
+ new_tones = [36, 40, 43, 47, 50, 53, 57, 60]
+ for r in range(8):
+ tones[r] = new_tones[r]
+ print(tones[r])
+ else:
+ new_tones = [36, 38, 40, 41, 43, 45, 47, 48]
+ for r in range(8):
+ tones[r] = new_tones[r]
+ print(tones[r])
+ for x in range(8):
+ t[x] = tones[x] + (octave * mult)
+ print(t[x])
+ synth_notes[x].frequency = synthio.midi_to_hz(t[x])
+ current_freq[x] = synth_notes[x].frequency
+ if button2.value and button2_state:
+ button2_state = False
+ elif int_number == 3 and interrupt_event.pressed:
+ if strum:
+ for i in range(0, 8):
+ if not keys[i].value:
+ pixels.fill(key_colors[i])
+ pixels.show()
+ synth.press(synth_notes[i])
+ elif int_number == 3 and interrupt_event.released:
+ if strum:
+ synth.release_all()
+ ss_enc0.get_GPIO_interrupt_flag()
+ ss_enc1.get_GPIO_interrupt_flag()
+ ss_enc2.get_GPIO_interrupt_flag()
+ if ticks_diff(ticks_ms(), accel_clock) >= accel_time:
+ x, y, z = [
+ value / adafruit_lis3dh.STANDARD_GRAVITY for value in lis3dh.acceleration
+ ]
+ if last_y != y:
+ if abs(last_y - y) > 0.01:
+ # print(f"x = {x:.3f} G, y = {y:.3f} G, z = {z:.3f} G")
+ if y < -0.500:
+ mapped_freq = simpleio.map_range(y, -0.300, -1, 2000, 10000)
+ mapped_resonance = simpleio.map_range(y, -0.300, -1, 1.5, 8)
+ hpf = synth.high_pass_filter(mapped_freq, mapped_resonance)
+ for i in range(0, 8):
+ synth_notes[i].filter = hpf
+ elif y > 0.200:
+ mapped_freq = simpleio.map_range(y, 0.200, 1, 2000, 100)
+ mapped_resonance = simpleio.map_range(y, 0.200, 1, 2, 0.5)
+ lpf = synth.low_pass_filter(mapped_freq, mapped_resonance)
+ for i in range(0, 8):
+ synth_notes[i].filter = lpf
+ else:
+ for i in range(0, 8):
+ synth_notes[i].filter = None
+ last_y = y
+ accel_clock = ticks_add(accel_clock, accel_time)
+ if not strum:
+ for i in range(0, 8):
+ if not keys[i].value and not key_states[i]:
+ pixels.fill(key_colors[i])
+ pixels.show()
+ synth.press(synth_notes[i])
+ key_states[i] = True
+ if keys[i].value and key_states[i]:
+ key_pixels[i] = key_colors[i]
+ synth.release(synth_notes[i])
+ key_states[i] = False
diff --git a/Synthio_Fundamentals/example_01_single_note.py b/Synthio_Fundamentals/example_01_single_note.py
new file mode 100644
index 000000000..9d3e33bb3
--- /dev/null
+++ b/Synthio_Fundamentals/example_01_single_note.py
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import synthio
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+synth = synthio.Synthesizer(sample_rate=44100)
+audio.play(synth)
+
+while True:
+ synth.press(65) # midi note 65 = F4
+ time.sleep(0.5)
+ synth.release(65) # release the note we pressed
+ time.sleep(2)
diff --git a/Synthio_Fundamentals/example_02_chord.py b/Synthio_Fundamentals/example_02_chord.py
new file mode 100644
index 000000000..7bb4f6469
--- /dev/null
+++ b/Synthio_Fundamentals/example_02_chord.py
@@ -0,0 +1,32 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import synthio
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+synth = synthio.Synthesizer(sample_rate=44100)
+audio.play(synth)
+
+while True:
+ synth.press((65, 69, 72)) # midi note 65 = F4
+ time.sleep(1)
+ synth.release((65, 69, 72)) # release the note we pressed
+ time.sleep(2)
diff --git a/Synthio_Fundamentals/example_03_chord_mixer.py b/Synthio_Fundamentals/example_03_chord_mixer.py
new file mode 100644
index 000000000..06bed3014
--- /dev/null
+++ b/Synthio_Fundamentals/example_03_chord_mixer.py
@@ -0,0 +1,38 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import audiomixer
+import synthio
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=22050, buffer_size=2048)
+synth = synthio.Synthesizer(channel_count=1, sample_rate=22050)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.4
+
+while True:
+ synth.press((65, 69, 72)) # midi note 65 = F4
+ time.sleep(0.5)
+ synth.release((65, 69, 72)) # release the note we pressed
+ time.sleep(0.5)
+ mixer.voice[0].level = (mixer.voice[0].level - 0.1) % 0.4 # reduce volume each pass
diff --git a/Synthio_Fundamentals/example_04_envelope.py b/Synthio_Fundamentals/example_04_envelope.py
new file mode 100644
index 000000000..05c6f346c
--- /dev/null
+++ b/Synthio_Fundamentals/example_04_envelope.py
@@ -0,0 +1,58 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import audiomixer
+import synthio
+
+# for PWM audio with an RC filter
+#import audiopwmio
+#audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=22050, buffer_size=2048)
+
+amp_env_slow = synthio.Envelope(
+ attack_time=0.2,
+ sustain_level=1.0,
+ release_time=0.8
+)
+
+amp_env_fast = synthio.Envelope(
+ attack_time=0.1,
+ sustain_level=0.5,
+ release_time=0.2
+)
+
+
+synth = synthio.Synthesizer(channel_count=1, sample_rate=22050, envelope=amp_env_slow)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.2
+
+while True:
+ synth.envelope = amp_env_slow
+ synth.press(46)
+ time.sleep(1.25)
+ synth.release(46)
+ time.sleep(1.25)
+
+ synth.envelope = amp_env_fast
+ synth.press(51)
+ time.sleep(1.25)
+ synth.release(51)
+ time.sleep(1.25)
diff --git a/Synthio_Fundamentals/example_05_filters.py b/Synthio_Fundamentals/example_05_filters.py
new file mode 100644
index 000000000..cee343ba9
--- /dev/null
+++ b/Synthio_Fundamentals/example_05_filters.py
@@ -0,0 +1,76 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import audiomixer
+import synthio
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=22050, buffer_size=2048)
+
+amp_env_slow = synthio.Envelope(
+ attack_time=0.2,
+ sustain_level=1.0,
+ release_time=0.8
+)
+
+synth = synthio.Synthesizer(channel_count=1, sample_rate=22050, envelope=amp_env_slow)
+
+# set up filters
+frequency = 2000
+resonance = 1.5
+lpf = synth.low_pass_filter(frequency, resonance)
+hpf = synth.high_pass_filter(frequency, resonance)
+bpf = synth.band_pass_filter(frequency, resonance)
+
+note1 = synthio.Note(frequency=330, filter=None)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.2
+
+while True:
+ # no filter
+ note1.filter = None
+ synth.press(note1)
+ time.sleep(1.25)
+ synth.release(note1)
+ time.sleep(1.25)
+
+ # lpf
+ note1.filter = lpf
+ synth.press(note1)
+ time.sleep(1.25)
+ synth.release(note1)
+ time.sleep(1.25)
+
+ # hpf
+ note1.filter = hpf
+ synth.press(note1)
+ time.sleep(1.25)
+ synth.release(note1)
+ time.sleep(1.25)
+
+ # bpf
+ note1.filter = bpf
+ synth.press(note1)
+ time.sleep(1.25)
+ synth.release(note1)
+ time.sleep(1.25)
diff --git a/Synthio_Fundamentals/example_06_MIDI_input.py b/Synthio_Fundamentals/example_06_MIDI_input.py
new file mode 100644
index 000000000..39349e284
--- /dev/null
+++ b/Synthio_Fundamentals/example_06_MIDI_input.py
@@ -0,0 +1,65 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import board
+import digitalio
+import audiomixer
+import synthio
+import usb_midi
+import adafruit_midi
+from adafruit_midi.note_on import NoteOn
+from adafruit_midi.note_off import NoteOff
+
+# note for ESP32-S2 boards, due to not enough available endpoints,
+# to enable USB MIDI, create a "boot.py" with following in it, then power cycle board:
+# import usb_hid
+# import usb_midi
+# usb_hid.disable()
+# usb_midi.enable()
+# print("enabled USB MIDI, disabled USB HID")
+
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=22050, buffer_size=2048)
+
+midi = adafruit_midi.MIDI(midi_in=usb_midi.ports[0], in_channel=0)
+
+amp_env_med = synthio.Envelope(
+ attack_time=0.05,
+ sustain_level=0.8,
+ release_time=0.2
+)
+
+synth = synthio.Synthesizer(channel_count=1, sample_rate=22050, envelope=amp_env_med)
+
+note1 = synthio.Note(frequency=330, filter=None)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.2
+
+while True:
+ msg = midi.receive()
+ if isinstance(msg, NoteOn) and msg.velocity != 0:
+ print("noteOn: ", msg.note, "vel:", msg.velocity)
+ note1.frequency = synthio.midi_to_hz(msg.note)
+ synth.press(note1)
+ elif isinstance(msg, NoteOff) or isinstance(msg, NoteOn) and msg.velocity == 0:
+ print("noteOff:", msg.note, "vel:", msg.velocity)
+ note1.frequency = synthio.midi_to_hz(msg.note)
+ synth.release(note1)
diff --git a/Synthio_Fundamentals/example_07_MIDI_input_CC.py b/Synthio_Fundamentals/example_07_MIDI_input_CC.py
new file mode 100644
index 000000000..a6be236d1
--- /dev/null
+++ b/Synthio_Fundamentals/example_07_MIDI_input_CC.py
@@ -0,0 +1,94 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import board
+import busio
+import digitalio
+import audiomixer
+import synthio
+import usb_midi
+import adafruit_midi
+from adafruit_midi.note_on import NoteOn
+from adafruit_midi.note_off import NoteOff
+from adafruit_midi.control_change import ControlChange
+
+# note for ESP32-S2 boards, due to not enough available endpoints,
+# to enable USB MIDI, create a "boot.py" with following in it, then power cycle board:
+# import usb_hid
+# import usb_midi
+# usb_hid.disable()
+# usb_midi.enable()
+# print("enabled USB MIDI, disabled USB HID")
+
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=22050, buffer_size=2048)
+
+midi_channel = 1
+uart = busio.UART(tx=board.TX, rx=board.RX, baudrate=31250, timeout=0.001)
+midi_usb = adafruit_midi.MIDI(midi_in=usb_midi.ports[0], in_channel=0)
+midi_uart = adafruit_midi.MIDI(midi_in=uart, in_channel=midi_channel-1)
+
+amp_env_med = synthio.Envelope(
+ attack_time=0.05,
+ sustain_level=0.8,
+ release_time=0.2
+)
+
+synth = synthio.Synthesizer(channel_count=1, sample_rate=22050, envelope=amp_env_med)
+# set up filters
+filter_freq = 4000
+filter_res = 0.5
+filter_freq_lo = 100 # filter lowest freq
+filter_freq_hi = 4500 # filter highest freq
+filter_res_lo = 0.5 # filter q lowest value
+filter_res_hi = 2.0 # filter q highest value
+lpf = synth.low_pass_filter(filter_freq, filter_res)
+note1 = synthio.Note(frequency=330, filter=lpf)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.2
+
+def map_range(s, a1, a2, b1, b2):
+ return b1 + ((s - a1) * (b2 - b1) / (a2 - a1))
+
+
+while True:
+ note1.filter = synth.low_pass_filter(filter_freq, filter_res)
+
+ msg = midi_uart.receive() or midi_usb.receive()
+
+ if isinstance(msg, NoteOn) and msg.velocity != 0:
+ print("noteOn: ", msg.note, "vel:", msg.velocity)
+ note1.frequency = synthio.midi_to_hz(msg.note)
+ synth.press(note1)
+
+ elif isinstance(msg, NoteOff) or isinstance(msg, NoteOn) and msg.velocity == 0:
+ print("noteOff:", msg.note, "vel:", msg.velocity)
+ note1.frequency = synthio.midi_to_hz(msg.note)
+ synth.release(note1)
+
+ elif isinstance(msg, ControlChange):
+ print("CC", msg.control, "=", msg.value)
+ if msg.control == 21: # filter cutoff
+ filter_freq = map_range(msg.value, 0, 127, filter_freq_lo, filter_freq_hi)
+ elif msg.control == 22: # filter Q
+ filter_res = map_range(msg.value, 0, 127, filter_res_lo, filter_res_hi)
+ elif msg.control == 7: # volume
+ mixer.voice[0].level = map_range(msg.value, 0, 127, 0.0, 1.0)
diff --git a/Synthio_Fundamentals/example_08_LFO_pitch.py b/Synthio_Fundamentals/example_08_LFO_pitch.py
new file mode 100644
index 000000000..54629b038
--- /dev/null
+++ b/Synthio_Fundamentals/example_08_LFO_pitch.py
@@ -0,0 +1,39 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import board
+import digitalio
+import audiomixer
+import synthio
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=44100, buffer_size=4096)
+synth = synthio.Synthesizer(channel_count=1, sample_rate=44100)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.1
+
+lfo = synthio.LFO(rate=0.6, scale=0.05) # 1 Hz lfo at 0.25%
+midi_note = 52
+note = synthio.Note(synthio.midi_to_hz(midi_note), bend=lfo)
+synth.press(note)
+
+
+while True:
+ pass
diff --git a/Synthio_Fundamentals/example_09_LFO_tremolo.py b/Synthio_Fundamentals/example_09_LFO_tremolo.py
new file mode 100644
index 000000000..a3f43be10
--- /dev/null
+++ b/Synthio_Fundamentals/example_09_LFO_tremolo.py
@@ -0,0 +1,43 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import audiomixer
+import synthio
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=44100, buffer_size=4096)
+synth = synthio.Synthesizer(channel_count=1, sample_rate=44100)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.2
+
+lfo_tremolo = synthio.LFO(rate=0.8, scale=0.3, offset=0.7)
+
+midi_note = 50
+note1 = synthio.Note(synthio.midi_to_hz(midi_note), amplitude=lfo_tremolo)
+
+synth.press(note1)
+
+
+while True:
+ print(lfo_tremolo.value)
+ time.sleep(0.05)
diff --git a/Synthio_Fundamentals/example_10_waveshapes.py b/Synthio_Fundamentals/example_10_waveshapes.py
new file mode 100644
index 000000000..06cd06ed7
--- /dev/null
+++ b/Synthio_Fundamentals/example_10_waveshapes.py
@@ -0,0 +1,81 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import audiomixer
+import synthio
+import ulab.numpy as np
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=44100, buffer_size=4096)
+
+amp_env_slow = synthio.Envelope(
+ attack_time=0.15,
+ sustain_level=1.0,
+ release_time=0.8
+)
+synth = synthio.Synthesizer(channel_count=1, sample_rate=44100, envelope=amp_env_slow)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.6
+
+# create sine, tri, saw & square single-cycle waveforms to act as oscillators
+SAMPLE_SIZE = 512
+SAMPLE_VOLUME = 32000 # 0-32767
+half_period = SAMPLE_SIZE // 2
+wave_sine = np.array(np.sin(np.linspace(0, 2*np.pi, SAMPLE_SIZE, endpoint=False)) * SAMPLE_VOLUME,
+ dtype=np.int16)
+wave_saw = np.linspace(SAMPLE_VOLUME, -SAMPLE_VOLUME, num=SAMPLE_SIZE, dtype=np.int16)
+wave_tri = np.concatenate((np.linspace(-SAMPLE_VOLUME, SAMPLE_VOLUME, num=half_period,
+ dtype=np.int16),
+ np.linspace(SAMPLE_VOLUME, -SAMPLE_VOLUME, num=half_period,
+ dtype=np.int16)))
+wave_square = np.concatenate((np.full(half_period, SAMPLE_VOLUME, dtype=np.int16),
+ np.full(half_period, -SAMPLE_VOLUME, dtype=np.int16)))
+
+midi_note = 65
+
+
+while True:
+ # create notes using those waveforms
+ note1 = synthio.Note(synthio.midi_to_hz(midi_note), waveform=wave_sine, amplitude=1)
+ synth.press(note1)
+ time.sleep(0.75)
+ synth.release(note1)
+ time.sleep(.75)
+
+ note1 = synthio.Note(synthio.midi_to_hz(midi_note), waveform=wave_tri, amplitude=0.7)
+ synth.press(note1)
+ time.sleep(0.75)
+ synth.release(note1)
+ time.sleep(.75)
+
+ note1 = synthio.Note(synthio.midi_to_hz(midi_note), waveform=wave_saw, amplitude=0.25)
+ synth.press(note1)
+ time.sleep(0.75)
+ synth.release(note1)
+ time.sleep(.75)
+
+ note1 = synthio.Note(synthio.midi_to_hz(midi_note), waveform=wave_square, amplitude=0.2)
+ synth.press(note1)
+ time.sleep(0.75)
+ synth.release(note1)
+ time.sleep(.75)
diff --git a/Synthio_Fundamentals/example_11_wavetable_morph.py b/Synthio_Fundamentals/example_11_wavetable_morph.py
new file mode 100644
index 000000000..5965eb920
--- /dev/null
+++ b/Synthio_Fundamentals/example_11_wavetable_morph.py
@@ -0,0 +1,77 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import audiomixer
+import digitalio
+import synthio
+import ulab.numpy as np
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=44100, buffer_size=4096)
+
+amp_env_slow = synthio.Envelope(
+ attack_time=0.25,
+ sustain_level=1.0,
+ release_time=0.8
+)
+synth = synthio.Synthesizer(channel_count=1, sample_rate=44100, envelope=amp_env_slow)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.6
+
+# create sine, tri, saw & square single-cycle waveforms to act as oscillators
+SAMPLE_SIZE = 512
+SAMPLE_VOLUME = 32000 # 0-32767
+half_period = SAMPLE_SIZE // 2
+wave_sine = np.array(np.sin(np.linspace(0, 2*np.pi, SAMPLE_SIZE, endpoint=False)) * SAMPLE_VOLUME,
+ dtype=np.int16)
+wave_saw = np.linspace(SAMPLE_VOLUME, -SAMPLE_VOLUME, num=SAMPLE_SIZE, dtype=np.int16)
+wave_tri = np.concatenate((np.linspace(-SAMPLE_VOLUME, SAMPLE_VOLUME, num=half_period,
+ dtype=np.int16),
+ np.linspace(SAMPLE_VOLUME, -SAMPLE_VOLUME, num=half_period,
+ dtype=np.int16)))
+wave_square = np.concatenate((np.full(half_period, SAMPLE_VOLUME, dtype=np.int16),
+ np.full(half_period, -SAMPLE_VOLUME, dtype=np.int16)))
+
+def lerp(a, b, t): # function to morph shapes w linear interpolation
+ return (1-t) * a + t * b
+
+wave_empty = np.zeros(SAMPLE_SIZE, dtype=np.int16) # empty buffer we use array slice copy "[:]" on
+note1 = synthio.Note(frequency=440, waveform=wave_empty, amplitude=0.6)
+synth.press(note1)
+
+pos = 0
+my_wave = wave_empty
+
+
+while True:
+ while pos <= 1.0:
+ print(pos)
+ pos += 0.01
+ my_wave[:] = lerp(wave_sine, wave_saw, pos)
+ note1.waveform = my_wave
+ time.sleep(0.05)
+ while pos >= 0.1:
+ print(pos)
+ pos -= 0.01
+ my_wave[:] = lerp(wave_sine, wave_saw, pos)
+ note1.waveform = my_wave
+ time.sleep(0.05)
diff --git a/Synthio_Fundamentals/example_12_detuned_oscs.py b/Synthio_Fundamentals/example_12_detuned_oscs.py
new file mode 100644
index 000000000..c6633f34a
--- /dev/null
+++ b/Synthio_Fundamentals/example_12_detuned_oscs.py
@@ -0,0 +1,72 @@
+# SPDX-FileCopyrightText: 2023 John Park and @todbot / Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import audiomixer
+import digitalio
+import synthio
+import ulab.numpy as np
+
+# for PWM audio with an RC filter
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(channel_count=1, sample_rate=44100, buffer_size=4096)
+
+amp_env_slow = synthio.Envelope(
+ attack_time=0.65,
+ sustain_level=1.0,
+ release_time=0.8
+)
+synth = synthio.Synthesizer(channel_count=1, sample_rate=44100, envelope=amp_env_slow)
+
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer.voice[0].level = 0.3
+
+# create sine, tri, saw & square single-cycle waveforms to act as oscillators
+SAMPLE_SIZE = 512
+SAMPLE_VOLUME = 32000 # 0-32767
+half_period = SAMPLE_SIZE // 2
+wave_sine = np.array(np.sin(np.linspace(0, 2*np.pi, SAMPLE_SIZE, endpoint=False)) * SAMPLE_VOLUME,
+ dtype=np.int16)
+wave_saw = np.linspace(SAMPLE_VOLUME, -SAMPLE_VOLUME, num=SAMPLE_SIZE, dtype=np.int16)
+wave_tri = np.concatenate((np.linspace(-SAMPLE_VOLUME, SAMPLE_VOLUME, num=half_period,
+ dtype=np.int16),
+ np.linspace(SAMPLE_VOLUME, -SAMPLE_VOLUME, num=half_period,
+ dtype=np.int16)))
+wave_square = np.concatenate((np.full(half_period, SAMPLE_VOLUME, dtype=np.int16),
+ np.full(half_period, -SAMPLE_VOLUME, dtype=np.int16)))
+
+# note1 = synthio.Note( frequency = 220, waveform = wave_sine, amplitude=0.3)
+
+detune = 0.003 # how much to detune
+num_oscs = 1
+midi_note = 52
+
+while True:
+ print("num_oscs:", num_oscs)
+ notes = [] # holds note objs being pressed
+ # simple detune, always detunes up
+ for i in range(num_oscs):
+ f = synthio.midi_to_hz(midi_note) * (1 + i*detune)
+ notes.append(synthio.Note(frequency=f, waveform=wave_saw))
+ synth.press(notes)
+ time.sleep(3.6)
+ synth.release(notes)
+ time.sleep(0.1)
+ # increment number of detuned oscillators
+ num_oscs = num_oscs+1 if num_oscs < 5 else 1
diff --git a/Synthio_Fundamentals/example_13_wavetable_scanning.py b/Synthio_Fundamentals/example_13_wavetable_scanning.py
new file mode 100644
index 000000000..bab57c77b
--- /dev/null
+++ b/Synthio_Fundamentals/example_13_wavetable_scanning.py
@@ -0,0 +1,174 @@
+# SPDX-FileCopyrightText: 2023 @todbot / Tod Kurt w mods by John Park
+#
+# SPDX-License-Identifier: MIT
+
+# wavetable_midisynth_code_i2s.py -- simple wavetable synth that responds to MIDI
+# 26 Jul 2023 - @todbot / Tod Kurt
+# Demonstrate using wavetables to make a MIDI synth
+# Needs WAV files from waveeditonline.com
+# - BRAIDS01.WAV - http://waveeditonline.com/index-17.html
+
+import time
+import busio
+import board
+import audiomixer
+import synthio
+import digitalio
+import audiobusio
+import ulab.numpy as np
+import adafruit_wave
+
+import usb_midi
+import adafruit_midi
+from adafruit_midi.note_on import NoteOn
+from adafruit_midi.note_off import NoteOff
+from adafruit_midi.control_change import ControlChange
+
+auto_play = False # set to true to have it play its own little song
+auto_play_notes = [36, 38, 40, 41, 43, 45, 46, 48, 50, 52]
+auto_play_speed = 0.9 # time in seconds between notes
+
+midi_channel = 1
+
+wavetable_fname = "wav/BRAIDS01.WAV" # from http://waveeditonline.com/index-17.html
+wavetable_sample_size = 256 # number of samples per wave in wavetable (256 is standard)
+sample_rate = 44100
+wave_lfo_min = 0 # which wavetable number to start from 10
+wave_lfo_max = 6 # which wavetable number to go up to 25
+
+# for PWM audio with an RC filter
+# Pins used on QTPY RP2040:
+# - board.MOSI - Audio PWM output (needs RC filter output)
+# import audiopwmio
+# audio = audiopwmio.PWMAudioOut(board.GP10)
+
+# for I2S audio with external I2S DAC board
+# import audiobusio
+
+# I2S on Audio BFF or Amp BFF on QT Py:
+# audio = audiobusio.I2SOut(bit_clock=board.A3, word_select=board.A2, data=board.A1)
+
+# I2S audio on PropMaker Feather RP2040
+power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
+power.switch_to_output(value=True)
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+mixer = audiomixer.Mixer(buffer_size=4096, voice_count=1, sample_rate=sample_rate, channel_count=1,
+ bits_per_sample=16, samples_signed=True)
+audio.play(mixer) # attach mixer to audio playback
+synth = synthio.Synthesizer(sample_rate=sample_rate)
+mixer.voice[0].play(synth) # attach synth to mixer
+mixer.voice[0].level = 1
+
+uart = busio.UART(tx=board.TX, rx=board.RX, baudrate=31250, timeout=0.001)
+midi_uart = adafruit_midi.MIDI(midi_in=uart, in_channel=midi_channel-1)
+midi_usb = adafruit_midi.MIDI(midi_in=usb_midi.ports[0], in_channel=midi_channel-1)
+
+# mix between values a and b, works with numpy arrays too, t ranges 0-1
+def lerp(a, b, t):
+ return (1-t)*a + t*b
+
+class Wavetable:
+ """ A 'waveform' for synthio.Note that uses a wavetable w/ a scannable wave position."""
+ def __init__(self, filepath, wave_len=256):
+ self.w = adafruit_wave.open(filepath)
+ self.wave_len = wave_len # how many samples in each wave
+ if self.w.getsampwidth() != 2 or self.w.getnchannels() != 1:
+ raise ValueError("unsupported WAV format")
+ self.waveform = np.zeros(wave_len, dtype=np.int16) # empty buffer we'll copy into
+ self.num_waves = self.w.getnframes() // self.wave_len
+ self.set_wave_pos(0)
+
+ def set_wave_pos(self, pos):
+ """Pick where in wavetable to be, morphing between waves"""
+ pos = min(max(pos, 0), self.num_waves-1) # constrain
+ samp_pos = int(pos) * self.wave_len # get sample position
+ self.w.setpos(samp_pos)
+ waveA = np.frombuffer(self.w.readframes(self.wave_len), dtype=np.int16)
+ self.w.setpos(samp_pos + self.wave_len) # one wave up
+ waveB = np.frombuffer(self.w.readframes(self.wave_len), dtype=np.int16)
+ pos_frac = pos - int(pos) # fractional position between wave A & B
+ self.waveform[:] = lerp(waveA, waveB, pos_frac) # mix waveforms A & B
+
+
+wavetable1 = Wavetable(wavetable_fname, wave_len=wavetable_sample_size)
+
+amp_env = synthio.Envelope(attack_level=0.2, sustain_level=0.2, attack_time=0.05, release_time=0.3,
+ decay_time=.5)
+wave_lfo = synthio.LFO(rate=0.2, waveform=np.array((0, 32767), dtype=np.int16))
+lpf = synth.low_pass_filter(4000, 1) # cut some of the annoying harmonics
+
+synth.blocks.append(wave_lfo) # attach wavelfo to global lfo runner since cannot attach to note
+
+notes_pressed = {} # keys = midi note num, value = synthio.Note,
+
+def note_on(notenum):
+ # release old note at this notenum if present
+ if oldnote := notes_pressed.pop(notenum, None):
+ synth.release(oldnote)
+
+ if not auto_play:
+ wave_lfo.retrigger()
+
+ f = synthio.midi_to_hz(notenum)
+
+ vibrato_lfo = synthio.LFO(rate=1, scale=0.01)
+ note = synthio.Note(frequency=f, waveform=wavetable1.waveform,
+ envelope=amp_env, filter=lpf, bend=vibrato_lfo)
+ synth.press(note)
+ notes_pressed[notenum] = note
+
+def note_off(notenum):
+ if note := notes_pressed.pop(notenum, None):
+ synth.release(note)
+
+def set_wave_lfo_minmax(wmin, wmax):
+ scale = (wmax - wmin)
+ wave_lfo.scale = scale
+ wave_lfo.offset = wmin
+
+last_synth_update_time = 0
+def update_synth():
+ # pylint: disable=global-statement
+ global last_synth_update_time
+ # only update 100 times a sec to lighten the load
+ if time.monotonic() - last_synth_update_time > 0.01:
+ # last_update_time = time.monotonic()
+ wavetable1.set_wave_pos( wave_lfo.value )
+
+last_auto_play_time = 0
+auto_play_pos = -1
+def update_auto_play():
+ # pylint: disable=global-statement
+ global last_auto_play_time, auto_play_pos
+ if auto_play and time.monotonic() - last_auto_play_time > auto_play_speed:
+ last_auto_play_time = time.monotonic()
+ note_off( auto_play_notes[ auto_play_pos ] )
+ auto_play_pos = (auto_play_pos + 3) % len(auto_play_notes)
+ note_on( auto_play_notes[ auto_play_pos ] )
+
+
+set_wave_lfo_minmax(wave_lfo_min, wave_lfo_max)
+
+def map_range(s, a1, a2, b1, b2):
+ return b1 + ((s - a1) * (b2 - b1) / (a2 - a1))
+
+
+print("wavetable midisynth i2s. auto_play:",auto_play)
+
+while True:
+ update_synth()
+ update_auto_play()
+
+ msg = midi_uart.receive() or midi_usb.receive()
+
+ if isinstance(msg, NoteOn) and msg.velocity != 0:
+ note_on(msg.note)
+
+ elif isinstance(msg,NoteOff) or isinstance(msg,NoteOn) and msg.velocity==0:
+ note_off(msg.note)
+
+ elif isinstance(msg,ControlChange):
+ if msg.control == 21: # mod wheel
+ scan_low = map_range(msg.value, 0,127, 0, 64)
+ set_wave_lfo_minmax(scan_low, scan_low)
diff --git a/Synthio_Fundamentals/wav/BRAIDS01.WAV b/Synthio_Fundamentals/wav/BRAIDS01.WAV
new file mode 100755
index 000000000..692211ca9
Binary files /dev/null and b/Synthio_Fundamentals/wav/BRAIDS01.WAV differ
diff --git a/Synthio_Fundamentals/wav/PLAITS01.WAV b/Synthio_Fundamentals/wav/PLAITS01.WAV
new file mode 100755
index 000000000..20a931b91
Binary files /dev/null and b/Synthio_Fundamentals/wav/PLAITS01.WAV differ
diff --git a/Synthio_Fundamentals/wav/PLAITS02.WAV b/Synthio_Fundamentals/wav/PLAITS02.WAV
new file mode 100755
index 000000000..361d9a72a
Binary files /dev/null and b/Synthio_Fundamentals/wav/PLAITS02.WAV differ
diff --git a/Synthio_Fundamentals/wav/PLAITS03.WAV b/Synthio_Fundamentals/wav/PLAITS03.WAV
new file mode 100755
index 000000000..9c1b5b9ed
Binary files /dev/null and b/Synthio_Fundamentals/wav/PLAITS03.WAV differ
diff --git a/Synthio_Fundamentals/wav/readme.txt b/Synthio_Fundamentals/wav/readme.txt
new file mode 100755
index 000000000..2c1a48d27
--- /dev/null
+++ b/Synthio_Fundamentals/wav/readme.txt
@@ -0,0 +1,3 @@
+WaveEdit is the free, open-source wavetable editor developed by Synthesis Technology for the E370 Quad Morphing VCO and E352 Cloud Terrarium VCO Eurorack format wavetable oscillators. WaveEdit wavetables are also compatible with the Piston Honda Mark III from Industrial Music Electronics and the Qu-Bit Chord v2. You can download WaveEdit at http://synthtech.com/waveedit for Mac, Windows and Linux.
+
+This site presents a growing library of free wavetable banks shared by WaveEdit users via the WaveEdit Online tab within the software. All wavetables here are under CC0 1.0 Universal (CC0 1.0) Public Domain Dedication.
diff --git a/TFP401_800x480_RP2040/.feather_rp2040_dvi.test.only b/TFP401_800x480_RP2040/.feather_rp2040_dvi.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/TFP401_800x480_RP2040/TFP401_800x480_RP2040.ino b/TFP401_800x480_RP2040/TFP401_800x480_RP2040.ino
new file mode 100644
index 000000000..01ddea0ef
--- /dev/null
+++ b/TFP401_800x480_RP2040/TFP401_800x480_RP2040.ino
@@ -0,0 +1,282 @@
+// SPDX-FileCopyrightText: 2023 PaintYourDragon for Adafruit
+//
+// SPDX-License-Identifier: MIT
+
+// "Aquarium" example for PicoDVI library. If just starting out,
+// see the 8bit_double_buffer which explains the PicoDVI groundwork.
+// Comments in THIS file are mostly distinct & new concepts.
+// The flying toasters example also goes into more detail.
+
+// IF NO OUTPUT OR RED FLICKER SCANLINES: try Tools->Optimize->(-O3)
+
+#include
+#include "Adafruit_EEPROM_I2C.h"
+#include "sprites.h" // Graphics data
+
+//DVIGFX8 display(DVI_RES_320x240p60, true, adafruit_dvibell_cfg);
+
+// See notes in 8bit_double_buffer regarding 400x240 mode.
+DVIGFX8 display(DVI_RES_400x240p60, true, adafruit_feather_dvi_cfg);
+// Also requires -O3 setting.
+
+// This structure holds pointers to sprite graphics and masks in sprites.h.
+const struct {
+ const uint8_t *sprite[2][2]; // L/R directions and A/B frames
+ const uint8_t *mask[2][2]; // Same
+} spritedata[] = {
+ // There are FOUR sprites/masks for each fish (and kelp):
+ // two left-facing, two right-facing, and A/B frames for each.
+ { sprite0LA , sprite0LB , sprite0RA , sprite0RB , mask0LA , mask0LB , mask0RA , mask0RB },
+ { sprite1LA , sprite1LB , sprite1RA , sprite1RB , mask1LA , mask1LB , mask1RA , mask1RB },
+ { sprite2LA , sprite2LB , sprite2RA , sprite2RB , mask2LA , mask2LB , mask2RA , mask2RB },
+ { sprite3LA , sprite3LB , sprite3RA , sprite3RB, mask3LA , mask3LB , mask3RA , mask3RB },
+ { sprite4LA , sprite4LB , sprite4RA , sprite4RB , mask4LA , mask4LB , mask4RA , mask4RB },
+ { sprite5LA , sprite5LB , sprite5RA , sprite5RB , mask5LA , mask5LB , mask5RA , mask5RB },
+ { sprite6LA , sprite6LB , sprite6RA , sprite6RB , mask6LA , mask6LB , mask6RA , mask6RB },
+ { sprite7LA , sprite7LB , sprite7RA , sprite7RB , mask7LA , mask7LB , mask7RA , mask7RB },
+ { sprite8LA , sprite8LB , sprite8RA , sprite8RB , mask8LA , mask8LB , mask8RA , mask8RB },
+ { sprite9LA , sprite9LB , sprite9RA , sprite9RB , mask9LA , mask9LB , mask9RA , mask9RB },
+ { sprite10LA, sprite10LB, sprite10RA, sprite10RB, mask10LA, mask10LB, mask10RA, mask10RB },
+ { sprite11LA, sprite11LB, sprite11RA, sprite11RB, mask11LA, mask11LB, mask11RA, mask11RB },
+ { sprite12LA, sprite12LB, sprite12RA, sprite12RB, mask12LA, mask12LB, mask12RA, mask12RB },
+ { sprite13LA, sprite13LB, sprite13RA, sprite13RB, mask13LA, mask13LB, mask13RA, mask13RB },
+ { sprite14LA, sprite14LB, sprite14RA, sprite14RB, mask14LA, mask14LB, mask14RA, mask14RB },
+ { sprite15LA, sprite15LB, sprite15RA, sprite15RB, mask15LA, mask15LB, mask15RA, mask15RB },
+ { sprite16LA, sprite16LB, sprite16RA, sprite16RB, mask16LA, mask16LB, mask16RA, mask16RB },
+ { sprite17LA, sprite17LB, sprite17RA, sprite17RB, mask17LA, mask17LB, mask17RA, mask17RB },
+ // Bubbles are a special case. No right/left versions, but A/B frames.
+ // To use same struct (not a special case), just duplicate each 2X.
+ { sprite18A , sprite18B , sprite18A , sprite18B , mask18A , mask18B , mask18A , mask18B },
+};
+
+#define N_SPRITES 12 // MUST be >= 6
+
+// This structure contains positions and other data for the sprites
+// in motion (notice it's not "const", because contents change).
+struct {
+ int16_t pos[2]; // sprite position (X,Y) * 16
+ int8_t speed; // sprite speed (-16 to -8 or +8 to +16)
+ uint8_t index; // which index (in spritedata) to use
+ uint8_t offset; // Timer offset to de-sync each sprite's animation
+} sprite[N_SPRITES];
+
+// Initialize one sprite (index passed to function) to a random offscreen
+// position, also randomizing speed and sprite (fish) type.
+void randomsprite(uint8_t i) {
+ // To move the sprites at slightly different speeds, coordinates are
+ // stored in 1/16 pixel units. When drawing, the stored values get
+ // divided by 16 to yield final pixel coordinates.
+ sprite[i].speed = random(8, 17); // 1/2 to 1 pixel per frame
+ if (random(2)) { // 50/50 random chance...
+ sprite[i].speed *= -1; // Fish moves right-to-left
+ sprite[i].pos[0] = (display.width() + random(64)) * 16; // Start off right edge
+ } else { // Fish moves left-to-right
+ sprite[i].pos[0] = random(64, 128) * -16; // Start off left edge
+ }
+ // WHEEL. OF. FISH. -2 here is to ignore last 2 sprites (kelp, bubbles)
+ sprite[i].index = random(sizeof spritedata / sizeof spritedata[0] - 2);
+ if (sprite[i].index == 8) { // Sprite #8 is crab, keep close to ground
+ sprite[i].pos[1] = random(display.height() - 96, display.height() - 64) * 16;
+ } else { // Is a fish, upper part of screen
+ sprite[i].pos[1] = random(display.height() - 96) * 16;
+ }
+ sprite[i].offset = random(256); // De-synchronize sprite animation
+}
+
+
+
+/* Adafruit breakout @ 800x480 ! */
+uint8_t const eepromdat[128] = {
+0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x04, 0x81, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+0x01, 0x11, 0x01, 0x03, 0x80, 0x0F, 0x0A, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x0C, 0x20, 0x80, 0x30, 0xE0, 0x2D, 0x10, 0x28, 0x30,
+0xD3, 0x00, 0x6C, 0x44, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+};
+#define EEPROMSIZE 256UL // 0.5 Kb
+#define ADDRESS_SIZE 8
+#define EEPROM_ADDR 0x50 // the default address!
+
+byte i2c_eeprom_read_byte(uint8_t deviceaddress, uint16_t eeaddress ) {
+ byte rdata = 0xFF;
+ Wire.beginTransmission(deviceaddress); // MSB
+ Wire.write(eeaddress); // LSB
+ Wire.endTransmission();
+ Wire.requestFrom(deviceaddress, (uint8_t)1);
+ while (!Wire.available()) yield();
+ rdata = Wire.read();
+ return rdata;
+}
+void i2c_eeprom_write_byte(uint8_t deviceaddress, uint16_t eeaddress, byte data ) {
+ Wire.beginTransmission(deviceaddress); // MSB
+ Wire.write((byte)eeaddress); // LSB
+ Wire.write((byte)data);
+ Wire.endTransmission();
+}
+
+bool verify_eeprom() {
+ for (uint16_t addr = 0; addr < EEPROMSIZE; addr++) {
+ uint8_t b = 0xFF;
+ if (addr < sizeof(eepromdat)) {
+ b = eepromdat[addr];
+ }
+ uint8_t d = i2c_eeprom_read_byte(0x50, addr);
+ delay(5);
+ Serial.printf("0x%02X, ", d);
+ if ((addr % 32) == 31)
+ Serial.println();
+
+ if (b != d) {
+ Serial.printf("verification failed at 0x%02x\n\r", addr);
+ return false;
+ }
+ }
+ return true;
+}
+
+Adafruit_EEPROM_I2C i2ceeprom;
+
+void setup() { // Runs once on startup
+ Serial.begin(115200);
+
+ //while (!Serial) yield();
+ delay(1000);
+
+ if (!display.begin()) { // Blink LED if insufficient RAM
+ pinMode(LED_BUILTIN, OUTPUT);
+ for (;;) digitalWrite(LED_BUILTIN, (millis() / 500) & 1);
+ }
+ delay(1000);
+
+ // Initialize color palette from table in sprites.h. Rather than
+ // calling setColor() for each one, we can just dump it directly...
+ memcpy(display.getPalette(), palette, sizeof palette);
+ display.swap(false, true); // Duplicate same palette to front & back buffers
+
+
+ display.fillScreen(0);
+ display.setCursor(0, 0);
+ display.setTextColor(1);
+ display.setTextSize(3);
+ display.println("TFP401 800x480 EDID");
+
+ if (i2ceeprom.begin(0x50)) { // you can stick the new i2c addr in here, e.g. begin(0x51);
+ Serial.println("Found I2C EEPROM");
+ display.println("I2C EEPROM found!");
+ display.swap();
+ } else {
+ Serial.println("I2C EEPROM not identified ... check your connections?\r\n");
+ display.println("I2C EEPROM NOT found?");
+ display.swap();
+ while (1) delay(10);
+ }
+
+
+ if (! verify_eeprom() ) {
+ display.swap();
+ display.print("Writing EEPROM...");
+ display.swap();
+
+ Serial.println("Starting");
+ for (uint16_t addr = 0; addr < EEPROMSIZE; addr++) {
+ uint8_t b = 0xFF;
+ if (addr < sizeof(eepromdat)) {
+ b = eepromdat[addr];
+ }
+ i2c_eeprom_write_byte(0x50, addr, b);
+ delay(5);
+ Serial.printf("0x%02X, ", b);
+ if ((addr % 32) == 31)
+ Serial.println();
+ }
+ display.swap();
+ display.println("OK!");
+ display.swap();
+ }
+
+ display.swap();
+ display.print("Verifying EEPROM...");
+ display.swap();
+ if (verify_eeprom()) {
+ display.swap();
+ display.println("OK!");
+ display.swap();
+ } else {
+ display.swap();
+ display.println(" :(");
+ display.swap();
+ while (1);
+ }
+
+ display.swap();
+ display.println("Time for Fish ><(((o>");
+ display.swap();
+ delay(1000);
+
+ // Randomize initial sprite states
+ randomSeed(analogRead(A0)); // Seed randomness from unused analog in
+ int range = display.width() + 64;
+ for (int i=0; i<3; i++) { // FIRST THREE sprites...
+ sprite[i].index = 17; // Are always kelp
+ sprite[i].speed = random(2) ? 1 : -1; // 50/50 left/right flip
+ sprite[i].pos[0] = (random(range * i / 3, range * (i + 1) / 3 - 64) - 32) * 16;
+ sprite[i].pos[1] = random(display.height() - 120, display.height() - 100) * 16;
+ sprite[i].offset = random(256);
+ }
+ for (int i=3; i<6; i++) { // NEXT THREE sprites...
+ sprite[i].index = 18; // Are always bubbles
+ sprite[i].speed = 0;
+ sprite[i].pos[0] = display.width() * 16; // Start them all offscreen
+ sprite[i].pos[1] = random(display.height()) * 8;
+ sprite[i].offset = random(256);
+ }
+ for (int i=6; i 0; // Left/right
+ uint8_t fr = ((frame + sprite[i].offset) >> 4) & 1; // A/B frame
+ if (sprite[i].speed) { // FISH or KELP; 64x64 sprite
+ display.drawGrayscaleBitmap(sprite[i].pos[0] / 16, sprite[i].pos[1] / 16,
+ spritedata[sprite[i].index].sprite[dir][fr],
+ spritedata[sprite[i].index].mask[dir][fr], 64, 64);
+ if (abs(sprite[i].speed) > 1) { // Not kelp...
+ sprite[i].pos[0] += sprite[i].speed; // Update position, check if offscreen...
+ if (((sprite[i].speed > 0) && (sprite[i].pos[0] > (display.width() * 16))) ||
+ ((sprite[i].speed < 0) && (sprite[i].pos[0] < -64 * 16)))
+ randomsprite(i); // Replace with a new fish
+ }
+ } else { // Is BUBBLES
+ display.drawGrayscaleBitmap(sprite[i].pos[0] / 16, sprite[i].pos[1] / 16,
+ spritedata[sprite[i].index].sprite[0][fr],
+ spritedata[sprite[i].index].mask[0][fr], 64, 16);
+ sprite[i].pos[1] -= 16; // Move up by 1 pixel
+ if (sprite[i].pos[1] < -256) { // Off top of screen?
+ int j = random(6, N_SPRITES); // Pick a random fish,
+ sprite[i].pos[0] = sprite[j].pos[0]; // and move bubbles there
+ sprite[i].pos[1] = sprite[j].pos[1] + 384;
+ }
+ }
+ }
+
+ // Swap front/back buffers, do not duplicate current screen state
+ // to next frame, we'll draw it new from scratch each time.
+ display.swap();
+ frame++; // Increment animation counter; "rolls over" 0-255 automatically.
+}
diff --git a/TFP401_800x480_RP2040/sprites.h b/TFP401_800x480_RP2040/sprites.h
new file mode 100644
index 000000000..710cbd619
--- /dev/null
+++ b/TFP401_800x480_RP2040/sprites.h
@@ -0,0 +1,29413 @@
+// SPDX-FileCopyrightText: 2023 PaintYourDragon for Adafruit
+//
+// SPDX-License-Identifier: MIT
+
+// Graphics data for the aquarium PicoDVI example.
+// Unlike the flying toasters demo, this one uses a larger color palette
+// and 2:1 packing as described as a possible upgrade in that code is not
+// an option here. 1 byte/pixel, period.
+
+const uint16_t palette[] = {
+ 0x0000, 0xFFFF, 0x0180, 0x0080, 0x0320, 0x0220, 0x0440, 0x3320, 0x6180,
+ 0x9B20, 0x3180, 0x9B26, 0xCCC6, 0xCE6C, 0x9CCC, 0x6326, 0x4228, 0x73AE,
+ 0x2104, 0x52AA, 0x632C, 0x8C51, 0x9CD3, 0x3186, 0xCB20, 0xFFE0, 0xFCC0,
+ 0xFE60, 0x6320, 0xBDD7, 0xAD55, 0x3193, 0x000A, 0x64D3, 0x9B33, 0xFFF3,
+ 0xDEFB, 0x0326, 0x04D9, 0xCFEC, 0xFB20, 0xF980, 0x0186, 0x6000, 0xC800,
+ 0x018C, 0x0339, 0xEF7D, 0x0006, 0x9CC0, 0xCB2C, 0xCCCC, 0x4208, 0x9B2C,
+ 0x7BCF, 0x4339, 0x18C3, 0xBDD7, 0x3000, 0xDEDB, 0xCE79, 0xCFFF, 0xFE6C,
+ 0x9E79, 0x64C0, 0x9980, 0x7000, 0x5000, 0x4000, 0x2000, 0xEF7D, 0xCCD3,
+ 0x0015, 0x333F, 0x633F, 0x64DF, 0x9800, 0xF800, 0x03A0, 0x318C, 0x64CC,
+ 0x032C, 0x34D3, 0x3679, 0x332C, 0x07F9, 0x0189, 0x0493, 0x049F, 0x032F,
+ 0x0576, 0x06F5, 0x7FB6, 0x0639, 0x071C, 0xB4C9, 0x4980, 0x9B23, 0x7BEC,
+ 0xB593, 0x9BE6, 0xE73C, 0xE736, 0xA800, 0x8800, 0xB800, 0xC806, 0xC80C,
+ 0xD800, 0xFCDF, 0xF986, 0xFB26, 0x9986, 0xFFEC, 0xFE73, 0xFFF9, 0x7800,
+ 0x7BE0, 0x7BEF, 0x03E0, 0xBDF7, 0x700E, 0x03EF, 0x0000,
+};
+
+// Gravel is a special case, being 192x64 pixels. Fish sprites that
+// follow are all 64x64, and then the bubbles sprites are 64x16.
+
+const uint8_t gravel[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 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,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00,
+ 0x75, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x75, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x76, 0x74, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x74, 0x74, 0x75, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x76, 0x76, 0x76, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x75, 0x74, 0x00, 0x74, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x74, 0x00, 0x00, 0x00, 0x00, 0x75, 0x74, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x74,
+ 0x75, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x74, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x75, 0x74, 0x75, 0x74, 0x00, 0x00,
+ 0x74, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x74, 0x76, 0x76, 0x76, 0x00, 0x00, 0x00, 0x00, 0x75, 0x74,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74,
+ 0x74, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x75, 0x74, 0x74, 0x00, 0x00, 0x74, 0x74, 0x74, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x75,
+ 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x75, 0x00,
+ 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74, 0x75, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x75, 0x74, 0x00, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x00, 0x75,
+ 0x00, 0x74, 0x76, 0x00, 0x76, 0x76, 0x00, 0x00, 0x00, 0x00, 0x74, 0x75,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x75, 0x74, 0x00, 0x00, 0x74, 0x74, 0x75, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x74, 0x75, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x75,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x74, 0x00, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x74, 0x00, 0x74, 0x74,
+ 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x75, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x74, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74,
+ 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x74, 0x00, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x75, 0x00, 0x00, 0x00, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x74,
+ 0x00, 0x00, 0x74, 0x75, 0x74, 0x75, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x75, 0x74, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x75, 0x74, 0x00,
+ 0x74, 0x77, 0x00, 0x74, 0x74, 0x00, 0x75, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x00, 0x74, 0x74, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x75, 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74,
+ 0x00, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x74, 0x75, 0x00, 0x75, 0x00,
+ 0x75, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x74, 0x74, 0x75,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x75, 0x74,
+ 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x75, 0x00, 0x00, 0x00, 0x74, 0x74,
+ 0x75, 0x74, 0x00, 0x74, 0x00, 0x75, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x76, 0x76, 0x76, 0x76, 0x74, 0x74, 0x00, 0x75, 0x74, 0x00,
+ 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x00, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x75, 0x00,
+ 0x74, 0x75, 0x74, 0x74, 0x74, 0x00, 0x74, 0x00, 0x75, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x00, 0x75, 0x74, 0x00,
+ 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x74,
+ 0x00, 0x00, 0x75, 0x00, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74,
+ 0x00, 0x75, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00, 0x00, 0x74, 0x74,
+ 0x74, 0x00, 0x75, 0x74, 0x00, 0x75, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x74, 0x74, 0x00, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00,
+ 0x74, 0x75, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x74, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74, 0x00,
+ 0x00, 0x74, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75,
+ 0x74, 0x76, 0x76, 0x76, 0x76, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x75, 0x74,
+ 0x74, 0x74, 0x74, 0x00, 0x75, 0x74, 0x74, 0x74, 0x74, 0x00, 0x74, 0x74,
+ 0x75, 0x00, 0x74, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x00, 0x75,
+ 0x74, 0x74, 0x75, 0x74, 0x00, 0x75, 0x00, 0x74, 0x74, 0x74, 0x74, 0x74,
+ 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x74, 0x00, 0x75, 0x74, 0x74, 0x00, 0x00, 0x74, 0x00, 0x75,
+ 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74, 0x00, 0x00, 0x74, 0x74, 0x75,
+ 0x74, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x74, 0x75, 0x00,
+ 0x74, 0x75, 0x74, 0x74, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x75, 0x00, 0x74, 0x00, 0x75, 0x74, 0x00, 0x75, 0x74,
+ 0x74, 0x75, 0x00, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x75, 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x00,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00,
+ 0x00, 0x74, 0x75, 0x00, 0x00, 0x75, 0x74, 0x75, 0x74, 0x75, 0x00, 0x00,
+ 0x75, 0x74, 0x75, 0x74, 0x00, 0x00, 0x75, 0x74, 0x00, 0x75, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x75, 0x00, 0x74,
+ 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x75, 0x74, 0x00, 0x74, 0x74, 0x74, 0x75, 0x75, 0x00, 0x75, 0x74,
+ 0x75, 0x00, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x00, 0x74, 0x74, 0x75, 0x00, 0x00, 0x00, 0x74, 0x74,
+ 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x74, 0x75, 0x00, 0x00,
+ 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x75, 0x00,
+ 0x75, 0x00, 0x74, 0x00, 0x74, 0x75, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x75, 0x74, 0x00, 0x75, 0x74, 0x75, 0x00, 0x74, 0x00, 0x74, 0x75, 0x00,
+ 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x75, 0x74,
+ 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x74, 0x74, 0x75, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x74, 0x74, 0x00, 0x74, 0x74, 0x00, 0x74, 0x74, 0x00, 0x75,
+ 0x74, 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74,
+ 0x74, 0x76, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x00, 0x74, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x75, 0x75, 0x74, 0x74, 0x00, 0x74, 0x74, 0x00, 0x75,
+ 0x00, 0x74, 0x00, 0x00, 0x76, 0x78, 0x76, 0x00, 0x75, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x74, 0x00, 0x00, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x75, 0x74, 0x00, 0x75, 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x75,
+ 0x00, 0x74, 0x75, 0x74, 0x00, 0x75, 0x74, 0x00, 0x00, 0x74, 0x74, 0x74,
+ 0x00, 0x74, 0x74, 0x00, 0x74, 0x74, 0x00, 0x75, 0x74, 0x74, 0x00, 0x74,
+ 0x74, 0x75, 0x74, 0x00, 0x74, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x00, 0x74,
+ 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x00, 0x00, 0x74, 0x00, 0x75, 0x74, 0x74, 0x00, 0x75, 0x00,
+ 0x00, 0x74, 0x75, 0x00, 0x00, 0x75, 0x74, 0x75, 0x00, 0x00, 0x75, 0x74,
+ 0x00, 0x74, 0x75, 0x74, 0x00, 0x00, 0x74, 0x00, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x00, 0x00, 0x00, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x75,
+ 0x00, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x00, 0x75, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x00, 0x75, 0x74,
+ 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74, 0x00,
+ 0x00, 0x75, 0x74, 0x76, 0x78, 0x76, 0x76, 0x76, 0x00, 0x00, 0x00, 0x74,
+ 0x75, 0x74, 0x00, 0x74, 0x00, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00,
+ 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x00, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74, 0x00, 0x75, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x75, 0x74, 0x00, 0x75, 0x00, 0x00, 0x74, 0x75, 0x00,
+ 0x00, 0x75, 0x74, 0x75, 0x00, 0x00, 0x75, 0x74, 0x00, 0x75, 0x00, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x00, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x00,
+ 0x75, 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74,
+ 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00, 0x00, 0x74, 0x75, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x77, 0x74, 0x75, 0x74, 0x74, 0x00,
+ 0x74, 0x00, 0x00, 0x74, 0x74, 0x00, 0x75, 0x74, 0x74, 0x74, 0x00, 0x75,
+ 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00, 0x75, 0x74, 0x74,
+ 0x00, 0x00, 0x74, 0x75, 0x74, 0x75, 0x00, 0x00, 0x74, 0x75, 0x74, 0x74,
+ 0x00, 0x75, 0x00, 0x74, 0x75, 0x00, 0x00, 0x74, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x74, 0x00, 0x00, 0x74, 0x00, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x74, 0x74, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x74, 0x74, 0x75,
+ 0x74, 0x00, 0x76, 0x78, 0x76, 0x76, 0x76, 0x00, 0x00, 0x00, 0x00, 0x75,
+ 0x74, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00, 0x74, 0x00, 0x74,
+ 0x75, 0x74, 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00, 0x00, 0x75,
+ 0x74, 0x74, 0x75, 0x00, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74, 0x75, 0x74,
+ 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00, 0x74, 0x74, 0x00, 0x00, 0x74,
+ 0x74, 0x00, 0x75, 0x74, 0x74, 0x74, 0x00, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x00, 0x74, 0x75, 0x74, 0x74, 0x75, 0x00, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x00, 0x74, 0x75, 0x74, 0x74, 0x00, 0x75, 0x00, 0x74,
+ 0x75, 0x74, 0x00, 0x00, 0x75, 0x74, 0x00, 0x75, 0x00, 0x00, 0x74, 0x74,
+ 0x75, 0x74, 0x00, 0x75, 0x00, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00,
+ 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x00, 0x74, 0x00, 0x74, 0x00, 0x00, 0x00,
+ 0x75, 0x74, 0x74, 0x00, 0x74, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x00, 0x74, 0x74, 0x75, 0x00, 0x74, 0x75, 0x00, 0x75, 0x74, 0x75, 0x74,
+ 0x00, 0x75, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x00, 0x74, 0x75, 0x00,
+ 0x75, 0x74, 0x00, 0x75, 0x00, 0x74, 0x74, 0x74, 0x75, 0x00, 0x75, 0x74,
+ 0x00, 0x75, 0x74, 0x76, 0x00, 0x76, 0x76, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x74, 0x77, 0x74, 0x00, 0x74, 0x75, 0x00, 0x00, 0x74, 0x75, 0x00,
+ 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x75, 0x74, 0x75, 0x00, 0x00, 0x00,
+ 0x74, 0x75, 0x74, 0x74, 0x74, 0x00, 0x75, 0x74, 0x74, 0x00, 0x74, 0x74,
+ 0x75, 0x74, 0x00, 0x74, 0x75, 0x74, 0x00, 0x75, 0x00, 0x74, 0x79, 0x74,
+ 0x74, 0x79, 0x00, 0x74, 0x00, 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x77, 0x74, 0x00, 0x74, 0x75,
+ 0x00, 0x00, 0x74, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74,
+ 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x00, 0x74, 0x74, 0x00, 0x00, 0x75,
+ 0x75, 0x74, 0x00, 0x75, 0x74, 0x75, 0x00, 0x74, 0x75, 0x00, 0x75, 0x00,
+ 0x00, 0x74, 0x74, 0x77, 0x74, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x00,
+ 0x00, 0x00, 0x00, 0x75, 0x74, 0x75, 0x74, 0x75, 0x00, 0x00, 0x74, 0x75,
+ 0x74, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x74, 0x74, 0x75, 0x00, 0x75,
+ 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x00, 0x74, 0x75, 0x00, 0x74,
+ 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x00, 0x00, 0x00, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x00, 0x75, 0x74, 0x75, 0x77, 0x74, 0x74, 0x00, 0x74, 0x75, 0x00,
+ 0x75, 0x00, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x00, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x74, 0x74, 0x74, 0x00,
+ 0x74, 0x74, 0x77, 0x75, 0x74, 0x00, 0x74, 0x75, 0x75, 0x74, 0x00, 0x75,
+ 0x74, 0x75, 0x00, 0x74, 0x75, 0x00, 0x74, 0x00, 0x76, 0x76, 0x76, 0x7A,
+ 0x79, 0x74, 0x74, 0x74, 0x74, 0x00, 0x74, 0x79, 0x75, 0x74, 0x00, 0x75,
+ 0x74, 0x74, 0x74, 0x75, 0x00, 0x00, 0x75, 0x74, 0x74, 0x00, 0x00, 0x74,
+ 0x00, 0x75, 0x74, 0x74, 0x75, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74, 0x00,
+ 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00, 0x74,
+ 0x00, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x00, 0x00, 0x75, 0x74, 0x74, 0x00, 0x75, 0x74, 0x00, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x00, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74,
+ 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74,
+ 0x74, 0x75, 0x74, 0x00, 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x00, 0x75, 0x74, 0x74, 0x75, 0x77, 0x74,
+ 0x75, 0x74, 0x00, 0x00, 0x75, 0x74, 0x75, 0x74, 0x00, 0x00, 0x00, 0x74,
+ 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x75, 0x74, 0x77, 0x74, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x00, 0x00, 0x75, 0x74, 0x00,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x76, 0x78, 0x76, 0x78, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x74, 0x74, 0x75, 0x79, 0x74, 0x74, 0x75, 0x74,
+ 0x75, 0x00, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x00, 0x75, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x00, 0x74, 0x75, 0x74, 0x75, 0x00, 0x74, 0x75, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x00,
+ 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x77, 0x74, 0x75, 0x74,
+ 0x00, 0x74, 0x00, 0x75, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x00, 0x75, 0x74, 0x00, 0x00, 0x75, 0x74, 0x77, 0x74, 0x75,
+ 0x75, 0x00, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x74, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 0x74, 0x74, 0x74,
+ 0x00, 0x00, 0x75, 0x74, 0x74, 0x00, 0x74, 0x74, 0x00, 0x75, 0x74, 0x75,
+ 0x00, 0x74, 0x74, 0x77, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75, 0x77, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x77, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x00, 0x75, 0x74, 0x74, 0x75, 0x00, 0x75, 0x74,
+ 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x76, 0x78, 0x76, 0x78, 0x76, 0x76,
+ 0x76, 0x78, 0x76, 0x76, 0x76, 0x00, 0x00, 0x74, 0x74, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74, 0x74, 0x00, 0x75,
+ 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x00, 0x75, 0x74, 0x75, 0x74, 0x75, 0x00, 0x74,
+ 0x75, 0x74, 0x00, 0x75, 0x74, 0x00, 0x74, 0x75, 0x00, 0x75, 0x74, 0x00,
+ 0x75, 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75, 0x75,
+ 0x74, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x77, 0x75, 0x74, 0x77,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x00, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x00, 0x75, 0x00, 0x74, 0x75, 0x74, 0x77, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x74, 0x79, 0x78, 0x76, 0x78, 0x76, 0x78, 0x76,
+ 0x78, 0x76, 0x76, 0x76, 0x76, 0x76, 0x74, 0x00, 0x00, 0x00, 0x74, 0x74,
+ 0x00, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x77, 0x74,
+ 0x75, 0x75, 0x74, 0x77, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75,
+ 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x00, 0x75, 0x74, 0x74, 0x77, 0x74,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x74, 0x00, 0x75,
+ 0x00, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x74, 0x77, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x74,
+ 0x75, 0x74, 0x75, 0x00, 0x75, 0x74, 0x00, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x77, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x00, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x00, 0x74, 0x79, 0x76, 0x76, 0x78, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x78, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x74, 0x00, 0x74, 0x00,
+ 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x00, 0x75, 0x74, 0x75, 0x74,
+ 0x00, 0x75, 0x74, 0x77, 0x74, 0x74, 0x75, 0x74, 0x77, 0x74, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x77, 0x74, 0x74, 0x74,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x00, 0x74, 0x74, 0x74, 0x75, 0x75, 0x77, 0x74, 0x75, 0x74, 0x74,
+ 0x74, 0x74, 0x74, 0x77, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x74,
+ 0x77, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x74, 0x00, 0x75, 0x00, 0x75,
+ 0x74, 0x77, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x00, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x00, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x77,
+ 0x74, 0x74, 0x74, 0x77, 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x76, 0x76, 0x78, 0x76, 0x76, 0x76,
+ 0x78, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x00, 0x76, 0x00, 0x00,
+ 0x00, 0x00, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x77, 0x74, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x74, 0x77, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75,
+ 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x77, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x74, 0x74, 0x75, 0x00, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x00, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75,
+ 0x75, 0x00, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x00, 0x76, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x77, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x78,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x00, 0x76, 0x79, 0x00, 0x74,
+ 0x00, 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x74, 0x74,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x74,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74,
+ 0x77, 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x00, 0x74, 0x74, 0x76, 0x78, 0x78,
+ 0x78, 0x78, 0x76, 0x79, 0x76, 0x00, 0x00, 0x74, 0x75, 0x75, 0x74, 0x74,
+ 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x76, 0x75, 0x76, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x00, 0x76, 0x00, 0x76, 0x00, 0x00,
+ 0x74, 0x00, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x00, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74,
+ 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x77, 0x74, 0x74, 0x00, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75,
+ 0x74, 0x00, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x76, 0x78, 0x78, 0x78,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x79, 0x74, 0x00, 0x74, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x74, 0x75, 0x74, 0x74, 0x79, 0x76, 0x76, 0x75, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x00, 0x76, 0x76, 0x00, 0x76, 0x00, 0x00, 0x74,
+ 0x00, 0x74, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x77, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x74, 0x00, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x00, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x77, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x76, 0x78, 0x78, 0x78, 0x76,
+ 0x78, 0x76, 0x76, 0x76, 0x76, 0x76, 0x74, 0x79, 0x00, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x74, 0x79, 0x79, 0x76, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x79, 0x76, 0x79, 0x76, 0x74, 0x74, 0x00, 0x00, 0x00, 0x74, 0x00,
+ 0x74, 0x74, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x74, 0x74, 0x77, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x74, 0x75, 0x00, 0x74, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x76, 0x76, 0x78, 0x76, 0x78,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x74, 0x00, 0x74, 0x00, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x75, 0x74, 0x00, 0x74, 0x79, 0x79, 0x74, 0x79, 0x74,
+ 0x79, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x00, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x77, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74,
+ 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x76, 0x78, 0x76, 0x78, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x74, 0x79, 0x74, 0x00, 0x00, 0x74, 0x75,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x00, 0x74, 0x00, 0x79, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x79, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x76, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x74, 0x79, 0x74, 0x00, 0x00, 0x00, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x74, 0x00, 0x00, 0x74, 0x00,
+ 0x00, 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x74, 0x4D, 0x75, 0x75, 0x79, 0x75, 0x74, 0x79, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x79, 0x79, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x79, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x76, 0x74, 0x74, 0x74, 0x79, 0x00, 0x79, 0x00, 0x74, 0x74, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x74, 0x77, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x79, 0x74, 0x74, 0x74, 0x74, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x75, 0x74, 0x75, 0x74,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x78, 0x76, 0x76, 0x74, 0x4D,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x79, 0x74, 0x79, 0x74,
+ 0x79, 0x74, 0x79, 0x00, 0x79, 0x00, 0x00, 0x00, 0x74, 0x75, 0x74, 0x75,
+ 0x74, 0x74, 0x74, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x74, 0x75, 0x74, 0x75,
+ 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x74, 0x75,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x01, 0x78, 0x76, 0x76, 0x79, 0x79, 0x75,
+ 0x79, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x74, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x01, 0x76, 0x78, 0x76, 0x76, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75,
+ 0x74, 0x00, 0x74, 0x74, 0x75, 0x74, 0x75, 0x74, 0x76, 0x74, 0x77, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x01, 0x78, 0x78, 0x78, 0x76, 0x76, 0x79, 0x79,
+ 0x79, 0x79, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x78,
+ 0x75, 0x75, 0x75, 0x78, 0x76, 0x78, 0x78, 0x78, 0x76, 0x76, 0x76, 0x74,
+ 0x79, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x74, 0x78, 0x75, 0x74, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75,
+ 0x75, 0x75, 0x74, 0x75, 0x4D, 0x74, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x00, 0x75, 0x75, 0x78, 0x75, 0x74, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x75, 0x4D, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x74, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x78, 0x75,
+ 0x4D, 0x75, 0x75, 0x75, 0x78, 0x78, 0x78, 0x76, 0x76, 0x76, 0x74, 0x79,
+ 0x4D, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x4D, 0x75,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x74, 0x75, 0x78, 0x75, 0x75, 0x76, 0x76, 0x76, 0x76, 0x76, 0x79, 0x74,
+ 0x79, 0x75, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x4D, 0x75,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x4D, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x76, 0x76, 0x76, 0x76, 0x76, 0x79, 0x00, 0x75, 0x75, 0x4D, 0x75,
+ 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x78, 0x79, 0x76, 0x76, 0x76, 0x76, 0x74, 0x79, 0x74,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x74, 0x75,
+ 0x75, 0x74, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x4D, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x74, 0x75,
+ 0x75, 0x75, 0x75, 0x78, 0x75, 0x79, 0x75, 0x74, 0x74, 0x74, 0x74, 0x74,
+ 0x74, 0x78, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x4D, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x74, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x79,
+ 0x78, 0x78, 0x78, 0x78, 0x78, 0x76, 0x76, 0x79, 0x00, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x79, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x79, 0x79, 0x79, 0x79, 0x74, 0x74, 0x75,
+ 0x74, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x75, 0x78, 0x75, 0x74, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x75, 0x76, 0x75, 0x76, 0x75, 0x79, 0x74, 0x75, 0x74,
+ 0x78, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x76, 0x75, 0x75, 0x74, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x74, 0x75, 0x75, 0x75, 0x78, 0x74, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75,
+ 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78, 0x74, 0x78, 0x75, 0x78, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78,
+ 0x01, 0x78, 0x78, 0x76, 0x76, 0x76, 0x00, 0x76, 0x79, 0x00, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x75, 0x75, 0x76, 0x76, 0x76, 0x76, 0x79, 0x74, 0x76,
+ 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x74, 0x75, 0x75, 0x75, 0x4D, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x78, 0x74, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75,
+ 0x4D, 0x75, 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x74,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x74, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x79, 0x01,
+ 0x78, 0x78, 0x76, 0x76, 0x76, 0x76, 0x76, 0x00, 0x79, 0x00, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x79, 0x76, 0x78, 0x78, 0x76, 0x76, 0x79, 0x74,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x4D, 0x75,
+ 0x78, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x4D,
+ 0x75, 0x78, 0x75, 0x4D, 0x75, 0x4D, 0x75, 0x78, 0x4D, 0x75, 0x75, 0x78,
+ 0x75, 0x78, 0x78, 0x78, 0x74, 0x79, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x75, 0x74, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x78, 0x4D, 0x74, 0x78, 0x78,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x00, 0x79, 0x79, 0x00, 0x75, 0x78,
+ 0x75, 0x4D, 0x75, 0x76, 0x75, 0x76, 0x78, 0x76, 0x76, 0x76, 0x00, 0x74,
+ 0x75, 0x78, 0x74, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x74, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x78, 0x4D, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x4D, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x74, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x78, 0x78, 0x01, 0x78, 0x76, 0x76, 0x74, 0x79, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x4D, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x78, 0x4D, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x76, 0x75, 0x74, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75,
+ 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x79,
+ 0x76, 0x76, 0x76, 0x76, 0x75, 0x79, 0x79, 0x79, 0x00, 0x79, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x76, 0x76, 0x79, 0x79, 0x00, 0x74, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x4D, 0x78, 0x75,
+ 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x74,
+ 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x74, 0x75, 0x75,
+ 0x78, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x78, 0x75, 0x78, 0x75, 0x4D,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75,
+ 0x78, 0x01, 0x01, 0x78, 0x78, 0x76, 0x76, 0x79, 0x79, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75,
+ 0x75, 0x76, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x75, 0x74, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x74, 0x78,
+ 0x75, 0x4D, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x74, 0x75,
+ 0x75, 0x75, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75,
+ 0x79, 0x79, 0x74, 0x79, 0x79, 0x00, 0x00, 0x00, 0x79, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x74, 0x74, 0x74, 0x74, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x76, 0x75, 0x75, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x4D, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x75, 0x75, 0x74, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x4D, 0x75, 0x76, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78,
+ 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x75, 0x78, 0x74, 0x75, 0x4D,
+ 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x78, 0x76, 0x78, 0x76, 0x76, 0x76, 0x74, 0x79, 0x74, 0x75, 0x4D, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x76, 0x75, 0x4D, 0x75, 0x78, 0x74,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x4D, 0x75, 0x78, 0x75, 0x78, 0x75, 0x74, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x4D, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x75, 0x74, 0x00, 0x00, 0x00, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x75, 0x74, 0x75, 0x75, 0x78, 0x4D,
+ 0x75, 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x76, 0x75,
+ 0x78, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 0x75, 0x75, 0x78,
+ 0x74, 0x75, 0x75, 0x78, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x75, 0x78, 0x4D, 0x75, 0x75, 0x78,
+ 0x74, 0x79, 0x79, 0x74, 0x74, 0x74, 0x79, 0x74, 0x75, 0x75, 0x75, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x78, 0x4D, 0x75, 0x75, 0x75, 0x75, 0x76, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x75, 0x75, 0x74, 0x75, 0x78, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75,
+ 0x4D, 0x75, 0x75, 0x78, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x74, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x78, 0x78, 0x4D, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x4D, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x75, 0x79, 0x79, 0x79, 0x7A, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x4D,
+ 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x78, 0x75,
+ 0x76, 0x75, 0x4D, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x75, 0x74, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x76, 0x75, 0x78, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x4D,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76,
+ 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x76, 0x4D, 0x78, 0x75, 0x78,
+ 0x74, 0x78, 0x75, 0x74, 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x4D, 0x78,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x4D, 0x78,
+ 0x75, 0x75, 0x74, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x74, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75,
+ 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x4D, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x4D,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x76, 0x75, 0x75, 0x75, 0x78,
+ 0x74, 0x78, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78,
+ 0x74, 0x75, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x78, 0x76, 0x75, 0x76, 0x76, 0x76, 0x76, 0x76, 0x75,
+ 0x74, 0x74, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x4D, 0x75, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x76, 0x4D,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x75, 0x75, 0x76, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78, 0x78, 0x78, 0x75,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x76, 0x01, 0x01, 0x78, 0x78, 0x78, 0x78,
+ 0x76, 0x75, 0x74, 0x75, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x4D, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x75, 0x4D,
+ 0x75, 0x76, 0x75, 0x76, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x76, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x74, 0x75, 0x75, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x76, 0x75, 0x76,
+ 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x78, 0x01, 0x76, 0x78,
+ 0x76, 0x74, 0x79, 0x76, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x4D, 0x75,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x75, 0x75, 0x4D, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x76, 0x76, 0x01, 0x01, 0x78, 0x78, 0x78, 0x76, 0x76,
+ 0x76, 0x76, 0x76, 0x74, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x75, 0x4D, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x4D, 0x75, 0x75, 0x75, 0x78, 0x4D,
+ 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x75, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x74, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x75, 0x75, 0x76, 0x75, 0x75, 0x78, 0x01, 0x78, 0x78, 0x76,
+ 0x76, 0x76, 0x74, 0x79, 0x75, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x01, 0x78, 0x78, 0x78, 0x76, 0x76, 0x76,
+ 0x76, 0x76, 0x74, 0x79, 0x74, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x75, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x78, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x76, 0x79, 0x74, 0x79, 0x75, 0x4D, 0x75, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x76, 0x78, 0x78, 0x78, 0x76, 0x76, 0x76, 0x76,
+ 0x76, 0x74, 0x79, 0x00, 0x74, 0x75, 0x74, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x79, 0x76, 0x76, 0x76,
+ 0x79, 0x79, 0x79, 0x74, 0x79, 0x75, 0x75, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x79, 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x79,
+ 0x79, 0x00, 0x00, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x76, 0x75, 0x78, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x76, 0x76, 0x75, 0x79, 0x79, 0x79,
+ 0x79, 0x74, 0x74, 0x79, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x76, 0x79, 0x76, 0x79, 0x76, 0x79, 0x79, 0x00,
+ 0x00, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x76, 0x76, 0x76, 0x76, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x75, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x75, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74,
+ 0x74, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76,
+ 0x78, 0x78, 0x76, 0x76, 0x76, 0x75, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x75, 0x78, 0x78, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75,
+ 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x76, 0x75, 0x4D, 0x78, 0x75, 0x78, 0x75,
+ 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x78, 0x4D, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x76, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x76, 0x74, 0x75, 0x75, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x76,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78,
+ 0x75, 0x76, 0x75, 0x76, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+ 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x76,
+ 0x76, 0x76, 0x76, 0x76, 0x00, 0x76, 0x75, 0x75, 0x75, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75, 0x78, 0x75,
+ 0x78, 0x75, 0x78, 0x75, 0x76, 0x75, 0x78, 0x75, 0x78, 0x75, 0x76, 0x75,
+};
+
+const uint8_t sprite0LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0A, 0x00, 0x00, 0x00, 0x09,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00,
+ 0x00, 0x09, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x0B, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x0B, 0x09, 0x0B, 0x09, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08, 0x0B, 0x09, 0x0B,
+ 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08,
+ 0x08, 0x09, 0x0C, 0x09, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x7B, 0x7B, 0x0C, 0x08, 0x09, 0x0C, 0x09, 0x09, 0x09, 0x08, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0C, 0x7B, 0x7B, 0x0C, 0x08, 0x0C, 0x09, 0x09,
+ 0x09, 0x08, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x0C, 0x0C, 0x08,
+ 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x0B, 0x0C,
+ 0x09, 0x08, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x08, 0x08, 0x0C, 0x09,
+ 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x0A, 0x0A, 0x08, 0x08, 0x09,
+ 0x08, 0x08, 0x0C, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x0A, 0x08, 0x08, 0x09, 0x0A, 0x0B, 0x0B, 0x09, 0x09, 0x0B,
+ 0x09, 0x09, 0x08, 0x0B, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x00, 0x0A,
+ 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x08, 0x09, 0x08, 0x08, 0x0A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x08, 0x09,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0A, 0x08,
+ 0x08, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0B, 0x0B, 0x0B, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x08, 0x08,
+ 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0A, 0x08, 0x08,
+ 0x08, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x0B, 0x00, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0B, 0x0B, 0x08,
+ 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x0B, 0x0A, 0x08, 0x08, 0x08,
+ 0x0B, 0x0A, 0x08, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B,
+ 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x0B, 0x0B,
+ 0x09, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x0B, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C,
+ 0x0B, 0x0B, 0x08, 0x08, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x08, 0x0C, 0x0C,
+ 0x0A, 0x08, 0x08, 0x0B, 0x0A, 0x08, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x09, 0x09, 0x0B, 0x0A, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0B,
+ 0x0B, 0x0B, 0x0B, 0x09, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x0B, 0x0B, 0x0C, 0x09, 0x09,
+ 0x0B, 0x0B, 0x0C, 0x0A, 0x08, 0x08, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08,
+ 0x08, 0x0B, 0x0C, 0x0B, 0x08, 0x08, 0x0B, 0x08, 0x09, 0x09, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x09, 0x09, 0x09, 0x0B, 0x0A, 0x08, 0x09, 0x09, 0x0B, 0x09,
+ 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09,
+ 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x0A, 0x0A, 0x0D, 0x0E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09,
+ 0x09, 0x0B, 0x09, 0x09, 0x0B, 0x0C, 0x0C, 0x0B, 0x0B, 0x0B, 0x08, 0x00,
+ 0x00, 0x0D, 0x0D, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x08, 0x0B, 0x0B, 0x0C, 0x0B, 0x09, 0x08, 0x0B, 0x0A, 0x08,
+ 0x08, 0x08, 0x08, 0x00, 0x0D, 0x0E, 0x0E, 0x0F, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x08, 0x08, 0x0B, 0x0A, 0x0B,
+ 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x08, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E,
+ 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x09, 0x0B, 0x09, 0x08, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0D,
+ 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x08, 0x09, 0x09, 0x0B, 0x09, 0x0B, 0x0C, 0x0B, 0x0B,
+ 0x0B, 0x0B, 0x08, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x09, 0x0B, 0x09,
+ 0x08, 0x0B, 0x08, 0x08, 0x08, 0x08, 0x0D, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F,
+ 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x09, 0x0C, 0x0B, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x08, 0x0D, 0x0D,
+ 0x0D, 0x0D, 0x0E, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x08, 0x09, 0x0B, 0x09, 0x09,
+ 0x0B, 0x08, 0x0D, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09,
+ 0x0B, 0x0C, 0x0B, 0x0B, 0x08, 0x0A, 0x00, 0x0F, 0x0D, 0x0E, 0x0F, 0x0F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x08, 0x0B, 0x0A, 0x08, 0x09, 0x00, 0x00, 0x0F,
+ 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x09,
+ 0x09, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x0B, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x0C, 0x0B,
+ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x0B, 0x09, 0x09, 0x0A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09,
+ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0C, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0A, 0x08, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08,
+ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0B, 0x09, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x08, 0x0A, 0x0A, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x09, 0x0C, 0x0B, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x00, 0x00, 0x0A, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x08,
+ 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x09, 0x0A, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x09, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x09,
+ 0x08, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x0C, 0x09, 0x09, 0x09,
+ 0x09, 0x09, 0x09, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x0A, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask0LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xD0, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xBF,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xDF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xEF, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x8C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7E, 0x0F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66,
+ 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x1E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x78, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite0LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x00, 0x00, 0x09, 0x09,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x09, 0x0B, 0x09, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x0B,
+ 0x09, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x09, 0x08, 0x0B, 0x0C, 0x09, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x08, 0x08, 0x09, 0x0C, 0x09, 0x09, 0x09,
+ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7B, 0x7B, 0x0C, 0x08, 0x0C,
+ 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0C, 0x7B,
+ 0x7B, 0x0C, 0x08, 0x0C, 0x09, 0x08, 0x08, 0x08, 0x08, 0x0B, 0x0C, 0x09,
+ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x0B, 0x0C, 0x09, 0x0C, 0x0C, 0x08, 0x09, 0x09, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x09,
+ 0x08, 0x0C, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x08, 0x08,
+ 0x08, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x09, 0x08, 0x08, 0x0C, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x08, 0x08, 0x0A, 0x0A,
+ 0x0A, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x08, 0x09, 0x00, 0x0B, 0x0B,
+ 0x0B, 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x08,
+ 0x08, 0x0A, 0x0A, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0C, 0x0B, 0x0B, 0x08, 0x0B, 0x09, 0x09,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0B, 0x0A, 0x08,
+ 0x08, 0x09, 0x09, 0x09, 0x08, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x09, 0x09, 0x09, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x08, 0x08, 0x08,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0A, 0x08, 0x08, 0x08,
+ 0x0B, 0x09, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x0B, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x0B, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0B, 0x0B, 0x08, 0x08,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0A, 0x08, 0x08, 0x08, 0x0B,
+ 0x0A, 0x08, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B, 0x09,
+ 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x08, 0x0B, 0x09, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x0B, 0x0B, 0x09,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0B,
+ 0x0B, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08, 0x0C, 0x0C, 0x0A,
+ 0x08, 0x08, 0x0B, 0x0A, 0x08, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09,
+ 0x09, 0x0B, 0x0A, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x08, 0x09,
+ 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0B, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x0B,
+ 0x0B, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x0B, 0x0C, 0x09, 0x09, 0x0B,
+ 0x0B, 0x0C, 0x0A, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08,
+ 0x0B, 0x0C, 0x0B, 0x08, 0x08, 0x0B, 0x08, 0x09, 0x09, 0x08, 0x00, 0x00,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x09, 0x09, 0x0B, 0x0A, 0x08, 0x09, 0x09, 0x0B, 0x09, 0x09,
+ 0x09, 0x08, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09,
+ 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09,
+ 0x0B, 0x09, 0x09, 0x0B, 0x0C, 0x0C, 0x0B, 0x0B, 0x0B, 0x08, 0x00, 0x0E,
+ 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x08, 0x0B, 0x0C, 0x0B, 0x09, 0x08, 0x0B, 0x0A, 0x08, 0x08,
+ 0x08, 0x08, 0x0D, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x0B, 0x0A, 0x0B, 0x09,
+ 0x0B, 0x09, 0x09, 0x09, 0x09, 0x08, 0x0D, 0x0E, 0x0E, 0x0F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x0B, 0x09, 0x08, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0D, 0x0F,
+ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x0B, 0x0C, 0x0B, 0x0B, 0x0B,
+ 0x0B, 0x08, 0x0D, 0x0E, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x08,
+ 0x0B, 0x08, 0x08, 0x08, 0x08, 0x0D, 0x0E, 0x0F, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x0C, 0x0B, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x08, 0x0D, 0x0D, 0x0F,
+ 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x09, 0x0B, 0x09, 0x09, 0x0B,
+ 0x08, 0x0D, 0x0E, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B,
+ 0x0C, 0x0B, 0x0B, 0x08, 0x00, 0x00, 0x0F, 0x0D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x0A, 0x08, 0x09, 0x00, 0x00, 0x00, 0x0F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x09, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x0B, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x0C, 0x0B, 0x0B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x0B, 0x0A, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x09, 0x00, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0C,
+ 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x0B, 0x0A, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x09, 0x00, 0x09, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09,
+ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x0C, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0B, 0x0A, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x09, 0x09, 0x00,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0C, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x09, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0C, 0x09, 0x00, 0x00, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0C, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08, 0x08, 0x0B, 0x08,
+ 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask0LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xBF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x83,
+ 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0F, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x07, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xA9, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite0RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x00, 0x00, 0x00,
+ 0x0A, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x08, 0x09, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x09, 0x09, 0x0B, 0x09, 0x0B, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B,
+ 0x09, 0x0B, 0x09, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x09, 0x09, 0x0B, 0x09, 0x0B, 0x08, 0x09, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x09, 0x0C, 0x09, 0x08,
+ 0x08, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x09, 0x09,
+ 0x09, 0x0C, 0x09, 0x08, 0x0C, 0x7B, 0x7B, 0x0C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x0A, 0x0A, 0x08, 0x09, 0x09, 0x09, 0x0C, 0x08, 0x0C, 0x7B, 0x7B, 0x0C,
+ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09,
+ 0x08, 0x0C, 0x0C, 0x09, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x08, 0x09, 0x0C, 0x0B, 0x08, 0x08,
+ 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x09, 0x09, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09,
+ 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x08, 0x08, 0x09, 0x09, 0x09, 0x08,
+ 0x08, 0x08, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x09, 0x0B, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x08, 0x08,
+ 0x09, 0x08, 0x08, 0x0A, 0x0A, 0x0A, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x0A,
+ 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x0B, 0x0B, 0x08, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x0B,
+ 0x0B, 0x0A, 0x09, 0x08, 0x08, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x08, 0x09, 0x08, 0x0B,
+ 0x09, 0x09, 0x09, 0x0B, 0x0A, 0x00, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x08, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B, 0x08, 0x08, 0x0A, 0x0B, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0B, 0x0B, 0x0C, 0x09,
+ 0x09, 0x09, 0x09, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08,
+ 0x08, 0x08, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B, 0x08, 0x08, 0x08, 0x0A, 0x0B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0B, 0x09, 0x09, 0x0B, 0x09,
+ 0x09, 0x09, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08,
+ 0x08, 0x0B, 0x0B, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x08, 0x0A, 0x0B, 0x08, 0x08, 0x08, 0x0A,
+ 0x0B, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x09, 0x09, 0x0B,
+ 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x09,
+ 0x0B, 0x0B, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x0A, 0x08, 0x08, 0x0B, 0x0B, 0x0C, 0x0B, 0x0B, 0x0B,
+ 0x0B, 0x09, 0x0B, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08, 0x0A,
+ 0x0B, 0x08, 0x08, 0x0A, 0x0C, 0x0C, 0x08, 0x08, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0A, 0x0B, 0x09, 0x09,
+ 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x0A, 0x0A, 0x09, 0x0B, 0x0B, 0x0B, 0x0B, 0x09, 0x09, 0x09,
+ 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x08, 0x08, 0x08,
+ 0x0A, 0x0C, 0x0B, 0x0B, 0x09, 0x09, 0x0C, 0x0B, 0x0B, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x09, 0x09, 0x08, 0x0B, 0x08, 0x08, 0x0B, 0x0C, 0x0B, 0x08,
+ 0x08, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09,
+ 0x08, 0x0A, 0x0B, 0x09, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0D, 0x0A, 0x0A, 0x0B, 0x09, 0x09,
+ 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0D, 0x0D, 0x00,
+ 0x00, 0x08, 0x0B, 0x0B, 0x0B, 0x0C, 0x0C, 0x0B, 0x09, 0x09, 0x0B, 0x09,
+ 0x09, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0F, 0x0E, 0x0E, 0x0D, 0x00, 0x08, 0x08, 0x08, 0x08, 0x0A, 0x0B, 0x08,
+ 0x09, 0x0B, 0x0C, 0x0B, 0x0B, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x08, 0x09, 0x09,
+ 0x09, 0x09, 0x0B, 0x09, 0x0B, 0x0A, 0x0B, 0x08, 0x08, 0x09, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x0E, 0x0E, 0x0E,
+ 0x0D, 0x0C, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x08, 0x09, 0x0B, 0x09,
+ 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x08, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C, 0x0B,
+ 0x09, 0x0B, 0x09, 0x09, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, 0x0D, 0x08, 0x08,
+ 0x08, 0x08, 0x0B, 0x08, 0x09, 0x0B, 0x09, 0x09, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0E, 0x0E, 0x0D, 0x0D,
+ 0x0D, 0x0D, 0x08, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x0B, 0x0C, 0x09, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0D, 0x08, 0x0B, 0x09, 0x09, 0x0B, 0x09,
+ 0x08, 0x09, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x0E, 0x0D, 0x0F, 0x00, 0x0A, 0x08,
+ 0x0B, 0x0B, 0x0C, 0x0B, 0x09, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x0F,
+ 0x0F, 0x00, 0x00, 0x09, 0x08, 0x0A, 0x0B, 0x08, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x0F, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x0B, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x09, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B, 0x09, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0C, 0x08, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0A, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x09, 0x09, 0x0B, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0B, 0x0C, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x08, 0x0A, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A,
+ 0x0A, 0x0B, 0x0C, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x0A,
+ 0x0A, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x0A, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x09,
+ 0x0C, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x08, 0x08, 0x09, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x00, 0x08, 0x09, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x0C, 0x09, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x09, 0x09, 0x09,
+ 0x09, 0x09, 0x09, 0x0C, 0x09, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0A, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask0RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0xFD, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xFB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF7, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFB, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xF0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xF0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x4E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x9E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite0RB[] = {
+ 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x09,
+ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x09, 0x0B, 0x09, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B, 0x09,
+ 0x0B, 0x09, 0x0B, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x09, 0x09, 0x0C, 0x0B, 0x08, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x0C, 0x09, 0x08, 0x08, 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,
+ 0x00, 0x00, 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, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09,
+ 0x0C, 0x08, 0x0C, 0x7B, 0x7B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x09, 0x0C, 0x0B, 0x08,
+ 0x08, 0x08, 0x08, 0x09, 0x0C, 0x08, 0x0C, 0x7B, 0x7B, 0x0C, 0x09, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x08, 0x09,
+ 0x09, 0x0B, 0x09, 0x09, 0x08, 0x08, 0x08, 0x09, 0x09, 0x08, 0x0C, 0x0C,
+ 0x09, 0x0C, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08,
+ 0x08, 0x08, 0x08, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x08,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x0B, 0x09, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09,
+ 0x09, 0x09, 0x0C, 0x08, 0x08, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x08, 0x0B, 0x08,
+ 0x0B, 0x09, 0x09, 0x0B, 0x0B, 0x0B, 0x00, 0x09, 0x08, 0x09, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x0A, 0x0A, 0x0A, 0x08, 0x08, 0x09, 0x09, 0x0B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x09, 0x0B, 0x08, 0x0B, 0x0B, 0x0C, 0x0B, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x0A, 0x08,
+ 0x08, 0x0B, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x08, 0x09, 0x09, 0x09, 0x08, 0x08, 0x0A, 0x0B, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C,
+ 0x09, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x08, 0x08, 0x08, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x09, 0x0B, 0x08, 0x08, 0x08, 0x0A,
+ 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0B, 0x09, 0x09, 0x09, 0x0B,
+ 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x08, 0x08, 0x0B, 0x0B, 0x0C, 0x0B, 0x0B, 0x0B, 0x0B, 0x09, 0x0B, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x08, 0x0A, 0x0B, 0x08, 0x08, 0x08,
+ 0x0A, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x09, 0x0B, 0x08, 0x08, 0x09, 0x09,
+ 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x09, 0x0B, 0x0B, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09,
+ 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x0B, 0x0B, 0x0C, 0x0B, 0x0B,
+ 0x0B, 0x0B, 0x09, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08,
+ 0x0A, 0x0B, 0x08, 0x08, 0x0A, 0x0C, 0x0C, 0x08, 0x09, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B,
+ 0x09, 0x08, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x0A, 0x0B, 0x09,
+ 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0B, 0x0B, 0x0B, 0x09, 0x09,
+ 0x09, 0x09, 0x0B, 0x09, 0x09, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08,
+ 0x08, 0x0A, 0x0C, 0x0B, 0x0B, 0x09, 0x09, 0x0C, 0x0B, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x00, 0x00, 0x08, 0x09, 0x09, 0x08, 0x0B, 0x08, 0x08, 0x0B, 0x0C, 0x0B,
+ 0x08, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x08, 0x09, 0x09, 0x09, 0x0B, 0x09,
+ 0x09, 0x08, 0x0A, 0x0B, 0x09, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x09, 0x09, 0x0B, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x09, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0E, 0x00, 0x08, 0x0B, 0x0B, 0x0B, 0x0C, 0x0C, 0x0B, 0x09, 0x09, 0x0B,
+ 0x09, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0F, 0x0D, 0x08, 0x08, 0x08, 0x08, 0x0A, 0x0B,
+ 0x08, 0x09, 0x0B, 0x0C, 0x0B, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0E, 0x0E, 0x0D, 0x08, 0x09,
+ 0x09, 0x09, 0x09, 0x0B, 0x09, 0x0B, 0x0A, 0x0B, 0x08, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F,
+ 0x0F, 0x0D, 0x0C, 0x09, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x08, 0x09, 0x0B,
+ 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x0E, 0x0E, 0x0D, 0x08, 0x0B, 0x0B, 0x0B, 0x0B, 0x0C,
+ 0x0B, 0x09, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x0E, 0x0D, 0x08,
+ 0x08, 0x08, 0x08, 0x0B, 0x08, 0x09, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x0F, 0x0D, 0x0D, 0x08, 0x09, 0x09, 0x09, 0x0B, 0x09, 0x0B, 0x0C, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x0E, 0x0E, 0x0D, 0x08, 0x0B, 0x09, 0x09, 0x0B,
+ 0x09, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x00, 0x00,
+ 0x08, 0x0B, 0x0B, 0x0C, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x00, 0x00, 0x00, 0x09, 0x08, 0x0A, 0x0B, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B,
+ 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x09, 0x09, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x09, 0x09, 0x0B, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0C,
+ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x08, 0x0A, 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x09, 0x09, 0x0B, 0x09, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x09,
+ 0x0B, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x0B, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x0A, 0x0B, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x09,
+ 0x09, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x09, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0B, 0x0C, 0x09,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0A, 0x0B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x09, 0x09, 0x0B, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0C,
+ 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x09, 0x0B, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x09, 0x0C, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0C, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x08, 0x08, 0x08, 0x0B, 0x08, 0x08,
+ 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x0A,
+ 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask0RB[] = {
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1C, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFF,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x23, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0xFD, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0,
+ 0xC1, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x0E, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xF0, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7C,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x17, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0xE0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite1LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x11, 0x14, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x11, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x11, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x13, 0x13, 0x13, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x11, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x10, 0x10, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x11, 0x14,
+ 0x14, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x10, 0x10, 0x14, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11,
+ 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13,
+ 0x10, 0x14, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x10, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x10, 0x10,
+ 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x14, 0x14, 0x13,
+ 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x10, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11,
+ 0x14, 0x14, 0x10, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10, 0x11, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x14, 0x14, 0x10, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13,
+ 0x13, 0x10, 0x14, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x14, 0x10, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x14,
+ 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x14, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x10, 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x13, 0x10, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x14, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x14, 0x10, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10,
+ 0x10, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x14, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x14, 0x13, 0x10, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x15, 0x15, 0x16, 0x16,
+ 0x16, 0x16, 0x15, 0x11, 0x12, 0x12, 0x12, 0x12, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x13, 0x13,
+ 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x15,
+ 0x15, 0x15, 0x15, 0x11, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12, 0x12, 0x12,
+ 0x15, 0x12, 0x12, 0x12, 0x12, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x10, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x14, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x15, 0x16, 0x16, 0x16, 0x12, 0x15, 0x12, 0x12, 0x12, 0x15,
+ 0x12, 0x12, 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12,
+ 0x16, 0x16, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x14, 0x11, 0x11, 0x16, 0x16, 0x16, 0x16, 0x17, 0x12, 0x17, 0x11,
+ 0x12, 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12,
+ 0x12, 0x12, 0x11, 0x12, 0x17, 0x12, 0x15, 0x16, 0x16, 0x16, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x13, 0x10, 0x13,
+ 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x16, 0x16, 0x16, 0x15, 0x15, 0x17,
+ 0x12, 0x17, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x14, 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x17, 0x15, 0x17,
+ 0x17, 0x16, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x13, 0x13,
+ 0x13, 0x13, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x14, 0x10, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x11, 0x16, 0x16, 0x17,
+ 0x17, 0x15, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x17, 0x12, 0x11, 0x12, 0x17, 0x17, 0x17, 0x16, 0x16, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x13, 0x13, 0x13, 0x13, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x14, 0x13, 0x10, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x16, 0x17, 0x17, 0x17, 0x15, 0x12, 0x17, 0x12, 0x17, 0x14, 0x17,
+ 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x14, 0x12, 0x17, 0x17, 0x17, 0x11, 0x17,
+ 0x16, 0x16, 0x11, 0x11, 0x11, 0x14, 0x13, 0x13, 0x13, 0x13, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x13, 0x10,
+ 0x14, 0x14, 0x14, 0x11, 0x11, 0x15, 0x15, 0x17, 0x15, 0x17, 0x17, 0x12,
+ 0x17, 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x12, 0x12, 0x14, 0x12, 0x12, 0x14, 0x17, 0x12, 0x17, 0x14, 0x17, 0x12,
+ 0x17, 0x17, 0x11, 0x17, 0x10, 0x16, 0x11, 0x11, 0x11, 0x14, 0x13, 0x13,
+ 0x13, 0x10, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x14, 0x10, 0x13, 0x14, 0x15, 0x15, 0x15, 0x15, 0x10, 0x10, 0x17,
+ 0x14, 0x17, 0x17, 0x17, 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x12, 0x17,
+ 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x17, 0x14, 0x12, 0x17,
+ 0x12, 0x14, 0x12, 0x17, 0x17, 0x11, 0x17, 0x17, 0x11, 0x16, 0x16, 0x11,
+ 0x11, 0x14, 0x13, 0x13, 0x13, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x13, 0x10, 0x14, 0x14, 0x11, 0x11,
+ 0x10, 0x10, 0x10, 0x17, 0x14, 0x17, 0x17, 0x17, 0x17, 0x12, 0x14, 0x12,
+ 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x12, 0x14, 0x17, 0x12,
+ 0x17, 0x12, 0x14, 0x12, 0x17, 0x14, 0x17, 0x17, 0x17, 0x14, 0x17, 0x10,
+ 0x11, 0x10, 0x16, 0x16, 0x11, 0x14, 0x13, 0x13, 0x10, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x11, 0x10, 0x10, 0x10, 0x17, 0x14, 0x17, 0x17, 0x17,
+ 0x12, 0x17, 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x14, 0x17, 0x12, 0x14, 0x17, 0x17,
+ 0x17, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10, 0x16, 0x11, 0x14, 0x13, 0x10,
+ 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x10, 0x17,
+ 0x17, 0x14, 0x17, 0x17, 0x17, 0x17, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12,
+ 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x17,
+ 0x17, 0x14, 0x17, 0x17, 0x17, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10, 0x11,
+ 0x14, 0x14, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x14, 0x14, 0x11, 0x11,
+ 0x10, 0x10, 0x11, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17,
+ 0x12, 0x17, 0x17, 0x17, 0x14, 0x17, 0x17, 0x10, 0x14, 0x10, 0x10, 0x10,
+ 0x14, 0x10, 0x10, 0x11, 0x14, 0x13, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x14, 0x14, 0x14, 0x11, 0x14, 0x10, 0x10, 0x11, 0x10, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x14, 0x14, 0x11, 0x11, 0x14, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x14, 0x11, 0x11, 0x14, 0x11, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x14,
+ 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14,
+ 0x11, 0x11, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x14, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x14, 0x10, 0x10,
+ 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x11, 0x14, 0x13, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10,
+ 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11,
+ 0x13, 0x13, 0x13, 0x13, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x00, 0x13, 0x13, 0x13, 0x11, 0x13,
+ 0x13, 0x13, 0x11, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11,
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask1LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x23, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x20, 0xDF, 0xFF, 0xF1, 0x04, 0x04, 0x00, 0x00, 0x21, 0x02, 0x22,
+ 0x11, 0x02, 0x02, 0x00, 0x00, 0x11, 0x02, 0x22, 0x11, 0x02, 0x02, 0x00,
+ 0x00, 0x11, 0x04, 0x22, 0x11, 0x00, 0x01, 0x00, 0x00, 0x21, 0x04, 0x22,
+ 0x11, 0x02, 0x00, 0x80, 0x00, 0x01, 0x04, 0x22, 0x11, 0x02, 0x00, 0x80,
+ 0x00, 0x01, 0x04, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite1LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x11, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x10, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x13, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x10, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14,
+ 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x11, 0x11, 0x14, 0x14, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x14,
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x13, 0x13, 0x10, 0x14, 0x14, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10, 0x14,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x14, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x14, 0x14, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10, 0x14, 0x14, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x11, 0x14, 0x14, 0x10, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13,
+ 0x10, 0x10, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x14, 0x10, 0x10, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x10, 0x14, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x13, 0x14, 0x13,
+ 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10,
+ 0x10, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11,
+ 0x14, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x14, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x14, 0x13, 0x10, 0x13, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x14, 0x11, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x10, 0x13, 0x14, 0x13,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x14, 0x11, 0x11, 0x00, 0x11, 0x11, 0x14, 0x10,
+ 0x13, 0x13, 0x13, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x11, 0x00,
+ 0x11, 0x11, 0x14, 0x13, 0x10, 0x13, 0x14, 0x13, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x15, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x10, 0x10, 0x11, 0x00, 0x11, 0x11, 0x14, 0x10, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x15, 0x12, 0x12, 0x12, 0x12, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x11, 0x12, 0x11, 0x11, 0x14, 0x13,
+ 0x13, 0x13, 0x14, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11,
+ 0x11, 0x15, 0x16, 0x16, 0x16, 0x12, 0x15, 0x12, 0x12, 0x12, 0x15, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12,
+ 0x16, 0x16, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x12,
+ 0x11, 0x11, 0x14, 0x10, 0x13, 0x13, 0x13, 0x14, 0x14, 0x13, 0x14, 0x14,
+ 0x14, 0x11, 0x11, 0x16, 0x16, 0x16, 0x16, 0x17, 0x12, 0x17, 0x11, 0x12,
+ 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12,
+ 0x12, 0x12, 0x11, 0x12, 0x17, 0x12, 0x15, 0x16, 0x16, 0x16, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x10, 0x14, 0x12, 0x11, 0x11, 0x14, 0x13, 0x10, 0x13, 0x14, 0x13,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x16, 0x16, 0x16, 0x15, 0x15, 0x17, 0x12,
+ 0x17, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x14, 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x17, 0x15, 0x17,
+ 0x17, 0x16, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x14, 0x12, 0x11, 0x14, 0x10, 0x10,
+ 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x11, 0x16, 0x16, 0x17, 0x17, 0x15,
+ 0x17, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x17, 0x12, 0x11, 0x12, 0x12, 0x17, 0x17, 0x17, 0x16, 0x16, 0x11, 0x11,
+ 0x11, 0x11, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x12,
+ 0x11, 0x14, 0x13, 0x13, 0x10, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x16,
+ 0x17, 0x17, 0x17, 0x15, 0x12, 0x12, 0x17, 0x12, 0x17, 0x14, 0x17, 0x12,
+ 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x14, 0x12, 0x17, 0x17, 0x17, 0x17, 0x11,
+ 0x17, 0x16, 0x16, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x14, 0x12, 0x11, 0x14, 0x10, 0x10, 0x13, 0x10, 0x14, 0x14,
+ 0x14, 0x11, 0x11, 0x15, 0x15, 0x17, 0x15, 0x17, 0x17, 0x17, 0x12, 0x17,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x14, 0x12, 0x12, 0x14, 0x17, 0x12, 0x17, 0x14, 0x17, 0x12,
+ 0x12, 0x17, 0x17, 0x11, 0x17, 0x10, 0x16, 0x11, 0x11, 0x11, 0x11, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x10, 0x11, 0x00, 0x11, 0x11, 0x14, 0x14,
+ 0x10, 0x13, 0x14, 0x15, 0x15, 0x15, 0x15, 0x10, 0x10, 0x17, 0x14, 0x17,
+ 0x17, 0x17, 0x17, 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12,
+ 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x17, 0x14, 0x12, 0x17,
+ 0x12, 0x14, 0x12, 0x17, 0x17, 0x17, 0x11, 0x17, 0x17, 0x11, 0x16, 0x16,
+ 0x11, 0x11, 0x11, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x14, 0x11, 0x00,
+ 0x11, 0x11, 0x14, 0x14, 0x13, 0x10, 0x14, 0x14, 0x11, 0x11, 0x10, 0x10,
+ 0x10, 0x17, 0x14, 0x17, 0x17, 0x17, 0x17, 0x17, 0x12, 0x14, 0x12, 0x17,
+ 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x14, 0x12, 0x12, 0x14, 0x17, 0x12,
+ 0x17, 0x12, 0x14, 0x12, 0x17, 0x14, 0x17, 0x17, 0x17, 0x17, 0x14, 0x17,
+ 0x10, 0x11, 0x10, 0x16, 0x16, 0x11, 0x11, 0x14, 0x14, 0x13, 0x13, 0x13,
+ 0x10, 0x11, 0x00, 0x00, 0x00, 0x11, 0x14, 0x14, 0x14, 0x13, 0x14, 0x14,
+ 0x14, 0x11, 0x10, 0x10, 0x10, 0x17, 0x14, 0x17, 0x17, 0x17, 0x17, 0x12,
+ 0x17, 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x12, 0x17,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x14, 0x17, 0x12, 0x14, 0x17, 0x17,
+ 0x17, 0x17, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10, 0x16, 0x11, 0x14, 0x14,
+ 0x14, 0x13, 0x13, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x10, 0x17, 0x17, 0x14,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17,
+ 0x12, 0x17, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x17,
+ 0x17, 0x14, 0x17, 0x17, 0x17, 0x17, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x11, 0x14, 0x14, 0x14, 0x13, 0x10, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x14, 0x14, 0x11, 0x11, 0x10, 0x10,
+ 0x11, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17,
+ 0x12, 0x17, 0x17, 0x17, 0x14, 0x17, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x10, 0x14, 0x10, 0x10, 0x11, 0x14, 0x14, 0x13, 0x10, 0x14, 0x14, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x14, 0x14,
+ 0x11, 0x14, 0x14, 0x10, 0x10, 0x11, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x14, 0x14, 0x11, 0x11, 0x14, 0x14,
+ 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x14, 0x11, 0x11, 0x14, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11,
+ 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x13, 0x13, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10,
+ 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10,
+ 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x10, 0x10,
+ 0x10, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x11, 0x11, 0x10,
+ 0x10, 0x10, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x14,
+ 0x00, 0x13, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13,
+ 0x13, 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11, 0x10, 0x00, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask1LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 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, 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, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x8F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x88, 0x00, 0x00, 0x87, 0x7F, 0xFF, 0xF9, 0x02, 0x04, 0x00,
+ 0x00, 0x84, 0x04, 0x42, 0x11, 0x01, 0x04, 0x00, 0x00, 0x84, 0x08, 0x42,
+ 0x11, 0x01, 0x04, 0x00, 0x01, 0x82, 0x08, 0x42, 0x10, 0x80, 0x04, 0x00,
+ 0x01, 0x02, 0x04, 0x42, 0x10, 0x82, 0x02, 0x00, 0x00, 0x02, 0x04, 0x42,
+ 0x10, 0x80, 0x00, 0x00, 0x00, 0x02, 0x04, 0x40, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 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,
+};
+
+const uint8_t sprite1RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x13, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x14, 0x11, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13,
+ 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x14, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x10, 0x10,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x14, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x14,
+ 0x10, 0x10, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x14, 0x14, 0x11, 0x11, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x14, 0x14, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x10, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x14, 0x10, 0x10, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x10,
+ 0x10, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x13, 0x14, 0x13, 0x13, 0x14, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x10, 0x14, 0x14,
+ 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x11, 0x14, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x10, 0x14, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x10, 0x13,
+ 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x10, 0x14, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14,
+ 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13,
+ 0x14, 0x13, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x14, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x14, 0x10, 0x10, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x10, 0x13, 0x14, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x10,
+ 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x10, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x15, 0x15, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
+ 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x12, 0x12, 0x12, 0x12,
+ 0x11, 0x15, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x11, 0x11, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x10, 0x13, 0x14,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x12, 0x12, 0x12, 0x12, 0x15,
+ 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12, 0x12, 0x11, 0x15, 0x15, 0x15,
+ 0x15, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x13, 0x13, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x16, 0x16, 0x12, 0x15, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12, 0x12,
+ 0x15, 0x12, 0x16, 0x16, 0x16, 0x15, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x14, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x16, 0x15, 0x12, 0x17,
+ 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x11, 0x12, 0x12, 0x12, 0x11, 0x17, 0x12, 0x17, 0x16, 0x16, 0x16, 0x16,
+ 0x11, 0x11, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x14,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x13, 0x13,
+ 0x13, 0x13, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x16, 0x17,
+ 0x17, 0x15, 0x17, 0x12, 0x12, 0x12, 0x11, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x17, 0x12,
+ 0x17, 0x15, 0x15, 0x16, 0x16, 0x16, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14,
+ 0x13, 0x10, 0x13, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x13, 0x13, 0x13, 0x13, 0x14, 0x11, 0x11, 0x11, 0x11, 0x16,
+ 0x16, 0x17, 0x17, 0x17, 0x12, 0x11, 0x12, 0x17, 0x12, 0x12, 0x14, 0x12,
+ 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x15, 0x17, 0x17, 0x16, 0x16, 0x11,
+ 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x13, 0x13, 0x13, 0x13, 0x14, 0x11,
+ 0x11, 0x11, 0x16, 0x16, 0x17, 0x11, 0x17, 0x17, 0x17, 0x12, 0x14, 0x12,
+ 0x17, 0x12, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14,
+ 0x12, 0x12, 0x12, 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x12, 0x15, 0x17,
+ 0x17, 0x17, 0x16, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x10, 0x13, 0x14,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x10, 0x13,
+ 0x13, 0x13, 0x14, 0x11, 0x11, 0x11, 0x16, 0x10, 0x17, 0x11, 0x17, 0x17,
+ 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x12, 0x12, 0x14, 0x12, 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x17,
+ 0x12, 0x17, 0x17, 0x15, 0x17, 0x15, 0x15, 0x11, 0x11, 0x14, 0x14, 0x14,
+ 0x10, 0x13, 0x10, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x14, 0x13, 0x13, 0x13, 0x14, 0x11, 0x11, 0x16, 0x16, 0x11,
+ 0x17, 0x17, 0x11, 0x17, 0x17, 0x12, 0x14, 0x12, 0x17, 0x12, 0x14, 0x17,
+ 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x12,
+ 0x17, 0x14, 0x17, 0x12, 0x17, 0x17, 0x17, 0x14, 0x17, 0x10, 0x10, 0x15,
+ 0x15, 0x15, 0x15, 0x14, 0x13, 0x10, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x10, 0x13, 0x13, 0x14, 0x11,
+ 0x16, 0x16, 0x10, 0x11, 0x10, 0x17, 0x14, 0x17, 0x17, 0x17, 0x14, 0x17,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x14, 0x12, 0x12, 0x14, 0x12, 0x17,
+ 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x17, 0x17, 0x17, 0x17, 0x14,
+ 0x17, 0x10, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x10, 0x13, 0x14, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14,
+ 0x10, 0x13, 0x14, 0x11, 0x16, 0x10, 0x10, 0x14, 0x10, 0x10, 0x14, 0x17,
+ 0x17, 0x17, 0x14, 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12,
+ 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x17, 0x12,
+ 0x17, 0x17, 0x17, 0x14, 0x17, 0x10, 0x10, 0x10, 0x11, 0x14, 0x14, 0x14,
+ 0x13, 0x14, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x14, 0x14, 0x11, 0x10, 0x10, 0x14,
+ 0x10, 0x10, 0x14, 0x17, 0x17, 0x17, 0x14, 0x17, 0x17, 0x17, 0x12, 0x17,
+ 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17,
+ 0x12, 0x17, 0x17, 0x17, 0x17, 0x17, 0x14, 0x17, 0x17, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x13, 0x14,
+ 0x11, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x14, 0x10, 0x17, 0x17, 0x14,
+ 0x17, 0x17, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12,
+ 0x17, 0x12, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x10, 0x11, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x14, 0x11, 0x11, 0x14, 0x14, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x10, 0x11, 0x10, 0x10, 0x14, 0x11, 0x14, 0x14, 0x14,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x14, 0x11, 0x11, 0x11,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x11, 0x14, 0x11,
+ 0x11, 0x14, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x14, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x10,
+ 0x10, 0x14, 0x11, 0x11, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x14, 0x14, 0x11, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10,
+ 0x10, 0x10, 0x14, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13, 0x13,
+ 0x13, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10,
+ 0x10, 0x11, 0x10, 0x10, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x00, 0x00, 0x00, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13,
+ 0x13, 0x11, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13, 0x13, 0x00, 0x14, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask1RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xC4, 0x00,
+ 0x00, 0x20, 0x20, 0x8F, 0xFF, 0xFB, 0x04, 0x00, 0x00, 0x40, 0x40, 0x88,
+ 0x44, 0x40, 0x84, 0x00, 0x00, 0x40, 0x40, 0x88, 0x44, 0x40, 0x88, 0x00,
+ 0x00, 0x80, 0x00, 0x88, 0x44, 0x20, 0x88, 0x00, 0x01, 0x00, 0x40, 0x88,
+ 0x44, 0x20, 0x84, 0x00, 0x01, 0x00, 0x40, 0x88, 0x44, 0x20, 0x80, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x04, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite1RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x10, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x11, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x10, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x13, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x13, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x10, 0x10,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x11, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x10,
+ 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14,
+ 0x14, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14,
+ 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x11, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x11, 0x14, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x13, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x14,
+ 0x14, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x14, 0x14, 0x10, 0x13, 0x13, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x10, 0x13,
+ 0x13, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x14, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x14,
+ 0x10, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x14, 0x14, 0x10, 0x10, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14,
+ 0x14, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x14, 0x14,
+ 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x14,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x10, 0x14, 0x14, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x14, 0x10, 0x10, 0x10, 0x10, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x14, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x10, 0x10,
+ 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13,
+ 0x13, 0x14, 0x13, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x14, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x10, 0x14, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x14, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x13, 0x10, 0x13,
+ 0x14, 0x11, 0x11, 0x00, 0x00, 0x11, 0x11, 0x14, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x13, 0x14, 0x13, 0x10, 0x14, 0x11, 0x11, 0x10, 0x00, 0x11, 0x10, 0x10,
+ 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x14, 0x13, 0x13, 0x13, 0x10, 0x14, 0x11, 0x11,
+ 0x00, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
+ 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x15, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x13, 0x14, 0x13, 0x10,
+ 0x13, 0x14, 0x11, 0x11, 0x12, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x12, 0x12, 0x12, 0x12, 0x15,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12, 0x12, 0x11, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x10, 0x14, 0x11, 0x11, 0x12, 0x10, 0x10, 0x10,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x16, 0x16, 0x12, 0x15, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12,
+ 0x12, 0x15, 0x12, 0x16, 0x16, 0x16, 0x15, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x14, 0x13, 0x13, 0x13, 0x14, 0x11, 0x11,
+ 0x12, 0x14, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x16, 0x15, 0x12, 0x17,
+ 0x12, 0x11, 0x12, 0x12, 0x12, 0x12, 0x15, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x12, 0x12, 0x12, 0x11, 0x17, 0x12, 0x17, 0x16, 0x16, 0x16,
+ 0x16, 0x11, 0x11, 0x14, 0x14, 0x14, 0x13, 0x14, 0x14, 0x13, 0x13, 0x13,
+ 0x10, 0x14, 0x11, 0x11, 0x12, 0x14, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16, 0x16, 0x17,
+ 0x17, 0x15, 0x17, 0x12, 0x12, 0x12, 0x11, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x17,
+ 0x12, 0x17, 0x15, 0x15, 0x16, 0x16, 0x16, 0x14, 0x14, 0x14, 0x14, 0x13,
+ 0x13, 0x14, 0x13, 0x10, 0x13, 0x14, 0x11, 0x11, 0x12, 0x14, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x16, 0x16,
+ 0x17, 0x17, 0x17, 0x12, 0x12, 0x11, 0x12, 0x17, 0x12, 0x12, 0x14, 0x12,
+ 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x17, 0x15, 0x17, 0x17, 0x16,
+ 0x16, 0x11, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x10, 0x10, 0x14, 0x11,
+ 0x12, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x11, 0x11, 0x11,
+ 0x11, 0x16, 0x16, 0x17, 0x11, 0x17, 0x17, 0x17, 0x17, 0x12, 0x14, 0x12,
+ 0x17, 0x12, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x14, 0x12, 0x12, 0x12, 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x12, 0x12,
+ 0x15, 0x17, 0x17, 0x17, 0x16, 0x11, 0x14, 0x14, 0x14, 0x14, 0x13, 0x10,
+ 0x13, 0x13, 0x14, 0x11, 0x00, 0x11, 0x10, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x11, 0x11, 0x11, 0x11, 0x16, 0x10, 0x17, 0x11, 0x17, 0x17, 0x12,
+ 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x14, 0x12, 0x12, 0x14, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x14, 0x12, 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12,
+ 0x17, 0x12, 0x17, 0x17, 0x17, 0x15, 0x17, 0x15, 0x15, 0x11, 0x11, 0x14,
+ 0x14, 0x14, 0x10, 0x13, 0x10, 0x10, 0x14, 0x11, 0x00, 0x11, 0x14, 0x13,
+ 0x13, 0x13, 0x13, 0x14, 0x14, 0x11, 0x11, 0x11, 0x16, 0x16, 0x11, 0x17,
+ 0x17, 0x11, 0x17, 0x17, 0x17, 0x12, 0x14, 0x12, 0x17, 0x12, 0x14, 0x17,
+ 0x12, 0x14, 0x12, 0x12, 0x12, 0x12, 0x12, 0x14, 0x12, 0x17, 0x12, 0x17,
+ 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x17, 0x17, 0x17, 0x14, 0x17, 0x10,
+ 0x10, 0x15, 0x15, 0x15, 0x15, 0x14, 0x13, 0x10, 0x14, 0x14, 0x11, 0x11,
+ 0x00, 0x00, 0x11, 0x10, 0x13, 0x13, 0x13, 0x14, 0x14, 0x11, 0x11, 0x16,
+ 0x16, 0x10, 0x11, 0x10, 0x17, 0x14, 0x17, 0x17, 0x17, 0x17, 0x14, 0x17,
+ 0x12, 0x14, 0x12, 0x17, 0x12, 0x17, 0x14, 0x12, 0x12, 0x14, 0x14, 0x12,
+ 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x14, 0x17, 0x10, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x10, 0x13,
+ 0x14, 0x14, 0x11, 0x11, 0x00, 0x00, 0x11, 0x14, 0x10, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x11, 0x16, 0x10, 0x10, 0x14, 0x10, 0x10, 0x14, 0x17, 0x17,
+ 0x17, 0x17, 0x14, 0x12, 0x17, 0x14, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12,
+ 0x17, 0x12, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x14, 0x12, 0x17,
+ 0x12, 0x17, 0x17, 0x17, 0x17, 0x14, 0x17, 0x10, 0x10, 0x10, 0x11, 0x14,
+ 0x14, 0x14, 0x13, 0x14, 0x14, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x14, 0x10, 0x10, 0x13, 0x14, 0x14, 0x14, 0x11, 0x10, 0x10, 0x14, 0x10,
+ 0x10, 0x14, 0x17, 0x17, 0x17, 0x17, 0x14, 0x17, 0x17, 0x17, 0x12, 0x17,
+ 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12,
+ 0x17, 0x12, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x14, 0x17, 0x17, 0x10,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x14, 0x10, 0x13, 0x14, 0x14, 0x11,
+ 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x17, 0x17, 0x14,
+ 0x17, 0x17, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x17, 0x12, 0x12, 0x17,
+ 0x12, 0x17, 0x12, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x10, 0x11, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x14, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x11, 0x11, 0x14, 0x14, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x11, 0x10, 0x10, 0x14, 0x14, 0x11,
+ 0x14, 0x14, 0x14, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x11, 0x11, 0x11, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x14,
+ 0x14, 0x11, 0x11, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x11, 0x10, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x14, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x11, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11, 0x10, 0x10,
+ 0x10, 0x11, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x11, 0x10,
+ 0x10, 0x10, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x10,
+ 0x11, 0x13, 0x13, 0x13, 0x13, 0x11, 0x11, 0x13, 0x13, 0x13, 0x11, 0x13,
+ 0x13, 0x13, 0x11, 0x13, 0x13, 0x13, 0x13, 0x00, 0x14, 0x14, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+ 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask1RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 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, 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, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x11, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF1, 0x00, 0x00, 0x20, 0x40, 0x9F, 0xFF, 0xFE, 0xE1, 0x00,
+ 0x00, 0x20, 0x80, 0x88, 0x42, 0x20, 0x21, 0x00, 0x00, 0x20, 0x80, 0x88,
+ 0x42, 0x10, 0x21, 0x00, 0x00, 0x20, 0x01, 0x08, 0x42, 0x10, 0x41, 0x80,
+ 0x00, 0x40, 0x41, 0x08, 0x42, 0x20, 0x40, 0x80, 0x00, 0x00, 0x01, 0x08,
+ 0x42, 0x20, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x20, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite2LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0x18, 0x18, 0x19, 0x18, 0x1A, 0x19, 0x00, 0x18, 0x19, 0x00, 0x18,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x19, 0x18, 0x18, 0x1B, 0x19, 0x18, 0x1B, 0x19, 0x18,
+ 0x1A, 0x19, 0x18, 0x1A, 0x19, 0x18, 0x19, 0x18, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x19, 0x18, 0x1A, 0x1B, 0x18,
+ 0x18, 0x1B, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x1B, 0x18, 0x1B, 0x18,
+ 0x19, 0x18, 0x19, 0x19, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x00, 0x18, 0x1A, 0x1B,
+ 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1B,
+ 0x18, 0x1A, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A,
+ 0x19, 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1A, 0x1B, 0x18, 0x1B, 0x18, 0x1A, 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x18,
+ 0x1B, 0x18, 0x19, 0x18, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x1A, 0x19, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x18,
+ 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A,
+ 0x1A, 0x18, 0x1A, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x18,
+ 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A,
+ 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A,
+ 0x1B, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x1A,
+ 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A,
+ 0x1A, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x18, 0x18, 0x1B, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18,
+ 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x18, 0x1A,
+ 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x18, 0x1B, 0x18,
+ 0x1B, 0x18, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C,
+ 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A,
+ 0x1C, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x18, 0x1A, 0x1A, 0x1C, 0x18, 0x1A,
+ 0x18, 0x18, 0x1A, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x1A, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x18,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18,
+ 0x1A, 0x1C, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x18, 0x1A, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x1C, 0x1C,
+ 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x1A, 0x1C, 0x1A, 0x18, 0x1A,
+ 0x18, 0x1A, 0x1A, 0x1B, 0x18, 0x1A, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x1A, 0x18, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x1C, 0x1C,
+ 0x1C, 0x1A, 0x1C, 0x1A, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x19,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x1A, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18, 0x1C, 0x1A, 0x1C, 0x1A, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18,
+ 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1B, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18, 0x1C, 0x1C, 0x1A, 0x1A, 0x18, 0x1B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x1C, 0x1C, 0x1A,
+ 0x1C, 0x18, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x18, 0x1C, 0x1C, 0x1A, 0x1A, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x18, 0x1C, 0x18, 0x1C, 0x1B, 0x1B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x1B, 0x19, 0x1B,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x18, 0x1C,
+ 0x1C, 0x1A, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
+ 0x11, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x18, 0x1C, 0x1C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x00, 0x00, 0x10, 0x14, 0x11, 0x11,
+ 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x10, 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x18, 0x1D, 0x1D, 0x1D, 0x10, 0x11, 0x11, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x1D, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1D, 0x1D, 0x1D, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x1D, 0x1D, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1D, 0x1D, 0x11, 0x11,
+ 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x1D, 0x1D, 0x01, 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x1D, 0x7B, 0x7B, 0x7B, 0x01, 0x10, 0x10, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x1A, 0x0A, 0x10, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7B, 0x01, 0x7B, 0x7B,
+ 0x1D, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x0A, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x1D, 0x7B, 0x7B, 0x7B, 0x1D, 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x10, 0x10, 0x1D, 0x1D, 0x1D, 0x10, 0x14, 0x14, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1A, 0x18, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x14, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x01, 0x01, 0x01, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x14, 0x14, 0x11, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x19, 0x01, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x1C, 0x1B, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x18,
+ 0x1C, 0x1C, 0x18, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1C, 0x18, 0x18, 0x1A,
+ 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x1A, 0x1A, 0x19, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1C, 0x18,
+ 0x18, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x18,
+ 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x19, 0x1B, 0x1B, 0x1B,
+ 0x1C, 0x18, 0x18, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x1C,
+ 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1C, 0x18, 0x18, 0x18, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A,
+ 0x1A, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x1B, 0x19, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x19, 0x19,
+ 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x18, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x18, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x14, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x18, 0x18, 0x18, 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x18,
+ 0x1C, 0x1C, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x18, 0x1A, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x1D, 0x1D, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x1A, 0x18, 0x18, 0x18, 0x1B,
+ 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18,
+ 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x1C, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x18, 0x18,
+ 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1A, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1A,
+ 0x1A, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1A, 0x1A, 0x1C, 0x1C, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x18,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A,
+ 0x1A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1A, 0x1A,
+ 0x18, 0x1A, 0x1C, 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1A, 0x1A, 0x1A, 0x18,
+ 0x18, 0x1A, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x19, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x1C, 0x1C, 0x1A, 0x1A, 0x1A,
+ 0x1C, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1A, 0x1B, 0x1B, 0x1B, 0x19, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1A, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1A, 0x1A, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1B, 0x1B, 0x1B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x1B, 0x1B, 0x19, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask2LA[] = {
+ 0x00, 0x00, 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, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xED,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF2, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x03, 0x7F, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x1F, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x1F, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x01, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0xF8,
+ 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x01, 0xFF, 0xF8, 0x00,
+ 0x00, 0x00, 0x00, 0x1E, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F,
+ 0x00, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03, 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,
+};
+
+const uint8_t sprite2LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B,
+ 0x18, 0x18, 0x19, 0x18, 0x1A, 0x19, 0x1B, 0x18, 0x19, 0x00, 0x18, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x19, 0x18, 0x18, 0x1B, 0x19, 0x18, 0x1B, 0x19, 0x18, 0x1A,
+ 0x19, 0x18, 0x1A, 0x19, 0x19, 0x18, 0x19, 0x18, 0x1B, 0x1B, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x19, 0x18, 0x1A, 0x1B, 0x18, 0x18,
+ 0x1B, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x1B, 0x1B, 0x18, 0x1B, 0x18,
+ 0x19, 0x18, 0x19, 0x19, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x18, 0x1A, 0x1B, 0x18,
+ 0x1A, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1B, 0x18,
+ 0x18, 0x1A, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x18, 0x19, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x19,
+ 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A,
+ 0x1B, 0x18, 0x1B, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x18,
+ 0x1B, 0x18, 0x19, 0x18, 0x19, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x1A, 0x19, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x18, 0x1A,
+ 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A,
+ 0x1A, 0x18, 0x1A, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1A, 0x18, 0x18,
+ 0x1A, 0x1C, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A, 0x1B,
+ 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A,
+ 0x1A, 0x18, 0x18, 0x1A, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1C, 0x18, 0x18, 0x1B, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x1A,
+ 0x1C, 0x18, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x1C, 0x1C, 0x1A, 0x18, 0x1A,
+ 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x18, 0x1B, 0x18,
+ 0x1B, 0x18, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C, 0x18,
+ 0x1A, 0x1C, 0x18, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A,
+ 0x1C, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x18, 0x1A, 0x1A, 0x1C, 0x18, 0x1A,
+ 0x18, 0x18, 0x1A, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x19, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A,
+ 0x18, 0x1A, 0x1C, 0x18, 0x18, 0x1A, 0x1C, 0x18, 0x1A, 0x1C, 0x18, 0x18,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18,
+ 0x1A, 0x1C, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x1C, 0x1C,
+ 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x1A, 0x1C, 0x1A, 0x18, 0x1A,
+ 0x18, 0x1A, 0x1A, 0x1B, 0x18, 0x1A, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x18, 0x1A, 0x18, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x1C, 0x1C,
+ 0x1C, 0x1A, 0x1C, 0x1A, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x19,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
+ 0x18, 0x1A, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18, 0x1C, 0x1A, 0x1C, 0x1A, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18,
+ 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1B, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18, 0x1C, 0x1C, 0x1A, 0x1A, 0x18, 0x1B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x1C, 0x1C, 0x1A,
+ 0x1C, 0x18, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x18, 0x1C, 0x1C, 0x1A, 0x1A, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x18, 0x1C, 0x18, 0x1C, 0x1B, 0x1B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x1B, 0x19, 0x1B,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x18, 0x1C,
+ 0x1C, 0x1A, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14,
+ 0x11, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x18, 0x1C, 0x1C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x1A, 0x00,
+ 0x00, 0x00, 0x10, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x00, 0x00, 0x10, 0x14, 0x11, 0x10,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x10, 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x11, 0x11,
+ 0x11, 0x11, 0x10, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x18, 0x1D, 0x1D, 0x1D, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x1D, 0x10, 0x10, 0x10,
+ 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1D, 0x1D, 0x1D, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x1D, 0x1D, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x01, 0x01, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1D, 0x1D, 0x11, 0x11,
+ 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x1D, 0x1D, 0x01, 0x10, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01,
+ 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x1D, 0x7B, 0x7B, 0x7B, 0x01, 0x10, 0x10, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x01, 0x01, 0x19, 0x19, 0x1B, 0x1B, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x1A, 0x0A, 0x10, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7B, 0x01, 0x7B, 0x7B,
+ 0x1D, 0x10, 0x10, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x01, 0x01, 0x19, 0x19, 0x19, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x0A, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x1D, 0x7B, 0x7B, 0x7B, 0x1D, 0x10, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x01, 0x19, 0x19, 0x19, 0x19,
+ 0x18, 0x18, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x10, 0x10, 0x1D, 0x1D, 0x1D, 0x10, 0x14, 0x14, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x19, 0x19,
+ 0x19, 0x19, 0x1B, 0x1C, 0x18, 0x18, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1A, 0x18, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x14, 0x14, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x01, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1C, 0x18, 0x18, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x14, 0x14, 0x11, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1C, 0x18, 0x18,
+ 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x1C, 0x1B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x1C, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x18,
+ 0x1C, 0x1C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x10, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x1B, 0x18, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x1A, 0x1A, 0x19, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x18, 0x18, 0x1A, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x18,
+ 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x18, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x1C,
+ 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x14, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1A,
+ 0x18, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A,
+ 0x1A, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x19, 0x19,
+ 0x19, 0x19, 0x1C, 0x1C, 0x1C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x18, 0x1A, 0x1A, 0x18, 0x18,
+ 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1A, 0x1A, 0x1B, 0x18, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x18,
+ 0x1C, 0x1C, 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x19, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x1D, 0x1D, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x18,
+ 0x18, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1A, 0x1A, 0x18,
+ 0x18, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x1C, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1A, 0x18, 0x18,
+ 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x19, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1A, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x1A, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1A, 0x1A,
+ 0x18, 0x1A, 0x1C, 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1C, 0x18, 0x1A, 0x1A,
+ 0x1A, 0x18, 0x1A, 0x1B, 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1A, 0x1C, 0x1C, 0x1A, 0x1A, 0x1A,
+ 0x1B, 0x1B, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1B, 0x19,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1C, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1B, 0x19, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1B,
+ 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x1C, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask2LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFA,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x02, 0xFF, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x3E, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3E,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x1E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0E,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x03, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7C,
+ 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x01, 0xFF, 0xF0, 0x00,
+ 0x00, 0x00, 0x00, 0x0F, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0xC0, 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,
+};
+
+const uint8_t sprite2RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x18, 0x00, 0x19, 0x18, 0x00, 0x19, 0x1A, 0x18, 0x19, 0x18, 0x18, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x18, 0x19, 0x18, 0x19, 0x1A, 0x18, 0x19, 0x1A, 0x18, 0x19, 0x1B, 0x18,
+ 0x19, 0x1B, 0x18, 0x18, 0x19, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x19, 0x19, 0x18, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18, 0x1B, 0x1A,
+ 0x18, 0x18, 0x1B, 0x18, 0x18, 0x1B, 0x1A, 0x18, 0x19, 0x1A, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18,
+ 0x1B, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x1A, 0x18,
+ 0x1B, 0x1A, 0x18, 0x00, 0x1A, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x19, 0x18, 0x19, 0x18, 0x1B, 0x18, 0x1A, 0x18, 0x1B,
+ 0x1A, 0x18, 0x1A, 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18, 0x1A, 0x18, 0x1A,
+ 0x18, 0x18, 0x1A, 0x18, 0x1B, 0x1A, 0x18, 0x19, 0x1A, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B,
+ 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x19,
+ 0x1A, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B, 0x18, 0x1B,
+ 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1C, 0x1A, 0x18,
+ 0x18, 0x1A, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B,
+ 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1C, 0x1A,
+ 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1A, 0x1A, 0x18, 0x18, 0x1A,
+ 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x1C,
+ 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1B,
+ 0x18, 0x18, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1A, 0x18, 0x18,
+ 0x1A, 0x18, 0x1C, 0x1A, 0x1A, 0x18, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x1C,
+ 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18,
+ 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B, 0x18, 0x1A, 0x18, 0x1A,
+ 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1C, 0x1A,
+ 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1A, 0x18,
+ 0x1B, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C, 0x1A, 0x18, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x18, 0x1C, 0x1C, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x1A,
+ 0x18, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x19, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1A, 0x1C, 0x1A, 0x1C,
+ 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x18, 0x1A, 0x18, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x1C,
+ 0x1A, 0x1C, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1A, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1A, 0x1C, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1B, 0x18, 0x1A, 0x1A, 0x1C, 0x1C, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x18, 0x1C, 0x1A, 0x1C, 0x1C, 0x18,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A, 0x1A,
+ 0x1C, 0x1C, 0x18, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1B, 0x1B, 0x1C, 0x18, 0x1C, 0x18, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A, 0x1C, 0x1C, 0x18, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x11,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1C, 0x1C,
+ 0x18, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x11,
+ 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x10, 0x11, 0x11, 0x14, 0x10, 0x00, 0x00, 0x18, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x11, 0x14, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11,
+ 0x11, 0x10, 0x1D, 0x1D, 0x1D, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1D, 0x18, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x1D, 0x1D, 0x1D,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x1D, 0x1D, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x11, 0x11, 0x11, 0x1D, 0x1D, 0x1A, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11,
+ 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10, 0x10, 0x01, 0x1D, 0x1D, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x11, 0x11, 0x10, 0x0A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10, 0x01,
+ 0x7B, 0x7B, 0x7B, 0x1D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x0A, 0x1A, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x11, 0x10, 0x10, 0x1D, 0x7B, 0x7B, 0x01, 0x7B, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x1D, 0x7B, 0x7B, 0x7B, 0x1D,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x18, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19,
+ 0x19, 0x19, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x14, 0x10,
+ 0x1D, 0x1D, 0x1D, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1C, 0x18,
+ 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x01, 0x01,
+ 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x11, 0x14, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x1B, 0x1C, 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x01, 0x19, 0x01, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x11, 0x14, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x1C, 0x1C, 0x18, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x18, 0x18, 0x1C, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x19, 0x1A, 0x1A, 0x1C,
+ 0x18, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x1B, 0x1B, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19,
+ 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x18,
+ 0x18, 0x1C, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x1C, 0x1B, 0x1B, 0x1B, 0x19,
+ 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1B, 0x18, 0x18, 0x18, 0x1C,
+ 0x1C, 0x1C, 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x18, 0x18,
+ 0x18, 0x1C, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B,
+ 0x1B, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x18,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x18, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1B, 0x1B,
+ 0x19, 0x19, 0x1B, 0x1B, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x19, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x18,
+ 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x18, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1C, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x18, 0x18, 0x18, 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1D, 0x1D, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x18,
+ 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1C, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1A,
+ 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x1A, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1A, 0x1A,
+ 0x1A, 0x18, 0x1C, 0x1C, 0x1A, 0x1A, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1A, 0x1A, 0x1A,
+ 0x1B, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1A, 0x1A,
+ 0x1A, 0x1C, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x19, 0x1B, 0x1B, 0x1B, 0x1A, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1C,
+ 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1A, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x19, 0x1B, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1B, 0x1B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1A, 0x1A,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x19, 0x1B, 0x1B, 0x1A, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1B, 0x1B, 0x1B, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x19, 0x1B, 0x1B, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask2RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0xB7, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0xFE, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x40, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xF8, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x7F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xF8, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0xC0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x80, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
+ 0x1F, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0x80, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0xFE, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 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,
+};
+
+const uint8_t sprite2RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0x18, 0x00, 0x19, 0x18, 0x1B, 0x19, 0x1A, 0x18, 0x19, 0x18, 0x18,
+ 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B, 0x1B,
+ 0x18, 0x19, 0x18, 0x19, 0x19, 0x1A, 0x18, 0x19, 0x1A, 0x18, 0x19, 0x1B,
+ 0x18, 0x19, 0x1B, 0x18, 0x18, 0x19, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x19, 0x19, 0x18, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x1B, 0x1A, 0x18, 0x1B,
+ 0x1A, 0x18, 0x18, 0x1B, 0x18, 0x18, 0x1B, 0x1A, 0x18, 0x19, 0x1A, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x19, 0x18, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18,
+ 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x1A,
+ 0x18, 0x1B, 0x1A, 0x18, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x19, 0x18, 0x19, 0x18, 0x1B, 0x18, 0x1A, 0x18, 0x1B,
+ 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1B, 0x1A, 0x18, 0x19, 0x1A, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B,
+ 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A,
+ 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18,
+ 0x19, 0x1A, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B, 0x18, 0x1B,
+ 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18,
+ 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1C, 0x1A,
+ 0x18, 0x18, 0x1A, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B,
+ 0x18, 0x1B, 0x18, 0x1B, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x18, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1C,
+ 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1B, 0x1A, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1A, 0x1A, 0x18, 0x18, 0x1A,
+ 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C, 0x1C, 0x1A, 0x1C, 0x1A,
+ 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1A, 0x18,
+ 0x1B, 0x18, 0x18, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x19, 0x18, 0x1B, 0x18, 0x1B, 0x18, 0x1A, 0x18, 0x18,
+ 0x1A, 0x18, 0x1C, 0x1A, 0x1A, 0x18, 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x1C,
+ 0x1A, 0x1C, 0x1A, 0x1C, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x18, 0x1C, 0x1A,
+ 0x18, 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B, 0x18, 0x1A, 0x18, 0x1A,
+ 0x18, 0x18, 0x1A, 0x18, 0x1A, 0x18, 0x1C, 0x1A, 0x18, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1C, 0x1A,
+ 0x18, 0x1C, 0x1A, 0x18, 0x18, 0x1C, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1A, 0x18,
+ 0x1B, 0x1A, 0x1A, 0x18, 0x1A, 0x18, 0x1A, 0x1C, 0x1A, 0x18, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x18, 0x1C, 0x1C, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x1A,
+ 0x18, 0x18, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x19, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1A, 0x1C, 0x1A, 0x1C,
+ 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x18, 0x1A, 0x18, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x18, 0x1A, 0x18, 0x1A, 0x1A, 0x1C,
+ 0x1A, 0x1C, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x1A, 0x18, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1B, 0x1A, 0x18,
+ 0x1A, 0x18, 0x1A, 0x1C, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1C, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1B, 0x18, 0x1A, 0x1A, 0x1C, 0x1C, 0x18, 0x1C, 0x18, 0x18, 0x1B, 0x1B,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x18, 0x1C, 0x1A, 0x1C, 0x1C, 0x18,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A, 0x1A,
+ 0x1C, 0x1C, 0x18, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1B, 0x1B, 0x1C, 0x18, 0x1C, 0x18, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1A, 0x1C, 0x1C, 0x18, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19, 0x1B, 0x11,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1C, 0x1C,
+ 0x18, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x11, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x1A, 0x1C, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x19,
+ 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10,
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1B, 0x19, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x10, 0x10, 0x11, 0x14, 0x10, 0x00, 0x00, 0x18, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x11, 0x14, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x1D, 0x1D, 0x1D, 0x18, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x1D, 0x18, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x1D, 0x1D, 0x1D,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x1D, 0x1D, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x11, 0x11, 0x11, 0x1D, 0x1D, 0x1A, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x01, 0x01, 0x01, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x11, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11,
+ 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x19,
+ 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10, 0x10, 0x01, 0x1D, 0x1D, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x11, 0x11, 0x10, 0x0A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1A, 0x1B, 0x1B, 0x19, 0x19, 0x01, 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x10, 0x10, 0x01,
+ 0x7B, 0x7B, 0x7B, 0x1D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00, 0x0A, 0x1A, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x19, 0x19, 0x19, 0x01,
+ 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x11, 0x10, 0x10, 0x1D, 0x7B, 0x7B, 0x01, 0x7B, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x18, 0x18,
+ 0x19, 0x19, 0x19, 0x19, 0x01, 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x10, 0x1D, 0x7B, 0x7B, 0x7B, 0x1D,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x18, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x18, 0x18, 0x1C, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x01, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14, 0x14, 0x10,
+ 0x1D, 0x1D, 0x1D, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1C, 0x18,
+ 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x18, 0x18, 0x1C, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x11, 0x14, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1C, 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A,
+ 0x18, 0x18, 0x1C, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x11, 0x14, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1C, 0x1C, 0x18, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x01, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1A, 0x1A, 0x1C,
+ 0x18, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x18,
+ 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19,
+ 0x18, 0x18, 0x1C, 0x1C, 0x1C, 0x18, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1A, 0x18, 0x18, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19,
+ 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x19, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x1C, 0x18, 0x1A, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x18, 0x1B, 0x1B,
+ 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x18, 0x1A, 0x18, 0x18, 0x1C,
+ 0x1C, 0x1C, 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B,
+ 0x1B, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x14,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1B, 0x1B,
+ 0x18, 0x18, 0x1A, 0x1A, 0x18, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x19, 0x19,
+ 0x19, 0x19, 0x1B, 0x1B, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x18, 0x1B, 0x1A, 0x1A, 0x1C, 0x1C, 0x1C, 0x1C, 0x18,
+ 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x18,
+ 0x1A, 0x1A, 0x1C, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x18,
+ 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1D, 0x1D, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x1A, 0x1A, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1A, 0x1A, 0x18, 0x18, 0x1A,
+ 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x18, 0x1A, 0x1C, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1C, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x1A, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x19, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1A, 0x18,
+ 0x18, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x18, 0x1A, 0x1A, 0x1A, 0x18, 0x1C, 0x1C, 0x1C, 0x1A, 0x1A,
+ 0x1A, 0x1C, 0x1A, 0x18, 0x1A, 0x1A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1A, 0x1A, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x18, 0x18, 0x1B, 0x1B,
+ 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1A, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1B, 0x1A, 0x1A,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x18, 0x18, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x19, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1C, 0x1B, 0x1B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x1C,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x1C, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x1B,
+ 0x1B, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask2RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x5F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xE0, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x7C, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x7F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x78, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x70, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xC0, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0,
+ 0x3E, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x78, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xFE, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03,
+ 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,
+};
+
+const uint8_t sprite3LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x1E, 0x1E, 0x1B, 0x1E, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x1F, 0x1F, 0x1F, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10,
+ 0x00, 0x1A, 0x10, 0x10, 0x1A, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x20, 0x1F, 0x20, 0x1F, 0x20, 0x1F, 0x20, 0x20, 0x1F, 0x1F, 0x1F,
+ 0x1F, 0x1A, 0x10, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x0C, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x10, 0x00, 0x1B, 0x7B, 0x1A, 0x7B, 0x10, 0x10, 0x10, 0x10,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1A, 0x10, 0x1B,
+ 0x1B, 0x1B, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x00, 0x00, 0x1B, 0x1E, 0x10, 0x10,
+ 0x1F, 0x11, 0x21, 0x10, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x20,
+ 0x1F, 0x1F, 0x1F, 0x1F, 0x1E, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x1A,
+ 0x1A, 0x10, 0x01, 0x1B, 0x1A, 0x1A, 0x1A, 0x10, 0x1E, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x20, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x1F, 0x1F, 0x1E, 0x1B, 0x0C,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x11, 0x00, 0x1A, 0x7B, 0x22, 0x1E, 0x23, 0x1A, 0x11, 0x1A, 0x11, 0x1A,
+ 0x11, 0x1E, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x20,
+ 0x1F, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x7B, 0x20,
+ 0x1F, 0x1F, 0x1A, 0x1B, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x1A, 0x1E, 0x1A, 0x7B, 0x22, 0x1E, 0x23, 0x1A, 0x23,
+ 0x1A, 0x11, 0x1A, 0x24, 0x1A, 0x11, 0x1A, 0x19, 0x1A, 0x10, 0x1A, 0x1B,
+ 0x1E, 0x10, 0x1E, 0x1A, 0x10, 0x10, 0x10, 0x1F, 0x20, 0x7B, 0x20, 0x7B,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x1F, 0x1A, 0x1B, 0x0C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x1E, 0x1A, 0x22, 0x1E,
+ 0x23, 0x1A, 0x1E, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x11, 0x1B,
+ 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E,
+ 0x10, 0x20, 0x20, 0x20, 0x7B, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F,
+ 0x1A, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7B, 0x1E,
+ 0x1A, 0x22, 0x1E, 0x23, 0x1A, 0x23, 0x1B, 0x11, 0x1B, 0x23, 0x1B, 0x11,
+ 0x1B, 0x19, 0x1A, 0x11, 0x1A, 0x19, 0x1A, 0x10, 0x1A, 0x1B, 0x1E, 0x10,
+ 0x1E, 0x1A, 0x1E, 0x10, 0x1E, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x1E, 0x1A, 0x22, 0x1E, 0x23, 0x1A, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x11, 0x1B, 0x10, 0x1B,
+ 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x10,
+ 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x7B, 0x20, 0x7B, 0x20, 0x1E, 0x1B, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1A, 0x10, 0x11, 0x1E, 0x1A, 0x23,
+ 0x1B, 0x1E, 0x1B, 0x23, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19,
+ 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x10, 0x1E, 0x1B, 0x1E, 0x10, 0x1E, 0x1A,
+ 0x1E, 0x10, 0x1E, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20,
+ 0x20, 0x20, 0x1A, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1A, 0x10, 0x12,
+ 0x11, 0x1A, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x11, 0x1B, 0x10, 0x1A, 0x10, 0x1A,
+ 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x11, 0x10, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x11, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x20, 0x10, 0x1E, 0x23, 0x1B, 0x1E, 0x1B, 0x23, 0x1B, 0x1E,
+ 0x1B, 0x23, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11,
+ 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x1E, 0x10,
+ 0x11, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x1B, 0x0C,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x7B, 0x10, 0x1E, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A,
+ 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x11, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x1F, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x20, 0x10,
+ 0x1E, 0x24, 0x1B, 0x23, 0x1B, 0x24, 0x1B, 0x23, 0x1B, 0x24, 0x1B, 0x19,
+ 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x11, 0x1A, 0x1B,
+ 0x1A, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1F, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1F, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x12, 0x7B, 0x10, 0x1E, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x11, 0x1A, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E,
+ 0x10, 0x11, 0x10, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x1B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x7B, 0x20, 0x10, 0x1E, 0x19, 0x1B, 0x24,
+ 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E,
+ 0x1B, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1A, 0x11, 0x1A, 0x19, 0x1A, 0x10,
+ 0x1A, 0x1B, 0x1E, 0x10, 0x1A, 0x10, 0x11, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x1F, 0x1A, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x7B, 0x7B, 0x10,
+ 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1A, 0x1E, 0x1B, 0x11, 0x1A,
+ 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1F,
+ 0x20, 0x7B, 0x20, 0x1F, 0x1F, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x1A, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x20, 0x7B, 0x20, 0x10, 0x1E, 0x1B, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19,
+ 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19,
+ 0x1B, 0x11, 0x1B, 0x19, 0x1A, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1E, 0x1A,
+ 0x1E, 0x10, 0x11, 0x20, 0x7B, 0x20, 0x1F, 0x1F, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1A, 0x0C, 0x0C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x12, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x1B, 0x1B, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x10, 0x1A,
+ 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x20, 0x1F, 0x1F, 0x20, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x0C, 0x1A, 0x1B, 0x0C, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x7B, 0x7B, 0x20, 0x10,
+ 0x1E, 0x1B, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24,
+ 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11,
+ 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x10, 0x1F,
+ 0x1F, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x0C, 0x1A, 0x1A,
+ 0x19, 0x1B, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1E,
+ 0x10, 0x1E, 0x10, 0x1F, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x19, 0x1A, 0x1A, 0x1B, 0x1B, 0x19, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x20, 0x22, 0x22, 0x20, 0x10, 0x1E, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19,
+ 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1A, 0x1B,
+ 0x1A, 0x10, 0x1B, 0x1A, 0x1E, 0x10, 0x11, 0x1F, 0x20, 0x20, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x19, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x1A, 0x12, 0x22, 0x20, 0x7B, 0x22, 0x11,
+ 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B,
+ 0x11, 0x1A, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x20,
+ 0x1F, 0x10, 0x10, 0x10, 0x20, 0x20, 0x19, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x19, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x1A, 0x11, 0x22, 0x20,
+ 0x7B, 0x20, 0x7B, 0x22, 0x11, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24,
+ 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x1B, 0x1A, 0x11, 0x1A, 0x1B, 0x1A, 0x10,
+ 0x1E, 0x1A, 0x11, 0x1F, 0x20, 0x1F, 0x7B, 0x1F, 0x1F, 0x10, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x1A, 0x00, 0x00, 0x00, 0x11,
+ 0x1A, 0x11, 0x20, 0x7B, 0x1E, 0x24, 0x20, 0x7B, 0x22, 0x1E, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B,
+ 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x10, 0x20, 0x7B, 0x20, 0x7B,
+ 0x10, 0x20, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x19, 0x19, 0x1A,
+ 0x00, 0x00, 0x10, 0x1A, 0x1B, 0x11, 0x7B, 0x1E, 0x7B, 0x7B, 0x1E, 0x20,
+ 0x11, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x23, 0x23, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x10, 0x1B, 0x1A, 0x1E, 0x10, 0x11, 0x20,
+ 0x20, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x19, 0x1A, 0x00, 0x00, 0x1A, 0x1B, 0x1B, 0x11, 0x20, 0x1E,
+ 0x7B, 0x7B, 0x1E, 0x7B, 0x11, 0x1E, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x23,
+ 0x23, 0x19, 0x1B, 0x19, 0x19, 0x23, 0x23, 0x23, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1E, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1A, 0x10, 0x1A,
+ 0x10, 0x11, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x20, 0x1A, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x1A, 0x00, 0x10, 0x1B, 0x1B,
+ 0x1B, 0x11, 0x7B, 0x20, 0x1E, 0x1E, 0x7B, 0x20, 0x11, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1E, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x23, 0x23,
+ 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x11,
+ 0x1B, 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x20, 0x10, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x23, 0x1E, 0x11, 0x10, 0x20, 0x20, 0x20, 0x20, 0x7B,
+ 0x11, 0x1E, 0x1A, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x23, 0x23, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x10, 0x1A, 0x10, 0x11, 0x20, 0x1F,
+ 0x20, 0x10, 0x10, 0x10, 0x20, 0x20, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x19, 0x1A, 0x1A, 0x23, 0x23, 0x23, 0x1A, 0x1A, 0x11, 0x7B, 0x20,
+ 0x22, 0x22, 0x7B, 0x20, 0x10, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B,
+ 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x23, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x11, 0x1A, 0x1B,
+ 0x1E, 0x10, 0x11, 0x20, 0x1F, 0x10, 0x7B, 0x7B, 0x12, 0x10, 0x1A, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1A, 0x00, 0x1B, 0x1B, 0x24,
+ 0x11, 0x22, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x1E, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x23,
+ 0x23, 0x1A, 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B,
+ 0x11, 0x1B, 0x11, 0x1A, 0x10, 0x11, 0x10, 0x20, 0x20, 0x1F, 0x10, 0x10,
+ 0x00, 0x00, 0x20, 0x1A, 0x1B, 0x19, 0x1A, 0x1B, 0x1B, 0x19, 0x19, 0x00,
+ 0x00, 0x00, 0x1A, 0x1A, 0x22, 0x22, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x10, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x19, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x23, 0x11, 0x1A, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1E,
+ 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1A, 0x1B, 0x10, 0x1E, 0x11, 0x10, 0x10,
+ 0x20, 0x20, 0x20, 0x1F, 0x10, 0x00, 0x00, 0x00, 0x1A, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x19, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x10, 0x10, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x22, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x23, 0x23, 0x11, 0x1A, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1A, 0x1E,
+ 0x11, 0x10, 0x11, 0x20, 0x1F, 0x7B, 0x20, 0x20, 0x1F, 0x10, 0x00, 0x00,
+ 0x00, 0x1A, 0x1B, 0x19, 0x1B, 0x19, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x10, 0x10, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x11, 0x1A, 0x1A,
+ 0x1B, 0x1A, 0x11, 0x11, 0x11, 0x23, 0x23, 0x23, 0x1B, 0x19, 0x23, 0x11,
+ 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1E, 0x1E, 0x11, 0x11, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20,
+ 0x20, 0x1F, 0x20, 0x00, 0x00, 0x00, 0x1A, 0x1B, 0x19, 0x19, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7B, 0x20, 0x7B,
+ 0x20, 0x11, 0x1E, 0x1A, 0x1A, 0x1B, 0x1A, 0x1A, 0x11, 0x19, 0x19, 0x23,
+ 0x23, 0x23, 0x11, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x1A, 0x1A, 0x1A, 0x11, 0x1E, 0x10, 0x10, 0x20,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x1A,
+ 0x1B, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x11, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1A, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x24,
+ 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1E, 0x1E,
+ 0x11, 0x11, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x1F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x1E, 0x11, 0x11, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x20,
+ 0x7B, 0x20, 0x20, 0x1F, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20,
+ 0x7B, 0x20, 0x10, 0x1E, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1E, 0x11, 0x1E, 0x11, 0x11, 0x10, 0x20,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x1F, 0x20, 0x1B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x20, 0x22, 0x1A, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x11, 0x1E, 0x11,
+ 0x11, 0x10, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1F,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x20, 0x20,
+ 0x22, 0x1E, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E,
+ 0x11, 0x1E, 0x11, 0x11, 0x10, 0x10, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x20, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0x20, 0x20, 0x22, 0x1E, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1E, 0x11, 0x1E, 0x11, 0x1E, 0x10, 0x10, 0x10, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x7B, 0x20, 0x20, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x20, 0x22, 0x22,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1E, 0x1E, 0x1E, 0x1E, 0x11, 0x1E, 0x11, 0x11, 0x10, 0x10,
+ 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x20,
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x1F, 0x22, 0x22, 0x22, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x11, 0x1E, 0x11, 0x11, 0x11,
+ 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x20, 0x20, 0x20, 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x22, 0x22,
+ 0x11, 0x22, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x20, 0x20, 0x1F, 0x11, 0x1A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x12, 0x12, 0x1F, 0x1F, 0x1F, 0x1F, 0x10, 0x10, 0x00, 0x00, 0x11,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x10, 0x7B, 0x11, 0x10, 0x22, 0x20, 0x1F,
+ 0x20, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1F, 0x11, 0x1F, 0x11, 0x1F, 0x11, 0x1F, 0x11,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x10,
+ 0x11, 0x1A, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x10,
+ 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x11, 0x11,
+ 0x11, 0x0C, 0x11, 0x0C, 0x0C, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x1F, 0x1F,
+ 0x1F, 0x20, 0x10, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x1A, 0x11, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1A, 0x00, 0x00, 0x11, 0x1A,
+ 0x1A, 0x10, 0x00, 0x00, 0x1F, 0x1F, 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, 0x10, 0x10, 0x0C, 0x1A, 0x0C, 0x0C,
+ 0x0C, 0x1A, 0x1B, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x0C, 0x0C, 0x0C, 0x1A, 0x1A, 0x1A, 0x0C, 0x11, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1A, 0x1A,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask3LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x23, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x03, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x06, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0C, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x1B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1C, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x3C, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7E,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFE, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC1, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFE,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x7E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xF9,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x0F, 0xCF, 0xFC, 0x00,
+ 0x00, 0x00, 0x0F, 0xFE, 0x07, 0xE3, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0x03, 0x3C, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x86, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 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,
+};
+
+const uint8_t sprite3LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B,
+ 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x10, 0x10, 0x10, 0x1F, 0x1F, 0x1F, 0x1F,
+ 0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1B, 0x1B, 0x1B, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x1A, 0x00, 0x00, 0x10, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1F, 0x1F, 0x1F, 0x1F, 0x1E,
+ 0x1E, 0x1B, 0x1B, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x1B, 0x11,
+ 0x00, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1E, 0x1A, 0x1B, 0x1B, 0x0C, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E,
+ 0x11, 0x00, 0x1B, 0x00, 0x1A, 0x10, 0x10, 0x1F, 0x11, 0x21, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1E,
+ 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x1B, 0x1E, 0x10, 0x01, 0x1B, 0x1A,
+ 0x1A, 0x1A, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x10,
+ 0x10, 0x10, 0x20, 0x1F, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x20, 0x1E, 0x1A, 0x1B, 0x0C, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x11, 0x00, 0x1E, 0x1A, 0x22,
+ 0x1E, 0x23, 0x1A, 0x11, 0x1A, 0x11, 0x1A, 0x11, 0x1E, 0x10, 0x1A, 0x10,
+ 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x10, 0x10, 0x1F, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1E, 0x1A, 0x1B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1F, 0x1F, 0x11,
+ 0x1B, 0x1A, 0x22, 0x1E, 0x23, 0x1A, 0x23, 0x1A, 0x11, 0x1A, 0x24, 0x1A,
+ 0x11, 0x1A, 0x19, 0x1A, 0x10, 0x1A, 0x1B, 0x1E, 0x10, 0x1E, 0x1A, 0x1E,
+ 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x20, 0x1E, 0x1B, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x00, 0x11, 0x1E, 0x1A, 0x22, 0x1E, 0x23, 0x1A, 0x1E, 0x1A, 0x11,
+ 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x11, 0x1B, 0x10, 0x1A, 0x10, 0x1A, 0x10,
+ 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x10, 0x20, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1A, 0x1B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x1E, 0x1A, 0x22, 0x1E, 0x23, 0x1A,
+ 0x23, 0x1B, 0x11, 0x1B, 0x23, 0x1B, 0x11, 0x1B, 0x19, 0x1A, 0x11, 0x1A,
+ 0x19, 0x1A, 0x10, 0x1A, 0x1B, 0x1E, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E,
+ 0x10, 0x10, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1E,
+ 0x1B, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1E, 0x1A, 0x22,
+ 0x1E, 0x23, 0x1A, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E,
+ 0x1B, 0x11, 0x1B, 0x11, 0x1B, 0x10, 0x1B, 0x10, 0x1A, 0x10, 0x1E, 0x10,
+ 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x10, 0x20, 0x20, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x20, 0x20, 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1E, 0x1A, 0x10, 0x11, 0x1E, 0x1A, 0x23, 0x1B, 0x1E, 0x1B, 0x23, 0x1B,
+ 0x1E, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1B,
+ 0x10, 0x1E, 0x1B, 0x1E, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E, 0x10, 0x1F,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x11, 0x1B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x10, 0x12, 0x11, 0x1A, 0x24, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11,
+ 0x1B, 0x11, 0x1B, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10,
+ 0x1E, 0x10, 0x11, 0x10, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x1F, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x10, 0x20, 0x10, 0x1E,
+ 0x23, 0x1B, 0x1E, 0x1B, 0x23, 0x1B, 0x1E, 0x1B, 0x23, 0x1B, 0x1E, 0x1B,
+ 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1A, 0x1B, 0x1A, 0x10, 0x1A,
+ 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x11, 0x10, 0x1F, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x20, 0x1F, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x10, 0x7B, 0x10, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x11,
+ 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10,
+ 0x11, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x1B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x12, 0x20, 0x10, 0x1E, 0x24, 0x1B, 0x23, 0x1B,
+ 0x24, 0x1B, 0x23, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B,
+ 0x11, 0x1B, 0x19, 0x1B, 0x11, 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x1B, 0x1A,
+ 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20,
+ 0x1F, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x7B, 0x10, 0x1E,
+ 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1A, 0x11, 0x1A, 0x10,
+ 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x11, 0x10, 0x1F, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x7B, 0x20, 0x10, 0x1E, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B,
+ 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1B,
+ 0x19, 0x1A, 0x11, 0x1A, 0x19, 0x1A, 0x10, 0x1A, 0x1B, 0x1E, 0x10, 0x1A,
+ 0x10, 0x11, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x1A, 0x1F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x12, 0x7B, 0x7B, 0x10, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1A, 0x1E, 0x1B, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10,
+ 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1F, 0x20, 0x7B, 0x20, 0x1F, 0x1F,
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1A, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x7B, 0x20, 0x10, 0x1E,
+ 0x1B, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B,
+ 0x24, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1A,
+ 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x11, 0x20, 0x7B,
+ 0x20, 0x1F, 0x1F, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x1E, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11,
+ 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10,
+ 0x1E, 0x10, 0x1F, 0x20, 0x1F, 0x1F, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x1A, 0x1A, 0x19, 0x1B, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x20, 0x7B, 0x7B, 0x20, 0x10, 0x1E, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B,
+ 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1A, 0x1B, 0x1A, 0x10, 0x1A,
+ 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x10, 0x20, 0x1F, 0x1F, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x19, 0x1A, 0x1B, 0x1B, 0x19, 0x1B, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x11,
+ 0x1A, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1F, 0x1F,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x19, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x19, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x20, 0x22,
+ 0x22, 0x20, 0x10, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B,
+ 0x1E, 0x1B, 0x19, 0x1B, 0x11, 0x1A, 0x1B, 0x1A, 0x10, 0x1B, 0x1A, 0x1E,
+ 0x10, 0x11, 0x1F, 0x20, 0x20, 0x00, 0x00, 0x00, 0x10, 0x10, 0x19, 0x1A,
+ 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x1A, 0x12, 0x22, 0x20, 0x7B, 0x22, 0x11, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x11, 0x1A, 0x11, 0x1A, 0x10,
+ 0x1A, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x20, 0x1F, 0x10, 0x10, 0x10, 0x20,
+ 0x20, 0x19, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x19, 0x19, 0x1A, 0x11,
+ 0x00, 0x00, 0x10, 0x1A, 0x11, 0x22, 0x20, 0x7B, 0x20, 0x7B, 0x22, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x23, 0x23, 0x23,
+ 0x23, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x1E, 0x1B,
+ 0x1B, 0x1A, 0x11, 0x1A, 0x1B, 0x1A, 0x10, 0x1E, 0x1A, 0x11, 0x1F, 0x20,
+ 0x1F, 0x7B, 0x1F, 0x1F, 0x10, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x19, 0x1B, 0x1A, 0x00, 0x00, 0x11, 0x1A, 0x11, 0x20, 0x7B, 0x1E,
+ 0x24, 0x20, 0x7B, 0x22, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24,
+ 0x24, 0x19, 0x19, 0x19, 0x23, 0x23, 0x1A, 0x24, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x10, 0x1A, 0x10,
+ 0x1E, 0x10, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x20, 0x1A, 0x1A, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1B, 0x19, 0x19, 0x1A, 0x1A, 0x00, 0x10, 0x1A, 0x1B,
+ 0x11, 0x7B, 0x1E, 0x7B, 0x7B, 0x1E, 0x20, 0x11, 0x1E, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x23, 0x23, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x23, 0x23, 0x1A,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B,
+ 0x10, 0x1B, 0x1A, 0x1E, 0x10, 0x11, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x10, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1A,
+ 0x00, 0x1A, 0x1B, 0x1B, 0x11, 0x20, 0x1E, 0x7B, 0x7B, 0x1E, 0x7B, 0x11,
+ 0x1E, 0x1A, 0x1B, 0x1B, 0x24, 0x1E, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x19,
+ 0x19, 0x19, 0x23, 0x1A, 0x1A, 0x24, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x11, 0x1A, 0x10, 0x1A, 0x10, 0x11, 0x20, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x10, 0x20, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B,
+ 0x19, 0x19, 0x1A, 0x1A, 0x10, 0x1B, 0x1B, 0x1B, 0x11, 0x7B, 0x20, 0x1E,
+ 0x1E, 0x7B, 0x20, 0x11, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x23, 0x11, 0x1A, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x11, 0x1B, 0x1B, 0x1A, 0x10, 0x1E,
+ 0x1A, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1A, 0x24, 0x23, 0x23, 0x1E,
+ 0x11, 0x10, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x11, 0x1E, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x19, 0x23, 0x11,
+ 0x1A, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x11,
+ 0x1B, 0x10, 0x1A, 0x10, 0x11, 0x20, 0x1F, 0x20, 0x10, 0x10, 0x10, 0x20,
+ 0x20, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x19, 0x19, 0x1A, 0x1A,
+ 0x00, 0x00, 0x1A, 0x1A, 0x11, 0x7B, 0x20, 0x22, 0x22, 0x7B, 0x20, 0x10,
+ 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x23, 0x23, 0x11, 0x1A, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B,
+ 0x1E, 0x1B, 0x1B, 0x1B, 0x11, 0x1A, 0x1B, 0x1E, 0x10, 0x11, 0x20, 0x1F,
+ 0x10, 0x7B, 0x7B, 0x12, 0x10, 0x1A, 0x1B, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x19, 0x1B, 0x1A, 0x1B, 0x1B, 0x24, 0x11, 0x22, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x10, 0x1E, 0x1A, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x23, 0x11, 0x1A, 0x1A, 0x1B, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x10,
+ 0x11, 0x10, 0x20, 0x20, 0x1F, 0x10, 0x10, 0x00, 0x00, 0x20, 0x1A, 0x1B,
+ 0x19, 0x1A, 0x1B, 0x1B, 0x19, 0x19, 0x1A, 0x1A, 0x00, 0x1A, 0x1A, 0x22,
+ 0x22, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1B, 0x23, 0x23, 0x23, 0x23, 0x23, 0x11, 0x1A, 0x1A,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B,
+ 0x1A, 0x1B, 0x10, 0x1E, 0x11, 0x10, 0x10, 0x20, 0x20, 0x20, 0x1F, 0x10,
+ 0x00, 0x00, 0x11, 0x1A, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x00,
+ 0x00, 0x00, 0x20, 0x22, 0x10, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x10,
+ 0x22, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x11, 0x11, 0x11, 0x19, 0x19, 0x23,
+ 0x11, 0x1A, 0x1A, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1A, 0x1E, 0x11, 0x10, 0x11, 0x20, 0x1F,
+ 0x7B, 0x20, 0x20, 0x1F, 0x10, 0x00, 0x00, 0x11, 0x1A, 0x1B, 0x19, 0x1B,
+ 0x19, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x10, 0x10, 0x7B,
+ 0x20, 0x7B, 0x20, 0x10, 0x11, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A,
+ 0x1A, 0x11, 0x11, 0x11, 0x1A, 0x1A, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1A, 0x1E, 0x1E, 0x11,
+ 0x11, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x1F, 0x20, 0x00, 0x00,
+ 0x11, 0x1A, 0x1B, 0x19, 0x19, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x11, 0x1E, 0x1A, 0x1A,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x24,
+ 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1A,
+ 0x1A, 0x1A, 0x11, 0x1E, 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x20, 0x10, 0x00, 0x00, 0x00, 0x11, 0x1A, 0x1B, 0x1A, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x20, 0x20,
+ 0x10, 0x11, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1E, 0x1E, 0x11, 0x11, 0x10, 0x10, 0x20,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x11, 0x1A,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1E, 0x11, 0x11,
+ 0x10, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x1F, 0x11, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x7B, 0x20, 0x10, 0x1E, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A,
+ 0x1E, 0x11, 0x1E, 0x11, 0x11, 0x10, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x20, 0x1F, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20,
+ 0x7B, 0x20, 0x22, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x11, 0x1E, 0x11, 0x11, 0x10, 0x10, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x1F, 0x20, 0x1B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x20, 0x20, 0x22, 0x1E, 0x1A, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E, 0x11, 0x1E, 0x11, 0x11, 0x10,
+ 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x1F, 0x1B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20,
+ 0x22, 0x1E, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E, 0x11, 0x1E,
+ 0x11, 0x1E, 0x10, 0x10, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x20, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0x1F, 0x20, 0x22, 0x22, 0x1E, 0x1E, 0x1E, 0x1E, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x11, 0x1E, 0x11, 0x11, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x1B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x22, 0x22,
+ 0x22, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x11, 0x1E, 0x11, 0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x20,
+ 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x1B, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x22, 0x22, 0x11, 0x22, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10,
+ 0x10, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20,
+ 0x20, 0x1A, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x12, 0x1F, 0x1F,
+ 0x1F, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x10, 0x7B, 0x11, 0x10, 0x20, 0x20, 0x1F, 0x20, 0x20, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x20, 0x1F, 0x11, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0x11, 0x1F, 0x11, 0x1F, 0x11, 0x1F, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x11, 0x22, 0x00, 0x00, 0x1F,
+ 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x1F, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x00, 0x1A,
+ 0x1A, 0x22, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x10, 0x10, 0x1A, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1A, 0x11,
+ 0x1A, 0x11, 0x1A, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x00, 0x1A, 0x1A, 0x10, 0x10, 0x00, 0x00, 0x00, 0x1F,
+ 0x1F, 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, 0x10, 0x0C, 0x11, 0x1A, 0x11, 0x0C, 0x11, 0x1A, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x1A, 0x1A,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x0C, 0x11,
+ 0x1B, 0x11, 0x1B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1A, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x1A, 0x1A, 0x1A, 0x1A, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1A,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask3LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x87, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x05, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0B, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x1A, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x13, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x57, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xBF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x38,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7C, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xFE,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x83, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x8F, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE7, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFE,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7C,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x38, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x3F, 0xFD, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xF0,
+ 0x7F, 0x9F, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xF8, 0x1D, 0xC7, 0xF0, 0x00,
+ 0x00, 0x00, 0x0F, 0xFC, 0x06, 0xF1, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFE,
+ 0x03, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01, 0x88, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 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,
+};
+
+const uint8_t sprite3RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1F, 0x1F, 0x1F, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x1E, 0x1B, 0x1E, 0x1E, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x10, 0x1A, 0x1F, 0x1F, 0x1F, 0x1F, 0x20,
+ 0x20, 0x1F, 0x20, 0x1F, 0x20, 0x1F, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x1A, 0x10, 0x10, 0x1A, 0x00, 0x10, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x0C, 0x1B, 0x1B, 0x1B, 0x10, 0x1A, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F,
+ 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x7B, 0x1A, 0x7B, 0x1B,
+ 0x00, 0x10, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F,
+ 0x20, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x10, 0x21, 0x11, 0x1F,
+ 0x10, 0x10, 0x1E, 0x1B, 0x00, 0x00, 0x10, 0x1A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C, 0x1B, 0x1E, 0x1F,
+ 0x1F, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x10, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E,
+ 0x10, 0x1A, 0x1A, 0x1A, 0x1B, 0x01, 0x10, 0x1A, 0x1A, 0x00, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1B,
+ 0x1B, 0x1A, 0x1F, 0x1F, 0x20, 0x7B, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x7B,
+ 0x20, 0x20, 0x20, 0x1F, 0x20, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10,
+ 0x1A, 0x10, 0x1E, 0x11, 0x1A, 0x11, 0x1A, 0x11, 0x1A, 0x23, 0x1E, 0x22,
+ 0x7B, 0x1A, 0x00, 0x11, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x1B, 0x1A, 0x1F, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x10, 0x10, 0x1A, 0x1E, 0x10, 0x1E,
+ 0x1B, 0x1A, 0x10, 0x1A, 0x19, 0x1A, 0x11, 0x1A, 0x24, 0x1A, 0x11, 0x1A,
+ 0x23, 0x1A, 0x23, 0x1E, 0x22, 0x7B, 0x1A, 0x1E, 0x1A, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1B, 0x1A, 0x1F, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x7B, 0x20, 0x20, 0x20, 0x10, 0x1E, 0x10, 0x1E, 0x10,
+ 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1B, 0x11, 0x1A, 0x11,
+ 0x1B, 0x11, 0x1B, 0x11, 0x1A, 0x1E, 0x1A, 0x23, 0x1E, 0x22, 0x1A, 0x1E,
+ 0x10, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1A, 0x1F,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x1E,
+ 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E, 0x1B, 0x1A, 0x10, 0x1A, 0x19, 0x1A,
+ 0x11, 0x1A, 0x19, 0x1B, 0x11, 0x1B, 0x23, 0x1B, 0x11, 0x1B, 0x23, 0x1A,
+ 0x23, 0x1E, 0x22, 0x1A, 0x1E, 0x7B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x1B, 0x1E, 0x20, 0x7B, 0x20, 0x7B, 0x7B, 0x20, 0x7B, 0x20, 0x20,
+ 0x10, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10,
+ 0x1B, 0x10, 0x1B, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1A, 0x23, 0x1E, 0x22, 0x1A, 0x1E, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x20, 0x10, 0x10, 0x1E, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E,
+ 0x1B, 0x1E, 0x10, 0x1B, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x1E, 0x1B,
+ 0x19, 0x1B, 0x1E, 0x1B, 0x23, 0x1B, 0x1E, 0x1B, 0x23, 0x1A, 0x1E, 0x11,
+ 0x10, 0x1A, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x11, 0x20,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x11, 0x10, 0x1E, 0x10,
+ 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1B, 0x11, 0x1B, 0x11,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E,
+ 0x1B, 0x24, 0x1A, 0x11, 0x12, 0x10, 0x1A, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0C, 0x1B, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x11,
+ 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x1B, 0x1A,
+ 0x11, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x23, 0x1B,
+ 0x1E, 0x1B, 0x23, 0x1B, 0x1E, 0x1B, 0x23, 0x1E, 0x10, 0x20, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x1B, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x11, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10,
+ 0x1A, 0x10, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E,
+ 0x10, 0x7B, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1F, 0x20,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1A,
+ 0x1B, 0x1A, 0x10, 0x1A, 0x1B, 0x1A, 0x11, 0x1B, 0x19, 0x1B, 0x11, 0x1B,
+ 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x23, 0x1B, 0x24, 0x1B,
+ 0x23, 0x1B, 0x24, 0x1E, 0x10, 0x20, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x11, 0x10,
+ 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1A, 0x11,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1E, 0x10, 0x7B, 0x12, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1A, 0x1F, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x11, 0x10, 0x1A, 0x10, 0x1E, 0x1B, 0x1A, 0x10, 0x1A, 0x19, 0x1A,
+ 0x11, 0x1A, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B,
+ 0x1E, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1E,
+ 0x10, 0x20, 0x7B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x1A, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1F,
+ 0x1F, 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10,
+ 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1B, 0x1E, 0x1A, 0x1E, 0x1B, 0x1E,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1E, 0x10, 0x7B, 0x7B, 0x12, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x0C, 0x0C, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x1F, 0x1F, 0x20, 0x7B, 0x20, 0x11, 0x10, 0x1E,
+ 0x1A, 0x1E, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x19, 0x1B, 0x11, 0x1B,
+ 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B,
+ 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x1B, 0x1E, 0x10, 0x20, 0x7B, 0x20,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x0C, 0x1B,
+ 0x1A, 0x0C, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x20, 0x1F, 0x1F,
+ 0x20, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x11,
+ 0x1B, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1E,
+ 0x10, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1B, 0x19, 0x1A, 0x1A, 0x0C, 0x1A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x20, 0x1F, 0x1F, 0x10, 0x1A, 0x1E, 0x10, 0x1A, 0x1B, 0x1A,
+ 0x10, 0x1A, 0x1B, 0x1A, 0x11, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B,
+ 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1E, 0x10, 0x20, 0x7B, 0x7B, 0x20, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x19, 0x1B, 0x1B, 0x1A, 0x1A, 0x19,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1F, 0x1F, 0x10, 0x1E, 0x10,
+ 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x10, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x19, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x1A, 0x19, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20,
+ 0x1F, 0x11, 0x10, 0x1E, 0x1A, 0x1B, 0x10, 0x1A, 0x1B, 0x1A, 0x11, 0x1B,
+ 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B,
+ 0x19, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E,
+ 0x10, 0x20, 0x22, 0x22, 0x20, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x19, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x19, 0x20, 0x20,
+ 0x10, 0x10, 0x10, 0x1F, 0x20, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10,
+ 0x1A, 0x11, 0x1A, 0x11, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1E, 0x11, 0x22, 0x7B, 0x20, 0x22, 0x12, 0x1A, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x1A, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x10, 0x1F, 0x1F, 0x7B, 0x1F, 0x20, 0x1F, 0x11, 0x1A, 0x1E,
+ 0x10, 0x1A, 0x1B, 0x1A, 0x11, 0x1A, 0x1B, 0x1B, 0x1E, 0x1B, 0x19, 0x1B,
+ 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x22, 0x7B, 0x20, 0x7B,
+ 0x20, 0x22, 0x11, 0x1A, 0x10, 0x00, 0x00, 0x00, 0x1A, 0x19, 0x19, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x20, 0x10, 0x7B, 0x20, 0x7B, 0x20,
+ 0x10, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x22,
+ 0x7B, 0x20, 0x24, 0x1E, 0x7B, 0x20, 0x11, 0x1A, 0x11, 0x00, 0x00, 0x00,
+ 0x1A, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x10, 0x20,
+ 0x20, 0x7B, 0x20, 0x20, 0x20, 0x11, 0x10, 0x1E, 0x1A, 0x1B, 0x10, 0x1B,
+ 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x23, 0x23, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1E, 0x11, 0x20, 0x1E, 0x7B, 0x7B, 0x1E, 0x7B, 0x11, 0x1B,
+ 0x1A, 0x10, 0x00, 0x00, 0x1A, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x20, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x11, 0x10,
+ 0x1A, 0x10, 0x1A, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x1E,
+ 0x1B, 0x24, 0x1B, 0x1B, 0x23, 0x23, 0x23, 0x19, 0x19, 0x1B, 0x19, 0x23,
+ 0x23, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1E, 0x11, 0x7B, 0x1E, 0x7B, 0x7B,
+ 0x1E, 0x20, 0x11, 0x1B, 0x1B, 0x1A, 0x00, 0x00, 0x1A, 0x1A, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x10, 0x1A, 0x1E, 0x10, 0x1A, 0x1B, 0x1B, 0x11, 0x1B, 0x1B, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x23, 0x23, 0x19, 0x19,
+ 0x19, 0x19, 0x19, 0x1B, 0x1E, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x11,
+ 0x20, 0x7B, 0x1E, 0x1E, 0x20, 0x7B, 0x11, 0x1B, 0x1B, 0x1B, 0x10, 0x00,
+ 0x1A, 0x1A, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x20, 0x20,
+ 0x10, 0x10, 0x10, 0x20, 0x1F, 0x20, 0x11, 0x10, 0x1A, 0x10, 0x1B, 0x11,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x23,
+ 0x23, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1E, 0x11, 0x7B, 0x20, 0x20, 0x20, 0x20, 0x10, 0x11, 0x1E,
+ 0x23, 0x1B, 0x1A, 0x1A, 0x1A, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B,
+ 0x1B, 0x1A, 0x10, 0x12, 0x7B, 0x7B, 0x10, 0x1F, 0x20, 0x11, 0x10, 0x1E,
+ 0x1B, 0x1A, 0x11, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x23, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B,
+ 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x10, 0x20, 0x7B, 0x22, 0x22,
+ 0x20, 0x7B, 0x11, 0x1A, 0x1A, 0x23, 0x23, 0x23, 0x00, 0x19, 0x19, 0x1B,
+ 0x1B, 0x1A, 0x19, 0x1B, 0x1A, 0x20, 0x00, 0x00, 0x10, 0x10, 0x1F, 0x20,
+ 0x20, 0x10, 0x11, 0x10, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x24,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1A, 0x23, 0x23, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x1A, 0x1E, 0x10,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x22, 0x11, 0x24, 0x1B, 0x1B, 0x00,
+ 0x00, 0x19, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1A, 0x00, 0x00, 0x00, 0x10,
+ 0x1F, 0x20, 0x20, 0x20, 0x10, 0x10, 0x11, 0x1E, 0x10, 0x1B, 0x1A, 0x1B,
+ 0x1E, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1A, 0x11,
+ 0x23, 0x19, 0x19, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x22, 0x22,
+ 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x1A, 0x19, 0x1B, 0x19, 0x1B, 0x1A, 0x00,
+ 0x00, 0x00, 0x10, 0x1F, 0x20, 0x20, 0x7B, 0x1F, 0x20, 0x11, 0x10, 0x11,
+ 0x1E, 0x1A, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1A, 0x11, 0x23, 0x23, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x22, 0x10, 0x7B, 0x20, 0x7B, 0x20,
+ 0x7B, 0x10, 0x10, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x19, 0x19,
+ 0x1B, 0x1A, 0x00, 0x00, 0x00, 0x20, 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x20,
+ 0x10, 0x10, 0x11, 0x11, 0x1E, 0x1E, 0x1A, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x11, 0x23, 0x19, 0x1B,
+ 0x23, 0x23, 0x23, 0x11, 0x11, 0x11, 0x1A, 0x1B, 0x1A, 0x1A, 0x11, 0x10,
+ 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1A, 0x1B, 0x1A, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x1E, 0x11, 0x1A, 0x1A, 0x1A,
+ 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1A, 0x11, 0x23, 0x23, 0x23, 0x19, 0x19, 0x11, 0x1A, 0x1A, 0x1B, 0x1A,
+ 0x1A, 0x1E, 0x11, 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0x7B, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x11, 0x11,
+ 0x1E, 0x1E, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x24, 0x1B, 0x1B, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x11, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x1F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x7B, 0x20,
+ 0x20, 0x10, 0x10, 0x11, 0x11, 0x1E, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x10, 0x20, 0x20,
+ 0x7B, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x20, 0x1F, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x11, 0x11, 0x1E, 0x11, 0x1E, 0x1A,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A,
+ 0x1E, 0x10, 0x20, 0x7B, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x10, 0x11,
+ 0x11, 0x1E, 0x11, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1A, 0x1A, 0x22, 0x20, 0x7B, 0x20, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x20, 0x20, 0x10, 0x10, 0x11, 0x11, 0x1E, 0x11, 0x1E, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1E, 0x22, 0x20, 0x20, 0x1F, 0x1F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x20, 0x20, 0x7B, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x10, 0x1E, 0x11, 0x1E,
+ 0x11, 0x1E, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E, 0x22, 0x20,
+ 0x20, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B,
+ 0x20, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10,
+ 0x10, 0x10, 0x11, 0x11, 0x1E, 0x11, 0x1E, 0x1E, 0x1E, 0x1E, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x22, 0x22, 0x20, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1B, 0x1A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x1E,
+ 0x11, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x22, 0x22, 0x22, 0x1F, 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, 0x1A, 0x11, 0x1F, 0x20,
+ 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10,
+ 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x22, 0x11, 0x22, 0x22, 0x1F, 0x1F, 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, 0x1A, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x1F, 0x20,
+ 0x1F, 0x20, 0x22, 0x10, 0x11, 0x7B, 0x10, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x11, 0x00, 0x00, 0x10, 0x10, 0x1F, 0x1F, 0x1F, 0x1F, 0x12, 0x12, 0x12,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x10, 0x20, 0x20, 0x20,
+ 0x20, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x1A, 0x11, 0x10, 0x1A, 0x1A, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x11, 0x1F, 0x11, 0x1F,
+ 0x11, 0x1F, 0x11, 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,
+ 0x1A, 0x10, 0x20, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x0C,
+ 0x0C, 0x11, 0x0C, 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x10, 0x1A,
+ 0x1A, 0x11, 0x00, 0x00, 0x1A, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x11, 0x1A, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x1B, 0x1A, 0x0C, 0x0C, 0x0C, 0x1A, 0x0C,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x0C, 0x1A, 0x1A, 0x1A,
+ 0x0C, 0x0C, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1A, 0x1A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask3RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xC4, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0xC0, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x60, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x30, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x90, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xD8, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x38, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x3C, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x7E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x7F, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0x83, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x7F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7E, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x7C, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0x9F, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xF3, 0xF0, 0x3F, 0xF0, 0x00, 0x00,
+ 0x00, 0x0F, 0xC7, 0xE0, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0x3C, 0xC0,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x61, 0x01, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite3RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1B, 0x1B, 0x1B, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1B, 0x1B, 0x1B, 0x1E,
+ 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x10, 0x10, 0x10, 0x1E,
+ 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C, 0x1B, 0x1B, 0x1E,
+ 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E, 0x1B, 0x1E,
+ 0x1B, 0x10, 0x00, 0x00, 0x1A, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C, 0x1B,
+ 0x1B, 0x1A, 0x1E, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E, 0x00, 0x11, 0x1B, 0x00, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1A, 0x1E, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x21, 0x11, 0x1F, 0x10, 0x10, 0x1A,
+ 0x00, 0x1B, 0x00, 0x11, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x0C, 0x1B, 0x1A, 0x1E, 0x20, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x1F, 0x20, 0x10, 0x10,
+ 0x10, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1A, 0x1A,
+ 0x1A, 0x1B, 0x01, 0x10, 0x1E, 0x1B, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1A, 0x1E, 0x20,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x10,
+ 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1E,
+ 0x11, 0x1A, 0x11, 0x1A, 0x11, 0x1A, 0x23, 0x1E, 0x22, 0x1A, 0x1E, 0x00,
+ 0x11, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C,
+ 0x1B, 0x1E, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20,
+ 0x10, 0x10, 0x10, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E, 0x1B, 0x1A, 0x10,
+ 0x1A, 0x19, 0x1A, 0x11, 0x1A, 0x24, 0x1A, 0x11, 0x1A, 0x23, 0x1A, 0x23,
+ 0x1E, 0x22, 0x1A, 0x1B, 0x11, 0x1F, 0x1F, 0x1A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1B, 0x1A, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x20, 0x20, 0x10, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E,
+ 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1B, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1B,
+ 0x11, 0x1A, 0x1E, 0x1A, 0x23, 0x1E, 0x22, 0x1A, 0x1E, 0x11, 0x00, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0C, 0x1B, 0x1E, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x10, 0x10, 0x1E, 0x10, 0x1E, 0x1A,
+ 0x1E, 0x10, 0x1E, 0x1B, 0x1A, 0x10, 0x1A, 0x19, 0x1A, 0x11, 0x1A, 0x19,
+ 0x1B, 0x11, 0x1B, 0x23, 0x1B, 0x11, 0x1B, 0x23, 0x1A, 0x23, 0x1E, 0x22,
+ 0x1A, 0x1E, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1A,
+ 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x10, 0x10, 0x1E,
+ 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1B, 0x10, 0x1B,
+ 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1A, 0x23, 0x1E, 0x22, 0x1A, 0x1E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x11, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x1F, 0x10, 0x1E, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1E, 0x1B, 0x1E, 0x10,
+ 0x1B, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E,
+ 0x1B, 0x23, 0x1B, 0x1E, 0x1B, 0x23, 0x1A, 0x1E, 0x11, 0x10, 0x1A, 0x1E,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1F, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x11, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A,
+ 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1B, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1A,
+ 0x11, 0x12, 0x10, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1F,
+ 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x11, 0x10, 0x1E, 0x1A,
+ 0x1E, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x1B, 0x1A, 0x11, 0x1B, 0x19,
+ 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x23, 0x1B, 0x1E, 0x1B, 0x23,
+ 0x1B, 0x1E, 0x1B, 0x23, 0x1E, 0x10, 0x20, 0x10, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x11,
+ 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A,
+ 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1E, 0x10, 0x7B, 0x10,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1F, 0x20, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x1F, 0x10, 0x1E, 0x1A, 0x1E, 0x10, 0x1A, 0x1B, 0x1A, 0x10,
+ 0x1A, 0x1B, 0x1A, 0x11, 0x1B, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x1E,
+ 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x23, 0x1B, 0x24, 0x1B, 0x23, 0x1B, 0x24,
+ 0x1E, 0x10, 0x20, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1F,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x1F, 0x10, 0x11, 0x10, 0x1E, 0x10, 0x1E,
+ 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1A, 0x11, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x1E, 0x10, 0x7B, 0x12, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0x1A, 0x1F, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x11, 0x10,
+ 0x1A, 0x10, 0x1E, 0x1B, 0x1A, 0x10, 0x1A, 0x19, 0x1A, 0x11, 0x1A, 0x19,
+ 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19,
+ 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1E, 0x10, 0x20, 0x7B,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x1A, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1F, 0x1F, 0x20, 0x7B,
+ 0x20, 0x1F, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A,
+ 0x10, 0x1A, 0x11, 0x1B, 0x1E, 0x1A, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1E, 0x10, 0x7B, 0x7B, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1A, 0x1A, 0x1B, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x1F, 0x1F, 0x20, 0x7B, 0x20, 0x11, 0x10, 0x1E, 0x1A, 0x1E, 0x10,
+ 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x19, 0x1B, 0x11, 0x1B, 0x19, 0x1B, 0x1E,
+ 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24,
+ 0x1B, 0x19, 0x1B, 0x1B, 0x1E, 0x10, 0x20, 0x7B, 0x20, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1B, 0x19, 0x1A, 0x1A, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1F, 0x1F, 0x20, 0x1F, 0x10, 0x1E,
+ 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1B, 0x11, 0x1B,
+ 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1E, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1B, 0x19,
+ 0x1B, 0x1B, 0x1A, 0x19, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1F,
+ 0x1F, 0x20, 0x10, 0x1A, 0x1E, 0x10, 0x1A, 0x1B, 0x1A, 0x10, 0x1A, 0x1B,
+ 0x1A, 0x11, 0x1B, 0x19, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19,
+ 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1E, 0x10, 0x20, 0x7B, 0x7B, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x1A, 0x19, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x1F, 0x1F, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A,
+ 0x10, 0x1A, 0x11, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1A, 0x19, 0x10, 0x10, 0x00, 0x00, 0x00, 0x20, 0x20, 0x1F, 0x11, 0x10,
+ 0x1E, 0x1A, 0x1B, 0x10, 0x1A, 0x1B, 0x1A, 0x11, 0x1B, 0x19, 0x1B, 0x1E,
+ 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19, 0x1B, 0x24,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x10, 0x20, 0x22,
+ 0x22, 0x20, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x11, 0x1A, 0x19, 0x19,
+ 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x19, 0x20, 0x20, 0x10, 0x10, 0x10,
+ 0x1F, 0x20, 0x10, 0x1E, 0x10, 0x1E, 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1A,
+ 0x11, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1E, 0x11, 0x22, 0x7B, 0x20, 0x22, 0x12, 0x1A, 0x10, 0x00, 0x00, 0x00,
+ 0x1A, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x10,
+ 0x1F, 0x1F, 0x7B, 0x1F, 0x20, 0x1F, 0x11, 0x1A, 0x1E, 0x10, 0x1A, 0x1B,
+ 0x1A, 0x11, 0x1A, 0x1B, 0x1B, 0x1E, 0x1B, 0x19, 0x1B, 0x24, 0x1B, 0x19,
+ 0x1B, 0x24, 0x1B, 0x23, 0x23, 0x23, 0x23, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x11, 0x22, 0x7B, 0x20, 0x7B, 0x20, 0x22, 0x11,
+ 0x1A, 0x10, 0x00, 0x00, 0x1A, 0x1A, 0x19, 0x19, 0x1B, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x1A, 0x20, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x10, 0x1E,
+ 0x10, 0x1A, 0x10, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B,
+ 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1A, 0x23, 0x23, 0x19, 0x19, 0x19, 0x24,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x22, 0x7B, 0x20, 0x24,
+ 0x1E, 0x7B, 0x20, 0x11, 0x1A, 0x11, 0x00, 0x00, 0x1A, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1A, 0x1A, 0x10, 0x7B, 0x20, 0x7B, 0x20,
+ 0x20, 0x20, 0x11, 0x10, 0x1E, 0x1A, 0x1B, 0x10, 0x1B, 0x1B, 0x1B, 0x1E,
+ 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1A, 0x23, 0x23, 0x1B,
+ 0x1B, 0x19, 0x19, 0x19, 0x19, 0x23, 0x23, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E,
+ 0x11, 0x20, 0x1E, 0x7B, 0x7B, 0x1E, 0x7B, 0x11, 0x1B, 0x1A, 0x10, 0x00,
+ 0x1A, 0x1A, 0x19, 0x19, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1A, 0x20,
+ 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x11, 0x10, 0x1A, 0x10, 0x1A,
+ 0x11, 0x1B, 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x1E, 0x1B, 0x24, 0x1A,
+ 0x1A, 0x23, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1B, 0x19, 0x1B, 0x1E, 0x24,
+ 0x1B, 0x1B, 0x1A, 0x1E, 0x11, 0x7B, 0x1E, 0x7B, 0x7B, 0x1E, 0x20, 0x11,
+ 0x1B, 0x1B, 0x1A, 0x00, 0x1A, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x10, 0x1A,
+ 0x1E, 0x10, 0x1A, 0x1B, 0x1B, 0x11, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1B, 0x1A, 0x11, 0x23, 0x1B, 0x1B, 0x19, 0x19, 0x19, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x11, 0x20, 0x7B, 0x1E,
+ 0x1E, 0x20, 0x7B, 0x11, 0x1B, 0x1B, 0x1B, 0x10, 0x1A, 0x1A, 0x19, 0x19,
+ 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x20, 0x20, 0x10, 0x10, 0x10,
+ 0x20, 0x1F, 0x20, 0x11, 0x10, 0x1A, 0x10, 0x1B, 0x11, 0x1B, 0x1E, 0x1B,
+ 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x24, 0x1A, 0x11, 0x23, 0x19, 0x19,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x1A, 0x1E,
+ 0x11, 0x7B, 0x20, 0x20, 0x20, 0x20, 0x10, 0x11, 0x1E, 0x23, 0x23, 0x24,
+ 0x1A, 0x1B, 0x19, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1B, 0x1A, 0x10,
+ 0x12, 0x7B, 0x7B, 0x10, 0x1F, 0x20, 0x11, 0x10, 0x1E, 0x1B, 0x1A, 0x11,
+ 0x1B, 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x11, 0x23, 0x23, 0x1B, 0x19, 0x19, 0x19, 0x19, 0x1B, 0x1B, 0x1E, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1A, 0x10, 0x20, 0x7B, 0x22, 0x22, 0x20, 0x7B, 0x11,
+ 0x1A, 0x1A, 0x00, 0x00, 0x1A, 0x1A, 0x19, 0x19, 0x1B, 0x1B, 0x1A, 0x19,
+ 0x1B, 0x1A, 0x20, 0x00, 0x00, 0x10, 0x10, 0x1F, 0x20, 0x20, 0x10, 0x11,
+ 0x10, 0x1A, 0x11, 0x1B, 0x11, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1A, 0x1A, 0x11, 0x23, 0x19, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x1A, 0x1E, 0x10, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x22, 0x11, 0x24, 0x1B, 0x1B, 0x00, 0x1B, 0x19, 0x1B,
+ 0x1B, 0x1B, 0x19, 0x1B, 0x1A, 0x11, 0x00, 0x00, 0x10, 0x1F, 0x20, 0x20,
+ 0x20, 0x10, 0x10, 0x11, 0x1E, 0x10, 0x1B, 0x1A, 0x1B, 0x1E, 0x1B, 0x1B,
+ 0x1B, 0x1E, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1A, 0x1A, 0x11, 0x23,
+ 0x23, 0x23, 0x23, 0x23, 0x1B, 0x1B, 0x1A, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x10, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x22, 0x22, 0x1A, 0x1A, 0x00,
+ 0x00, 0x1A, 0x1A, 0x19, 0x1B, 0x19, 0x1B, 0x1A, 0x11, 0x00, 0x00, 0x10,
+ 0x1F, 0x20, 0x20, 0x7B, 0x1F, 0x20, 0x11, 0x10, 0x11, 0x1E, 0x1A, 0x1B,
+ 0x1E, 0x1B, 0x1E, 0x1B, 0x24, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1A, 0x1A, 0x11, 0x23, 0x19, 0x19, 0x11, 0x11, 0x11, 0x1A, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x22, 0x10, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x10,
+ 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x19, 0x19, 0x1B, 0x1A, 0x11,
+ 0x00, 0x00, 0x20, 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x11,
+ 0x11, 0x1E, 0x1E, 0x1A, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24,
+ 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1A, 0x1A, 0x11, 0x11, 0x11, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x11, 0x10, 0x20, 0x7B, 0x20,
+ 0x7B, 0x10, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A,
+ 0x1B, 0x1A, 0x11, 0x00, 0x00, 0x00, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x20, 0x10, 0x10, 0x1E, 0x11, 0x1A, 0x1A, 0x1A, 0x1B, 0x24, 0x1B,
+ 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1A, 0x1E, 0x11,
+ 0x20, 0x7B, 0x20, 0x7B, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x1A, 0x11, 0x00, 0x00, 0x00, 0x1F, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x11, 0x11, 0x1E, 0x1E, 0x1A,
+ 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B,
+ 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x11, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x11, 0x1F, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10,
+ 0x11, 0x11, 0x1E, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x24, 0x1B,
+ 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x24, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x10, 0x20, 0x20, 0x7B, 0x20, 0x1F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20,
+ 0x20, 0x20, 0x10, 0x11, 0x11, 0x1E, 0x11, 0x1E, 0x1A, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A, 0x1E, 0x10, 0x20,
+ 0x7B, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x20, 0x1F, 0x7B,
+ 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10, 0x10, 0x11, 0x11, 0x1E, 0x11,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1A,
+ 0x1A, 0x22, 0x20, 0x7B, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1B, 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x10,
+ 0x10, 0x11, 0x11, 0x1E, 0x11, 0x1E, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A,
+ 0x1B, 0x1A, 0x1A, 0x1E, 0x22, 0x20, 0x20, 0x1F, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B,
+ 0x20, 0x7B, 0x20, 0x10, 0x10, 0x10, 0x1E, 0x11, 0x1E, 0x11, 0x1E, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B, 0x1A, 0x1B,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E, 0x22, 0x20, 0x20, 0x1F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x10, 0x20, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x11,
+ 0x11, 0x1E, 0x11, 0x1E, 0x1E, 0x1E, 0x1E, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1E, 0x1E, 0x1E, 0x1E, 0x22, 0x22, 0x20,
+ 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x1B, 0x20, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20,
+ 0x20, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x1E, 0x11, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x22,
+ 0x22, 0x22, 0x1F, 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, 0x1B, 0x1A, 0x20, 0x20, 0x20, 0x7B, 0x20,
+ 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x22,
+ 0x11, 0x22, 0x22, 0x1F, 0x1F, 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, 0x1A, 0x11,
+ 0x1F, 0x20, 0x20, 0x7B, 0x20, 0x7B, 0x20, 0x20, 0x20, 0x1F, 0x20, 0x20,
+ 0x10, 0x11, 0x7B, 0x10, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x10, 0x10,
+ 0x10, 0x10, 0x1F, 0x1F, 0x1F, 0x1F, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x1F,
+ 0x1F, 0x00, 0x00, 0x22, 0x11, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1F, 0x11, 0x1F, 0x11, 0x1F, 0x11,
+ 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, 0x20, 0x1A, 0x10, 0x10,
+ 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x22, 0x1A, 0x1A, 0x00, 0x1A, 0x1A,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x10, 0x10, 0x1A, 0x1A,
+ 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11,
+ 0x11, 0x1A, 0x11, 0x1A, 0x11, 0x1A, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x1A, 0x1A, 0x00, 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x1A, 0x11, 0x0C, 0x11, 0x1A, 0x11, 0x0C, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x1B, 0x11, 0x1B, 0x11, 0x0C, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask3RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xE1, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0xA0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0xD0, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x58, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC8, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFD, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x1C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x3E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xF1, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xE7, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x7F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x3E, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x1C, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xBF, 0xFC, 0x00, 0x00, 0x00, 0x1F, 0xF9, 0xFE,
+ 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xE3, 0xB8, 0x1F, 0xF8, 0x00, 0x00,
+ 0x00, 0x03, 0x8F, 0x60, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xC0,
+ 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x11, 0x80, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 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,
+};
+
+const uint8_t sprite4LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25,
+ 0x25, 0x25, 0x00, 0x25, 0x25, 0x25, 0x25, 0x00, 0x25, 0x25, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25,
+ 0x00, 0x25, 0x27, 0x27, 0x27, 0x25, 0x25, 0x27, 0x27, 0x27, 0x00, 0x25,
+ 0x27, 0x27, 0x00, 0x25, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00,
+ 0x25, 0x27, 0x27, 0x27, 0x25, 0x27, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27,
+ 0x27, 0x27, 0x00, 0x27, 0x27, 0x27, 0x00, 0x25, 0x27, 0x00, 0x25, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x29, 0x28, 0x2A, 0x2A, 0x2A, 0x28, 0x28, 0x28,
+ 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x25, 0x27, 0x27, 0x27, 0x27, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x27,
+ 0x27, 0x00, 0x27, 0x27, 0x27, 0x2B, 0x2B, 0x29, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x29, 0x29, 0x28, 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x27, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x29, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2A,
+ 0x2A, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x28, 0x26, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x29, 0x29, 0x29, 0x2B,
+ 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x29,
+ 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x28,
+ 0x28, 0x28, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29,
+ 0x29, 0x29, 0x2A, 0x2D, 0x29, 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x2D, 0x2D, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29,
+ 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x28, 0x26,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x29,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x28, 0x29, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x29, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x1B, 0x1B, 0x28, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2A, 0x2C, 0x2C,
+ 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x28, 0x26,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2B, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28,
+ 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x28, 0x2D, 0x2D, 0x2A, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x29, 0x2D,
+ 0x2D, 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2B, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E,
+ 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x29, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x2C, 0x2C, 0x2C, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29,
+ 0x29, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x28, 0x26, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x2D,
+ 0x2D, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x1B, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x29, 0x29, 0x26, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x28, 0x2F, 0x1B, 0x2F, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x00, 0x00, 0x2B, 0x2B,
+ 0x2C, 0x2C, 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x28, 0x2F,
+ 0x1B, 0x2F, 0x1B, 0x2F, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x00, 0x00,
+ 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x1B, 0x2C, 0x00, 0x00, 0x00, 0x00,
+ 0x2B, 0x1B, 0x7B, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B,
+ 0x28, 0x2D, 0x2F, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x29,
+ 0x2C, 0x2C, 0x2C, 0x2B, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2B,
+ 0x00, 0x00, 0x00, 0x2B, 0x28, 0x7B, 0x2F, 0x7B, 0x7B, 0x2F, 0x7B, 0x1B,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x2D, 0x28, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x1B,
+ 0x2F, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2E, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x1B, 0x2C, 0x00, 0x00, 0x00, 0x2F, 0x1B, 0x7B, 0x2F, 0x7B,
+ 0x7B, 0x2F, 0x7B, 0x1B, 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x2F, 0x1B, 0x2F,
+ 0x1B, 0x2F, 0x1B, 0x2F, 0x1B, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C,
+ 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x2F,
+ 0x2F, 0x7B, 0x7B, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x1B, 0x28,
+ 0x28, 0x2F, 0x2F, 0x1B, 0x2F, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x2D, 0x2E,
+ 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x2C,
+ 0x00, 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B,
+ 0x7B, 0x7B, 0x1B, 0x2D, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x1B, 0x2F, 0x1B,
+ 0x2F, 0x1B, 0x2C, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x29, 0x2B, 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x1B, 0x28, 0x28, 0x2F, 0x2B, 0x2B, 0x2F,
+ 0x2F, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x2B, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C,
+ 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x2C, 0x00, 0x00, 0x00, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x7B, 0x1B, 0x28, 0x2D,
+ 0x2F, 0x2B, 0x2B, 0x2B, 0x2F, 0x2F, 0x2F, 0x1B, 0x2F, 0x1B, 0x2B, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x2C, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2B,
+ 0x2F, 0x2F, 0x00, 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B,
+ 0x1B, 0x1B, 0x28, 0x28, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2F, 0x1B, 0x2F,
+ 0x1B, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29,
+ 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2B, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x28,
+ 0x28, 0x28, 0x1B, 0x2C, 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x2F, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x2F, 0x2F, 0x1B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x00, 0x00, 0x2B,
+ 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2B, 0x00, 0x28, 0x1B, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x28, 0x2B,
+ 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2F, 0x2F, 0x2B, 0x2B, 0x2B, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C,
+ 0x2C, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x2C,
+ 0x00, 0x00, 0x29, 0x1B, 0x1B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x28,
+ 0x28, 0x2D, 0x2D, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2C, 0x2C, 0x2C, 0x2B,
+ 0x2B, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x29, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B,
+ 0x2C, 0x2C, 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x2B, 0x29, 0x1B, 0x1B, 0x1B,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x29, 0x29, 0x29, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2A, 0x29, 0x2C, 0x2C, 0x2A, 0x2A, 0x2C, 0x2E, 0x2E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2B, 0x29, 0x29, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x29, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2A, 0x28, 0x29, 0x29, 0x2C, 0x2A, 0x2A, 0x2A, 0x2C, 0x2E,
+ 0x2A, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x28,
+ 0x1B, 0x1B, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x2D, 0x2E, 0x2A, 0x2E, 0x2A, 0x2E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C,
+ 0x2C, 0x28, 0x28, 0x28, 0x28, 0x29, 0x1B, 0x1B, 0x29, 0x29, 0x29, 0x28,
+ 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2D, 0x26, 0x2D, 0x2E, 0x2E, 0x2A, 0x2E,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2D, 0x26, 0x2D, 0x2D,
+ 0x26, 0x2A, 0x26, 0x2A, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x2C,
+ 0x2C, 0x2C, 0x28, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2E, 0x2D, 0x2D, 0x2E,
+ 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2A, 0x2E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x28, 0x2C, 0x2C, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2E, 0x2A,
+ 0x2D, 0x2E, 0x26, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2E,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x28, 0x28, 0x2C, 0x2B, 0x2C, 0x2B, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2E, 0x26, 0x26, 0x2D, 0x2D, 0x2D, 0x26, 0x2D, 0x2D,
+ 0x26, 0x2D, 0x2D, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2B, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x2B, 0x2B, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x26, 0x26, 0x2A, 0x2A, 0x2A, 0x26,
+ 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x28, 0x28, 0x2C,
+ 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x26, 0x26, 0x26, 0x2D, 0x2D, 0x26, 0x26, 0x2D, 0x2D, 0x2E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x2C, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2E, 0x26, 0x2A, 0x2A, 0x2A, 0x26, 0x26, 0x2D, 0x2D, 0x2E,
+ 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x28, 0x28, 0x2C, 0x2C, 0x2B,
+ 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A,
+ 0x2A, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask4LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xEE, 0x00, 0x0C, 0x00,
+ 0x00, 0x00, 0x07, 0x7F, 0xDD, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x2F, 0xFB,
+ 0xDD, 0xB0, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0xC0,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8E,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00,
+ 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x07, 0xFF, 0xF8, 0x00,
+ 0x00, 0x00, 0x3F, 0x80, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xC0,
+ 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite4LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25,
+ 0x25, 0x25, 0x00, 0x25, 0x25, 0x25, 0x25, 0x00, 0x25, 0x25, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25,
+ 0x00, 0x25, 0x27, 0x27, 0x27, 0x25, 0x25, 0x27, 0x27, 0x27, 0x00, 0x25,
+ 0x27, 0x27, 0x00, 0x25, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00,
+ 0x25, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27,
+ 0x27, 0x27, 0x00, 0x27, 0x27, 0x27, 0x00, 0x25, 0x27, 0x00, 0x25, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x26, 0x26, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x27, 0x25, 0x27, 0x27, 0x27, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x27,
+ 0x27, 0x00, 0x27, 0x27, 0x27, 0x2B, 0x2B, 0x29, 0x28, 0x2A, 0x2A, 0x2A,
+ 0x28, 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x27, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x29, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x29, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x28, 0x28, 0x28, 0x26, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x29, 0x29, 0x2B,
+ 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x29, 0x28,
+ 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x28,
+ 0x28, 0x28, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x29, 0x29, 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x2D, 0x2D, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x2A, 0x2D, 0x29, 0x28, 0x28, 0x26, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x29,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x28, 0x29, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29,
+ 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x29, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29,
+ 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x1B, 0x1B, 0x28, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2A, 0x2C, 0x2C,
+ 0x2C, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x26, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28,
+ 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x28, 0x2D, 0x2D, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29,
+ 0x29, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E,
+ 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x29, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x2C, 0x2C, 0x2C, 0x29,
+ 0x29, 0x29, 0x2D, 0x2D, 0x28, 0x28, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29,
+ 0x29, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x26, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x2D,
+ 0x2D, 0x26, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x1B, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x29, 0x29, 0x26, 0x00, 0x00, 0x2B, 0x2B, 0x2C, 0x2B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x00, 0x00, 0x2B, 0x2C,
+ 0x2C, 0x1B, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x28, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x00, 0x00,
+ 0x2B, 0x2B, 0x2C, 0x28, 0x28, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x7B, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B,
+ 0x28, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x29,
+ 0x2C, 0x2C, 0x2C, 0x2B, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x1B, 0x2C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x7B, 0x2F, 0x7B, 0x7B, 0x2F, 0x7B, 0x1B,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2F, 0x2F,
+ 0x2F, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2E, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x28,
+ 0x28, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x1B, 0x7B, 0x2F, 0x7B,
+ 0x7B, 0x2F, 0x7B, 0x1B, 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x2F,
+ 0x2F, 0x2F, 0x1B, 0x1B, 0x1B, 0x1B, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C,
+ 0x29, 0x29, 0x29, 0x29, 0x29, 0x1B, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x2F,
+ 0x2F, 0x7B, 0x7B, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x1B, 0x28,
+ 0x28, 0x28, 0x2F, 0x2F, 0x2F, 0x1B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2E,
+ 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x2C, 0x00,
+ 0x00, 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B,
+ 0x7B, 0x7B, 0x1B, 0x28, 0x28, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x2F, 0x2C, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x2B, 0x00, 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x1B, 0x28, 0x28, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2B, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x2C,
+ 0x29, 0x28, 0x29, 0x29, 0x29, 0x1B, 0x2C, 0x00, 0x01, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x7B, 0x1B, 0x28, 0x28,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x2F,
+ 0x2B, 0x2B, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x2C, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x28, 0x28, 0x29, 0x2B, 0x00,
+ 0x00, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B,
+ 0x1B, 0x1B, 0x28, 0x2F, 0x2B, 0x2B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29,
+ 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x00, 0x2C, 0x2C, 0x2C, 0x28, 0x29, 0x29,
+ 0x29, 0x1B, 0x2C, 0x00, 0x00, 0x28, 0x1B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x7B, 0x7B, 0x7B, 0x1B, 0x28, 0x2F, 0x2B, 0x2B, 0x2B, 0x2F,
+ 0x2F, 0x2F, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x2F, 0x2C, 0x2C, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C, 0x00, 0x00, 0x2B,
+ 0x2C, 0x2C, 0x2C, 0x28, 0x28, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x29, 0x1B,
+ 0x1B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x7B, 0x7B, 0x1B, 0x28, 0x2F,
+ 0x2B, 0x2B, 0x2B, 0x2B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2C,
+ 0x2B, 0x2B, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2C,
+ 0x2C, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x2C, 0x00,
+ 0x00, 0x00, 0x00, 0x2B, 0x29, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x28,
+ 0x28, 0x2D, 0x2D, 0x7B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2F, 0x2F, 0x2F, 0x1B,
+ 0x1B, 0x2F, 0x2B, 0x2B, 0x2B, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x29, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B,
+ 0x2B, 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x29, 0x1B, 0x1B,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2D, 0x2D, 0x7B, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x2F, 0x2F, 0x1B, 0x2F, 0x2C, 0x2B, 0x2B, 0x2C, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2A, 0x29, 0x2C, 0x2C, 0x2A, 0x2A, 0x2C, 0x2E, 0x2E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x2B, 0x29, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x29, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2F, 0x2F, 0x2D, 0x29, 0x29, 0x28, 0x29, 0x29,
+ 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2A, 0x28, 0x29, 0x29, 0x2C, 0x2A, 0x2A, 0x2A, 0x2C, 0x26,
+ 0x2A, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x28,
+ 0x1B, 0x1B, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x2D, 0x26, 0x2A, 0x2E, 0x2E, 0x2A, 0x2E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C,
+ 0x2C, 0x28, 0x28, 0x28, 0x28, 0x29, 0x1B, 0x1B, 0x29, 0x29, 0x29, 0x28,
+ 0x29, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2D, 0x2E, 0x2D, 0x26, 0x2E, 0x26, 0x2A,
+ 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2D, 0x2E, 0x2D, 0x2D,
+ 0x2D, 0x26, 0x2A, 0x26, 0x2A, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x2C,
+ 0x2C, 0x2C, 0x28, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2E, 0x2D, 0x2D, 0x2E,
+ 0x2E, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2A, 0x2E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x28, 0x2C, 0x2C, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2E, 0x2A,
+ 0x2D, 0x2E, 0x2E, 0x26, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2D,
+ 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x28, 0x28, 0x2B, 0x2B, 0x2C, 0x2B, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x26, 0x26, 0x2D, 0x2D, 0x2D, 0x26, 0x2D,
+ 0x2D, 0x26, 0x2D, 0x2D, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2B, 0x28, 0x28, 0x2C, 0x2B, 0x2B, 0x2B, 0x2B, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x26, 0x26, 0x2A, 0x2A, 0x2A,
+ 0x26, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x2E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x2C, 0x2C,
+ 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x26, 0x26, 0x26, 0x2D, 0x2D, 0x26, 0x26, 0x2D, 0x2D, 0x2E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2C, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2E, 0x2E, 0x26, 0x2A, 0x2A, 0x2A, 0x26, 0x26, 0x2D, 0x2D,
+ 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x2B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E,
+ 0x2A, 0x2A, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x28,
+ 0x28, 0x2C, 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask4LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xEE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x7F, 0xDD, 0xC0, 0x18, 0x00, 0x00, 0x00, 0x2F, 0x7B,
+ 0xDD, 0xB0, 0x7E, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xBF, 0xFF, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC4, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF9, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7E,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1E, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x04, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0x00,
+ 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x03, 0xFF, 0xFC, 0x00,
+ 0x00, 0x00, 0x7E, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0x00,
+ 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite4RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25,
+ 0x00, 0x25, 0x25, 0x25, 0x25, 0x00, 0x25, 0x25, 0x25, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x26, 0x28, 0x28,
+ 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25,
+ 0x25, 0x00, 0x27, 0x27, 0x25, 0x00, 0x27, 0x27, 0x27, 0x25, 0x25, 0x27,
+ 0x27, 0x27, 0x25, 0x00, 0x25, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26,
+ 0x28, 0x28, 0x28, 0x2A, 0x2A, 0x2A, 0x28, 0x29, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x25, 0x00, 0x27, 0x25, 0x00, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27,
+ 0x27, 0x27, 0x00, 0x27, 0x27, 0x27, 0x27, 0x25, 0x27, 0x27, 0x27, 0x25,
+ 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x26, 0x28, 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x29, 0x2B, 0x2B, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x27, 0x27, 0x27, 0x27, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28, 0x29, 0x2A, 0x2A, 0x2A,
+ 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x27, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28,
+ 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x29, 0x29, 0x29, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x26, 0x28, 0x28, 0x29, 0x2D, 0x2A, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x28, 0x28, 0x28, 0x29, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x29, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2D, 0x2D, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x29, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x29, 0x29,
+ 0x29, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2A,
+ 0x2A, 0x2A, 0x28, 0x29, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x29, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x26, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x29, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2C, 0x2C, 0x2C, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x1B, 0x1B, 0x7B,
+ 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28, 0x2D,
+ 0x2D, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2A, 0x2D, 0x2D, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D,
+ 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x2B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x26, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x2C, 0x2C, 0x2C,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D,
+ 0x2E, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x28, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x29, 0x29, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2C, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E,
+ 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x28, 0x1B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x2D,
+ 0x2D, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B,
+ 0x00, 0x00, 0x00, 0x26, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2B, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2C, 0x2C, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2F, 0x1B, 0x2F, 0x28, 0x28, 0x28, 0x1B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x2B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2C, 0x1B, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x2B,
+ 0x00, 0x00, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2F, 0x1B, 0x2F, 0x1B,
+ 0x2F, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x2C, 0x2C, 0x2B, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x2F, 0x2D, 0x28, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x7B, 0x1B, 0x2B, 0x00, 0x00, 0x00, 0x00,
+ 0x2C, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2D, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x28, 0x2D,
+ 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x2F, 0x7B, 0x7B, 0x2F, 0x7B, 0x28,
+ 0x2B, 0x00, 0x00, 0x00, 0x2B, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x1B, 0x2F, 0x1B, 0x2F, 0x1B,
+ 0x2F, 0x1B, 0x2F, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x1B, 0x7B, 0x2F, 0x7B,
+ 0x7B, 0x2F, 0x7B, 0x1B, 0x2F, 0x00, 0x00, 0x00, 0x2C, 0x1B, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2F, 0x1B,
+ 0x2F, 0x1B, 0x2F, 0x2F, 0x1B, 0x2F, 0x2F, 0x28, 0x28, 0x1B, 0x7B, 0x7B,
+ 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x7B, 0x7B, 0x2F, 0x2F, 0x00, 0x00, 0x00,
+ 0x2B, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x2C, 0x1B, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2D, 0x1B, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x00, 0x00, 0x2C, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x28, 0x29,
+ 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2B, 0x2F, 0x1B, 0x2F, 0x1B, 0x2F, 0x2F,
+ 0x2F, 0x2B, 0x2B, 0x2F, 0x28, 0x28, 0x1B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x00, 0x2B, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x28,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2B, 0x1B, 0x2F,
+ 0x1B, 0x2F, 0x2F, 0x2F, 0x2B, 0x2B, 0x2B, 0x2F, 0x2D, 0x28, 0x1B, 0x7B,
+ 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x00, 0x00, 0x00,
+ 0x2C, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x29, 0x2C, 0x2C, 0x2C, 0x2B, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x2C, 0x2C, 0x1B, 0x2F, 0x1B, 0x2F, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x28, 0x28, 0x1B, 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x00, 0x00, 0x2F, 0x2F, 0x2B, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2C, 0x2C,
+ 0x2B, 0x00, 0x00, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x1B, 0x2F, 0x2F, 0x2B,
+ 0x2B, 0x2B, 0x2B, 0x2B, 0x2F, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x00, 0x2C, 0x28, 0x28, 0x28,
+ 0x2C, 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x28, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2B, 0x2B,
+ 0x2B, 0x2F, 0x2F, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x28, 0x1B, 0x7B,
+ 0x7B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x1B, 0x28, 0x00,
+ 0x2B, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2B, 0x2B, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x2D, 0x2D, 0x28, 0x28, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x1B,
+ 0x1B, 0x29, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2E, 0x2E, 0x2C, 0x2A, 0x2A, 0x2C, 0x2C, 0x29, 0x2A, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x29, 0x29, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x1B, 0x1B, 0x1B, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x2A, 0x2E, 0x2C, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x29, 0x29, 0x28, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29,
+ 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x29, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2A, 0x2E, 0x2A,
+ 0x2E, 0x2D, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29,
+ 0x29, 0x29, 0x1B, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2E, 0x2A, 0x2E, 0x2E, 0x2D, 0x26, 0x2D, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x29,
+ 0x28, 0x29, 0x29, 0x29, 0x1B, 0x1B, 0x29, 0x28, 0x28, 0x28, 0x28, 0x2C,
+ 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2E, 0x2A, 0x26, 0x2A, 0x26, 0x2D, 0x2D, 0x26, 0x2D,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x28,
+ 0x28, 0x2C, 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2A, 0x26, 0x2D, 0x2D,
+ 0x26, 0x2D, 0x2D, 0x26, 0x2E, 0x2D, 0x2D, 0x2E, 0x2C, 0x2C, 0x2C, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2C, 0x28, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2E, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x26, 0x2E, 0x2D,
+ 0x2A, 0x2E, 0x2C, 0x2C, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2C, 0x2C, 0x28, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2D,
+ 0x2D, 0x2D, 0x26, 0x26, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x2B, 0x2C, 0x2B, 0x2C, 0x28, 0x28, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2D, 0x2D,
+ 0x26, 0x2D, 0x2D, 0x26, 0x26, 0x2A, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28,
+ 0x2B, 0x00, 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, 0x2D, 0x2D, 0x26, 0x26, 0x2D, 0x2D, 0x26, 0x26, 0x26,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2C,
+ 0x2C, 0x28, 0x28, 0x2B, 0x00, 0x00, 0x00, 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, 0x2E, 0x2D, 0x2D, 0x26,
+ 0x26, 0x2A, 0x2A, 0x2A, 0x26, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x2C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x2E, 0x2A, 0x2A, 0x2A,
+ 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask4RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x77, 0xBC, 0x00, 0x00, 0x00,
+ 0x00, 0xFC, 0x03, 0xBB, 0xFE, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0x0D, 0xBB,
+ 0xDF, 0xF4, 0x00, 0x00, 0x03, 0xFF, 0xFD, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x9F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x70, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xFF, 0xFC,
+ 0x00, 0x7F, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0xFE, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xC0, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80,
+ 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite4RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25,
+ 0x00, 0x25, 0x25, 0x25, 0x25, 0x00, 0x25, 0x25, 0x25, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26,
+ 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25,
+ 0x25, 0x00, 0x27, 0x27, 0x25, 0x00, 0x27, 0x27, 0x27, 0x25, 0x25, 0x27,
+ 0x27, 0x27, 0x25, 0x00, 0x25, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x26, 0x26, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x25, 0x00, 0x27, 0x25, 0x00, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27,
+ 0x27, 0x27, 0x00, 0x27, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27, 0x27, 0x25,
+ 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28, 0x28, 0x2A, 0x2A, 0x2A, 0x28,
+ 0x29, 0x2B, 0x2B, 0x27, 0x27, 0x27, 0x00, 0x27, 0x27, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x29, 0x27, 0x27, 0x27, 0x25, 0x27, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28, 0x28, 0x29,
+ 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x27, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28,
+ 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2B, 0x2B,
+ 0x2B, 0x29, 0x29, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x26, 0x28, 0x28, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x29, 0x29, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x28, 0x28, 0x28, 0x29, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28, 0x29, 0x2D, 0x2A, 0x29,
+ 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2D, 0x2D, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x29, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x28,
+ 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x2A,
+ 0x2A, 0x2A, 0x28, 0x29, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x29, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x26, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x29, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x29, 0x29, 0x2C, 0x2C, 0x2C, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x1B, 0x1B, 0x7B,
+ 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x28, 0x29,
+ 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2A, 0x2D, 0x2D, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D,
+ 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x26, 0x28, 0x28, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x2C,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2E, 0x2D,
+ 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D,
+ 0x2E, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B,
+ 0x1B, 0x1B, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x29, 0x29, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2C, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E,
+ 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x28, 0x1B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x26, 0x2D,
+ 0x2D, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C, 0x2B,
+ 0x2B, 0x00, 0x00, 0x26, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x1B, 0x1B, 0x1B, 0x7B, 0x7B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x2C, 0x1B, 0x2C, 0x2C, 0x2B, 0x00, 0x00, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2C, 0x2C, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2D, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x1B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x1B, 0x1B, 0x7B, 0x7B, 0x7B, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x29, 0x28, 0x28, 0x2C, 0x2B, 0x2B,
+ 0x00, 0x00, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x1B, 0x29,
+ 0x29, 0x29, 0x2C, 0x2C, 0x2B, 0x2C, 0x2C, 0x2C, 0x29, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x2D, 0x2D, 0x2D, 0x28, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x7B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x2B, 0x29, 0x28, 0x28, 0x28, 0x29, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x2F, 0x2F, 0x2F, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2D,
+ 0x1B, 0x7B, 0x7B, 0x7B, 0x1B, 0x7B, 0x2F, 0x7B, 0x7B, 0x2F, 0x7B, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x1B, 0x29, 0x29, 0x29, 0x29, 0x29,
+ 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D, 0x2E, 0x2E,
+ 0x2E, 0x2E, 0x2D, 0x2E, 0x2D, 0x2D, 0x1B, 0x1B, 0x1B, 0x1B, 0x2F, 0x2F,
+ 0x2F, 0x28, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B, 0x1B, 0x7B, 0x2F, 0x7B,
+ 0x7B, 0x2F, 0x7B, 0x1B, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x1B, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2D, 0x2E, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x1B, 0x2F, 0x2F, 0x2F, 0x28, 0x28, 0x28, 0x1B, 0x7B, 0x7B,
+ 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x7B, 0x7B, 0x2F, 0x2F, 0x00, 0x00, 0x00,
+ 0x00, 0x2B, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2C,
+ 0x2F, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x28,
+ 0x28, 0x1B, 0x7B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x00, 0x00, 0x00, 0x2C, 0x1B, 0x29, 0x29, 0x29, 0x28, 0x29,
+ 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x28, 0x28, 0x1B, 0x7B, 0x1B, 0x7B, 0x7B, 0x7B,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x00, 0x00, 0x2B, 0x29, 0x28,
+ 0x28, 0x28, 0x29, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28, 0x28, 0x29, 0x28, 0x29, 0x28, 0x28,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2B, 0x2B, 0x2F, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x28, 0x28, 0x1B, 0x7B,
+ 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x00,
+ 0x00, 0x2C, 0x1B, 0x29, 0x29, 0x29, 0x28, 0x2C, 0x2C, 0x2C, 0x00, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2C,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2B, 0x2B,
+ 0x2F, 0x28, 0x1B, 0x1B, 0x7B, 0x7B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x00, 0x00, 0x2B, 0x29, 0x28, 0x28, 0x2C, 0x2C, 0x2C,
+ 0x2B, 0x00, 0x00, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x29,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x2C, 0x2C, 0x2F, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x2F, 0x2F,
+ 0x2F, 0x2B, 0x2B, 0x2B, 0x2F, 0x28, 0x1B, 0x7B, 0x7B, 0x7B, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x1B, 0x28, 0x00, 0x00, 0x2C, 0x28, 0x2C,
+ 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x28, 0x29, 0x29, 0x29, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2B, 0x2B, 0x2C, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2B, 0x2B, 0x2B, 0x2B, 0x2F, 0x28, 0x1B, 0x7B,
+ 0x7B, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x1B, 0x1B, 0x29, 0x00, 0x00,
+ 0x00, 0x2B, 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x29, 0x29,
+ 0x29, 0x29, 0x28, 0x29, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2B,
+ 0x2B, 0x2B, 0x2F, 0x1B, 0x1B, 0x2F, 0x2F, 0x2F, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x7B, 0x2D, 0x2D, 0x28, 0x28, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x29,
+ 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2E, 0x2E, 0x2C, 0x2A, 0x2A, 0x2C, 0x2C, 0x29, 0x2A, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x28, 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2B, 0x2B, 0x2C, 0x2F, 0x1B, 0x2F, 0x2F,
+ 0x2B, 0x2B, 0x2B, 0x2B, 0x7B, 0x2D, 0x2D, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x1B, 0x1B, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2E, 0x2E, 0x2A, 0x26, 0x2C, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x29, 0x29, 0x28, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29,
+ 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x28, 0x29,
+ 0x29, 0x2D, 0x2F, 0x2F, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29, 0x29, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x29, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2A, 0x2E, 0x2E, 0x2A,
+ 0x26, 0x2D, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x29, 0x29,
+ 0x29, 0x29, 0x1B, 0x1B, 0x28, 0x28, 0x28, 0x28, 0x2C, 0x2C, 0x2B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E,
+ 0x2A, 0x26, 0x2E, 0x26, 0x2D, 0x2E, 0x2D, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x2D, 0x2D, 0x2D,
+ 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x28, 0x29,
+ 0x28, 0x29, 0x29, 0x29, 0x1B, 0x1B, 0x29, 0x28, 0x28, 0x28, 0x28, 0x2C,
+ 0x2C, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x2E, 0x2A, 0x26, 0x2A, 0x26, 0x2D, 0x2D, 0x2D, 0x2E, 0x2D,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28,
+ 0x29, 0x28, 0x29, 0x28, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x28,
+ 0x28, 0x2C, 0x2C, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2A, 0x26, 0x2D, 0x2D, 0x26,
+ 0x2D, 0x2D, 0x26, 0x2E, 0x2E, 0x2D, 0x2D, 0x2E, 0x2C, 0x2C, 0x2C, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x29, 0x28, 0x29, 0x28, 0x29, 0x28, 0x29,
+ 0x28, 0x29, 0x28, 0x29, 0x28, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2C, 0x28, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x2B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E,
+ 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x26, 0x2E, 0x2E, 0x2D,
+ 0x2A, 0x2E, 0x2C, 0x2C, 0x2C, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2A, 0x2C, 0x2C, 0x28, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x2E, 0x2D, 0x2D, 0x26, 0x2D, 0x2D, 0x26, 0x2D, 0x2D,
+ 0x2D, 0x26, 0x26, 0x2E, 0x2A, 0x2A, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+ 0x2A, 0x2C, 0x2B, 0x2C, 0x2B, 0x2B, 0x28, 0x28, 0x2B, 0x2B, 0x2B, 0x2B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2E, 0x2D, 0x2D, 0x26,
+ 0x2D, 0x2D, 0x26, 0x26, 0x2A, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x2A, 0x2A, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C,
+ 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2B, 0x2B, 0x2B, 0x2B, 0x2C, 0x28, 0x28,
+ 0x2B, 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, 0x2D, 0x2D, 0x26, 0x26, 0x2D, 0x2D, 0x26, 0x26, 0x26, 0x2A,
+ 0x2A, 0x2A, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B,
+ 0x2C, 0x2C, 0x28, 0x28, 0x00, 0x00, 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, 0x2E, 0x2D, 0x2D, 0x26, 0x26,
+ 0x2A, 0x2A, 0x2A, 0x26, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x2C, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E, 0x2A, 0x2A, 0x2E, 0x2E, 0x2E,
+ 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2B, 0x2C, 0x2C, 0x28, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x2E, 0x2A, 0x2A, 0x2A, 0x2E,
+ 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x2C, 0x2C, 0x28,
+ 0x28, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x2E, 0x2E, 0x2E, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask4RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xBC, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x03, 0xBB, 0xFE, 0xE0, 0x00, 0x00, 0x00, 0x7E, 0x0D, 0xBB,
+ 0xDE, 0xF4, 0x00, 0x00, 0x00, 0xFF, 0xFD, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x23, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x79, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x7F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x9F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x7E, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x78, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x20, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xF0,
+ 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x7F, 0x00, 0x00,
+ 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x00,
+ 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite5LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x30, 0x30, 0x12, 0x12, 0x0A, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x30, 0x12, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x10, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x0A, 0x12, 0x30, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x10, 0x0B, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x30, 0x0A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x12, 0x10, 0x0B, 0x10, 0x0A, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x31, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x10, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x31, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x10, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x0B, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x0A, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x0B, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0A, 0x12, 0x12,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x10, 0x0B, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x0B, 0x11, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x12,
+ 0x10, 0x0B, 0x11, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0B, 0x0B, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0C, 0x0B, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x11, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0B, 0x0A, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x11, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x0C, 0x0B, 0x10, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x13, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x10, 0x13,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0B, 0x0B, 0x31, 0x10, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x31, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x31, 0x31, 0x31, 0x10, 0x0A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x31,
+ 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x31, 0x31, 0x0C, 0x31,
+ 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x12, 0x12, 0x31, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x12, 0x12, 0x10, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x31,
+ 0x31, 0x0C, 0x0C, 0x31, 0x11, 0x13, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x31, 0x31, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x10, 0x0B, 0x31, 0x31, 0x31, 0x0C, 0x0C, 0x11, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x12, 0x12, 0x0A,
+ 0x00, 0x00, 0x00, 0x0A, 0x12, 0x10, 0x0B, 0x31, 0x31, 0x0C, 0x0C, 0x0C,
+ 0x31, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12,
+ 0x31, 0x31, 0x0A, 0x31, 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x10, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x0A, 0x12, 0x10, 0x10, 0x0B, 0x31,
+ 0x31, 0x31, 0x0C, 0x0C, 0x11, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x13, 0x10, 0x10, 0x13, 0x31, 0x0C, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12,
+ 0x10, 0x0B, 0x0B, 0x31, 0x31, 0x0C, 0x0C, 0x0C, 0x31, 0x11, 0x13, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x0C, 0x7B, 0x7B, 0x0C, 0x31,
+ 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x0B, 0x31, 0x31, 0x31, 0x0C, 0x0C,
+ 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x24,
+ 0x7B, 0x7B, 0x24, 0x31, 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x0B, 0x31,
+ 0x31, 0x0C, 0x0C, 0x0C, 0x31, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x11, 0x11, 0x10, 0x7B, 0x31, 0x31, 0x7B, 0x31, 0x31, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x10, 0x0B, 0x31, 0x31, 0x31, 0x0C, 0x0C, 0x11, 0x11, 0x13, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x31,
+ 0x31, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0A, 0x0A, 0x12, 0x10, 0x0B, 0x31, 0x31, 0x0C, 0x0C, 0x0C,
+ 0x31, 0x11, 0x10, 0x00, 0x00, 0x00, 0x31, 0x11, 0x11, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x0A, 0x31, 0x31, 0x12, 0x12, 0x12, 0x10, 0x1E, 0x24, 0x24,
+ 0x15, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C,
+ 0x10, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x0B, 0x31,
+ 0x31, 0x31, 0x0C, 0x0C, 0x11, 0x11, 0x0A, 0x00, 0x00, 0x31, 0x15, 0x15,
+ 0x11, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x31, 0x31, 0x12, 0x12, 0x15,
+ 0x24, 0x31, 0x31, 0x15, 0x31, 0x24, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x0B, 0x31, 0x31, 0x0C, 0x0C, 0x31, 0x11, 0x13, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x31,
+ 0x31, 0x12, 0x15, 0x10, 0x1E, 0x31, 0x1E, 0x1E, 0x24, 0x24, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x12, 0x12, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x31, 0x31, 0x0C, 0x11,
+ 0x11, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x13, 0x10, 0x12,
+ 0x12, 0x12, 0x0A, 0x31, 0x31, 0x1E, 0x10, 0x10, 0x15, 0x31, 0x31, 0x1E,
+ 0x31, 0x15, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x10, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
+ 0x0B, 0x31, 0x31, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x31,
+ 0x31, 0x31, 0x10, 0x10, 0x12, 0x12, 0x12, 0x24, 0x1E, 0x10, 0x10, 0x11,
+ 0x10, 0x15, 0x31, 0x1E, 0x24, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x31, 0x10, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x31, 0x10, 0x12, 0x12, 0x24, 0x31,
+ 0x11, 0x10, 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x12,
+ 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x10, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x0B,
+ 0x10, 0x12, 0x31, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x10, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x10, 0x12, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x12, 0x31,
+ 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x12, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B,
+ 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x0B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0B, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x0B, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x31, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x31, 0x0B, 0x10, 0x0A, 0x00, 0x12,
+ 0x12, 0x12, 0x0B, 0x31, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31,
+ 0x10, 0x10, 0x12, 0x00, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x10, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x31, 0x10, 0x10, 0x12, 0x00, 0x00, 0x12, 0x12,
+ 0x0B, 0x31, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x11, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x10, 0x10, 0x10,
+ 0x12, 0x12, 0x00, 0x00, 0x12, 0x12, 0x31, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x31, 0x10, 0x10, 0x10, 0x12, 0x12, 0x00, 0x00, 0x12, 0x12, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x11, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x31, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x12, 0x10, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x0A, 0x10, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask5LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 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, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x30,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x78, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0xFC,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFC, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x87, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xBF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x8F, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x81, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xF8,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x70, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x30, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xDF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xEF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x01, 0xF3, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xFC, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x7F, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x00, 0x3E, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0x07,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite5LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x30, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x10, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x0A, 0x12, 0x30, 0x0A, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x10, 0x0B, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x30, 0x0A, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x12, 0x10, 0x0B, 0x10, 0x0A, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0A, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x31, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x10, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x31, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x10, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x0B, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x0A, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x0B, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0A, 0x12, 0x12,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x10, 0x0B, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x0B, 0x11, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x12,
+ 0x10, 0x0B, 0x11, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0B, 0x0B, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0C, 0x0B, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x11, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0B, 0x0A, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x11, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x0C, 0x0B, 0x10, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x13, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x10,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0B, 0x0B, 0x0B, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x31, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x31, 0x31, 0x31, 0x31, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x31,
+ 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x31, 0x31, 0x31, 0x0C,
+ 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x12, 0x12, 0x31, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x12, 0x12, 0x10, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x31,
+ 0x31, 0x0C, 0x0C, 0x0C, 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x31, 0x31, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x10, 0x0B, 0x31, 0x31, 0x31, 0x31, 0x0C, 0x0C, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x12, 0x12, 0x0A,
+ 0x00, 0x00, 0x00, 0x0A, 0x12, 0x10, 0x0B, 0x31, 0x31, 0x0C, 0x0C, 0x0C,
+ 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12,
+ 0x31, 0x31, 0x0A, 0x31, 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x10, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x0A, 0x12, 0x10, 0x10, 0x0B, 0x31,
+ 0x31, 0x31, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x13, 0x10, 0x10, 0x13, 0x31, 0x0C, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12,
+ 0x10, 0x0B, 0x0B, 0x31, 0x31, 0x0C, 0x31, 0x31, 0x0C, 0x0C, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x0C, 0x7B, 0x7B, 0x0C, 0x31,
+ 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x0B, 0x31, 0x31, 0x31, 0x0C, 0x0C,
+ 0x0C, 0x0C, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x24,
+ 0x7B, 0x7B, 0x24, 0x31, 0x0C, 0x10, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x0B, 0x31,
+ 0x31, 0x0C, 0x31, 0x31, 0x0C, 0x0C, 0x11, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x11, 0x11, 0x10, 0x7B, 0x31, 0x31, 0x7B, 0x31, 0x31, 0x10, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x10, 0x0B, 0x31, 0x31, 0x31, 0x0C, 0x0C, 0x0C, 0x0C, 0x31, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x31,
+ 0x31, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0A, 0x0A, 0x12, 0x10, 0x0B, 0x31, 0x31, 0x0C, 0x31, 0x31,
+ 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x31, 0x11, 0x11, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x0A, 0x31, 0x31, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0C,
+ 0x10, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x00, 0x00, 0x0A, 0x10, 0x0B, 0x31,
+ 0x31, 0x31, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x31, 0x15, 0x15,
+ 0x11, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x31, 0x31, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0C, 0x10, 0x12, 0x12, 0x0A, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x0B, 0x31, 0x31, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x31,
+ 0x31, 0x12, 0x12, 0x12, 0x10, 0x1E, 0x24, 0x24, 0x15, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x12, 0x12, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x31, 0x31, 0x0C, 0x0C,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x31, 0x31, 0x13, 0x10, 0x12,
+ 0x12, 0x12, 0x0A, 0x31, 0x31, 0x1E, 0x12, 0x15, 0x24, 0x31, 0x31, 0x15,
+ 0x31, 0x24, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x10, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0B, 0x31, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31,
+ 0x31, 0x31, 0x10, 0x10, 0x12, 0x12, 0x12, 0x24, 0x1E, 0x10, 0x10, 0x11,
+ 0x10, 0x15, 0x31, 0x1E, 0x24, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x31, 0x10, 0x12, 0x12, 0x24, 0x31,
+ 0x11, 0x10, 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x12,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x0B,
+ 0x10, 0x12, 0x31, 0x11, 0x11, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x10, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x10, 0x12, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x12, 0x31,
+ 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x12, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B,
+ 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x0B, 0x10, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0B, 0x31, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x0B, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x13, 0x31, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x13, 0x31, 0x10, 0x10, 0x12, 0x00, 0x00,
+ 0x12, 0x12, 0x0B, 0x31, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x31, 0x10,
+ 0x10, 0x10, 0x12, 0x12, 0x00, 0x12, 0x12, 0x0B, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x10, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x31, 0x10, 0x10, 0x10, 0x12, 0x12, 0x00, 0x12, 0x12,
+ 0x0B, 0x31, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x11, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x10, 0x10,
+ 0x10, 0x12, 0x00, 0x12, 0x12, 0x12, 0x31, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x31, 0x11, 0x11, 0x10, 0x12, 0x00, 0x00, 0x12, 0x12, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x31, 0x31, 0x31, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x0A, 0x11, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x31, 0x31, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x12, 0x10, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x00, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask5LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x30,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x78, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0xF8, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0xF8,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFC, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x87, 0xFC, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFC,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xBF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xCF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x70,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x0F, 0xCF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xF7, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x03, 0xFB, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xFD, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7E, 0x7F, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x00, 0x3F, 0x1F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0x87,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x77, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite5RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x0A,
+ 0x12, 0x12, 0x30, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x12, 0x30, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x30, 0x12, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x10, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x30, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x0B,
+ 0x10, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0A, 0x10, 0x0B, 0x10, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x10,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0A, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0B, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x10, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x31, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x0B, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x0A, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0B, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0B, 0x10,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x0B, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0B, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x11, 0x0B, 0x10, 0x12, 0x10, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0B, 0x0C,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12,
+ 0x13, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0B,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x11, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x10,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x13, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x10, 0x12, 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x10, 0x0B, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x10, 0x31, 0x0B, 0x0B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12,
+ 0x12, 0x0A, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x10, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10,
+ 0x31, 0x31, 0x31, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31,
+ 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x13, 0x11, 0x31, 0x0C, 0x31, 0x31, 0x0B, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x31, 0x31, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x13, 0x11, 0x31, 0x0C, 0x0C, 0x31,
+ 0x31, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x10, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x31, 0x12, 0x12, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x0C, 0x0C, 0x31, 0x31, 0x31, 0x0B, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31,
+ 0x31, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x31, 0x0C, 0x0C, 0x0C, 0x31, 0x31, 0x0B, 0x10, 0x12,
+ 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x10, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x0C, 0x0C, 0x31, 0x31,
+ 0x31, 0x0B, 0x10, 0x10, 0x12, 0x0A, 0x00, 0x0A, 0x12, 0x12, 0x12, 0x10,
+ 0x31, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x0C, 0x31, 0x0A, 0x31, 0x31,
+ 0x12, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x31,
+ 0x0C, 0x0C, 0x0C, 0x31, 0x31, 0x0B, 0x0B, 0x10, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x0C,
+ 0x31, 0x13, 0x10, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x11, 0x0C, 0x0C, 0x31, 0x31, 0x31, 0x0B, 0x10, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x0C, 0x31, 0x0C, 0x7B, 0x7B, 0x0C, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x31, 0x0C, 0x0C, 0x0C, 0x31,
+ 0x31, 0x0B, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x0C, 0x31, 0x24, 0x7B, 0x7B,
+ 0x24, 0x10, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x11,
+ 0x0C, 0x0C, 0x31, 0x31, 0x31, 0x0B, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31,
+ 0x31, 0x7B, 0x31, 0x31, 0x7B, 0x10, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x31, 0x0C, 0x0C, 0x0C, 0x31, 0x31, 0x0B, 0x10, 0x12,
+ 0x0A, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x31, 0x31, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x11,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x11, 0x11, 0x0C, 0x0C, 0x31, 0x31,
+ 0x31, 0x0B, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x12, 0x10,
+ 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15,
+ 0x24, 0x24, 0x1E, 0x10, 0x12, 0x12, 0x12, 0x31, 0x31, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x11, 0x11, 0x31, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11,
+ 0x31, 0x0C, 0x0C, 0x31, 0x31, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x24, 0x31, 0x15, 0x31, 0x31, 0x24, 0x15, 0x12, 0x12, 0x31,
+ 0x31, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x11, 0x15, 0x15, 0x31, 0x00,
+ 0x00, 0x00, 0x0A, 0x11, 0x11, 0x0C, 0x31, 0x31, 0x0B, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x10, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x24, 0x24, 0x1E, 0x1E, 0x31, 0x1E,
+ 0x10, 0x15, 0x12, 0x31, 0x31, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31,
+ 0x31, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x31, 0x31, 0x0B,
+ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x12, 0x10,
+ 0x31, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x31,
+ 0x1E, 0x31, 0x31, 0x15, 0x10, 0x10, 0x1E, 0x31, 0x31, 0x0A, 0x12, 0x12,
+ 0x12, 0x10, 0x13, 0x31, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x10, 0x31, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x24, 0x1E, 0x31, 0x15, 0x10, 0x11, 0x10, 0x10, 0x1E,
+ 0x24, 0x12, 0x12, 0x12, 0x10, 0x10, 0x31, 0x31, 0x31, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0x10, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x12,
+ 0x12, 0x12, 0x10, 0x11, 0x31, 0x24, 0x12, 0x12, 0x10, 0x31, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x10,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x11, 0x11, 0x31, 0x12, 0x10,
+ 0x0B, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B,
+ 0x31, 0x31, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x0B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x31, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31,
+ 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x12, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0B, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x0B, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0B, 0x12, 0x12,
+ 0x12, 0x00, 0x0A, 0x10, 0x0B, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x31, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x0B, 0x12, 0x12, 0x12, 0x00, 0x12, 0x10, 0x10, 0x31, 0x13, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x10, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x31, 0x0B, 0x12, 0x12, 0x00, 0x00, 0x12, 0x10, 0x10, 0x31,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31, 0x12, 0x12, 0x00, 0x00, 0x12, 0x12,
+ 0x10, 0x10, 0x10, 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, 0x0A, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31, 0x12, 0x12, 0x00,
+ 0x00, 0x12, 0x12, 0x10, 0x10, 0x10, 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, 0x10,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x11,
+ 0x0A, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x31, 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, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 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, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10,
+ 0x12, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x10, 0x10, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x10, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask5RA[] = {
+ 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x0C, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x1E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x1F, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x3F, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xE1, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x7F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFD, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xF1, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x3F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0x81, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x0E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0C, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFB, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF7, 0xC0, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xCF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFE, 0x7E, 0x00, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x7C, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xE0, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xE0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 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,
+};
+
+const uint8_t sprite5RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x30, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x0A, 0x30, 0x12, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x10, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x0A, 0x30, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x0B,
+ 0x10, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x0A, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0A, 0x10, 0x0B, 0x10, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x10,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0A, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0B, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x10, 0x10, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x31, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x0B, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x12, 0x12, 0x0A, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0B, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0B, 0x10,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x0B, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x0B, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x0A, 0x11, 0x0B, 0x10, 0x12, 0x10, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x0A, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0B, 0x0C,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0A, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12,
+ 0x13, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x0A, 0x0B, 0x0B,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x11, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x10,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x10, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x10, 0x12, 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x10, 0x0B, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x31, 0x0B, 0x0B, 0x0B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12,
+ 0x12, 0x0A, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x10, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31,
+ 0x31, 0x31, 0x31, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31,
+ 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x31, 0x0C, 0x31, 0x31, 0x31, 0x0B, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x31, 0x31, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x31, 0x0C, 0x0C, 0x0C, 0x31,
+ 0x31, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x10, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31, 0x31, 0x12, 0x12, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x0C,
+ 0x0C, 0x31, 0x31, 0x31, 0x31, 0x0B, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31,
+ 0x31, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x31, 0x31, 0x0B, 0x10, 0x12,
+ 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x10, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x31, 0x31,
+ 0x31, 0x0B, 0x10, 0x10, 0x12, 0x0A, 0x00, 0x0A, 0x12, 0x12, 0x12, 0x10,
+ 0x31, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x0C, 0x31, 0x0A, 0x31, 0x31,
+ 0x12, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x0C, 0x0C,
+ 0x31, 0x31, 0x0C, 0x31, 0x31, 0x0B, 0x0B, 0x10, 0x12, 0x12, 0x0A, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x0C,
+ 0x31, 0x13, 0x10, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x31, 0x0C, 0x0C, 0x0C, 0x0C, 0x31, 0x31, 0x31, 0x0B, 0x10, 0x10,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x10, 0x0C, 0x31, 0x0C, 0x7B, 0x7B, 0x0C, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x0C, 0x0C, 0x31, 0x31, 0x0C, 0x31,
+ 0x31, 0x0B, 0x0B, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x0C, 0x31, 0x24, 0x7B, 0x7B,
+ 0x24, 0x10, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x0C, 0x0C,
+ 0x0C, 0x0C, 0x31, 0x31, 0x31, 0x0B, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x10, 0x31,
+ 0x31, 0x7B, 0x31, 0x31, 0x7B, 0x10, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x0C, 0x31, 0x31, 0x0C, 0x31, 0x31, 0x0B, 0x10, 0x12,
+ 0x0A, 0x0A, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10,
+ 0x12, 0x12, 0x12, 0x31, 0x31, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x11,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x31, 0x31,
+ 0x31, 0x0B, 0x10, 0x0A, 0x00, 0x00, 0x12, 0x0A, 0x12, 0x12, 0x12, 0x10,
+ 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x31, 0x31, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x11, 0x11, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C,
+ 0x0C, 0x0C, 0x0C, 0x31, 0x31, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x0A, 0x12, 0x12, 0x10, 0x0C, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x31, 0x0C, 0x31, 0x10, 0x12, 0x12, 0x12, 0x31,
+ 0x31, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x11, 0x15, 0x15, 0x31, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x0C, 0x0C, 0x31, 0x31, 0x0B, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x10, 0x31, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x15, 0x24, 0x24, 0x1E, 0x10,
+ 0x12, 0x12, 0x12, 0x31, 0x31, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31,
+ 0x31, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x0B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x10,
+ 0x31, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x24, 0x31,
+ 0x15, 0x31, 0x31, 0x24, 0x15, 0x12, 0x1E, 0x31, 0x31, 0x0A, 0x12, 0x12,
+ 0x12, 0x10, 0x13, 0x31, 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x31, 0x31, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x24, 0x1E, 0x31, 0x15, 0x10, 0x11, 0x10, 0x10, 0x1E,
+ 0x24, 0x12, 0x12, 0x12, 0x10, 0x10, 0x31, 0x31, 0x31, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x12,
+ 0x12, 0x12, 0x10, 0x11, 0x31, 0x24, 0x12, 0x12, 0x10, 0x31, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x10,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x11, 0x11, 0x31, 0x12, 0x10,
+ 0x0B, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x31, 0x31, 0x31, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B,
+ 0x31, 0x31, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12,
+ 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0C, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31, 0x0B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x0B, 0x31, 0x12, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x13, 0x0C, 0x31, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x31,
+ 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x12, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x0B, 0x31, 0x31,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x31, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x0A, 0x10, 0x0B, 0x10,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x0A, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x11, 0x31, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x31, 0x0B, 0x0A,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x10, 0x10, 0x31, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x0B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x31, 0x31, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31, 0x0B, 0x12, 0x12,
+ 0x00, 0x00, 0x12, 0x10, 0x10, 0x31, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x10, 0x12, 0x12, 0x12,
+ 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x10, 0x31, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31,
+ 0x0B, 0x12, 0x12, 0x00, 0x12, 0x12, 0x10, 0x10, 0x10, 0x31, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x10, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x31, 0x0B, 0x12, 0x12, 0x00, 0x12, 0x12, 0x10, 0x10, 0x10,
+ 0x31, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31, 0x12, 0x12, 0x12, 0x00, 0x12, 0x10,
+ 0x10, 0x10, 0x31, 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, 0x12, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x31, 0x12, 0x12, 0x00,
+ 0x00, 0x12, 0x10, 0x11, 0x11, 0x31, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x11,
+ 0x0A, 0x00, 0x00, 0x00, 0x12, 0x10, 0x31, 0x31, 0x31, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x31, 0x31, 0x31, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12,
+ 0x12, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10,
+ 0x12, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x0A, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x10, 0x00, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask5RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFE,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x0C, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x1E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x1F, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x1F, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x3F, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xE1, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x3F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xFD, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xF3, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xE1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x0E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xF3, 0xF0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xEF, 0xE0, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xDF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x7E, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xF8, 0xFC, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xE1, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite6LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x32, 0x00,
+ 0x00, 0x34, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x33, 0x00,
+ 0x00, 0x32, 0x35, 0x00, 0x31, 0x36, 0x34, 0x32, 0x32, 0x36, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32,
+ 0x00, 0x00, 0x33, 0x00, 0x32, 0x36, 0x00, 0x00, 0x31, 0x34, 0x36, 0x33,
+ 0x36, 0x36, 0x31, 0x32, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x36, 0x33, 0x36, 0x36, 0x00, 0x31,
+ 0x31, 0x36, 0x33, 0x36, 0x36, 0x31, 0x36, 0x36, 0x34, 0x36, 0x37, 0x37,
+ 0x37, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x32, 0x36, 0x33,
+ 0x36, 0x33, 0x31, 0x31, 0x36, 0x32, 0x33, 0x36, 0x31, 0x31, 0x31, 0x36,
+ 0x21, 0x31, 0x36, 0x33, 0x36, 0x31, 0x37, 0x36, 0x37, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x36,
+ 0x00, 0x36, 0x36, 0x33, 0x36, 0x31, 0x31, 0x36, 0x32, 0x33, 0x36, 0x31,
+ 0x31, 0x36, 0x36, 0x21, 0x33, 0x36, 0x33, 0x36, 0x36, 0x36, 0x33, 0x21,
+ 0x36, 0x36, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x32, 0x00, 0x36, 0x33, 0x36, 0x33, 0x36, 0x31, 0x31, 0x36, 0x32,
+ 0x33, 0x31, 0x31, 0x36, 0x36, 0x31, 0x33, 0x36, 0x36, 0x33, 0x21, 0x36,
+ 0x36, 0x33, 0x21, 0x36, 0x36, 0x36, 0x33, 0x21, 0x37, 0x37, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x36, 0x33, 0x36, 0x33, 0x36,
+ 0x31, 0x36, 0x32, 0x33, 0x31, 0x31, 0x36, 0x36, 0x31, 0x33, 0x36, 0x36,
+ 0x33, 0x21, 0x36, 0x36, 0x33, 0x21, 0x36, 0x36, 0x36, 0x33, 0x21, 0x21,
+ 0x36, 0x36, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x36, 0x33, 0x36,
+ 0x33, 0x36, 0x33, 0x34, 0x31, 0x34, 0x33, 0x31, 0x31, 0x36, 0x36, 0x31,
+ 0x33, 0x31, 0x36, 0x21, 0x36, 0x36, 0x36, 0x33, 0x21, 0x36, 0x36, 0x33,
+ 0x21, 0x21, 0x21, 0x36, 0x36, 0x33, 0x36, 0x37, 0x37, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32,
+ 0x00, 0x36, 0x33, 0x36, 0x33, 0x34, 0x33, 0x34, 0x31, 0x34, 0x31, 0x31,
+ 0x0B, 0x34, 0x31, 0x31, 0x31, 0x36, 0x31, 0x31, 0x36, 0x31, 0x33, 0x31,
+ 0x36, 0x37, 0x33, 0x21, 0x21, 0x37, 0x36, 0x33, 0x21, 0x21, 0x36, 0x37,
+ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x00, 0x36, 0x33, 0x34, 0x33, 0x34, 0x0B, 0x34,
+ 0x34, 0x37, 0x37, 0x31, 0x37, 0x34, 0x31, 0x37, 0x31, 0x37, 0x31, 0x36,
+ 0x36, 0x37, 0x37, 0x31, 0x37, 0x31, 0x31, 0x31, 0x37, 0x36, 0x33, 0x21,
+ 0x21, 0x21, 0x37, 0x36, 0x33, 0x33, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x36, 0x33, 0x34,
+ 0x0B, 0x0B, 0x0B, 0x7B, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x0B, 0x0B,
+ 0x0B, 0x34, 0x34, 0x37, 0x37, 0x0B, 0x36, 0x37, 0x36, 0x37, 0x31, 0x36,
+ 0x36, 0x33, 0x21, 0x21, 0x21, 0x36, 0x33, 0x21, 0x21, 0x36, 0x34, 0x32,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x36, 0x38, 0x38, 0x0B, 0x32, 0x34, 0x38, 0x35, 0x0B, 0x32, 0x34, 0x34,
+ 0x38, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x33, 0x0B, 0x32, 0x0B, 0x34, 0x34,
+ 0x34, 0x31, 0x37, 0x36, 0x37, 0x21, 0x21, 0x21, 0x36, 0x33, 0x21, 0x21,
+ 0x33, 0x36, 0x21, 0x39, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x32, 0x38, 0x38, 0x0B, 0x32, 0x32, 0x38, 0x34, 0x0B, 0x0B,
+ 0x32, 0x34, 0x38, 0x38, 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x0B, 0x32, 0x32,
+ 0x34, 0x34, 0x34, 0x0B, 0x37, 0x37, 0x32, 0x32, 0x34, 0x36, 0x21, 0x36,
+ 0x33, 0x21, 0x21, 0x33, 0x37, 0x36, 0x36, 0x21, 0x34, 0x32, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x38, 0x38, 0x0B, 0x32, 0x32, 0x38,
+ 0x34, 0x0B, 0x0B, 0x32, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x38, 0x0B,
+ 0x32, 0x32, 0x34, 0x38, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x32, 0x34, 0x34,
+ 0x34, 0x37, 0x36, 0x37, 0x21, 0x21, 0x36, 0x21, 0x21, 0x37, 0x34, 0x36,
+ 0x21, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x38, 0x0B,
+ 0x32, 0x32, 0x38, 0x34, 0x0B, 0x32, 0x34, 0x38, 0x38, 0x0B, 0x0B, 0x34,
+ 0x38, 0x38, 0x33, 0x32, 0x38, 0x34, 0x38, 0x0B, 0x0B, 0x0B, 0x32, 0x32,
+ 0x37, 0x34, 0x0B, 0x37, 0x37, 0x32, 0x32, 0x34, 0x21, 0x36, 0x21, 0x21,
+ 0x37, 0x36, 0x21, 0x34, 0x21, 0x35, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x38, 0x32, 0x32, 0x34, 0x38, 0x0B, 0x32, 0x34, 0x34, 0x38, 0x0B,
+ 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x32, 0x32, 0x34, 0x34, 0x0B, 0x33, 0x0B,
+ 0x32, 0x32, 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x34, 0x36,
+ 0x36, 0x37, 0x21, 0x37, 0x36, 0x21, 0x37, 0x34, 0x21, 0x34, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x34, 0x34, 0x32, 0x32, 0x38, 0x38, 0x32, 0x39, 0x34,
+ 0x38, 0x38, 0x0B, 0x33, 0x0B, 0x38, 0x34, 0x0B, 0x33, 0x34, 0x38, 0x38,
+ 0x0B, 0x0B, 0x32, 0x32, 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x37,
+ 0x34, 0x0B, 0x32, 0x37, 0x36, 0x37, 0x37, 0x37, 0x21, 0x37, 0x21, 0x21,
+ 0x34, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x34, 0x32, 0x34, 0x38,
+ 0x32, 0x39, 0x38, 0x34, 0x32, 0x0B, 0x33, 0x0B, 0x38, 0x38, 0x0B, 0x33,
+ 0x34, 0x34, 0x0B, 0x0B, 0x33, 0x33, 0x37, 0x34, 0x38, 0x0B, 0x0B, 0x33,
+ 0x34, 0x37, 0x37, 0x0B, 0x32, 0x32, 0x0B, 0x0B, 0x34, 0x36, 0x37, 0x21,
+ 0x37, 0x21, 0x21, 0x37, 0x21, 0x21, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38,
+ 0x34, 0x34, 0x38, 0x32, 0x39, 0x34, 0x34, 0x32, 0x0B, 0x33, 0x0B, 0x34,
+ 0x0B, 0x0B, 0x33, 0x38, 0x38, 0x0B, 0x33, 0x33, 0x33, 0x34, 0x38, 0x0B,
+ 0x0B, 0x33, 0x0B, 0x38, 0x37, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x37, 0x0B,
+ 0x0B, 0x34, 0x36, 0x37, 0x21, 0x37, 0x37, 0x21, 0x36, 0x37, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x34, 0x34, 0x3A, 0x38, 0x32, 0x39, 0x34, 0x36, 0x32, 0x39,
+ 0x33, 0x0B, 0x34, 0x0B, 0x0B, 0x33, 0x38, 0x38, 0x0B, 0x33, 0x33, 0x0B,
+ 0x38, 0x38, 0x0B, 0x0B, 0x33, 0x0B, 0x38, 0x34, 0x0B, 0x0B, 0x37, 0x38,
+ 0x38, 0x0B, 0x0B, 0x0B, 0x37, 0x0B, 0x34, 0x37, 0x37, 0x37, 0x21, 0x37,
+ 0x37, 0x34, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x38, 0x34, 0x3A, 0x33, 0x32, 0x34,
+ 0x36, 0x32, 0x39, 0x39, 0x33, 0x34, 0x0B, 0x33, 0x33, 0x38, 0x38, 0x0B,
+ 0x33, 0x39, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x33, 0x38, 0x38, 0x0B, 0x0B,
+ 0x0B, 0x37, 0x34, 0x33, 0x0B, 0x34, 0x34, 0x37, 0x36, 0x34, 0x36, 0x34,
+ 0x37, 0x34, 0x37, 0x34, 0x34, 0x21, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x38, 0x38, 0x34,
+ 0x3A, 0x3A, 0x39, 0x34, 0x33, 0x39, 0x39, 0x33, 0x34, 0x33, 0x33, 0x39,
+ 0x34, 0x38, 0x0B, 0x39, 0x33, 0x34, 0x38, 0x38, 0x33, 0x33, 0x0B, 0x38,
+ 0x34, 0x0B, 0x0B, 0x33, 0x38, 0x34, 0x0B, 0x0B, 0x38, 0x34, 0x32, 0x32,
+ 0x32, 0x36, 0x34, 0x36, 0x34, 0x37, 0x34, 0x36, 0x21, 0x36, 0x00, 0x00,
+ 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x38, 0x32, 0x3A, 0x34, 0x34, 0x34, 0x34, 0x39, 0x39, 0x3B, 0x33, 0x0B,
+ 0x33, 0x39, 0x39, 0x34, 0x38, 0x0B, 0x39, 0x39, 0x38, 0x38, 0x0B, 0x33,
+ 0x39, 0x0B, 0x38, 0x34, 0x39, 0x33, 0x33, 0x38, 0x34, 0x0B, 0x33, 0x38,
+ 0x34, 0x0B, 0x39, 0x36, 0x36, 0x32, 0x37, 0x34, 0x34, 0x34, 0x36, 0x21,
+ 0x36, 0x00, 0x00, 0x34, 0x36, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x36, 0x38, 0x38, 0x38, 0x32, 0x0B, 0x34, 0x35, 0x34, 0x3B,
+ 0x3B, 0x33, 0x0B, 0x33, 0x3B, 0x3B, 0x34, 0x38, 0x0B, 0x39, 0x3B, 0x38,
+ 0x38, 0x0B, 0x39, 0x3B, 0x0B, 0x38, 0x34, 0x39, 0x33, 0x0B, 0x38, 0x32,
+ 0x0B, 0x33, 0x34, 0x0B, 0x0B, 0x3B, 0x36, 0x34, 0x36, 0x36, 0x32, 0x37,
+ 0x36, 0x34, 0x21, 0x34, 0x00, 0x00, 0x34, 0x36, 0x34, 0x34, 0x37, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x36, 0x39, 0x39, 0x34, 0x34, 0x0B,
+ 0x35, 0x35, 0x35, 0x36, 0x33, 0x33, 0x39, 0x3B, 0x3B, 0x34, 0x38, 0x0B,
+ 0x39, 0x3B, 0x38, 0x38, 0x33, 0x39, 0x3B, 0x34, 0x34, 0x39, 0x3B, 0x33,
+ 0x34, 0x38, 0x32, 0x33, 0x33, 0x35, 0x38, 0x0B, 0x33, 0x3B, 0x34, 0x7B,
+ 0x34, 0x36, 0x37, 0x0B, 0x34, 0x34, 0x34, 0x00, 0x00, 0x34, 0x36, 0x34,
+ 0x34, 0x37, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x39, 0x7B,
+ 0x7B, 0x3B, 0x36, 0x0B, 0x39, 0x0B, 0x0B, 0x35, 0x33, 0x39, 0x3B, 0x3B,
+ 0x34, 0x38, 0x33, 0x39, 0x3B, 0x34, 0x34, 0x33, 0x39, 0x3B, 0x34, 0x34,
+ 0x39, 0x3B, 0x0B, 0x34, 0x34, 0x32, 0x33, 0x0B, 0x0B, 0x38, 0x0B, 0x39,
+ 0x3B, 0x36, 0x7B, 0x7B, 0x7B, 0x34, 0x37, 0x0B, 0x37, 0x38, 0x38, 0x00,
+ 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x34, 0x36, 0x7B, 0x7B, 0x39, 0x34, 0x36, 0x0B, 0x39, 0x39, 0x0B,
+ 0x32, 0x3B, 0x39, 0x34, 0x38, 0x33, 0x3B, 0x3B, 0x34, 0x34, 0x39, 0x3B,
+ 0x3B, 0x0B, 0x34, 0x34, 0x34, 0x39, 0x3B, 0x33, 0x34, 0x34, 0x0B, 0x34,
+ 0x38, 0x0B, 0x39, 0x33, 0x3B, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x36, 0x32,
+ 0x34, 0x38, 0x38, 0x37, 0x21, 0x36, 0x34, 0x37, 0x34, 0x34, 0x34, 0x37,
+ 0x00, 0x00, 0x00, 0x0B, 0x36, 0x34, 0x34, 0x36, 0x39, 0x34, 0x39, 0x36,
+ 0x39, 0x0B, 0x39, 0x0B, 0x32, 0x33, 0x36, 0x34, 0x33, 0x39, 0x3B, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x3B, 0x3B, 0x39, 0x0B, 0x34, 0x34, 0x34, 0x39,
+ 0x3B, 0x33, 0x38, 0x38, 0x0B, 0x3B, 0x33, 0x39, 0x3B, 0x34, 0x7B, 0x7B,
+ 0x7B, 0x34, 0x37, 0x32, 0x0B, 0x34, 0x34, 0x37, 0x21, 0x34, 0x37, 0x34,
+ 0x37, 0x37, 0x37, 0x34, 0x00, 0x0B, 0x31, 0x31, 0x36, 0x34, 0x34, 0x38,
+ 0x34, 0x39, 0x39, 0x36, 0x3B, 0x39, 0x39, 0x0B, 0x0B, 0x33, 0x34, 0x33,
+ 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x34, 0x34, 0x38, 0x3B, 0x3B, 0x3B,
+ 0x39, 0x0B, 0x38, 0x38, 0x39, 0x3B, 0x33, 0x34, 0x3B, 0x39, 0x39, 0x39,
+ 0x3B, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x36, 0x33, 0x0B, 0x39, 0x37, 0x21,
+ 0x21, 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x31, 0x31, 0x31, 0x31,
+ 0x31, 0x36, 0x34, 0x38, 0x38, 0x36, 0x39, 0x36, 0x3B, 0x39, 0x39, 0x39,
+ 0x0B, 0x32, 0x34, 0x34, 0x34, 0x36, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x39,
+ 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x0B, 0x34, 0x38, 0x34, 0x3B, 0x33,
+ 0x38, 0x34, 0x34, 0x0B, 0x3B, 0x34, 0x7B, 0x7B, 0x34, 0x36, 0x37, 0x32,
+ 0x0B, 0x37, 0x21, 0x21, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 0x34,
+ 0x39, 0x39, 0x39, 0x33, 0x31, 0x31, 0x36, 0x34, 0x38, 0x36, 0x39, 0x36,
+ 0x3B, 0x3B, 0x39, 0x39, 0x0B, 0x32, 0x39, 0x39, 0x36, 0x34, 0x34, 0x34,
+ 0x34, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x38, 0x38, 0x36, 0x0B, 0x39, 0x39,
+ 0x0B, 0x7B, 0x7B, 0x0B, 0x0B, 0x33, 0x38, 0x34, 0x3B, 0x36, 0x34, 0x34,
+ 0x36, 0x3B, 0x0B, 0x33, 0x34, 0x21, 0x21, 0x37, 0x37, 0x37, 0x34, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x00, 0x34, 0x36, 0x39, 0x39, 0x31, 0x31, 0x36,
+ 0x38, 0x34, 0x39, 0x39, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x32, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x39, 0x34, 0x34, 0x34, 0x39, 0x3B, 0x33, 0x39, 0x33, 0x39,
+ 0x38, 0x36, 0x0B, 0x39, 0x33, 0x33, 0x34, 0x7B, 0x0B, 0x0B, 0x33, 0x38,
+ 0x0B, 0x3B, 0x36, 0x34, 0x3B, 0x0B, 0x34, 0x33, 0x0B, 0x37, 0x21, 0x21,
+ 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 0x34, 0x00, 0x0B, 0x34, 0x36,
+ 0x36, 0x39, 0x39, 0x36, 0x38, 0x38, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x39,
+ 0x39, 0x32, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x34, 0x38, 0x38,
+ 0x39, 0x39, 0x33, 0x33, 0x39, 0x38, 0x36, 0x0B, 0x33, 0x33, 0x33, 0x0B,
+ 0x34, 0x36, 0x0B, 0x33, 0x38, 0x0B, 0x3B, 0x3B, 0x32, 0x36, 0x36, 0x34,
+ 0x0B, 0x32, 0x37, 0x21, 0x21, 0x37, 0x34, 0x37, 0x37, 0x34, 0x34, 0x34,
+ 0x0B, 0x34, 0x36, 0x34, 0x39, 0x39, 0x36, 0x33, 0x38, 0x38, 0x39, 0x39,
+ 0x3B, 0x3B, 0x3B, 0x39, 0x33, 0x32, 0x39, 0x39, 0x36, 0x36, 0x36, 0x3B,
+ 0x3B, 0x39, 0x36, 0x34, 0x38, 0x33, 0x33, 0x33, 0x33, 0x33, 0x38, 0x36,
+ 0x0B, 0x0B, 0x33, 0x33, 0x33, 0x34, 0x36, 0x0B, 0x33, 0x38, 0x34, 0x34,
+ 0x38, 0x38, 0x38, 0x32, 0x34, 0x37, 0x37, 0x32, 0x21, 0x37, 0x37, 0x34,
+ 0x37, 0x37, 0x34, 0x34, 0x00, 0x00, 0x00, 0x36, 0x36, 0x39, 0x33, 0x33,
+ 0x38, 0x34, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x33, 0x35, 0x3B, 0x39,
+ 0x39, 0x39, 0x36, 0x36, 0x3B, 0x3B, 0x3B, 0x33, 0x34, 0x38, 0x38, 0x0B,
+ 0x0B, 0x33, 0x33, 0x38, 0x38, 0x0B, 0x0B, 0x33, 0x33, 0x33, 0x34, 0x36,
+ 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x34, 0x35, 0x34, 0x32, 0x34, 0x34, 0x37,
+ 0x32, 0x34, 0x37, 0x37, 0x34, 0x34, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x39, 0x36, 0x38, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x39,
+ 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x36, 0x36, 0x36, 0x39, 0x33,
+ 0x33, 0x36, 0x34, 0x38, 0x34, 0x0B, 0x33, 0x33, 0x33, 0x38, 0x34, 0x0B,
+ 0x0B, 0x0B, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x34, 0x32,
+ 0x34, 0x00, 0x00, 0x34, 0x36, 0x32, 0x34, 0x37, 0x37, 0x34, 0x34, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x3B, 0x3B, 0x39,
+ 0x3B, 0x3B, 0x39, 0x39, 0x32, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x39,
+ 0x39, 0x34, 0x34, 0x36, 0x33, 0x33, 0x33, 0x36, 0x38, 0x38, 0x0B, 0x0B,
+ 0x33, 0x33, 0x38, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x36,
+ 0x36, 0x31, 0x35, 0x34, 0x31, 0x34, 0x00, 0x00, 0x34, 0x34, 0x36, 0x34,
+ 0x37, 0x37, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36,
+ 0x3B, 0x34, 0x36, 0x3B, 0x3B, 0x39, 0x39, 0x33, 0x32, 0x35, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x36, 0x34, 0x34, 0x0B, 0x0B, 0x33,
+ 0x33, 0x38, 0x38, 0x34, 0x0B, 0x33, 0x33, 0x33, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x34, 0x34, 0x34, 0x31, 0x34, 0x34, 0x34, 0x34, 0x36, 0x34, 0x00,
+ 0x00, 0x00, 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3B, 0x39, 0x3B, 0x34, 0x39, 0x39, 0x39, 0x33, 0x32,
+ 0x35, 0x35, 0x33, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x37, 0x39, 0x39, 0x39,
+ 0x34, 0x34, 0x34, 0x0B, 0x33, 0x33, 0x36, 0x38, 0x38, 0x0B, 0x0B, 0x0B,
+ 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x31, 0x34, 0x31, 0x34, 0x31,
+ 0x37, 0x34, 0x37, 0x34, 0x00, 0x00, 0x00, 0x34, 0x36, 0x34, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x0E, 0x35, 0x39,
+ 0x39, 0x33, 0x33, 0x39, 0x32, 0x35, 0x35, 0x33, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x37, 0x37, 0x39, 0x39, 0x39, 0x34, 0x34, 0x0B, 0x0B, 0x33, 0x33,
+ 0x0B, 0x38, 0x38, 0x38, 0x34, 0x34, 0x34, 0x34, 0x34, 0x31, 0x34, 0x0B,
+ 0x31, 0x34, 0x31, 0x34, 0x36, 0x37, 0x34, 0x37, 0x34, 0x00, 0x00, 0x00,
+ 0x34, 0x36, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x35, 0x33, 0x39, 0x33, 0x0B, 0x39, 0x3B, 0x39, 0x32, 0x35, 0x32,
+ 0x33, 0x39, 0x3B, 0x39, 0x3B, 0x3B, 0x37, 0x37, 0x37, 0x39, 0x33, 0x34,
+ 0x34, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x31, 0x0B,
+ 0x31, 0x0B, 0x31, 0x34, 0x0B, 0x31, 0x34, 0x34, 0x37, 0x34, 0x36, 0x34,
+ 0x37, 0x34, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0B, 0x0B, 0x39, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x33, 0x33, 0x33, 0x33, 0x39, 0x39, 0x36, 0x3B, 0x3B, 0x3B,
+ 0x36, 0x34, 0x34, 0x33, 0x39, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34, 0x38,
+ 0x38, 0x31, 0x36, 0x34, 0x31, 0x34, 0x36, 0x0B, 0x31, 0x34, 0x34, 0x37,
+ 0x36, 0x37, 0x34, 0x37, 0x34, 0x37, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32,
+ 0x0B, 0x0B, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x33, 0x33, 0x33, 0x39,
+ 0x39, 0x36, 0x36, 0x3B, 0x3B, 0x3B, 0x34, 0x34, 0x34, 0x34, 0x33, 0x0B,
+ 0x33, 0x33, 0x0B, 0x31, 0x31, 0x0B, 0x31, 0x31, 0x31, 0x36, 0x34, 0x31,
+ 0x31, 0x34, 0x37, 0x21, 0x21, 0x36, 0x37, 0x34, 0x36, 0x34, 0x37, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x0B, 0x35, 0x39, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x39, 0x36, 0x36, 0x36, 0x39, 0x39, 0x39,
+ 0x39, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x36,
+ 0x34, 0x0B, 0x31, 0x0B, 0x34, 0x34, 0x37, 0x21, 0x36, 0x21, 0x36, 0x37,
+ 0x34, 0x37, 0x34, 0x37, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x35, 0x35,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x39, 0x39,
+ 0x0E, 0x36, 0x36, 0x36, 0x39, 0x39, 0x33, 0x39, 0x33, 0x33, 0x33, 0x33,
+ 0x0B, 0x33, 0x0B, 0x31, 0x0B, 0x31, 0x0B, 0x34, 0x34, 0x37, 0x21, 0x21,
+ 0x21, 0x36, 0x37, 0x34, 0x37, 0x34, 0x32, 0x34, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x34, 0x35, 0x35, 0x35, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x39, 0x3B, 0x39, 0x3B, 0x39, 0x0E, 0x39, 0x0E, 0x36, 0x36, 0x36, 0x36,
+ 0x0E, 0x0E, 0x33, 0x0B, 0x37, 0x0B, 0x37, 0x37, 0x31, 0x37, 0x34, 0x34,
+ 0x37, 0x21, 0x21, 0x21, 0x36, 0x21, 0x36, 0x37, 0x36, 0x36, 0x34, 0x37,
+ 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x35, 0x36, 0x0E,
+ 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x3B, 0x39, 0x0E, 0x39,
+ 0x0E, 0x39, 0x36, 0x0E, 0x36, 0x36, 0x36, 0x37, 0x0B, 0x37, 0x34, 0x31,
+ 0x37, 0x34, 0x34, 0x37, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x37, 0x37,
+ 0x34, 0x32, 0x37, 0x36, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x34, 0x36, 0x36, 0x0E, 0x39, 0x39, 0x39, 0x0E, 0x39, 0x0E,
+ 0x39, 0x0E, 0x39, 0x0E, 0x0E, 0x0E, 0x0E, 0x36, 0x36, 0x31, 0x36, 0x31,
+ 0x31, 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x36, 0x37, 0x37, 0x34, 0x32, 0x36, 0x36, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x36, 0x36, 0x0E,
+ 0x0E, 0x0E, 0x0E, 0x0E, 0x36, 0x0E, 0x36, 0x0E, 0x36, 0x0E, 0x36, 0x36,
+ 0x0E, 0x36, 0x34, 0x34, 0x34, 0x34, 0x37, 0x34, 0x37, 0x36, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x34, 0x32, 0x36, 0x37, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x37, 0x37, 0x36, 0x34, 0x36, 0x34, 0x36, 0x34, 0x36, 0x34,
+ 0x36, 0x34, 0x36, 0x34, 0x36, 0x34, 0x34, 0x36, 0x34, 0x34, 0x34, 0x37,
+ 0x36, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x32, 0x32, 0x36,
+ 0x31, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x39, 0x37, 0x33, 0x37, 0x0B,
+ 0x0B, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x36, 0x34, 0x36, 0x36, 0x34,
+ 0x36, 0x37, 0x34, 0x37, 0x34, 0x21, 0x37, 0x21, 0x31, 0x21, 0x31, 0x36,
+ 0x31, 0x34, 0x36, 0x31, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39,
+ 0x33, 0x33, 0x31, 0x33, 0x0B, 0x0B, 0x37, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x34, 0x39, 0x33, 0x36, 0x36, 0x36, 0x34, 0x37, 0x36, 0x21, 0x31,
+ 0x36, 0x31, 0x21, 0x21, 0x34, 0x31, 0x31, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x39, 0x31, 0x33, 0x31, 0x33, 0x0B, 0x0B, 0x37,
+ 0x34, 0x00, 0x00, 0x00, 0x00, 0x36, 0x34, 0x39, 0x33, 0x33, 0x36, 0x36,
+ 0x34, 0x31, 0x36, 0x31, 0x31, 0x36, 0x36, 0x36, 0x31, 0x31, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x0E, 0x33,
+ 0x31, 0x33, 0x35, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x34,
+ 0x39, 0x39, 0x33, 0x33, 0x36, 0x34, 0x31, 0x36, 0x31, 0x31, 0x31, 0x31,
+ 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x31, 0x31, 0x33, 0x31, 0x33, 0x31, 0x0B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x36, 0x34, 0x31, 0x39, 0x39, 0x33, 0x39, 0x34, 0x36,
+ 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x33, 0x31, 0x33,
+ 0x31, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x34, 0x31, 0x31,
+ 0x39, 0x33, 0x31, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x31, 0x31, 0x33, 0x31, 0x33, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x36, 0x00, 0x00, 0x31, 0x31, 0x33, 0x31, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x0B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x34, 0x34, 0x31,
+ 0x31, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33,
+ 0x31, 0x31, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x31, 0x33, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0B, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask6LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x26, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0A, 0x6F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0xCF,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xDF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x17, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x57, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x00, 0x5F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x01, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x01, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x9E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x3F, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8E, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC4, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0x1F, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x01, 0xFF, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF,
+ 0x87, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0xFF, 0xF8, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0x4F, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xC0, 0x27, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xE0, 0x11, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite6LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x32, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32,
+ 0x00, 0x00, 0x32, 0x32, 0x32, 0x32, 0x32, 0x36, 0x32, 0x32, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x32, 0x00, 0x32, 0x32, 0x32, 0x35, 0x32, 0x31, 0x36,
+ 0x36, 0x32, 0x32, 0x21, 0x32, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x32, 0x36, 0x33, 0x32, 0x36,
+ 0x32, 0x32, 0x31, 0x35, 0x36, 0x33, 0x36, 0x36, 0x31, 0x31, 0x37, 0x37,
+ 0x32, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x32,
+ 0x36, 0x33, 0x36, 0x36, 0x32, 0x31, 0x31, 0x36, 0x33, 0x36, 0x36, 0x31,
+ 0x31, 0x36, 0x31, 0x21, 0x36, 0x21, 0x21, 0x37, 0x37, 0x32, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32,
+ 0x36, 0x36, 0x36, 0x36, 0x36, 0x33, 0x36, 0x33, 0x31, 0x31, 0x36, 0x32,
+ 0x33, 0x36, 0x31, 0x31, 0x36, 0x31, 0x21, 0x36, 0x21, 0x21, 0x21, 0x36,
+ 0x31, 0x37, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x32, 0x00, 0x32, 0x36, 0x33, 0x36, 0x33, 0x36, 0x31, 0x36, 0x31,
+ 0x36, 0x32, 0x33, 0x36, 0x31, 0x31, 0x36, 0x36, 0x21, 0x21, 0x36, 0x21,
+ 0x21, 0x21, 0x36, 0x31, 0x21, 0x21, 0x37, 0x37, 0x32, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x36, 0x33, 0x36, 0x33,
+ 0x36, 0x31, 0x36, 0x36, 0x32, 0x33, 0x31, 0x31, 0x36, 0x36, 0x31, 0x31,
+ 0x36, 0x36, 0x21, 0x21, 0x36, 0x36, 0x21, 0x21, 0x36, 0x39, 0x21, 0x21,
+ 0x21, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x36, 0x32,
+ 0x36, 0x33, 0x36, 0x33, 0x34, 0x31, 0x34, 0x33, 0x33, 0x31, 0x31, 0x36,
+ 0x36, 0x31, 0x21, 0x36, 0x36, 0x21, 0x21, 0x36, 0x36, 0x21, 0x21, 0x36,
+ 0x36, 0x36, 0x21, 0x21, 0x21, 0x37, 0x37, 0x32, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x32,
+ 0x36, 0x32, 0x36, 0x33, 0x36, 0x33, 0x34, 0x33, 0x34, 0x31, 0x34, 0x31,
+ 0x31, 0x31, 0x36, 0x36, 0x31, 0x21, 0x31, 0x36, 0x21, 0x36, 0x36, 0x21,
+ 0x21, 0x21, 0x36, 0x36, 0x21, 0x21, 0x21, 0x21, 0x36, 0x36, 0x34, 0x37,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x36, 0x32, 0x36, 0x33, 0x33, 0x34, 0x0B, 0x34,
+ 0x34, 0x37, 0x37, 0x31, 0x31, 0x0B, 0x34, 0x31, 0x31, 0x31, 0x36, 0x31,
+ 0x31, 0x36, 0x31, 0x31, 0x31, 0x36, 0x37, 0x21, 0x21, 0x21, 0x37, 0x36,
+ 0x21, 0x21, 0x21, 0x39, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x36, 0x33, 0x34,
+ 0x0B, 0x0B, 0x0B, 0x7B, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x0B, 0x0B,
+ 0x0B, 0x31, 0x37, 0x31, 0x36, 0x36, 0x37, 0x36, 0x34, 0x37, 0x31, 0x31,
+ 0x31, 0x37, 0x36, 0x21, 0x21, 0x21, 0x21, 0x37, 0x36, 0x33, 0x36, 0x32,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x36, 0x38, 0x38, 0x0B, 0x32, 0x34, 0x38, 0x35, 0x0B, 0x32, 0x34, 0x34,
+ 0x38, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x33, 0x0B, 0x37, 0x37, 0x34, 0x36,
+ 0x37, 0x36, 0x37, 0x31, 0x36, 0x36, 0x21, 0x21, 0x21, 0x21, 0x36, 0x21,
+ 0x21, 0x21, 0x36, 0x34, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x32, 0x38, 0x38, 0x0B, 0x32, 0x32, 0x38, 0x34, 0x0B, 0x0B,
+ 0x32, 0x34, 0x38, 0x38, 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x0B, 0x32, 0x32,
+ 0x34, 0x34, 0x34, 0x0B, 0x37, 0x34, 0x31, 0x37, 0x36, 0x21, 0x21, 0x21,
+ 0x21, 0x36, 0x21, 0x21, 0x21, 0x21, 0x36, 0x21, 0x39, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x38, 0x38, 0x0B, 0x32, 0x32, 0x38,
+ 0x34, 0x0B, 0x0B, 0x32, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x38, 0x0B,
+ 0x32, 0x32, 0x34, 0x38, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x32, 0x34, 0x34,
+ 0x34, 0x34, 0x36, 0x21, 0x36, 0x21, 0x21, 0x21, 0x36, 0x37, 0x36, 0x21,
+ 0x34, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x38, 0x0B,
+ 0x32, 0x32, 0x38, 0x34, 0x0B, 0x32, 0x34, 0x38, 0x38, 0x0B, 0x0B, 0x34,
+ 0x38, 0x38, 0x33, 0x32, 0x38, 0x34, 0x38, 0x0B, 0x0B, 0x0B, 0x32, 0x32,
+ 0x37, 0x34, 0x0B, 0x37, 0x37, 0x32, 0x36, 0x21, 0x21, 0x21, 0x36, 0x21,
+ 0x21, 0x21, 0x34, 0x36, 0x21, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x38, 0x32, 0x32, 0x34, 0x38, 0x0B, 0x32, 0x34, 0x34, 0x38, 0x0B,
+ 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x32, 0x32, 0x34, 0x34, 0x0B, 0x33, 0x0B,
+ 0x32, 0x32, 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x32, 0x34,
+ 0x21, 0x36, 0x21, 0x21, 0x21, 0x36, 0x21, 0x34, 0x21, 0x35, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x34, 0x34, 0x32, 0x32, 0x38, 0x38, 0x32, 0x39, 0x34,
+ 0x38, 0x38, 0x0B, 0x33, 0x0B, 0x38, 0x34, 0x0B, 0x33, 0x34, 0x38, 0x38,
+ 0x0B, 0x0B, 0x32, 0x32, 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x37,
+ 0x34, 0x0B, 0x32, 0x36, 0x36, 0x37, 0x21, 0x21, 0x36, 0x21, 0x37, 0x34,
+ 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x34, 0x32, 0x34, 0x38,
+ 0x32, 0x39, 0x38, 0x34, 0x32, 0x0B, 0x33, 0x0B, 0x38, 0x38, 0x0B, 0x33,
+ 0x34, 0x34, 0x0B, 0x0B, 0x33, 0x33, 0x37, 0x34, 0x38, 0x0B, 0x0B, 0x33,
+ 0x34, 0x37, 0x37, 0x0B, 0x32, 0x32, 0x0B, 0x0B, 0x36, 0x37, 0x37, 0x37,
+ 0x21, 0x37, 0x21, 0x21, 0x34, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38,
+ 0x34, 0x34, 0x38, 0x32, 0x39, 0x34, 0x34, 0x32, 0x0B, 0x33, 0x0B, 0x34,
+ 0x0B, 0x0B, 0x33, 0x38, 0x38, 0x0B, 0x33, 0x33, 0x33, 0x34, 0x38, 0x0B,
+ 0x0B, 0x33, 0x0B, 0x38, 0x37, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x37, 0x0B,
+ 0x34, 0x36, 0x37, 0x37, 0x37, 0x37, 0x21, 0x37, 0x34, 0x34, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x34, 0x34, 0x3A, 0x38, 0x32, 0x39, 0x34, 0x36, 0x32, 0x39,
+ 0x33, 0x0B, 0x34, 0x0B, 0x0B, 0x33, 0x38, 0x38, 0x0B, 0x33, 0x33, 0x0B,
+ 0x38, 0x38, 0x0B, 0x0B, 0x33, 0x0B, 0x38, 0x34, 0x0B, 0x0B, 0x37, 0x38,
+ 0x38, 0x0B, 0x0B, 0x0B, 0x37, 0x34, 0x36, 0x37, 0x37, 0x37, 0x37, 0x37,
+ 0x36, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x38, 0x34, 0x3A, 0x33, 0x32, 0x34,
+ 0x36, 0x32, 0x39, 0x39, 0x33, 0x34, 0x0B, 0x33, 0x33, 0x38, 0x38, 0x0B,
+ 0x33, 0x39, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x33, 0x38, 0x38, 0x0B, 0x0B,
+ 0x0B, 0x37, 0x34, 0x33, 0x0B, 0x34, 0x34, 0x37, 0x36, 0x37, 0x34, 0x34,
+ 0x37, 0x34, 0x37, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x38, 0x38, 0x38, 0x34,
+ 0x3A, 0x3A, 0x39, 0x34, 0x33, 0x39, 0x39, 0x33, 0x34, 0x33, 0x33, 0x39,
+ 0x34, 0x38, 0x0B, 0x39, 0x33, 0x34, 0x38, 0x38, 0x33, 0x33, 0x0B, 0x38,
+ 0x34, 0x0B, 0x0B, 0x33, 0x38, 0x34, 0x0B, 0x0B, 0x38, 0x34, 0x32, 0x32,
+ 0x32, 0x36, 0x37, 0x34, 0x34, 0x37, 0x34, 0x36, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x38, 0x32, 0x3A, 0x34, 0x34, 0x34, 0x34, 0x39, 0x39, 0x3B, 0x33, 0x0B,
+ 0x33, 0x39, 0x39, 0x34, 0x38, 0x0B, 0x39, 0x39, 0x38, 0x38, 0x0B, 0x33,
+ 0x39, 0x0B, 0x38, 0x34, 0x39, 0x33, 0x33, 0x38, 0x34, 0x0B, 0x33, 0x38,
+ 0x34, 0x0B, 0x39, 0x36, 0x36, 0x32, 0x37, 0x37, 0x34, 0x36, 0x21, 0x34,
+ 0x34, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x36, 0x38, 0x38, 0x38, 0x32, 0x0B, 0x34, 0x35, 0x34, 0x3B,
+ 0x3B, 0x33, 0x0B, 0x33, 0x3B, 0x3B, 0x34, 0x38, 0x0B, 0x39, 0x3B, 0x38,
+ 0x38, 0x0B, 0x39, 0x3B, 0x0B, 0x38, 0x34, 0x39, 0x33, 0x0B, 0x38, 0x32,
+ 0x0B, 0x33, 0x34, 0x0B, 0x0B, 0x3B, 0x36, 0x34, 0x36, 0x36, 0x32, 0x37,
+ 0x34, 0x21, 0x34, 0x34, 0x00, 0x00, 0x00, 0x36, 0x34, 0x34, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x36, 0x39, 0x39, 0x34, 0x34, 0x0B,
+ 0x35, 0x35, 0x35, 0x36, 0x33, 0x33, 0x39, 0x3B, 0x3B, 0x34, 0x38, 0x0B,
+ 0x39, 0x3B, 0x38, 0x38, 0x33, 0x39, 0x3B, 0x34, 0x34, 0x39, 0x3B, 0x33,
+ 0x34, 0x38, 0x32, 0x33, 0x33, 0x35, 0x38, 0x0B, 0x33, 0x3B, 0x34, 0x7B,
+ 0x34, 0x36, 0x37, 0x0B, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x36, 0x34,
+ 0x34, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x39, 0x7B,
+ 0x7B, 0x3B, 0x36, 0x0B, 0x39, 0x0B, 0x0B, 0x35, 0x33, 0x39, 0x3B, 0x3B,
+ 0x34, 0x38, 0x33, 0x39, 0x3B, 0x34, 0x34, 0x33, 0x39, 0x3B, 0x34, 0x34,
+ 0x39, 0x3B, 0x0B, 0x34, 0x34, 0x32, 0x33, 0x0B, 0x0B, 0x38, 0x0B, 0x39,
+ 0x3B, 0x36, 0x7B, 0x7B, 0x7B, 0x34, 0x37, 0x0B, 0x37, 0x34, 0x00, 0x00,
+ 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x34, 0x36, 0x7B, 0x7B, 0x39, 0x34, 0x36, 0x0B, 0x39, 0x39, 0x0B,
+ 0x32, 0x3B, 0x39, 0x34, 0x38, 0x33, 0x3B, 0x3B, 0x34, 0x34, 0x39, 0x3B,
+ 0x3B, 0x0B, 0x34, 0x34, 0x34, 0x39, 0x3B, 0x33, 0x34, 0x34, 0x0B, 0x34,
+ 0x38, 0x0B, 0x39, 0x33, 0x3B, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x36, 0x32,
+ 0x34, 0x00, 0x00, 0x37, 0x21, 0x36, 0x34, 0x37, 0x34, 0x34, 0x34, 0x37,
+ 0x00, 0x00, 0x00, 0x0B, 0x36, 0x34, 0x34, 0x36, 0x39, 0x34, 0x39, 0x36,
+ 0x39, 0x0B, 0x39, 0x0B, 0x32, 0x33, 0x36, 0x34, 0x33, 0x39, 0x3B, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x3B, 0x3B, 0x39, 0x0B, 0x34, 0x34, 0x34, 0x39,
+ 0x3B, 0x33, 0x38, 0x38, 0x0B, 0x3B, 0x33, 0x39, 0x3B, 0x34, 0x7B, 0x7B,
+ 0x7B, 0x34, 0x37, 0x32, 0x0B, 0x34, 0x34, 0x37, 0x21, 0x34, 0x37, 0x34,
+ 0x37, 0x37, 0x37, 0x34, 0x00, 0x00, 0x31, 0x31, 0x36, 0x34, 0x34, 0x38,
+ 0x34, 0x39, 0x39, 0x36, 0x3B, 0x39, 0x39, 0x0B, 0x0B, 0x33, 0x34, 0x33,
+ 0x39, 0x39, 0x39, 0x39, 0x39, 0x36, 0x34, 0x34, 0x38, 0x3B, 0x3B, 0x3B,
+ 0x39, 0x0B, 0x38, 0x38, 0x39, 0x3B, 0x33, 0x34, 0x3B, 0x39, 0x39, 0x39,
+ 0x3B, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x36, 0x33, 0x0B, 0x39, 0x37, 0x21,
+ 0x21, 0x37, 0x37, 0x37, 0x37, 0x34, 0x34, 0x34, 0x31, 0x31, 0x31, 0x31,
+ 0x31, 0x36, 0x34, 0x38, 0x38, 0x36, 0x39, 0x36, 0x3B, 0x39, 0x39, 0x39,
+ 0x0B, 0x32, 0x34, 0x34, 0x34, 0x36, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x39,
+ 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x0B, 0x34, 0x38, 0x34, 0x3B, 0x33,
+ 0x38, 0x34, 0x34, 0x0B, 0x3B, 0x34, 0x7B, 0x7B, 0x34, 0x36, 0x37, 0x32,
+ 0x0B, 0x37, 0x21, 0x21, 0x37, 0x37, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34,
+ 0x39, 0x39, 0x33, 0x33, 0x31, 0x31, 0x36, 0x34, 0x38, 0x36, 0x39, 0x36,
+ 0x3B, 0x3B, 0x39, 0x39, 0x0B, 0x32, 0x39, 0x39, 0x36, 0x34, 0x34, 0x34,
+ 0x34, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x38, 0x38, 0x36, 0x0B, 0x39, 0x39,
+ 0x0B, 0x7B, 0x7B, 0x0B, 0x0B, 0x33, 0x38, 0x34, 0x3B, 0x36, 0x34, 0x34,
+ 0x36, 0x3B, 0x0B, 0x33, 0x34, 0x21, 0x21, 0x21, 0x37, 0x34, 0x34, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x38, 0x33, 0x39, 0x39, 0x39, 0x31, 0x31, 0x36,
+ 0x38, 0x34, 0x39, 0x39, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x32, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x39, 0x34, 0x34, 0x34, 0x39, 0x3B, 0x33, 0x39, 0x33, 0x39,
+ 0x38, 0x36, 0x0B, 0x39, 0x33, 0x33, 0x34, 0x7B, 0x0B, 0x0B, 0x33, 0x38,
+ 0x0B, 0x3B, 0x36, 0x34, 0x3B, 0x0B, 0x34, 0x33, 0x0B, 0x32, 0x37, 0x21,
+ 0x21, 0x37, 0x34, 0x37, 0x34, 0x34, 0x34, 0x34, 0x00, 0x0B, 0x0B, 0x33,
+ 0x39, 0x39, 0x39, 0x36, 0x38, 0x38, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x39,
+ 0x39, 0x32, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x34, 0x38, 0x38,
+ 0x39, 0x39, 0x33, 0x33, 0x39, 0x38, 0x36, 0x0B, 0x33, 0x33, 0x33, 0x0B,
+ 0x34, 0x36, 0x0B, 0x33, 0x38, 0x0B, 0x3B, 0x3B, 0x32, 0x36, 0x36, 0x34,
+ 0x34, 0x37, 0x37, 0x32, 0x21, 0x37, 0x37, 0x34, 0x37, 0x37, 0x34, 0x34,
+ 0x00, 0x00, 0x36, 0x36, 0x39, 0x3B, 0x36, 0x33, 0x38, 0x38, 0x39, 0x39,
+ 0x3B, 0x3B, 0x3B, 0x39, 0x33, 0x32, 0x39, 0x39, 0x36, 0x36, 0x36, 0x3B,
+ 0x3B, 0x39, 0x36, 0x34, 0x38, 0x33, 0x33, 0x33, 0x33, 0x33, 0x38, 0x36,
+ 0x0B, 0x0B, 0x33, 0x33, 0x33, 0x34, 0x36, 0x0B, 0x33, 0x38, 0x34, 0x34,
+ 0x38, 0x38, 0x38, 0x32, 0x32, 0x34, 0x34, 0x37, 0x32, 0x34, 0x37, 0x37,
+ 0x34, 0x34, 0x37, 0x37, 0x00, 0x00, 0x00, 0x36, 0x36, 0x39, 0x33, 0x33,
+ 0x38, 0x34, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x33, 0x35, 0x3B, 0x39,
+ 0x39, 0x39, 0x36, 0x36, 0x3B, 0x3B, 0x3B, 0x33, 0x34, 0x38, 0x38, 0x0B,
+ 0x0B, 0x33, 0x33, 0x38, 0x38, 0x0B, 0x0B, 0x33, 0x33, 0x33, 0x34, 0x36,
+ 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x34, 0x35, 0x34, 0x34, 0x34, 0x34, 0x34,
+ 0x36, 0x32, 0x34, 0x37, 0x37, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x36, 0x39, 0x36, 0x38, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x39,
+ 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x36, 0x36, 0x36, 0x39, 0x33,
+ 0x33, 0x36, 0x34, 0x38, 0x34, 0x0B, 0x33, 0x33, 0x33, 0x38, 0x34, 0x0B,
+ 0x0B, 0x0B, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x34, 0x32,
+ 0x31, 0x00, 0x00, 0x34, 0x36, 0x34, 0x36, 0x34, 0x37, 0x37, 0x34, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x3B, 0x3B, 0x39,
+ 0x3B, 0x3B, 0x39, 0x39, 0x32, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x39,
+ 0x39, 0x34, 0x34, 0x36, 0x33, 0x33, 0x33, 0x36, 0x38, 0x38, 0x0B, 0x0B,
+ 0x33, 0x33, 0x38, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x36,
+ 0x36, 0x31, 0x35, 0x34, 0x34, 0x36, 0x00, 0x00, 0x34, 0x36, 0x34, 0x36,
+ 0x34, 0x34, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36,
+ 0x3B, 0x34, 0x36, 0x3B, 0x3B, 0x39, 0x39, 0x33, 0x32, 0x35, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x36, 0x34, 0x34, 0x0B, 0x0B, 0x33,
+ 0x33, 0x38, 0x38, 0x34, 0x0B, 0x33, 0x33, 0x33, 0x36, 0x36, 0x36, 0x36,
+ 0x36, 0x34, 0x34, 0x34, 0x31, 0x34, 0x34, 0x31, 0x37, 0x34, 0x37, 0x00,
+ 0x00, 0x34, 0x36, 0x34, 0x36, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3B, 0x39, 0x3B, 0x34, 0x39, 0x39, 0x39, 0x33, 0x32,
+ 0x35, 0x35, 0x33, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x37, 0x39, 0x39, 0x39,
+ 0x34, 0x34, 0x34, 0x0B, 0x33, 0x33, 0x36, 0x38, 0x38, 0x0B, 0x0B, 0x0B,
+ 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x31, 0x34, 0x31, 0x31, 0x34,
+ 0x36, 0x37, 0x34, 0x37, 0x00, 0x00, 0x34, 0x36, 0x34, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x0E, 0x35, 0x39,
+ 0x39, 0x33, 0x33, 0x39, 0x32, 0x35, 0x35, 0x33, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x37, 0x37, 0x39, 0x39, 0x39, 0x34, 0x34, 0x0B, 0x0B, 0x33, 0x33,
+ 0x0B, 0x38, 0x38, 0x38, 0x34, 0x34, 0x34, 0x34, 0x34, 0x31, 0x34, 0x0B,
+ 0x31, 0x34, 0x34, 0x34, 0x37, 0x34, 0x36, 0x34, 0x37, 0x34, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x35, 0x33, 0x39, 0x33, 0x0B, 0x39, 0x3B, 0x39, 0x32, 0x35, 0x32,
+ 0x33, 0x39, 0x3B, 0x39, 0x3B, 0x3B, 0x37, 0x37, 0x37, 0x39, 0x33, 0x34,
+ 0x34, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x31, 0x0B,
+ 0x31, 0x0B, 0x31, 0x34, 0x0B, 0x34, 0x34, 0x37, 0x36, 0x37, 0x34, 0x37,
+ 0x34, 0x37, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x0B, 0x0B, 0x39, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x33, 0x33, 0x33, 0x33, 0x39, 0x39, 0x36, 0x3B, 0x3B, 0x3B,
+ 0x36, 0x34, 0x34, 0x33, 0x39, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34, 0x38,
+ 0x38, 0x31, 0x36, 0x34, 0x31, 0x34, 0x36, 0x0B, 0x31, 0x34, 0x37, 0x21,
+ 0x21, 0x36, 0x37, 0x34, 0x36, 0x34, 0x37, 0x34, 0x34, 0x34, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32,
+ 0x0B, 0x0B, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x33, 0x33, 0x33, 0x39,
+ 0x39, 0x36, 0x36, 0x3B, 0x3B, 0x3B, 0x34, 0x34, 0x34, 0x34, 0x33, 0x0B,
+ 0x33, 0x33, 0x0B, 0x31, 0x31, 0x0B, 0x31, 0x31, 0x31, 0x36, 0x34, 0x31,
+ 0x34, 0x34, 0x37, 0x21, 0x36, 0x21, 0x36, 0x37, 0x34, 0x37, 0x34, 0x37,
+ 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x0B, 0x35, 0x39, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x39, 0x36, 0x36, 0x36, 0x39, 0x39, 0x39,
+ 0x39, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x36,
+ 0x34, 0x0B, 0x31, 0x0B, 0x34, 0x37, 0x21, 0x21, 0x21, 0x36, 0x37, 0x34,
+ 0x37, 0x34, 0x32, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x35, 0x35,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x39, 0x39,
+ 0x0E, 0x36, 0x36, 0x36, 0x39, 0x39, 0x33, 0x39, 0x33, 0x33, 0x33, 0x33,
+ 0x0B, 0x33, 0x0B, 0x31, 0x0B, 0x31, 0x0B, 0x34, 0x37, 0x21, 0x21, 0x21,
+ 0x36, 0x21, 0x36, 0x37, 0x36, 0x36, 0x34, 0x37, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x34, 0x35, 0x35, 0x35, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x39, 0x3B, 0x39, 0x3B, 0x39, 0x0E, 0x39, 0x0E, 0x36, 0x36, 0x36, 0x36,
+ 0x0E, 0x0E, 0x33, 0x0B, 0x37, 0x0B, 0x37, 0x37, 0x31, 0x37, 0x34, 0x34,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x37, 0x37, 0x34, 0x32, 0x37, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x35, 0x36, 0x0E,
+ 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x3B, 0x39, 0x0E, 0x39,
+ 0x0E, 0x39, 0x36, 0x0E, 0x36, 0x36, 0x36, 0x37, 0x0B, 0x37, 0x34, 0x31,
+ 0x37, 0x34, 0x34, 0x37, 0x21, 0x21, 0x21, 0x21, 0x36, 0x37, 0x37, 0x34,
+ 0x32, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x34, 0x36, 0x36, 0x0E, 0x39, 0x39, 0x39, 0x0E, 0x39, 0x0E,
+ 0x39, 0x0E, 0x39, 0x0E, 0x0E, 0x0E, 0x0E, 0x36, 0x36, 0x31, 0x36, 0x31,
+ 0x31, 0x34, 0x36, 0x34, 0x34, 0x37, 0x37, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x36, 0x34, 0x32, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x36, 0x36, 0x0E,
+ 0x0E, 0x0E, 0x0E, 0x0E, 0x36, 0x0E, 0x36, 0x0E, 0x36, 0x0E, 0x36, 0x36,
+ 0x0E, 0x36, 0x34, 0x34, 0x34, 0x34, 0x37, 0x34, 0x37, 0x36, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x36, 0x32, 0x32, 0x36, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x33, 0x37, 0x37, 0x36, 0x34, 0x36, 0x34, 0x36, 0x34, 0x36, 0x34,
+ 0x36, 0x34, 0x36, 0x34, 0x36, 0x34, 0x34, 0x36, 0x34, 0x34, 0x34, 0x37,
+ 0x36, 0x21, 0x21, 0x21, 0x31, 0x21, 0x31, 0x36, 0x31, 0x34, 0x36, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x33, 0x39, 0x37, 0x33, 0x37, 0x0B,
+ 0x0B, 0x34, 0x34, 0x34, 0x00, 0x00, 0x34, 0x36, 0x34, 0x36, 0x36, 0x34,
+ 0x36, 0x37, 0x34, 0x37, 0x34, 0x21, 0x37, 0x21, 0x36, 0x31, 0x21, 0x21,
+ 0x34, 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, 0x34, 0x39,
+ 0x33, 0x33, 0x31, 0x33, 0x0B, 0x0B, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x36, 0x34, 0x39, 0x33, 0x36, 0x36, 0x36, 0x34, 0x37, 0x36, 0x21, 0x31,
+ 0x31, 0x36, 0x36, 0x36, 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, 0x31, 0x39, 0x31, 0x33, 0x31, 0x33, 0x0B, 0x0B, 0x0B,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x36, 0x34, 0x39, 0x33, 0x33, 0x36, 0x36,
+ 0x34, 0x31, 0x36, 0x31, 0x31, 0x31, 0x31, 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, 0x31, 0x39, 0x0E, 0x33,
+ 0x31, 0x33, 0x33, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x34,
+ 0x39, 0x39, 0x33, 0x33, 0x36, 0x34, 0x31, 0x36, 0x36, 0x36, 0x36, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x31, 0x31, 0x33, 0x31, 0x31, 0x33, 0x31, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x36, 0x34, 0x3B, 0x39, 0x39, 0x33, 0x39, 0x34, 0x36,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x33, 0x33, 0x31,
+ 0x33, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x34, 0x39, 0x3B,
+ 0x39, 0x33, 0x39, 0x34, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x31, 0x31, 0x33, 0x31, 0x33, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x34, 0x34, 0x31, 0x31, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x31, 0x0B, 0x34,
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x33, 0x31, 0x31, 0x0B, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask6LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x7F,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x0B, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x5F, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x5F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x01, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x88, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 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,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x7E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x3F, 0xFF, 0xFC, 0x00,
+ 0x00, 0x00, 0x03, 0xFE, 0x1F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0x81, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xC0, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x3F, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite6RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x34, 0x00, 0x00, 0x32, 0x00, 0x00,
+ 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x36, 0x32, 0x32, 0x34, 0x36, 0x31,
+ 0x00, 0x35, 0x32, 0x00, 0x00, 0x33, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x37, 0x32, 0x31, 0x36, 0x36,
+ 0x33, 0x36, 0x34, 0x31, 0x00, 0x00, 0x36, 0x32, 0x00, 0x33, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x37, 0x37, 0x37, 0x36, 0x34,
+ 0x36, 0x36, 0x31, 0x36, 0x36, 0x33, 0x36, 0x31, 0x31, 0x00, 0x36, 0x36,
+ 0x33, 0x36, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x37, 0x36, 0x37, 0x31, 0x36,
+ 0x33, 0x36, 0x31, 0x21, 0x36, 0x31, 0x31, 0x31, 0x36, 0x33, 0x32, 0x36,
+ 0x31, 0x31, 0x33, 0x36, 0x33, 0x36, 0x32, 0x00, 0x36, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x37, 0x36, 0x36,
+ 0x21, 0x33, 0x36, 0x36, 0x36, 0x33, 0x36, 0x33, 0x21, 0x36, 0x36, 0x31,
+ 0x31, 0x36, 0x33, 0x32, 0x36, 0x31, 0x31, 0x36, 0x33, 0x36, 0x36, 0x00,
+ 0x36, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x37,
+ 0x21, 0x33, 0x36, 0x36, 0x36, 0x21, 0x33, 0x36, 0x36, 0x21, 0x33, 0x36,
+ 0x36, 0x33, 0x31, 0x36, 0x36, 0x31, 0x31, 0x33, 0x32, 0x36, 0x31, 0x31,
+ 0x36, 0x33, 0x36, 0x33, 0x36, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x36, 0x21, 0x21, 0x33, 0x36, 0x36, 0x36, 0x21, 0x33,
+ 0x36, 0x36, 0x21, 0x33, 0x36, 0x36, 0x33, 0x31, 0x36, 0x36, 0x31, 0x31,
+ 0x33, 0x32, 0x36, 0x31, 0x36, 0x33, 0x36, 0x33, 0x36, 0x00, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x37, 0x36, 0x33, 0x36, 0x36, 0x21, 0x21, 0x21,
+ 0x33, 0x36, 0x36, 0x21, 0x33, 0x36, 0x36, 0x36, 0x21, 0x36, 0x31, 0x33,
+ 0x31, 0x36, 0x36, 0x31, 0x31, 0x33, 0x34, 0x31, 0x34, 0x33, 0x36, 0x33,
+ 0x36, 0x33, 0x36, 0x00, 0x32, 0x00, 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, 0x36, 0x37, 0x36, 0x21, 0x21,
+ 0x33, 0x36, 0x37, 0x21, 0x21, 0x33, 0x37, 0x36, 0x31, 0x33, 0x31, 0x36,
+ 0x31, 0x31, 0x36, 0x31, 0x31, 0x31, 0x34, 0x0B, 0x31, 0x31, 0x34, 0x31,
+ 0x34, 0x33, 0x34, 0x33, 0x36, 0x33, 0x36, 0x00, 0x32, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x33, 0x33,
+ 0x36, 0x37, 0x21, 0x21, 0x21, 0x33, 0x36, 0x37, 0x31, 0x31, 0x31, 0x37,
+ 0x31, 0x37, 0x37, 0x36, 0x36, 0x31, 0x37, 0x31, 0x37, 0x31, 0x34, 0x37,
+ 0x31, 0x37, 0x37, 0x34, 0x34, 0x0B, 0x34, 0x33, 0x34, 0x33, 0x36, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x34, 0x36, 0x21, 0x21, 0x33, 0x36, 0x21, 0x21, 0x21, 0x33, 0x36,
+ 0x36, 0x31, 0x37, 0x36, 0x37, 0x36, 0x0B, 0x37, 0x37, 0x34, 0x34, 0x0B,
+ 0x0B, 0x0B, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x7B, 0x0B, 0x0B, 0x0B,
+ 0x34, 0x33, 0x36, 0x33, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x39, 0x21, 0x36, 0x33, 0x21, 0x21, 0x33, 0x36,
+ 0x21, 0x21, 0x21, 0x37, 0x36, 0x37, 0x31, 0x34, 0x34, 0x34, 0x0B, 0x32,
+ 0x0B, 0x33, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x38, 0x34, 0x34, 0x32, 0x0B,
+ 0x35, 0x38, 0x34, 0x32, 0x0B, 0x38, 0x38, 0x36, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x34, 0x21, 0x36, 0x36, 0x37,
+ 0x33, 0x21, 0x21, 0x33, 0x36, 0x21, 0x36, 0x34, 0x32, 0x32, 0x37, 0x37,
+ 0x0B, 0x34, 0x34, 0x34, 0x32, 0x32, 0x0B, 0x0B, 0x38, 0x34, 0x0B, 0x0B,
+ 0x38, 0x38, 0x34, 0x32, 0x0B, 0x0B, 0x34, 0x38, 0x32, 0x32, 0x0B, 0x38,
+ 0x38, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x21,
+ 0x36, 0x34, 0x37, 0x21, 0x21, 0x36, 0x21, 0x21, 0x37, 0x36, 0x37, 0x34,
+ 0x34, 0x34, 0x32, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x38, 0x34, 0x32, 0x32,
+ 0x0B, 0x38, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x32, 0x0B, 0x0B, 0x34,
+ 0x38, 0x32, 0x32, 0x0B, 0x38, 0x38, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x32, 0x35, 0x21, 0x34, 0x21, 0x36, 0x37, 0x21, 0x21, 0x36, 0x21,
+ 0x34, 0x32, 0x32, 0x37, 0x37, 0x0B, 0x34, 0x37, 0x32, 0x32, 0x0B, 0x0B,
+ 0x0B, 0x38, 0x34, 0x38, 0x32, 0x33, 0x38, 0x38, 0x34, 0x0B, 0x0B, 0x38,
+ 0x38, 0x34, 0x32, 0x0B, 0x34, 0x38, 0x32, 0x32, 0x0B, 0x38, 0x38, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x34, 0x21, 0x34, 0x37, 0x21, 0x36,
+ 0x37, 0x21, 0x37, 0x36, 0x36, 0x34, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x0B,
+ 0x38, 0x37, 0x32, 0x32, 0x0B, 0x33, 0x0B, 0x34, 0x34, 0x32, 0x32, 0x0B,
+ 0x38, 0x34, 0x0B, 0x0B, 0x0B, 0x38, 0x34, 0x34, 0x32, 0x0B, 0x38, 0x34,
+ 0x32, 0x32, 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x34,
+ 0x21, 0x21, 0x37, 0x21, 0x37, 0x37, 0x37, 0x36, 0x37, 0x32, 0x0B, 0x34,
+ 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x37, 0x32, 0x32, 0x0B, 0x0B,
+ 0x38, 0x38, 0x34, 0x33, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x0B, 0x38, 0x38,
+ 0x34, 0x39, 0x32, 0x38, 0x38, 0x32, 0x32, 0x34, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x21, 0x21, 0x37, 0x21, 0x21, 0x37, 0x21, 0x37, 0x36, 0x34,
+ 0x0B, 0x0B, 0x32, 0x32, 0x0B, 0x37, 0x37, 0x34, 0x33, 0x0B, 0x0B, 0x38,
+ 0x34, 0x37, 0x33, 0x33, 0x0B, 0x0B, 0x34, 0x34, 0x33, 0x0B, 0x38, 0x38,
+ 0x0B, 0x33, 0x0B, 0x32, 0x34, 0x38, 0x39, 0x32, 0x38, 0x34, 0x32, 0x34,
+ 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x37, 0x36, 0x21, 0x37, 0x37, 0x21,
+ 0x37, 0x36, 0x34, 0x0B, 0x0B, 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x37,
+ 0x38, 0x0B, 0x33, 0x0B, 0x0B, 0x38, 0x34, 0x33, 0x33, 0x33, 0x0B, 0x38,
+ 0x38, 0x33, 0x0B, 0x0B, 0x34, 0x0B, 0x33, 0x0B, 0x32, 0x34, 0x34, 0x39,
+ 0x32, 0x38, 0x34, 0x34, 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x34, 0x37,
+ 0x37, 0x21, 0x37, 0x37, 0x37, 0x34, 0x0B, 0x37, 0x0B, 0x0B, 0x0B, 0x38,
+ 0x38, 0x37, 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x0B, 0x0B, 0x38, 0x38,
+ 0x0B, 0x33, 0x33, 0x0B, 0x38, 0x38, 0x33, 0x0B, 0x0B, 0x34, 0x0B, 0x33,
+ 0x39, 0x32, 0x36, 0x34, 0x39, 0x32, 0x38, 0x3A, 0x34, 0x34, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x21, 0x34, 0x34, 0x37, 0x34, 0x37, 0x34, 0x36, 0x34, 0x36,
+ 0x37, 0x34, 0x34, 0x0B, 0x33, 0x34, 0x37, 0x0B, 0x0B, 0x0B, 0x38, 0x38,
+ 0x33, 0x33, 0x0B, 0x38, 0x34, 0x0B, 0x39, 0x33, 0x0B, 0x38, 0x38, 0x33,
+ 0x33, 0x0B, 0x34, 0x33, 0x39, 0x39, 0x32, 0x36, 0x34, 0x32, 0x33, 0x3A,
+ 0x34, 0x38, 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x34, 0x34, 0x00, 0x00, 0x36, 0x21, 0x36, 0x34, 0x37, 0x34,
+ 0x36, 0x34, 0x36, 0x32, 0x32, 0x32, 0x34, 0x38, 0x0B, 0x0B, 0x34, 0x38,
+ 0x33, 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x33, 0x38, 0x38, 0x34, 0x33,
+ 0x39, 0x0B, 0x38, 0x34, 0x39, 0x33, 0x33, 0x34, 0x33, 0x39, 0x39, 0x33,
+ 0x34, 0x39, 0x3A, 0x3A, 0x34, 0x38, 0x38, 0x38, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x36, 0x34, 0x00, 0x00, 0x36,
+ 0x21, 0x36, 0x34, 0x34, 0x34, 0x37, 0x32, 0x36, 0x36, 0x39, 0x0B, 0x34,
+ 0x38, 0x33, 0x0B, 0x34, 0x38, 0x33, 0x33, 0x39, 0x34, 0x38, 0x0B, 0x39,
+ 0x33, 0x0B, 0x38, 0x38, 0x39, 0x39, 0x0B, 0x38, 0x34, 0x39, 0x39, 0x33,
+ 0x0B, 0x33, 0x3B, 0x39, 0x39, 0x34, 0x34, 0x34, 0x34, 0x3A, 0x32, 0x38,
+ 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x34, 0x34,
+ 0x36, 0x34, 0x00, 0x00, 0x34, 0x21, 0x34, 0x36, 0x37, 0x32, 0x36, 0x36,
+ 0x34, 0x36, 0x3B, 0x0B, 0x0B, 0x34, 0x33, 0x0B, 0x32, 0x38, 0x0B, 0x33,
+ 0x39, 0x34, 0x38, 0x0B, 0x3B, 0x39, 0x0B, 0x38, 0x38, 0x3B, 0x39, 0x0B,
+ 0x38, 0x34, 0x3B, 0x3B, 0x33, 0x0B, 0x33, 0x3B, 0x3B, 0x34, 0x35, 0x34,
+ 0x0B, 0x32, 0x38, 0x38, 0x38, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x37, 0x37, 0x37, 0x34, 0x34, 0x36, 0x34, 0x00, 0x00, 0x34, 0x34, 0x34,
+ 0x0B, 0x37, 0x36, 0x34, 0x7B, 0x34, 0x3B, 0x33, 0x0B, 0x38, 0x35, 0x33,
+ 0x33, 0x32, 0x38, 0x34, 0x33, 0x3B, 0x39, 0x34, 0x34, 0x3B, 0x39, 0x33,
+ 0x38, 0x38, 0x3B, 0x39, 0x0B, 0x38, 0x34, 0x3B, 0x3B, 0x39, 0x33, 0x33,
+ 0x36, 0x35, 0x35, 0x35, 0x0B, 0x34, 0x34, 0x39, 0x39, 0x36, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x37, 0x37, 0x34, 0x34, 0x36, 0x34,
+ 0x00, 0x38, 0x38, 0x37, 0x0B, 0x37, 0x34, 0x7B, 0x7B, 0x7B, 0x36, 0x3B,
+ 0x39, 0x0B, 0x38, 0x0B, 0x0B, 0x33, 0x32, 0x34, 0x34, 0x0B, 0x3B, 0x39,
+ 0x34, 0x34, 0x3B, 0x39, 0x33, 0x34, 0x34, 0x3B, 0x39, 0x33, 0x38, 0x34,
+ 0x3B, 0x3B, 0x39, 0x33, 0x35, 0x0B, 0x0B, 0x39, 0x0B, 0x36, 0x3B, 0x7B,
+ 0x7B, 0x39, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x34, 0x34, 0x34,
+ 0x37, 0x34, 0x36, 0x21, 0x37, 0x38, 0x38, 0x34, 0x32, 0x36, 0x34, 0x7B,
+ 0x7B, 0x7B, 0x34, 0x3B, 0x33, 0x39, 0x0B, 0x38, 0x34, 0x0B, 0x34, 0x34,
+ 0x33, 0x3B, 0x39, 0x34, 0x34, 0x34, 0x0B, 0x3B, 0x3B, 0x39, 0x34, 0x34,
+ 0x3B, 0x3B, 0x33, 0x38, 0x34, 0x39, 0x3B, 0x32, 0x0B, 0x39, 0x39, 0x0B,
+ 0x36, 0x34, 0x39, 0x7B, 0x7B, 0x36, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x37, 0x37, 0x37, 0x34, 0x37, 0x34, 0x21, 0x37, 0x34, 0x34, 0x0B,
+ 0x32, 0x37, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x3B, 0x39, 0x33, 0x3B, 0x0B,
+ 0x38, 0x38, 0x33, 0x3B, 0x39, 0x34, 0x34, 0x34, 0x0B, 0x39, 0x3B, 0x3B,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x3B, 0x39, 0x33, 0x34, 0x36, 0x33, 0x32,
+ 0x0B, 0x39, 0x0B, 0x39, 0x36, 0x39, 0x34, 0x39, 0x36, 0x34, 0x34, 0x36,
+ 0x0B, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x37, 0x37, 0x37, 0x37, 0x21,
+ 0x21, 0x37, 0x39, 0x0B, 0x33, 0x36, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x3B,
+ 0x39, 0x39, 0x39, 0x3B, 0x34, 0x33, 0x3B, 0x39, 0x38, 0x38, 0x0B, 0x39,
+ 0x3B, 0x3B, 0x3B, 0x38, 0x34, 0x34, 0x36, 0x39, 0x39, 0x39, 0x39, 0x39,
+ 0x33, 0x34, 0x33, 0x0B, 0x0B, 0x39, 0x39, 0x3B, 0x36, 0x39, 0x39, 0x34,
+ 0x38, 0x34, 0x34, 0x36, 0x31, 0x31, 0x0B, 0x00, 0x34, 0x34, 0x34, 0x34,
+ 0x34, 0x37, 0x37, 0x37, 0x21, 0x21, 0x37, 0x0B, 0x32, 0x37, 0x36, 0x34,
+ 0x7B, 0x7B, 0x34, 0x3B, 0x0B, 0x34, 0x34, 0x38, 0x33, 0x3B, 0x34, 0x38,
+ 0x34, 0x0B, 0x39, 0x39, 0x39, 0x38, 0x38, 0x38, 0x39, 0x39, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x36, 0x34, 0x34, 0x34, 0x32, 0x0B, 0x39, 0x39, 0x39, 0x3B,
+ 0x36, 0x39, 0x36, 0x38, 0x38, 0x34, 0x36, 0x31, 0x31, 0x31, 0x31, 0x31,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x37, 0x37, 0x37, 0x21, 0x21, 0x34,
+ 0x33, 0x0B, 0x3B, 0x36, 0x34, 0x34, 0x36, 0x3B, 0x34, 0x38, 0x33, 0x0B,
+ 0x0B, 0x7B, 0x7B, 0x0B, 0x39, 0x39, 0x0B, 0x36, 0x38, 0x38, 0x39, 0x39,
+ 0x3B, 0x3B, 0x3B, 0x34, 0x34, 0x34, 0x34, 0x36, 0x39, 0x39, 0x32, 0x0B,
+ 0x39, 0x39, 0x3B, 0x3B, 0x36, 0x39, 0x36, 0x38, 0x34, 0x36, 0x31, 0x31,
+ 0x33, 0x39, 0x39, 0x39, 0x34, 0x34, 0x34, 0x34, 0x34, 0x37, 0x37, 0x37,
+ 0x21, 0x21, 0x37, 0x0B, 0x33, 0x34, 0x0B, 0x3B, 0x34, 0x36, 0x3B, 0x0B,
+ 0x38, 0x33, 0x0B, 0x0B, 0x7B, 0x34, 0x33, 0x33, 0x39, 0x0B, 0x36, 0x38,
+ 0x39, 0x33, 0x39, 0x33, 0x3B, 0x39, 0x34, 0x34, 0x34, 0x39, 0x39, 0x3B,
+ 0x3B, 0x3B, 0x32, 0x39, 0x39, 0x39, 0x3B, 0x3B, 0x39, 0x39, 0x34, 0x38,
+ 0x36, 0x31, 0x31, 0x39, 0x39, 0x36, 0x34, 0x00, 0x34, 0x34, 0x34, 0x37,
+ 0x37, 0x34, 0x37, 0x21, 0x21, 0x37, 0x32, 0x0B, 0x34, 0x36, 0x36, 0x32,
+ 0x3B, 0x3B, 0x0B, 0x38, 0x33, 0x0B, 0x36, 0x34, 0x0B, 0x33, 0x33, 0x33,
+ 0x0B, 0x36, 0x38, 0x39, 0x33, 0x33, 0x39, 0x39, 0x38, 0x38, 0x34, 0x39,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x32, 0x39, 0x39, 0x3B, 0x3B, 0x3B,
+ 0x39, 0x39, 0x38, 0x38, 0x36, 0x39, 0x39, 0x36, 0x36, 0x34, 0x0B, 0x00,
+ 0x34, 0x34, 0x37, 0x37, 0x34, 0x37, 0x37, 0x21, 0x32, 0x37, 0x37, 0x34,
+ 0x32, 0x38, 0x38, 0x38, 0x34, 0x34, 0x38, 0x33, 0x0B, 0x36, 0x34, 0x33,
+ 0x33, 0x33, 0x0B, 0x0B, 0x36, 0x38, 0x33, 0x33, 0x33, 0x33, 0x33, 0x38,
+ 0x34, 0x36, 0x39, 0x3B, 0x3B, 0x36, 0x36, 0x36, 0x39, 0x39, 0x32, 0x33,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x38, 0x38, 0x33, 0x36, 0x39, 0x39,
+ 0x34, 0x36, 0x34, 0x0B, 0x37, 0x37, 0x34, 0x34, 0x37, 0x37, 0x34, 0x32,
+ 0x37, 0x34, 0x34, 0x32, 0x34, 0x35, 0x34, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
+ 0x36, 0x34, 0x33, 0x33, 0x33, 0x0B, 0x0B, 0x38, 0x38, 0x33, 0x33, 0x0B,
+ 0x0B, 0x38, 0x38, 0x34, 0x33, 0x3B, 0x3B, 0x3B, 0x36, 0x36, 0x39, 0x39,
+ 0x39, 0x3B, 0x35, 0x33, 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x34, 0x38,
+ 0x33, 0x33, 0x39, 0x36, 0x36, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x37,
+ 0x37, 0x34, 0x32, 0x36, 0x34, 0x00, 0x00, 0x34, 0x32, 0x34, 0x35, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x33, 0x0B, 0x0B, 0x0B, 0x34, 0x38, 0x33,
+ 0x33, 0x33, 0x0B, 0x34, 0x38, 0x34, 0x36, 0x33, 0x33, 0x39, 0x36, 0x36,
+ 0x36, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x35, 0x33, 0x39, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x39, 0x38, 0x36, 0x39, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x34, 0x37, 0x37, 0x34, 0x36, 0x34, 0x34, 0x00, 0x00, 0x34, 0x31,
+ 0x34, 0x35, 0x31, 0x36, 0x36, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
+ 0x38, 0x38, 0x33, 0x33, 0x0B, 0x0B, 0x38, 0x38, 0x36, 0x33, 0x33, 0x33,
+ 0x36, 0x34, 0x34, 0x39, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x32,
+ 0x39, 0x39, 0x3B, 0x3B, 0x39, 0x3B, 0x3B, 0x36, 0x36, 0x36, 0x36, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x37, 0x37, 0x34, 0x34, 0x36, 0x34, 0x00, 0x00,
+ 0x00, 0x34, 0x36, 0x34, 0x34, 0x34, 0x34, 0x31, 0x34, 0x34, 0x34, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x33, 0x33, 0x33, 0x0B, 0x34, 0x38, 0x38, 0x33,
+ 0x33, 0x0B, 0x0B, 0x34, 0x34, 0x36, 0x39, 0x39, 0x39, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x35, 0x32, 0x33, 0x39, 0x39, 0x3B, 0x3B, 0x36, 0x34, 0x3B,
+ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x36,
+ 0x34, 0x00, 0x00, 0x00, 0x34, 0x37, 0x34, 0x37, 0x31, 0x34, 0x31, 0x34,
+ 0x31, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x38,
+ 0x38, 0x36, 0x33, 0x33, 0x0B, 0x34, 0x34, 0x34, 0x39, 0x39, 0x39, 0x37,
+ 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x33, 0x35, 0x35, 0x32, 0x33, 0x39, 0x39,
+ 0x39, 0x34, 0x3B, 0x39, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x36, 0x34, 0x00, 0x00, 0x00, 0x34, 0x37, 0x34, 0x37, 0x36,
+ 0x34, 0x31, 0x34, 0x31, 0x0B, 0x34, 0x31, 0x34, 0x34, 0x34, 0x34, 0x34,
+ 0x38, 0x38, 0x38, 0x0B, 0x33, 0x33, 0x0B, 0x0B, 0x34, 0x34, 0x39, 0x39,
+ 0x39, 0x37, 0x37, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x33, 0x35, 0x35, 0x32,
+ 0x39, 0x33, 0x33, 0x39, 0x39, 0x35, 0x0E, 0x39, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, 0x37,
+ 0x34, 0x36, 0x34, 0x37, 0x34, 0x34, 0x31, 0x0B, 0x34, 0x31, 0x0B, 0x31,
+ 0x0B, 0x31, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x34,
+ 0x34, 0x33, 0x39, 0x37, 0x37, 0x37, 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x33,
+ 0x32, 0x35, 0x32, 0x39, 0x3B, 0x39, 0x0B, 0x33, 0x39, 0x33, 0x35, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x37, 0x34, 0x37, 0x34, 0x37, 0x36, 0x37, 0x34, 0x34, 0x31,
+ 0x0B, 0x36, 0x34, 0x31, 0x34, 0x36, 0x31, 0x38, 0x38, 0x34, 0x34, 0x34,
+ 0x34, 0x34, 0x33, 0x39, 0x33, 0x34, 0x34, 0x36, 0x3B, 0x3B, 0x3B, 0x36,
+ 0x39, 0x39, 0x33, 0x33, 0x33, 0x33, 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x0B,
+ 0x0B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x37, 0x34, 0x36, 0x34, 0x37, 0x36, 0x21,
+ 0x21, 0x37, 0x34, 0x31, 0x31, 0x34, 0x36, 0x31, 0x31, 0x31, 0x0B, 0x31,
+ 0x31, 0x0B, 0x33, 0x33, 0x0B, 0x33, 0x34, 0x34, 0x34, 0x34, 0x3B, 0x3B,
+ 0x3B, 0x36, 0x36, 0x39, 0x39, 0x33, 0x33, 0x33, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x0B, 0x0B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x37, 0x34, 0x37, 0x34,
+ 0x37, 0x36, 0x21, 0x36, 0x21, 0x37, 0x34, 0x34, 0x0B, 0x31, 0x0B, 0x34,
+ 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x39,
+ 0x39, 0x39, 0x39, 0x36, 0x36, 0x36, 0x39, 0x39, 0x3B, 0x39, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x35, 0x0B, 0x32, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x34, 0x32, 0x34, 0x37, 0x34, 0x37, 0x36, 0x21, 0x21, 0x21, 0x37, 0x34,
+ 0x34, 0x0B, 0x31, 0x0B, 0x31, 0x0B, 0x33, 0x0B, 0x33, 0x33, 0x33, 0x33,
+ 0x39, 0x33, 0x39, 0x39, 0x36, 0x36, 0x36, 0x0E, 0x39, 0x39, 0x39, 0x3B,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x35, 0x35, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x34, 0x37, 0x34, 0x36, 0x36, 0x37, 0x36, 0x21, 0x36,
+ 0x21, 0x21, 0x21, 0x37, 0x34, 0x34, 0x37, 0x31, 0x37, 0x37, 0x0B, 0x37,
+ 0x0B, 0x33, 0x0E, 0x0E, 0x36, 0x36, 0x36, 0x36, 0x0E, 0x39, 0x0E, 0x39,
+ 0x3B, 0x39, 0x3B, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x35, 0x35,
+ 0x35, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x36, 0x37, 0x32, 0x34,
+ 0x37, 0x37, 0x36, 0x21, 0x21, 0x21, 0x21, 0x21, 0x37, 0x34, 0x34, 0x37,
+ 0x31, 0x34, 0x37, 0x0B, 0x37, 0x36, 0x36, 0x36, 0x0E, 0x36, 0x39, 0x0E,
+ 0x39, 0x0E, 0x39, 0x3B, 0x39, 0x3B, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x0E, 0x36, 0x35, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x36, 0x36, 0x32, 0x34, 0x37, 0x37, 0x36, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x37, 0x37, 0x34, 0x34, 0x36, 0x34, 0x31, 0x31, 0x36, 0x31, 0x36,
+ 0x36, 0x0E, 0x0E, 0x0E, 0x0E, 0x39, 0x0E, 0x39, 0x0E, 0x39, 0x0E, 0x39,
+ 0x39, 0x39, 0x0E, 0x36, 0x36, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x37, 0x36, 0x32, 0x34, 0x36, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x37, 0x34, 0x37, 0x34, 0x34,
+ 0x34, 0x34, 0x36, 0x0E, 0x36, 0x36, 0x0E, 0x36, 0x0E, 0x36, 0x0E, 0x36,
+ 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x36, 0x36, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x31,
+ 0x36, 0x32, 0x32, 0x36, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36,
+ 0x37, 0x34, 0x34, 0x34, 0x36, 0x34, 0x34, 0x36, 0x34, 0x36, 0x34, 0x36,
+ 0x34, 0x36, 0x34, 0x36, 0x34, 0x36, 0x34, 0x36, 0x37, 0x37, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x34, 0x31, 0x36, 0x34, 0x31, 0x36, 0x31, 0x21, 0x31,
+ 0x21, 0x37, 0x21, 0x34, 0x37, 0x34, 0x37, 0x36, 0x34, 0x36, 0x36, 0x34,
+ 0x36, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x0B, 0x0B, 0x37, 0x33, 0x37,
+ 0x39, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x31, 0x31, 0x34,
+ 0x21, 0x21, 0x31, 0x36, 0x31, 0x21, 0x36, 0x37, 0x34, 0x36, 0x36, 0x36,
+ 0x33, 0x39, 0x34, 0x36, 0x00, 0x00, 0x00, 0x00, 0x34, 0x37, 0x0B, 0x0B,
+ 0x33, 0x31, 0x33, 0x33, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x34, 0x31, 0x31, 0x36, 0x36, 0x36, 0x31, 0x31, 0x36, 0x31, 0x34,
+ 0x36, 0x36, 0x33, 0x33, 0x39, 0x34, 0x36, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x37, 0x0B, 0x0B, 0x33, 0x31, 0x33, 0x31, 0x39, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x31, 0x31, 0x31, 0x31,
+ 0x36, 0x31, 0x34, 0x36, 0x33, 0x33, 0x39, 0x39, 0x34, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x35, 0x33, 0x31, 0x33, 0x0E, 0x39, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x36, 0x36, 0x36, 0x34, 0x39, 0x33, 0x39, 0x39, 0x31, 0x34,
+ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x31, 0x33, 0x31, 0x33,
+ 0x31, 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, 0x34, 0x31, 0x33, 0x39,
+ 0x31, 0x31, 0x34, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x31,
+ 0x33, 0x31, 0x33, 0x31, 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, 0x34,
+ 0x31, 0x33, 0x31, 0x31, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0B, 0x33, 0x31, 0x33, 0x31, 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, 0x34, 0x31, 0x31, 0x34, 0x34, 0x00, 0x00, 0x34, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x31, 0x31, 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, 0x34, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00,
+ 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x31, 0x31,
+ 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x33, 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, 0x0B, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask6RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xF6, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0xF3, 0x48, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFB, 0xE8, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xE8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xEA, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFA, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFA, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x80, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE, 0x80, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFE, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x79, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFC, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x23, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xF8, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xF0, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE1,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC1, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0x81, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF2, 0x03, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0xE4, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x07,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite6RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x32, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x32, 0x32, 0x36, 0x32, 0x32, 0x32,
+ 0x32, 0x32, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x32, 0x21, 0x32, 0x32, 0x36,
+ 0x36, 0x31, 0x32, 0x35, 0x32, 0x32, 0x32, 0x00, 0x32, 0x00, 0x00, 0x32,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x32, 0x37, 0x37, 0x31, 0x31,
+ 0x36, 0x36, 0x33, 0x36, 0x35, 0x31, 0x32, 0x32, 0x36, 0x32, 0x33, 0x36,
+ 0x32, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x37, 0x37, 0x21, 0x21, 0x36,
+ 0x21, 0x31, 0x36, 0x31, 0x31, 0x36, 0x36, 0x33, 0x36, 0x31, 0x31, 0x32,
+ 0x36, 0x36, 0x33, 0x36, 0x32, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x37, 0x31,
+ 0x36, 0x21, 0x21, 0x21, 0x36, 0x21, 0x31, 0x36, 0x31, 0x31, 0x36, 0x33,
+ 0x32, 0x36, 0x31, 0x31, 0x33, 0x36, 0x33, 0x36, 0x36, 0x36, 0x36, 0x36,
+ 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32,
+ 0x37, 0x37, 0x21, 0x21, 0x31, 0x36, 0x21, 0x21, 0x21, 0x36, 0x21, 0x21,
+ 0x36, 0x36, 0x31, 0x31, 0x36, 0x33, 0x32, 0x36, 0x31, 0x36, 0x31, 0x36,
+ 0x33, 0x36, 0x33, 0x36, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x32, 0x21, 0x21, 0x21, 0x39, 0x36, 0x21, 0x21, 0x36, 0x36,
+ 0x21, 0x21, 0x36, 0x36, 0x31, 0x31, 0x36, 0x36, 0x31, 0x31, 0x33, 0x32,
+ 0x36, 0x36, 0x31, 0x36, 0x33, 0x36, 0x33, 0x36, 0x32, 0x00, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x37, 0x37, 0x21, 0x21, 0x21, 0x36, 0x36,
+ 0x36, 0x21, 0x21, 0x36, 0x36, 0x21, 0x21, 0x36, 0x36, 0x21, 0x31, 0x36,
+ 0x36, 0x31, 0x31, 0x33, 0x33, 0x34, 0x31, 0x34, 0x33, 0x36, 0x33, 0x36,
+ 0x32, 0x36, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 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, 0x34, 0x36, 0x36,
+ 0x21, 0x21, 0x21, 0x21, 0x36, 0x36, 0x21, 0x21, 0x21, 0x36, 0x36, 0x21,
+ 0x36, 0x31, 0x21, 0x31, 0x36, 0x36, 0x31, 0x31, 0x31, 0x34, 0x31, 0x34,
+ 0x33, 0x34, 0x33, 0x36, 0x33, 0x36, 0x32, 0x36, 0x32, 0x34, 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, 0x37,
+ 0x39, 0x21, 0x21, 0x21, 0x36, 0x37, 0x21, 0x21, 0x21, 0x37, 0x36, 0x31,
+ 0x31, 0x31, 0x36, 0x31, 0x31, 0x36, 0x31, 0x31, 0x31, 0x34, 0x0B, 0x31,
+ 0x31, 0x37, 0x37, 0x34, 0x34, 0x0B, 0x34, 0x33, 0x33, 0x36, 0x32, 0x36,
+ 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x36, 0x33, 0x36, 0x37, 0x21, 0x21, 0x21, 0x21, 0x36, 0x37, 0x31,
+ 0x31, 0x31, 0x37, 0x34, 0x36, 0x37, 0x36, 0x36, 0x31, 0x37, 0x31, 0x0B,
+ 0x0B, 0x0B, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x7B, 0x0B, 0x0B, 0x0B,
+ 0x34, 0x33, 0x36, 0x33, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x32, 0x34, 0x36, 0x21, 0x21, 0x21, 0x36, 0x21, 0x21,
+ 0x21, 0x21, 0x36, 0x36, 0x31, 0x37, 0x36, 0x37, 0x36, 0x34, 0x37, 0x37,
+ 0x0B, 0x33, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x38, 0x34, 0x34, 0x32, 0x0B,
+ 0x35, 0x38, 0x34, 0x32, 0x0B, 0x38, 0x38, 0x36, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x21, 0x36, 0x21, 0x21,
+ 0x21, 0x21, 0x36, 0x21, 0x21, 0x21, 0x21, 0x36, 0x37, 0x31, 0x34, 0x37,
+ 0x0B, 0x34, 0x34, 0x34, 0x32, 0x32, 0x0B, 0x0B, 0x38, 0x34, 0x0B, 0x0B,
+ 0x38, 0x38, 0x34, 0x32, 0x0B, 0x0B, 0x34, 0x38, 0x32, 0x32, 0x0B, 0x38,
+ 0x38, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x34,
+ 0x21, 0x36, 0x37, 0x36, 0x21, 0x21, 0x21, 0x36, 0x21, 0x36, 0x34, 0x34,
+ 0x34, 0x34, 0x32, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x38, 0x34, 0x32, 0x32,
+ 0x0B, 0x38, 0x34, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x32, 0x0B, 0x0B, 0x34,
+ 0x38, 0x32, 0x32, 0x0B, 0x38, 0x38, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x39, 0x21, 0x36, 0x34, 0x21, 0x21, 0x21, 0x36, 0x21, 0x21,
+ 0x21, 0x36, 0x32, 0x37, 0x37, 0x0B, 0x34, 0x37, 0x32, 0x32, 0x0B, 0x0B,
+ 0x0B, 0x38, 0x34, 0x38, 0x32, 0x33, 0x38, 0x38, 0x34, 0x0B, 0x0B, 0x38,
+ 0x38, 0x34, 0x32, 0x0B, 0x34, 0x38, 0x32, 0x32, 0x0B, 0x38, 0x38, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x21, 0x34, 0x21, 0x36, 0x21,
+ 0x21, 0x21, 0x36, 0x21, 0x34, 0x32, 0x34, 0x34, 0x0B, 0x0B, 0x0B, 0x0B,
+ 0x38, 0x37, 0x32, 0x32, 0x0B, 0x33, 0x0B, 0x34, 0x34, 0x32, 0x32, 0x0B,
+ 0x38, 0x34, 0x0B, 0x0B, 0x0B, 0x38, 0x34, 0x34, 0x32, 0x0B, 0x38, 0x34,
+ 0x32, 0x32, 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21,
+ 0x34, 0x37, 0x21, 0x36, 0x21, 0x21, 0x37, 0x36, 0x36, 0x32, 0x0B, 0x34,
+ 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x38, 0x37, 0x32, 0x32, 0x0B, 0x0B,
+ 0x38, 0x38, 0x34, 0x33, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x0B, 0x38, 0x38,
+ 0x34, 0x39, 0x32, 0x38, 0x38, 0x32, 0x32, 0x34, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x21, 0x34, 0x21, 0x21, 0x37, 0x21, 0x37, 0x37, 0x37, 0x36,
+ 0x0B, 0x0B, 0x32, 0x32, 0x0B, 0x37, 0x37, 0x34, 0x33, 0x0B, 0x0B, 0x38,
+ 0x34, 0x37, 0x33, 0x33, 0x0B, 0x0B, 0x34, 0x34, 0x33, 0x0B, 0x38, 0x38,
+ 0x0B, 0x33, 0x0B, 0x32, 0x34, 0x38, 0x39, 0x32, 0x38, 0x34, 0x32, 0x34,
+ 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x34, 0x34, 0x37, 0x21, 0x37, 0x37,
+ 0x37, 0x37, 0x36, 0x34, 0x0B, 0x37, 0x38, 0x0B, 0x0B, 0x0B, 0x0B, 0x37,
+ 0x38, 0x0B, 0x33, 0x0B, 0x0B, 0x38, 0x34, 0x33, 0x33, 0x33, 0x0B, 0x38,
+ 0x38, 0x33, 0x0B, 0x0B, 0x34, 0x0B, 0x33, 0x0B, 0x32, 0x34, 0x34, 0x39,
+ 0x32, 0x38, 0x34, 0x34, 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x36,
+ 0x37, 0x37, 0x37, 0x37, 0x37, 0x36, 0x34, 0x37, 0x0B, 0x0B, 0x0B, 0x38,
+ 0x38, 0x37, 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x0B, 0x0B, 0x38, 0x38,
+ 0x0B, 0x33, 0x33, 0x0B, 0x38, 0x38, 0x33, 0x0B, 0x0B, 0x34, 0x0B, 0x33,
+ 0x39, 0x32, 0x36, 0x34, 0x39, 0x32, 0x38, 0x3A, 0x34, 0x34, 0x34, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x37, 0x37, 0x37, 0x34, 0x37, 0x34, 0x34, 0x37, 0x36,
+ 0x37, 0x34, 0x34, 0x0B, 0x33, 0x34, 0x37, 0x0B, 0x0B, 0x0B, 0x38, 0x38,
+ 0x33, 0x33, 0x0B, 0x38, 0x34, 0x0B, 0x39, 0x33, 0x0B, 0x38, 0x38, 0x33,
+ 0x33, 0x0B, 0x34, 0x33, 0x39, 0x39, 0x32, 0x36, 0x34, 0x32, 0x33, 0x3A,
+ 0x34, 0x38, 0x38, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x36, 0x34, 0x37, 0x34,
+ 0x34, 0x37, 0x36, 0x32, 0x32, 0x32, 0x34, 0x38, 0x0B, 0x0B, 0x34, 0x38,
+ 0x33, 0x0B, 0x0B, 0x34, 0x38, 0x0B, 0x33, 0x33, 0x38, 0x38, 0x34, 0x33,
+ 0x39, 0x0B, 0x38, 0x34, 0x39, 0x33, 0x33, 0x34, 0x33, 0x39, 0x39, 0x33,
+ 0x34, 0x39, 0x3A, 0x3A, 0x34, 0x38, 0x38, 0x38, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x34,
+ 0x34, 0x21, 0x36, 0x34, 0x37, 0x37, 0x32, 0x36, 0x36, 0x39, 0x0B, 0x34,
+ 0x38, 0x33, 0x0B, 0x34, 0x38, 0x33, 0x33, 0x39, 0x34, 0x38, 0x0B, 0x39,
+ 0x33, 0x0B, 0x38, 0x38, 0x39, 0x39, 0x0B, 0x38, 0x34, 0x39, 0x39, 0x33,
+ 0x0B, 0x33, 0x3B, 0x39, 0x39, 0x34, 0x34, 0x34, 0x34, 0x3A, 0x32, 0x38,
+ 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34,
+ 0x36, 0x00, 0x00, 0x00, 0x34, 0x34, 0x21, 0x34, 0x37, 0x32, 0x36, 0x36,
+ 0x34, 0x36, 0x3B, 0x0B, 0x0B, 0x34, 0x33, 0x0B, 0x32, 0x38, 0x0B, 0x33,
+ 0x39, 0x34, 0x38, 0x0B, 0x3B, 0x39, 0x0B, 0x38, 0x38, 0x3B, 0x39, 0x0B,
+ 0x38, 0x34, 0x3B, 0x3B, 0x33, 0x0B, 0x33, 0x3B, 0x3B, 0x34, 0x35, 0x34,
+ 0x0B, 0x32, 0x38, 0x38, 0x38, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x37, 0x37, 0x34, 0x34, 0x36, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34,
+ 0x0B, 0x37, 0x36, 0x34, 0x7B, 0x34, 0x3B, 0x33, 0x0B, 0x38, 0x35, 0x33,
+ 0x33, 0x32, 0x38, 0x34, 0x33, 0x3B, 0x39, 0x34, 0x34, 0x3B, 0x39, 0x33,
+ 0x38, 0x38, 0x3B, 0x39, 0x0B, 0x38, 0x34, 0x3B, 0x3B, 0x39, 0x33, 0x33,
+ 0x36, 0x35, 0x35, 0x35, 0x0B, 0x34, 0x34, 0x39, 0x39, 0x36, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x37, 0x37, 0x34, 0x34, 0x36, 0x34,
+ 0x00, 0x00, 0x34, 0x37, 0x0B, 0x37, 0x34, 0x7B, 0x7B, 0x7B, 0x36, 0x3B,
+ 0x39, 0x0B, 0x38, 0x0B, 0x0B, 0x33, 0x32, 0x34, 0x34, 0x0B, 0x3B, 0x39,
+ 0x34, 0x34, 0x3B, 0x39, 0x33, 0x34, 0x34, 0x3B, 0x39, 0x33, 0x38, 0x34,
+ 0x3B, 0x3B, 0x39, 0x33, 0x35, 0x0B, 0x0B, 0x39, 0x0B, 0x36, 0x3B, 0x7B,
+ 0x7B, 0x39, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0x34, 0x34, 0x34,
+ 0x37, 0x34, 0x36, 0x21, 0x37, 0x00, 0x00, 0x34, 0x32, 0x36, 0x34, 0x7B,
+ 0x7B, 0x7B, 0x34, 0x3B, 0x33, 0x39, 0x0B, 0x38, 0x34, 0x0B, 0x34, 0x34,
+ 0x33, 0x3B, 0x39, 0x34, 0x34, 0x34, 0x0B, 0x3B, 0x3B, 0x39, 0x34, 0x34,
+ 0x3B, 0x3B, 0x33, 0x38, 0x34, 0x39, 0x3B, 0x32, 0x0B, 0x39, 0x39, 0x0B,
+ 0x36, 0x34, 0x39, 0x7B, 0x7B, 0x36, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x34, 0x37, 0x37, 0x37, 0x34, 0x37, 0x34, 0x21, 0x37, 0x34, 0x34, 0x0B,
+ 0x32, 0x37, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x3B, 0x39, 0x33, 0x3B, 0x0B,
+ 0x38, 0x38, 0x33, 0x3B, 0x39, 0x34, 0x34, 0x34, 0x0B, 0x39, 0x3B, 0x3B,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x3B, 0x39, 0x33, 0x34, 0x36, 0x33, 0x32,
+ 0x0B, 0x39, 0x0B, 0x39, 0x36, 0x39, 0x34, 0x39, 0x36, 0x34, 0x34, 0x36,
+ 0x0B, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x37, 0x37, 0x37, 0x37, 0x21,
+ 0x21, 0x37, 0x39, 0x0B, 0x33, 0x36, 0x34, 0x7B, 0x7B, 0x7B, 0x34, 0x3B,
+ 0x39, 0x39, 0x39, 0x3B, 0x34, 0x33, 0x3B, 0x39, 0x38, 0x38, 0x0B, 0x39,
+ 0x3B, 0x3B, 0x3B, 0x38, 0x34, 0x34, 0x36, 0x39, 0x39, 0x39, 0x39, 0x39,
+ 0x33, 0x34, 0x33, 0x0B, 0x0B, 0x39, 0x39, 0x3B, 0x36, 0x39, 0x39, 0x34,
+ 0x38, 0x34, 0x34, 0x36, 0x31, 0x31, 0x00, 0x00, 0x34, 0x34, 0x34, 0x34,
+ 0x34, 0x34, 0x37, 0x37, 0x21, 0x21, 0x37, 0x0B, 0x32, 0x37, 0x36, 0x34,
+ 0x7B, 0x7B, 0x34, 0x3B, 0x0B, 0x34, 0x34, 0x38, 0x33, 0x3B, 0x34, 0x38,
+ 0x34, 0x0B, 0x39, 0x39, 0x39, 0x38, 0x38, 0x38, 0x39, 0x39, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x36, 0x34, 0x34, 0x34, 0x32, 0x0B, 0x39, 0x39, 0x39, 0x3B,
+ 0x36, 0x39, 0x36, 0x38, 0x38, 0x34, 0x36, 0x31, 0x31, 0x31, 0x31, 0x31,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x37, 0x21, 0x21, 0x21, 0x34,
+ 0x33, 0x0B, 0x3B, 0x36, 0x34, 0x34, 0x36, 0x3B, 0x34, 0x38, 0x33, 0x0B,
+ 0x0B, 0x7B, 0x7B, 0x0B, 0x39, 0x39, 0x0B, 0x36, 0x38, 0x38, 0x39, 0x39,
+ 0x3B, 0x3B, 0x3B, 0x34, 0x34, 0x34, 0x34, 0x36, 0x39, 0x39, 0x32, 0x0B,
+ 0x39, 0x39, 0x3B, 0x3B, 0x36, 0x39, 0x36, 0x38, 0x34, 0x36, 0x31, 0x31,
+ 0x33, 0x33, 0x39, 0x39, 0x34, 0x34, 0x34, 0x34, 0x37, 0x34, 0x37, 0x21,
+ 0x21, 0x37, 0x32, 0x0B, 0x33, 0x34, 0x0B, 0x3B, 0x34, 0x36, 0x3B, 0x0B,
+ 0x38, 0x33, 0x0B, 0x0B, 0x7B, 0x34, 0x33, 0x33, 0x39, 0x0B, 0x36, 0x38,
+ 0x39, 0x33, 0x39, 0x33, 0x3B, 0x39, 0x34, 0x34, 0x34, 0x39, 0x39, 0x3B,
+ 0x3B, 0x3B, 0x32, 0x39, 0x39, 0x39, 0x3B, 0x3B, 0x39, 0x39, 0x34, 0x38,
+ 0x36, 0x31, 0x31, 0x39, 0x39, 0x39, 0x33, 0x38, 0x34, 0x34, 0x37, 0x37,
+ 0x34, 0x37, 0x37, 0x21, 0x32, 0x37, 0x37, 0x34, 0x34, 0x36, 0x36, 0x32,
+ 0x3B, 0x3B, 0x0B, 0x38, 0x33, 0x0B, 0x36, 0x34, 0x0B, 0x33, 0x33, 0x33,
+ 0x0B, 0x36, 0x38, 0x39, 0x33, 0x33, 0x39, 0x39, 0x38, 0x38, 0x34, 0x39,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x32, 0x39, 0x39, 0x3B, 0x3B, 0x3B,
+ 0x39, 0x39, 0x38, 0x38, 0x36, 0x39, 0x39, 0x39, 0x33, 0x0B, 0x0B, 0x00,
+ 0x37, 0x37, 0x34, 0x34, 0x37, 0x37, 0x34, 0x32, 0x37, 0x34, 0x34, 0x32,
+ 0x32, 0x38, 0x38, 0x38, 0x34, 0x34, 0x38, 0x33, 0x0B, 0x36, 0x34, 0x33,
+ 0x33, 0x33, 0x0B, 0x0B, 0x36, 0x38, 0x33, 0x33, 0x33, 0x33, 0x33, 0x38,
+ 0x34, 0x36, 0x39, 0x3B, 0x3B, 0x36, 0x36, 0x36, 0x39, 0x39, 0x32, 0x33,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x38, 0x38, 0x33, 0x36, 0x3B, 0x39,
+ 0x36, 0x36, 0x00, 0x00, 0x34, 0x34, 0x34, 0x37, 0x37, 0x34, 0x32, 0x36,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x34, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
+ 0x36, 0x34, 0x33, 0x33, 0x33, 0x0B, 0x0B, 0x38, 0x38, 0x33, 0x33, 0x0B,
+ 0x0B, 0x38, 0x38, 0x34, 0x33, 0x3B, 0x3B, 0x3B, 0x36, 0x36, 0x39, 0x39,
+ 0x39, 0x3B, 0x35, 0x33, 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x34, 0x38,
+ 0x33, 0x33, 0x39, 0x36, 0x36, 0x00, 0x00, 0x00, 0x34, 0x34, 0x37, 0x37,
+ 0x34, 0x36, 0x34, 0x36, 0x34, 0x00, 0x00, 0x31, 0x32, 0x34, 0x35, 0x34,
+ 0x34, 0x34, 0x34, 0x34, 0x34, 0x33, 0x0B, 0x0B, 0x0B, 0x34, 0x38, 0x33,
+ 0x33, 0x33, 0x0B, 0x34, 0x38, 0x34, 0x36, 0x33, 0x33, 0x39, 0x36, 0x36,
+ 0x36, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x35, 0x33, 0x39, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x39, 0x38, 0x36, 0x39, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00,
+ 0x37, 0x37, 0x34, 0x34, 0x36, 0x34, 0x36, 0x34, 0x00, 0x00, 0x36, 0x34,
+ 0x34, 0x35, 0x31, 0x36, 0x36, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B,
+ 0x38, 0x38, 0x33, 0x33, 0x0B, 0x0B, 0x38, 0x38, 0x36, 0x33, 0x33, 0x33,
+ 0x36, 0x34, 0x34, 0x39, 0x39, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x32,
+ 0x39, 0x39, 0x3B, 0x3B, 0x39, 0x3B, 0x3B, 0x36, 0x36, 0x36, 0x36, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x36, 0x34, 0x36, 0x34, 0x00,
+ 0x00, 0x37, 0x34, 0x37, 0x31, 0x34, 0x34, 0x31, 0x34, 0x34, 0x34, 0x36,
+ 0x36, 0x36, 0x36, 0x36, 0x33, 0x33, 0x33, 0x0B, 0x34, 0x38, 0x38, 0x33,
+ 0x33, 0x0B, 0x0B, 0x34, 0x34, 0x36, 0x39, 0x39, 0x39, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x35, 0x32, 0x33, 0x39, 0x39, 0x3B, 0x3B, 0x36, 0x34, 0x3B,
+ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x34,
+ 0x36, 0x34, 0x00, 0x00, 0x37, 0x34, 0x37, 0x36, 0x34, 0x31, 0x31, 0x34,
+ 0x31, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x38,
+ 0x38, 0x36, 0x33, 0x33, 0x0B, 0x34, 0x34, 0x34, 0x39, 0x39, 0x39, 0x37,
+ 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x33, 0x35, 0x35, 0x32, 0x33, 0x39, 0x39,
+ 0x39, 0x34, 0x3B, 0x39, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x37, 0x34, 0x36, 0x34, 0x37,
+ 0x34, 0x34, 0x34, 0x31, 0x0B, 0x34, 0x31, 0x34, 0x34, 0x34, 0x34, 0x34,
+ 0x38, 0x38, 0x38, 0x0B, 0x33, 0x33, 0x0B, 0x0B, 0x34, 0x34, 0x39, 0x39,
+ 0x39, 0x37, 0x37, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x33, 0x35, 0x35, 0x32,
+ 0x39, 0x33, 0x33, 0x39, 0x39, 0x35, 0x0E, 0x39, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x37, 0x34,
+ 0x37, 0x34, 0x37, 0x36, 0x37, 0x34, 0x34, 0x0B, 0x34, 0x31, 0x0B, 0x31,
+ 0x0B, 0x31, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x0B, 0x34, 0x34, 0x34,
+ 0x34, 0x33, 0x39, 0x37, 0x37, 0x37, 0x3B, 0x3B, 0x39, 0x3B, 0x39, 0x33,
+ 0x32, 0x35, 0x32, 0x39, 0x3B, 0x39, 0x0B, 0x33, 0x39, 0x33, 0x35, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34,
+ 0x34, 0x37, 0x34, 0x36, 0x34, 0x37, 0x36, 0x21, 0x21, 0x37, 0x34, 0x31,
+ 0x0B, 0x36, 0x34, 0x31, 0x34, 0x36, 0x31, 0x38, 0x38, 0x34, 0x34, 0x34,
+ 0x34, 0x34, 0x33, 0x39, 0x33, 0x34, 0x34, 0x36, 0x3B, 0x3B, 0x3B, 0x36,
+ 0x39, 0x39, 0x33, 0x33, 0x33, 0x33, 0x39, 0x3B, 0x3B, 0x3B, 0x39, 0x0B,
+ 0x0B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x34, 0x34, 0x37, 0x34, 0x37, 0x34, 0x37, 0x36, 0x21, 0x36,
+ 0x21, 0x37, 0x34, 0x34, 0x31, 0x34, 0x36, 0x31, 0x31, 0x31, 0x0B, 0x31,
+ 0x31, 0x0B, 0x33, 0x33, 0x0B, 0x33, 0x34, 0x34, 0x34, 0x34, 0x3B, 0x3B,
+ 0x3B, 0x36, 0x36, 0x39, 0x39, 0x33, 0x33, 0x33, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x3B, 0x39, 0x0B, 0x0B, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x32, 0x34, 0x37,
+ 0x34, 0x37, 0x36, 0x21, 0x21, 0x21, 0x37, 0x34, 0x0B, 0x31, 0x0B, 0x34,
+ 0x36, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x39,
+ 0x39, 0x39, 0x39, 0x36, 0x36, 0x36, 0x39, 0x39, 0x3B, 0x39, 0x3B, 0x3B,
+ 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x35, 0x0B, 0x32, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34,
+ 0x37, 0x34, 0x36, 0x36, 0x37, 0x36, 0x21, 0x36, 0x21, 0x21, 0x21, 0x37,
+ 0x34, 0x0B, 0x31, 0x0B, 0x31, 0x0B, 0x33, 0x0B, 0x33, 0x33, 0x33, 0x33,
+ 0x39, 0x33, 0x39, 0x39, 0x36, 0x36, 0x36, 0x0E, 0x39, 0x39, 0x39, 0x3B,
+ 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x35, 0x35, 0x32, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x36, 0x37, 0x32, 0x34, 0x37, 0x37, 0x36, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x34, 0x34, 0x37, 0x31, 0x37, 0x37, 0x0B, 0x37,
+ 0x0B, 0x33, 0x0E, 0x0E, 0x36, 0x36, 0x36, 0x36, 0x0E, 0x39, 0x0E, 0x39,
+ 0x3B, 0x39, 0x3B, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x35, 0x35,
+ 0x35, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x32,
+ 0x34, 0x37, 0x37, 0x36, 0x21, 0x21, 0x21, 0x21, 0x37, 0x34, 0x34, 0x37,
+ 0x31, 0x34, 0x37, 0x0B, 0x37, 0x36, 0x36, 0x36, 0x0E, 0x36, 0x39, 0x0E,
+ 0x39, 0x0E, 0x39, 0x3B, 0x39, 0x3B, 0x39, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B,
+ 0x0E, 0x36, 0x35, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x36, 0x32, 0x34, 0x36, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x37, 0x37, 0x34, 0x34, 0x36, 0x34, 0x31, 0x31, 0x36, 0x31, 0x36,
+ 0x36, 0x0E, 0x0E, 0x0E, 0x0E, 0x39, 0x0E, 0x39, 0x0E, 0x39, 0x0E, 0x39,
+ 0x39, 0x39, 0x0E, 0x36, 0x36, 0x34, 0x00, 0x00, 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, 0x32, 0x32, 0x36,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x37, 0x34, 0x37, 0x34, 0x34,
+ 0x34, 0x34, 0x36, 0x0E, 0x36, 0x36, 0x0E, 0x36, 0x0E, 0x36, 0x0E, 0x36,
+ 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x36, 0x36, 0x34, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x34, 0x31, 0x36, 0x31, 0x21, 0x31, 0x21, 0x21, 0x21, 0x36,
+ 0x37, 0x34, 0x34, 0x34, 0x36, 0x34, 0x34, 0x36, 0x34, 0x36, 0x34, 0x36,
+ 0x34, 0x36, 0x34, 0x36, 0x34, 0x36, 0x34, 0x36, 0x37, 0x37, 0x33, 0x34,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x34, 0x21, 0x21, 0x31, 0x36,
+ 0x21, 0x37, 0x21, 0x34, 0x37, 0x34, 0x37, 0x36, 0x34, 0x36, 0x36, 0x34,
+ 0x36, 0x34, 0x00, 0x00, 0x34, 0x34, 0x34, 0x0B, 0x0B, 0x37, 0x33, 0x37,
+ 0x39, 0x33, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31,
+ 0x36, 0x36, 0x36, 0x31, 0x31, 0x21, 0x36, 0x37, 0x34, 0x36, 0x36, 0x36,
+ 0x33, 0x39, 0x34, 0x36, 0x34, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x0B, 0x0B,
+ 0x33, 0x31, 0x33, 0x33, 0x39, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x31, 0x31, 0x36, 0x31, 0x34,
+ 0x36, 0x36, 0x33, 0x33, 0x39, 0x34, 0x36, 0x34, 0x00, 0x00, 0x00, 0x00,
+ 0x0B, 0x0B, 0x0B, 0x33, 0x31, 0x33, 0x31, 0x39, 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, 0x36, 0x36, 0x36,
+ 0x36, 0x31, 0x34, 0x36, 0x33, 0x33, 0x39, 0x39, 0x34, 0x36, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x35, 0x33, 0x33, 0x31, 0x33, 0x0E, 0x39, 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, 0x36, 0x34, 0x39, 0x33, 0x39, 0x39, 0x3B, 0x34,
+ 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x33, 0x31, 0x31, 0x33,
+ 0x31, 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, 0x34, 0x34, 0x34, 0x34, 0x39, 0x33, 0x39,
+ 0x3B, 0x39, 0x34, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x33,
+ 0x31, 0x33, 0x33, 0x31, 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, 0x33,
+ 0x33, 0x33, 0x31, 0x31, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0B, 0x33, 0x31, 0x33, 0x31, 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, 0x38, 0x34, 0x0B, 0x31, 0x31, 0x31, 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, 0x34, 0x0B, 0x31, 0x31, 0x33,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask6RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x91, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0xFE, 0x90, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xD0, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFA, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFA, 0x00, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFA, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x11, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x7C, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 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, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7E, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x1F, 0xFF, 0xF8, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0x81, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x03,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0x07, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite7LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x17, 0x17, 0x10, 0x14, 0x14, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x17, 0x14, 0x14, 0x10, 0x17, 0x00, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x10, 0x16, 0x16, 0x16, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x10, 0x14, 0x16, 0x16, 0x14, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x10, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x3C,
+ 0x3D, 0x3D, 0x23, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x23, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x16, 0x3C, 0x3C, 0x3C, 0x3D, 0x23, 0x23, 0x16, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x23, 0x3C,
+ 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x16, 0x3C, 0x3D, 0x3D,
+ 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C,
+ 0x3C, 0x3D, 0x3D, 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x3D, 0x3D, 0x3D, 0x23, 0x3E, 0x3C,
+ 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x3D,
+ 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x3C, 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17,
+ 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x17, 0x0F,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x16,
+ 0x16, 0x17, 0x0F, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x7B, 0x17, 0x17, 0x17, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x16, 0x16, 0x16, 0x17, 0x0D, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7B, 0x17, 0x17, 0x17, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x17, 0x17, 0x17, 0x00,
+ 0x0D, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7B, 0x17, 0x17,
+ 0x10, 0x14, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x0F, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x17, 0x17, 0x17, 0x10, 0x10, 0x14, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x17, 0x17, 0x17, 0x10, 0x17, 0x0D, 0x0F, 0x0F, 0x0F,
+ 0x0F, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x14, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x17, 0x17, 0x10, 0x17, 0x17,
+ 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0F, 0x0F, 0x17, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x14, 0x17, 0x17, 0x10, 0x10, 0x14,
+ 0x10, 0x14, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x17,
+ 0x10, 0x10, 0x10, 0x17, 0x23, 0x0D, 0x0D, 0x0D, 0x0F, 0x0D, 0x40, 0x0F,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x14, 0x14, 0x17,
+ 0x10, 0x10, 0x14, 0x10, 0x10, 0x14, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x17, 0x10, 0x10, 0x10, 0x17, 0x16, 0x23, 0x23, 0x23,
+ 0x23, 0x0F, 0x0F, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x17, 0x14, 0x3D, 0x3D,
+ 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x3D, 0x17, 0x10, 0x10, 0x10, 0x17,
+ 0x14, 0x23, 0x23, 0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x0F, 0x0F, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x14, 0x16, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10,
+ 0x17, 0x14, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x17,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x16, 0x23, 0x23, 0x23, 0x0F, 0x0F, 0x0D,
+ 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 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, 0x14, 0x14, 0x16, 0x17, 0x17,
+ 0x10, 0x14, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D,
+ 0x2F, 0x3D, 0x2F, 0x17, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x01, 0x23,
+ 0x0D, 0x23, 0x23, 0x0F, 0x0F, 0x40, 0x0F, 0x00, 0x00, 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, 0x14, 0x14,
+ 0x16, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x3D, 0x2F,
+ 0x3D, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x17, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x17, 0x01, 0x23, 0x23, 0x0D, 0x0D, 0x0D, 0x40, 0x0F, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x0F, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x14, 0x14, 0x16, 0x3C, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x17, 0x14, 0x2F, 0x3D, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x17,
+ 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x16, 0x01, 0x23, 0x23, 0x23, 0x0F,
+ 0x0F, 0x40, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40,
+ 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x14, 0x14, 0x16, 0x16, 0x3C, 0x17, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x01,
+ 0x2F, 0x01, 0x2F, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x01,
+ 0x23, 0x23, 0x0D, 0x0D, 0x0D, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x0D, 0x23, 0x23, 0x0D, 0x40, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x16,
+ 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x2F,
+ 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x17, 0x14, 0x10, 0x14, 0x10,
+ 0x14, 0x10, 0x17, 0x16, 0x01, 0x23, 0x23, 0x23, 0x0F, 0x40, 0x0F, 0x17,
+ 0x00, 0x00, 0x00, 0x17, 0x0D, 0x23, 0x0D, 0x0D, 0x0D, 0x40, 0x40, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x14, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x17, 0x14, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x14,
+ 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x14, 0x01, 0x01, 0x23, 0x23,
+ 0x23, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x17, 0x0D, 0x23, 0x23, 0x23, 0x23,
+ 0x23, 0x0D, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x01, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17,
+ 0x16, 0x01, 0x23, 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0F, 0x17, 0x0D, 0x3E,
+ 0x3E, 0x23, 0x0D, 0x0D, 0x0D, 0x40, 0x40, 0x0F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x14, 0x14, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x01,
+ 0x2F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x14, 0x10, 0x14,
+ 0x10, 0x14, 0x10, 0x17, 0x14, 0x01, 0x01, 0x23, 0x23, 0x23, 0x23, 0x0D,
+ 0x0D, 0x0D, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x23, 0x23, 0x0D, 0x0F, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14,
+ 0x14, 0x14, 0x16, 0x3C, 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10,
+ 0x17, 0x14, 0x01, 0x2F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x16, 0x01, 0x01,
+ 0x23, 0x23, 0x23, 0x3E, 0x3E, 0x0D, 0x3E, 0x23, 0x3E, 0x23, 0x0D, 0x0D,
+ 0x0D, 0x40, 0x40, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x17, 0x17, 0x14, 0x14, 0x16, 0x14, 0x3C, 0x3C, 0x3C, 0x17, 0x10,
+ 0x10, 0x14, 0x10, 0x14, 0x17, 0x14, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x2F, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x14, 0x01, 0x01, 0x23, 0x23, 0x23, 0x23, 0x3E, 0x3E, 0x3E, 0x3E,
+ 0x23, 0x23, 0x23, 0x23, 0x23, 0x0D, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x3C, 0x7B, 0x7B, 0x7B, 0x16, 0x14,
+ 0x3C, 0x3C, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x16, 0x17, 0x14, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x17, 0x17, 0x16, 0x01, 0x01, 0x23, 0x23, 0x23,
+ 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x0D, 0x0D, 0x40, 0x40, 0x0F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x3C, 0x7B, 0x17,
+ 0x17, 0x7B, 0x7B, 0x16, 0x3C, 0x3C, 0x17, 0x14, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x14, 0x16, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2F,
+ 0x01, 0x17, 0x17, 0x14, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x14, 0x16,
+ 0x01, 0x01, 0x23, 0x3E, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x23, 0x23,
+ 0x23, 0x0D, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x17, 0x3C, 0x7B, 0x01, 0x17, 0x7B, 0x7B, 0x16, 0x3C, 0x3C, 0x17, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x14, 0x01, 0x01, 0x01, 0x01, 0x2F,
+ 0x16, 0x16, 0x14, 0x01, 0x2F, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x14, 0x16, 0x01, 0x23, 0x23, 0x3E, 0x3E, 0x3E, 0x3E,
+ 0x3E, 0x23, 0x0D, 0x0D, 0x0D, 0x40, 0x40, 0x0F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x17, 0x17, 0x17, 0x3C, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x16,
+ 0x3C, 0x3C, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x14, 0x01,
+ 0x3C, 0x2F, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x2F, 0x01, 0x16, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x23, 0x23, 0x23,
+ 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x23, 0x23, 0x23, 0x0D, 0x0F, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x14, 0x14, 0x17, 0x3C, 0x7B,
+ 0x7B, 0x7B, 0x14, 0x14, 0x3C, 0x3C, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x17, 0x17, 0x14, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x01,
+ 0x2F, 0x01, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17,
+ 0x17, 0x14, 0x23, 0x23, 0x3E, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x0D,
+ 0x0D, 0x40, 0x40, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x14, 0x14,
+ 0x14, 0x14, 0x17, 0x3C, 0x3C, 0x3C, 0x14, 0x16, 0x3C, 0x2F, 0x14, 0x17,
+ 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x10, 0x16, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x2F, 0x01, 0x2F, 0x16, 0x17, 0x17, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x0D, 0x23, 0x3E, 0x3E, 0x3E,
+ 0x23, 0x0D, 0x0D, 0x23, 0x23, 0x0D, 0x0F, 0x17, 0x00, 0x00, 0x17, 0x14,
+ 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x14, 0x14, 0x16, 0x16, 0x3C,
+ 0x3C, 0x2F, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x14,
+ 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x2F, 0x2F, 0x2F, 0x2F, 0x14,
+ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14,
+ 0x0D, 0x0D, 0x0D, 0x0D, 0x3E, 0x23, 0x23, 0x0D, 0x0D, 0x40, 0x40, 0x0F,
+ 0x16, 0x16, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x3C, 0x2F, 0x2F, 0x16, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x10, 0x17, 0x17, 0x10, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x16, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x17, 0x17, 0x00, 0x00, 0x17, 0x0F, 0x0D, 0x0D, 0x23, 0x23,
+ 0x23, 0x0D, 0x0F, 0x17, 0x17, 0x17, 0x14, 0x16, 0x3C, 0x3C, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x16, 0x3C, 0x2F, 0x3D, 0x3F, 0x17,
+ 0x14, 0x14, 0x14, 0x10, 0x14, 0x17, 0x17, 0x10, 0x14, 0x3C, 0x3C, 0x3C,
+ 0x16, 0x16, 0x14, 0x2F, 0x2F, 0x2F, 0x2F, 0x01, 0x14, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00,
+ 0x17, 0x0F, 0x0D, 0x23, 0x0D, 0x40, 0x40, 0x0F, 0x17, 0x17, 0x17, 0x14,
+ 0x14, 0x16, 0x3C, 0x3C, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x16, 0x3C, 0x3C,
+ 0x3D, 0x2F, 0x3F, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x17,
+ 0x14, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x2F, 0x2F, 0x2F, 0x01, 0x2F,
+ 0x16, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x40, 0x40, 0x0F, 0x17,
+ 0x00, 0x00, 0x14, 0x14, 0x16, 0x14, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x16, 0x16, 0x3C, 0x3D, 0x2F, 0x3D, 0x2F, 0x17, 0x17, 0x10, 0x14, 0x10,
+ 0x14, 0x10, 0x17, 0x17, 0x10, 0x16, 0x3C, 0x3C, 0x16, 0x16, 0x2F, 0x2F,
+ 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x14, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x0F, 0x17, 0x17, 0x00, 0x00, 0x00, 0x14, 0x14, 0x16, 0x14, 0x16,
+ 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x2F, 0x3D, 0x2F, 0x3D, 0x14,
+ 0x17, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x3C, 0x3C,
+ 0x3C, 0x16, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x16, 0x14, 0x17,
+ 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x16, 0x14, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x2F, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x16, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17,
+ 0x17, 0x10, 0x16, 0x3C, 0x16, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01,
+ 0x2F, 0x01, 0x16, 0x14, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x14, 0x14, 0x14, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x17, 0x17, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x16, 0x2F, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x16, 0x14, 0x17, 0x17, 0x17,
+ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x14, 0x14, 0x3C, 0x3C, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F,
+ 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14,
+ 0x16, 0x2F, 0x2F, 0x01, 0x2F, 0x2F, 0x01, 0x01, 0x2F, 0x01, 0x2F, 0x01,
+ 0x16, 0x14, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x14, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x23,
+ 0x23, 0x3F, 0x3F, 0x3F, 0x16, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x14, 0x16, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x23, 0x01, 0x23, 0x23, 0x23, 0x16, 0x14, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x10, 0x10, 0x14, 0x14, 0x10, 0x10, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x23, 0x23, 0x23, 0x23, 0x14, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x16, 0x23,
+ 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x3C, 0x3C, 0x14, 0x14,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x14, 0x14, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x14, 0x16, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x16, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x14, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x10, 0x10, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x17, 0x14, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x14, 0x14, 0x14, 0x17, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x10, 0x10, 0x00, 0x00, 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, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x14, 0x14, 0x10, 0x10, 0x14, 0x10, 0x14, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17,
+ 0x17, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x14, 0x10, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x17, 0x00, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x14, 0x14, 0x14,
+ 0x17, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x17,
+ 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask7LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF4,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3E,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7E, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFA, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite7LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x17, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x10, 0x16, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x10, 0x14, 0x16, 0x16, 0x14, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x10, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x3C,
+ 0x3D, 0x3D, 0x23, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x23, 0x16, 0x16, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x16, 0x3C, 0x3C, 0x3C, 0x3D, 0x23, 0x23, 0x16, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x23, 0x3C,
+ 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x10, 0x16, 0x3C, 0x3D, 0x3D,
+ 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C,
+ 0x3C, 0x3D, 0x3D, 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x3D, 0x3D, 0x3D, 0x23, 0x3E, 0x3C,
+ 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x3C, 0x3D, 0x3D, 0x3D,
+ 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x10, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x3C, 0x23, 0x3E, 0x3C, 0x16, 0x17, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17,
+ 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x17, 0x0F,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x17, 0x17, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x16,
+ 0x16, 0x17, 0x0F, 0x17, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x7B, 0x17, 0x17, 0x17, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x16, 0x16, 0x16, 0x17, 0x0D, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7B, 0x17, 0x17, 0x17, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x17, 0x17, 0x17, 0x00,
+ 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x7B, 0x17, 0x17,
+ 0x10, 0x14, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x17, 0x17, 0x17, 0x10, 0x10, 0x14, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x17, 0x17, 0x17, 0x10, 0x17, 0x0D, 0x0D, 0x0F, 0x0F,
+ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x14, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x17, 0x17, 0x10, 0x17, 0x17,
+ 0x23, 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x14, 0x17, 0x17, 0x10, 0x10, 0x14,
+ 0x10, 0x14, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x17,
+ 0x10, 0x10, 0x10, 0x17, 0x23, 0x23, 0x0D, 0x0D, 0x0D, 0x0F, 0x0D, 0x40,
+ 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x14, 0x14, 0x17,
+ 0x10, 0x10, 0x14, 0x10, 0x10, 0x14, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x17, 0x10, 0x10, 0x10, 0x17, 0x16, 0x23, 0x23, 0x23,
+ 0x23, 0x23, 0x0F, 0x0F, 0x40, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x17, 0x14, 0x3D, 0x3D,
+ 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x3D, 0x17, 0x10, 0x10, 0x10, 0x17,
+ 0x14, 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x0F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x14, 0x16, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10,
+ 0x17, 0x14, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x17,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x16, 0x23, 0x23, 0x23, 0x23, 0x0F, 0x0F,
+ 0x0D, 0x40, 0x0F, 0x00, 0x00, 0x00, 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, 0x14, 0x14, 0x16, 0x17, 0x17,
+ 0x10, 0x14, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D,
+ 0x2F, 0x3D, 0x2F, 0x17, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x01, 0x23,
+ 0x23, 0x0D, 0x23, 0x23, 0x0F, 0x0F, 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, 0x17, 0x14, 0x14,
+ 0x16, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x3D, 0x2F,
+ 0x3D, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x17, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x17, 0x01, 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0D, 0x40, 0x0F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x14, 0x14, 0x16, 0x3C, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x17, 0x14, 0x2F, 0x3D, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x17,
+ 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x16, 0x01, 0x23, 0x23, 0x23, 0x23,
+ 0x0F, 0x0F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40,
+ 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x14, 0x14, 0x16, 0x16, 0x3C, 0x17, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x01,
+ 0x2F, 0x01, 0x2F, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x01,
+ 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0D, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x17, 0x0D, 0x23, 0x23, 0x40, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x16,
+ 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x2F,
+ 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x17, 0x14, 0x10, 0x14, 0x10,
+ 0x14, 0x10, 0x17, 0x16, 0x01, 0x23, 0x23, 0x23, 0x0F, 0x0F, 0x40, 0x0F,
+ 0x00, 0x00, 0x00, 0x17, 0x0D, 0x23, 0x0D, 0x0D, 0x40, 0x40, 0x17, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x14, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x17, 0x14, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x14,
+ 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x14, 0x01, 0x01, 0x23, 0x23,
+ 0x23, 0x0D, 0x40, 0x0F, 0x00, 0x00, 0x17, 0x0D, 0x23, 0x23, 0x23, 0x23,
+ 0x0D, 0x0F, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x01, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17,
+ 0x16, 0x01, 0x23, 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0F, 0x17, 0x0D, 0x3E,
+ 0x3E, 0x23, 0x0D, 0x0D, 0x40, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x14, 0x14, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x01,
+ 0x2F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, 0x14, 0x10, 0x14,
+ 0x10, 0x14, 0x10, 0x17, 0x14, 0x01, 0x01, 0x23, 0x23, 0x23, 0x23, 0x0D,
+ 0x0D, 0x0D, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x23, 0x0D, 0x0F, 0x17, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14,
+ 0x14, 0x14, 0x16, 0x3C, 0x3C, 0x3C, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10,
+ 0x17, 0x14, 0x01, 0x2F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x16, 0x01, 0x01,
+ 0x23, 0x23, 0x23, 0x3E, 0x3E, 0x0D, 0x3E, 0x23, 0x3E, 0x23, 0x0D, 0x0D,
+ 0x40, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x17, 0x17, 0x14, 0x14, 0x16, 0x14, 0x3C, 0x3C, 0x3C, 0x17, 0x10,
+ 0x10, 0x14, 0x10, 0x14, 0x17, 0x14, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x2F, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x14, 0x01, 0x01, 0x23, 0x23, 0x23, 0x23, 0x3E, 0x3E, 0x3E, 0x3E,
+ 0x23, 0x23, 0x23, 0x23, 0x0D, 0x0F, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x3C, 0x7B, 0x7B, 0x7B, 0x16, 0x14,
+ 0x3C, 0x3C, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x01,
+ 0x01, 0x01, 0x16, 0x16, 0x14, 0x01, 0x01, 0x01, 0x16, 0x17, 0x14, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x17, 0x17, 0x16, 0x01, 0x01, 0x23, 0x23, 0x23,
+ 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x0D, 0x40, 0x40, 0x0F, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x3C, 0x7B, 0x17,
+ 0x17, 0x7B, 0x7B, 0x16, 0x3C, 0x3C, 0x17, 0x14, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x14, 0x16, 0x01, 0x01, 0x3C, 0x3C, 0x3C, 0x16, 0x01, 0x01, 0x2F,
+ 0x01, 0x17, 0x17, 0x14, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x14, 0x16,
+ 0x01, 0x01, 0x23, 0x3E, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x23, 0x23,
+ 0x0D, 0x0F, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x17, 0x3C, 0x7B, 0x01, 0x17, 0x7B, 0x7B, 0x16, 0x3C, 0x3C, 0x17, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x14, 0x01, 0x01, 0x3C, 0x16, 0x16,
+ 0x14, 0x2F, 0x2F, 0x01, 0x2F, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x14, 0x16, 0x01, 0x23, 0x23, 0x3E, 0x3E, 0x3E, 0x3E,
+ 0x3E, 0x23, 0x0D, 0x0D, 0x40, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x17, 0x17, 0x17, 0x3C, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x16,
+ 0x3C, 0x3C, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x14, 0x01,
+ 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x2F, 0x2F, 0x2F, 0x01, 0x16, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x23, 0x23, 0x23,
+ 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x23, 0x23, 0x0D, 0x0F, 0x17, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x14, 0x14, 0x17, 0x3C, 0x7B,
+ 0x7B, 0x7B, 0x14, 0x14, 0x3C, 0x3C, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x17, 0x17, 0x14, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x2F, 0x2F, 0x01,
+ 0x2F, 0x01, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17,
+ 0x17, 0x14, 0x23, 0x23, 0x3E, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x0D,
+ 0x40, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x14, 0x14,
+ 0x14, 0x14, 0x17, 0x3C, 0x3C, 0x3C, 0x14, 0x16, 0x3C, 0x2F, 0x14, 0x17,
+ 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x10, 0x16, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x16, 0x2F, 0x2F, 0x2F, 0x01, 0x2F, 0x16, 0x17, 0x17, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x0D, 0x23, 0x3E, 0x3E, 0x3E,
+ 0x23, 0x0D, 0x0D, 0x23, 0x0D, 0x0F, 0x17, 0x17, 0x00, 0x00, 0x17, 0x17,
+ 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x14, 0x14, 0x16, 0x16, 0x3C,
+ 0x3C, 0x2F, 0x14, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x17, 0x14,
+ 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x14,
+ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14,
+ 0x0D, 0x0D, 0x0D, 0x0D, 0x3E, 0x23, 0x23, 0x0D, 0x40, 0x40, 0x0F, 0x17,
+ 0x14, 0x16, 0x16, 0x16, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x3C, 0x2F, 0x2F, 0x16, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x10, 0x17, 0x17, 0x10, 0x16, 0x3C, 0x3C, 0x3C, 0x16, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x16, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x17, 0x17, 0x00, 0x00, 0x17, 0x0F, 0x0D, 0x0D, 0x23, 0x23,
+ 0x0D, 0x0F, 0x17, 0x17, 0x7B, 0x7B, 0x14, 0x16, 0x3C, 0x3C, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x16, 0x3C, 0x2F, 0x3D, 0x3F, 0x17,
+ 0x14, 0x14, 0x14, 0x10, 0x14, 0x17, 0x17, 0x10, 0x14, 0x3C, 0x16, 0x16,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x01, 0x14, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00,
+ 0x17, 0x0F, 0x0D, 0x23, 0x40, 0x40, 0x0F, 0x17, 0x7B, 0x7B, 0x7B, 0x14,
+ 0x16, 0x14, 0x3C, 0x3C, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x16, 0x3C, 0x3C,
+ 0x3D, 0x2F, 0x3F, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x17,
+ 0x14, 0x3C, 0x3C, 0x16, 0x01, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x01, 0x2F,
+ 0x16, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x40, 0x0F, 0x17, 0x17,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x16, 0x16, 0x3C, 0x3D, 0x2F, 0x3D, 0x2F, 0x17, 0x17, 0x10, 0x14, 0x10,
+ 0x14, 0x10, 0x17, 0x17, 0x10, 0x16, 0x3C, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x14, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x17,
+ 0x0F, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x17, 0x17, 0x14, 0x14, 0x16,
+ 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x2F, 0x3D, 0x2F, 0x3D, 0x14,
+ 0x17, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x3C, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x16, 0x14, 0x17,
+ 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x17, 0x17, 0x14, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x2F, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x16, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17,
+ 0x17, 0x10, 0x16, 0x3C, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01,
+ 0x2F, 0x01, 0x16, 0x14, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x17, 0x17, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x16, 0x2F, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x16, 0x14, 0x17, 0x17, 0x17,
+ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x14, 0x3C, 0x3C, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F,
+ 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14,
+ 0x16, 0x2F, 0x2F, 0x01, 0x2F, 0x2F, 0x01, 0x01, 0x2F, 0x01, 0x2F, 0x01,
+ 0x16, 0x14, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x14, 0x14, 0x10, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x23,
+ 0x23, 0x3F, 0x3F, 0x3F, 0x16, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x17, 0x14, 0x16, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x23, 0x01, 0x23, 0x23, 0x23, 0x16, 0x14, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x10, 0x10, 0x14, 0x14, 0x10, 0x10, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x23, 0x23, 0x23, 0x23, 0x14, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x16, 0x23, 0x23,
+ 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x3C, 0x3C, 0x16, 0x14,
+ 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x14, 0x14, 0x10, 0x10,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x14, 0x16, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x16, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x14, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16,
+ 0x16, 0x16, 0x14, 0x14, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x10, 0x10, 0x14, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x17, 0x14, 0x16, 0x16, 0x16, 0x17, 0x17, 0x17, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x14, 0x16, 0x14, 0x16, 0x14, 0x14, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x10, 0x10, 0x10, 0x00, 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, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x14,
+ 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x10, 0x17, 0x17, 0x17, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x14, 0x14, 0x17, 0x10, 0x17, 0x10, 0x17, 0x10, 0x10, 0x17, 0x10, 0x17,
+ 0x10, 0x17, 0x10, 0x17, 0x10, 0x17, 0x10, 0x17, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17,
+ 0x17, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x10, 0x17, 0x10, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x17, 0x10, 0x14, 0x14, 0x14, 0x10,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x14,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x17, 0x17, 0x17, 0x14, 0x14, 0x14, 0x10, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask7LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x38,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7C, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE1, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite7RA[] = {
+ 0x00, 0x17, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x14, 0x14, 0x10, 0x17, 0x17, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00,
+ 0x17, 0x10, 0x14, 0x14, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x16, 0x16, 0x10,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x14, 0x16, 0x16, 0x14, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x23, 0x3D, 0x3D,
+ 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x16, 0x16, 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x23, 0x23, 0x3D, 0x3C, 0x3C,
+ 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16,
+ 0x3C, 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x16, 0x3C, 0x3E, 0x23, 0x3D, 0x3D, 0x3C, 0x16,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x3C, 0x3E,
+ 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x16, 0x3C, 0x3E, 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x3C, 0x3E, 0x23, 0x3D,
+ 0x3D, 0x3D, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17,
+ 0x16, 0x3C, 0x3E, 0x23, 0x3D, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x17, 0x16, 0x3C, 0x3E, 0x23, 0x3C, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x17, 0x16, 0x16,
+ 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x17, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x17, 0x0F, 0x17, 0x16, 0x16, 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x0D, 0x17, 0x16, 0x16, 0x16, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x17, 0x17, 0x17, 0x7B, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0D, 0x00, 0x17, 0x17, 0x17,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x17, 0x17,
+ 0x17, 0x7B, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x0F, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3F, 0x14, 0x10, 0x17, 0x17, 0x7B, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x0F,
+ 0x0F, 0x0F, 0x0F, 0x0D, 0x17, 0x10, 0x17, 0x17, 0x17, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x14, 0x10, 0x10, 0x17, 0x17, 0x17,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x17, 0x0F, 0x0F, 0x0D, 0x0D, 0x23, 0x23, 0x23, 0x17, 0x17, 0x10, 0x17,
+ 0x17, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x14, 0x10,
+ 0x10, 0x10, 0x17, 0x17, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x17, 0x0F, 0x40, 0x0D, 0x0F, 0x0D, 0x0D, 0x0D, 0x23,
+ 0x17, 0x10, 0x10, 0x10, 0x17, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x14, 0x10, 0x14, 0x10, 0x10, 0x17, 0x17, 0x14, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x40, 0x0F, 0x0F, 0x23,
+ 0x23, 0x23, 0x23, 0x16, 0x17, 0x10, 0x10, 0x10, 0x17, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x17, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x0F,
+ 0x0F, 0x0D, 0x0D, 0x0D, 0x0D, 0x23, 0x23, 0x14, 0x17, 0x10, 0x10, 0x10,
+ 0x17, 0x3D, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x3D, 0x14, 0x17,
+ 0x10, 0x10, 0x14, 0x10, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x0F, 0x40, 0x0D, 0x0F, 0x0F, 0x23, 0x23, 0x23, 0x16, 0x17,
+ 0x17, 0x10, 0x10, 0x10, 0x17, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D,
+ 0x2F, 0x3D, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x17, 0x14, 0x16, 0x14,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x0F, 0x0F, 0x23, 0x23, 0x0D,
+ 0x23, 0x01, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x17, 0x2F, 0x3D, 0x2F,
+ 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10,
+ 0x17, 0x17, 0x16, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x0F,
+ 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40,
+ 0x0D, 0x0D, 0x0D, 0x23, 0x23, 0x01, 0x17, 0x17, 0x14, 0x10, 0x14, 0x10,
+ 0x17, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x3D, 0x2F, 0x3D, 0x14, 0x17,
+ 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x16, 0x16, 0x14, 0x14, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x17, 0x0F, 0x40, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0x40, 0x0F, 0x0F, 0x23, 0x23, 0x23, 0x01, 0x16, 0x17, 0x14,
+ 0x10, 0x14, 0x10, 0x14, 0x17, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x3D, 0x2F, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10, 0x17, 0x3C, 0x16,
+ 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x40, 0x0D, 0x23, 0x23, 0x0D, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x0D, 0x0D, 0x0D, 0x23, 0x23,
+ 0x01, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14,
+ 0x10, 0x17, 0x3C, 0x16, 0x16, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x40, 0x40, 0x0D,
+ 0x0D, 0x0D, 0x23, 0x0D, 0x17, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40, 0x0F,
+ 0x23, 0x23, 0x23, 0x01, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x14, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x3C, 0x3C, 0x16, 0x14, 0x14, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x23, 0x23, 0x23, 0x0D, 0x17, 0x00, 0x00,
+ 0x17, 0x0F, 0x40, 0x23, 0x23, 0x23, 0x01, 0x01, 0x14, 0x17, 0x14, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x14, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10, 0x17, 0x3C, 0x3C,
+ 0x16, 0x16, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x40, 0x0D, 0x0D, 0x0D, 0x23, 0x3E,
+ 0x3E, 0x0D, 0x17, 0x0F, 0x0D, 0x0D, 0x23, 0x23, 0x23, 0x23, 0x01, 0x16,
+ 0x17, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x16, 0x01, 0x2F, 0x01,
+ 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x0D, 0x23,
+ 0x23, 0x23, 0x23, 0x23, 0x3E, 0x3E, 0x0D, 0x0D, 0x0D, 0x23, 0x23, 0x23,
+ 0x23, 0x01, 0x01, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2F, 0x01, 0x2F, 0x14, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x14,
+ 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x40, 0x40, 0x0D, 0x0D, 0x0D, 0x23, 0x3E, 0x23, 0x3E, 0x0D, 0x3E,
+ 0x3E, 0x23, 0x23, 0x23, 0x01, 0x01, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14,
+ 0x10, 0x14, 0x10, 0x17, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x2F, 0x01, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x3C, 0x3C,
+ 0x3C, 0x16, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x23, 0x23, 0x23,
+ 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x23, 0x01, 0x01, 0x14, 0x17,
+ 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x14, 0x17, 0x14, 0x10, 0x14, 0x10,
+ 0x10, 0x17, 0x3C, 0x3C, 0x3C, 0x14, 0x16, 0x14, 0x14, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x40, 0x0D,
+ 0x0D, 0x0D, 0x23, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x01,
+ 0x01, 0x16, 0x17, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x16,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2F, 0x14, 0x17,
+ 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x3C, 0x3C, 0x14, 0x16, 0x7B, 0x7B,
+ 0x7B, 0x3C, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x23, 0x0D, 0x23, 0x3E, 0x3E, 0x3E, 0x23,
+ 0x3E, 0x23, 0x01, 0x01, 0x16, 0x14, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10,
+ 0x14, 0x17, 0x17, 0x01, 0x2F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x16, 0x14, 0x17, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x3C, 0x3C,
+ 0x16, 0x7B, 0x7B, 0x17, 0x17, 0x7B, 0x3C, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x40, 0x0D, 0x0D, 0x0D, 0x23, 0x3E,
+ 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x01, 0x16, 0x14, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x01, 0x14, 0x16, 0x16,
+ 0x2F, 0x01, 0x01, 0x01, 0x01, 0x14, 0x17, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x17, 0x3C, 0x3C, 0x16, 0x7B, 0x7B, 0x17, 0x01, 0x7B, 0x3C, 0x17,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x0D, 0x23,
+ 0x23, 0x23, 0x0D, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x23, 0x14,
+ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x16, 0x01,
+ 0x2F, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x2F, 0x3C, 0x01, 0x14, 0x17, 0x17,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x3C, 0x3C, 0x16, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x3C, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x40, 0x40, 0x0D, 0x0D, 0x23, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x3E,
+ 0x23, 0x23, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x17, 0x14, 0x01, 0x2F, 0x01, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x3C, 0x14, 0x17, 0x17, 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x3C, 0x3C,
+ 0x14, 0x14, 0x7B, 0x7B, 0x7B, 0x3C, 0x17, 0x14, 0x14, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x0D, 0x0D, 0x23,
+ 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x16, 0x2F, 0x01, 0x2F, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x10, 0x17, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x17, 0x14, 0x2F, 0x3C, 0x16, 0x14, 0x3C, 0x3C, 0x3C, 0x17, 0x14, 0x14,
+ 0x14, 0x14, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x40, 0x0D,
+ 0x0D, 0x23, 0x23, 0x3E, 0x0D, 0x0D, 0x0D, 0x0D, 0x14, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x14, 0x17, 0x17, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x2F, 0x3C, 0x3C, 0x16, 0x16, 0x14,
+ 0x14, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x14, 0x17, 0x00, 0x00,
+ 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x23, 0x0D, 0x0D, 0x0F, 0x17, 0x00, 0x00,
+ 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17,
+ 0x16, 0x2F, 0x2F, 0x2F, 0x2F, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16,
+ 0x10, 0x17, 0x17, 0x10, 0x14, 0x14, 0x14, 0x14, 0x17, 0x16, 0x2F, 0x2F,
+ 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16,
+ 0x14, 0x16, 0x16, 0x16, 0x0F, 0x40, 0x40, 0x0D, 0x23, 0x0D, 0x0F, 0x17,
+ 0x00, 0x00, 0x00, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x14, 0x01, 0x2F, 0x2F, 0x2F, 0x2F, 0x14, 0x16, 0x16,
+ 0x3C, 0x3C, 0x3C, 0x14, 0x10, 0x17, 0x17, 0x14, 0x10, 0x14, 0x14, 0x14,
+ 0x17, 0x3F, 0x3D, 0x2F, 0x3C, 0x16, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x3C, 0x3C, 0x16, 0x14, 0x17, 0x17, 0x17, 0x0F, 0x40, 0x40,
+ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x16, 0x2F, 0x01, 0x2F, 0x2F,
+ 0x2F, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x14, 0x17, 0x17, 0x14, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x17, 0x3F, 0x2F, 0x3D, 0x3C, 0x3C, 0x16, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x16, 0x3C, 0x3C, 0x16, 0x14, 0x14, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x14, 0x2F,
+ 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x2F, 0x16, 0x16, 0x3C, 0x3C, 0x16, 0x10,
+ 0x17, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x17, 0x2F, 0x3D, 0x2F,
+ 0x3D, 0x3C, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x14, 0x16,
+ 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17,
+ 0x17, 0x14, 0x16, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x16, 0x3C,
+ 0x3C, 0x3C, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x17,
+ 0x14, 0x3D, 0x2F, 0x3D, 0x2F, 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x3C, 0x3C,
+ 0x16, 0x14, 0x16, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x17, 0x14, 0x16, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x01, 0x16, 0x3C, 0x16, 0x10, 0x17, 0x17, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x16, 0x3D, 0x3D, 0x3D, 0x3D, 0x2F, 0x3C, 0x3C,
+ 0x16, 0x16, 0x16, 0x16, 0x14, 0x16, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x14, 0x16, 0x01, 0x2F, 0x01,
+ 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x16, 0x14, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3C, 0x3C, 0x3C, 0x3C, 0x14, 0x14, 0x14, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x14,
+ 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x14, 0x16,
+ 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x01, 0x2F, 0x2F, 0x01, 0x2F, 0x2F, 0x16,
+ 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3C, 0x3C, 0x14, 0x14, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x14, 0x10, 0x10, 0x14, 0x14, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x14, 0x16, 0x23, 0x23, 0x23, 0x01, 0x23, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x16, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x17, 0x17, 0x17, 0x16, 0x3F, 0x3F, 0x3F, 0x23, 0x23, 0x3C, 0x3C, 0x16,
+ 0x16, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x14, 0x10, 0x10, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x14, 0x14, 0x3C, 0x3C, 0x23, 0x23, 0x23, 0x23,
+ 0x23, 0x23, 0x23, 0x23, 0x23, 0x16, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x23, 0x23, 0x23, 0x23, 0x3C,
+ 0x3C, 0x16, 0x16, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x10, 0x10,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x17, 0x17, 0x17, 0x16, 0x16, 0x16,
+ 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x14, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x16, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17,
+ 0x14, 0x14, 0x14, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17,
+ 0x17, 0x16, 0x16, 0x16, 0x14, 0x17, 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, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x14, 0x10, 0x14, 0x10, 0x10, 0x14, 0x14, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x00, 0x17, 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x14,
+ 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x14, 0x17, 0x14, 0x14, 0x14, 0x10, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x10,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask7RA[] = {
+ 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x7F, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x7C, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x7E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x5F, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite7RB[] = {
+ 0x00, 0x17, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x16, 0x16, 0x10,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x14, 0x16, 0x16, 0x14, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x3C, 0x23, 0x3D, 0x3D,
+ 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x16, 0x16, 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x23, 0x23, 0x3D, 0x3C, 0x3C,
+ 0x3C, 0x16, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16,
+ 0x3C, 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x16, 0x3C, 0x3E, 0x23, 0x3D, 0x3D, 0x3C, 0x16,
+ 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x3C, 0x3E,
+ 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x16, 0x3C, 0x3E, 0x23, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x16, 0x3C, 0x3E, 0x23, 0x3D,
+ 0x3D, 0x3D, 0x3C, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17,
+ 0x16, 0x3C, 0x3E, 0x23, 0x3D, 0x3D, 0x3D, 0x3C, 0x3C, 0x16, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x17, 0x16, 0x3C, 0x3E, 0x23, 0x3C, 0x3C, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x17, 0x16, 0x16,
+ 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x17, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x17, 0x0F, 0x17, 0x16, 0x16, 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x0D, 0x17, 0x16, 0x16, 0x16, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x17, 0x17, 0x17, 0x7B, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x17, 0x17, 0x17,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x17, 0x17,
+ 0x17, 0x7B, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3F, 0x14, 0x10, 0x17, 0x17, 0x7B, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F,
+ 0x0F, 0x0F, 0x0D, 0x0D, 0x17, 0x10, 0x17, 0x17, 0x17, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x14, 0x10, 0x10, 0x17, 0x17, 0x17,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x0F, 0x0D, 0x0D, 0x23, 0x23, 0x23, 0x23, 0x17, 0x17, 0x10, 0x17,
+ 0x17, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x14, 0x10,
+ 0x10, 0x10, 0x17, 0x17, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x40, 0x0D, 0x0F, 0x0D, 0x0D, 0x0D, 0x23, 0x23,
+ 0x17, 0x10, 0x10, 0x10, 0x17, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x14, 0x10, 0x14, 0x10, 0x10, 0x17, 0x17, 0x14, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x40, 0x0F, 0x0F, 0x23, 0x23,
+ 0x23, 0x23, 0x23, 0x16, 0x17, 0x10, 0x10, 0x10, 0x17, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x14, 0x10, 0x10, 0x14, 0x10, 0x10,
+ 0x17, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0F,
+ 0x0D, 0x0D, 0x0D, 0x0D, 0x23, 0x23, 0x23, 0x14, 0x17, 0x10, 0x10, 0x10,
+ 0x17, 0x3D, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x3D, 0x14, 0x17,
+ 0x10, 0x10, 0x14, 0x10, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x40, 0x0D, 0x0F, 0x0F, 0x23, 0x23, 0x23, 0x23, 0x16, 0x17,
+ 0x17, 0x10, 0x10, 0x10, 0x17, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x3D,
+ 0x2F, 0x3D, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x17, 0x14, 0x16, 0x14,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0F, 0x0F, 0x23, 0x23, 0x0D, 0x23,
+ 0x23, 0x01, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x17, 0x2F, 0x3D, 0x2F,
+ 0x3D, 0x2F, 0x3D, 0x2F, 0x3D, 0x2F, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10,
+ 0x17, 0x17, 0x16, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x0D,
+ 0x0D, 0x0D, 0x23, 0x23, 0x23, 0x01, 0x17, 0x17, 0x14, 0x10, 0x14, 0x10,
+ 0x17, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x3D, 0x2F, 0x3D, 0x14, 0x17,
+ 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x16, 0x16, 0x14, 0x14, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x17, 0x0F, 0x40, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x0F, 0x0F, 0x23, 0x23, 0x23, 0x23, 0x01, 0x16, 0x17, 0x14,
+ 0x10, 0x14, 0x10, 0x14, 0x17, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x3D, 0x2F, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10, 0x17, 0x3C, 0x16,
+ 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x40, 0x23, 0x23, 0x0D, 0x17,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0D, 0x0D, 0x0D, 0x23, 0x23, 0x23,
+ 0x01, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14,
+ 0x10, 0x17, 0x3C, 0x16, 0x16, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x40, 0x40,
+ 0x0D, 0x0D, 0x23, 0x0D, 0x17, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x0F, 0x0F,
+ 0x23, 0x23, 0x23, 0x01, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14,
+ 0x17, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x14, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x3C, 0x3C, 0x16, 0x14, 0x14, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x23, 0x23, 0x0D, 0x17, 0x00, 0x00,
+ 0x0F, 0x40, 0x0D, 0x23, 0x23, 0x23, 0x01, 0x01, 0x14, 0x17, 0x14, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x14, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x14, 0x17, 0x10, 0x10, 0x14, 0x10, 0x10, 0x17, 0x3C, 0x3C,
+ 0x16, 0x16, 0x14, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40, 0x40, 0x0D, 0x0D, 0x23, 0x3E,
+ 0x3E, 0x0D, 0x17, 0x0F, 0x0D, 0x0D, 0x23, 0x23, 0x23, 0x23, 0x01, 0x16,
+ 0x17, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x16, 0x01, 0x2F, 0x01,
+ 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x0F, 0x0D,
+ 0x23, 0x23, 0x23, 0x23, 0x3E, 0x3E, 0x0D, 0x0D, 0x0D, 0x23, 0x23, 0x23,
+ 0x23, 0x01, 0x01, 0x14, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2F, 0x01, 0x2F, 0x14, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x14,
+ 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x0F, 0x40, 0x40, 0x0D, 0x0D, 0x23, 0x3E, 0x23, 0x3E, 0x0D, 0x3E,
+ 0x3E, 0x23, 0x23, 0x23, 0x01, 0x01, 0x16, 0x17, 0x10, 0x14, 0x10, 0x14,
+ 0x10, 0x14, 0x10, 0x17, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x2F, 0x01, 0x14, 0x17, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x3C, 0x3C,
+ 0x3C, 0x16, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x23, 0x23,
+ 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x23, 0x01, 0x01, 0x14, 0x17,
+ 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x14, 0x17, 0x14, 0x10, 0x14, 0x10,
+ 0x10, 0x17, 0x3C, 0x3C, 0x3C, 0x14, 0x16, 0x14, 0x14, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40, 0x40,
+ 0x0D, 0x0D, 0x23, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x01,
+ 0x01, 0x16, 0x17, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x16,
+ 0x01, 0x01, 0x01, 0x14, 0x16, 0x16, 0x01, 0x01, 0x01, 0x2F, 0x14, 0x17,
+ 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x3C, 0x3C, 0x14, 0x16, 0x7B, 0x7B,
+ 0x7B, 0x3C, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x0D, 0x23, 0x3E, 0x3E, 0x3E, 0x23,
+ 0x3E, 0x23, 0x01, 0x01, 0x16, 0x14, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10,
+ 0x14, 0x17, 0x17, 0x01, 0x2F, 0x01, 0x01, 0x16, 0x3C, 0x3C, 0x3C, 0x01,
+ 0x01, 0x16, 0x14, 0x17, 0x14, 0x10, 0x14, 0x10, 0x14, 0x17, 0x3C, 0x3C,
+ 0x16, 0x7B, 0x7B, 0x17, 0x17, 0x7B, 0x3C, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40, 0x40, 0x0D, 0x0D, 0x23, 0x3E,
+ 0x3E, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x01, 0x16, 0x14, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x14, 0x10, 0x17, 0x14, 0x2F, 0x01, 0x2F, 0x2F, 0x14,
+ 0x16, 0x16, 0x3C, 0x01, 0x01, 0x14, 0x17, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x17, 0x3C, 0x3C, 0x16, 0x7B, 0x7B, 0x17, 0x01, 0x7B, 0x3C, 0x17,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x0F, 0x0D,
+ 0x23, 0x23, 0x0D, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x23, 0x23, 0x23, 0x14,
+ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x16, 0x01,
+ 0x2F, 0x2F, 0x2F, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x01, 0x14, 0x17, 0x17,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x17, 0x3C, 0x3C, 0x16, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x3C, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x0F, 0x40, 0x40, 0x0D, 0x23, 0x23, 0x3E, 0x3E, 0x3E, 0x23, 0x3E,
+ 0x23, 0x23, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x17, 0x14, 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x14, 0x16, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x14, 0x17, 0x17, 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x3C, 0x3C,
+ 0x14, 0x14, 0x7B, 0x7B, 0x7B, 0x3C, 0x17, 0x14, 0x14, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x0F, 0x0D, 0x23, 0x0D, 0x0D, 0x23,
+ 0x3E, 0x3E, 0x3E, 0x23, 0x0D, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x16, 0x2F, 0x01, 0x2F, 0x2F, 0x2F, 0x16,
+ 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x10, 0x17, 0x17, 0x14, 0x14, 0x14, 0x14,
+ 0x17, 0x14, 0x2F, 0x3C, 0x16, 0x14, 0x3C, 0x3C, 0x3C, 0x17, 0x14, 0x14,
+ 0x14, 0x14, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x17, 0x0F, 0x40, 0x40,
+ 0x0D, 0x23, 0x23, 0x3E, 0x0D, 0x0D, 0x0D, 0x0D, 0x14, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x14, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x14, 0x16, 0x16, 0x3C, 0x3C, 0x14, 0x17, 0x17, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x2F, 0x3C, 0x3C, 0x16, 0x16, 0x14,
+ 0x14, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x17, 0x17, 0x00, 0x00,
+ 0x17, 0x17, 0x0F, 0x0D, 0x23, 0x23, 0x0D, 0x0D, 0x0F, 0x17, 0x00, 0x00,
+ 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17,
+ 0x16, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x16, 0x3C, 0x3C, 0x3C, 0x16,
+ 0x10, 0x17, 0x17, 0x10, 0x14, 0x14, 0x14, 0x14, 0x17, 0x16, 0x2F, 0x2F,
+ 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16,
+ 0x16, 0x16, 0x16, 0x14, 0x17, 0x0F, 0x40, 0x40, 0x23, 0x0D, 0x0F, 0x17,
+ 0x00, 0x00, 0x00, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x14, 0x01, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x16, 0x16, 0x3C, 0x14, 0x10, 0x17, 0x17, 0x14, 0x10, 0x14, 0x14, 0x14,
+ 0x17, 0x3F, 0x3D, 0x2F, 0x3C, 0x16, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x3C, 0x3C, 0x16, 0x14, 0x00, 0x00, 0x17, 0x17, 0x0F, 0x40,
+ 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x16, 0x2F, 0x01, 0x2F, 0x2F,
+ 0x2F, 0x2F, 0x2F, 0x01, 0x16, 0x3C, 0x3C, 0x14, 0x17, 0x17, 0x14, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x17, 0x3F, 0x2F, 0x3D, 0x3C, 0x3C, 0x16, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x16, 0x3C, 0x3C, 0x14, 0x16, 0x14, 0x00, 0x00, 0x00,
+ 0x17, 0x17, 0x17, 0x0F, 0x17, 0x00, 0x00, 0x00, 0x17, 0x17, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x14, 0x2F,
+ 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x3C, 0x16, 0x10,
+ 0x17, 0x17, 0x10, 0x14, 0x10, 0x14, 0x10, 0x17, 0x17, 0x2F, 0x3D, 0x2F,
+ 0x3D, 0x3C, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17,
+ 0x17, 0x14, 0x16, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x2F, 0x2F,
+ 0x2F, 0x3C, 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x17,
+ 0x14, 0x3D, 0x2F, 0x3D, 0x2F, 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x3C, 0x3C,
+ 0x16, 0x14, 0x14, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x17, 0x14, 0x16, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F,
+ 0x01, 0x2F, 0x01, 0x2F, 0x3C, 0x16, 0x10, 0x17, 0x17, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x16, 0x3D, 0x3D, 0x3D, 0x3D, 0x2F, 0x3C, 0x3C,
+ 0x16, 0x16, 0x16, 0x16, 0x14, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x14, 0x16, 0x01, 0x2F, 0x01,
+ 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x2F, 0x2F, 0x16, 0x14, 0x17, 0x17,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3C, 0x3C, 0x3C, 0x3C, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x10, 0x10, 0x14, 0x14,
+ 0x10, 0x10, 0x14, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x14, 0x16,
+ 0x01, 0x2F, 0x01, 0x2F, 0x01, 0x01, 0x2F, 0x2F, 0x01, 0x2F, 0x2F, 0x16,
+ 0x14, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3C, 0x3C, 0x14, 0x14, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x14, 0x14, 0x10, 0x10, 0x14, 0x14, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x14, 0x16, 0x23, 0x23, 0x23, 0x01, 0x23, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x16, 0x14, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x17, 0x17, 0x17, 0x16, 0x3F, 0x3F, 0x3F, 0x23, 0x23, 0x3C, 0x3C, 0x16,
+ 0x16, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x17, 0x10, 0x10, 0x14, 0x14, 0x10, 0x10, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x10, 0x14, 0x16, 0x3C, 0x3C, 0x23, 0x23, 0x23, 0x23,
+ 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x16, 0x14, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x14, 0x23, 0x23, 0x23, 0x23, 0x3C,
+ 0x3C, 0x16, 0x16, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x14, 0x10, 0x10,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x14, 0x14, 0x16, 0x16,
+ 0x16, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x14, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x16, 0x3C,
+ 0x3C, 0x3C, 0x16, 0x16, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x14, 0x14, 0x14, 0x16, 0x14, 0x16, 0x14, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17,
+ 0x17, 0x16, 0x16, 0x16, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x17, 0x17, 0x17, 0x10, 0x17, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x14, 0x10, 0x14, 0x10, 0x14, 0x10,
+ 0x14, 0x10, 0x14, 0x10, 0x14, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x10,
+ 0x10, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x17, 0x10, 0x17, 0x10, 0x17, 0x10, 0x17, 0x10,
+ 0x17, 0x10, 0x17, 0x10, 0x10, 0x17, 0x10, 0x17, 0x10, 0x17, 0x14, 0x14,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x10, 0x17, 0x10,
+ 0x17, 0x10, 0x10, 0x10, 0x14, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x10, 0x14, 0x14, 0x14, 0x10, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x10, 0x10, 0x10,
+ 0x14, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x10, 0x14, 0x14, 0x14, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask7RB[] = {
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7F, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x1C, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x3E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x7F, 0x87, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite8LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x41, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18, 0x18, 0x18,
+ 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18,
+ 0x18, 0x18, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x41, 0x18, 0x28, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x18, 0x18, 0x18, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x18, 0x18, 0x28, 0x00, 0x43, 0x42, 0x42, 0x18, 0x18, 0x18, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x41, 0x42, 0x42, 0x00, 0x00,
+ 0x28, 0x28, 0x18, 0x18, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x41, 0x18, 0x18, 0x28, 0x28, 0x28,
+ 0x42, 0x41, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x18, 0x41, 0x41, 0x41,
+ 0x42, 0x28, 0x28, 0x28, 0x18, 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41,
+ 0x18, 0x18, 0x18, 0x18, 0x28, 0x41, 0x41, 0x41, 0x18, 0x41, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x41, 0x41, 0x41, 0x42, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41, 0x42, 0x42,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41,
+ 0x41, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x7B, 0x00,
+ 0x00, 0x00, 0x7B, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x43, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x42, 0x41,
+ 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x42, 0x42, 0x43, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42,
+ 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x43, 0x41, 0x41, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x41, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x41, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00,
+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x7B,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x00, 0x41, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x41, 0x00, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18, 0x18, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x18, 0x18, 0x43, 0x7B, 0x7B, 0x43, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x42, 0x7B, 0x43, 0x43, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42,
+ 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18,
+ 0x18, 0x18, 0x18, 0x28, 0x28, 0x28, 0x18, 0x18, 0x18, 0x43, 0x7B, 0x7B,
+ 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42,
+ 0x7B, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x42, 0x42, 0x43, 0x7B, 0x41, 0x18, 0x42, 0x18, 0x43,
+ 0x7B, 0x43, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x42, 0x43, 0x7B, 0x43, 0x18, 0x42, 0x18, 0x41, 0x00, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x41,
+ 0x18, 0x28, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x28, 0x18,
+ 0x41, 0x43, 0x7B, 0x43, 0x42, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x41, 0x41, 0x18, 0x18, 0x41, 0x42, 0x42, 0x42, 0x42, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x42, 0x42, 0x42,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x41, 0x43, 0x7B, 0x43, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x28, 0x41, 0x41, 0x18, 0x28, 0x28,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x18, 0x41, 0x42, 0x28, 0x28, 0x18, 0x41, 0x41, 0x28, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x28, 0x41, 0x42, 0x42, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x41, 0x41,
+ 0x28, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x28, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x41,
+ 0x41, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42, 0x28, 0x18, 0x18, 0x41, 0x18,
+ 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x18, 0x18, 0x28, 0x41, 0x43, 0x42,
+ 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x42, 0x42, 0x42, 0x42, 0x43, 0x41, 0x28, 0x18, 0x18, 0x00, 0x00,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x18, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x41, 0x41, 0x41,
+ 0x41, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x43, 0x43, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x42, 0x28, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42,
+ 0x18, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x43, 0x41, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x41, 0x43, 0x42, 0x41, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x18, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43,
+ 0x42, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x41,
+ 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x28,
+ 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43,
+ 0x43, 0x18, 0x28, 0x43, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x43, 0x28, 0x18, 0x43, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x18, 0x18, 0x41, 0x41, 0x43, 0x43, 0x42, 0x42,
+ 0x43, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x41, 0x41, 0x18, 0x18,
+ 0x43, 0x42, 0x42, 0x28, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x41, 0x28, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42,
+ 0x42, 0x7B, 0x43, 0x7B, 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x7B, 0x42,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x7B,
+ 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x43, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x41, 0x00, 0x28, 0x41, 0x42,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42,
+ 0x41, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41, 0x43, 0x42, 0x42, 0x41, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x00, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x41, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x43, 0x42, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43,
+ 0x41, 0x18, 0x18, 0x18, 0x18, 0x28, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x42, 0x42, 0x41, 0x42, 0x41, 0x41,
+ 0x42, 0x42, 0x28, 0x28, 0x18, 0x18, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41,
+ 0x7B, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42,
+ 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18,
+ 0x18, 0x18, 0x43, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42, 0x43, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x43, 0x7B, 0x42, 0x42,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x42, 0x42, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x43, 0x41, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x7B, 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43,
+ 0x43, 0x42, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x41, 0x41, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x7B, 0x41, 0x41, 0x41, 0x41, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x41, 0x41, 0x41, 0x41,
+ 0x43, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x43, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B,
+ 0x43, 0x7B, 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x41, 0x42,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x43, 0x43, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x7B, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x7B, 0x43, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x41, 0x41, 0x41, 0x7B, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x41, 0x41, 0x41,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x43, 0x42, 0x41, 0x41, 0x7B, 0x7B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B,
+ 0x41, 0x41, 0x41, 0x41, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41,
+ 0x41, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x43, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x43, 0x41, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask8LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x18,
+ 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x38, 0x00, 0xFC, 0x00, 0x00,
+ 0x00, 0x07, 0xF0, 0xF0, 0x1F, 0x7F, 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xF0,
+ 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x00,
+ 0x00, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFE, 0x00,
+ 0x00, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xF8, 0x30, 0x00, 0x3F, 0xFC, 0x00,
+ 0x00, 0xFF, 0xE0, 0x12, 0x24, 0x1F, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x12,
+ 0x24, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x12, 0x24, 0x01, 0xFF, 0x00,
+ 0x00, 0xFC, 0x00, 0x09, 0x48, 0x01, 0xFF, 0x02, 0x00, 0xFE, 0x00, 0x09,
+ 0x48, 0x00, 0xFF, 0x02, 0x40, 0x7F, 0x00, 0x09, 0x48, 0x00, 0x3F, 0x02,
+ 0x40, 0x3F, 0x81, 0xEA, 0x2B, 0x80, 0x7F, 0x06, 0x40, 0x1F, 0xC3, 0xFF,
+ 0xFF, 0xC0, 0xFE, 0x04, 0x60, 0x0F, 0xE3, 0xFF, 0xFF, 0xC3, 0xFC, 0x04,
+ 0x20, 0x07, 0xFF, 0xFF, 0xFF, 0xFB, 0xF8, 0x04, 0x20, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x3C, 0x20, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7C,
+ 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF8, 0x3F, 0xC0, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x3F, 0xF0, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0,
+ 0x01, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x3E, 0x3F, 0x87, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x0F,
+ 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x05, 0xF0, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x03, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xF8, 0x3F, 0xFF,
+ 0xFF, 0xE0, 0x7F, 0xC0, 0x07, 0xF0, 0x7F, 0xFF, 0xFF, 0xF0, 0x1F, 0xC0,
+ 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xE0, 0x0F, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x01, 0xE0, 0x1E, 0x01, 0xFC, 0x3F, 0xFF, 0xFF, 0x00, 0xF0,
+ 0x1C, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x70, 0x1C, 0x07, 0xC0, 0x00,
+ 0x00, 0x3F, 0x80, 0x70, 0x1C, 0x0F, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x70,
+ 0x38, 0x0F, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x38, 0x38, 0x0F, 0x00, 0x00,
+ 0x00, 0x07, 0xC0, 0x38, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00,
+ 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00,
+ 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00,
+ 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite8LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x41, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x18, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x18, 0x18, 0x18, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x28, 0x18, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x18, 0x18, 0x18, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x18, 0x18, 0x18, 0x42, 0x42, 0x43, 0x00,
+ 0x28, 0x18, 0x18, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x41, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x18,
+ 0x18, 0x18, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x41, 0x42,
+ 0x28, 0x28, 0x28, 0x18, 0x18, 0x41, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41, 0x18, 0x18, 0x28, 0x28,
+ 0x00, 0x00, 0x42, 0x42, 0x41, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0x18,
+ 0x41, 0x41, 0x41, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41, 0x42, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x18, 0x18, 0x28, 0x28, 0x28, 0x42, 0x41, 0x41, 0x41, 0x18,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41, 0x41, 0x42,
+ 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x18, 0x18, 0x18, 0x18, 0x28,
+ 0x42, 0x41, 0x41, 0x41, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x18, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x7B, 0x00, 0x00,
+ 0x00, 0x7B, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x41,
+ 0x42, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00,
+ 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x43, 0x43, 0x42, 0x42, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x43,
+ 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x42,
+ 0x43, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x00, 0x41, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x41,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x41, 0x42, 0x42, 0x7B, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x7B, 0x42, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18, 0x18, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x18, 0x18, 0x43, 0x7B, 0x7B, 0x43, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x7B, 0x42, 0x42, 0x41, 0x41,
+ 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18,
+ 0x18, 0x18, 0x28, 0x28, 0x28, 0x18, 0x18, 0x18, 0x18, 0x43, 0x7B, 0x7B,
+ 0x43, 0x42, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x00,
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x41, 0x18, 0x42, 0x18, 0x43,
+ 0x7B, 0x43, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x42, 0x43, 0x7B, 0x43, 0x18, 0x42, 0x18, 0x41, 0x7B, 0x43, 0x42,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x42, 0x43, 0x7B, 0x43, 0x41,
+ 0x18, 0x28, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x28, 0x18,
+ 0x41, 0x43, 0x7B, 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B,
+ 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43,
+ 0x7B, 0x43, 0x41, 0x41, 0x18, 0x18, 0x41, 0x42, 0x42, 0x42, 0x42, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x42, 0x42, 0x42,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x41, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x42, 0x41, 0x28, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x28, 0x41, 0x41, 0x18, 0x28, 0x28,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x18, 0x41, 0x42, 0x28, 0x28, 0x18, 0x41, 0x41, 0x28, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41,
+ 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42,
+ 0x42, 0x43, 0x41, 0x28, 0x18, 0x18, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x28, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x41,
+ 0x41, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42, 0x28, 0x18, 0x18, 0x41, 0x18,
+ 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x28,
+ 0x41, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x43,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x18, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42, 0x00, 0x00, 0x18, 0x18,
+ 0x28, 0x41, 0x43, 0x42, 0x42, 0x42, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x41, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x28, 0x42,
+ 0x18, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42,
+ 0x43, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x7B, 0x43, 0x7B, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x18, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41,
+ 0x41, 0x42, 0x41, 0x42, 0x43, 0x41, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x42, 0x43, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x43, 0x28, 0x18, 0x43, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x42, 0x42, 0x28, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x41,
+ 0x42, 0x42, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x41, 0x42, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x43,
+ 0x42, 0x42, 0x43, 0x43, 0x41, 0x41, 0x18, 0x18, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x43, 0x18, 0x28, 0x43, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41,
+ 0x42, 0x7B, 0x43, 0x7B, 0x7B, 0x43, 0x7B, 0x42, 0x42, 0x42, 0x41, 0x41,
+ 0x41, 0x42, 0x42, 0x28, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x41, 0x28, 0x42, 0x42, 0x43, 0x18, 0x18, 0x41, 0x41,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x41,
+ 0x41, 0x41, 0x42, 0x42, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x7B, 0x42, 0x41,
+ 0x18, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00, 0x42, 0x43, 0x7B, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x42, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x28, 0x00,
+ 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x42, 0x43, 0x41, 0x18, 0x18,
+ 0x18, 0x18, 0x28, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41,
+ 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x42, 0x43,
+ 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x7B, 0x41, 0x43, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x18, 0x18, 0x28, 0x28, 0x42, 0x42, 0x41, 0x41, 0x42, 0x41,
+ 0x42, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42,
+ 0x42, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x42, 0x42,
+ 0x42, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x42,
+ 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41,
+ 0x42, 0x42, 0x7B, 0x43, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x43, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42, 0x43, 0x18, 0x18,
+ 0x18, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42,
+ 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x41, 0x43, 0x42, 0x42, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x7B, 0x43, 0x7B, 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x41, 0x41, 0x7B,
+ 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x42, 0x41, 0x42, 0x41,
+ 0x42, 0x42, 0x42, 0x43, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x43,
+ 0x41, 0x41, 0x41, 0x41, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x43, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x41, 0x41, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41,
+ 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B,
+ 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x7B, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x7B, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x7B, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x41, 0x41, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x41, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B,
+ 0x7B, 0x41, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x41, 0x41,
+ 0x7B, 0x43, 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, 0x7B, 0x41, 0x41, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x43, 0x42, 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x42, 0x41, 0x42,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x43, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask8LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0,
+ 0x18, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x1C, 0x1F, 0xC0, 0x00,
+ 0x00, 0x00, 0xFE, 0xF8, 0x0F, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8,
+ 0x0F, 0xF3, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0xF8, 0x00,
+ 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0x00,
+ 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x0C, 0x1F, 0xFF, 0x00,
+ 0x00, 0x7F, 0xF8, 0x24, 0x48, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xE0, 0x24,
+ 0x48, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x24, 0x48, 0x00, 0xFF, 0x00,
+ 0x40, 0xFF, 0x80, 0x12, 0x90, 0x00, 0x3F, 0x00, 0x40, 0xFF, 0x00, 0x12,
+ 0x90, 0x00, 0x7F, 0x00, 0x40, 0xFC, 0x00, 0x12, 0x90, 0x00, 0xFE, 0x02,
+ 0x60, 0xFE, 0x01, 0xD4, 0x57, 0x81, 0xFC, 0x02, 0x20, 0x7F, 0x03, 0xFF,
+ 0xFF, 0xC3, 0xF8, 0x02, 0x20, 0x3F, 0xC3, 0xFF, 0xFF, 0xC7, 0xF0, 0x06,
+ 0x20, 0x1F, 0xDF, 0xFF, 0xFF, 0xFF, 0xE0, 0x04, 0x3C, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x04, 0x3E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x04,
+ 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3C, 0x0F, 0xFC, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x03, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x80, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x7C, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xE1, 0xFC, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x3E,
+ 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x0F, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xC0, 0x03, 0xFE, 0x07, 0xFF,
+ 0xFF, 0xFC, 0x1F, 0xE0, 0x03, 0xF8, 0x0F, 0xFF, 0xFF, 0xFE, 0x0F, 0xE0,
+ 0x07, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0x01, 0xF0, 0x07, 0x80, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0x80, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFC, 0x3F, 0x80, 0x78,
+ 0x0E, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x38, 0x0E, 0x01, 0xFC, 0x00,
+ 0x00, 0x03, 0xE0, 0x38, 0x0E, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xF0, 0x38,
+ 0x1C, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x70, 0x1C, 0x1C, 0x03, 0xE0, 0x00,
+ 0x00, 0x00, 0xF0, 0x1C, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00,
+ 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00,
+ 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00,
+ 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x60, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite8RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x41, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x18, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x18, 0x18, 0x18, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x28, 0x18, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x18, 0x18, 0x18, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x18, 0x18, 0x18, 0x42, 0x42, 0x43, 0x00,
+ 0x28, 0x18, 0x18, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x41, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x18,
+ 0x18, 0x18, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x41, 0x42,
+ 0x28, 0x28, 0x28, 0x18, 0x18, 0x41, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41, 0x18, 0x18, 0x28, 0x28,
+ 0x00, 0x00, 0x42, 0x42, 0x41, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0x18,
+ 0x41, 0x41, 0x41, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41, 0x42, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x18, 0x18, 0x28, 0x28, 0x28, 0x42, 0x41, 0x41, 0x41, 0x18,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41, 0x41, 0x42,
+ 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x18, 0x18, 0x18, 0x18, 0x28,
+ 0x42, 0x41, 0x41, 0x41, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x18, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x7B, 0x00, 0x00,
+ 0x00, 0x7B, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x41,
+ 0x42, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42, 0x00,
+ 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x43, 0x43, 0x42, 0x42, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x43,
+ 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x42,
+ 0x43, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x00, 0x41, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x41,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x41, 0x42, 0x42, 0x7B, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x7B, 0x42, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18, 0x18, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x18, 0x18, 0x43, 0x7B, 0x7B, 0x43, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x41,
+ 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18,
+ 0x18, 0x18, 0x28, 0x28, 0x28, 0x18, 0x18, 0x18, 0x18, 0x43, 0x7B, 0x7B,
+ 0x43, 0x42, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x00,
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x41, 0x18, 0x42, 0x18, 0x43,
+ 0x7B, 0x43, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x42, 0x43, 0x7B, 0x43, 0x18, 0x42, 0x18, 0x41, 0x7B, 0x43, 0x42,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x42, 0x43, 0x7B, 0x43, 0x41,
+ 0x18, 0x28, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x28, 0x18,
+ 0x41, 0x43, 0x7B, 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B,
+ 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43,
+ 0x7B, 0x43, 0x41, 0x41, 0x18, 0x18, 0x41, 0x42, 0x42, 0x42, 0x42, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x42, 0x42, 0x42,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x41, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x42, 0x41, 0x28, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x28, 0x41, 0x41, 0x18, 0x28, 0x28,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x18, 0x41, 0x42, 0x28, 0x28, 0x18, 0x41, 0x41, 0x28, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41,
+ 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x42,
+ 0x42, 0x43, 0x41, 0x28, 0x18, 0x18, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x28, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x41,
+ 0x41, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42, 0x28, 0x18, 0x18, 0x41, 0x18,
+ 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x28,
+ 0x41, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x43,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x18, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42, 0x00, 0x00, 0x18, 0x18,
+ 0x28, 0x41, 0x43, 0x42, 0x42, 0x42, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x41, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x28, 0x42,
+ 0x18, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42,
+ 0x43, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x7B, 0x43, 0x7B, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x18, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41,
+ 0x41, 0x42, 0x41, 0x42, 0x43, 0x41, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x42, 0x43, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x43, 0x28, 0x18, 0x43, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x42, 0x42, 0x28, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x41,
+ 0x42, 0x42, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x41, 0x42, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x43,
+ 0x42, 0x42, 0x43, 0x43, 0x41, 0x41, 0x18, 0x18, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x43, 0x18, 0x28, 0x43, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41,
+ 0x42, 0x7B, 0x43, 0x7B, 0x7B, 0x43, 0x7B, 0x42, 0x42, 0x42, 0x41, 0x41,
+ 0x41, 0x42, 0x42, 0x28, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x41, 0x28, 0x42, 0x42, 0x43, 0x18, 0x18, 0x41, 0x41,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x41,
+ 0x41, 0x41, 0x42, 0x42, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x7B, 0x42, 0x41,
+ 0x18, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00, 0x42, 0x43, 0x7B, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x42, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x28, 0x00,
+ 0x43, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x42, 0x43, 0x41, 0x18, 0x18,
+ 0x18, 0x18, 0x28, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41,
+ 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42, 0x42, 0x43,
+ 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x7B, 0x41, 0x43, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x18, 0x18, 0x28, 0x28, 0x42, 0x42, 0x41, 0x41, 0x42, 0x41,
+ 0x42, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42,
+ 0x42, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x42, 0x42,
+ 0x42, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x42,
+ 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41,
+ 0x42, 0x42, 0x7B, 0x43, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x43, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42, 0x43, 0x18, 0x18,
+ 0x18, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42,
+ 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x41, 0x43, 0x42, 0x42, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x41, 0x41, 0x7B,
+ 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x42, 0x41, 0x42, 0x41,
+ 0x42, 0x42, 0x42, 0x43, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x43,
+ 0x41, 0x41, 0x41, 0x41, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x43, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x41, 0x41, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41,
+ 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B,
+ 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x7B, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x7B, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x7B, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x41, 0x41, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x41, 0x41, 0x41, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B,
+ 0x7B, 0x41, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x41, 0x41,
+ 0x7B, 0x43, 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, 0x7B, 0x41, 0x41, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x43, 0x42, 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x42, 0x41, 0x42,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x43, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask8RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0,
+ 0x18, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x1C, 0x1F, 0xC0, 0x00,
+ 0x00, 0x00, 0xFE, 0xF8, 0x0F, 0x0F, 0xE0, 0x00, 0x00, 0x01, 0xFF, 0xF8,
+ 0x0F, 0xF3, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x07, 0xFF, 0xF8, 0x00,
+ 0x00, 0x0F, 0xFF, 0xC0, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFF, 0x00,
+ 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x0C, 0x1F, 0xFF, 0x00,
+ 0x00, 0x7F, 0xF8, 0x24, 0x48, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0xE0, 0x24,
+ 0x48, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x80, 0x24, 0x48, 0x00, 0xFF, 0x00,
+ 0x40, 0xFF, 0x80, 0x12, 0x90, 0x00, 0x3F, 0x00, 0x40, 0xFF, 0x00, 0x12,
+ 0x90, 0x00, 0x7F, 0x00, 0x40, 0xFC, 0x00, 0x12, 0x90, 0x00, 0xFE, 0x02,
+ 0x60, 0xFE, 0x01, 0xD4, 0x57, 0x81, 0xFC, 0x02, 0x20, 0x7F, 0x03, 0xFF,
+ 0xFF, 0xC3, 0xF8, 0x02, 0x20, 0x0F, 0xC3, 0xFF, 0xFF, 0xC7, 0xF0, 0x06,
+ 0x20, 0x1F, 0xDF, 0xFF, 0xFF, 0xFF, 0xE0, 0x04, 0x3C, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x04, 0x3E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x04,
+ 0x1F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3C, 0x0B, 0xFC, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x03, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0x80, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x7C, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xF8, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xE1, 0xFC, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x3E,
+ 0xA0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x0F, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xC0, 0x03, 0xFA, 0x07, 0xFF,
+ 0xFF, 0xFC, 0x1F, 0xE0, 0x03, 0xE8, 0x0F, 0xFF, 0xFF, 0xFE, 0x0B, 0xE0,
+ 0x07, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0x01, 0xF0, 0x07, 0x80, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0x80, 0xF0, 0x0F, 0x00, 0xFF, 0xFF, 0xFC, 0x3F, 0x80, 0x78,
+ 0x0E, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0xC0, 0x38, 0x0E, 0x01, 0xFC, 0x00,
+ 0x00, 0x03, 0xE0, 0x38, 0x0E, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xF0, 0x38,
+ 0x1C, 0x03, 0xC0, 0x00, 0x00, 0x00, 0xF0, 0x1C, 0x1C, 0x03, 0xE0, 0x00,
+ 0x00, 0x00, 0xF0, 0x1C, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00,
+ 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xFC, 0x00,
+ 0x00, 0x03, 0xF8, 0x00, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x03, 0xF8, 0x00,
+ 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x60, 0x00,
+ 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite8RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x41, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18, 0x18, 0x18,
+ 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18,
+ 0x18, 0x18, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x41, 0x18, 0x28, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x18, 0x18, 0x18, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x18, 0x18, 0x28, 0x00, 0x43, 0x42, 0x42, 0x18, 0x18, 0x18, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x41, 0x42, 0x42, 0x00, 0x00,
+ 0x28, 0x28, 0x18, 0x18, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x41, 0x18, 0x18, 0x28, 0x28, 0x28,
+ 0x42, 0x41, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x18, 0x41, 0x41, 0x41,
+ 0x42, 0x28, 0x28, 0x28, 0x18, 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x41,
+ 0x18, 0x18, 0x18, 0x18, 0x28, 0x41, 0x41, 0x41, 0x18, 0x41, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x41, 0x41, 0x41, 0x42, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41, 0x42, 0x42,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41,
+ 0x41, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x18, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x7B, 0x00,
+ 0x00, 0x00, 0x7B, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x18, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x43, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x42, 0x41,
+ 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x42, 0x42, 0x43, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x42,
+ 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x43, 0x41, 0x41, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x41, 0x00, 0x00, 0x42, 0x00, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x41, 0x41, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00,
+ 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x7B,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x00, 0x41, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x41, 0x00, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x42, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18, 0x18, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x18, 0x18, 0x43, 0x7B, 0x7B, 0x43, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x42, 0x7B, 0x43, 0x43, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x42,
+ 0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x42, 0x43, 0x7B, 0x7B, 0x43, 0x18,
+ 0x18, 0x18, 0x18, 0x28, 0x28, 0x28, 0x18, 0x18, 0x18, 0x43, 0x7B, 0x7B,
+ 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42,
+ 0x7B, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x42, 0x42, 0x43, 0x7B, 0x41, 0x18, 0x42, 0x18, 0x43,
+ 0x7B, 0x43, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x42, 0x43, 0x7B, 0x43, 0x18, 0x42, 0x18, 0x41, 0x00, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x41,
+ 0x18, 0x28, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x28, 0x18,
+ 0x41, 0x43, 0x7B, 0x43, 0x42, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x41, 0x41, 0x18, 0x18, 0x41, 0x42, 0x42, 0x42, 0x42, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x42, 0x42, 0x42,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x41, 0x43, 0x7B, 0x43, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x28, 0x41, 0x41, 0x18, 0x28, 0x28,
+ 0x42, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x18, 0x41, 0x42, 0x28, 0x28, 0x18, 0x41, 0x41, 0x28, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x28, 0x41, 0x42, 0x42, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x41, 0x41,
+ 0x28, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x41, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x28, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x41,
+ 0x41, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42, 0x28, 0x18, 0x18, 0x41, 0x18,
+ 0x41, 0x41, 0x42, 0x43, 0x00, 0x00, 0x18, 0x18, 0x28, 0x41, 0x43, 0x42,
+ 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x42, 0x42, 0x42, 0x42, 0x43, 0x41, 0x28, 0x18, 0x18, 0x00, 0x00,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x18, 0x18, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x41, 0x41, 0x41,
+ 0x41, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x00, 0x43, 0x43, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x43, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x18, 0x42, 0x28, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42,
+ 0x18, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x43, 0x41, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x41, 0x43, 0x42, 0x41, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x18, 0x41, 0x41,
+ 0x41, 0x41, 0x18, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43,
+ 0x42, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x18, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x41,
+ 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x28,
+ 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43,
+ 0x43, 0x18, 0x28, 0x43, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x43, 0x28, 0x18, 0x43, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x18, 0x18, 0x18, 0x18, 0x18, 0x41, 0x18,
+ 0x18, 0x41, 0x18, 0x18, 0x18, 0x18, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x18, 0x18, 0x41, 0x41, 0x43, 0x43, 0x42, 0x42,
+ 0x43, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x41, 0x41, 0x18, 0x18,
+ 0x43, 0x42, 0x42, 0x28, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x41, 0x28, 0x42, 0x42, 0x41, 0x41, 0x41, 0x42, 0x42,
+ 0x42, 0x7B, 0x43, 0x7B, 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x7B, 0x42,
+ 0x42, 0x42, 0x41, 0x41, 0x41, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x18,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x43, 0x7B,
+ 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x18, 0x41, 0x42, 0x7B, 0x43, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x41, 0x00, 0x28, 0x41, 0x42,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42,
+ 0x41, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x28, 0x18, 0x18, 0x18, 0x18, 0x41, 0x43, 0x42, 0x42, 0x41, 0x42,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x7B, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x41, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42,
+ 0x43, 0x42, 0x42, 0x41, 0x42, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x43,
+ 0x41, 0x18, 0x18, 0x18, 0x18, 0x28, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x42, 0x42, 0x41, 0x42, 0x41, 0x41,
+ 0x42, 0x42, 0x28, 0x28, 0x18, 0x18, 0x42, 0x42, 0x41, 0x41, 0x41, 0x41,
+ 0x42, 0x42, 0x43, 0x42, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41,
+ 0x7B, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41, 0x18, 0x18, 0x41, 0x18, 0x41,
+ 0x18, 0x41, 0x41, 0x42, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x41, 0x42,
+ 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18,
+ 0x18, 0x18, 0x43, 0x42, 0x42, 0x42, 0x41, 0x41, 0x18, 0x41, 0x18, 0x41,
+ 0x41, 0x18, 0x41, 0x18, 0x41, 0x41, 0x42, 0x42, 0x42, 0x43, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x43, 0x7B, 0x42, 0x42,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x42, 0x42, 0x42, 0x41,
+ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42,
+ 0x43, 0x41, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x43, 0x7B, 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x42, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43,
+ 0x43, 0x42, 0x42, 0x42, 0x41, 0x42, 0x41, 0x42, 0x41, 0x41, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x7B, 0x41, 0x41, 0x41, 0x41, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x42, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x41, 0x41, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x41, 0x41, 0x41, 0x41,
+ 0x43, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x42, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41,
+ 0x41, 0x42, 0x7B, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x43, 0x41, 0x41, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x43, 0x7B, 0x42, 0x41, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42, 0x41,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x41, 0x42, 0x7B, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00,
+ 0x43, 0x7B, 0x42, 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x42, 0x41, 0x42,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x41, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x41, 0x42, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x43, 0x43, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x41, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7B, 0x42,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x7B, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x41, 0x43, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x7B, 0x43, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x7B, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x41, 0x41, 0x7B,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x7B, 0x43, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x41, 0x41, 0x41, 0x7B, 0x7B, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B, 0x41, 0x41, 0x41,
+ 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x43, 0x42, 0x41, 0x41, 0x7B, 0x7B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x7B,
+ 0x41, 0x41, 0x41, 0x41, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x41, 0x42, 0x41,
+ 0x41, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x41, 0x41, 0x42, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x43, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x43, 0x41, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask8RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x18,
+ 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x38, 0x00, 0xFC, 0x00, 0x00,
+ 0x00, 0x07, 0xF0, 0xF0, 0x1F, 0x7F, 0x00, 0x00, 0x00, 0x0F, 0xCF, 0xF0,
+ 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x0F, 0xFF, 0xE0, 0x00,
+ 0x00, 0x3F, 0xFF, 0x80, 0x03, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFE, 0x00,
+ 0x00, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xF8, 0x30, 0x00, 0x3F, 0xFC, 0x00,
+ 0x00, 0xFF, 0xE0, 0x12, 0x24, 0x1F, 0xFE, 0x00, 0x00, 0xFF, 0x80, 0x12,
+ 0x24, 0x07, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x12, 0x24, 0x01, 0xFF, 0x00,
+ 0x00, 0xFC, 0x00, 0x09, 0x48, 0x01, 0xFF, 0x02, 0x00, 0xFE, 0x00, 0x09,
+ 0x48, 0x00, 0xFF, 0x02, 0x40, 0x7F, 0x00, 0x09, 0x48, 0x00, 0x3F, 0x02,
+ 0x40, 0x3F, 0x81, 0xEA, 0x2B, 0x80, 0x7F, 0x06, 0x40, 0x1F, 0xC3, 0xFF,
+ 0xFF, 0xC0, 0xFE, 0x04, 0x60, 0x0F, 0xE3, 0xFF, 0xFF, 0xC3, 0xFC, 0x04,
+ 0x20, 0x07, 0xFF, 0xFF, 0xFF, 0xFB, 0xF8, 0x04, 0x20, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x3C, 0x20, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7C,
+ 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF8, 0x3F, 0xC0, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x3F, 0xF0, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x0A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xE0,
+ 0x01, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x3E, 0x3F, 0x87, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x1F, 0x7C, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x00, 0x0F,
+ 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xF0, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x03, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xF8, 0x3F, 0xFF,
+ 0xFF, 0xE0, 0x7F, 0xC0, 0x07, 0xD0, 0x7F, 0xFF, 0xFF, 0xF0, 0x1F, 0xC0,
+ 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0x03, 0xE0, 0x0F, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x01, 0xE0, 0x1E, 0x01, 0xFC, 0x3F, 0xFF, 0xFF, 0x00, 0xF0,
+ 0x1C, 0x03, 0xE8, 0x00, 0x00, 0x7F, 0x00, 0x70, 0x1C, 0x07, 0xC0, 0x00,
+ 0x00, 0x2F, 0x80, 0x70, 0x1C, 0x0F, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x70,
+ 0x38, 0x0F, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x38, 0x38, 0x0F, 0x00, 0x00,
+ 0x00, 0x07, 0xC0, 0x38, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00,
+ 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00,
+ 0x00, 0x3F, 0x80, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00,
+ 0x00, 0x0F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite9LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00,
+ 0x00, 0x13, 0x00, 0x00, 0x44, 0x12, 0x00, 0x00, 0x10, 0x10, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x44, 0x44, 0x7B, 0x7B, 0x13, 0x7B, 0x7B, 0x44, 0x12, 0x7B, 0x7B, 0x10,
+ 0x7B, 0x12, 0x10, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x44, 0x44, 0x12, 0x7B, 0x13, 0x7B, 0x7B, 0x44, 0x12,
+ 0x7B, 0x7B, 0x12, 0x7B, 0x12, 0x10, 0x11, 0x1E, 0x1E, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x10, 0x12, 0x7B, 0x13, 0x7B,
+ 0x7B, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x11, 0x1E, 0x1E,
+ 0x15, 0x15, 0x15, 0x13, 0x13, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x13, 0x12,
+ 0x7B, 0x13, 0x13, 0x1E, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x7B, 0x12, 0x10,
+ 0x11, 0x1E, 0x1E, 0x15, 0x12, 0x12, 0x13, 0x1E, 0x15, 0x15, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
+ 0x12, 0x10, 0x11, 0x1E, 0x15, 0x11, 0x1E, 0x7B, 0x10, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x10, 0x11, 0x1E, 0x1E, 0x15, 0x12, 0x12, 0x13, 0x1E, 0x15,
+ 0x44, 0x44, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x44, 0x12, 0x12, 0x11, 0x1E, 0x11, 0x11, 0x11, 0x10, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x13, 0x10, 0x11, 0x11, 0x15, 0x13, 0x13,
+ 0x13, 0x1E, 0x15, 0x44, 0x45, 0x7B, 0x12, 0x15, 0x10, 0x10, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x12, 0x12, 0x10, 0x13, 0x11, 0x11,
+ 0x11, 0x11, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x44, 0x45, 0x7B, 0x12, 0x12, 0x44,
+ 0x1D, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44,
+ 0x12, 0x10, 0x11, 0x15, 0x11, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x12,
+ 0x10, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x44, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x44, 0x15, 0x24, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1E, 0x1D, 0x1E, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44,
+ 0x7B, 0x7B, 0x45, 0x12, 0x11, 0x1E, 0x15, 0x15, 0x44, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x10, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x10,
+ 0x44, 0x45, 0x45, 0x7B, 0x12, 0x12, 0x44, 0x44, 0x11, 0x24, 0x1D, 0x11,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1D, 0x24, 0x1D, 0x1E, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x44, 0x7B, 0x7B, 0x45, 0x12, 0x10, 0x15, 0x15, 0x15, 0x15,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x10, 0x11, 0x15, 0x15, 0x1E, 0x15,
+ 0x1E, 0x15, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x44, 0x44,
+ 0x15, 0x46, 0x24, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1D, 0x24,
+ 0x24, 0x24, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x11,
+ 0x1E, 0x15, 0x1E, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x11, 0x1E,
+ 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x45, 0x15, 0x46, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x45, 0x10, 0x15, 0x1E, 0x15, 0x15, 0x10, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x10, 0x1E, 0x15, 0x1E, 0x15, 0x15, 0x1D, 0x1E, 0x15, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x45, 0x11, 0x46, 0x1E, 0x11,
+ 0x12, 0x00, 0x00, 0x00, 0x1E, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x24, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x10, 0x1D, 0x1E, 0x1E, 0x15, 0x44,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x10, 0x11, 0x15, 0x1E, 0x15, 0x1E, 0x1D, 0x1E,
+ 0x1D, 0x1E, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12,
+ 0x11, 0x1D, 0x1E, 0x13, 0x12, 0x00, 0x00, 0x15, 0x1E, 0x24, 0x24, 0x46,
+ 0x46, 0x24, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x11, 0x1D,
+ 0x1E, 0x1E, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x11, 0x1D, 0x1E,
+ 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x12, 0x11, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x1E,
+ 0x1D, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45,
+ 0x12, 0x10, 0x15, 0x24, 0x1D, 0x1E, 0x15, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x15, 0x1D, 0x1E, 0x1E, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x1E, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x11, 0x1E, 0x11, 0x12,
+ 0x00, 0x00, 0x1E, 0x1E, 0x24, 0x24, 0x46, 0x46, 0x46, 0x1D, 0x1E, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x11, 0x1E, 0x24, 0x1D, 0x1D, 0x11, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x1D, 0x24, 0x1E, 0x1D, 0x1E, 0x24,
+ 0x1D, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10,
+ 0x11, 0x1E, 0x13, 0x12, 0x00, 0x00, 0x1E, 0x1D, 0x24, 0x46, 0x46, 0x46,
+ 0x46, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x10, 0x1E, 0x24, 0x24,
+ 0x24, 0x24, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x1D,
+ 0x1D, 0x1D, 0x24, 0x1D, 0x24, 0x1D, 0x1E, 0x44, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x10, 0x11, 0x15, 0x12, 0x00, 0x00, 0x1E, 0x1D, 0x24,
+ 0x24, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x12,
+ 0x11, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x24, 0x1D, 0x1D, 0x24, 0x1D, 0x24, 0x1D, 0x24, 0x1E, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x44, 0x10, 0x11, 0x12, 0x00, 0x00,
+ 0x00, 0x1E, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x46, 0x1D, 0x11, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x15, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x12, 0x10, 0x1E, 0x24, 0x46, 0x46, 0x24, 0x11, 0x44, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x1D, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x7B, 0x44, 0x10,
+ 0x11, 0x12, 0x00, 0x00, 0x1E, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x46, 0x46,
+ 0x1E, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x11, 0x44, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x10, 0x11, 0x24, 0x24, 0x46, 0x46,
+ 0x24, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x11, 0x1E, 0x24, 0x24,
+ 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x7B, 0x44, 0x44, 0x10, 0x10, 0x00, 0x00, 0x00, 0x1E, 0x1D, 0x24, 0x46,
+ 0x46, 0x46, 0x46, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15,
+ 0x1D, 0x11, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x12, 0x11, 0x1E,
+ 0x24, 0x46, 0x46, 0x24, 0x1E, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x11, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x44,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x44, 0x7B, 0x12, 0x13, 0x12, 0x00, 0x00, 0x15,
+ 0x1E, 0x24, 0x24, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x13, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1D, 0x1D, 0x11, 0x13, 0x12, 0x12, 0x12, 0x44, 0x45,
+ 0x12, 0x12, 0x13, 0x15, 0x24, 0x46, 0x46, 0x24, 0x11, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x15, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x44, 0x7B, 0x44, 0x12, 0x12,
+ 0x00, 0x00, 0x10, 0x1E, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x46, 0x46, 0x11,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x1D, 0x11, 0x13, 0x44, 0x44,
+ 0x44, 0x44, 0x10, 0x12, 0x12, 0x11, 0x46, 0x46, 0x1E, 0x46, 0x24, 0x24,
+ 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x46, 0x46,
+ 0x24, 0x24, 0x24, 0x46, 0x24, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x44, 0x12, 0x10, 0x00, 0x00, 0x00, 0x13, 0x1E, 0x24, 0x24, 0x46, 0x46,
+ 0x46, 0x46, 0x1D, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x11,
+ 0x13, 0x44, 0x7B, 0x10, 0x10, 0x44, 0x44, 0x10, 0x12, 0x1D, 0x46, 0x46,
+ 0x1D, 0x24, 0x24, 0x47, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10,
+ 0x1E, 0x24, 0x46, 0x46, 0x24, 0x24, 0x46, 0x24, 0x46, 0x24, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x44, 0x44, 0x12, 0x10, 0x00, 0x00, 0x00, 0x12, 0x15, 0x1D,
+ 0x24, 0x46, 0x46, 0x46, 0x46, 0x24, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x15, 0x10, 0x44, 0x7B, 0x11, 0x7B, 0x7B, 0x11, 0x44, 0x44,
+ 0x1D, 0x1D, 0x46, 0x46, 0x46, 0x15, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x46, 0x46, 0x46, 0x24, 0x46, 0x46,
+ 0x46, 0x46, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x12, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x1E, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x13, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x1E, 0x11, 0x11, 0x45, 0x44, 0x7B, 0x1E, 0x7B,
+ 0x7B, 0x11, 0x44, 0x12, 0x1D, 0x1D, 0x46, 0x46, 0x46, 0x15, 0x47, 0x11,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x24, 0x24, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10, 0x12, 0x7B, 0x12, 0x44,
+ 0x12, 0x00, 0x00, 0x00, 0x12, 0x15, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x24,
+ 0x24, 0x1D, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x7B, 0x7B, 0x12,
+ 0x45, 0x7B, 0x11, 0x7B, 0x7B, 0x11, 0x12, 0x12, 0x1D, 0x11, 0x46, 0x46,
+ 0x46, 0x15, 0x1E, 0x13, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x13,
+ 0x15, 0x15, 0x47, 0x11, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10,
+ 0x7B, 0x12, 0x7B, 0x12, 0x44, 0x44, 0x12, 0x12, 0x10, 0x11, 0x1D, 0x24,
+ 0x24, 0x46, 0x46, 0x24, 0x1D, 0x1D, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x45, 0x45, 0x10, 0x7B, 0x7B, 0x11, 0x11, 0x44, 0x7B, 0x13,
+ 0x1D, 0x11, 0x46, 0x46, 0x46, 0x15, 0x11, 0x44, 0x44, 0x7B, 0x7B, 0x12,
+ 0x10, 0x13, 0x11, 0x15, 0x1D, 0x1D, 0x1D, 0x47, 0x11, 0x10, 0x46, 0x46,
+ 0x46, 0x46, 0x1E, 0x10, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x44, 0x44, 0x44,
+ 0x10, 0x1E, 0x24, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x1D, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x45, 0x7B, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x11, 0x1D, 0x11, 0x46, 0x46, 0x24, 0x47, 0x13, 0x44,
+ 0x7B, 0x7B, 0x12, 0x10, 0x13, 0x45, 0x12, 0x12, 0x10, 0x11, 0x15, 0x15,
+ 0x47, 0x10, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x12,
+ 0x7B, 0x44, 0x12, 0x12, 0x11, 0x1E, 0x24, 0x24, 0x24, 0x46, 0x46, 0x24,
+ 0x1D, 0x1D, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1D, 0x13, 0x45,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x11, 0x1D, 0x11, 0x1D, 0x46, 0x46,
+ 0x1E, 0x47, 0x12, 0x12, 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x11, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x10, 0x10, 0x11, 0x46, 0x46, 0x46, 0x1E, 0x10,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x44, 0x12, 0x10, 0x11, 0x1E, 0x24, 0x24,
+ 0x46, 0x46, 0x46, 0x24, 0x24, 0x1D, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x15, 0x12, 0x12, 0x12, 0x7B, 0x44, 0x44, 0x44, 0x44, 0x10, 0x1E, 0x47,
+ 0x11, 0x1D, 0x46, 0x46, 0x1E, 0x47, 0x12, 0x10, 0x10, 0x12, 0x12, 0x45,
+ 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x1D, 0x11, 0x47, 0x10, 0x11, 0x46,
+ 0x24, 0x46, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x12, 0x10,
+ 0x11, 0x1E, 0x24, 0x24, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x11, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x12, 0x44, 0x44, 0x45, 0x45,
+ 0x10, 0x1E, 0x47, 0x11, 0x1D, 0x46, 0x46, 0x1E, 0x15, 0x47, 0x45, 0x45,
+ 0x45, 0x12, 0x10, 0x10, 0x10, 0x12, 0x12, 0x12, 0x10, 0x11, 0x11, 0x15,
+ 0x47, 0x10, 0x11, 0x1E, 0x24, 0x46, 0x1E, 0x10, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x44, 0x12, 0x10, 0x11, 0x1E, 0x24, 0x24, 0x24, 0x46, 0x46, 0x46,
+ 0x24, 0x24, 0x1E, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45,
+ 0x45, 0x45, 0x10, 0x11, 0x47, 0x47, 0x11, 0x1D, 0x46, 0x46, 0x46, 0x1E,
+ 0x15, 0x47, 0x45, 0x45, 0x12, 0x10, 0x10, 0x12, 0x12, 0x45, 0x11, 0x15,
+ 0x15, 0x1D, 0x15, 0x47, 0x10, 0x10, 0x11, 0x1E, 0x24, 0x46, 0x1E, 0x10,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x11, 0x1E, 0x24, 0x24,
+ 0x24, 0x24, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x1E, 0x47, 0x47, 0x47, 0x47, 0x46, 0x46,
+ 0x46, 0x46, 0x1E, 0x1E, 0x1D, 0x47, 0x45, 0x45, 0x45, 0x12, 0x12, 0x45,
+ 0x10, 0x11, 0x11, 0x1D, 0x1D, 0x15, 0x24, 0x10, 0x12, 0x10, 0x11, 0x1E,
+ 0x24, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x12,
+ 0x10, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x46, 0x46, 0x24, 0x24, 0x1E,
+ 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1E, 0x47, 0x47,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x1E, 0x24, 0x1E, 0x47, 0x45, 0x45,
+ 0x12, 0x10, 0x10, 0x10, 0x12, 0x12, 0x45, 0x12, 0x10, 0x11, 0x47, 0x12,
+ 0x10, 0x10, 0x15, 0x1E, 0x24, 0x24, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x7B,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x46,
+ 0x46, 0x46, 0x24, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x47, 0x47, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x1E, 0x15, 0x1D,
+ 0x1E, 0x47, 0x45, 0x45, 0x45, 0x7B, 0x12, 0x12, 0x45, 0x10, 0x10, 0x10,
+ 0x24, 0x47, 0x10, 0x12, 0x10, 0x11, 0x1E, 0x1E, 0x24, 0x24, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x1E,
+ 0x1D, 0x24, 0x24, 0x24, 0x46, 0x46, 0x24, 0x24, 0x1E, 0x13, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1E, 0x46, 0x46, 0x46, 0x1E, 0x1E,
+ 0x1E, 0x15, 0x1D, 0x1D, 0x1E, 0x47, 0x44, 0x45, 0x7B, 0x7B, 0x7B, 0x10,
+ 0x10, 0x12, 0x10, 0x24, 0x47, 0x10, 0x12, 0x10, 0x10, 0x11, 0x1E, 0x1D,
+ 0x24, 0x1D, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x12, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x24, 0x24, 0x46, 0x46, 0x46, 0x24,
+ 0x1D, 0x1E, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x15, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x44, 0x45,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x10, 0x12, 0x10, 0x10,
+ 0x11, 0x15, 0x1D, 0x24, 0x24, 0x1D, 0x1E, 0x10, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x10, 0x10, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x11, 0x1D, 0x24, 0x24,
+ 0x24, 0x46, 0x46, 0x24, 0x24, 0x1D, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x15, 0x1E, 0x1D, 0x15, 0x46, 0x1D, 0x1D, 0x1D, 0x1E,
+ 0x15, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45,
+ 0x12, 0x10, 0x10, 0x11, 0x11, 0x15, 0x1D, 0x1D, 0x24, 0x1D, 0x1E, 0x10,
+ 0x44, 0x7B, 0x12, 0x7B, 0x7B, 0x44, 0x44, 0x10, 0x11, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x1E, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x15, 0x1E, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1E, 0x1E, 0x47, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x45, 0x10, 0x10, 0x11, 0x11, 0x15, 0x1E, 0x1D, 0x24,
+ 0x1D, 0x24, 0x1E, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x12, 0x11, 0x11, 0x7B, 0x7B, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x46,
+ 0x24, 0x1D, 0x1D, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x15, 0x1E, 0x15, 0x1D, 0x1E, 0x1E, 0x15, 0x15, 0x13, 0x45, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x10, 0x11, 0x15,
+ 0x1E, 0x1D, 0x1D, 0x1E, 0x1D, 0x1E, 0x1E, 0x11, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x1D, 0x11, 0x7B, 0x7B, 0x1E, 0x1D,
+ 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x13, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x10, 0x11, 0x15, 0x1D, 0x1E, 0x1E, 0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x12, 0x1D,
+ 0x11, 0x7B, 0x11, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13,
+ 0x15, 0x15, 0x13, 0x13, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x15, 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x1E,
+ 0x15, 0x1E, 0x1E, 0x1E, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x44, 0x12, 0x11, 0x1E, 0x10, 0x7B, 0x1E, 0x1D, 0x1D, 0x24, 0x24,
+ 0x24, 0x24, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x44, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12, 0x10, 0x11, 0x15, 0x1E,
+ 0x15, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x1D, 0x1E, 0x11, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x10, 0x11, 0x1E, 0x7B, 0x13,
+ 0x1E, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x45, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x45, 0x12,
+ 0x12, 0x11, 0x11, 0x15, 0x1E, 0x15, 0x15, 0x1E, 0x15, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12,
+ 0x10, 0x1D, 0x11, 0x7B, 0x11, 0x1E, 0x1E, 0x1D, 0x24, 0x1D, 0x1D, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x12, 0x45, 0x12, 0x45, 0x7B, 0x10, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x1E, 0x15, 0x1E, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x10, 0x11, 0x1E, 0x11, 0x12, 0x00, 0x1E, 0x1E,
+ 0x1D, 0x1D, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x45, 0x12, 0x45, 0x12, 0x7B, 0x12, 0x10, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x11, 0x44, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x7B, 0x45, 0x44, 0x44, 0x11, 0x1E, 0x1E,
+ 0x12, 0x00, 0x00, 0x1E, 0x1E, 0x1D, 0x1E, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45,
+ 0x12, 0x45, 0x12, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
+ 0x1E, 0x11, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x45, 0x7B, 0x45, 0x7B, 0x44,
+ 0x44, 0x10, 0x1E, 0x1E, 0x10, 0x12, 0x00, 0x00, 0x1E, 0x1E, 0x1E, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x45, 0x45, 0x45, 0x12, 0x45, 0x45,
+ 0x45, 0x45, 0x45, 0x45, 0x00, 0x12, 0x45, 0x12, 0x12, 0x12, 0x12, 0x10,
+ 0x10, 0x11, 0x11, 0x15, 0x15, 0x1E, 0x11, 0x44, 0x44, 0x7B, 0x45, 0x7B,
+ 0x45, 0x7B, 0x45, 0x7B, 0x44, 0x10, 0x1D, 0x1D, 0x11, 0x12, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x12, 0x45,
+ 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x12, 0x11, 0x11, 0x15, 0x1E, 0x11,
+ 0x44, 0x44, 0x7B, 0x45, 0x7B, 0x45, 0x7B, 0x45, 0x44, 0x12, 0x1D, 0x24,
+ 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12,
+ 0x10, 0x11, 0x15, 0x1E, 0x11, 0x44, 0x44, 0x7B, 0x45, 0x7B, 0x45, 0x7B,
+ 0x44, 0x12, 0x1D, 0x24, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45,
+ 0x45, 0x12, 0x45, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x12, 0x10, 0x11, 0x15, 0x1E, 0x15, 0x44, 0x44,
+ 0x44, 0x45, 0x7B, 0x45, 0x44, 0x12, 0x1D, 0x24, 0x11, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x12,
+ 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x45, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12, 0x10, 0x10,
+ 0x15, 0x1E, 0x1E, 0x7B, 0x44, 0x44, 0x45, 0x7B, 0x44, 0x10, 0x1D, 0x1D,
+ 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x12, 0x45, 0x45, 0x45,
+ 0x12, 0x12, 0x45, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x12, 0x00, 0x10, 0x11, 0x1E, 0x1D, 0x10, 0x44, 0x44, 0x44,
+ 0x44, 0x11, 0x1E, 0x1E, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x45, 0x45, 0x12, 0x12, 0x45,
+ 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x45, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x10, 0x11, 0x47,
+ 0x1D, 0x11, 0x13, 0x13, 0x11, 0x1E, 0x1D, 0x1E, 0x10, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x45, 0x45, 0x10, 0x12, 0x45, 0x45, 0x45, 0x10, 0x12, 0x45, 0x12, 0x45,
+ 0x45, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12,
+ 0x00, 0x00, 0x10, 0x11, 0x11, 0x47, 0x47, 0x47, 0x47, 0x1D, 0x1D, 0x11,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x45, 0x45, 0x45, 0x10, 0x12, 0x45, 0x45,
+ 0x45, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x45,
+ 0x45, 0x45, 0x10, 0x12, 0x45, 0x45, 0x45, 0x10, 0x12, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x12, 0x45, 0x45, 0x45, 0x10, 0x45, 0x45, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x45, 0x45,
+ 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask9LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xCE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xE0, 0x07,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x1F, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x7F, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xFF, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF1, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE7, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFE,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x8F, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFC,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x3F, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xF0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF,
+ 0x00, 0x00, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xC7, 0x00, 0x00, 0xFF, 0xE0,
+ 0x0F, 0xFF, 0xFF, 0xC3, 0x00, 0x00, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x6F, 0xFF, 0xC0,
+ 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x27, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF,
+ 0xE0, 0x33, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xF0, 0x10, 0x7F, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite9LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x13, 0x44, 0x00, 0x00,
+ 0x10, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x44, 0x44, 0x7B, 0x13, 0x7B, 0x7B, 0x13, 0x13,
+ 0x7B, 0x7B, 0x12, 0x12, 0x7B, 0x12, 0x10, 0x11, 0x1E, 0x1E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x44, 0x10, 0x7B, 0x15, 0x7B,
+ 0x7B, 0x13, 0x7B, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x11, 0x1E,
+ 0x1E, 0x15, 0x15, 0x15, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x44, 0x44, 0x13,
+ 0x7B, 0x1E, 0x13, 0x13, 0x1E, 0x7B, 0x7B, 0x10, 0x12, 0x7B, 0x12, 0x10,
+ 0x10, 0x11, 0x1E, 0x1E, 0x15, 0x12, 0x12, 0x13, 0x1E, 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, 0x10,
+ 0x44, 0x12, 0x10, 0x11, 0x1E, 0x15, 0x11, 0x1E, 0x7B, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x11, 0x1E, 0x1E, 0x15, 0x12, 0x12, 0x12, 0x13, 0x1E,
+ 0x15, 0x44, 0x44, 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, 0x44, 0x10, 0x44, 0x12, 0x12, 0x11, 0x1E, 0x11, 0x11, 0x11, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x11, 0x11, 0x15, 0x13, 0x13,
+ 0x13, 0x1E, 0x15, 0x44, 0x45, 0x45, 0x7B, 0x12, 0x15, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x10, 0x44, 0x12, 0x12, 0x10, 0x13, 0x11,
+ 0x11, 0x11, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x44, 0x45, 0x7B, 0x12, 0x12, 0x44,
+ 0x1D, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x44,
+ 0x12, 0x10, 0x11, 0x15, 0x11, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x12,
+ 0x10, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x44, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x44, 0x15, 0x24, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44,
+ 0x7B, 0x7B, 0x45, 0x12, 0x11, 0x1E, 0x15, 0x15, 0x44, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x10, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x10,
+ 0x44, 0x45, 0x45, 0x7B, 0x12, 0x12, 0x44, 0x44, 0x11, 0x24, 0x1D, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1E, 0x1E, 0x11, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x45, 0x12, 0x10, 0x15, 0x15, 0x15, 0x15,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x10, 0x11, 0x15, 0x15, 0x1E, 0x15,
+ 0x1E, 0x15, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x44, 0x44,
+ 0x15, 0x46, 0x24, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x1D,
+ 0x1D, 0x1E, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x11,
+ 0x1E, 0x15, 0x1E, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x11, 0x1E,
+ 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x45, 0x15, 0x46, 0x1D, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x1E, 0x1D, 0x24, 0x24, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x45, 0x10, 0x15, 0x1E, 0x15, 0x15, 0x10, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x10, 0x1E, 0x15, 0x1E, 0x15, 0x15, 0x1D, 0x1E, 0x15, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x45, 0x11, 0x46, 0x1E, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x11, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x10, 0x1D, 0x1E, 0x1E, 0x15, 0x44,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x10, 0x11, 0x15, 0x1E, 0x15, 0x1E, 0x1D, 0x1E,
+ 0x1D, 0x1E, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12,
+ 0x11, 0x1D, 0x1E, 0x13, 0x12, 0x00, 0x00, 0x00, 0x1D, 0x24, 0x46, 0x46,
+ 0x24, 0x24, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x11, 0x1D,
+ 0x1E, 0x1E, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x11, 0x1D, 0x1E,
+ 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x12, 0x11, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x1E,
+ 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45,
+ 0x12, 0x10, 0x15, 0x24, 0x1D, 0x1E, 0x15, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x15, 0x1D, 0x1E, 0x1E, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x1E, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x11, 0x1E, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x11, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x11, 0x1E, 0x24, 0x1D, 0x1D, 0x11, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x1D, 0x24, 0x1E, 0x1D, 0x1E, 0x24,
+ 0x1D, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10,
+ 0x11, 0x1E, 0x12, 0x12, 0x00, 0x00, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x46,
+ 0x1D, 0x1E, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x10, 0x1E, 0x24, 0x24,
+ 0x24, 0x24, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x1D,
+ 0x1D, 0x1D, 0x24, 0x1D, 0x24, 0x1D, 0x1E, 0x44, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x10, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00, 0x24, 0x24,
+ 0x46, 0x46, 0x46, 0x46, 0x1D, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x12,
+ 0x11, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x24, 0x1D, 0x1D, 0x24, 0x1D, 0x24, 0x1D, 0x24, 0x1E, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x44, 0x10, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x46, 0x1D, 0x1E, 0x10, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x15, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x12, 0x10, 0x1E, 0x24, 0x46, 0x46, 0x24, 0x11, 0x44, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x1D, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x7B, 0x44, 0x10,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x24, 0x24, 0x46, 0x46, 0x46, 0x46, 0x1D,
+ 0x11, 0x13, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x11, 0x44, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x10, 0x11, 0x24, 0x24, 0x46, 0x46,
+ 0x24, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x11, 0x1E, 0x24, 0x24,
+ 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x7B, 0x44, 0x44, 0x10, 0x12, 0x12, 0x00, 0x00, 0x1D, 0x24, 0x46, 0x46,
+ 0x46, 0x46, 0x1D, 0x1E, 0x11, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x15,
+ 0x1D, 0x11, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x12, 0x11, 0x1E,
+ 0x24, 0x46, 0x46, 0x24, 0x1E, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x11, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x44,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x44, 0x7B, 0x12, 0x10, 0x13, 0x00, 0x00, 0x00,
+ 0x24, 0x24, 0x46, 0x46, 0x46, 0x46, 0x1D, 0x11, 0x13, 0x12, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x1D, 0x1D, 0x11, 0x13, 0x12, 0x12, 0x12, 0x44, 0x45,
+ 0x12, 0x12, 0x13, 0x15, 0x1D, 0x46, 0x46, 0x24, 0x11, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x15, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x44, 0x7B, 0x44, 0x12, 0x10,
+ 0x12, 0x00, 0x00, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x46, 0x1D, 0x11, 0x13,
+ 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x1D, 0x11, 0x13, 0x44, 0x44,
+ 0x44, 0x44, 0x10, 0x12, 0x12, 0x11, 0x46, 0x46, 0x1E, 0x24, 0x24, 0x24,
+ 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x46, 0x46,
+ 0x24, 0x24, 0x24, 0x46, 0x24, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x44, 0x12, 0x10, 0x12, 0x00, 0x00, 0x1E, 0x24, 0x24, 0x46, 0x46, 0x46,
+ 0x1D, 0x1D, 0x11, 0x13, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x11,
+ 0x13, 0x44, 0x7B, 0x10, 0x10, 0x44, 0x44, 0x10, 0x12, 0x1D, 0x46, 0x46,
+ 0x15, 0x1D, 0x24, 0x47, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10,
+ 0x1E, 0x24, 0x46, 0x46, 0x24, 0x24, 0x46, 0x24, 0x46, 0x24, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x44, 0x44, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x24,
+ 0x46, 0x46, 0x46, 0x46, 0x1D, 0x11, 0x13, 0x13, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x1D, 0x15, 0x10, 0x44, 0x7B, 0x11, 0x7B, 0x7B, 0x11, 0x44, 0x44,
+ 0x1D, 0x1D, 0x46, 0x46, 0x1D, 0x15, 0x24, 0x1E, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x46, 0x46, 0x46, 0x24, 0x46, 0x46,
+ 0x46, 0x46, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x12, 0x10, 0x00, 0x00, 0x00,
+ 0x13, 0x1E, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x13, 0x11, 0x12,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x11, 0x45, 0x44, 0x7B, 0x1E, 0x7B,
+ 0x7B, 0x11, 0x44, 0x12, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x15, 0x47, 0x11,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x24, 0x24, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10, 0x12, 0x7B, 0x12, 0x44,
+ 0x12, 0x00, 0x00, 0x12, 0x15, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x24, 0x24,
+ 0x1D, 0x12, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x11, 0x10, 0x12,
+ 0x45, 0x7B, 0x11, 0x7B, 0x7B, 0x11, 0x12, 0x12, 0x1D, 0x11, 0x46, 0x46,
+ 0x24, 0x15, 0x1E, 0x13, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10,
+ 0x7B, 0x12, 0x7B, 0x12, 0x44, 0x44, 0x12, 0x10, 0x11, 0x1D, 0x24, 0x24,
+ 0x46, 0x24, 0x24, 0x1D, 0x1E, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x45, 0x45, 0x10, 0x7B, 0x7B, 0x11, 0x11, 0x44, 0x7B, 0x13,
+ 0x1D, 0x11, 0x46, 0x46, 0x1D, 0x15, 0x1E, 0x44, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x12, 0x12, 0x12, 0x10, 0x13, 0x13, 0x13, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x1E, 0x10, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x44, 0x44, 0x10,
+ 0x1E, 0x24, 0x24, 0x24, 0x46, 0x24, 0x24, 0x1E, 0x11, 0x12, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x12, 0x45, 0x7B, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x11, 0x1D, 0x11, 0x46, 0x46, 0x1E, 0x1D, 0x47, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x13, 0x11, 0x15, 0x15, 0x15, 0x47,
+ 0x11, 0x46, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x12,
+ 0x7B, 0x12, 0x12, 0x11, 0x1E, 0x24, 0x24, 0x24, 0x46, 0x24, 0x24, 0x1D,
+ 0x1E, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x11, 0x45,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x11, 0x1D, 0x11, 0x1D, 0x46, 0x46,
+ 0x1E, 0x47, 0x47, 0x12, 0x10, 0x12, 0x10, 0x10, 0x12, 0x13, 0x45, 0x13,
+ 0x11, 0x1D, 0x1D, 0x1D, 0x47, 0x11, 0x46, 0x46, 0x46, 0x46, 0x1E, 0x10,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x10, 0x11, 0x1E, 0x24, 0x24, 0x46,
+ 0x46, 0x46, 0x24, 0x24, 0x1E, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x10, 0x12, 0x7B, 0x44, 0x44, 0x44, 0x44, 0x10, 0x1E, 0x47,
+ 0x11, 0x1D, 0x46, 0x1D, 0x1E, 0x47, 0x13, 0x45, 0x10, 0x10, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x11, 0x15, 0x15, 0x47, 0x10, 0x46,
+ 0x24, 0x46, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x10, 0x11,
+ 0x1E, 0x24, 0x24, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1E, 0x11, 0x12, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x12, 0x44, 0x44, 0x45, 0x45,
+ 0x10, 0x1E, 0x47, 0x11, 0x1D, 0x46, 0x46, 0x1E, 0x15, 0x47, 0x44, 0x45,
+ 0x45, 0x45, 0x10, 0x10, 0x45, 0x11, 0x15, 0x15, 0x1D, 0x1D, 0x1D, 0x1D,
+ 0x15, 0x47, 0x10, 0x1E, 0x24, 0x46, 0x1E, 0x10, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x10, 0x11, 0x1E, 0x24, 0x24, 0x24, 0x46, 0x46, 0x46, 0x24,
+ 0x24, 0x1E, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45,
+ 0x45, 0x45, 0x10, 0x11, 0x47, 0x47, 0x11, 0x1D, 0x46, 0x46, 0x1D, 0x1E,
+ 0x15, 0x47, 0x44, 0x45, 0x12, 0x10, 0x10, 0x12, 0x10, 0x12, 0x12, 0x12,
+ 0x15, 0x15, 0x1D, 0x11, 0x10, 0x47, 0x10, 0x1E, 0x24, 0x46, 0x1E, 0x10,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x11, 0x1E, 0x24, 0x24, 0x24,
+ 0x24, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x11, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x1E, 0x47, 0x47, 0x47, 0x24, 0x46, 0x46,
+ 0x46, 0x1D, 0x1E, 0x1E, 0x1D, 0x47, 0x44, 0x45, 0x45, 0x12, 0x12, 0x45,
+ 0x12, 0x45, 0x11, 0x15, 0x10, 0x11, 0x11, 0x15, 0x47, 0x10, 0x10, 0x15,
+ 0x1D, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x10,
+ 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x46, 0x46, 0x24, 0x24, 0x1E, 0x13,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x24, 0x47, 0x24,
+ 0x46, 0x46, 0x46, 0x46, 0x1D, 0x1E, 0x15, 0x24, 0x1E, 0x47, 0x44, 0x44,
+ 0x12, 0x10, 0x10, 0x45, 0x10, 0x11, 0x11, 0x15, 0x15, 0x1D, 0x15, 0x15,
+ 0x47, 0x10, 0x10, 0x15, 0x1D, 0x24, 0x1E, 0x10, 0x7B, 0x12, 0x7B, 0x7B,
+ 0x44, 0x7B, 0x7B, 0x12, 0x7B, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x46,
+ 0x46, 0x24, 0x1E, 0x13, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x47, 0x47, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x1E, 0x15, 0x15, 0x1D,
+ 0x1E, 0x47, 0x45, 0x45, 0x44, 0x12, 0x12, 0x10, 0x12, 0x45, 0x12, 0x1D,
+ 0x1D, 0x24, 0x47, 0x47, 0x10, 0x10, 0x15, 0x15, 0x1D, 0x24, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x1E, 0x1D,
+ 0x24, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x11, 0x13, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1E, 0x46, 0x1D, 0x1D, 0x1E, 0x1E,
+ 0x15, 0x15, 0x1D, 0x1D, 0x1E, 0x47, 0x44, 0x45, 0x7B, 0x7B, 0x10, 0x45,
+ 0x10, 0x10, 0x11, 0x10, 0x11, 0x47, 0x12, 0x12, 0x10, 0x10, 0x15, 0x1E,
+ 0x1D, 0x1D, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x12, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1E,
+ 0x11, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x15, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x44, 0x45,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x12, 0x10, 0x24, 0x11, 0x47, 0x12, 0x12, 0x10,
+ 0x10, 0x7B, 0x15, 0x1D, 0x24, 0x1D, 0x1E, 0x10, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x10, 0x10, 0x12, 0x12, 0x7B, 0x7B, 0x11, 0x1E, 0x1D, 0x24, 0x24,
+ 0x46, 0x46, 0x46, 0x24, 0x1E, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x15, 0x1E, 0x15, 0x15, 0x15, 0x1D, 0x1D, 0x1D, 0x1E,
+ 0x15, 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x47,
+ 0x12, 0x10, 0x10, 0x10, 0x7B, 0x15, 0x1E, 0x1D, 0x24, 0x1D, 0x1E, 0x10,
+ 0x44, 0x7B, 0x12, 0x7B, 0x7B, 0x44, 0x44, 0x10, 0x10, 0x12, 0x12, 0x7B,
+ 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x46, 0x24, 0x1D, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x15, 0x15, 0x15, 0x1D,
+ 0x1D, 0x1D, 0x1E, 0x1E, 0x47, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x45, 0x45, 0x12, 0x10, 0x10, 0x10, 0x11, 0x15, 0x1E, 0x1D, 0x24,
+ 0x1D, 0x24, 0x1E, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x10, 0x10, 0x12, 0x12, 0x7B, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x1D, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x15, 0x1E, 0x15, 0x1D, 0x1E, 0x1E, 0x15, 0x15, 0x13, 0x45, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x10, 0x11, 0x11,
+ 0x1E, 0x1D, 0x1D, 0x1E, 0x1D, 0x1E, 0x1E, 0x11, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x10, 0x12, 0x12, 0x7B, 0x1D, 0x24,
+ 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x13, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x10, 0x11, 0x11, 0x15, 0x1E, 0x1E, 0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12, 0x11, 0x10,
+ 0x12, 0x10, 0x7B, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13,
+ 0x15, 0x15, 0x13, 0x13, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x15, 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x1E,
+ 0x15, 0x1E, 0x1E, 0x1E, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x44, 0x12, 0x11, 0x11, 0x12, 0x7B, 0x7B, 0x1D, 0x1D, 0x24, 0x24,
+ 0x24, 0x1D, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x13, 0x44, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12, 0x10, 0x11, 0x15, 0x1E,
+ 0x15, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x1D, 0x1E, 0x11, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x11, 0x1E, 0x10, 0x12, 0x7B,
+ 0x1E, 0x1E, 0x1D, 0x24, 0x1D, 0x1D, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x45, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x45, 0x12,
+ 0x12, 0x10, 0x11, 0x15, 0x1E, 0x15, 0x15, 0x1E, 0x15, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x12,
+ 0x11, 0x1E, 0x10, 0x10, 0x00, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x12, 0x45, 0x12, 0x45, 0x7B, 0x10, 0x10, 0x11, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x10, 0x11, 0x11, 0x12, 0x00, 0x00, 0x1E, 0x1E,
+ 0x1D, 0x1E, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x45, 0x12, 0x45, 0x12, 0x7B, 0x12, 0x10, 0x10,
+ 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x1E, 0x11, 0x44, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x7B, 0x45, 0x44, 0x44, 0x11, 0x1E, 0x11,
+ 0x12, 0x00, 0x11, 0x1E, 0x1E, 0x1E, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45,
+ 0x12, 0x45, 0x12, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
+ 0x11, 0x11, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x45, 0x7B, 0x45, 0x7B, 0x45,
+ 0x44, 0x10, 0x11, 0x1E, 0x12, 0x00, 0x00, 0x10, 0x10, 0x11, 0x12, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45,
+ 0x45, 0x45, 0x45, 0x45, 0x00, 0x12, 0x45, 0x12, 0x12, 0x10, 0x12, 0x10,
+ 0x10, 0x10, 0x11, 0x11, 0x15, 0x11, 0x11, 0x10, 0x44, 0x7B, 0x44, 0x7B,
+ 0x45, 0x7B, 0x45, 0x7B, 0x45, 0x44, 0x10, 0x1E, 0x10, 0x12, 0x00, 0x00,
+ 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x45, 0x45, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x11, 0x11, 0x11,
+ 0x10, 0x44, 0x7B, 0x44, 0x7B, 0x45, 0x7B, 0x44, 0x45, 0x44, 0x44, 0x11,
+ 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x12,
+ 0x10, 0x10, 0x11, 0x11, 0x11, 0x10, 0x10, 0x7B, 0x45, 0x44, 0x45, 0x7B,
+ 0x45, 0x45, 0x44, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45,
+ 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x13, 0x12, 0x00, 0x10, 0x10, 0x11, 0x15, 0x15, 0x10,
+ 0x44, 0x45, 0x44, 0x45, 0x45, 0x44, 0x44, 0x10, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x12, 0x12,
+ 0x45, 0x45, 0x12, 0x12, 0x12, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x45,
+ 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x00, 0x00, 0x10,
+ 0x10, 0x15, 0x1E, 0x15, 0x10, 0x44, 0x45, 0x7B, 0x44, 0x44, 0x10, 0x1D,
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x45, 0x12, 0x45, 0x45,
+ 0x45, 0x12, 0x12, 0x45, 0x45, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x00, 0x00, 0x10, 0x10, 0x1E, 0x1D, 0x1D, 0x11, 0x10, 0x44,
+ 0x12, 0x11, 0x11, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x45, 0x45, 0x12, 0x12,
+ 0x12, 0x45, 0x12, 0x12, 0x10, 0x12, 0x12, 0x12, 0x45, 0x45, 0x45, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x00, 0x00, 0x10, 0x10, 0x47,
+ 0x1D, 0x1D, 0x11, 0x13, 0x11, 0x11, 0x1E, 0x1D, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x45, 0x45, 0x45, 0x45, 0x10, 0x12, 0x45, 0x45, 0x45, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x11, 0x47, 0x47, 0x47, 0x47, 0x47, 0x1D, 0x11,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x45, 0x45, 0x45, 0x45, 0x10,
+ 0x12, 0x45, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x13, 0x13,
+ 0x11, 0x13, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x00, 0x12, 0x45, 0x45, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask9LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x44, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x06,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x1F, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x7F, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF1, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE3, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xCF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFE,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x3F, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF9, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
+ 0x00, 0x00, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0xCE, 0x00, 0x00, 0xFF, 0xE0,
+ 0x1F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0xFF, 0xFC, 0x03, 0xBF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF,
+ 0x81, 0x9F, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xE0, 0xCF, 0xFF, 0xC0,
+ 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x67, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xFF,
+ 0xF0, 0x21, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x20, 0xFF, 0x00,
+ 0x00, 0x00, 0x01, 0x7C, 0x00, 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,
+};
+
+const uint8_t sprite9RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x00, 0x00, 0x12, 0x44, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x11, 0x10, 0x12, 0x7B, 0x10, 0x7B, 0x7B, 0x12, 0x44, 0x7B, 0x7B, 0x13,
+ 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x1E, 0x1E, 0x11, 0x10, 0x12, 0x7B, 0x12, 0x7B, 0x7B,
+ 0x12, 0x44, 0x7B, 0x7B, 0x13, 0x7B, 0x12, 0x44, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x11, 0x10,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12, 0x7B, 0x7B, 0x13, 0x7B, 0x12,
+ 0x10, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x15, 0x15, 0x1E, 0x13, 0x12, 0x12,
+ 0x15, 0x1E, 0x1E, 0x11, 0x10, 0x12, 0x7B, 0x7B, 0x12, 0x7B, 0x12, 0x7B,
+ 0x1E, 0x13, 0x13, 0x7B, 0x12, 0x13, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x15, 0x44, 0x44,
+ 0x15, 0x1E, 0x13, 0x12, 0x12, 0x15, 0x1E, 0x1E, 0x11, 0x10, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x10, 0x7B, 0x1E, 0x11, 0x15, 0x1E, 0x11, 0x10, 0x12,
+ 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10,
+ 0x15, 0x12, 0x7B, 0x45, 0x44, 0x15, 0x1E, 0x13, 0x13, 0x13, 0x15, 0x11,
+ 0x11, 0x10, 0x13, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x11, 0x11,
+ 0x11, 0x1E, 0x11, 0x12, 0x12, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x11, 0x1D, 0x44, 0x12, 0x12, 0x7B, 0x45, 0x44, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x10, 0x12, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x44, 0x11, 0x11, 0x11, 0x11, 0x13, 0x10, 0x12, 0x12, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1E, 0x1D, 0x1E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x10, 0x11, 0x24, 0x15, 0x44, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x44, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x10,
+ 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x44, 0x11, 0x15, 0x11, 0x10, 0x12,
+ 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1E, 0x1D, 0x24,
+ 0x1D, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x24, 0x11,
+ 0x44, 0x44, 0x12, 0x12, 0x7B, 0x45, 0x45, 0x44, 0x10, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x11, 0x10, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44,
+ 0x15, 0x15, 0x1E, 0x11, 0x12, 0x45, 0x7B, 0x7B, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x1D, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x11, 0x24, 0x46, 0x15, 0x44, 0x44, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x15, 0x11, 0x10, 0x10, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x15, 0x15, 0x15, 0x15, 0x10, 0x12, 0x45, 0x7B,
+ 0x7B, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x46, 0x15, 0x45, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x1E, 0x15,
+ 0x1E, 0x11, 0x10, 0x12, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x1E, 0x15, 0x1E,
+ 0x11, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x24, 0x24, 0x46,
+ 0x46, 0x24, 0x1D, 0x1E, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1E, 0x46, 0x11,
+ 0x45, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x15, 0x1E,
+ 0x1D, 0x15, 0x15, 0x1E, 0x15, 0x1E, 0x10, 0x10, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x10, 0x15, 0x15, 0x1E, 0x15, 0x10, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x24, 0x1E, 0x15, 0x00, 0x00, 0x12,
+ 0x13, 0x1E, 0x1D, 0x11, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x15, 0x1E, 0x15, 0x11, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x15, 0x1E, 0x1E, 0x1D, 0x10, 0x12, 0x45,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x24, 0x1D,
+ 0x1E, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x11, 0x12, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E,
+ 0x1E, 0x1D, 0x11, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1E,
+ 0x1D, 0x11, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1D, 0x46,
+ 0x46, 0x46, 0x24, 0x24, 0x1E, 0x1E, 0x00, 0x00, 0x12, 0x11, 0x1E, 0x11,
+ 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1D,
+ 0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1D, 0x15, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x15, 0x1E, 0x1D, 0x24, 0x15, 0x10, 0x12, 0x45, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x11, 0x1D, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x1E, 0x00, 0x00,
+ 0x12, 0x13, 0x1E, 0x11, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x1E, 0x24, 0x1D, 0x24, 0x1E, 0x1D, 0x1E, 0x24, 0x1D, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x1D, 0x1D, 0x24, 0x1E, 0x11, 0x12,
+ 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x24,
+ 0x24, 0x1D, 0x1E, 0x00, 0x00, 0x12, 0x15, 0x11, 0x10, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x44, 0x1E, 0x1D, 0x24, 0x1D, 0x24, 0x1D, 0x1D,
+ 0x1D, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x24, 0x24,
+ 0x24, 0x24, 0x1E, 0x10, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D,
+ 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x1E, 0x00, 0x00, 0x00, 0x12, 0x11,
+ 0x10, 0x44, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x24, 0x1D,
+ 0x24, 0x1D, 0x24, 0x1D, 0x1D, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x44, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x11, 0x12, 0x12, 0x45, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x13, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x24, 0x24, 0x1D, 0x1E,
+ 0x00, 0x00, 0x12, 0x11, 0x10, 0x44, 0x7B, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x24, 0x46, 0x46, 0x24, 0x1E,
+ 0x10, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x15,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x46, 0x46, 0x46,
+ 0x46, 0x24, 0x1D, 0x1E, 0x00, 0x00, 0x00, 0x10, 0x10, 0x44, 0x44, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x24, 0x1E, 0x11, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x24,
+ 0x46, 0x46, 0x24, 0x24, 0x11, 0x10, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x11, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
+ 0x1E, 0x46, 0x46, 0x46, 0x46, 0x24, 0x24, 0x1E, 0x15, 0x00, 0x00, 0x12,
+ 0x13, 0x12, 0x7B, 0x44, 0x7B, 0x7B, 0x12, 0x7B, 0x44, 0x1E, 0x24, 0x24,
+ 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x11, 0x12, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x44, 0x1E, 0x24, 0x46, 0x46, 0x24, 0x1E, 0x11, 0x12, 0x44,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x11, 0x1D, 0x15, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x11, 0x46, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D,
+ 0x1E, 0x10, 0x00, 0x00, 0x12, 0x12, 0x44, 0x7B, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x15,
+ 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x24, 0x46, 0x46, 0x24,
+ 0x15, 0x13, 0x12, 0x12, 0x45, 0x44, 0x12, 0x12, 0x12, 0x13, 0x11, 0x1D,
+ 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x1D, 0x46, 0x46,
+ 0x46, 0x46, 0x24, 0x24, 0x1E, 0x13, 0x00, 0x00, 0x00, 0x10, 0x12, 0x44,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x24, 0x46, 0x24, 0x24, 0x24,
+ 0x46, 0x46, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10,
+ 0x24, 0x24, 0x46, 0x1E, 0x46, 0x46, 0x11, 0x12, 0x12, 0x10, 0x44, 0x44,
+ 0x44, 0x44, 0x13, 0x11, 0x1D, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x11, 0x24, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x15, 0x12, 0x00,
+ 0x00, 0x00, 0x10, 0x12, 0x44, 0x44, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x46,
+ 0x24, 0x46, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x47, 0x24, 0x24, 0x1D, 0x46, 0x46, 0x1D, 0x12,
+ 0x10, 0x44, 0x44, 0x10, 0x10, 0x7B, 0x44, 0x13, 0x11, 0x1D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x24,
+ 0x1D, 0x1E, 0x13, 0x00, 0x00, 0x00, 0x00, 0x10, 0x12, 0x7B, 0x12, 0x7B,
+ 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x24, 0x46, 0x46, 0x46, 0x24, 0x1E,
+ 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x24, 0x15, 0x46,
+ 0x46, 0x46, 0x1D, 0x1D, 0x44, 0x44, 0x11, 0x7B, 0x7B, 0x11, 0x7B, 0x44,
+ 0x10, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1D, 0x24,
+ 0x24, 0x46, 0x46, 0x24, 0x24, 0x1D, 0x15, 0x12, 0x00, 0x00, 0x00, 0x12,
+ 0x44, 0x12, 0x7B, 0x12, 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x24, 0x24, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x11, 0x47, 0x15, 0x46, 0x46, 0x46, 0x1D, 0x1D, 0x12, 0x44, 0x11, 0x7B,
+ 0x7B, 0x1E, 0x7B, 0x44, 0x45, 0x11, 0x11, 0x1E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x1D, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x24, 0x1D, 0x11, 0x10,
+ 0x12, 0x12, 0x44, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x11, 0x47, 0x15, 0x15, 0x13, 0x10, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x13, 0x1E, 0x15, 0x46, 0x46, 0x46, 0x11, 0x1D,
+ 0x12, 0x12, 0x11, 0x7B, 0x7B, 0x11, 0x7B, 0x45, 0x12, 0x7B, 0x7B, 0x1D,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1D, 0x1D, 0x24, 0x46, 0x46, 0x24,
+ 0x24, 0x24, 0x1E, 0x10, 0x44, 0x44, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x12,
+ 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x10, 0x11, 0x47, 0x1D, 0x1D, 0x1D,
+ 0x15, 0x11, 0x13, 0x10, 0x12, 0x7B, 0x7B, 0x44, 0x44, 0x11, 0x15, 0x46,
+ 0x46, 0x46, 0x11, 0x1D, 0x13, 0x7B, 0x44, 0x11, 0x11, 0x7B, 0x7B, 0x10,
+ 0x45, 0x45, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1D, 0x1D,
+ 0x24, 0x46, 0x46, 0x24, 0x24, 0x24, 0x1E, 0x11, 0x12, 0x12, 0x44, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x10, 0x47,
+ 0x15, 0x15, 0x11, 0x10, 0x12, 0x12, 0x45, 0x13, 0x10, 0x12, 0x7B, 0x7B,
+ 0x44, 0x13, 0x47, 0x24, 0x46, 0x46, 0x11, 0x1D, 0x11, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x7B, 0x45, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x13, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x46, 0x24, 0x24, 0x1E, 0x11,
+ 0x10, 0x12, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x10, 0x1E, 0x46, 0x46,
+ 0x46, 0x11, 0x10, 0x10, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x11, 0x12, 0x12,
+ 0x12, 0x10, 0x10, 0x12, 0x12, 0x12, 0x47, 0x1E, 0x46, 0x46, 0x1D, 0x11,
+ 0x1D, 0x11, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x13, 0x1D, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x46,
+ 0x24, 0x24, 0x1E, 0x11, 0x10, 0x12, 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x7B,
+ 0x10, 0x1E, 0x46, 0x24, 0x46, 0x11, 0x10, 0x47, 0x11, 0x1D, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x11, 0x45, 0x12, 0x12, 0x10, 0x10, 0x12, 0x47, 0x1E,
+ 0x46, 0x46, 0x1D, 0x11, 0x47, 0x1E, 0x10, 0x44, 0x44, 0x44, 0x44, 0x7B,
+ 0x12, 0x12, 0x12, 0x15, 0x00, 0x00, 0x00, 0x12, 0x13, 0x1E, 0x24, 0x24,
+ 0x46, 0x46, 0x46, 0x24, 0x24, 0x24, 0x1E, 0x11, 0x10, 0x12, 0x44, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x10, 0x1E, 0x46, 0x24, 0x1E, 0x11, 0x10, 0x47,
+ 0x15, 0x11, 0x11, 0x10, 0x12, 0x12, 0x12, 0x10, 0x10, 0x10, 0x12, 0x45,
+ 0x45, 0x45, 0x47, 0x15, 0x1E, 0x46, 0x46, 0x1D, 0x11, 0x47, 0x1E, 0x10,
+ 0x45, 0x45, 0x44, 0x44, 0x12, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x11, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x11,
+ 0x10, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x46, 0x24,
+ 0x1E, 0x11, 0x10, 0x10, 0x47, 0x15, 0x1D, 0x15, 0x15, 0x11, 0x45, 0x12,
+ 0x12, 0x10, 0x10, 0x12, 0x45, 0x45, 0x47, 0x15, 0x1E, 0x46, 0x46, 0x46,
+ 0x1D, 0x11, 0x47, 0x47, 0x11, 0x10, 0x45, 0x45, 0x45, 0x45, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x13, 0x1E, 0x24, 0x24, 0x46, 0x46, 0x24, 0x24, 0x24,
+ 0x24, 0x1D, 0x11, 0x10, 0x12, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x24, 0x24, 0x1E, 0x11, 0x10, 0x12, 0x10, 0x24, 0x15, 0x1D,
+ 0x1D, 0x11, 0x11, 0x10, 0x45, 0x12, 0x12, 0x45, 0x45, 0x45, 0x47, 0x1D,
+ 0x1E, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x47, 0x1E, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x24, 0x46, 0x46,
+ 0x46, 0x24, 0x24, 0x24, 0x1D, 0x11, 0x10, 0x12, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x7B, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x24, 0x24, 0x1E, 0x15, 0x10, 0x10,
+ 0x12, 0x47, 0x11, 0x10, 0x12, 0x45, 0x12, 0x12, 0x10, 0x10, 0x10, 0x12,
+ 0x45, 0x45, 0x47, 0x1E, 0x24, 0x1E, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x47, 0x47, 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x1E,
+ 0x24, 0x24, 0x46, 0x46, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x10, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x24,
+ 0x1E, 0x1E, 0x11, 0x10, 0x12, 0x10, 0x47, 0x24, 0x10, 0x10, 0x10, 0x45,
+ 0x12, 0x12, 0x7B, 0x45, 0x45, 0x45, 0x47, 0x1E, 0x1D, 0x15, 0x1E, 0x1E,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x1E, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x24, 0x24, 0x24, 0x1E,
+ 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x1D, 0x24, 0x1D, 0x1E, 0x11, 0x10, 0x10, 0x12, 0x10, 0x47,
+ 0x24, 0x10, 0x12, 0x10, 0x10, 0x7B, 0x7B, 0x7B, 0x45, 0x44, 0x47, 0x1E,
+ 0x1D, 0x1D, 0x15, 0x1E, 0x1E, 0x1E, 0x46, 0x46, 0x46, 0x1E, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x1D, 0x24, 0x24, 0x46, 0x46, 0x24,
+ 0x24, 0x24, 0x1D, 0x11, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x10, 0x10, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x1E, 0x1D, 0x24, 0x24, 0x1D, 0x15, 0x11,
+ 0x10, 0x10, 0x12, 0x10, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x45, 0x44, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x15, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1E, 0x1D, 0x24,
+ 0x46, 0x46, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x7B, 0x7B, 0x7B, 0x10, 0x11,
+ 0x10, 0x44, 0x44, 0x7B, 0x7B, 0x12, 0x7B, 0x44, 0x10, 0x1E, 0x1D, 0x24,
+ 0x1D, 0x1D, 0x15, 0x11, 0x11, 0x10, 0x10, 0x12, 0x45, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x15, 0x1E, 0x1D, 0x1D, 0x1D,
+ 0x46, 0x15, 0x1D, 0x1E, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x1D, 0x1D, 0x24, 0x46, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x11, 0x7B,
+ 0x7B, 0x11, 0x11, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x11, 0x1E, 0x24, 0x1D, 0x24, 0x1D, 0x1E, 0x15, 0x11, 0x11, 0x10, 0x10,
+ 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x47,
+ 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x15, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x1D, 0x1E, 0x7B, 0x7B, 0x11, 0x1D, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x1E, 0x1E, 0x1D, 0x1E, 0x1D, 0x1D, 0x1E,
+ 0x15, 0x11, 0x10, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x45, 0x13, 0x15, 0x15, 0x1E, 0x1E, 0x1D, 0x15, 0x1E, 0x15, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x24, 0x24,
+ 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x11, 0x7B, 0x11, 0x1D, 0x12, 0x12, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1D, 0x1E, 0x1E, 0x1E, 0x1D, 0x15, 0x11, 0x10, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x13, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x1D, 0x1E, 0x7B, 0x10, 0x1E,
+ 0x11, 0x12, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10,
+ 0x1E, 0x1E, 0x1E, 0x15, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x15, 0x15, 0x10,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44,
+ 0x13, 0x13, 0x15, 0x15, 0x13, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x1E,
+ 0x13, 0x7B, 0x1E, 0x11, 0x10, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x11, 0x1E, 0x1D, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x15,
+ 0x1E, 0x15, 0x11, 0x10, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x1D, 0x24,
+ 0x1D, 0x1E, 0x1E, 0x11, 0x7B, 0x11, 0x1D, 0x10, 0x12, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1E, 0x1E, 0x15,
+ 0x1E, 0x15, 0x15, 0x1E, 0x15, 0x11, 0x11, 0x12, 0x12, 0x45, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x00, 0x12, 0x11, 0x1E, 0x11, 0x10,
+ 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E,
+ 0x1E, 0x15, 0x1E, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x10, 0x7B,
+ 0x45, 0x12, 0x45, 0x12, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x11, 0x1E, 0x1D, 0x1E, 0x1E, 0x00, 0x00, 0x12,
+ 0x1E, 0x1E, 0x11, 0x44, 0x44, 0x45, 0x7B, 0x45, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x11, 0x1E, 0x1E, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x10, 0x12, 0x7B, 0x12, 0x45, 0x12, 0x45, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x1E,
+ 0x00, 0x00, 0x12, 0x10, 0x1E, 0x1E, 0x10, 0x44, 0x44, 0x7B, 0x45, 0x7B,
+ 0x45, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x11, 0x1E, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x10, 0x10, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12,
+ 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x1D, 0x10, 0x44,
+ 0x7B, 0x45, 0x7B, 0x45, 0x7B, 0x45, 0x7B, 0x44, 0x44, 0x11, 0x1E, 0x15,
+ 0x15, 0x11, 0x11, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x45, 0x12, 0x00,
+ 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x12, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11,
+ 0x24, 0x1D, 0x12, 0x44, 0x45, 0x7B, 0x45, 0x7B, 0x45, 0x7B, 0x44, 0x44,
+ 0x11, 0x1E, 0x15, 0x11, 0x11, 0x12, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x45, 0x12, 0x45, 0x45,
+ 0x45, 0x12, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x11, 0x24, 0x1D, 0x12, 0x44, 0x7B, 0x45, 0x7B, 0x45,
+ 0x7B, 0x44, 0x44, 0x11, 0x1E, 0x15, 0x11, 0x10, 0x12, 0x13, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x12,
+ 0x12, 0x45, 0x45, 0x45, 0x12, 0x45, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x24, 0x1D, 0x12, 0x44,
+ 0x45, 0x7B, 0x45, 0x44, 0x44, 0x44, 0x15, 0x1E, 0x15, 0x11, 0x10, 0x12,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45,
+ 0x45, 0x45, 0x12, 0x45, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11,
+ 0x1D, 0x1D, 0x10, 0x44, 0x7B, 0x45, 0x44, 0x44, 0x7B, 0x1E, 0x1E, 0x15,
+ 0x10, 0x10, 0x12, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x45, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45,
+ 0x12, 0x12, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x11, 0x1E, 0x1E, 0x11, 0x44, 0x44, 0x44, 0x44, 0x10,
+ 0x1D, 0x1E, 0x11, 0x10, 0x00, 0x12, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x45, 0x12,
+ 0x45, 0x45, 0x45, 0x12, 0x45, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x1E, 0x1D, 0x1E, 0x11,
+ 0x13, 0x13, 0x11, 0x1D, 0x47, 0x11, 0x10, 0x00, 0x00, 0x13, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x45, 0x12, 0x45,
+ 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x11, 0x1D, 0x1D, 0x47, 0x47, 0x47, 0x47, 0x11, 0x11, 0x10, 0x00, 0x00,
+ 0x12, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45,
+ 0x45, 0x12, 0x45, 0x12, 0x10, 0x45, 0x45, 0x45, 0x12, 0x10, 0x45, 0x45,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x45, 0x45, 0x45, 0x12, 0x10,
+ 0x45, 0x45, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x10, 0x45, 0x45, 0x45,
+ 0x12, 0x10, 0x45, 0x45, 0x45, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x45, 0x45, 0x45, 0x10, 0x45, 0x45, 0x45, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask9RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x22, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0xE0, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xF8, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFE, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0xFF, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0x8F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xE7, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xF1, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xFC, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x0F, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xF9, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0xE3, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xF0,
+ 0x07, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0x00, 0x00,
+ 0x03, 0xFF, 0xFF, 0x80, 0x1F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00,
+ 0x7F, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF6, 0x01, 0xFF, 0xFE, 0x00, 0x00,
+ 0x03, 0xFF, 0xE4, 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xCC, 0x07,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0xFE, 0x08, 0x0F, 0xFF, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite9RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x00, 0x10, 0x00, 0x00, 0x44, 0x13, 0x00, 0x00, 0x13, 0x00,
+ 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1E, 0x1E, 0x11, 0x10, 0x12, 0x7B, 0x12, 0x12, 0x7B, 0x7B,
+ 0x13, 0x13, 0x7B, 0x7B, 0x13, 0x7B, 0x44, 0x44, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x13, 0x13, 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x11, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x7B, 0x7B, 0x13, 0x7B, 0x7B, 0x15, 0x7B, 0x10,
+ 0x44, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x1E, 0x13, 0x12, 0x12, 0x15,
+ 0x1E, 0x1E, 0x11, 0x10, 0x10, 0x12, 0x7B, 0x12, 0x10, 0x7B, 0x7B, 0x1E,
+ 0x13, 0x13, 0x1E, 0x7B, 0x13, 0x44, 0x44, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x44, 0x44, 0x15,
+ 0x1E, 0x13, 0x12, 0x12, 0x12, 0x15, 0x1E, 0x1E, 0x11, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x7B, 0x1E, 0x11, 0x15, 0x1E, 0x11, 0x10, 0x12, 0x44,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x15,
+ 0x12, 0x7B, 0x45, 0x45, 0x44, 0x15, 0x1E, 0x13, 0x13, 0x13, 0x15, 0x11,
+ 0x11, 0x10, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x11, 0x11, 0x11,
+ 0x1E, 0x11, 0x12, 0x12, 0x44, 0x10, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x12, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x11, 0x1D, 0x44, 0x12, 0x12, 0x7B, 0x45, 0x44, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x10, 0x12, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x44, 0x11, 0x11, 0x11, 0x13, 0x10, 0x12, 0x12, 0x44, 0x10, 0x44,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x10, 0x11, 0x24, 0x15, 0x44, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x44, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x10,
+ 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x44, 0x11, 0x15, 0x11, 0x10, 0x12,
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x11, 0x1E,
+ 0x1E, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1D, 0x24, 0x11,
+ 0x44, 0x44, 0x12, 0x12, 0x7B, 0x45, 0x45, 0x44, 0x10, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x11, 0x10, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44,
+ 0x15, 0x15, 0x1E, 0x11, 0x12, 0x45, 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x11, 0x1E, 0x1D, 0x1D, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x24, 0x46, 0x15, 0x44, 0x44, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x15, 0x11, 0x10, 0x10, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x15, 0x15, 0x15, 0x15, 0x10, 0x12, 0x45, 0x7B,
+ 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x24, 0x24, 0x1D, 0x1E, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x1D, 0x46, 0x15, 0x45, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x1E, 0x15,
+ 0x1E, 0x11, 0x10, 0x12, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x1E, 0x15, 0x1E,
+ 0x11, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x24, 0x24,
+ 0x24, 0x24, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1E, 0x46, 0x11,
+ 0x45, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x15, 0x1E,
+ 0x1D, 0x15, 0x15, 0x1E, 0x15, 0x1E, 0x10, 0x10, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x10, 0x15, 0x15, 0x1E, 0x15, 0x10, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x11, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x00, 0x00, 0x00, 0x12,
+ 0x13, 0x1E, 0x1D, 0x11, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x15, 0x1E, 0x15, 0x11, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x15, 0x1E, 0x1E, 0x1D, 0x10, 0x12, 0x45,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x24,
+ 0x1E, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x11, 0x12, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E, 0x1D, 0x1E,
+ 0x1E, 0x1D, 0x11, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1E,
+ 0x1D, 0x11, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1D, 0x24,
+ 0x46, 0x46, 0x24, 0x24, 0x1D, 0x00, 0x00, 0x00, 0x12, 0x10, 0x1E, 0x11,
+ 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1D,
+ 0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1D, 0x15, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x15, 0x1E, 0x1D, 0x24, 0x15, 0x10, 0x12, 0x45, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x1E, 0x1D, 0x46, 0x46, 0x46, 0x24, 0x24, 0x1D, 0x00, 0x00,
+ 0x12, 0x12, 0x1E, 0x11, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x1E, 0x24, 0x1D, 0x24, 0x1E, 0x1D, 0x1E, 0x24, 0x1D, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x1D, 0x1D, 0x24, 0x1E, 0x11, 0x12,
+ 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x11, 0x1D, 0x46, 0x46, 0x46, 0x46,
+ 0x24, 0x24, 0x00, 0x00, 0x00, 0x12, 0x10, 0x11, 0x10, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x44, 0x1E, 0x1D, 0x24, 0x1D, 0x24, 0x1D, 0x1D,
+ 0x1D, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x24, 0x24,
+ 0x24, 0x24, 0x1E, 0x10, 0x12, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x1E,
+ 0x1D, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x00, 0x00, 0x00, 0x10, 0x11,
+ 0x10, 0x44, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x24, 0x1D,
+ 0x24, 0x1D, 0x24, 0x1D, 0x1D, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x44, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x11, 0x12, 0x12, 0x45, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x12, 0x13, 0x11, 0x1D, 0x46, 0x46, 0x46, 0x46, 0x24, 0x24, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x10, 0x44, 0x7B, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x1E, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x10,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x24, 0x46, 0x46, 0x24, 0x1E,
+ 0x10, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x15,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x11, 0x1E, 0x1D, 0x46, 0x46,
+ 0x46, 0x46, 0x24, 0x1D, 0x00, 0x00, 0x12, 0x12, 0x10, 0x44, 0x44, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x24, 0x1E, 0x11, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x24,
+ 0x46, 0x46, 0x24, 0x24, 0x11, 0x10, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x11, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x13,
+ 0x11, 0x1D, 0x46, 0x46, 0x46, 0x46, 0x24, 0x24, 0x00, 0x00, 0x00, 0x13,
+ 0x10, 0x12, 0x7B, 0x44, 0x7B, 0x7B, 0x12, 0x7B, 0x44, 0x1E, 0x24, 0x24,
+ 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x11, 0x12, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x44, 0x1E, 0x24, 0x46, 0x46, 0x24, 0x1E, 0x11, 0x12, 0x44,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x11, 0x1D, 0x15, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x13, 0x13, 0x11, 0x1D, 0x46, 0x46, 0x46, 0x46, 0x24,
+ 0x1D, 0x00, 0x00, 0x12, 0x10, 0x12, 0x44, 0x7B, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x44, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1E, 0x15,
+ 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x24, 0x46, 0x46, 0x1D,
+ 0x15, 0x13, 0x12, 0x12, 0x45, 0x44, 0x12, 0x12, 0x12, 0x13, 0x11, 0x1D,
+ 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x13, 0x11, 0x1D, 0x1D,
+ 0x46, 0x46, 0x46, 0x24, 0x24, 0x1E, 0x00, 0x00, 0x12, 0x10, 0x12, 0x44,
+ 0x7B, 0x12, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x24, 0x46, 0x24, 0x24, 0x24,
+ 0x46, 0x46, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10,
+ 0x24, 0x24, 0x24, 0x1E, 0x46, 0x46, 0x11, 0x12, 0x12, 0x10, 0x44, 0x44,
+ 0x44, 0x44, 0x13, 0x11, 0x1D, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x13, 0x13, 0x11, 0x1D, 0x46, 0x46, 0x46, 0x46, 0x24, 0x1D, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x12, 0x44, 0x44, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x46,
+ 0x24, 0x46, 0x24, 0x24, 0x46, 0x46, 0x24, 0x1E, 0x10, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x47, 0x24, 0x1D, 0x15, 0x46, 0x46, 0x1D, 0x12,
+ 0x10, 0x44, 0x44, 0x10, 0x10, 0x7B, 0x44, 0x13, 0x11, 0x1D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x12, 0x11, 0x13, 0x1D, 0x24, 0x46, 0x46, 0x24,
+ 0x24, 0x1D, 0x1E, 0x13, 0x00, 0x00, 0x00, 0x10, 0x12, 0x7B, 0x12, 0x7B,
+ 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x24, 0x46, 0x46, 0x46, 0x24, 0x1E,
+ 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x24, 0x15, 0x1D,
+ 0x46, 0x46, 0x1D, 0x1D, 0x44, 0x44, 0x11, 0x7B, 0x7B, 0x11, 0x7B, 0x44,
+ 0x10, 0x15, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x12, 0x1D,
+ 0x24, 0x24, 0x46, 0x46, 0x24, 0x24, 0x1D, 0x15, 0x12, 0x00, 0x00, 0x12,
+ 0x44, 0x12, 0x7B, 0x12, 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46,
+ 0x46, 0x46, 0x24, 0x24, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x11, 0x47, 0x15, 0x24, 0x46, 0x46, 0x24, 0x1D, 0x12, 0x44, 0x11, 0x7B,
+ 0x7B, 0x1E, 0x7B, 0x44, 0x45, 0x11, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x12, 0x12, 0x1E, 0x1D, 0x24, 0x24, 0x46, 0x24, 0x24, 0x1D, 0x11,
+ 0x10, 0x12, 0x44, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x46, 0x46,
+ 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x10, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x13, 0x1E, 0x15, 0x24, 0x46, 0x46, 0x11, 0x1D,
+ 0x12, 0x12, 0x11, 0x7B, 0x7B, 0x11, 0x7B, 0x45, 0x12, 0x10, 0x11, 0x1D,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x11, 0x1E, 0x24, 0x24, 0x46,
+ 0x24, 0x24, 0x24, 0x1E, 0x10, 0x44, 0x44, 0x12, 0x7B, 0x12, 0x7B, 0x12,
+ 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x13, 0x13, 0x13,
+ 0x10, 0x12, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x1E, 0x15, 0x1D,
+ 0x46, 0x46, 0x11, 0x1D, 0x13, 0x7B, 0x44, 0x11, 0x11, 0x7B, 0x7B, 0x10,
+ 0x45, 0x45, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x1E,
+ 0x1D, 0x24, 0x24, 0x46, 0x24, 0x24, 0x24, 0x1E, 0x11, 0x12, 0x12, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x46, 0x46, 0x46, 0x46, 0x46, 0x11,
+ 0x47, 0x15, 0x15, 0x15, 0x11, 0x13, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x47, 0x1D, 0x1E, 0x46, 0x46, 0x11, 0x1D, 0x11, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x7B, 0x45, 0x12, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x13, 0x1E, 0x24, 0x24, 0x46, 0x46, 0x46, 0x24, 0x24, 0x1E,
+ 0x11, 0x10, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x10, 0x1E, 0x46, 0x46,
+ 0x46, 0x46, 0x11, 0x47, 0x1D, 0x1D, 0x1D, 0x11, 0x13, 0x45, 0x13, 0x12,
+ 0x10, 0x10, 0x12, 0x10, 0x12, 0x47, 0x47, 0x1E, 0x46, 0x46, 0x1D, 0x11,
+ 0x1D, 0x11, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x11, 0x1D, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x11, 0x1E, 0x24, 0x46, 0x46, 0x46,
+ 0x46, 0x24, 0x24, 0x1E, 0x11, 0x10, 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x7B,
+ 0x10, 0x1E, 0x46, 0x24, 0x46, 0x10, 0x47, 0x15, 0x15, 0x11, 0x10, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x10, 0x45, 0x13, 0x47, 0x1E,
+ 0x1D, 0x46, 0x1D, 0x11, 0x47, 0x1E, 0x10, 0x44, 0x44, 0x44, 0x44, 0x7B,
+ 0x12, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x1E, 0x24,
+ 0x24, 0x46, 0x46, 0x46, 0x24, 0x24, 0x24, 0x1E, 0x11, 0x10, 0x7B, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x10, 0x1E, 0x46, 0x24, 0x1E, 0x10, 0x47, 0x15,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x15, 0x15, 0x11, 0x45, 0x10, 0x10, 0x45, 0x45,
+ 0x45, 0x44, 0x47, 0x15, 0x1E, 0x46, 0x46, 0x1D, 0x11, 0x47, 0x1E, 0x10,
+ 0x45, 0x45, 0x44, 0x44, 0x12, 0x45, 0x45, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x11, 0x1D, 0x24, 0x46, 0x46, 0x46, 0x24, 0x24, 0x24, 0x24, 0x1E,
+ 0x11, 0x10, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x46, 0x24,
+ 0x1E, 0x10, 0x47, 0x10, 0x11, 0x1D, 0x15, 0x15, 0x12, 0x12, 0x12, 0x10,
+ 0x12, 0x10, 0x10, 0x12, 0x45, 0x44, 0x47, 0x15, 0x1E, 0x1D, 0x46, 0x46,
+ 0x1D, 0x11, 0x47, 0x47, 0x11, 0x10, 0x45, 0x45, 0x45, 0x45, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x13, 0x1E, 0x24, 0x24, 0x46, 0x46, 0x24, 0x24,
+ 0x24, 0x24, 0x1D, 0x11, 0x10, 0x12, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x24, 0x1D, 0x15, 0x10, 0x10, 0x47, 0x15, 0x11, 0x11, 0x10,
+ 0x15, 0x11, 0x45, 0x12, 0x45, 0x12, 0x12, 0x45, 0x45, 0x44, 0x47, 0x1D,
+ 0x1E, 0x1E, 0x1D, 0x46, 0x46, 0x46, 0x24, 0x47, 0x47, 0x47, 0x1E, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x13, 0x1E, 0x24, 0x46,
+ 0x46, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x11, 0x7B, 0x12, 0x7B, 0x7B, 0x44,
+ 0x7B, 0x7B, 0x12, 0x7B, 0x10, 0x1E, 0x24, 0x1D, 0x15, 0x10, 0x10, 0x47,
+ 0x15, 0x15, 0x1D, 0x15, 0x15, 0x11, 0x11, 0x10, 0x45, 0x10, 0x10, 0x12,
+ 0x44, 0x44, 0x47, 0x1E, 0x24, 0x15, 0x1E, 0x1D, 0x46, 0x46, 0x46, 0x46,
+ 0x24, 0x47, 0x24, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
+ 0x11, 0x1D, 0x24, 0x46, 0x46, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E, 0x24, 0x1D,
+ 0x15, 0x15, 0x10, 0x10, 0x47, 0x47, 0x24, 0x1D, 0x1D, 0x12, 0x45, 0x12,
+ 0x10, 0x12, 0x12, 0x44, 0x45, 0x45, 0x47, 0x1E, 0x1D, 0x15, 0x15, 0x1E,
+ 0x1D, 0x24, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x11, 0x1E, 0x24, 0x46, 0x46, 0x24, 0x24, 0x24, 0x1D,
+ 0x1E, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x10, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x10, 0x1E, 0x1D, 0x1D, 0x1E, 0x15, 0x10, 0x10, 0x12, 0x12, 0x47, 0x11,
+ 0x10, 0x11, 0x10, 0x10, 0x45, 0x10, 0x7B, 0x7B, 0x45, 0x44, 0x47, 0x1E,
+ 0x1D, 0x1D, 0x15, 0x15, 0x1E, 0x1E, 0x1D, 0x1D, 0x46, 0x1E, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1E, 0x24, 0x46, 0x46, 0x46,
+ 0x24, 0x24, 0x1D, 0x1E, 0x11, 0x7B, 0x7B, 0x12, 0x12, 0x10, 0x10, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x1E, 0x1D, 0x24, 0x1D, 0x15, 0x7B, 0x10,
+ 0x10, 0x12, 0x12, 0x47, 0x11, 0x24, 0x10, 0x12, 0x10, 0x7B, 0x7B, 0x7B,
+ 0x45, 0x44, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x15, 0x15, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1D,
+ 0x24, 0x46, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x11, 0x7B, 0x12, 0x12, 0x10,
+ 0x10, 0x44, 0x44, 0x7B, 0x7B, 0x12, 0x7B, 0x44, 0x10, 0x1E, 0x1D, 0x24,
+ 0x1D, 0x1E, 0x15, 0x7B, 0x10, 0x10, 0x10, 0x12, 0x47, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x15, 0x1E, 0x1D, 0x1D, 0x1D,
+ 0x15, 0x15, 0x15, 0x1E, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x11, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x1D, 0x1E, 0x7B,
+ 0x12, 0x12, 0x10, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x11, 0x1E, 0x24, 0x1D, 0x24, 0x1D, 0x1E, 0x15, 0x11, 0x10, 0x10, 0x10,
+ 0x12, 0x45, 0x45, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x47,
+ 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x15, 0x15, 0x15, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x1E, 0x24, 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x1D, 0x7B, 0x12, 0x12, 0x10, 0x11, 0x44, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x11, 0x1E, 0x1E, 0x1D, 0x1E, 0x1D, 0x1D, 0x1E,
+ 0x11, 0x11, 0x10, 0x10, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x45, 0x13, 0x15, 0x15, 0x1E, 0x1E, 0x1D, 0x15, 0x1E, 0x15, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1D, 0x24,
+ 0x24, 0x24, 0x24, 0x24, 0x1D, 0x7B, 0x10, 0x12, 0x10, 0x11, 0x12, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1D, 0x1E, 0x1E, 0x1E, 0x15, 0x11, 0x11, 0x10, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x13, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x1D, 0x24, 0x24, 0x24, 0x1D, 0x1D, 0x7B, 0x7B, 0x12, 0x11,
+ 0x11, 0x12, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x10,
+ 0x1E, 0x1E, 0x1E, 0x15, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x15, 0x15, 0x10,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44,
+ 0x13, 0x13, 0x15, 0x15, 0x13, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1D, 0x1D, 0x24, 0x1D, 0x1E, 0x1E,
+ 0x7B, 0x12, 0x10, 0x1E, 0x11, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x11, 0x1E, 0x1D, 0x15, 0x1E, 0x15, 0x1E, 0x15, 0x15,
+ 0x1E, 0x15, 0x11, 0x10, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1D, 0x1D,
+ 0x1D, 0x1E, 0x1E, 0x00, 0x10, 0x10, 0x1E, 0x11, 0x12, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x1E, 0x1E, 0x1E, 0x1E, 0x15,
+ 0x1E, 0x15, 0x15, 0x1E, 0x15, 0x11, 0x10, 0x12, 0x12, 0x45, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x45, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x1E, 0x1D, 0x1E, 0x1E, 0x00, 0x00, 0x12, 0x11, 0x11, 0x10,
+ 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x10, 0x1E,
+ 0x1E, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x10, 0x10, 0x7B,
+ 0x45, 0x12, 0x45, 0x12, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x1E, 0x1E, 0x1E, 0x11, 0x00, 0x12,
+ 0x11, 0x1E, 0x11, 0x44, 0x44, 0x45, 0x7B, 0x45, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x11, 0x1E, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11,
+ 0x10, 0x10, 0x12, 0x7B, 0x12, 0x45, 0x12, 0x45, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x11, 0x10,
+ 0x10, 0x00, 0x00, 0x12, 0x1E, 0x11, 0x10, 0x44, 0x45, 0x7B, 0x45, 0x7B,
+ 0x45, 0x7B, 0x7B, 0x7B, 0x44, 0x10, 0x11, 0x11, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x10, 0x10, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12,
+ 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x45, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x12, 0x00, 0x00, 0x12, 0x10, 0x1E, 0x10, 0x44, 0x45,
+ 0x7B, 0x45, 0x7B, 0x45, 0x7B, 0x44, 0x7B, 0x44, 0x10, 0x11, 0x11, 0x15,
+ 0x11, 0x11, 0x10, 0x10, 0x10, 0x12, 0x10, 0x12, 0x12, 0x45, 0x12, 0x00,
+ 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x12, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11,
+ 0x11, 0x44, 0x44, 0x45, 0x44, 0x7B, 0x45, 0x7B, 0x44, 0x7B, 0x44, 0x10,
+ 0x11, 0x11, 0x11, 0x10, 0x10, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x45, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x12, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x11, 0x11, 0x44, 0x45, 0x45, 0x7B, 0x45, 0x44, 0x45,
+ 0x7B, 0x10, 0x10, 0x11, 0x11, 0x11, 0x10, 0x10, 0x12, 0x13, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x45,
+ 0x45, 0x45, 0x45, 0x45, 0x12, 0x45, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x44, 0x44, 0x45,
+ 0x45, 0x44, 0x45, 0x44, 0x10, 0x15, 0x15, 0x11, 0x10, 0x10, 0x00, 0x12,
+ 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x45,
+ 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x45,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x1D, 0x10, 0x44, 0x44, 0x7B, 0x45, 0x44, 0x10, 0x15, 0x1E, 0x15, 0x10,
+ 0x10, 0x00, 0x00, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45,
+ 0x45, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x12, 0x12, 0x12, 0x45, 0x45,
+ 0x12, 0x12, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x11, 0x11, 0x12, 0x44, 0x10, 0x11, 0x1D,
+ 0x1D, 0x1E, 0x10, 0x10, 0x00, 0x00, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x45, 0x45, 0x45, 0x45, 0x12, 0x12, 0x45, 0x45, 0x45, 0x12, 0x45,
+ 0x45, 0x45, 0x45, 0x12, 0x45, 0x45, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x1D, 0x1E, 0x11, 0x11,
+ 0x13, 0x11, 0x1D, 0x1D, 0x47, 0x10, 0x10, 0x00, 0x00, 0x13, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x45, 0x45, 0x45, 0x45, 0x12, 0x12, 0x12, 0x10,
+ 0x12, 0x12, 0x45, 0x12, 0x12, 0x12, 0x45, 0x45, 0x12, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x11, 0x1D, 0x47, 0x47, 0x47, 0x47, 0x47, 0x11, 0x13, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x10, 0x45, 0x45, 0x45, 0x12, 0x10, 0x45, 0x45, 0x45, 0x45, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x13, 0x11, 0x13, 0x13, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x45, 0x45, 0x45, 0x12, 0x10, 0x45, 0x45, 0x45,
+ 0x45, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x45,
+ 0x45, 0x45, 0x12, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask9RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x53, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x60, 0x07, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFE, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0x8F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xC7, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0xFF, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xF3, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x3F, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFC, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x1F, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0x9F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFD, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x73, 0xFF, 0xFF, 0xFF, 0xEF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xF8,
+ 0x07, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xE0, 0x0F, 0xFF, 0x00, 0x00,
+ 0x03, 0xFF, 0xFD, 0xC0, 0x3F, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xF9, 0x81,
+ 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xF3, 0x07, 0xFF, 0xFE, 0x00, 0x00,
+ 0x03, 0xFF, 0xE6, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x84, 0x0F,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0x04, 0x01, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x3E, 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,
+};
+
+const uint8_t sprite10LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x49,
+ 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x4A, 0x49, 0x00, 0x00, 0x00, 0x00,
+ 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x49,
+ 0x48, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x48, 0x49, 0x48, 0x4A, 0x48, 0x49,
+ 0x4A, 0x48, 0x4A, 0x48, 0x49, 0x4A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x48, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x48, 0x49, 0x48,
+ 0x4A, 0x48, 0x4B, 0x4A, 0x48, 0x48, 0x48, 0x4B, 0x4A, 0x48, 0x4A, 0x48,
+ 0x49, 0x48, 0x4A, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x49, 0x48, 0x4A, 0x48, 0x4B, 0x4A, 0x48, 0x4B, 0x4A,
+ 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48,
+ 0x48, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x4A, 0x48,
+ 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x49, 0x4A, 0x48, 0x4B, 0x4A,
+ 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4A, 0x4A,
+ 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x48, 0x4A, 0x48, 0x4A, 0x48, 0x48, 0x48, 0x48,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4A, 0x4B, 0x4A,
+ 0x48, 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4B,
+ 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4C,
+ 0x4C, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49,
+ 0x4A, 0x48, 0x4B, 0x48, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x3F, 0x4B,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4B, 0x48, 0x48, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x4B, 0x7B, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x44, 0x4D, 0x4D, 0x4C,
+ 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x4A, 0x4A, 0x4A, 0x4B,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B,
+ 0x44, 0x44, 0x4D, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4A,
+ 0x4A, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x7B, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7B, 0x7B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x44, 0x4D,
+ 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x7B, 0x7B, 0x44, 0x4C, 0x28, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x4B,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x44, 0x28, 0x4C, 0x44, 0x21,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44,
+ 0x28, 0x28, 0x44, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x44, 0x4D, 0x28, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4A, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x4D, 0x28, 0x4C, 0x44,
+ 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x4B,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x4D, 0x4C, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4D, 0x4C, 0x44,
+ 0x21, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x4D, 0x4C, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x21,
+ 0x21, 0x3F, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4A, 0x4B, 0x3F, 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x01, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x4D, 0x4D, 0x4C, 0x44,
+ 0x21, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F, 0x21, 0x7B, 0x21, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44,
+ 0x4D, 0x4C, 0x44, 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F, 0x3F,
+ 0x21, 0x7B, 0x21, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x01, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x44, 0x4D, 0x4C, 0x4C, 0x44, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4B, 0x21, 0x3F, 0x3F, 0x21, 0x7B, 0x21, 0x3D, 0x3F, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4C, 0x4D, 0x44, 0x21, 0x12,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x21, 0x21, 0x12, 0x7B, 0x7B, 0x12, 0x21,
+ 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x4C, 0x4C,
+ 0x4C, 0x44, 0x4C, 0x12, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F, 0x21, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x21, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01,
+ 0x01, 0x01, 0x3D, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x01, 0x01, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x44, 0x4D, 0x12, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F,
+ 0x3F, 0x21, 0x7B, 0x7B, 0x01, 0x4B, 0x7B, 0x21, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x21, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x01, 0x01, 0x01, 0x12, 0x12,
+ 0x12, 0x12, 0x7B, 0x44, 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x4C, 0x4D, 0x12,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x4A, 0x4A,
+ 0x4B, 0x4B, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x01, 0x4B, 0x7B, 0x21,
+ 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x21,
+ 0x21, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x01, 0x01, 0x01, 0x01, 0x12, 0x44, 0x44, 0x4C, 0x4C, 0x4C, 0x44,
+ 0x44, 0x4C, 0x4D, 0x12, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x21, 0x00,
+ 0x00, 0x1B, 0x1B, 0x4A, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x21, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x01, 0x01, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x21, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x3F, 0x3F, 0x4C, 0x4C, 0x4D, 0x12, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x44, 0x1B, 0x1B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x12, 0x7B, 0x7B, 0x12, 0x21, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x21, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4C, 0x4C, 0x4D, 0x4D, 0x4D,
+ 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x00, 0x28, 0x28, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x21, 0x21, 0x3F,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4C,
+ 0x4D, 0x4D, 0x4D, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00,
+ 0x12, 0x12, 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x3F, 0x3F, 0x3F, 0x21,
+ 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x01, 0x01, 0x3D, 0x3D,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x4C, 0x4C, 0x1B, 0x1B, 0x4D, 0x00, 0x00, 0x00, 0x21, 0x21,
+ 0x21, 0x3F, 0x21, 0x21, 0x00, 0x00, 0x4C, 0x4D, 0x28, 0x1B, 0x1B, 0x3F,
+ 0x1B, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x01, 0x01, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4C, 0x3F, 0x12, 0x1B, 0x28, 0x4D,
+ 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x4C,
+ 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x3F, 0x3F, 0x21, 0x7B, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x3F, 0x3D, 0x3F, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x3D, 0x3F,
+ 0x21, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4C, 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x3F,
+ 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x01, 0x3D, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x4D, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x4D, 0x28,
+ 0x1B, 0x1B, 0x3F, 0x1B, 0x21, 0x1B, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x21, 0x01, 0x3D, 0x3F, 0x21, 0x21, 0x12, 0x1B, 0x28,
+ 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4C, 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x21, 0x1B, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x01, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x4D, 0x28, 0x1B, 0x1B,
+ 0x3F, 0x1B, 0x21, 0x1B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x01, 0x3D,
+ 0x3D, 0x3F, 0x3F, 0x21, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x21, 0x1B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x21,
+ 0x01, 0x01, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x12, 0x1B, 0x28,
+ 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x3F, 0x1B, 0x3F, 0x1B, 0x3F, 0x21, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x21, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21,
+ 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4D, 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x21, 0x21,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x21, 0x21, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3F, 0x21, 0x3F, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x28, 0x28, 0x1B, 0x28,
+ 0x1B, 0x28, 0x1B, 0x28, 0x1B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x21, 0x3F, 0x21, 0x12, 0x1B, 0x1B, 0x28,
+ 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4D, 0x4D, 0x28, 0x28, 0x1B, 0x28, 0x1B, 0x28, 0x1B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x21, 0x3F, 0x21, 0x21,
+ 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x28, 0x28, 0x28, 0x1B,
+ 0x28, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21,
+ 0x3F, 0x21, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x28, 0x28, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x12, 0x1B, 0x1B, 0x28, 0x4D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x28,
+ 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4C, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x4D,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x28, 0x28, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x1B,
+ 0x1B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask10LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x13, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE4, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x86, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xBE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x0F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x02,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0x80, 0x3F, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x1F, 0xC0, 0x1F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x01, 0xF0,
+ 0x03, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x3F, 0xF0, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 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,
+};
+
+const uint8_t sprite10LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x49,
+ 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x4A, 0x49, 0x00, 0x00, 0x00, 0x00,
+ 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x49,
+ 0x48, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x48, 0x49, 0x48, 0x4A, 0x48, 0x49,
+ 0x4A, 0x48, 0x4A, 0x48, 0x49, 0x4A, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x48, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x48, 0x49, 0x48,
+ 0x4A, 0x48, 0x4B, 0x4A, 0x48, 0x48, 0x48, 0x4B, 0x4A, 0x48, 0x4A, 0x48,
+ 0x49, 0x48, 0x4A, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x49, 0x48, 0x4A, 0x48, 0x4B, 0x4A, 0x48, 0x4B, 0x4A,
+ 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48,
+ 0x48, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x4A, 0x48,
+ 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x49, 0x4A, 0x48, 0x4B, 0x4A,
+ 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4A, 0x4A,
+ 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x49,
+ 0x49, 0x49, 0x49, 0x49, 0x48, 0x4A, 0x48, 0x4A, 0x48, 0x48, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x4A, 0x4B, 0x4A,
+ 0x48, 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4B,
+ 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4C,
+ 0x4C, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48,
+ 0x48, 0x48, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49,
+ 0x4A, 0x48, 0x4B, 0x48, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x3F, 0x4B,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x44, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4B, 0x48, 0x48, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x4B, 0x7B, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x44, 0x4D, 0x4D, 0x4C,
+ 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x4A, 0x4A, 0x4A, 0x4B,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B,
+ 0x44, 0x44, 0x4D, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4A,
+ 0x4A, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x7B, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7B, 0x7B, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x44, 0x4D,
+ 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x7B, 0x7B, 0x44, 0x4C, 0x28, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x4B,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x44, 0x28, 0x4C, 0x44, 0x21,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44,
+ 0x28, 0x28, 0x44, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x44, 0x4D, 0x28, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4A, 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12,
+ 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x44, 0x4D, 0x28, 0x4C, 0x44,
+ 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x4B,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x12,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x4D, 0x4C, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4D, 0x4C, 0x44,
+ 0x21, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x4B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44,
+ 0x4D, 0x4C, 0x4C, 0x44, 0x21, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x21, 0x00, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4A, 0x4B, 0x3F, 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x01, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x4D, 0x4D, 0x4C, 0x44,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F, 0x21, 0x7B, 0x21, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x01, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44,
+ 0x4D, 0x4C, 0x44, 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x21, 0x48, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F, 0x3F,
+ 0x21, 0x7B, 0x21, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x01, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x44, 0x44, 0x4D, 0x4C, 0x4C, 0x44, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4B, 0x21, 0x3F, 0x3F, 0x21, 0x7B, 0x21, 0x3D, 0x3F, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x4C, 0x4C, 0x4D, 0x44, 0x21, 0x12,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x21, 0x21, 0x12, 0x7B, 0x7B, 0x12, 0x21,
+ 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x01, 0x12,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x44, 0x44, 0x4C, 0x4C,
+ 0x4C, 0x44, 0x4C, 0x12, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F, 0x21, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x21, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x01, 0x01, 0x12, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x7B,
+ 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x44, 0x4D, 0x12, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4B, 0x3F,
+ 0x3F, 0x21, 0x7B, 0x7B, 0x01, 0x4B, 0x7B, 0x21, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x01, 0x01, 0x01, 0x12, 0x12,
+ 0x12, 0x12, 0x7B, 0x44, 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x4C, 0x4D, 0x12,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x4A,
+ 0x4B, 0x4B, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x01, 0x4B, 0x7B, 0x21,
+ 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x01, 0x01, 0x01, 0x01, 0x12, 0x44, 0x44, 0x4C, 0x4C, 0x4C, 0x44,
+ 0x44, 0x4C, 0x4D, 0x12, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x00, 0x00,
+ 0x00, 0x1B, 0x1B, 0x4A, 0x4A, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x12, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x21, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x01, 0x01,
+ 0x01, 0x3D, 0x3D, 0x3D, 0x01, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x3F, 0x3F, 0x4C, 0x4C, 0x4D, 0x12, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x48, 0x00, 0x00, 0x00, 0x4C, 0x1B, 0x1B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x12, 0x7B, 0x7B, 0x12, 0x21, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x21, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4C, 0x4C, 0x4D, 0x4D, 0x4D,
+ 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x21, 0x00, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x21,
+ 0x21, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4C,
+ 0x4D, 0x4D, 0x4D, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x3F, 0x3F, 0x3F, 0x21,
+ 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x3D, 0x01, 0x01, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x21, 0x21, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x4C, 0x4C, 0x1B, 0x1B, 0x4D, 0x00, 0x00, 0x21, 0x21, 0x21,
+ 0x3F, 0x3F, 0x3F, 0x21, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x3F,
+ 0x1B, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x01,
+ 0x01, 0x3D, 0x3D, 0x3D, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4C, 0x3F, 0x12, 0x1B, 0x28, 0x4D,
+ 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00,
+ 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x3F, 0x3F, 0x21, 0x7B, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x3D, 0x3F,
+ 0x21, 0x12, 0x1B, 0x28, 0x4C, 0x00, 0x00, 0x00, 0x21, 0x21, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x3F,
+ 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x01, 0x3D, 0x3F, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x44, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28,
+ 0x1B, 0x1B, 0x3F, 0x1B, 0x21, 0x1B, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x21, 0x01, 0x3D, 0x3D, 0x3F, 0x21, 0x21, 0x12, 0x1B,
+ 0x28, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x3F, 0x1B, 0x21, 0x1B, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x01, 0x3D, 0x3D, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x1B,
+ 0x3F, 0x1B, 0x21, 0x1B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x01, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3F, 0x21, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x21, 0x1B, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x21,
+ 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x12, 0x1B,
+ 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x28, 0x1B, 0x1B, 0x1B,
+ 0x3F, 0x1B, 0x3F, 0x1B, 0x3F, 0x21, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x21, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4D, 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x21, 0x21,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x21, 0x21, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3F, 0x21, 0x3F, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x28, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x21, 0x3F, 0x21, 0x12, 0x1B, 0x1B,
+ 0x28, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4D, 0x4D, 0x28, 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1B, 0x1B, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x21, 0x3F, 0x21,
+ 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x4D, 0x28, 0x28, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x21, 0x3F, 0x21, 0x21, 0x12, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4C, 0x4D, 0x28, 0x28, 0x28, 0x1B, 0x1B, 0x1B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x3F, 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x12, 0x1B, 0x1B, 0x28, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x28,
+ 0x28, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x4D,
+ 0x4C, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x28, 0x1B, 0x1B, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask10LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x13, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xE4, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x1F, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x8E, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x1F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8C,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x1F, 0xE0, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFC,
+ 0x03, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x1F, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 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,
+};
+
+const uint8_t sprite10RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x4A, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
+ 0x49, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00,
+ 0x00, 0x00, 0x4A, 0x49, 0x48, 0x4A, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x48,
+ 0x49, 0x48, 0x4A, 0x48, 0x49, 0x4A, 0x48, 0x48, 0x49, 0x48, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00,
+ 0x00, 0x4A, 0x48, 0x49, 0x48, 0x4A, 0x48, 0x4A, 0x4B, 0x48, 0x48, 0x48,
+ 0x4A, 0x4B, 0x48, 0x4A, 0x48, 0x49, 0x48, 0x4A, 0x48, 0x49, 0x4A, 0x48,
+ 0x49, 0x4A, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x4A,
+ 0x48, 0x4A, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x48,
+ 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48,
+ 0x4A, 0x4B, 0x48, 0x4A, 0x4B, 0x48, 0x4A, 0x48, 0x49, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x48, 0x48,
+ 0x4A, 0x48, 0x4A, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x4A, 0x4A, 0x4A,
+ 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x48,
+ 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4B, 0x48, 0x4A,
+ 0x49, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x44, 0x4C, 0x4C, 0x4C, 0x4C, 0x44, 0x7B, 0x7B, 0x7B, 0x4B, 0x4B,
+ 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x48,
+ 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4B, 0x4A, 0x49, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x4B, 0x4B, 0x4A, 0x4A, 0x4A, 0x48, 0x4B, 0x48, 0x4A,
+ 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4D, 0x44,
+ 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x4B, 0x3F,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A,
+ 0x4A, 0x4A, 0x48, 0x48, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C,
+ 0x4D, 0x4D, 0x44, 0x44, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x7B, 0x12, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4A, 0x4A, 0x4A, 0x4B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x7B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A,
+ 0x4A, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4D, 0x44, 0x7B, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x7B,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x4B, 0x4B, 0x4A, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x28,
+ 0x4C, 0x44, 0x7B, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x44, 0x4C, 0x28, 0x44, 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x21, 0x44, 0x44, 0x28, 0x28, 0x44, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B,
+ 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x28, 0x4D,
+ 0x44, 0x7B, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12,
+ 0x12, 0x12, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x4B, 0x3F,
+ 0x4B, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21,
+ 0x44, 0x4C, 0x28, 0x4D, 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x4A, 0x4A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x7B,
+ 0x12, 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x4B, 0x4B, 0x4B, 0x4A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4C, 0x4D,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00, 0x21,
+ 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x4B, 0x4B, 0x4A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21,
+ 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4C, 0x4D, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B,
+ 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x21, 0x3F, 0x21, 0x21, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x21, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x21,
+ 0x44, 0x4C, 0x4D, 0x4D, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x3F, 0x4B, 0x4A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x44, 0x4C, 0x4D, 0x44, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x01,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x21, 0x7B, 0x21,
+ 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x44, 0x4C, 0x4C,
+ 0x4D, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x21, 0x7B, 0x21, 0x3F, 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x12, 0x21, 0x44, 0x4D, 0x4C, 0x4C, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3F, 0x3D, 0x21, 0x7B, 0x21, 0x3F, 0x3F, 0x21, 0x4B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x12, 0x4C, 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x21, 0x12, 0x7B, 0x7B,
+ 0x12, 0x21, 0x21, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x12, 0x4D, 0x44, 0x44,
+ 0x4C, 0x4C, 0x4C, 0x44, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12,
+ 0x01, 0x01, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x01, 0x3D, 0x01, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x21, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x21, 0x3F, 0x4B, 0x4A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x12, 0x4D, 0x4C, 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x44, 0x7B, 0x12, 0x12,
+ 0x12, 0x12, 0x01, 0x01, 0x01, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x21, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3F, 0x21, 0x7B, 0x4B, 0x01, 0x7B, 0x7B, 0x21, 0x3F,
+ 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x12, 0x4D, 0x4C, 0x44, 0x44, 0x4C, 0x4C, 0x4C,
+ 0x44, 0x44, 0x12, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x21, 0x21, 0x3D, 0x3D, 0x3D,
+ 0x01, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x21, 0x7B, 0x4B, 0x01,
+ 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x4B, 0x4B, 0x4A, 0x4A, 0x00, 0x00,
+ 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x12, 0x4D, 0x4C, 0x4C,
+ 0x3F, 0x3F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F,
+ 0x21, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x21, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4A,
+ 0x4A, 0x1B, 0x1B, 0x00, 0x00, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21,
+ 0x4D, 0x4D, 0x4D, 0x4C, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x21, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x21, 0x12, 0x7B, 0x7B, 0x12, 0x21, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x1B, 0x1B, 0x44, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x00, 0x00, 0x4D, 0x4D, 0x4D, 0x4C, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x21, 0x21, 0x3D,
+ 0x3D, 0x3D, 0x01, 0x01, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x21, 0x7B, 0x7B,
+ 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x28,
+ 0x21, 0x21, 0x3F, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x4D, 0x1B, 0x1B,
+ 0x4C, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3F, 0x21, 0x21, 0x3D, 0x3D, 0x01, 0x01, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B,
+ 0x28, 0x4D, 0x12, 0x12, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x00,
+ 0x4D, 0x28, 0x1B, 0x12, 0x3F, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x21, 0x01, 0x01,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x1B,
+ 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x4C, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x21, 0x3F, 0x3D, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x21,
+ 0x3F, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x4C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x28, 0x1B, 0x12,
+ 0x21, 0x3D, 0x01, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x21, 0x21, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x4C,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D,
+ 0x28, 0x1B, 0x12, 0x21, 0x21, 0x3F, 0x3D, 0x01, 0x21, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x1B, 0x21, 0x1B, 0x3F, 0x1B, 0x1B,
+ 0x28, 0x4D, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x3F, 0x3F, 0x3F, 0x3D,
+ 0x01, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1B, 0x21, 0x1B,
+ 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21,
+ 0x21, 0x3F, 0x3F, 0x3D, 0x3D, 0x01, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x1B, 0x21, 0x1B, 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x4C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D,
+ 0x28, 0x1B, 0x12, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x01, 0x01,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x1B, 0x21, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x21, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x3F, 0x1B, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B, 0x1B, 0x28,
+ 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21,
+ 0x3F, 0x21, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01,
+ 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x28, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D,
+ 0x28, 0x1B, 0x1B, 0x12, 0x21, 0x3F, 0x21, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x1B, 0x28, 0x1B, 0x28, 0x1B,
+ 0x28, 0x1B, 0x28, 0x28, 0x4D, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x21, 0x3F, 0x21,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x1B,
+ 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B,
+ 0x28, 0x1B, 0x28, 0x1B, 0x28, 0x28, 0x4D, 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B,
+ 0x12, 0x21, 0x21, 0x3F, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x28, 0x1B, 0x28, 0x28, 0x28, 0x4C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x12, 0x21, 0x21, 0x21, 0x3F, 0x3F,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x28, 0x28, 0x4D, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x28, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x28, 0x28, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x28, 0x28,
+ 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x1B,
+ 0x1B, 0x4D, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask10RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xC8,
+ 0xA0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x27, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x61, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7D, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xF8, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0,
+ 0x0F, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite10RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49,
+ 0x00, 0x00, 0x00, 0x00, 0x49, 0x4A, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00,
+ 0x49, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00,
+ 0x00, 0x00, 0x4A, 0x49, 0x48, 0x4A, 0x48, 0x4A, 0x49, 0x48, 0x4A, 0x48,
+ 0x49, 0x48, 0x4A, 0x48, 0x49, 0x4A, 0x48, 0x48, 0x49, 0x48, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0x00,
+ 0x00, 0x4A, 0x48, 0x49, 0x48, 0x4A, 0x48, 0x4A, 0x4B, 0x48, 0x48, 0x48,
+ 0x4A, 0x4B, 0x48, 0x4A, 0x48, 0x49, 0x48, 0x4A, 0x48, 0x49, 0x4A, 0x48,
+ 0x49, 0x4A, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A,
+ 0x48, 0x4A, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x48, 0x4A, 0x48, 0x48, 0x48,
+ 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48,
+ 0x4A, 0x4B, 0x48, 0x4A, 0x4B, 0x48, 0x4A, 0x48, 0x49, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48,
+ 0x4A, 0x48, 0x4A, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x4A, 0x4A, 0x4A,
+ 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x48,
+ 0x48, 0x4B, 0x48, 0x48, 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4B, 0x48, 0x4A,
+ 0x49, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x48, 0x48, 0x48, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x44, 0x4C, 0x4C, 0x4C, 0x4C, 0x44, 0x7B, 0x7B, 0x7B, 0x4B, 0x4B,
+ 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x48,
+ 0x48, 0x4B, 0x48, 0x48, 0x4A, 0x4B, 0x4A, 0x49, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x4B, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x4B, 0x4B, 0x4A, 0x4A, 0x4A, 0x48, 0x4B, 0x48, 0x4A,
+ 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4D, 0x44,
+ 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x4B, 0x3F,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A,
+ 0x4A, 0x4A, 0x48, 0x48, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C,
+ 0x4D, 0x4D, 0x44, 0x44, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x7B, 0x12, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4A, 0x4A, 0x4A, 0x4B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x7B, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A,
+ 0x4A, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4D, 0x44, 0x7B, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x7B,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x4B, 0x4B, 0x4A, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x28,
+ 0x4C, 0x44, 0x7B, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x44, 0x4C, 0x28, 0x44, 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x4B, 0x3F, 0x4B, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x21, 0x44, 0x44, 0x28, 0x28, 0x44, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7B,
+ 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x4B, 0x4A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x28, 0x4D,
+ 0x44, 0x7B, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12,
+ 0x12, 0x12, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x4B, 0x3F,
+ 0x4B, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21,
+ 0x44, 0x4C, 0x28, 0x4D, 0x44, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B,
+ 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x01, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x4B, 0x3F, 0x4B, 0x4A, 0x4A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x12, 0x7B, 0x7B,
+ 0x12, 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x4B, 0x4B, 0x4B, 0x4A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4C, 0x4D,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x12, 0x7B, 0x7B, 0x7B,
+ 0x12, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x4B, 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00, 0x21,
+ 0x44, 0x4C, 0x4D, 0x4C, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x4B, 0x4B, 0x4A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x00, 0x00, 0x21, 0x44, 0x4C, 0x4C, 0x4D, 0x44, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x01, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x4B,
+ 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x21, 0x00, 0x21, 0x44, 0x4C, 0x4D, 0x4C,
+ 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x21, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x44, 0x4C, 0x4D, 0x4D, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x3F, 0x4B, 0x4A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x44, 0x4C, 0x4D, 0x44, 0x44, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x01,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F, 0x21, 0x7B, 0x21,
+ 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x44, 0x4C, 0x4C,
+ 0x4D, 0x44, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x21, 0x7B, 0x21, 0x3F, 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x12, 0x21, 0x44, 0x4D, 0x4C, 0x4C, 0x44, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3F, 0x3D, 0x21, 0x7B, 0x21, 0x3F, 0x3F, 0x21, 0x4B,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x12, 0x4C, 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x44,
+ 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x01, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x21, 0x12, 0x7B, 0x7B,
+ 0x12, 0x21, 0x21, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x12, 0x4D, 0x44, 0x44,
+ 0x4C, 0x4C, 0x4C, 0x44, 0x7B, 0x12, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x12,
+ 0x01, 0x01, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D,
+ 0x21, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x21, 0x3F, 0x4B, 0x4A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x12, 0x4D, 0x4C, 0x44, 0x4C, 0x4C, 0x4C, 0x44, 0x44, 0x7B, 0x12, 0x12,
+ 0x12, 0x12, 0x01, 0x01, 0x01, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x21, 0x7B, 0x4B, 0x01, 0x7B, 0x7B, 0x21, 0x3F,
+ 0x3F, 0x4B, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x12, 0x4D, 0x4C, 0x44, 0x44, 0x4C, 0x4C, 0x4C,
+ 0x44, 0x44, 0x12, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x21, 0x7B, 0x4B, 0x01,
+ 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x4B, 0x4B, 0x4A, 0x4A, 0x00, 0x00,
+ 0x00, 0x48, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x12, 0x4D, 0x4C, 0x4C,
+ 0x3F, 0x3F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x01,
+ 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x01, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x21, 0x7B, 0x7B, 0x7B, 0x7B, 0x12, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x4A,
+ 0x4A, 0x1B, 0x1B, 0x00, 0x00, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x21,
+ 0x4D, 0x4D, 0x4D, 0x4C, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x21, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3D, 0x21, 0x12, 0x7B, 0x7B, 0x12, 0x21, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x1B, 0x1B, 0x4C, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x00, 0x4D, 0x4D, 0x4D, 0x4C, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x21, 0x21, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x01, 0x01, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x21, 0x7B, 0x7B,
+ 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x21, 0x3F, 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x00, 0x00, 0x4D, 0x1B, 0x1B,
+ 0x4C, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F,
+ 0x21, 0x21, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x01, 0x3D, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B,
+ 0x28, 0x4D, 0x00, 0x00, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00,
+ 0x4D, 0x28, 0x1B, 0x12, 0x3F, 0x4C, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x21, 0x3D, 0x3D, 0x3D, 0x01,
+ 0x01, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x7B, 0x21, 0x3F, 0x3F, 0x1B,
+ 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x21,
+ 0x00, 0x00, 0x00, 0x4C, 0x28, 0x1B, 0x12, 0x21, 0x3F, 0x3D, 0x21, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x21, 0x7B, 0x21,
+ 0x3F, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x4D, 0x28, 0x1B, 0x12, 0x21,
+ 0x3F, 0x3D, 0x01, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x21, 0x21, 0x21, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x28,
+ 0x1B, 0x12, 0x21, 0x21, 0x3F, 0x3D, 0x3D, 0x01, 0x21, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x21, 0x1B, 0x21, 0x1B, 0x3F, 0x1B, 0x1B,
+ 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D,
+ 0x01, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1B, 0x21, 0x1B,
+ 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x21,
+ 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x01, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x1B, 0x21, 0x1B, 0x3F, 0x1B, 0x1B, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28,
+ 0x1B, 0x12, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D, 0x01, 0x01,
+ 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F,
+ 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x1B, 0x21, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3D, 0x3F, 0x3F, 0x3D, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x3F, 0x1B, 0x3F, 0x1B, 0x3F, 0x1B, 0x1B, 0x1B, 0x28,
+ 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x3F,
+ 0x21, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01,
+ 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
+ 0x3F, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x28, 0x28, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x28,
+ 0x1B, 0x1B, 0x12, 0x21, 0x3F, 0x21, 0x3F, 0x3F, 0x3D, 0x3F, 0x3D, 0x3D,
+ 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x01, 0x21, 0x21, 0x21, 0x21, 0x21,
+ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x28, 0x28, 0x4D, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12, 0x21, 0x21, 0x3F, 0x21, 0x3F,
+ 0x3F, 0x3D, 0x3F, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x1B,
+ 0x1B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x28, 0x4D, 0x4D, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x28, 0x1B, 0x12,
+ 0x21, 0x21, 0x3F, 0x21, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3D, 0x3D, 0x3D,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x28, 0x4D, 0x4C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4D, 0x28, 0x1B, 0x1B, 0x12, 0x21, 0x21, 0x21, 0x3F, 0x3F, 0x3F,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x28, 0x4D, 0x4C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x4C, 0x4D, 0x28, 0x1B, 0x1B,
+ 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x1B, 0x28, 0x28, 0x4D, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x1B, 0x28, 0x28, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask10RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xC8,
+ 0xA0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3F, 0xFF, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x27, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x80, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00,
+ 0xF8, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x71, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xF8, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x31, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x03, 0xFF, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xF8, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xC0,
+ 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0x00, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite11LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x4E, 0x4E, 0x4E, 0x25,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x25,
+ 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25,
+ 0x1C, 0x1C, 0x1C, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x1C, 0x1C, 0x1C, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4F, 0x1C, 0x1C, 0x7B, 0x01, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x25, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x51, 0x52, 0x52, 0x52, 0x50, 0x53,
+ 0x53, 0x53, 0x53, 0x53, 0x50, 0x52, 0x50, 0x52, 0x52, 0x51, 0x00, 0x00,
+ 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4E, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x25, 0x00, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51,
+ 0x00, 0x00, 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x50, 0x1C, 0x50,
+ 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x4E, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x7B, 0x01,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x51, 0x52, 0x52, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52,
+ 0x50, 0x52, 0x52, 0x51, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x51, 0x52, 0x52, 0x53, 0x52, 0x53,
+ 0x52, 0x53, 0x52, 0x52, 0x51, 0x51, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4F,
+ 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x00, 0x00, 0x4F, 0x25, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4E, 0x25, 0x05, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x25, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4E, 0x4E, 0x4E, 0x4E, 0x0A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x25,
+ 0x25, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x4E, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00,
+ 0x00, 0x25, 0x05, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x51, 0x52, 0x7B, 0x01, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x52, 0x51, 0x50, 0x4E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x7B, 0x01, 0x0A, 0x07, 0x0A, 0x07,
+ 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x07, 0x07, 0x07, 0x25, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x51, 0x52, 0x50, 0x50, 0x52, 0x50,
+ 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x51, 0x00, 0x00, 0x4F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x54,
+ 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x4F,
+ 0x00, 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x51,
+ 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x51, 0x25, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51,
+ 0x00, 0x00, 0x51, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x4F, 0x4F,
+ 0x4F, 0x4F, 0x4F, 0x00, 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x25, 0x05, 0x0A, 0x4F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x4E, 0x25, 0x05,
+ 0x0A, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x4F, 0x00, 0x00, 0x00, 0x25,
+ 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
+ 0x1C, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C,
+ 0x1C, 0x1C, 0x4E, 0x25, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1C, 0x7B, 0x01, 0x50, 0x50, 0x53, 0x50, 0x53, 0x50, 0x53,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x4E, 0x25, 0x4F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x25, 0x25, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x52, 0x52, 0x53, 0x53, 0x55,
+ 0x53, 0x55, 0x53, 0x55, 0x53, 0x53, 0x52, 0x52, 0x51, 0x4F, 0x00, 0x00,
+ 0x25, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x05, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x25,
+ 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x07, 0x0A, 0x07, 0x0A,
+ 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x00, 0x0A, 0x25, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51,
+ 0x51, 0x00, 0x00, 0x00, 0x05, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x7B, 0x01, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x54, 0x54, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07,
+ 0x54, 0x54, 0x4F, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x54, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x4E, 0x25, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x4E, 0x4E,
+ 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00,
+ 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x1C, 0x1C, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C,
+ 0x50, 0x1C, 0x1C, 0x1C, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x7B, 0x01, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x25, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x52, 0x52, 0x52, 0x50,
+ 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x51, 0x4F,
+ 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51,
+ 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x51, 0x51, 0x51, 0x51, 0x51,
+ 0x51, 0x51, 0x00, 0x4F, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A,
+ 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x0A,
+ 0x0A, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x0A, 0x7B, 0x01, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x54, 0x07, 0x54, 0x07, 0x54,
+ 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x4F, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x54,
+ 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x4F, 0x4F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x00,
+ 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask11LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0x80, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF1,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xFC,
+ 0xC0, 0x03, 0xE0, 0x30, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x1F, 0xFC, 0x60,
+ 0x00, 0x00, 0x7F, 0x18, 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x40, 0x00,
+ 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x10, 0x00, 0x00, 0xFF, 0xFF, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 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, 0x80, 0x00,
+ 0x01, 0xE0, 0x00, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x07, 0xE0, 0x30, 0x00,
+ 0x00, 0xFF, 0xFF, 0x00, 0x1F, 0xFC, 0x70, 0x00, 0x03, 0xFF, 0xFF, 0x00,
+ 0x7F, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xE0, 0x00,
+ 0x07, 0xFF, 0xF9, 0x00, 0xFF, 0xFF, 0x30, 0x00, 0x03, 0xFF, 0xE0, 0x00,
+ 0x3F, 0xFC, 0x00, 0x00, 0x00, 0xFF, 0x30, 0x00, 0x0F, 0xE6, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 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, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF1,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x1C, 0x00,
+ 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x7C, 0x04, 0x00, 0x03, 0xFF, 0xFC,
+ 0xC0, 0x03, 0xFF, 0x8C, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xDC,
+ 0x00, 0x00, 0x7F, 0x8C, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x1F, 0xFF, 0xE4, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0xFF, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFC, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xDC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xFF, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xFF, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite11LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x25, 0x4E, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x4E, 0x25, 0x4F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x1C, 0x1C, 0x1C, 0x4E, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x7B,
+ 0x01, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x4E, 0x25, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x51, 0x52, 0x52, 0x52, 0x50, 0x53, 0x53, 0x53, 0x53, 0x53, 0x50,
+ 0x52, 0x50, 0x52, 0x52, 0x51, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x52, 0x52, 0x52, 0x52,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4F, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x00, 0x00, 0x4F, 0x25,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4E, 0x4E, 0x4E, 0x25, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x25, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C,
+ 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C,
+ 0x1C, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1C, 0x1C, 0x7B, 0x01, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x51, 0x52, 0x52, 0x52, 0x50, 0x52, 0x50, 0x52,
+ 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x51, 0x00, 0x00, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x52,
+ 0x52, 0x53, 0x52, 0x53, 0x52, 0x53, 0x52, 0x52, 0x51, 0x51, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x00,
+ 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4E, 0x4E, 0x4E, 0x25, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25,
+ 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x25, 0x4F, 0x00, 0x00, 0x25, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00,
+ 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x4E, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1C, 0x1C, 0x7B, 0x01, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x50, 0x50, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x7B, 0x01, 0x07, 0x0A, 0x07, 0x0A, 0x07,
+ 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x07, 0x07, 0x05, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x52, 0x52, 0x52, 0x50, 0x52, 0x50,
+ 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x51, 0x00, 0x00, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x54, 0x07,
+ 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x4F, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x51,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x4F,
+ 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4F, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51,
+ 0x00, 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F,
+ 0x4F, 0x4F, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4E, 0x4E, 0x25, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4E, 0x4E, 0x4E, 0x25, 0x05, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x50, 0x1C,
+ 0x50, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x50,
+ 0x1C, 0x50, 0x50, 0x50, 0x50, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x4E,
+ 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C,
+ 0x7B, 0x01, 0x50, 0x50, 0x53, 0x50, 0x53, 0x50, 0x53, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x51, 0x52, 0x52, 0x53, 0x53, 0x53, 0x55, 0x53, 0x55, 0x53,
+ 0x55, 0x53, 0x53, 0x52, 0x52, 0x51, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x25, 0x25, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x52, 0x52, 0x52,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x05, 0x00, 0x00, 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4F, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x00, 0x00, 0x00,
+ 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x07, 0x0A, 0x07, 0x0A,
+ 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x0A, 0x0A, 0x25, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x7B, 0x01, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x54, 0x54, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07,
+ 0x54, 0x54, 0x4F, 0x00, 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x54, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x00, 0x05, 0x05, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4E, 0x4E, 0x4E, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x50, 0x1C,
+ 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x4E, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x7B,
+ 0x01, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x51, 0x52, 0x52, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50,
+ 0x52, 0x50, 0x52, 0x52, 0x51, 0x00, 0x00, 0x4E, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x52, 0x52, 0x52, 0x52,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x51, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4F, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x00, 0x00, 0x4F, 0x25,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x25, 0x25, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x25, 0x05, 0x0A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x25, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A,
+ 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x0A, 0x0A,
+ 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A,
+ 0x0A, 0x7B, 0x01, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x25, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07,
+ 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x4F, 0x00, 0x00, 0x25, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x54, 0x54,
+ 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x4F, 0x4F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x05,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x4F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask11LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x01, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xE3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xF9, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0,
+ 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0x38, 0x00, 0x07, 0xE0, 0x20,
+ 0x00, 0x00, 0x40, 0x00, 0x00, 0x1F, 0xFC, 0x60, 0x00, 0x00, 0x30, 0x00,
+ 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE6, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00,
+ 0x01, 0xC0, 0x00, 0x00, 0x00, 0x3F, 0x01, 0x00, 0x07, 0xC0, 0x40, 0x00,
+ 0x00, 0xFF, 0xF3, 0x00, 0x3F, 0xF8, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0x00,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x07, 0xFF, 0xF9, 0x01, 0xFF, 0xFE, 0x40, 0x00, 0x03, 0xFF, 0xE0, 0x00,
+ 0x7F, 0xF8, 0x00, 0x00, 0x00, 0xFF, 0x30, 0x00, 0x1F, 0xCC, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 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, 0xE0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xF1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x1C, 0x00,
+ 0x00, 0x03, 0xFF, 0xFC, 0xC0, 0x00, 0x7C, 0x06, 0x00, 0x00, 0xFF, 0xF8,
+ 0x00, 0x03, 0xFF, 0x8C, 0x00, 0x00, 0x7F, 0x8C, 0x00, 0x0F, 0xFF, 0xFC,
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0x1F, 0xFF, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFD, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xE3, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF9, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0xFF, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0xFF, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xC0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite11RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25,
+ 0x4E, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x4E, 0x25, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x25, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x25, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x25, 0x4E, 0x1C, 0x1C, 0x1C, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x1C, 0x1C, 0x1C, 0x25, 0x4F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x25, 0x4E, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x01, 0x7B,
+ 0x1C, 0x1C, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x4E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25,
+ 0x00, 0x00, 0x51, 0x52, 0x52, 0x50, 0x52, 0x50, 0x53, 0x53, 0x53, 0x53,
+ 0x53, 0x50, 0x52, 0x52, 0x52, 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x4E, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x51, 0x52, 0x52,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x4F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x1C, 0x1C, 0x1C, 0x50, 0x1C,
+ 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x25, 0x00, 0x00, 0x00, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x4F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x01, 0x7B, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x4E, 0x00, 0x00, 0x51, 0x52, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50,
+ 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x52, 0x51, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x51, 0x51,
+ 0x52, 0x52, 0x53, 0x52, 0x53, 0x52, 0x53, 0x52, 0x52, 0x51, 0x4F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x25, 0x4F, 0x00, 0x00, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51,
+ 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x25, 0x25, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0A, 0x05, 0x25, 0x4E, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x25, 0x25, 0x25, 0x4F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x4E, 0x4E, 0x4E,
+ 0x4E, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4F, 0x05, 0x25, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x07,
+ 0x07, 0x07, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A,
+ 0x01, 0x7B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4E, 0x50, 0x51, 0x52, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x50, 0x1C, 0x50,
+ 0x1C, 0x50, 0x1C, 0x01, 0x7B, 0x52, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x25, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07,
+ 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x54, 0x4F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x51, 0x52, 0x52, 0x50, 0x52,
+ 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x50, 0x52, 0x51, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x4F,
+ 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x4F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x51, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51,
+ 0x51, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x25, 0x00, 0x00, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x51, 0x51, 0x00, 0x00, 0x51, 0x51, 0x51, 0x51,
+ 0x51, 0x51, 0x25, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x0A, 0x05,
+ 0x25, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4F, 0x0A, 0x05, 0x25, 0x4E, 0x4E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x25, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x25, 0x4E, 0x1C, 0x1C, 0x1C, 0x50, 0x1C, 0x50,
+ 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
+ 0x25, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x4E, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x53, 0x50, 0x53, 0x50, 0x53, 0x50, 0x50, 0x01,
+ 0x7B, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x05,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25,
+ 0x00, 0x00, 0x4F, 0x51, 0x52, 0x52, 0x53, 0x53, 0x55, 0x53, 0x55, 0x53,
+ 0x55, 0x53, 0x53, 0x52, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25,
+ 0x0A, 0x00, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07,
+ 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x51, 0x51, 0x52,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x7B, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x05,
+ 0x00, 0x00, 0x00, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x4F, 0x54, 0x54,
+ 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x54,
+ 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x4F, 0x4F,
+ 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x4E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x1C, 0x1C, 0x1C, 0x50,
+ 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x01, 0x7B, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x25, 0x00, 0x4F, 0x51, 0x52, 0x52, 0x50, 0x52, 0x50, 0x52,
+ 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x52, 0x51, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x51,
+ 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x25, 0x4F, 0x00, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51,
+ 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x25,
+ 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x05, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x0A,
+ 0x0A, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A,
+ 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x01, 0x7B, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x07,
+ 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x54, 0x4F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x4F, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x4F, 0x4F, 0x4F,
+ 0x4F, 0x4F, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask11RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x8F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x00, 0x0F, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00, 0x0C, 0x07, 0xC0, 0x03,
+ 0x3F, 0xFF, 0xE0, 0x00, 0x06, 0x3F, 0xF8, 0x00, 0x0F, 0xFF, 0x80, 0x00,
+ 0x07, 0xFF, 0xFE, 0x00, 0x18, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x0C, 0xFF, 0xFF, 0x00, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x07, 0x80,
+ 0x00, 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x07, 0xE0, 0x00, 0x80, 0xFC, 0x00,
+ 0x00, 0x0E, 0x3F, 0xF8, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x0C, 0xFF, 0xFF, 0x00, 0x9F, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0xFC,
+ 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x67, 0xF0, 0x00, 0x0C, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x8F, 0xFE, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0xFF, 0xFF, 0x80, 0x00,
+ 0x20, 0x3E, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00, 0x31, 0xFF, 0xC0, 0x03,
+ 0x3F, 0xFF, 0xC0, 0x00, 0x3B, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0x00, 0x00,
+ 0x3F, 0xFF, 0xF0, 0x00, 0x31, 0xFE, 0x00, 0x00, 0x27, 0xFF, 0xF8, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x03, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x1F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3B, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00,
+};
+
+const uint8_t sprite11RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x25, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x25, 0x4E, 0x4E, 0x4E, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x25, 0x4E, 0x00, 0x00,
+ 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x4E, 0x1C, 0x1C, 0x1C, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x25, 0x4E, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x01, 0x7B, 0x1C, 0x1C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x00, 0x00, 0x51,
+ 0x52, 0x52, 0x50, 0x52, 0x50, 0x53, 0x53, 0x53, 0x53, 0x53, 0x50, 0x52,
+ 0x52, 0x52, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x4F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x52,
+ 0x52, 0x52, 0x52, 0x52, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E,
+ 0x4E, 0x4E, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4F, 0x00, 0x00,
+ 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x25, 0x00, 0x00, 0x00, 0x25, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x1C,
+ 0x1C, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C,
+ 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x25, 0x25, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x01, 0x7B, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x51, 0x52, 0x52, 0x50,
+ 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x52, 0x51,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x51, 0x51, 0x52, 0x52, 0x53, 0x52, 0x53, 0x52, 0x53, 0x52,
+ 0x52, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x51, 0x51, 0x51,
+ 0x51, 0x51, 0x51, 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x4F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x25, 0x25, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E,
+ 0x4E, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x05, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x4F, 0x25, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x25, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x0A, 0x0A, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x4E, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
+ 0x07, 0x07, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A,
+ 0x07, 0x01, 0x7B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x25, 0x50, 0x50, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x50, 0x1C, 0x50,
+ 0x1C, 0x50, 0x1C, 0x01, 0x7B, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x4F, 0x54, 0x54, 0x07, 0x54, 0x07, 0x54,
+ 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x54, 0x4F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x51, 0x52, 0x52, 0x50, 0x52,
+ 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52, 0x52, 0x52, 0x51, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F,
+ 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x4F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52,
+ 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F,
+ 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x51, 0x51, 0x51, 0x51,
+ 0x51, 0x51, 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x25, 0x4E, 0x4E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x25, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
+ 0x25, 0x4E, 0x4E, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x00, 0x00, 0x00,
+ 0x25, 0x1C, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x1C, 0x25, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x4E, 0x1C, 0x1C, 0x1C, 0x50, 0x1C, 0x50, 0x50, 0x50, 0x50, 0x50, 0x1C,
+ 0x50, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x25, 0x4E, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x53,
+ 0x50, 0x53, 0x50, 0x53, 0x50, 0x50, 0x01, 0x7B, 0x1C, 0x1C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
+ 0x25, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x00, 0x00, 0x51, 0x52,
+ 0x52, 0x53, 0x53, 0x55, 0x53, 0x55, 0x53, 0x55, 0x53, 0x53, 0x53, 0x52,
+ 0x52, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x00, 0x05,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x25, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52,
+ 0x52, 0x52, 0x52, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25,
+ 0x0A, 0x0A, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07,
+ 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x00, 0x51,
+ 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x25, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x7B, 0x0A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x4F, 0x54, 0x54,
+ 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x54,
+ 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x00, 0x4F, 0x4F,
+ 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x25, 0x4E, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x4E, 0x4E, 0x4E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x25, 0x4E, 0x00, 0x00, 0x00, 0x25, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+ 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x1C, 0x1C, 0x1C, 0x50, 0x1C, 0x50,
+ 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x50, 0x1C, 0x1C, 0x1C, 0x25, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x4E, 0x50, 0x50,
+ 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x01,
+ 0x7B, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25,
+ 0x4E, 0x00, 0x00, 0x51, 0x52, 0x52, 0x50, 0x52, 0x50, 0x52, 0x50, 0x52,
+ 0x50, 0x52, 0x50, 0x52, 0x52, 0x52, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x51, 0x51, 0x52,
+ 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x51, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x25, 0x4F, 0x00, 0x00, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x4F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x25, 0x25, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x05,
+ 0x25, 0x25, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x00, 0x05,
+ 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25,
+ 0x0A, 0x0A, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07, 0x0A, 0x07,
+ 0x0A, 0x0A, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x25, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x7B, 0x0A, 0x0A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x25, 0x00, 0x00, 0x4F, 0x54, 0x54,
+ 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x07, 0x54, 0x54, 0x54,
+ 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
+ 0x54, 0x54, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x4F, 0x4F, 0x4F,
+ 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask11RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xC7, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x9F, 0xFF, 0xE0, 0x00, 0x00, 0x0F, 0x80, 0x00,
+ 0x0F, 0xFF, 0x80, 0x00, 0x04, 0x07, 0xE0, 0x00, 0x1C, 0xFF, 0x00, 0x00,
+ 0x06, 0x3F, 0xF8, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0xFF, 0xFE, 0x00,
+ 0x00, 0x0C, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80,
+ 0x00, 0x01, 0xF0, 0x00, 0x00, 0x02, 0x03, 0xE0, 0x00, 0x80, 0xFC, 0x00,
+ 0x00, 0x03, 0x1F, 0xFC, 0x00, 0xCF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x02, 0x7F, 0xFF, 0x80, 0x9F, 0xFF, 0xE0, 0x00, 0x00, 0x1F, 0xFE,
+ 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x33, 0xF8, 0x00, 0x0C, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x8F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x38, 0x00, 0x01, 0xFF, 0xFF, 0xC0, 0x00,
+ 0x60, 0x3E, 0x00, 0x03, 0x3F, 0xFF, 0xC0, 0x00, 0x31, 0xFF, 0xC0, 0x00,
+ 0x1F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x31, 0xFE, 0x00, 0x00,
+ 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x67, 0xFF, 0xF8, 0x00,
+ 0x00, 0x18, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0xBF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9F, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x3E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00,
+};
+
+const uint8_t sprite12LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x00, 0x57, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x56, 0x56,
+ 0x59, 0x58, 0x56, 0x7B, 0x59, 0x57, 0x56, 0x59, 0x59, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x58, 0x56, 0x59, 0x59, 0x58, 0x56, 0x59, 0x59, 0x58, 0x56, 0x59, 0x59,
+ 0x57, 0x56, 0x59, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0x59, 0x59, 0x59, 0x58,
+ 0x56, 0x59, 0x59, 0x58, 0x56, 0x59, 0x58, 0x56, 0x56, 0x57, 0x56, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x59, 0x59, 0x59, 0x59, 0x58, 0x56, 0x59, 0x56, 0x56, 0x59,
+ 0x58, 0x56, 0x59, 0x58, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59,
+ 0x59, 0x59, 0x59, 0x58, 0x56, 0x59, 0x58, 0x56, 0x59, 0x58, 0x56, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x59, 0x58, 0x56, 0x59,
+ 0x58, 0x56, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x57,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x59, 0x59, 0x58, 0x56, 0x59, 0x59, 0x58, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
+ 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x59, 0x58, 0x56,
+ 0x59, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x59, 0x5A, 0x5A, 0x57, 0x57, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x59, 0x59, 0x56, 0x59, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x59, 0x5A, 0x5A, 0x57, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x59, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x59, 0x5B, 0x5A, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57,
+ 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x5B,
+ 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5A,
+ 0x57, 0x5A, 0x59, 0x59, 0x5A, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x56,
+ 0x59, 0x57, 0x5A, 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x57, 0x5A, 0x5A, 0x59, 0x5C, 0x5B, 0x59, 0x5A, 0x5A, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x01, 0x01, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59,
+ 0x59, 0x59, 0x59, 0x57, 0x5A, 0x5A, 0x5B, 0x5A, 0x57, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5A, 0x59, 0x5B, 0x7B, 0x7B,
+ 0x5B, 0x59, 0x5A, 0x5A, 0x5D, 0x5D, 0x5D, 0x59, 0x5B, 0x5B, 0x5B, 0x5C,
+ 0x5B, 0x5B, 0x5C, 0x5B, 0x01, 0x5C, 0x5C, 0x01, 0x5B, 0x5B, 0x5B, 0x5C,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5B, 0x5A, 0x5A, 0x57,
+ 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5A, 0x5A, 0x5A,
+ 0x59, 0x5B, 0x7B, 0x7B, 0x5B, 0x59, 0x5A, 0x5D, 0x5D, 0x5D, 0x5E, 0x59,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x01, 0x5C, 0x5E, 0x5B, 0x5C,
+ 0x59, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5E, 0x5D, 0x5D, 0x5A, 0x5A, 0x59, 0x5C, 0x5B, 0x59, 0x5A, 0x5A, 0x5A,
+ 0x5D, 0x5E, 0x5E, 0x5A, 0x59, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5E, 0x5C,
+ 0x5E, 0x5E, 0x5B, 0x59, 0x59, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x5D, 0x5D, 0x5A, 0x5A, 0x59, 0x59,
+ 0x5A, 0x5A, 0x5A, 0x5D, 0x5E, 0x5D, 0x5E, 0x5A, 0x59, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5C, 0x5E, 0x5E, 0x5E, 0x5D, 0x59, 0x59, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x5D,
+ 0x5D, 0x5D, 0x5A, 0x5A, 0x5A, 0x5D, 0x5A, 0x5D, 0x5D, 0x5E, 0x5E, 0x5A,
+ 0x59, 0x57, 0x57, 0x5A, 0x5A, 0x5C, 0x5E, 0x5B, 0x5B, 0x5D, 0x59, 0x59,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5A, 0x5A, 0x5A, 0x5E, 0x5D, 0x5D, 0x5D, 0x5A, 0x5D, 0x5A, 0x5D, 0x5D,
+ 0x5E, 0x5D, 0x5A, 0x5A, 0x59, 0x57, 0x57, 0x5A, 0x5E, 0x5E, 0x5D, 0x5D,
+ 0x59, 0x59, 0x59, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x59,
+ 0x00, 0x00, 0x00, 0x56, 0x57, 0x5A, 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5A, 0x5E, 0x5D, 0x5D, 0x5E,
+ 0x5D, 0x5E, 0x5D, 0x5E, 0x5D, 0x5A, 0x5A, 0x56, 0x59, 0x57, 0x5A, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x59, 0x59, 0x59, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57,
+ 0x57, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x57, 0x57, 0x5B,
+ 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
+ 0x59, 0x5A, 0x5D, 0x5D, 0x5E, 0x5D, 0x5E, 0x5D, 0x5A, 0x5A, 0x56, 0x59,
+ 0x59, 0x5A, 0x5A, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x57, 0x57, 0x59, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x57, 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x57, 0x57, 0x5D, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x56, 0x59, 0x59, 0x5A, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x57, 0x57, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x57, 0x5B, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x57,
+ 0x57, 0x5A, 0x56, 0x56, 0x56, 0x59, 0x59, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x56,
+ 0x56, 0x56, 0x59, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x5B, 0x5A, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x59, 0x59, 0x56, 0x56, 0x59, 0x59, 0x59, 0x57, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x57,
+ 0x59, 0x56, 0x56, 0x56, 0x56, 0x59, 0x56, 0x56, 0x58, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x5B, 0x5A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59,
+ 0x59, 0x57, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59,
+ 0x57, 0x59, 0x59, 0x56, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59,
+ 0x56, 0x56, 0x56, 0x59, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x56, 0x56, 0x56, 0x59, 0x59, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x56, 0x59, 0x56, 0x59, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x56, 0x59, 0x56, 0x59, 0x59,
+ 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x59, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask12LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xB8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x04,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x0E, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x3F, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFC,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x07, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xC0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x80, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x0F, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xE0,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xF0, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x3F, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x0E,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite12LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x56, 0x56, 0x59, 0x57, 0x56, 0x56,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x56, 0x56, 0x59,
+ 0x58, 0x56, 0x56, 0x7B, 0x57, 0x56, 0x59, 0x59, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
+ 0x58, 0x59, 0x59, 0x58, 0x56, 0x59, 0x59, 0x58, 0x56, 0x59, 0x59, 0x57,
+ 0x56, 0x59, 0x57, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x59, 0x59, 0x59, 0x59, 0x59, 0x58, 0x59, 0x59, 0x59, 0x58,
+ 0x59, 0x59, 0x58, 0x56, 0x59, 0x58, 0x56, 0x56, 0x57, 0x56, 0x56, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x59, 0x59, 0x59, 0x59, 0x58, 0x59, 0x56, 0x56, 0x59, 0x58,
+ 0x56, 0x59, 0x58, 0x56, 0x56, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59,
+ 0x59, 0x59, 0x58, 0x56, 0x59, 0x58, 0x56, 0x59, 0x58, 0x56, 0x56, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x58, 0x56, 0x59, 0x58,
+ 0x56, 0x59, 0x59, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x57,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x59, 0x58, 0x56, 0x59, 0x59, 0x58, 0x56, 0x59, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
+ 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x58, 0x56, 0x59,
+ 0x58, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x59, 0x57, 0x57, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x59, 0x56, 0x59, 0x58, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x5A, 0x57, 0x59, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x59, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x5A, 0x57, 0x59, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57,
+ 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x5A,
+ 0x57, 0x59, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5A,
+ 0x57, 0x5A, 0x59, 0x59, 0x5A, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x01, 0x01, 0x5B, 0x5B,
+ 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00,
+ 0x5A, 0x5A, 0x5B, 0x5A, 0x59, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x57, 0x5A, 0x5A, 0x59, 0x5C, 0x5B, 0x59, 0x5A, 0x5A, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x01,
+ 0x5C, 0x5C, 0x01, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59,
+ 0x59, 0x59, 0x57, 0x5A, 0x5B, 0x5A, 0x5A, 0x57, 0x59, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5A, 0x59, 0x5B, 0x7B, 0x7B,
+ 0x5B, 0x59, 0x5A, 0x5A, 0x5D, 0x5D, 0x5D, 0x59, 0x5B, 0x5B, 0x5B, 0x5C,
+ 0x5B, 0x5B, 0x01, 0x5C, 0x5E, 0x5B, 0x5C, 0x59, 0x5B, 0x5B, 0x5B, 0x5C,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5B, 0x5A, 0x5A, 0x57,
+ 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5A, 0x5A, 0x5A,
+ 0x59, 0x5B, 0x7B, 0x7B, 0x5B, 0x59, 0x5A, 0x5A, 0x5D, 0x5D, 0x5E, 0x59,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5E, 0x5C, 0x5E, 0x5E, 0x5B, 0x59, 0x59,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5E, 0x5D, 0x5D, 0x5A, 0x5A, 0x59, 0x5C, 0x5B, 0x59, 0x5A, 0x5A, 0x5A,
+ 0x5D, 0x5E, 0x5D, 0x5A, 0x59, 0x5A, 0x5B, 0x5A, 0x5B, 0x5C, 0x5E, 0x5E,
+ 0x5E, 0x5D, 0x59, 0x59, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5A, 0x57, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x5D, 0x5D, 0x5A, 0x5A, 0x59, 0x59,
+ 0x5A, 0x5A, 0x5A, 0x5D, 0x5E, 0x5D, 0x5E, 0x5A, 0x59, 0x5B, 0x5A, 0x5B,
+ 0x5C, 0x5E, 0x5B, 0x5B, 0x5D, 0x59, 0x59, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x57,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x5A, 0x5E, 0x5D,
+ 0x5D, 0x5D, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5D, 0x5D, 0x5E, 0x5D, 0x5A,
+ 0x59, 0x57, 0x57, 0x5A, 0x5E, 0x5D, 0x5D, 0x59, 0x59, 0x59, 0x5A, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x5A, 0x5B, 0x5A, 0x57, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x56, 0x5A, 0x5E, 0x5D, 0x5D, 0x5D, 0x5A, 0x5A, 0x5A, 0x5D, 0x5D,
+ 0x5E, 0x5D, 0x5A, 0x5A, 0x59, 0x57, 0x57, 0x5A, 0x5D, 0x5D, 0x56, 0x59,
+ 0x59, 0x59, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x59,
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5A, 0x5A, 0x59, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x5A, 0x5E, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5E, 0x5D, 0x5A, 0x5A, 0x56, 0x59, 0x57, 0x5A, 0x56,
+ 0x56, 0x56, 0x59, 0x59, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57,
+ 0x57, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 0x5B,
+ 0x57, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56,
+ 0x59, 0x5A, 0x5D, 0x5D, 0x5D, 0x5D, 0x5E, 0x5D, 0x5A, 0x5A, 0x56, 0x59,
+ 0x57, 0x5A, 0x5A, 0x59, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x57, 0x57, 0x59, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x5A, 0x57, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x57, 0x57, 0x5D, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x56, 0x59, 0x57, 0x5A, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x57, 0x57, 0x56, 0x56, 0x56, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0x57, 0x59,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x57,
+ 0x5A, 0x5A, 0x56, 0x56, 0x56, 0x59, 0x59, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x56,
+ 0x56, 0x56, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x5A, 0x57, 0x57, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x59, 0x59, 0x56, 0x56, 0x59, 0x59, 0x59, 0x57, 0x59,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x57,
+ 0x59, 0x56, 0x56, 0x56, 0x56, 0x59, 0x56, 0x56, 0x58, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x57, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59,
+ 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x59, 0x57, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59,
+ 0x57, 0x59, 0x59, 0x56, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59,
+ 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x59, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59,
+ 0x56, 0x56, 0x56, 0x59, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x56, 0x56, 0x56, 0x59, 0x59, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x56, 0x56,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x56, 0x59, 0x56, 0x59, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x56, 0x56, 0x59, 0x56, 0x59,
+ 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56,
+ 0x56, 0x56, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask12LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x1E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7C,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xF8, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x03, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x07, 0xE0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xF0,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x78, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x1E, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0xFF, 0xFF,
+ 0x8F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0xFF, 0x80, 0x00,
+ 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite12RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x57, 0x00, 0x56,
+ 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x56, 0x57, 0x59,
+ 0x7B, 0x56, 0x58, 0x59, 0x56, 0x56, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x59, 0x56, 0x57,
+ 0x59, 0x59, 0x56, 0x58, 0x59, 0x59, 0x56, 0x58, 0x59, 0x59, 0x56, 0x58,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x57, 0x56,
+ 0x56, 0x58, 0x59, 0x56, 0x58, 0x59, 0x59, 0x56, 0x58, 0x59, 0x59, 0x59,
+ 0x58, 0x59, 0x59, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56,
+ 0x58, 0x59, 0x56, 0x58, 0x59, 0x56, 0x56, 0x59, 0x56, 0x58, 0x59, 0x59,
+ 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x56, 0x58, 0x59, 0x56, 0x58, 0x59, 0x56, 0x58, 0x59, 0x59, 0x59,
+ 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x56, 0x58, 0x59, 0x56, 0x58, 0x59,
+ 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59,
+ 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x58, 0x59, 0x59, 0x56,
+ 0x58, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 0x5A, 0x5A, 0x59, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59,
+ 0x56, 0x58, 0x59, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57,
+ 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A,
+ 0x5A, 0x59, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x58, 0x59, 0x56, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5B, 0x59, 0x59, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x57, 0x57, 0x57,
+ 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x59,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5A,
+ 0x5B, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59,
+ 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x57, 0x5A, 0x5A, 0x5A, 0x57, 0x59, 0x56, 0x00, 0x00, 0x00,
+ 0x59, 0x59, 0x59, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5C, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5B, 0x5A, 0x59, 0x59, 0x5A, 0x57, 0x5A, 0x59, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5B, 0x5A, 0x5A,
+ 0x57, 0x59, 0x59, 0x59, 0x59, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B,
+ 0x5B, 0x01, 0x01, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0x59, 0x5B, 0x5C, 0x59, 0x5A,
+ 0x5A, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
+ 0x57, 0x5A, 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5C, 0x5B, 0x5B, 0x5B, 0x01, 0x5C, 0x5C, 0x01, 0x5B, 0x5C, 0x5B, 0x5B,
+ 0x5C, 0x5B, 0x5B, 0x5B, 0x59, 0x5D, 0x5D, 0x5D, 0x5A, 0x5A, 0x59, 0x5B,
+ 0x7B, 0x7B, 0x5B, 0x59, 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57,
+ 0x57, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x59, 0x5C, 0x5B, 0x5E, 0x5C,
+ 0x01, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x59, 0x5E, 0x5D, 0x5D,
+ 0x5D, 0x5A, 0x59, 0x5B, 0x7B, 0x7B, 0x5B, 0x59, 0x5A, 0x5A, 0x5A, 0x59,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5A, 0x5B,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x59,
+ 0x59, 0x5B, 0x5E, 0x5E, 0x5C, 0x5E, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x59,
+ 0x5A, 0x5E, 0x5E, 0x5D, 0x5A, 0x5A, 0x5A, 0x59, 0x5B, 0x5C, 0x59, 0x5A,
+ 0x5A, 0x5D, 0x5D, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x59, 0x59, 0x5D, 0x5E, 0x5E, 0x5E, 0x5C, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x59, 0x5A, 0x5E, 0x5D, 0x5E, 0x5D, 0x5A, 0x5A, 0x5A,
+ 0x59, 0x59, 0x5A, 0x5A, 0x5D, 0x5D, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x57, 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x59, 0x59, 0x5D, 0x5B,
+ 0x5B, 0x5E, 0x5C, 0x5A, 0x5A, 0x57, 0x57, 0x59, 0x5A, 0x5E, 0x5E, 0x5D,
+ 0x5D, 0x5A, 0x5D, 0x5A, 0x5A, 0x5A, 0x5D, 0x5D, 0x5D, 0x5E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A, 0x5A, 0x5A, 0x57,
+ 0x56, 0x00, 0x00, 0x00, 0x59, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x59, 0x59, 0x59, 0x5D, 0x5D, 0x5E, 0x5E, 0x5A, 0x57, 0x57, 0x59,
+ 0x5A, 0x5A, 0x5D, 0x5E, 0x5D, 0x5D, 0x5A, 0x5D, 0x5A, 0x5D, 0x5D, 0x5D,
+ 0x5E, 0x5A, 0x5A, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x5A,
+ 0x5B, 0x57, 0x57, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x57,
+ 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x59, 0x59, 0x59, 0x56, 0x56, 0x56, 0x56,
+ 0x56, 0x5A, 0x57, 0x59, 0x56, 0x5A, 0x5A, 0x5D, 0x5E, 0x5D, 0x5E, 0x5D,
+ 0x5E, 0x5D, 0x5D, 0x5E, 0x5A, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x57, 0x5A, 0x5A, 0x57, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x59, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x59,
+ 0x59, 0x59, 0x59, 0x59, 0x59, 0x5A, 0x5A, 0x59, 0x59, 0x56, 0x5A, 0x5A,
+ 0x5D, 0x5E, 0x5D, 0x5E, 0x5D, 0x5D, 0x5A, 0x59, 0x59, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x57, 0x5B, 0x57, 0x56, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x5A,
+ 0x59, 0x59, 0x56, 0x5A, 0x5A, 0x5A, 0x5A, 0x5D, 0x57, 0x57, 0x57, 0x59,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x5A, 0x5B, 0x56, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x59, 0x56, 0x56,
+ 0x56, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x59, 0x59, 0x56, 0x56, 0x56, 0x5A, 0x57,
+ 0x57, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0x5B, 0x56,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58,
+ 0x56, 0x56, 0x59, 0x56, 0x56, 0x56, 0x56, 0x59, 0x57, 0x59, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x57, 0x59, 0x59,
+ 0x59, 0x56, 0x56, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59, 0x56, 0x56,
+ 0x56, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x59, 0x57, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x56, 0x56, 0x56,
+ 0x59, 0x56, 0x59, 0x56, 0x59, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x56,
+ 0x56, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x59, 0x57, 0x59, 0x57, 0x59, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x56, 0x59, 0x59, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x59, 0x57, 0x59,
+ 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x59, 0x56, 0x59,
+ 0x56, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x56, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask12RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x20, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x70, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFC, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x3F, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x0F, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x07, 0xE0, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x01, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF0, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x07, 0xC0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x0F, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x70, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF1,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite12RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x57, 0x59,
+ 0x56, 0x56, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x59, 0x56, 0x57,
+ 0x7B, 0x56, 0x56, 0x58, 0x59, 0x56, 0x56, 0x58, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x57, 0x59, 0x56,
+ 0x57, 0x59, 0x59, 0x56, 0x58, 0x59, 0x59, 0x56, 0x58, 0x59, 0x59, 0x58,
+ 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x56, 0x56, 0x57,
+ 0x56, 0x56, 0x58, 0x59, 0x56, 0x58, 0x59, 0x59, 0x58, 0x59, 0x59, 0x59,
+ 0x58, 0x59, 0x59, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x56,
+ 0x56, 0x58, 0x59, 0x56, 0x58, 0x59, 0x56, 0x56, 0x59, 0x58, 0x59, 0x59,
+ 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x56, 0x56, 0x58, 0x59, 0x56, 0x58, 0x59, 0x56, 0x58, 0x59, 0x59,
+ 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x59, 0x56, 0x58, 0x59, 0x56, 0x58,
+ 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59,
+ 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x56, 0x58, 0x59, 0x59,
+ 0x56, 0x58, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x57, 0x57, 0x59, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x58,
+ 0x59, 0x56, 0x58, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57,
+ 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59,
+ 0x57, 0x5A, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x58, 0x59, 0x56, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x56, 0x59, 0x57, 0x5A, 0x5B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x57, 0x57, 0x57,
+ 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x59,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x59, 0x57,
+ 0x5A, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59,
+ 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5B, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x56, 0x56, 0x59, 0x5A, 0x5B, 0x5A, 0x5A, 0x00, 0x00, 0x00, 0x00,
+ 0x59, 0x59, 0x59, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x01, 0x01,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5B, 0x5A, 0x59, 0x59, 0x5A, 0x57, 0x5A, 0x59, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x57, 0x5A, 0x5A, 0x5B,
+ 0x5A, 0x57, 0x59, 0x59, 0x59, 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5B,
+ 0x5B, 0x01, 0x5C, 0x5C, 0x01, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C,
+ 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5A, 0x5A, 0x59, 0x5B, 0x5C, 0x59, 0x5A,
+ 0x5A, 0x57, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59,
+ 0x57, 0x5A, 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5A,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5C, 0x5B, 0x5B, 0x5B, 0x59, 0x5C, 0x5B, 0x5E, 0x5C, 0x01, 0x5B, 0x5B,
+ 0x5C, 0x5B, 0x5B, 0x5B, 0x59, 0x5D, 0x5D, 0x5D, 0x5A, 0x5A, 0x59, 0x5B,
+ 0x7B, 0x7B, 0x5B, 0x59, 0x5A, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57,
+ 0x57, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x5B, 0x5C, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x59, 0x59, 0x5B, 0x5E,
+ 0x5E, 0x5C, 0x5E, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x59, 0x5E, 0x5D, 0x5D,
+ 0x5A, 0x5A, 0x59, 0x5B, 0x7B, 0x7B, 0x5B, 0x59, 0x5A, 0x5A, 0x5A, 0x59,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x57, 0x5A, 0x5A, 0x5B,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B,
+ 0x59, 0x59, 0x5D, 0x5E, 0x5E, 0x5E, 0x5C, 0x5B, 0x5A, 0x5B, 0x5A, 0x59,
+ 0x5A, 0x5D, 0x5E, 0x5D, 0x5A, 0x5A, 0x5A, 0x59, 0x5B, 0x5C, 0x59, 0x5A,
+ 0x5A, 0x5D, 0x5D, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56,
+ 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x59, 0x59, 0x5D, 0x5B, 0x5B, 0x5E, 0x5C,
+ 0x5B, 0x5A, 0x5B, 0x59, 0x5A, 0x5E, 0x5D, 0x5E, 0x5D, 0x5A, 0x5A, 0x5A,
+ 0x59, 0x59, 0x5A, 0x5A, 0x5D, 0x5D, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x56, 0x59, 0x57, 0x5A, 0x5B, 0x5A, 0x57, 0x57, 0x57, 0x57,
+ 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B,
+ 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5A, 0x59, 0x59,
+ 0x59, 0x5D, 0x5D, 0x5E, 0x5A, 0x57, 0x57, 0x59, 0x5A, 0x5D, 0x5E, 0x5D,
+ 0x5D, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5D, 0x5D, 0x5D, 0x5E, 0x5A, 0x5A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x5A, 0x5A, 0x5A, 0x57,
+ 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x57, 0x57, 0x5A, 0x5A, 0x5B, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A, 0x5B, 0x5A,
+ 0x5B, 0x5A, 0x59, 0x59, 0x59, 0x56, 0x5D, 0x5D, 0x5A, 0x57, 0x57, 0x59,
+ 0x5A, 0x5A, 0x5D, 0x5E, 0x5D, 0x5D, 0x5A, 0x5A, 0x5A, 0x5D, 0x5D, 0x5D,
+ 0x5E, 0x5A, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x59, 0x57,
+ 0x5B, 0x57, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x57, 0x57,
+ 0x57, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5B, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x59, 0x59, 0x56, 0x56,
+ 0x56, 0x5A, 0x57, 0x59, 0x56, 0x5A, 0x5A, 0x5D, 0x5E, 0x5D, 0x5D, 0x5D,
+ 0x5D, 0x5D, 0x5D, 0x5E, 0x5A, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x59, 0x57, 0x5A, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x57, 0x59, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x5A, 0x5A, 0x5A, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x59, 0x5A, 0x5A, 0x57, 0x59, 0x56, 0x5A, 0x5A,
+ 0x5D, 0x5E, 0x5D, 0x5D, 0x5D, 0x5D, 0x5A, 0x59, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x59, 0x57, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x57, 0x5A,
+ 0x57, 0x59, 0x56, 0x5A, 0x5A, 0x5A, 0x5A, 0x5D, 0x57, 0x57, 0x59, 0x56,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x57, 0x57, 0x5A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x59, 0x56, 0x56,
+ 0x56, 0x59, 0x59, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57,
+ 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x59, 0x59, 0x56, 0x56, 0x56, 0x5A, 0x5A,
+ 0x57, 0x59, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x57, 0x5A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58,
+ 0x56, 0x56, 0x59, 0x56, 0x56, 0x56, 0x56, 0x59, 0x57, 0x59, 0x57, 0x57,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A,
+ 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x57, 0x5A, 0x59, 0x57, 0x59, 0x59,
+ 0x59, 0x56, 0x56, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59, 0x56, 0x56,
+ 0x56, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x59, 0x57, 0x59,
+ 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x59, 0x57, 0x59,
+ 0x57, 0x59, 0x57, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x59, 0x56, 0x56, 0x56,
+ 0x59, 0x56, 0x59, 0x56, 0x59, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x56,
+ 0x56, 0x59, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x57,
+ 0x59, 0x57, 0x59, 0x57, 0x59, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56,
+ 0x56, 0x56, 0x59, 0x59, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x59, 0x57, 0x59,
+ 0x57, 0x59, 0x57, 0x59, 0x57, 0x59, 0x59, 0x59, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x59, 0x56, 0x59, 0x56, 0x59, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x59, 0x56, 0x59, 0x56,
+ 0x56, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x56, 0x59, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask12RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x78, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x3E, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x1F, 0x80, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xC0, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x03, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xE0, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x0F, 0x80, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x1E, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x78, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xF1,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x1F, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0xF8, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite13LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x12, 0x12, 0x17, 0x12, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x12, 0x12, 0x12, 0x17,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x11, 0x11, 0x11, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x15, 0x11, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x14, 0x11,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x14, 0x13, 0x10, 0x17,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x14, 0x14, 0x11, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x11,
+ 0x14, 0x14, 0x13, 0x10, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x15, 0x1E, 0x1E, 0x1E, 0x1E, 0x11, 0x11, 0x13, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x15, 0x15,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x15, 0x11, 0x11, 0x14, 0x14, 0x13, 0x17, 0x17, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x1E, 0x1E, 0x15, 0x10, 0x10,
+ 0x10, 0x10, 0x13, 0x14, 0x14, 0x14, 0x13, 0x13, 0x10, 0x13, 0x10, 0x13,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x11, 0x11, 0x14, 0x14, 0x13,
+ 0x10, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1E, 0x15,
+ 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x10,
+ 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17,
+ 0x17, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x15, 0x15,
+ 0x11, 0x11, 0x14, 0x13, 0x10, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x10, 0x13,
+ 0x10, 0x13, 0x10, 0x13, 0x10, 0x17, 0x17, 0x10, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x16, 0x16, 0x15, 0x15, 0x11, 0x11, 0x14, 0x13, 0x10, 0x17, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x10, 0x10,
+ 0x17, 0x15, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x11, 0x14, 0x13,
+ 0x10, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x11, 0x11, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x10, 0x13, 0x10, 0x10, 0x10, 0x17, 0x17, 0x1E, 0x1E, 0x1E, 0x16, 0x15,
+ 0x11, 0x14, 0x14, 0x10, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17,
+ 0x1E, 0x1E, 0x16, 0x16, 0x11, 0x14, 0x13, 0x10, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13,
+ 0x10, 0x13, 0x10, 0x10, 0x17, 0x1E, 0x1E, 0x16, 0x11, 0x14, 0x13, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17, 0x1E, 0x16,
+ 0x16, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x10, 0x13,
+ 0x10, 0x10, 0x17, 0x1E, 0x11, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x11, 0x11, 0x15, 0x15, 0x15, 0x11, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x16, 0x16, 0x11, 0x11, 0x10,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x01, 0x01,
+ 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x11, 0x11, 0x15,
+ 0x16, 0x15, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x3C, 0x24, 0x24, 0x01, 0x24, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x13, 0x13, 0x10, 0x10, 0x00, 0x00, 0x00, 0x10, 0x15, 0x15, 0x15,
+ 0x15, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x13,
+ 0x13, 0x11, 0x11, 0x15, 0x15, 0x15, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x1E, 0x1D, 0x3C, 0x3C, 0x24, 0x24, 0x13, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x11, 0x11, 0x00, 0x10,
+ 0x15, 0x16, 0x15, 0x15, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x13, 0x10, 0x10, 0x13, 0x11, 0x11, 0x15, 0x15, 0x11, 0x11,
+ 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x1E, 0x1E, 0x1E, 0x1D, 0x3C, 0x3C,
+ 0x24, 0x10, 0x13, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x11,
+ 0x11, 0x11, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x15, 0x11, 0x13, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x16, 0x16, 0x16, 0x13, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13, 0x1E, 0x1E, 0x1E,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x3C, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x16, 0x15,
+ 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x1E, 0x15, 0x16, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x17, 0x10, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1E,
+ 0x16, 0x16, 0x16, 0x15, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x11, 0x10, 0x01, 0x7B, 0x7B, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x13, 0x10, 0x13, 0x1E, 0x15, 0x15, 0x15, 0x15, 0x16, 0x1E, 0x1E, 0x1D,
+ 0x17, 0x17, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x13, 0x00, 0x00,
+ 0x00, 0x00, 0x13, 0x11, 0x13, 0x10, 0x7B, 0x7B, 0x7B, 0x16, 0x11, 0x10,
+ 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x13, 0x16, 0x15, 0x11, 0x15, 0x16,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x17, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x13, 0x10, 0x16, 0x16,
+ 0x16, 0x10, 0x11, 0x10, 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x13, 0x16,
+ 0x11, 0x11, 0x15, 0x15, 0x1E, 0x16, 0x16, 0x17, 0x17, 0x10, 0x13, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x1E, 0x16, 0x16, 0x15, 0x11, 0x13, 0x00, 0x00, 0x1E, 0x1E, 0x1E, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x10, 0x14, 0x11, 0x10, 0x11, 0x11, 0x14, 0x14,
+ 0x13, 0x10, 0x13, 0x13, 0x13, 0x13, 0x11, 0x15, 0x16, 0x12, 0x12, 0x17,
+ 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
+ 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x13, 0x00, 0x00,
+ 0x3C, 0x1E, 0x1E, 0x1E, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x10,
+ 0x11, 0x14, 0x14, 0x13, 0x13, 0x10, 0x1E, 0x13, 0x13, 0x13, 0x11, 0x1E,
+ 0x17, 0x17, 0x17, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15,
+ 0x11, 0x13, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x1E, 0x1E, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13, 0x10, 0x1E, 0x1E,
+ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11, 0x11, 0x1E,
+ 0x16, 0x16, 0x15, 0x15, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C,
+ 0x1E, 0x1E, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x12, 0x13, 0x13,
+ 0x10, 0x11, 0x12, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x11, 0x11, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15,
+ 0x15, 0x11, 0x11, 0x10, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x00, 0x00,
+ 0x3C, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x13, 0x13, 0x13, 0x13,
+ 0x12, 0x12, 0x11, 0x13, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x00, 0x00, 0x10, 0x10, 0x15, 0x15,
+ 0x15, 0x11, 0x11, 0x00, 0x1E, 0x3C, 0x3C, 0x3C, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x12, 0x12, 0x12, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x11, 0x15, 0x11, 0x00, 0x00, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x15, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x1D, 0x1D, 0x15, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x1E, 0x16,
+ 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x1D, 0x1D, 0x1E, 0x15, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x3C, 0x1D,
+ 0x1D, 0x1E, 0x1E, 0x16, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16,
+ 0x16, 0x16, 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x16, 0x15, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x16,
+ 0x15, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x1D, 0x1D,
+ 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C,
+ 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x15, 0x11, 0x13, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x3C, 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x15,
+ 0x15, 0x11, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x16,
+ 0x16, 0x16, 0x15, 0x15, 0x15, 0x11, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x1D, 0x1E, 0x1E,
+ 0x1E, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x11, 0x11, 0x13, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x1D, 0x1D, 0x1D,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15,
+ 0x11, 0x13, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x12, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x11, 0x11, 0x13, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x13, 0x13, 0x17, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x11, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x13,
+ 0x13, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x11, 0x14, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x13, 0x13, 0x13, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x11, 0x14, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x10, 0x17, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x14, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x10, 0x17, 0x17, 0x17, 0x10, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x14, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x00, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x12, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask13LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x06, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3E,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFD, 0xFC, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x1E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x0E,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x1F, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x07, 0xC0, 0x7F, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0x01, 0xF0, 0x1F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x78,
+ 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x01, 0x7F, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xE0, 0x17, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite13LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17,
+ 0x17, 0x17, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x17, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x10, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x10, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x13, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x11, 0x11, 0x11, 0x11, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x13, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x15, 0x11, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x11, 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x11, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x14, 0x14, 0x13, 0x10,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x14, 0x11, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x11,
+ 0x14, 0x14, 0x14, 0x13, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x15, 0x1E, 0x1E, 0x1E, 0x1E, 0x11, 0x11, 0x13, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x15, 0x15,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x15, 0x11, 0x11, 0x11, 0x14, 0x14, 0x13, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x1E, 0x1E, 0x15, 0x10, 0x10,
+ 0x10, 0x10, 0x13, 0x14, 0x14, 0x14, 0x13, 0x13, 0x10, 0x13, 0x10, 0x13,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x17, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x13, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1E, 0x15,
+ 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x10,
+ 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17,
+ 0x17, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x15, 0x15,
+ 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x10, 0x13,
+ 0x10, 0x13, 0x10, 0x13, 0x10, 0x17, 0x17, 0x10, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x16, 0x16, 0x15, 0x15, 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x10, 0x10,
+ 0x17, 0x15, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x15, 0x11, 0x11, 0x14,
+ 0x13, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x11, 0x11, 0x11, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x10, 0x13, 0x10, 0x10, 0x10, 0x17, 0x17, 0x1E, 0x1E, 0x1E, 0x16, 0x15,
+ 0x15, 0x11, 0x14, 0x14, 0x10, 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17,
+ 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x14, 0x13, 0x10, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13,
+ 0x10, 0x13, 0x10, 0x10, 0x17, 0x1E, 0x1E, 0x16, 0x15, 0x11, 0x14, 0x13,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17, 0x1E, 0x16,
+ 0x16, 0x11, 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x10, 0x13,
+ 0x10, 0x10, 0x17, 0x1E, 0x11, 0x14, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x11, 0x11, 0x15, 0x15, 0x15, 0x11, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x01, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x13, 0x10, 0x13, 0x10, 0x10, 0x17, 0x11, 0x15, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x16, 0x16, 0x11, 0x11, 0x10,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x24, 0x24, 0x01, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x17, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x11, 0x15, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x11, 0x11, 0x15,
+ 0x16, 0x15, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x3C, 0x3C,
+ 0x3C, 0x24, 0x24, 0x10, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x13, 0x13, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x15, 0x15,
+ 0x15, 0x15, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x13,
+ 0x13, 0x11, 0x11, 0x15, 0x15, 0x15, 0x11, 0x10, 0x10, 0x13, 0x13, 0x13,
+ 0x13, 0x1E, 0x1D, 0x1D, 0x3C, 0x3C, 0x3C, 0x10, 0x10, 0x14, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x11, 0x11, 0x00, 0x10,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x13, 0x10, 0x10, 0x13, 0x11, 0x11, 0x15, 0x15, 0x11, 0x11,
+ 0x10, 0x13, 0x13, 0x13, 0x13, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x1D, 0x10,
+ 0x10, 0x10, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x11,
+ 0x11, 0x11, 0x1E, 0x16, 0x16, 0x16, 0x15, 0x15, 0x11, 0x11, 0x13, 0x00,
+ 0x00, 0x00, 0x00, 0x17, 0x11, 0x11, 0x16, 0x16, 0x16, 0x13, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x13, 0x13, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1D, 0x1D, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x16, 0x15,
+ 0x11, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x10, 0x7B, 0x7B,
+ 0x7B, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x13, 0x13,
+ 0x1E, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x17, 0x10, 0x10, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1E,
+ 0x16, 0x16, 0x16, 0x15, 0x11, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x11, 0x10, 0x01, 0x7B, 0x7B, 0x16, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x13, 0x10, 0x13, 0x1E, 0x15, 0x15, 0x15, 0x16, 0x1E, 0x1E, 0x16, 0x17,
+ 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x13, 0x17, 0x00,
+ 0x00, 0x00, 0x17, 0x11, 0x13, 0x10, 0x7B, 0x7B, 0x7B, 0x16, 0x11, 0x10,
+ 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x13, 0x16, 0x15, 0x11, 0x15, 0x15,
+ 0x1E, 0x16, 0x12, 0x17, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15,
+ 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x11, 0x13, 0x13, 0x10, 0x16, 0x16,
+ 0x16, 0x10, 0x11, 0x10, 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x13, 0x16,
+ 0x11, 0x11, 0x15, 0x15, 0x16, 0x12, 0x17, 0x17, 0x10, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x1E, 0x16, 0x16, 0x15, 0x11, 0x13, 0x17, 0x00, 0x1E, 0x1E, 0x1E, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x10, 0x14, 0x11, 0x10, 0x11, 0x11, 0x14, 0x14,
+ 0x13, 0x10, 0x13, 0x13, 0x13, 0x13, 0x11, 0x1E, 0x17, 0x17, 0x17, 0x13,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
+ 0x11, 0x11, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x13, 0x17, 0x00,
+ 0x1D, 0x1E, 0x1E, 0x1E, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x10,
+ 0x11, 0x14, 0x14, 0x13, 0x13, 0x10, 0x1E, 0x12, 0x13, 0x13, 0x11, 0x12,
+ 0x12, 0x17, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x11, 0x11, 0x1E, 0x16, 0x16, 0x15,
+ 0x11, 0x13, 0x13, 0x00, 0x00, 0x01, 0x3C, 0x1E, 0x1E, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13, 0x10, 0x1E, 0x1E,
+ 0x1E, 0x12, 0x12, 0x12, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11, 0x11, 0x1E,
+ 0x16, 0x16, 0x15, 0x15, 0x11, 0x13, 0x13, 0x00, 0x1E, 0x00, 0x01, 0x3C,
+ 0x1E, 0x1E, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x12, 0x13, 0x13,
+ 0x10, 0x11, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x11, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15,
+ 0x15, 0x11, 0x11, 0x10, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x13, 0x00,
+ 0x00, 0x1E, 0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x13, 0x13, 0x13, 0x13,
+ 0x12, 0x12, 0x11, 0x13, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x00, 0x00, 0x00, 0x10, 0x10, 0x15,
+ 0x15, 0x11, 0x11, 0x13, 0x00, 0x01, 0x1E, 0x1E, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x12, 0x12, 0x12, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x10, 0x15, 0x11, 0x13, 0x00, 0x10, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x15, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x1D, 0x1D, 0x15, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x1E, 0x16,
+ 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x1D, 0x1D, 0x1E, 0x15, 0x17,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x3C, 0x1D,
+ 0x1D, 0x1E, 0x1E, 0x15, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16,
+ 0x16, 0x16, 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x16, 0x11, 0x17, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x16,
+ 0x15, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x1D, 0x1D,
+ 0x1E, 0x1E, 0x1E, 0x16, 0x15, 0x13, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1E, 0x1E,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C,
+ 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x11, 0x17, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x3C, 0x3C, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x15,
+ 0x15, 0x11, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E,
+ 0x16, 0x16, 0x16, 0x15, 0x15, 0x11, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x1D, 0x1D, 0x1D,
+ 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x11, 0x13, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C, 0x3C, 0x1D,
+ 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15,
+ 0x11, 0x11, 0x13, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x12, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x3C, 0x3C,
+ 0x3C, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x11, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16,
+ 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11, 0x13, 0x13, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x11,
+ 0x13, 0x13, 0x00, 0x00, 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, 0x11, 0x11, 0x14, 0x14, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11,
+ 0x11, 0x11, 0x11, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x11,
+ 0x11, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x11, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x14, 0x14, 0x14, 0x10, 0x00, 0x14, 0x17, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x00, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x14, 0x14, 0x14, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x00, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask13LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFD, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x1F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x07,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x3F, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x0F, 0xC0, 0x7F, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x03, 0xE0, 0x1F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF8,
+ 0x07, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x61, 0x7F, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xC0, 0x17, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite13RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12,
+ 0x12, 0x12, 0x12, 0x12, 0x17, 0x12, 0x12, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x17, 0x17, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x17, 0x12, 0x12, 0x12, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x17, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11,
+ 0x11, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x13, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x11, 0x15, 0x14, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x17, 0x10, 0x13, 0x14, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x11, 0x14, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x17, 0x10, 0x13, 0x14, 0x14, 0x11, 0x15, 0x15, 0x15,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x11, 0x14, 0x14, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x17, 0x13, 0x14, 0x14, 0x11,
+ 0x11, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x13, 0x11, 0x11, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x10,
+ 0x13, 0x14, 0x14, 0x11, 0x11, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x13, 0x10, 0x13, 0x10, 0x13, 0x13, 0x14, 0x14, 0x14, 0x13, 0x10, 0x10,
+ 0x10, 0x10, 0x15, 0x1E, 0x1E, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x17, 0x10, 0x13, 0x14, 0x11, 0x11, 0x15, 0x15, 0x16, 0x16,
+ 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x17, 0x17, 0x10, 0x10, 0x13,
+ 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x15, 0x1E, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x10, 0x13, 0x14, 0x11, 0x11,
+ 0x15, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x10, 0x17, 0x17, 0x10,
+ 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x10,
+ 0x13, 0x14, 0x11, 0x11, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x15, 0x17,
+ 0x10, 0x10, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x17, 0x10, 0x14, 0x14, 0x11, 0x15, 0x16, 0x1E, 0x1E,
+ 0x1E, 0x17, 0x17, 0x10, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x13, 0x14, 0x11,
+ 0x16, 0x16, 0x1E, 0x1E, 0x17, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x13, 0x14, 0x11, 0x16, 0x1E, 0x1E, 0x17, 0x10, 0x10, 0x13, 0x10,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x16, 0x16, 0x1E, 0x17, 0x10,
+ 0x10, 0x13, 0x10, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x11,
+ 0x1E, 0x17, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x17, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x11, 0x15, 0x15, 0x15, 0x11, 0x11,
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x15, 0x15,
+ 0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x13, 0x14, 0x01, 0x01, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x11, 0x11, 0x16,
+ 0x16, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x10, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x24,
+ 0x01, 0x24, 0x24, 0x3C, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10,
+ 0x10, 0x11, 0x15, 0x16, 0x15, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x16, 0x15,
+ 0x10, 0x00, 0x11, 0x11, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x13, 0x24, 0x24, 0x3C, 0x3C, 0x1D, 0x1E, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x10, 0x10, 0x11, 0x15, 0x15, 0x15, 0x11, 0x11, 0x13,
+ 0x13, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11,
+ 0x15, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x13, 0x10, 0x24, 0x3C, 0x3C, 0x1D, 0x1E,
+ 0x1E, 0x1E, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x11, 0x11, 0x15, 0x15,
+ 0x11, 0x11, 0x13, 0x10, 0x10, 0x13, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x13, 0x11, 0x15, 0x16, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x13, 0x10, 0x3C,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x16, 0x16, 0x16, 0x11, 0x11,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x15, 0x16, 0x16, 0x16,
+ 0x1E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x10, 0x17, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x16, 0x15, 0x1E, 0x13,
+ 0x13, 0x13, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11,
+ 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x17, 0x17, 0x1D, 0x1E, 0x1E, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x1E, 0x13, 0x10, 0x13, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x16, 0x7B, 0x7B, 0x01, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x17,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x16, 0x15, 0x11, 0x15, 0x16, 0x13, 0x10, 0x13,
+ 0x14, 0x11, 0x11, 0x11, 0x10, 0x11, 0x16, 0x7B, 0x7B, 0x7B, 0x10, 0x13,
+ 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x15, 0x16, 0x16, 0x1E,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x13, 0x10, 0x17, 0x17, 0x16, 0x16, 0x1E, 0x15, 0x15, 0x11, 0x11,
+ 0x16, 0x13, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x10, 0x11, 0x10, 0x16,
+ 0x16, 0x16, 0x10, 0x13, 0x13, 0x11, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11,
+ 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x17, 0x12, 0x12, 0x16,
+ 0x15, 0x11, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x14, 0x14, 0x11, 0x11,
+ 0x10, 0x11, 0x14, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x1E, 0x1E, 0x1E,
+ 0x00, 0x00, 0x13, 0x11, 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x15, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x10, 0x17, 0x17, 0x17, 0x1E, 0x11, 0x13, 0x13, 0x13, 0x1E, 0x10, 0x13,
+ 0x13, 0x14, 0x14, 0x11, 0x10, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x1E, 0x1E, 0x1E, 0x3C, 0x00, 0x00, 0x13, 0x11, 0x15, 0x15, 0x16, 0x16,
+ 0x1E, 0x11, 0x11, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x10, 0x12, 0x12, 0x12, 0x12, 0x12,
+ 0x1E, 0x1E, 0x10, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x1E, 0x1E, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x15, 0x15, 0x15, 0x15, 0x10, 0x11, 0x11, 0x15, 0x15, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11, 0x11, 0x13,
+ 0x13, 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x10, 0x13, 0x13, 0x12, 0x13,
+ 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x1E, 0x1E, 0x3C, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x11, 0x15, 0x15, 0x15, 0x10, 0x10, 0x00, 0x00, 0x11, 0x11,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x15, 0x15,
+ 0x13, 0x11, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x00, 0x00, 0x00, 0x3C, 0x00, 0x11, 0x15, 0x11, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x12, 0x12, 0x12, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x3C, 0x3C, 0x3C, 0x1E, 0x00, 0x10, 0x11, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x15, 0x1D,
+ 0x1D, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x15, 0x1E, 0x1D, 0x1D, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x1E, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x11, 0x16, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x16, 0x16,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x15, 0x16, 0x1E, 0x1E, 0x1D,
+ 0x1D, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x15,
+ 0x16, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x1E, 0x1E,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x17, 0x11, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x3C,
+ 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x15, 0x15, 0x16, 0x16, 0x1E,
+ 0x1E, 0x1D, 0x1D, 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11, 0x15,
+ 0x15, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x3C, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x13, 0x11, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E,
+ 0x1D, 0x1D, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11, 0x11, 0x15, 0x15, 0x15, 0x16,
+ 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1D, 0x3C, 0x3C, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x13, 0x11,
+ 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1D, 0x1D, 0x1D, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x13, 0x13, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16,
+ 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x3C, 0x3C, 0x3C, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x13, 0x13, 0x11, 0x11, 0x11, 0x15,
+ 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x1E, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x13,
+ 0x13, 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x11, 0x11,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x17, 0x13, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x15,
+ 0x15, 0x15, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14,
+ 0x11, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x17, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x10, 0x13, 0x17, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x14, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x17, 0x17, 0x17, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x10, 0x17, 0x17, 0x17, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x14, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x14, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask13RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x60, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x7C, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x7F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0xBF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x7F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0x78, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x70, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x03, 0xE0, 0x00, 0x00,
+ 0x01, 0xFF, 0xFF, 0xF8, 0x0F, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xE0,
+ 0x1E, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x80, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xE8, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite13RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x12, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x17, 0x17,
+ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x12, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x13, 0x13, 0x13, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x14, 0x14,
+ 0x13, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x10, 0x13, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x10, 0x17, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x11,
+ 0x11, 0x11, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x13, 0x14,
+ 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x11, 0x15, 0x14, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x10, 0x13, 0x14, 0x14, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x11, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x13, 0x14, 0x14, 0x14, 0x11, 0x15, 0x15, 0x15,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x11, 0x14, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x14, 0x14, 0x11, 0x11,
+ 0x11, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x13, 0x11, 0x11, 0x1E, 0x1E, 0x1E, 0x1E,
+ 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x13,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x17, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x13, 0x10, 0x13, 0x10, 0x13, 0x13, 0x14, 0x14, 0x14, 0x13, 0x10, 0x10,
+ 0x10, 0x10, 0x15, 0x1E, 0x1E, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x15, 0x15, 0x16, 0x16,
+ 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x17, 0x17, 0x10, 0x10, 0x13,
+ 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x14, 0x14, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x15, 0x1E, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11,
+ 0x15, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x10, 0x17, 0x17, 0x10,
+ 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x13,
+ 0x14, 0x11, 0x11, 0x15, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x15, 0x17,
+ 0x10, 0x10, 0x10, 0x13, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x17, 0x10, 0x14, 0x14, 0x11, 0x15, 0x15, 0x16, 0x1E, 0x1E,
+ 0x1E, 0x17, 0x17, 0x10, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x11, 0x11, 0x11,
+ 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x13, 0x14, 0x11, 0x15,
+ 0x16, 0x16, 0x1E, 0x1E, 0x17, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14,
+ 0x14, 0x14, 0x11, 0x11, 0x11, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x13, 0x14, 0x11, 0x15, 0x16, 0x1E, 0x1E, 0x17, 0x10, 0x10, 0x13, 0x10,
+ 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x13, 0x11, 0x11, 0x11, 0x14, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x14, 0x11, 0x16, 0x16, 0x1E, 0x17, 0x10,
+ 0x10, 0x13, 0x10, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x11,
+ 0x1E, 0x17, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13,
+ 0x14, 0x13, 0x14, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x14, 0x14, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x15, 0x11, 0x17, 0x10, 0x10, 0x13, 0x10, 0x13, 0x13, 0x14,
+ 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x01, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x11, 0x15, 0x15, 0x15, 0x11, 0x11,
+ 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x15, 0x11, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x17, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x14, 0x14, 0x13, 0x14, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x01, 0x24,
+ 0x24, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10, 0x11, 0x11, 0x16,
+ 0x16, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x11, 0x15, 0x15, 0x15, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x10, 0x24, 0x24, 0x3C, 0x3C, 0x3C, 0x13, 0x13, 0x13, 0x13, 0x13, 0x10,
+ 0x10, 0x11, 0x15, 0x16, 0x15, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x10, 0x00, 0x11, 0x11, 0x14, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14,
+ 0x11, 0x14, 0x14, 0x10, 0x10, 0x3C, 0x3C, 0x3C, 0x1D, 0x1D, 0x1E, 0x13,
+ 0x13, 0x13, 0x13, 0x10, 0x10, 0x11, 0x15, 0x15, 0x15, 0x11, 0x11, 0x13,
+ 0x13, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x11,
+ 0x15, 0x15, 0x16, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x14, 0x11,
+ 0x14, 0x11, 0x14, 0x11, 0x14, 0x11, 0x10, 0x10, 0x10, 0x1D, 0x1D, 0x1D,
+ 0x1D, 0x1E, 0x1E, 0x13, 0x13, 0x13, 0x13, 0x10, 0x11, 0x11, 0x15, 0x15,
+ 0x11, 0x11, 0x13, 0x10, 0x10, 0x13, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x13, 0x11, 0x15, 0x16, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11,
+ 0x11, 0x14, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10,
+ 0x10, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x13, 0x13, 0x10, 0x10,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x16, 0x16, 0x16, 0x11, 0x11,
+ 0x17, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11, 0x15, 0x16, 0x16, 0x16,
+ 0x1E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x10, 0x10, 0x17, 0x1E, 0x1E, 0x1E, 0x16, 0x16, 0x15, 0x1E,
+ 0x13, 0x13, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x7B,
+ 0x7B, 0x7B, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11,
+ 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x17, 0x16, 0x1E, 0x1E,
+ 0x16, 0x15, 0x15, 0x15, 0x1E, 0x13, 0x10, 0x13, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x16, 0x7B, 0x7B, 0x01, 0x10, 0x11, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x13, 0x11, 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10,
+ 0x17, 0x12, 0x16, 0x1E, 0x15, 0x15, 0x11, 0x15, 0x16, 0x13, 0x10, 0x13,
+ 0x14, 0x11, 0x11, 0x11, 0x10, 0x11, 0x16, 0x7B, 0x7B, 0x7B, 0x10, 0x13,
+ 0x11, 0x17, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11, 0x15, 0x16, 0x16, 0x1E,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x10, 0x17, 0x17, 0x12, 0x16, 0x15, 0x15, 0x11, 0x11,
+ 0x16, 0x13, 0x10, 0x13, 0x14, 0x11, 0x11, 0x11, 0x10, 0x11, 0x10, 0x16,
+ 0x16, 0x16, 0x10, 0x13, 0x13, 0x11, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11,
+ 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x11, 0x11, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x17, 0x17, 0x17,
+ 0x1E, 0x11, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x14, 0x14, 0x11, 0x11,
+ 0x10, 0x11, 0x14, 0x10, 0x10, 0x10, 0x13, 0x13, 0x13, 0x1E, 0x1E, 0x1E,
+ 0x00, 0x13, 0x13, 0x11, 0x15, 0x16, 0x16, 0x1E, 0x11, 0x11, 0x15, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x13, 0x17, 0x12, 0x12, 0x11, 0x13, 0x13, 0x12, 0x1E, 0x10, 0x13,
+ 0x13, 0x14, 0x14, 0x11, 0x10, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
+ 0x1E, 0x1E, 0x1E, 0x1D, 0x00, 0x13, 0x13, 0x11, 0x15, 0x15, 0x16, 0x16,
+ 0x1E, 0x11, 0x11, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x12, 0x12, 0x12, 0x1E,
+ 0x1E, 0x1E, 0x10, 0x13, 0x13, 0x13, 0x13, 0x10, 0x13, 0x14, 0x14, 0x14,
+ 0x14, 0x14, 0x14, 0x1E, 0x1E, 0x3C, 0x01, 0x00, 0x00, 0x13, 0x11, 0x11,
+ 0x15, 0x15, 0x15, 0x15, 0x10, 0x11, 0x11, 0x15, 0x15, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x11,
+ 0x13, 0x13, 0x12, 0x12, 0x12, 0x12, 0x11, 0x10, 0x13, 0x13, 0x12, 0x13,
+ 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x1E, 0x1E, 0x3C, 0x01, 0x7B, 0x1E,
+ 0x13, 0x11, 0x11, 0x15, 0x15, 0x10, 0x10, 0x00, 0x00, 0x00, 0x11, 0x11,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x15, 0x15, 0x15,
+ 0x13, 0x11, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x3C, 0x3C, 0x3C, 0x3C,
+ 0x7B, 0x7B, 0x1E, 0x00, 0x13, 0x11, 0x15, 0x10, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15,
+ 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x12, 0x12, 0x12, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x1E, 0x1E, 0x01, 0x00, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11, 0x15, 0x11,
+ 0x15, 0x11, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x15, 0x1D,
+ 0x1D, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E,
+ 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17,
+ 0x17, 0x15, 0x1E, 0x1D, 0x1D, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x1E, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x17, 0x17, 0x15, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x16, 0x16,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x11, 0x16, 0x1E, 0x1E, 0x1D,
+ 0x1D, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x15,
+ 0x16, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x1E, 0x1E,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x17, 0x13, 0x15, 0x16, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x3C,
+ 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16, 0x16,
+ 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x11, 0x15, 0x16, 0x16, 0x1E, 0x1E,
+ 0x1E, 0x1D, 0x1D, 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11, 0x15,
+ 0x15, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x3C, 0x3C, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16,
+ 0x15, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x13, 0x11, 0x15, 0x15, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1D,
+ 0x1D, 0x1D, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15, 0x16, 0x15,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11, 0x15, 0x15, 0x15, 0x16, 0x16,
+ 0x16, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x3C, 0x3C, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x13, 0x11, 0x11,
+ 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D,
+ 0x1D, 0x3C, 0x3C, 0x3C, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x13, 0x11, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D, 0x1D, 0x3C, 0x3C, 0x3C, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x11, 0x11, 0x11, 0x15, 0x15,
+ 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x1D, 0x1D,
+ 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x10, 0x10, 0x13, 0x13, 0x13, 0x13, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13,
+ 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x16,
+ 0x16, 0x16, 0x16, 0x16, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x15, 0x15, 0x17,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x13, 0x13,
+ 0x13, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+ 0x15, 0x15, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14,
+ 0x14, 0x11, 0x11, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+ 0x11, 0x11, 0x11, 0x11, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x14, 0x14, 0x11, 0x11, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x11, 0x17, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x17, 0x13, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x13, 0x13, 0x17, 0x17, 0x00, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x17, 0x14, 0x00, 0x10, 0x14, 0x14, 0x14, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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, 0x17, 0x17, 0x17, 0x17, 0x17, 0x00, 0x17, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x14, 0x14, 0x14, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask13RB[] = {
+ 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xE0, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0xFE, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xBF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xE0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x03, 0xF0, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xF8, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xE0,
+ 0x1F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFE, 0x86, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xE8, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite14LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x5F, 0x60, 0x00, 0x00,
+ 0x60, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x5F, 0x61, 0x61,
+ 0x5F, 0x60, 0x61, 0x61, 0x61, 0x60, 0x60, 0x5F, 0x60, 0x60, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x60, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x61, 0x5F,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x60, 0x00, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 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, 0x5F, 0x60,
+ 0x61, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61,
+ 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61,
+ 0x60, 0x60, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x62,
+ 0x62, 0x62, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x62, 0x63, 0x63, 0x62, 0x62, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x60, 0x60, 0x00, 0x00, 0x62, 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x62,
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x61, 0x61, 0x61, 0x5F,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x62, 0x63, 0x63, 0x62, 0x63,
+ 0x63, 0x62, 0x62, 0x62, 0x62, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x61,
+ 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61,
+ 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x60,
+ 0x63, 0x63, 0x63, 0x63, 0x62, 0x63, 0x62, 0x62, 0x62, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x01,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61,
+ 0x61, 0x5F, 0x60, 0x60, 0x60, 0x65, 0x65, 0x63, 0x62, 0x63, 0x63, 0x62,
+ 0x62, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x64, 0x61, 0x64, 0x01, 0x64, 0x61, 0x60, 0x60, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x5F, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x60, 0x60, 0x65, 0x65,
+ 0x63, 0x63, 0x62, 0x63, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x64, 0x63, 0x61, 0x61,
+ 0x61, 0x5F, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x5F, 0x64, 0x61, 0x64, 0x61, 0x60, 0x60, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x61,
+ 0x61, 0x61, 0x60, 0x65, 0x65, 0x62, 0x63, 0x62, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
+ 0x7B, 0x7B, 0x63, 0x61, 0x64, 0x61, 0x01, 0x61, 0x64, 0x60, 0x60, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x01, 0x64, 0x64, 0x64, 0x60, 0x60, 0x61,
+ 0x5F, 0x61, 0x64, 0x60, 0x60, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x60, 0x60, 0x65, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x7B, 0x01, 0x7B, 0x7B, 0x63, 0x61, 0x64, 0x61, 0x01,
+ 0x64, 0x60, 0x60, 0x64, 0x61, 0x64, 0x61, 0x64, 0x64, 0x64, 0x01, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64, 0x64, 0x60, 0x60, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x7B, 0x7B, 0x7B, 0x7B, 0x63,
+ 0x64, 0x61, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64,
+ 0x64, 0x61, 0x64, 0x61, 0x01, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x5F, 0x5F, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x63,
+ 0x7B, 0x7B, 0x63, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x5F, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x01, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x60, 0x01, 0x64, 0x60, 0x60,
+ 0x64, 0x64, 0x61, 0x64, 0x61, 0x5F, 0x61, 0x64, 0x61, 0x61, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x60, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x63, 0x63, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x60, 0x60, 0x64, 0x64, 0x64, 0x01,
+ 0x01, 0x01, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x60,
+ 0x01, 0x64, 0x60, 0x60, 0x64, 0x64, 0x64, 0x64, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x64, 0x64, 0x64, 0x00, 0x00, 0x63, 0x63, 0x62, 0x62, 0x62, 0x62,
+ 0x62, 0x62, 0x60, 0x60, 0x00, 0x63, 0x61, 0x61, 0x61, 0x61, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x60, 0x60, 0x64, 0x60, 0x01, 0x64, 0x60, 0x60,
+ 0x64, 0x01, 0x01, 0x60, 0x61, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x66, 0x64, 0x64, 0x60, 0x60, 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65, 0x63, 0x63, 0x63,
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x60, 0x00, 0x61, 0x61, 0x64,
+ 0x64, 0x64, 0x64, 0x01, 0x01, 0x64, 0x64, 0x64, 0x60, 0x60, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x5F, 0x01, 0x60, 0x60, 0x61, 0x61, 0x64, 0x5F, 0x64,
+ 0x5F, 0x60, 0x60, 0x66, 0x60, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x65, 0x65, 0x65, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x60, 0x60, 0x60,
+ 0x63, 0x61, 0x61, 0x64, 0x64, 0x64, 0x64, 0x60, 0x60, 0x5F, 0x64, 0x5F,
+ 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x01, 0x60, 0x60, 0x61, 0x61,
+ 0x61, 0x5F, 0x64, 0x5F, 0x64, 0x60, 0x60, 0x60, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x61, 0x64, 0x5F, 0x64, 0x5F,
+ 0x66, 0x5F, 0x64, 0x5F, 0x65, 0x65, 0x65, 0x63, 0x63, 0x63, 0x63, 0x63,
+ 0x63, 0x62, 0x62, 0x60, 0x63, 0x63, 0x61, 0x64, 0x01, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x01, 0x60,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x61, 0x61,
+ 0x5F, 0x64, 0x5F, 0x66, 0x60, 0x64, 0x5F, 0x64, 0x65, 0x65, 0x63, 0x62,
+ 0x62, 0x62, 0x62, 0x62, 0x62, 0x60, 0x60, 0x60, 0x00, 0x00, 0x63, 0x64,
+ 0x60, 0x01, 0x01, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x60,
+ 0x60, 0x01, 0x60, 0x60, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01, 0x01, 0x5F,
+ 0x5F, 0x5F, 0x01, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x60, 0x5F, 0x5F,
+ 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66, 0x60, 0x64, 0x5F, 0x5F, 0x5F,
+ 0x00, 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x62, 0x60,
+ 0x00, 0x00, 0x63, 0x64, 0x5F, 0x60, 0x60, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x01, 0x01, 0x60, 0x60, 0x61, 0x01, 0x01, 0x60, 0x60,
+ 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x60, 0x60, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x64,
+ 0x5F, 0x5F, 0x61, 0x00, 0x00, 0x00, 0x00, 0x63, 0x62, 0x62, 0x62, 0x62,
+ 0x62, 0x62, 0x60, 0x60, 0x63, 0x00, 0x63, 0x64, 0x64, 0x5F, 0x64, 0x5F,
+ 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x60, 0x60, 0x60, 0x01, 0x01,
+ 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x63, 0x63, 0x63, 0x63, 0x62, 0x60, 0x60, 0x00, 0x63, 0x63, 0x64, 0x64,
+ 0x5F, 0x64, 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x01, 0x60, 0x60,
+ 0x01, 0x01, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x66, 0x66, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x64, 0x64, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x01, 0x60, 0x01, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x61, 0x61, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x61, 0x63, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x60, 0x01, 0x60, 0x60, 0x60, 0x01, 0x01,
+ 0x01, 0x01, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x5F, 0x66, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x61, 0x61, 0x5F, 0x5F, 0x61, 0x65, 0x65, 0x63, 0x62, 0x62, 0x62, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x5F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F,
+ 0x5F, 0x66, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x65, 0x65, 0x62,
+ 0x63, 0x62, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x66, 0x60, 0x5F, 0x5F, 0x5F, 0x61, 0x01,
+ 0x01, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x65, 0x63, 0x63, 0x62, 0x63, 0x62, 0x62, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x66, 0x60, 0x01, 0x5F,
+ 0x01, 0x5F, 0x60, 0x60, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x64, 0x63, 0x62, 0x62, 0x63, 0x62, 0x62, 0x62,
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x01, 0x01, 0x01, 0x01,
+ 0x5F, 0x60, 0x66, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x61, 0x01, 0x5F, 0x64, 0x63, 0x63, 0x63,
+ 0x62, 0x63, 0x63, 0x62, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x64,
+ 0x00, 0x63, 0x62, 0x62, 0x63, 0x62, 0x62, 0x62, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x63, 0x63, 0x62, 0x63, 0x62, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F,
+ 0x5F, 0x61, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x61, 0x61,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x62,
+ 0x63, 0x62, 0x62, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x64, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x63, 0x62, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x64, 0x61, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x64, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x61, 0x5F, 0x01, 0x5F,
+ 0x01, 0x61, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x61, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x5F, 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, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F,
+ 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F,
+ 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F,
+ 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x61, 0x61, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x61,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 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, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 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, 0x64, 0x64,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01,
+ 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x64, 0x61, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x64, 0x00, 0x00, 0x00, 0x61, 0x61,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x64, 0x64, 0x64, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 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, 0x61, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x61, 0x64, 0x64, 0x64, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x64, 0x64, 0x00,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x64, 0x00, 0x64, 0x00,
+ 0x64, 0x64, 0x61, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask14LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xC9, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x57, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF9, 0x00, 0xC0, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFD, 0x03, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0x87, 0xF0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xCF, 0xF8, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x38, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC1, 0xFE,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFF,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x38,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x3F, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0E, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 0x00, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x00, 0x00, 0x02, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFE, 0x30, 0x00, 0x00, 0x00, 0x2F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0xFF, 0xFF, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xAF, 0xFF,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite14LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x5F, 0x60, 0x00, 0x00,
+ 0x60, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x5F, 0x61, 0x61,
+ 0x5F, 0x60, 0x61, 0x61, 0x61, 0x60, 0x60, 0x5F, 0x60, 0x60, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x60, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x61, 0x5F,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x60, 0x00, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x62, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x60,
+ 0x61, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61,
+ 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61,
+ 0x60, 0x60, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x62, 0x62,
+ 0x62, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x63, 0x63, 0x63, 0x62, 0x63, 0x62, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x60, 0x60, 0x00, 0x63, 0x63, 0x63, 0x62, 0x63, 0x62, 0x63, 0x63, 0x62,
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x61, 0x61, 0x61, 0x5F,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x63, 0x63, 0x63, 0x63, 0x62,
+ 0x63, 0x63, 0x62, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x61,
+ 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61,
+ 0x5F, 0x60, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x60,
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x62, 0x63, 0x62, 0x62, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x01,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61,
+ 0x61, 0x5F, 0x60, 0x60, 0x60, 0x65, 0x65, 0x63, 0x62, 0x63, 0x63, 0x62,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x64, 0x61, 0x64, 0x01, 0x64, 0x61, 0x60, 0x60, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x5F, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x60, 0x61, 0x60, 0x60, 0x65, 0x65,
+ 0x63, 0x63, 0x62, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x64, 0x63, 0x61, 0x61,
+ 0x61, 0x5F, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x5F, 0x64, 0x61, 0x64, 0x61, 0x60, 0x60, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x61,
+ 0x61, 0x61, 0x60, 0x65, 0x65, 0x62, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
+ 0x7B, 0x7B, 0x63, 0x61, 0x64, 0x61, 0x01, 0x61, 0x64, 0x60, 0x60, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x01, 0x64, 0x64, 0x64, 0x60, 0x60, 0x61,
+ 0x5F, 0x61, 0x64, 0x60, 0x60, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x60, 0x60, 0x65, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x7B, 0x01, 0x7B, 0x7B, 0x63, 0x61, 0x64, 0x61, 0x01,
+ 0x64, 0x60, 0x60, 0x64, 0x61, 0x64, 0x61, 0x64, 0x64, 0x64, 0x01, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64, 0x64, 0x60, 0x60, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x7B, 0x7B, 0x7B, 0x7B, 0x63,
+ 0x64, 0x61, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64,
+ 0x64, 0x61, 0x64, 0x61, 0x01, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x5F, 0x5F, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+ 0x62, 0x62, 0x62, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x63,
+ 0x7B, 0x7B, 0x63, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x01, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x01, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x60, 0x01, 0x64, 0x60, 0x60,
+ 0x64, 0x64, 0x61, 0x64, 0x61, 0x5F, 0x61, 0x64, 0x61, 0x61, 0x00, 0x00,
+ 0x00, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x60, 0x00, 0x00,
+ 0x00, 0x61, 0x61, 0x60, 0x63, 0x63, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x60, 0x64, 0x60, 0x61, 0x64, 0x60, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x60,
+ 0x01, 0x64, 0x60, 0x60, 0x64, 0x64, 0x64, 0x64, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x64, 0x64, 0x64, 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x62, 0x60,
+ 0x60, 0x60, 0x60, 0x00, 0x00, 0x61, 0x61, 0x61, 0x61, 0x61, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x60, 0x60, 0x5F, 0x60, 0x60, 0x61, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x66, 0x64, 0x64, 0x60, 0x60, 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65, 0x63, 0x63, 0x63,
+ 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x60, 0x00, 0x61, 0x61, 0x61, 0x64,
+ 0x64, 0x64, 0x64, 0x01, 0x01, 0x64, 0x64, 0x64, 0x60, 0x64, 0x01, 0x60,
+ 0x61, 0x61, 0x64, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x60, 0x66, 0x60, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x65, 0x65, 0x63, 0x63, 0x63, 0x62, 0x62, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x61, 0x61, 0x61, 0x64, 0x64, 0x64, 0x64, 0x60, 0x60, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x60, 0x60, 0x61, 0x61, 0x64, 0x5F, 0x64, 0x60, 0x60, 0x5F,
+ 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x60, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x61, 0x64, 0x5F, 0x64, 0x5F,
+ 0x66, 0x5F, 0x64, 0x5F, 0x65, 0x65, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
+ 0x62, 0x62, 0x60, 0x00, 0x63, 0x61, 0x61, 0x64, 0x01, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x5F, 0x60, 0x60, 0x60, 0x61, 0x01, 0x01, 0x5F, 0x64,
+ 0x5F, 0x60, 0x60, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x61, 0x61,
+ 0x5F, 0x64, 0x5F, 0x66, 0x60, 0x64, 0x5F, 0x64, 0x65, 0x63, 0x63, 0x63,
+ 0x63, 0x62, 0x62, 0x60, 0x60, 0x60, 0x60, 0x00, 0x63, 0x63, 0x63, 0x64,
+ 0x60, 0x01, 0x01, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x01, 0x60, 0x60, 0x01,
+ 0x60, 0x61, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x01, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x60, 0x5F, 0x5F,
+ 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66, 0x60, 0x64, 0x5F, 0x5F, 0x5F,
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x62, 0x62, 0x60, 0x00,
+ 0x63, 0x63, 0x64, 0x64, 0x5F, 0x60, 0x60, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x60, 0x60, 0x01, 0x60, 0x60, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x60, 0x60, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x64,
+ 0x5F, 0x5F, 0x5F, 0x61, 0x00, 0x00, 0x63, 0x63, 0x62, 0x62, 0x62, 0x60,
+ 0x60, 0x60, 0x60, 0x00, 0x64, 0x64, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x60, 0x60, 0x5F, 0x5F, 0x60, 0x60, 0x01, 0x60, 0x60, 0x61, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x00, 0x00, 0x00, 0x00, 0x63,
+ 0x63, 0x63, 0x63, 0x62, 0x62, 0x60, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x01, 0x60, 0x01, 0x60, 0x61,
+ 0x61, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x66, 0x66, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+ 0x64, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x5F, 0x01,
+ 0x60, 0x60, 0x60, 0x61, 0x01, 0x01, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x61, 0x61, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x5F, 0x60, 0x60, 0x60, 0x01, 0x01, 0x60, 0x60, 0x61, 0x5F,
+ 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x61, 0x61, 0x5F, 0x5F, 0x61, 0x65, 0x65, 0x63, 0x63, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x64, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x5F, 0x01, 0x01, 0x01, 0x01, 0x60, 0x60,
+ 0x60, 0x61, 0x61, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x65, 0x65, 0x62,
+ 0x63, 0x63, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x64, 0x5F, 0x01, 0x5F, 0x66, 0x60, 0x5F, 0x5F, 0x5F, 0x61, 0x60,
+ 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x65, 0x63, 0x63, 0x62, 0x62, 0x63, 0x62, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x66, 0x60, 0x01, 0x5F,
+ 0x01, 0x5F, 0x60, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x61, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x63, 0x62, 0x62, 0x63, 0x63, 0x62, 0x62,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61,
+ 0x60, 0x01, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x61, 0x01, 0x5F, 0x64, 0x63, 0x63, 0x63,
+ 0x62, 0x62, 0x63, 0x63, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x01, 0x01, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x64,
+ 0x00, 0x63, 0x62, 0x62, 0x63, 0x63, 0x62, 0x62, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x01, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x63, 0x63, 0x62, 0x62, 0x63, 0x62,
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F,
+ 0x5F, 0x61, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x61, 0x61,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x63, 0x63,
+ 0x63, 0x63, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x64, 0x00,
+ 0x00, 0x00, 0x00, 0x62, 0x63, 0x63, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x64, 0x61, 0x61, 0x00, 0x00, 0x00, 0x00, 0x62, 0x62, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x64, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x61, 0x5F, 0x01, 0x5F,
+ 0x01, 0x61, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x61, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x5F, 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, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F,
+ 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F,
+ 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F,
+ 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x61, 0x61, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x61,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 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, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 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, 0x64, 0x64,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01,
+ 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x64, 0x61, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x64, 0x00, 0x00, 0x00, 0x61, 0x61,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x64, 0x64, 0x64, 0x64,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 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, 0x61, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x64, 0x64, 0x64, 0x64, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x64, 0x64, 0x00,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x64, 0x00, 0x64, 0x00,
+ 0x64, 0x64, 0x61, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask14LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xC9, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x57, 0xFF, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+ 0xD0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF9, 0x01, 0x80, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFD, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0x8F, 0xF0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xDF, 0xF8, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x01, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0xFC,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE1, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x3F, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3F, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1E, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x0C, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF2, 0x00, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE1, 0x00, 0x00, 0x02, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFE, 0x30, 0x00, 0x00, 0x00, 0x2F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0xFF, 0xFF, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xAF, 0xFF,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite14RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x5F,
+ 0x00, 0x60, 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, 0x5F, 0x00, 0x60, 0x60, 0x5F, 0x60, 0x60, 0x61,
+ 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x5F, 0x00, 0x60, 0x00, 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, 0x5F, 0x00, 0x60, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x60,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x60, 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, 0x60, 0x62, 0x62, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5F, 0x00, 0x60, 0x60, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60,
+ 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x5F,
+ 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x62, 0x62, 0x63, 0x63, 0x62, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61,
+ 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62, 0x62, 0x62, 0x63,
+ 0x63, 0x63, 0x63, 0x62, 0x00, 0x00, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60,
+ 0x5F, 0x61, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62,
+ 0x62, 0x62, 0x62, 0x63, 0x63, 0x62, 0x63, 0x63, 0x62, 0x5F, 0x60, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x62, 0x62, 0x62, 0x63, 0x62, 0x63, 0x63, 0x63, 0x63,
+ 0x60, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F,
+ 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61,
+ 0x61, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62, 0x62, 0x63, 0x63, 0x62,
+ 0x63, 0x65, 0x65, 0x60, 0x60, 0x60, 0x5F, 0x61, 0x61, 0x60, 0x5F, 0x61,
+ 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x61, 0x61, 0x01, 0x61, 0x61, 0x61,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+ 0x63, 0x62, 0x63, 0x63, 0x65, 0x65, 0x60, 0x60, 0x61, 0x60, 0x5F, 0x61,
+ 0x61, 0x61, 0x60, 0x5F, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x60, 0x60, 0x61, 0x64,
+ 0x01, 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x62, 0x63, 0x62, 0x65, 0x65, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x60, 0x60, 0x61, 0x64, 0x61, 0x64, 0x5F,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x5F, 0x61,
+ 0x61, 0x61, 0x63, 0x64, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x60, 0x60, 0x64, 0x61, 0x5F, 0x61, 0x60, 0x60, 0x64,
+ 0x64, 0x64, 0x01, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x60, 0x60, 0x64,
+ 0x61, 0x01, 0x61, 0x64, 0x61, 0x63, 0x7B, 0x7B, 0x64, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5F, 0x61, 0x61, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x60, 0x60, 0x64, 0x64, 0x5F,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x60, 0x60, 0x64, 0x01, 0x61, 0x64, 0x61, 0x63, 0x7B, 0x7B, 0x01,
+ 0x7B, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x63, 0x63, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x5F, 0x5F, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x01, 0x61, 0x64, 0x61, 0x64,
+ 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x61, 0x64,
+ 0x63, 0x7B, 0x7B, 0x7B, 0x7B, 0x64, 0x00, 0x00, 0x00, 0x60, 0x62, 0x62,
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61,
+ 0x64, 0x61, 0x5F, 0x61, 0x64, 0x61, 0x64, 0x64, 0x60, 0x60, 0x64, 0x01,
+ 0x60, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x63, 0x7B, 0x7B, 0x63, 0x60, 0x00, 0x00,
+ 0x60, 0x60, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x63, 0x63, 0x00, 0x00,
+ 0x64, 0x64, 0x64, 0x64, 0x61, 0x64, 0x61, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x60, 0x60, 0x64, 0x01, 0x60, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x01, 0x01, 0x01, 0x64, 0x64, 0x64, 0x60, 0x60, 0x64, 0x01,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x63, 0x63,
+ 0x60, 0x60, 0x00, 0x00, 0x60, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x63,
+ 0x63, 0x63, 0x63, 0x65, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64, 0x60, 0x60, 0x64, 0x64, 0x66,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x61, 0x60, 0x01, 0x01, 0x64,
+ 0x60, 0x60, 0x64, 0x01, 0x60, 0x64, 0x60, 0x60, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x61, 0x61, 0x61, 0x61, 0x63, 0x00, 0x60, 0x60, 0x60, 0x62,
+ 0x62, 0x62, 0x62, 0x62, 0x62, 0x65, 0x65, 0x65, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x60, 0x66, 0x60, 0x60, 0x5F, 0x64, 0x5F, 0x64, 0x61,
+ 0x61, 0x60, 0x60, 0x01, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x60,
+ 0x64, 0x64, 0x64, 0x01, 0x01, 0x64, 0x64, 0x64, 0x64, 0x61, 0x61, 0x00,
+ 0x60, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x65, 0x65, 0x65,
+ 0x5F, 0x64, 0x5F, 0x66, 0x5F, 0x64, 0x5F, 0x64, 0x61, 0x60, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x60, 0x60, 0x60, 0x64,
+ 0x5F, 0x64, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x60, 0x01, 0x5F, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x60, 0x60, 0x64, 0x64, 0x64,
+ 0x64, 0x61, 0x61, 0x63, 0x60, 0x60, 0x60, 0x62, 0x62, 0x62, 0x62, 0x62,
+ 0x62, 0x63, 0x65, 0x65, 0x64, 0x5F, 0x64, 0x60, 0x66, 0x5F, 0x64, 0x5F,
+ 0x61, 0x61, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x60, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60,
+ 0x60, 0x01, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x01, 0x64, 0x61, 0x63, 0x63, 0x60, 0x62, 0x62, 0x62,
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x5F, 0x5F, 0x5F, 0x64,
+ 0x60, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x5F, 0x60, 0x60,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x61, 0x61, 0x60, 0x60, 0x01, 0x60, 0x60, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x01, 0x01, 0x60, 0x64, 0x63, 0x00, 0x00,
+ 0x60, 0x60, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x63, 0x00, 0x00, 0x00,
+ 0x00, 0x61, 0x5F, 0x5F, 0x64, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x61, 0x60, 0x60, 0x01, 0x01, 0x61, 0x60, 0x60, 0x01,
+ 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x60, 0x60, 0x5F,
+ 0x64, 0x63, 0x00, 0x00, 0x00, 0x60, 0x60, 0x62, 0x63, 0x63, 0x63, 0x63,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x60,
+ 0x01, 0x01, 0x60, 0x60, 0x60, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60,
+ 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x63, 0x00, 0x63, 0x00, 0x00, 0x00, 0x60,
+ 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x01, 0x01, 0x60, 0x60, 0x01, 0x5F,
+ 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x63, 0x63,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x62,
+ 0x63, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x60, 0x60, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x61, 0x61, 0x61, 0x60, 0x60, 0x60,
+ 0x01, 0x60, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64,
+ 0x5F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x62, 0x62, 0x62, 0x63, 0x65, 0x65, 0x61, 0x5F, 0x5F, 0x61, 0x61,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66, 0x60, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x66, 0x5F, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x01, 0x01,
+ 0x01, 0x01, 0x60, 0x60, 0x60, 0x01, 0x60, 0x01, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x62, 0x62, 0x62, 0x63, 0x62, 0x65, 0x65, 0x01,
+ 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66, 0x60, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x61, 0x61, 0x61,
+ 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x5F, 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62, 0x62, 0x63, 0x62,
+ 0x63, 0x63, 0x65, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x5F, 0x66, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x01, 0x01, 0x61, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x5F,
+ 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+ 0x62, 0x62, 0x62, 0x63, 0x62, 0x62, 0x63, 0x64, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x66, 0x60, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x60, 0x60, 0x5F, 0x01,
+ 0x5F, 0x01, 0x60, 0x66, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x62, 0x63, 0x63, 0x62, 0x63, 0x63, 0x63, 0x64,
+ 0x5F, 0x01, 0x61, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x66, 0x60, 0x5F, 0x01, 0x01, 0x01, 0x01,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x64, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62, 0x62, 0x62, 0x63,
+ 0x62, 0x62, 0x63, 0x00, 0x64, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x66, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x62, 0x63, 0x62, 0x63, 0x63, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x62, 0x62, 0x63, 0x62, 0x00, 0x00, 0x00,
+ 0x00, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x61, 0x5F, 0x5F, 0x64, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62, 0x63,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x64, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x64, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x61,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x64,
+ 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01,
+ 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x61, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x5F, 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, 0x64, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 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, 0x61, 0x61,
+ 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 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,
+ 0x61, 0x61, 0x00, 0x00, 0x00, 0x64, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x61, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
+ 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x64, 0x64,
+ 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x00, 0x64, 0x64, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x64, 0x64, 0x64, 0x61,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x61, 0x64, 0x64,
+ 0x00, 0x64, 0x00, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask14RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x93, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0x00, 0x9F, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x07, 0xC0, 0xBF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xE1, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xF3, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1C, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0xFF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFD, 0x1C, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFC, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x00, 0x70, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0C, 0x7F,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF4, 0x00,
+ 0x00, 0x00, 0x00, 0x17, 0xFF, 0xFF, 0x82, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0xFF, 0xF5, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+};
+
+const uint8_t sprite14RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F,
+ 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x5F,
+ 0x00, 0x60, 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, 0x5F, 0x00, 0x60, 0x60, 0x5F, 0x60, 0x60, 0x61,
+ 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x5F, 0x00, 0x60, 0x00, 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, 0x5F, 0x00, 0x60, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x60,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x60, 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, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5F, 0x00, 0x60, 0x60, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60,
+ 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x5F,
+ 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x62, 0x62, 0x62, 0x63, 0x62, 0x63, 0x63, 0x63,
+ 0x00, 0x00, 0x00, 0x60, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61,
+ 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x62, 0x63, 0x63, 0x62,
+ 0x63, 0x62, 0x63, 0x63, 0x63, 0x00, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60,
+ 0x5F, 0x61, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62,
+ 0x62, 0x62, 0x63, 0x63, 0x62, 0x63, 0x63, 0x63, 0x63, 0x5F, 0x60, 0x61,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60,
+ 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61,
+ 0x61, 0x61, 0x61, 0x60, 0x5F, 0x61, 0x61, 0x61, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x62, 0x62, 0x63, 0x62, 0x63, 0x63, 0x63, 0x63, 0x63,
+ 0x60, 0x5F, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x5F,
+ 0x61, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60, 0x60,
+ 0x61, 0x61, 0x61, 0x61, 0x61, 0x5F, 0x61, 0x61, 0x60, 0x60, 0x61, 0x61,
+ 0x61, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x63, 0x63, 0x62,
+ 0x63, 0x65, 0x65, 0x60, 0x60, 0x60, 0x5F, 0x61, 0x61, 0x60, 0x5F, 0x61,
+ 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x61, 0x61, 0x01, 0x61, 0x61, 0x61,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x63, 0x62, 0x63, 0x63, 0x65, 0x65, 0x60, 0x60, 0x61, 0x60, 0x5F, 0x61,
+ 0x61, 0x61, 0x60, 0x5F, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x60, 0x60, 0x61, 0x64,
+ 0x01, 0x64, 0x61, 0x64, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x62, 0x65, 0x65, 0x60, 0x61, 0x61,
+ 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x60, 0x60, 0x61, 0x64, 0x61, 0x64, 0x5F,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x5F, 0x61,
+ 0x61, 0x61, 0x63, 0x64, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65,
+ 0x60, 0x60, 0x61, 0x61, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64,
+ 0x61, 0x64, 0x61, 0x60, 0x60, 0x64, 0x61, 0x5F, 0x61, 0x60, 0x60, 0x64,
+ 0x64, 0x64, 0x01, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x60, 0x60, 0x64,
+ 0x61, 0x01, 0x61, 0x64, 0x61, 0x63, 0x7B, 0x7B, 0x64, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5F, 0x61, 0x61, 0x61, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x60, 0x60, 0x64, 0x64, 0x5F,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64, 0x61, 0x64, 0x61,
+ 0x64, 0x60, 0x60, 0x64, 0x01, 0x61, 0x64, 0x61, 0x63, 0x7B, 0x7B, 0x01,
+ 0x7B, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x62, 0x62, 0x62,
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x5F, 0x5F, 0x64,
+ 0x61, 0x64, 0x61, 0x64, 0x61, 0x64, 0x61, 0x01, 0x61, 0x64, 0x61, 0x64,
+ 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x61, 0x64,
+ 0x63, 0x7B, 0x7B, 0x7B, 0x7B, 0x64, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62,
+ 0x62, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x61, 0x61,
+ 0x64, 0x61, 0x5F, 0x61, 0x64, 0x61, 0x64, 0x64, 0x60, 0x60, 0x64, 0x01,
+ 0x60, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x01, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x63, 0x7B, 0x7B, 0x63, 0x60, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x60, 0x60, 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63,
+ 0x64, 0x64, 0x64, 0x64, 0x61, 0x64, 0x61, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x60, 0x60, 0x64, 0x01, 0x60, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x60, 0x64, 0x61, 0x60,
+ 0x64, 0x60, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x63, 0x63,
+ 0x60, 0x61, 0x61, 0x00, 0x00, 0x60, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63,
+ 0x63, 0x63, 0x63, 0x65, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x64, 0x64, 0x60, 0x60, 0x64, 0x64, 0x66,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x61, 0x60, 0x60, 0x5F, 0x60, 0x60, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x64, 0x61, 0x61, 0x61, 0x61, 0x61, 0x00, 0x00, 0x60, 0x60, 0x60,
+ 0x60, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65, 0x64, 0x64, 0x64, 0x64,
+ 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x60, 0x66, 0x60, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x61, 0x61, 0x60, 0x01, 0x64, 0x60,
+ 0x64, 0x64, 0x64, 0x01, 0x01, 0x64, 0x64, 0x64, 0x64, 0x61, 0x61, 0x61,
+ 0x00, 0x60, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x65, 0x65,
+ 0x5F, 0x64, 0x5F, 0x66, 0x5F, 0x64, 0x5F, 0x64, 0x61, 0x60, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x60, 0x60, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x60, 0x64, 0x5F, 0x64, 0x61, 0x61,
+ 0x60, 0x60, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x60, 0x60, 0x64, 0x64, 0x64,
+ 0x64, 0x61, 0x61, 0x61, 0x00, 0x60, 0x60, 0x60, 0x60, 0x62, 0x62, 0x63,
+ 0x63, 0x63, 0x63, 0x65, 0x64, 0x5F, 0x64, 0x60, 0x66, 0x5F, 0x64, 0x5F,
+ 0x61, 0x61, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F,
+ 0x60, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x60, 0x60, 0x5F,
+ 0x64, 0x5F, 0x01, 0x01, 0x61, 0x60, 0x60, 0x60, 0x5F, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x64, 0x01, 0x64, 0x61, 0x61, 0x63, 0x00, 0x60, 0x62, 0x62,
+ 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x5F, 0x5F, 0x5F, 0x64,
+ 0x60, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x5F, 0x60, 0x60,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x01, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x61, 0x60, 0x01, 0x60, 0x60, 0x01,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x01, 0x01, 0x60, 0x64, 0x63, 0x63, 0x63,
+ 0x00, 0x60, 0x60, 0x60, 0x60, 0x62, 0x62, 0x62, 0x63, 0x63, 0x00, 0x00,
+ 0x61, 0x5F, 0x5F, 0x5F, 0x64, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F,
+ 0x64, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x60,
+ 0x60, 0x01, 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x60, 0x60, 0x5F,
+ 0x64, 0x64, 0x63, 0x63, 0x00, 0x00, 0x60, 0x62, 0x62, 0x63, 0x63, 0x63,
+ 0x63, 0x00, 0x00, 0x00, 0x00, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x61, 0x60, 0x60, 0x01, 0x60, 0x60, 0x5F, 0x5F, 0x60, 0x60,
+ 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x61, 0x61, 0x60, 0x01, 0x60,
+ 0x01, 0x5F, 0x60, 0x60, 0x5F, 0x5F, 0x64, 0x5F, 0x64, 0x5F, 0x5F, 0x64,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x61, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x60, 0x60, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x01, 0x01, 0x01,
+ 0x61, 0x60, 0x60, 0x60, 0x01, 0x5F, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x64,
+ 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x63, 0x63, 0x65, 0x65, 0x61, 0x5F, 0x5F, 0x61, 0x61,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66, 0x60, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60,
+ 0x5F, 0x61, 0x60, 0x60, 0x01, 0x01, 0x60, 0x60, 0x60, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x5F, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x63, 0x63, 0x62, 0x65, 0x65, 0x01,
+ 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x66, 0x60, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x60, 0x60, 0x5F, 0x61, 0x61, 0x60, 0x60, 0x60, 0x01, 0x01,
+ 0x01, 0x01, 0x5F, 0x5F, 0x5F, 0x66, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x64,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x63, 0x62, 0x62,
+ 0x63, 0x63, 0x65, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x61,
+ 0x61, 0x60, 0x60, 0x60, 0x60, 0x61, 0x5F, 0x5F, 0x5F, 0x60, 0x66, 0x5F,
+ 0x01, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x62, 0x62, 0x63, 0x63, 0x62, 0x62, 0x63, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x61, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x60, 0x5F, 0x01,
+ 0x5F, 0x01, 0x60, 0x66, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x63, 0x63, 0x62, 0x62, 0x63, 0x63, 0x63, 0x64,
+ 0x5F, 0x01, 0x61, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x01, 0x60, 0x61, 0x61, 0x60, 0x60,
+ 0x60, 0x60, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x64, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x62, 0x62, 0x63, 0x63,
+ 0x62, 0x62, 0x63, 0x00, 0x64, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61,
+ 0x01, 0x01, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
+ 0x62, 0x63, 0x62, 0x62, 0x63, 0x63, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x5F, 0x5F, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x01, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x00, 0x00,
+ 0x00, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x5F, 0x5F,
+ 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x61, 0x5F, 0x5F, 0x64, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x63, 0x63,
+ 0x62, 0x00, 0x00, 0x00, 0x00, 0x64, 0x61, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x62, 0x62, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x64, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01,
+ 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x64, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x61,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x61,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x64,
+ 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01,
+ 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x61, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x61, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x61, 0x61, 0x5F, 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, 0x64, 0x5F, 0x5F, 0x5F, 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x01,
+ 0x5F, 0x01, 0x5F, 0x01, 0x5F, 0x61, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 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, 0x61, 0x61,
+ 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x01, 0x61, 0x01, 0x5F,
+ 0x01, 0x5F, 0x01, 0x61, 0x01, 0x5F, 0x01, 0x5F, 0x5F, 0x5F, 0x61, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 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,
+ 0x61, 0x61, 0x00, 0x00, 0x00, 0x64, 0x64, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x61, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
+ 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x64, 0x64, 0x64, 0x64,
+ 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x61, 0x00, 0x64, 0x64, 0x64, 0x5F, 0x5F, 0x5F, 0x5F,
+ 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x61, 0x5F, 0x5F, 0x64, 0x64, 0x64, 0x64,
+ 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x61, 0x64, 0x64,
+ 0x00, 0x64, 0x00, 0x64, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask14RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x93, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0B, 0xFF, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B,
+ 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x01, 0x80, 0x9F, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x00, 0x07, 0xE0, 0xBF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x0F, 0xF1, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x1F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x1F, 0x80, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x3F, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x7F, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x87, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x01, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x01, 0xFC, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFC, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x00, 0x78, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x30, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x4F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x40, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x0C, 0x7F,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xF4, 0x00,
+ 0x00, 0x00, 0x00, 0x17, 0xFF, 0xFF, 0x82, 0x00, 0x00, 0x00, 0x00, 0x20,
+ 0xFF, 0xF5, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+};
+
+const uint8_t sprite15LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x67, 0x42, 0x68, 0x42,
+ 0x42, 0x42, 0x42, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6A, 0x6A, 0x67, 0x67,
+ 0x68, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6A, 0x6A,
+ 0x6A, 0x67, 0x67, 0x67, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42,
+ 0x42, 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x69, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x68, 0x67, 0x68, 0x42, 0x68,
+ 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x69, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x68, 0x67,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x43,
+ 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x6A, 0x6A, 0x6A, 0x6A, 0x67,
+ 0x67, 0x68, 0x67, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42,
+ 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x6A, 0x6A,
+ 0x6B, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x68, 0x67, 0x68, 0x68, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67,
+ 0x4D, 0x6A, 0x6A, 0x6B, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x68, 0x67, 0x68,
+ 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x42, 0x43, 0x43,
+ 0x43, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x67, 0x4D, 0x4D, 0x6A, 0x6B, 0x6A, 0x6A, 0x67, 0x67, 0x67,
+ 0x68, 0x67, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43,
+ 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x4D, 0x69, 0x67, 0x6B, 0x6A, 0x6A,
+ 0x67, 0x67, 0x67, 0x68, 0x67, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x42, 0x42, 0x43, 0x42, 0x43, 0x43, 0x43, 0x43, 0x00, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x68, 0x68, 0x67, 0x67, 0x67, 0x68, 0x67, 0x68, 0x68, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x42, 0x43, 0x43, 0x00, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x68,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x68, 0x68, 0x67, 0x68,
+ 0x68, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x43, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x67, 0x67, 0x69, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x42, 0x43,
+ 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x67, 0x6C, 0x69, 0x69, 0x68, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x68,
+ 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x00, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6C, 0x69, 0x67, 0x68, 0x68,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x68, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68,
+ 0x42, 0x42, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x67, 0x00, 0x00, 0x67, 0x6C, 0x69,
+ 0x67, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69,
+ 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x68, 0x68, 0x42, 0x00,
+ 0x67, 0x67, 0x69, 0x67, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69,
+ 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x67, 0x67,
+ 0x68, 0x42, 0x00, 0x00, 0x67, 0x6C, 0x69, 0x68, 0x67, 0x68, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x68, 0x67, 0x67,
+ 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42,
+ 0x67, 0x67, 0x67, 0x68, 0x42, 0x00, 0x00, 0x67, 0x6C, 0x67, 0x67, 0x67,
+ 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x68,
+ 0x68, 0x67, 0x67, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x4D, 0x4D,
+ 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x69, 0x69, 0x6A, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x68, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4D,
+ 0x67, 0x43, 0x43, 0x68, 0x68, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6C,
+ 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x29, 0x4D,
+ 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68,
+ 0x00, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x4D, 0x67, 0x43, 0x6D, 0x6D, 0x43, 0x69, 0x69, 0x69, 0x69,
+ 0x6A, 0x4D, 0x4D, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x29, 0x4D, 0x29,
+ 0x29, 0x29, 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x69, 0x4D, 0x43, 0x6D, 0x7B, 0x7B, 0x6D,
+ 0x6C, 0x69, 0x69, 0x69, 0x68, 0x4D, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x4D, 0x29, 0x4D,
+ 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x68, 0x68, 0x00, 0x00, 0x00, 0x00, 0x69, 0x69, 0x6C, 0x43,
+ 0x6D, 0x7B, 0x7B, 0x6D, 0x4D, 0x4D, 0x69, 0x69, 0x68, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x29,
+ 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x69, 0x69, 0x67, 0x67, 0x67, 0x68, 0x68, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x67, 0x69, 0x69, 0x43, 0x6D, 0x6D, 0x43, 0x69, 0x29, 0x6A, 0x67,
+ 0x68, 0x4D, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x67, 0x67, 0x67, 0x68, 0x68,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x43, 0x69, 0x69, 0x6C, 0x43, 0x43, 0x69,
+ 0x29, 0x6A, 0x6A, 0x67, 0x68, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x68, 0x68, 0x00, 0x00, 0x00, 0x00, 0x67, 0x43, 0x69,
+ 0x69, 0x69, 0x4D, 0x29, 0x6A, 0x6A, 0x6B, 0x68, 0x4D, 0x69, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x67,
+ 0x67, 0x67, 0x67, 0x6C, 0x69, 0x67, 0x67, 0x68, 0x68, 0x00, 0x00, 0x00,
+ 0x00, 0x68, 0x4D, 0x43, 0x43, 0x43, 0x69, 0x6A, 0x6A, 0x6B, 0x67, 0x68,
+ 0x4D, 0x69, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A, 0x69, 0x69,
+ 0x69, 0x67, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x69, 0x67, 0x68,
+ 0x68, 0x68, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x4D, 0x4D, 0x6B, 0x6A,
+ 0x6B, 0x67, 0x68, 0x4D, 0x4D, 0x69, 0x69, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x68, 0x42, 0x68, 0x42, 0x68, 0x00, 0x00,
+ 0x00, 0x6C, 0x69, 0x67, 0x68, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x4D, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x69, 0x69, 0x67, 0x67, 0x67, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x00, 0x00, 0x69, 0x69, 0x69, 0x67, 0x68, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x68, 0x43, 0x4D, 0x6B,
+ 0x6B, 0x6B, 0x6A, 0x6C, 0x6A, 0x6C, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x69, 0x67, 0x67, 0x67, 0x42, 0x42, 0x42, 0x68, 0x68,
+ 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x69, 0x69,
+ 0x69, 0x67, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x4D, 0x67, 0x67, 0x6B, 0x6B, 0x6B, 0x6A, 0x6A, 0x6A, 0x6C, 0x6A,
+ 0x6C, 0x6A, 0x6C, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x42, 0x42, 0x68,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x43, 0x00, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x69, 0x69, 0x67, 0x67, 0x68, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x67, 0x67, 0x67, 0x6B,
+ 0x6B, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x42,
+ 0x42, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x00, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x69, 0x68, 0x68,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x68, 0x67, 0x67, 0x67, 0x67, 0x6B, 0x6B, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x69, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x42, 0x42, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68,
+ 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x6B, 0x67,
+ 0x67, 0x42, 0x43, 0x43, 0x43, 0x43, 0x4D, 0x69, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4D, 0x6B, 0x6B, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x69,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42,
+ 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x6B, 0x6A, 0x6B, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x42, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6B, 0x6A,
+ 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x67, 0x42, 0x42, 0x68,
+ 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x69, 0x6A, 0x67, 0x67, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6A, 0x67, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6A, 0x67, 0x42, 0x68, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6B, 0x67,
+ 0x68, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x67, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x67, 0x67, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x67, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42,
+ 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x42, 0x42, 0x42, 0x43,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x68,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67,
+ 0x42, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x68, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask15LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFC, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFE, 0x80, 0x00, 0x00, 0x00, 0xFF,
+ 0xFF, 0xFF, 0xF4, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xA0, 0x03,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x1F, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xD4, 0x00, 0x3F,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x0E, 0x7E, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xE0, 0x7E, 0xFC, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0xFC,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0xF8, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF3, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x7C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7C,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFA, 0x1F, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0x0F,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x03, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFD, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3F, 0xFF, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x1F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x78, 0x1F,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x0F, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7E, 0x07, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x07,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x83, 0xFC, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0x83, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x01,
+ 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite15LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x42,
+ 0x43, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x69, 0x6A, 0x6A,
+ 0x6A, 0x67, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x69,
+ 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42,
+ 0x42, 0x43, 0x42, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x67, 0x69, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x69, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x43,
+ 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4D, 0x6A, 0x6A, 0x6A, 0x67,
+ 0x67, 0x67, 0x67, 0x68, 0x67, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42,
+ 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4D, 0x6A,
+ 0x6B, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x68, 0x67, 0x68, 0x68, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x4D, 0x6A, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x68, 0x67, 0x68,
+ 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x42, 0x43, 0x43,
+ 0x43, 0x43, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x4D, 0x6A, 0x6B, 0x6A, 0x6A, 0x67, 0x67, 0x67,
+ 0x68, 0x67, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43,
+ 0x42, 0x43, 0x42, 0x43, 0x43, 0x43, 0x00, 0x43, 0x00, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4D, 0x69, 0x67, 0x6B, 0x6A, 0x6A,
+ 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x42, 0x42, 0x43, 0x42, 0x43, 0x42, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x68, 0x68, 0x67, 0x67, 0x67, 0x68, 0x68, 0x67, 0x68, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x42, 0x43, 0x42, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x68, 0x68, 0x67, 0x68,
+ 0x68, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x42, 0x43, 0x42,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x69, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43,
+ 0x42, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x69, 0x67, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x68,
+ 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x00, 0x42, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x67, 0x67, 0x67, 0x68, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x68, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68,
+ 0x42, 0x42, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x67,
+ 0x67, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69,
+ 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x68, 0x68, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x68, 0x68, 0x68, 0x42, 0x42, 0x00,
+ 0x00, 0x6C, 0x69, 0x68, 0x68, 0x43, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69,
+ 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68,
+ 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x43, 0x68, 0x67, 0x68,
+ 0x42, 0x42, 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x68, 0x68, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x68, 0x67, 0x67,
+ 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x43, 0x43, 0x43,
+ 0x43, 0x67, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x6C, 0x67, 0x67, 0x68,
+ 0x43, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x68,
+ 0x68, 0x67, 0x67, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x4D, 0x4D,
+ 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x69, 0x69, 0x6A, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x42,
+ 0x67, 0x67, 0x67, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4D,
+ 0x67, 0x43, 0x43, 0x68, 0x68, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6C,
+ 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x29, 0x4D,
+ 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68,
+ 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x67, 0x68, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x4D, 0x67, 0x43, 0x6D, 0x6D, 0x43, 0x69, 0x69, 0x69, 0x69,
+ 0x6A, 0x4D, 0x4D, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x29, 0x4D, 0x29,
+ 0x29, 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x43,
+ 0x42, 0x00, 0x00, 0x00, 0x42, 0x69, 0x4D, 0x43, 0x6D, 0x7B, 0x7B, 0x6D,
+ 0x6C, 0x69, 0x69, 0x69, 0x68, 0x4D, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x29, 0x4D, 0x29, 0x29, 0x29, 0x29, 0x29, 0x4D, 0x29, 0x4D,
+ 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x68, 0x43, 0x42, 0x00, 0x00, 0x00, 0x69, 0x69, 0x6C, 0x43,
+ 0x6D, 0x7B, 0x7B, 0x6D, 0x4D, 0x4D, 0x69, 0x69, 0x68, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x29,
+ 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x69, 0x69, 0x67, 0x67, 0x67, 0x68, 0x43, 0x42, 0x00, 0x00, 0x00,
+ 0x43, 0x67, 0x69, 0x69, 0x43, 0x6D, 0x6D, 0x43, 0x69, 0x29, 0x6A, 0x67,
+ 0x68, 0x4D, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x67, 0x67, 0x67, 0x68, 0x43,
+ 0x42, 0x00, 0x00, 0x00, 0x68, 0x43, 0x69, 0x69, 0x6C, 0x43, 0x43, 0x69,
+ 0x29, 0x6A, 0x6A, 0x67, 0x68, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x67, 0x43, 0x69,
+ 0x69, 0x69, 0x4D, 0x29, 0x6A, 0x6A, 0x6B, 0x68, 0x4D, 0x69, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x67,
+ 0x67, 0x67, 0x67, 0x6C, 0x69, 0x67, 0x67, 0x68, 0x43, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x69, 0x6A, 0x6A, 0x6B, 0x67, 0x68,
+ 0x4D, 0x69, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A, 0x69, 0x69,
+ 0x69, 0x67, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x69, 0x67, 0x68,
+ 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x4D, 0x4D, 0x6B, 0x6A,
+ 0x6B, 0x67, 0x68, 0x4D, 0x4D, 0x69, 0x69, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x68, 0x42, 0x68, 0x42, 0x68, 0x00, 0x00,
+ 0x00, 0x6C, 0x69, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x4D, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x69, 0x69, 0x67, 0x67, 0x67, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x00, 0x00, 0x69, 0x69, 0x67, 0x68, 0x43, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x68, 0x43, 0x4D, 0x6B,
+ 0x6B, 0x6B, 0x6A, 0x6A, 0x6A, 0x6C, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x69, 0x67, 0x67, 0x67, 0x42, 0x42, 0x42, 0x68, 0x68,
+ 0x42, 0x68, 0x42, 0x42, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x69, 0x69,
+ 0x67, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x4D, 0x67, 0x67, 0x6B, 0x6B, 0x6B, 0x6A, 0x6A, 0x6A, 0x6C, 0x6A,
+ 0x6C, 0x6A, 0x6C, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x42, 0x42, 0x68,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x68, 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x67, 0x67, 0x67, 0x6B,
+ 0x6B, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x42,
+ 0x42, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x67, 0x67,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x68, 0x67, 0x67, 0x67, 0x67, 0x6B, 0x6B, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43,
+ 0x43, 0x43, 0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x68, 0x42, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x42, 0x42, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68,
+ 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x43, 0x00, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x6B, 0x42,
+ 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x4D, 0x69, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x4D, 0x6B, 0x6B, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x69,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x42,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4D, 0x6B, 0x6A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x4D, 0x42, 0x68, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x69, 0x6B,
+ 0x6A, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x67, 0x42, 0x42, 0x68,
+ 0x42, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x69, 0x6A, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6A, 0x67, 0x68, 0x42, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x67, 0x6A, 0x67, 0x68, 0x68, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x69, 0x67, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x67, 0x6B,
+ 0x67, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x67, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x67, 0x67, 0x67, 0x68, 0x42, 0x68, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6A, 0x6A, 0x67, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x67, 0x67, 0x68, 0x68, 0x68, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x67, 0x67, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x67, 0x68,
+ 0x68, 0x68, 0x42, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x6A,
+ 0x67, 0x42, 0x42, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x68, 0x68, 0x42, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6A, 0x67, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x68, 0x68, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x6A, 0x67, 0x67, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6A, 0x6A, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask15LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFD, 0x40, 0x00, 0x00, 0x00, 0x7F,
+ 0xFF, 0xFF, 0xE8, 0x01, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x03,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFD, 0x00, 0x1F, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xA8, 0x00, 0x3F,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x3F, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xE0, 0x7E, 0x7E, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0xFE,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFC, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF1, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF8,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0x7C, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x1F, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x0F,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xD0, 0x07, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3F, 0xFF, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x1F,
+ 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x0F, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7E, 0x0F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x07,
+ 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x07, 0xF8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x03,
+ 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x01, 0xF0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3E, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite15RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x68, 0x42, 0x67, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x43,
+ 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x68, 0x67, 0x67, 0x6A, 0x6A,
+ 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x67, 0x68, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x69,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x42, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x67, 0x68, 0x67, 0x67,
+ 0x67, 0x6A, 0x6A, 0x6A, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68,
+ 0x68, 0x67, 0x68, 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x6A, 0x4D, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x43, 0x43, 0x43, 0x43, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68,
+ 0x42, 0x68, 0x68, 0x68, 0x67, 0x68, 0x67, 0x67, 0x67, 0x67, 0x6A, 0x6B,
+ 0x6A, 0x6A, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x42, 0x43,
+ 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x67, 0x68, 0x67,
+ 0x67, 0x67, 0x6A, 0x6A, 0x6B, 0x6A, 0x6A, 0x4D, 0x67, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x43, 0x43,
+ 0x43, 0x43, 0x43, 0x42, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x68, 0x68, 0x67, 0x68, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6B, 0x6A, 0x4D,
+ 0x4D, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x00, 0x43, 0x43, 0x43, 0x43, 0x42, 0x43, 0x42, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x67, 0x68, 0x67, 0x67, 0x67,
+ 0x6A, 0x6A, 0x6B, 0x67, 0x69, 0x4D, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43,
+ 0x43, 0x42, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68,
+ 0x67, 0x68, 0x67, 0x67, 0x67, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x68, 0x69, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42,
+ 0x68, 0x42, 0x68, 0x68, 0x68, 0x67, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x69, 0x69, 0x6C, 0x67, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42,
+ 0x43, 0x42, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x68, 0x42, 0x42, 0x42,
+ 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x67, 0x69,
+ 0x6C, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x00, 0x43, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x67, 0x67, 0x67, 0x69, 0x6C, 0x67, 0x00, 0x00, 0x67, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x67, 0x69, 0x67, 0x67,
+ 0x00, 0x42, 0x68, 0x68, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67,
+ 0x68, 0x69, 0x6C, 0x67, 0x00, 0x00, 0x42, 0x68, 0x67, 0x67, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x67, 0x67, 0x67, 0x67, 0x6C, 0x67, 0x00, 0x00, 0x42,
+ 0x68, 0x67, 0x67, 0x67, 0x42, 0x42, 0x42, 0x42, 0x68, 0x68, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6C,
+ 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A,
+ 0x69, 0x69, 0x69, 0x69, 0x67, 0x67, 0x68, 0x67, 0x67, 0x67, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x68, 0x68, 0x68, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x6A, 0x69, 0x69, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x4D, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x67, 0x67, 0x68,
+ 0x68, 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68,
+ 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x00, 0x68, 0x68, 0x68, 0x68,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A,
+ 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29,
+ 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A,
+ 0x69, 0x69, 0x69, 0x68, 0x68, 0x43, 0x43, 0x67, 0x4D, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x29,
+ 0x4D, 0x29, 0x29, 0x29, 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x6C, 0x4D, 0x4D, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x43, 0x6D, 0x6D, 0x43,
+ 0x67, 0x4D, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x29, 0x4D, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x4D, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x4D, 0x68, 0x69, 0x69, 0x69, 0x6C,
+ 0x6D, 0x7B, 0x7B, 0x6D, 0x43, 0x4D, 0x69, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x68, 0x68, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x29, 0x4D,
+ 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x68,
+ 0x69, 0x69, 0x4D, 0x4D, 0x6D, 0x7B, 0x7B, 0x6D, 0x43, 0x6C, 0x69, 0x69,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x6C, 0x4D, 0x68, 0x67, 0x6A, 0x29, 0x69, 0x43, 0x6D, 0x6D, 0x43,
+ 0x69, 0x69, 0x67, 0x43, 0x00, 0x00, 0x00, 0x68, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x68, 0x67, 0x6A, 0x6A, 0x29,
+ 0x69, 0x43, 0x43, 0x6C, 0x69, 0x69, 0x43, 0x68, 0x00, 0x00, 0x00, 0x68,
+ 0x68, 0x67, 0x67, 0x69, 0x6C, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69,
+ 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x69, 0x4D,
+ 0x68, 0x6B, 0x6A, 0x6A, 0x29, 0x4D, 0x69, 0x69, 0x69, 0x43, 0x67, 0x00,
+ 0x00, 0x00, 0x68, 0x68, 0x68, 0x67, 0x69, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x6C, 0x6C, 0x69, 0x4D, 0x68, 0x67, 0x6B, 0x6A, 0x6A, 0x69, 0x43, 0x43,
+ 0x43, 0x4D, 0x68, 0x00, 0x00, 0x00, 0x68, 0x68, 0x67, 0x69, 0x6C, 0x00,
+ 0x00, 0x00, 0x68, 0x42, 0x68, 0x42, 0x68, 0x67, 0x67, 0x67, 0x69, 0x69,
+ 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x4D, 0x4D, 0x68, 0x67, 0x6B,
+ 0x6A, 0x6B, 0x4D, 0x4D, 0x67, 0x68, 0x00, 0x00, 0x00, 0x00, 0x68, 0x67,
+ 0x69, 0x69, 0x69, 0x00, 0x00, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x42, 0x42, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x4D, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x68, 0x67, 0x69, 0x69, 0x69, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42,
+ 0x42, 0x42, 0x68, 0x42, 0x68, 0x68, 0x42, 0x42, 0x42, 0x67, 0x67, 0x67,
+ 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6C, 0x6A,
+ 0x6C, 0x6A, 0x6B, 0x6B, 0x6B, 0x4D, 0x43, 0x68, 0x67, 0x67, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x67, 0x67, 0x69, 0x69, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x00, 0x43, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x68, 0x42, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6C, 0x6A, 0x6C,
+ 0x6A, 0x6C, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x6B, 0x67, 0x67, 0x4D, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x69, 0x69,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x42, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x42, 0x42, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x67, 0x67, 0x67,
+ 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x68, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x42, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x67, 0x67,
+ 0x67, 0x67, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x42, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x42, 0x68, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x68,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x42, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x42, 0x69, 0x4D, 0x43, 0x43, 0x43, 0x43, 0x42, 0x67,
+ 0x67, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x69, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6B, 0x6B, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x42,
+ 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x6A, 0x6B, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x67, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67,
+ 0x6A, 0x6B, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x67, 0x6A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x68, 0x67, 0x67, 0x6A, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x67, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x42, 0x67, 0x6A, 0x67, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x67, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x68,
+ 0x67, 0x6B, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x68, 0x67, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x42, 0x42, 0x67, 0x67, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x67, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x42,
+ 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42,
+ 0x68, 0x68, 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,
+ 0x43, 0x43, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask15RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xFF, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00,
+ 0x01, 0x7F, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x2F, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0xC0, 0x05, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0xFC, 0x00, 0x2B, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x7E, 0x70, 0x01, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x3F, 0x7E, 0x07, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x3F, 0x3F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x1F, 0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0xCF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xEF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x3F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x3E, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x3E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x7C, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xF8, 0x5F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0xC0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xBF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x1E, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xF8, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
+ 0xF8, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x3E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3F, 0xE0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC1, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1F, 0xC1, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F,
+ 0x80, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xF8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 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,
+};
+
+const uint8_t sprite15RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x43, 0x42, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x67, 0x6A, 0x6A, 0x6A, 0x69, 0x67,
+ 0x67, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43,
+ 0x43, 0x42, 0x43, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x67,
+ 0x67, 0x6A, 0x6A, 0x6A, 0x69, 0x67, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68,
+ 0x42, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x69, 0x67, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x43, 0x42, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x67, 0x67, 0x67, 0x67,
+ 0x6A, 0x6A, 0x6A, 0x69, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x67,
+ 0x68, 0x67, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x4D, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x43, 0x43, 0x43, 0x43, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68,
+ 0x42, 0x68, 0x68, 0x68, 0x67, 0x68, 0x67, 0x67, 0x67, 0x67, 0x6A, 0x6B,
+ 0x6A, 0x4D, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x42, 0x43,
+ 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x67, 0x68, 0x67,
+ 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x6A, 0x4D, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x00, 0x43, 0x43,
+ 0x43, 0x42, 0x43, 0x42, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x68, 0x68, 0x67, 0x68, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6B, 0x6A, 0x4D,
+ 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x42, 0x43, 0x42, 0x43, 0x42, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67,
+ 0x6A, 0x6A, 0x6B, 0x67, 0x69, 0x4D, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x43, 0x42, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x67,
+ 0x68, 0x68, 0x67, 0x67, 0x67, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x68, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x43, 0x42, 0x43, 0x42, 0x42, 0x42, 0x42,
+ 0x68, 0x42, 0x68, 0x68, 0x68, 0x67, 0x68, 0x68, 0x42, 0x42, 0x42, 0x42,
+ 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x68, 0x67, 0x69, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x42,
+ 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x68, 0x42, 0x42, 0x42,
+ 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x67, 0x67,
+ 0x67, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x00, 0x42, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x68, 0x68, 0x67, 0x67, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43,
+ 0x43, 0x43, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x43, 0x68, 0x68, 0x69, 0x6C, 0x00,
+ 0x00, 0x42, 0x42, 0x68, 0x68, 0x68, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x42, 0x42, 0x42, 0x68, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A,
+ 0x69, 0x69, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x42, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x68,
+ 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x42, 0x42, 0x68, 0x67, 0x68, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x42, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x43, 0x68, 0x67, 0x67, 0x6C, 0x00, 0x00, 0x00, 0x42,
+ 0x68, 0x68, 0x67, 0x43, 0x43, 0x43, 0x43, 0x68, 0x68, 0x68, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6C,
+ 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A,
+ 0x69, 0x69, 0x69, 0x69, 0x67, 0x67, 0x68, 0x67, 0x67, 0x67, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x68, 0x67, 0x67, 0x67,
+ 0x42, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x68, 0x68, 0x68, 0x68,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x6A, 0x69, 0x69, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x4D, 0x6C, 0x6A, 0x6A, 0x6A, 0x69, 0x69, 0x69, 0x67, 0x67, 0x68,
+ 0x68, 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x68, 0x67, 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x68, 0x68, 0x68, 0x68,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A,
+ 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29,
+ 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A,
+ 0x69, 0x69, 0x69, 0x68, 0x68, 0x43, 0x43, 0x67, 0x4D, 0x42, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x42, 0x43, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x29, 0x4D, 0x29, 0x29, 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x6C, 0x4D, 0x4D, 0x6A, 0x69, 0x69, 0x69, 0x69, 0x43, 0x6D, 0x6D, 0x43,
+ 0x67, 0x4D, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x43, 0x68, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x29, 0x4D, 0x29, 0x29, 0x29, 0x29, 0x29, 0x4D, 0x29, 0x4D, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x4D, 0x68, 0x69, 0x69, 0x69, 0x6C,
+ 0x6D, 0x7B, 0x7B, 0x6D, 0x43, 0x4D, 0x69, 0x42, 0x00, 0x00, 0x00, 0x42,
+ 0x43, 0x68, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x29, 0x4D,
+ 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x68,
+ 0x69, 0x69, 0x4D, 0x4D, 0x6D, 0x7B, 0x7B, 0x6D, 0x43, 0x6C, 0x69, 0x69,
+ 0x00, 0x00, 0x00, 0x42, 0x43, 0x68, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D,
+ 0x4D, 0x29, 0x4D, 0x29, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x6C, 0x4D, 0x68, 0x67, 0x6A, 0x29, 0x69, 0x43, 0x6D, 0x6D, 0x43,
+ 0x69, 0x69, 0x67, 0x43, 0x00, 0x00, 0x00, 0x42, 0x68, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x4D, 0x68, 0x67, 0x6A, 0x6A, 0x29,
+ 0x69, 0x43, 0x43, 0x6C, 0x69, 0x69, 0x43, 0x68, 0x00, 0x00, 0x42, 0x43,
+ 0x68, 0x67, 0x67, 0x69, 0x6C, 0x67, 0x67, 0x67, 0x67, 0x69, 0x69, 0x69,
+ 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x4D, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x69, 0x4D,
+ 0x68, 0x6B, 0x6A, 0x6A, 0x29, 0x4D, 0x69, 0x69, 0x69, 0x43, 0x67, 0x00,
+ 0x00, 0x00, 0x42, 0x68, 0x68, 0x67, 0x69, 0x6C, 0x00, 0x00, 0x00, 0x00,
+ 0x67, 0x67, 0x67, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x6C, 0x6C, 0x69, 0x4D, 0x68, 0x67, 0x6B, 0x6A, 0x6A, 0x69, 0x43, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x68, 0x69, 0x6C, 0x00,
+ 0x00, 0x00, 0x68, 0x42, 0x68, 0x42, 0x68, 0x67, 0x67, 0x67, 0x69, 0x69,
+ 0x69, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D,
+ 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x69, 0x69, 0x4D, 0x4D, 0x68, 0x67, 0x6B,
+ 0x6A, 0x6B, 0x4D, 0x4D, 0x67, 0x68, 0x00, 0x00, 0x00, 0x42, 0x43, 0x68,
+ 0x67, 0x69, 0x69, 0x00, 0x00, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x42, 0x42, 0x67, 0x67, 0x67, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C, 0x4D, 0x6C,
+ 0x4D, 0x6C, 0x4D, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x4D, 0x68, 0x68, 0x67, 0x67, 0x67, 0x67, 0x67, 0x42, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x68, 0x67, 0x69, 0x69, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43,
+ 0x42, 0x42, 0x68, 0x42, 0x68, 0x68, 0x42, 0x42, 0x42, 0x67, 0x67, 0x67,
+ 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C,
+ 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6C, 0x6A,
+ 0x6A, 0x6A, 0x6B, 0x6B, 0x6B, 0x4D, 0x43, 0x68, 0x67, 0x67, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x67, 0x67, 0x67, 0x68, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x43, 0x43, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68,
+ 0x68, 0x42, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6A, 0x6C, 0x6A, 0x6C,
+ 0x6A, 0x6C, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x6B, 0x67, 0x67, 0x4D, 0x43,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x67, 0x67, 0x68,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x43, 0x42,
+ 0x42, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x42, 0x42, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A,
+ 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x67, 0x67, 0x67,
+ 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x67, 0x42, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x00, 0x43, 0x43, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x42, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x67, 0x67,
+ 0x67, 0x67, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x43, 0x42, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x42, 0x68, 0x42, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x43, 0x43, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x42, 0x68, 0x42, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,
+ 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x43, 0x42, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x42, 0x42, 0x68,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x42, 0x4D, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x68,
+ 0x68, 0x68, 0x68, 0x42, 0x69, 0x4D, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43,
+ 0x42, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x69, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x67, 0x6B, 0x6B, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x42, 0x68, 0x68, 0x42,
+ 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x6B, 0x4D, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x42,
+ 0x68, 0x42, 0x42, 0x67, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6A,
+ 0x6B, 0x69, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x68, 0x42, 0x68, 0x67, 0x6A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x67, 0x67, 0x6A, 0x69, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x67, 0x69,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x67, 0x6A, 0x67, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x67, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x68, 0x67,
+ 0x6B, 0x67, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x67, 0x6A, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x68, 0x42, 0x68, 0x67, 0x67, 0x67, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x67, 0x67, 0x6A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x68, 0x68, 0x67, 0x67, 0x43, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x43, 0x42, 0x42, 0x67,
+ 0x6A, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x42, 0x68, 0x68,
+ 0x68, 0x67, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x43, 0x42, 0x42, 0x67, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x68, 0x42, 0x68, 0x68, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x43, 0x67, 0x67, 0x6A, 0x6A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x68, 0x43, 0x43, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6A, 0x6A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x68, 0x43,
+ 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x43, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask15RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3F, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xE0, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00,
+ 0x02, 0xBF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x80, 0x17, 0xFF, 0xFF,
+ 0xFE, 0x00, 0x00, 0x00, 0xC0, 0x03, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF8, 0x00, 0xBF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0xFC, 0x00, 0x15, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xFC, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x7E, 0x7E, 0x07, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0x3F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x3F, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x3F, 0x8F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x3F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x3E, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFC, 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x7C, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xF8, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
+ 0xE0, 0x0B, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x80, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFC, 0x1E, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,
+ 0xF8, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x3E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
+ 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0xFE, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0F, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F,
+ 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x7E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0F, 0x80, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite16LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E,
+ 0x6E, 0x00, 0x00, 0x00, 0x6E, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6F, 0x00, 0x1A, 0x6E, 0x6F, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x6E, 0x6F, 0x70, 0x6F, 0x6E, 0x00,
+ 0x00, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x28, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x28, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x6F, 0x6E, 0x6E,
+ 0x6E, 0x6E, 0x00, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x71,
+ 0x71, 0x24, 0x24, 0x24, 0x71, 0x71, 0x72, 0x1A, 0x28, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6F, 0x70, 0x1A,
+ 0x6F, 0x6E, 0x71, 0x72, 0x24, 0x0E, 0x0E, 0x6F, 0x6F, 0x6E, 0x6F, 0x28,
+ 0x28, 0x1A, 0x71, 0x1D, 0x0E, 0x28, 0x6F, 0x28, 0x6E, 0x28, 0x71, 0x71,
+ 0x71, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x6F, 0x6E, 0x6E, 0x6F, 0x72, 0x71, 0x72, 0x24, 0x0E, 0x6E, 0x6F, 0x28,
+ 0x6E, 0x28, 0x1A, 0x71, 0x24, 0x1D, 0x1D, 0x0E, 0x1A, 0x1A, 0x1A, 0x28,
+ 0x28, 0x28, 0x6E, 0x28, 0x71, 0x71, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6F, 0x6F, 0x6E, 0x6E, 0x72, 0x71, 0x71, 0x71, 0x24, 0x0E,
+ 0x6E, 0x70, 0x28, 0x6E, 0x1D, 0x72, 0x71, 0x71, 0x71, 0x1D, 0x0E, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x6F, 0x28, 0x28, 0x6E, 0x6E, 0x71, 0x71, 0x1A,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x6E, 0x71, 0x6E, 0x72, 0x71, 0x71,
+ 0x71, 0x24, 0x0E, 0x6E, 0x70, 0x28, 0x6E, 0x1D, 0x72, 0x71, 0x73, 0x71,
+ 0x1D, 0x0E, 0x1A, 0x1A, 0x1A, 0x0E, 0x12, 0x12, 0x0E, 0x6F, 0x6F, 0x1A,
+ 0x1A, 0x6E, 0x71, 0x71, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6E, 0x71, 0x6E,
+ 0x72, 0x71, 0x71, 0x71, 0x24, 0x0E, 0x6E, 0x70, 0x28, 0x28, 0x6E, 0x1D,
+ 0x71, 0x71, 0x73, 0x71, 0x1D, 0x11, 0x1A, 0x1A, 0x0E, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x0E, 0x6F, 0x28, 0x72, 0x28, 0x6E, 0x71, 0x72, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
+ 0x1D, 0x71, 0x28, 0x6E, 0x71, 0x73, 0x71, 0x24, 0x0E, 0x11, 0x70, 0x28,
+ 0x28, 0x28, 0x0E, 0x1D, 0x71, 0x73, 0x73, 0x71, 0x1D, 0x11, 0x28, 0x1A,
+ 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13, 0x6F, 0x28, 0x1A, 0x72, 0x28, 0x28,
+ 0x71, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1D, 0x71, 0x28, 0x6E, 0x72, 0x71, 0x73, 0x71, 0x24,
+ 0x11, 0x70, 0x70, 0x28, 0x28, 0x6E, 0x0E, 0x1D, 0x71, 0x73, 0x73, 0x71,
+ 0x1D, 0x11, 0x28, 0x6F, 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13, 0x28, 0x28,
+ 0x1A, 0x72, 0x28, 0x6E, 0x71, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x1D, 0x73, 0x28, 0x6E, 0x72,
+ 0x71, 0x73, 0x71, 0x24, 0x13, 0x70, 0x28, 0x28, 0x28, 0x6E, 0x11, 0x1D,
+ 0x71, 0x73, 0x73, 0x73, 0x24, 0x11, 0x28, 0x6F, 0x13, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x13, 0x28, 0x1A, 0x72, 0x72, 0x28, 0x6E, 0x71, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1D, 0x73,
+ 0x71, 0x28, 0x0E, 0x71, 0x71, 0x73, 0x73, 0x24, 0x12, 0x6F, 0x28, 0x28,
+ 0x28, 0x6E, 0x13, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x24, 0x11, 0x11, 0x6F,
+ 0x6F, 0x13, 0x7B, 0x7B, 0x13, 0x28, 0x1A, 0x72, 0x72, 0x1A, 0x6F, 0x6E,
+ 0x71, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6E, 0x1D, 0x73, 0x1A, 0x6F, 0x0E, 0x71, 0x73, 0x73, 0x73, 0x24,
+ 0x12, 0x6F, 0x28, 0x28, 0x28, 0x6E, 0x11, 0x1D, 0x72, 0x73, 0x73, 0x73,
+ 0x24, 0x11, 0x13, 0x6F, 0x28, 0x28, 0x6E, 0x6E, 0x28, 0x1A, 0x72, 0x72,
+ 0x1A, 0x6F, 0x6E, 0x1A, 0x71, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x6E, 0x71, 0x71, 0x1A, 0x28, 0x13, 0x71,
+ 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x28, 0x28, 0x28, 0x28, 0x7B, 0x1D,
+ 0x72, 0x73, 0x73, 0x73, 0x24, 0x1D, 0x12, 0x6F, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x1A, 0x72, 0x1A, 0x28, 0x6E, 0x6E, 0x1A, 0x72, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x71, 0x71, 0x71,
+ 0x1A, 0x28, 0x12, 0x72, 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x28, 0x28,
+ 0x28, 0x6E, 0x7B, 0x1D, 0x72, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x7B, 0x6F,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x72, 0x72, 0x1A, 0x6F, 0x6E, 0x1A, 0x72,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6E, 0x71, 0x71, 0x71, 0x1A, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x73, 0x24,
+ 0x7B, 0x6F, 0x28, 0x1A, 0x28, 0x28, 0x7B, 0x1D, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x1D, 0x7B, 0x11, 0x28, 0x28, 0x28, 0x28, 0x28, 0x72, 0x73, 0x6F,
+ 0x28, 0x6E, 0x72, 0x1A, 0x28, 0x00, 0x00, 0x11, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x6E, 0x71, 0x73, 0x1D, 0x1A, 0x28, 0x7B, 0x72,
+ 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x28, 0x28, 0x28, 0x6E, 0x7B, 0x1D,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x13, 0x13, 0x28, 0x28, 0x28, 0x28,
+ 0x6F, 0x72, 0x73, 0x6F, 0x6E, 0x0E, 0x1A, 0x28, 0x00, 0x00, 0x12, 0x11,
+ 0x6E, 0x0E, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x6E, 0x71, 0x73, 0x13,
+ 0x28, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x1A, 0x28,
+ 0x28, 0x28, 0x7B, 0x1D, 0x72, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x11, 0x12,
+ 0x28, 0x28, 0x1A, 0x28, 0x6F, 0x73, 0x73, 0x6F, 0x28, 0x0E, 0x28, 0x28,
+ 0x00, 0x12, 0x11, 0x28, 0x0E, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6E,
+ 0x12, 0x71, 0x73, 0x12, 0x28, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x73, 0x24,
+ 0x7B, 0x6F, 0x28, 0x28, 0x1A, 0x28, 0x7B, 0x11, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x24, 0x1D, 0x7B, 0x1A, 0x28, 0x28, 0x28, 0x6F, 0x73, 0x73, 0x6F,
+ 0x6E, 0x0E, 0x28, 0x13, 0x00, 0x12, 0x6E, 0x28, 0x71, 0x1A, 0x0E, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x6E, 0x7B, 0x73, 0x73, 0x7B, 0x28, 0x28, 0x7B, 0x72,
+ 0x73, 0x73, 0x73, 0x24, 0x7B, 0x1A, 0x28, 0x1A, 0x28, 0x28, 0x7B, 0x11,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x24, 0x1D, 0x7B, 0x28, 0x28, 0x1A, 0x28,
+ 0x1A, 0x73, 0x73, 0x6F, 0x6E, 0x0E, 0x13, 0x12, 0x12, 0x6E, 0x28, 0x1A,
+ 0x0E, 0x1A, 0x28, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x6E, 0x7B, 0x73, 0x73, 0x7B,
+ 0x1A, 0x28, 0x7B, 0x0E, 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x1A, 0x1A,
+ 0x1A, 0x28, 0x7B, 0x13, 0x72, 0x73, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x7B,
+ 0x11, 0x1A, 0x28, 0x1A, 0x28, 0x73, 0x73, 0x28, 0x28, 0x0E, 0x12, 0x12,
+ 0x13, 0x6E, 0x28, 0x1A, 0x1A, 0x28, 0x0E, 0x1A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6E, 0x6E,
+ 0x7B, 0x73, 0x73, 0x7B, 0x28, 0x1A, 0x7B, 0x0E, 0x73, 0x73, 0x73, 0x24,
+ 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7B, 0x13, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x71, 0x1D, 0x7B, 0x13, 0x1A, 0x1A, 0x28, 0x1A, 0x73, 0x73, 0x28,
+ 0x6E, 0x0E, 0x13, 0x13, 0x6E, 0x28, 0x1A, 0x71, 0x28, 0x24, 0x28, 0x11,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x6E, 0x28, 0x12, 0x73, 0x73, 0x7B, 0x1A, 0x1A, 0x7B, 0x0E,
+ 0x73, 0x73, 0x73, 0x24, 0x12, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7B, 0x11,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x13, 0x12, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x73, 0x73, 0x28, 0x1A, 0x28, 0x28, 0x6E, 0x28, 0x1A, 0x72, 0x0E,
+ 0x28, 0x1A, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x12, 0x73, 0x73, 0x7B,
+ 0x1A, 0x1A, 0x12, 0x72, 0x71, 0x73, 0x73, 0x24, 0x13, 0x28, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x7B, 0x13, 0x72, 0x73, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x11,
+ 0x12, 0x1A, 0x1A, 0x1A, 0x1A, 0x73, 0x73, 0x1A, 0x28, 0x1A, 0x6E, 0x1A,
+ 0x6E, 0x6E, 0x1A, 0x28, 0x1A, 0x72, 0x1A, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x73, 0x73,
+ 0x12, 0x73, 0x73, 0x13, 0x0E, 0x1A, 0x13, 0x11, 0x72, 0x73, 0x73, 0x72,
+ 0x11, 0x13, 0x28, 0x1A, 0x28, 0x1A, 0x7B, 0x12, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x71, 0x1D, 0x1D, 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x73, 0x73, 0x28,
+ 0x1A, 0x28, 0x28, 0x6E, 0x6E, 0x28, 0x6E, 0x28, 0x72, 0x1A, 0x1A, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x1A, 0x73, 0x7B, 0x7B, 0x73, 0x0E, 0x73, 0x1D, 0x13, 0x28, 0x1A, 0x13,
+ 0x72, 0x73, 0x73, 0x72, 0x24, 0x12, 0x28, 0x28, 0x1A, 0x28, 0x12, 0x7B,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x1D, 0x7B, 0x1A, 0x28, 0x1A,
+ 0x6F, 0x73, 0x73, 0x1A, 0x6E, 0x28, 0x13, 0x28, 0x6E, 0x6E, 0x28, 0x72,
+ 0x28, 0x1A, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x73, 0x7B, 0x7B, 0x73, 0x0E, 0x73, 0x24,
+ 0x7B, 0x28, 0x1A, 0x7B, 0x72, 0x73, 0x73, 0x72, 0x24, 0x12, 0x1A, 0x28,
+ 0x28, 0x28, 0x13, 0x7B, 0x72, 0x71, 0x73, 0x73, 0x71, 0x71, 0x1D, 0x1D,
+ 0x7B, 0x6F, 0x1A, 0x28, 0x1A, 0x72, 0x73, 0x1A, 0x28, 0x28, 0x00, 0x00,
+ 0x13, 0x6E, 0x1A, 0x28, 0x1A, 0x28, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x71, 0x11, 0x71, 0x73,
+ 0x12, 0x1A, 0x73, 0x24, 0x7B, 0x1A, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x72,
+ 0x24, 0x12, 0x28, 0x28, 0x28, 0x6E, 0x11, 0x7B, 0x72, 0x71, 0x73, 0x73,
+ 0x73, 0x71, 0x24, 0x1D, 0x7B, 0x11, 0x28, 0x1A, 0x28, 0x72, 0x73, 0x1A,
+ 0x6F, 0x6E, 0x13, 0x00, 0x00, 0x6E, 0x28, 0x1A, 0x28, 0x1A, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x71,
+ 0x73, 0x11, 0x28, 0x28, 0x7B, 0x1A, 0x73, 0x72, 0x13, 0x28, 0x28, 0x7B,
+ 0x72, 0x71, 0x73, 0x72, 0x24, 0x12, 0x11, 0x28, 0x1A, 0x28, 0x6E, 0x7B,
+ 0x72, 0x71, 0x71, 0x73, 0x71, 0x71, 0x24, 0x1D, 0x7B, 0x13, 0x28, 0x28,
+ 0x28, 0x72, 0x73, 0x1A, 0x28, 0x6E, 0x28, 0x13, 0x00, 0x00, 0x28, 0x28,
+ 0x1A, 0x1A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x71, 0x73, 0x1D, 0x11, 0x6E, 0x28, 0x7B, 0x1A, 0x73, 0x71,
+ 0x13, 0x6E, 0x28, 0x7B, 0x24, 0x72, 0x73, 0x72, 0x24, 0x12, 0x13, 0x28,
+ 0x28, 0x28, 0x28, 0x7B, 0x72, 0x71, 0x73, 0x73, 0x73, 0x72, 0x24, 0x1D,
+ 0x13, 0x12, 0x28, 0x28, 0x1A, 0x72, 0x73, 0x24, 0x28, 0x6F, 0x6E, 0x28,
+ 0x13, 0x00, 0x00, 0x28, 0x28, 0x1A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0E, 0x71, 0x73, 0x72, 0x13, 0x6F, 0x6E, 0x6E,
+ 0x7B, 0x1A, 0x71, 0x73, 0x13, 0x28, 0x6E, 0x13, 0x11, 0x24, 0x71, 0x73,
+ 0x72, 0x13, 0x12, 0x6F, 0x1A, 0x28, 0x6E, 0x7B, 0x72, 0x71, 0x71, 0x73,
+ 0x71, 0x72, 0x24, 0x1D, 0x13, 0x12, 0x28, 0x28, 0x28, 0x72, 0x73, 0x24,
+ 0x1A, 0x6F, 0x6E, 0x6E, 0x28, 0x13, 0x00, 0x6E, 0x28, 0x28, 0x11, 0x00,
+ 0x00, 0x72, 0x72, 0x24, 0x24, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x0E,
+ 0x11, 0x13, 0x6F, 0x6E, 0x7B, 0x1A, 0x71, 0x71, 0x13, 0x6E, 0x6F, 0x6E,
+ 0x13, 0x24, 0x72, 0x71, 0x72, 0x11, 0x7B, 0x6F, 0x28, 0x28, 0x6E, 0x7B,
+ 0x24, 0x72, 0x71, 0x72, 0x71, 0x72, 0x72, 0x1D, 0x13, 0x7B, 0x28, 0x1A,
+ 0x28, 0x72, 0x72, 0x73, 0x1A, 0x28, 0x6F, 0x6E, 0x28, 0x28, 0x00, 0x00,
+ 0x6E, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x01, 0x72, 0x72,
+ 0x72, 0x72, 0x72, 0x72, 0x0E, 0x11, 0x13, 0x6E, 0x13, 0x1A, 0x72, 0x71,
+ 0x11, 0x11, 0x6E, 0x70, 0x7B, 0x0E, 0x72, 0x71, 0x72, 0x72, 0x7B, 0x6F,
+ 0x28, 0x28, 0x6E, 0x13, 0x24, 0x24, 0x72, 0x71, 0x72, 0x71, 0x72, 0x24,
+ 0x13, 0x7B, 0x28, 0x28, 0x28, 0x1A, 0x72, 0x73, 0x1A, 0x28, 0x6F, 0x6E,
+ 0x6E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x13, 0x0E,
+ 0x0E, 0x11, 0x11, 0x1A, 0x0E, 0x0E, 0x0E, 0x0E, 0x72, 0x0E, 0x13, 0x6E,
+ 0x13, 0x0E, 0x24, 0x72, 0x71, 0x13, 0x6E, 0x6E, 0x13, 0x11, 0x0E, 0x72,
+ 0x71, 0x72, 0x7B, 0x70, 0x28, 0x70, 0x6E, 0x13, 0x0E, 0x1D, 0x24, 0x72,
+ 0x71, 0x72, 0x72, 0x24, 0x11, 0x7B, 0x28, 0x28, 0x28, 0x1A, 0x72, 0x73,
+ 0x24, 0x1A, 0x6F, 0x28, 0x6E, 0x28, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x1A, 0x0E, 0x6E, 0x6E, 0x13, 0x1A, 0x24, 0x72, 0x13, 0x70, 0x70,
+ 0x6E, 0x13, 0x11, 0x0E, 0x72, 0x0E, 0x12, 0x28, 0x70, 0x28, 0x6E, 0x11,
+ 0x13, 0x1D, 0x1D, 0x24, 0x72, 0x72, 0x72, 0x72, 0x1D, 0x7B, 0x28, 0x28,
+ 0x28, 0x1A, 0x72, 0x73, 0x24, 0x1A, 0x28, 0x28, 0x6E, 0x6E, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1A, 0x6E, 0x13, 0x11, 0x0E,
+ 0x0E, 0x13, 0x70, 0x6E, 0x70, 0x13, 0x11, 0x11, 0x0E, 0x72, 0x13, 0x6E,
+ 0x6F, 0x70, 0x28, 0x6E, 0x13, 0x0E, 0x1D, 0x1D, 0x24, 0x72, 0x72, 0x72,
+ 0x1D, 0x7B, 0x28, 0x28, 0x1A, 0x1A, 0x72, 0x73, 0x73, 0x1A, 0x1A, 0x28,
+ 0x28, 0x6E, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x6E, 0x13, 0x11, 0x0E, 0x0E, 0x13, 0x13, 0x70, 0x13, 0x11, 0x11,
+ 0x11, 0x0E, 0x11, 0x6E, 0x70, 0x28, 0x70, 0x6E, 0x13, 0x11, 0x0E, 0x1D,
+ 0x1D, 0x24, 0x72, 0x72, 0x1D, 0x13, 0x28, 0x28, 0x28, 0x1A, 0x72, 0x72,
+ 0x73, 0x71, 0x1A, 0x1A, 0x28, 0x6E, 0x6E, 0x6E, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E, 0x13, 0x11, 0x11, 0x13, 0x70,
+ 0x13, 0x70, 0x13, 0x11, 0x11, 0x11, 0x1D, 0x13, 0x6E, 0x70, 0x6E, 0x70,
+ 0x6E, 0x13, 0x11, 0x0E, 0x1D, 0x1D, 0x24, 0x24, 0x1D, 0x13, 0x28, 0x28,
+ 0x1A, 0x1A, 0x1A, 0x72, 0x73, 0x73, 0x1A, 0x1A, 0x28, 0x28, 0x6E, 0x6E,
+ 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
+ 0x13, 0x13, 0x11, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x11, 0x70, 0x0E,
+ 0x13, 0x6E, 0x70, 0x70, 0x70, 0x13, 0x11, 0x11, 0x0E, 0x0E, 0x1D, 0x1D,
+ 0x24, 0x11, 0x28, 0x28, 0x28, 0x1A, 0x1A, 0x72, 0x72, 0x73, 0x72, 0x1A,
+ 0x28, 0x28, 0x6E, 0x70, 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, 0x13, 0x13, 0x13, 0x13, 0x70, 0x70, 0x70,
+ 0x13, 0x13, 0x13, 0x11, 0x0E, 0x13, 0x6E, 0x6E, 0x70, 0x70, 0x13, 0x11,
+ 0x11, 0x0E, 0x0E, 0x1D, 0x1D, 0x11, 0x28, 0x28, 0x1A, 0x28, 0x1A, 0x1A,
+ 0x72, 0x72, 0x72, 0x1A, 0x28, 0x28, 0x6E, 0x70, 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,
+ 0x13, 0x70, 0x6E, 0x6E, 0x6F, 0x6F, 0x1A, 0x13, 0x13, 0x13, 0x70, 0x70,
+ 0x6E, 0x6E, 0x70, 0x13, 0x11, 0x11, 0x0E, 0x0E, 0x1D, 0x28, 0x6E, 0x28,
+ 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x72, 0x72, 0x28, 0x28, 0x28, 0x6E, 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, 0x70, 0x6E, 0x6F, 0x6F, 0x1A,
+ 0x1A, 0x71, 0x6E, 0x70, 0x70, 0x70, 0x6E, 0x13, 0x13, 0x11, 0x11, 0x0E,
+ 0x0E, 0x0E, 0x6E, 0x6E, 0x1A, 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x28,
+ 0x28, 0x6E, 0x70, 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, 0x70, 0x6F, 0x6F, 0x1A, 0x1A, 0x71, 0x1A, 0x1A, 0x6E, 0x70, 0x6E,
+ 0x6E, 0x13, 0x11, 0x11, 0x11, 0x0E, 0x28, 0x11, 0x6E, 0x1A, 0x28, 0x28,
+ 0x1A, 0x28, 0x28, 0x28, 0x6E, 0x70, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x1A, 0x1A, 0x1A,
+ 0x71, 0x1A, 0x6E, 0x70, 0x00, 0x70, 0x13, 0x13, 0x11, 0x11, 0x0E, 0x28,
+ 0x6E, 0x6E, 0x6E, 0x28, 0x28, 0x28, 0x6E, 0x6E, 0x70, 0x70, 0x13, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x70, 0x6E, 0x00, 0x00, 0x00, 0x70,
+ 0x13, 0x13, 0x11, 0x0E, 0x28, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x70,
+ 0x6E, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x70,
+ 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x0E, 0x6E, 0x11,
+ 0x70, 0x70, 0x70, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x70, 0x6E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E,
+ 0x70, 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, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask16LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x90, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0xE4, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x27,
+ 0xDF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x98,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0xFE, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x7E,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x7F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x9E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCC, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x1F,
+ 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00,
+ 0x3F, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x83, 0xFF, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite16LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6E, 0x6F, 0x00, 0x1A, 0x12, 0x00, 0x00, 0x6F, 0x6E, 0x6E, 0x6E, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x6F, 0x00, 0x1A, 0x12, 0x6E, 0x6E, 0x6E, 0x6E,
+ 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x28, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6F, 0x00, 0x1A, 0x12, 0x6E,
+ 0x6E, 0x72, 0x7B, 0x7B, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x00, 0x71,
+ 0x71, 0x24, 0x24, 0x24, 0x24, 0x71, 0x71, 0x72, 0x13, 0x6E, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6F, 0x6E,
+ 0x1A, 0x6F, 0x6E, 0x71, 0x72, 0x0E, 0x0E, 0x6F, 0x6F, 0x6E, 0x6F, 0x28,
+ 0x28, 0x1A, 0x71, 0x1D, 0x0E, 0x28, 0x28, 0x6F, 0x28, 0x6E, 0x28, 0x71,
+ 0x1A, 0x28, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x1A, 0x6F, 0x6E, 0x6E, 0x6F, 0x71, 0x72, 0x24, 0x0E, 0x6E, 0x6F, 0x28,
+ 0x6E, 0x28, 0x1A, 0x71, 0x24, 0x1D, 0x1D, 0x0E, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x28, 0x28, 0x28, 0x6E, 0x28, 0x71, 0x1A, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6F, 0x6F, 0x6E, 0x6E, 0x72, 0x71, 0x71, 0x71, 0x24, 0x0E,
+ 0x6E, 0x70, 0x28, 0x6E, 0x1D, 0x72, 0x71, 0x71, 0x71, 0x1D, 0x0E, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x6F, 0x28, 0x1A, 0x6E, 0x6E, 0x71, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x6E, 0x71, 0x6E, 0x72, 0x71, 0x71,
+ 0x71, 0x24, 0x0E, 0x6E, 0x70, 0x28, 0x6E, 0x1D, 0x72, 0x71, 0x73, 0x71,
+ 0x1D, 0x0E, 0x1A, 0x1A, 0x1A, 0x0E, 0x12, 0x12, 0x0E, 0x6E, 0x6F, 0x1A,
+ 0x72, 0x72, 0x6E, 0x71, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6E, 0x71, 0x6E,
+ 0x72, 0x71, 0x71, 0x71, 0x24, 0x0E, 0x6E, 0x70, 0x28, 0x28, 0x6E, 0x1D,
+ 0x71, 0x71, 0x73, 0x71, 0x1D, 0x11, 0x1A, 0x1A, 0x0E, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x0E, 0x28, 0x6F, 0x1A, 0x71, 0x1A, 0x6E, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
+ 0x1D, 0x71, 0x28, 0x6E, 0x71, 0x73, 0x71, 0x24, 0x0E, 0x11, 0x70, 0x28,
+ 0x28, 0x28, 0x0E, 0x1D, 0x71, 0x73, 0x73, 0x71, 0x1D, 0x11, 0x28, 0x1A,
+ 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13, 0x28, 0x6F, 0x1A, 0x72, 0x72, 0x6E,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1D, 0x71, 0x28, 0x6E, 0x72, 0x71, 0x73, 0x71, 0x24,
+ 0x11, 0x70, 0x70, 0x28, 0x28, 0x6E, 0x0E, 0x1D, 0x71, 0x73, 0x73, 0x71,
+ 0x1D, 0x11, 0x28, 0x6F, 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13, 0x28, 0x28,
+ 0x28, 0x1A, 0x72, 0x6E, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x1D, 0x73, 0x28, 0x6E, 0x72,
+ 0x71, 0x73, 0x71, 0x24, 0x13, 0x70, 0x28, 0x28, 0x28, 0x6E, 0x11, 0x1D,
+ 0x71, 0x73, 0x73, 0x73, 0x24, 0x11, 0x28, 0x6F, 0x13, 0x7B, 0x7B, 0x7B,
+ 0x7B, 0x13, 0x28, 0x28, 0x1A, 0x72, 0x72, 0x28, 0x1A, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1D, 0x73,
+ 0x71, 0x28, 0x0E, 0x71, 0x71, 0x73, 0x73, 0x24, 0x12, 0x6F, 0x28, 0x28,
+ 0x28, 0x6E, 0x13, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x24, 0x11, 0x11, 0x6F,
+ 0x6F, 0x13, 0x7B, 0x7B, 0x13, 0x28, 0x1A, 0x1A, 0x72, 0x72, 0x1A, 0x6E,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6E, 0x1D, 0x73, 0x1A, 0x6F, 0x0E, 0x71, 0x73, 0x73, 0x73, 0x24,
+ 0x12, 0x6F, 0x28, 0x28, 0x28, 0x6E, 0x11, 0x1D, 0x72, 0x73, 0x73, 0x73,
+ 0x24, 0x11, 0x13, 0x6F, 0x28, 0x28, 0x6E, 0x6E, 0x28, 0x1A, 0x72, 0x72,
+ 0x72, 0x1A, 0x6F, 0x28, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x6E, 0x71, 0x71, 0x1A, 0x28, 0x13, 0x71,
+ 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x28, 0x28, 0x28, 0x28, 0x7B, 0x1D,
+ 0x72, 0x73, 0x73, 0x73, 0x24, 0x1D, 0x12, 0x6F, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x1A, 0x72, 0x1A, 0x28, 0x28, 0x6E, 0x1A, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x71, 0x71, 0x71,
+ 0x1A, 0x28, 0x12, 0x72, 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x28, 0x28,
+ 0x28, 0x6E, 0x7B, 0x1D, 0x72, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x7B, 0x6F,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x72, 0x72, 0x1A, 0x6F, 0x6E, 0x1A, 0x72,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6E, 0x71, 0x71, 0x71, 0x1A, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x73, 0x24,
+ 0x7B, 0x6F, 0x28, 0x1A, 0x28, 0x28, 0x7B, 0x1D, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x1D, 0x7B, 0x11, 0x28, 0x28, 0x28, 0x28, 0x28, 0x72, 0x73, 0x6F,
+ 0x28, 0x6E, 0x72, 0x28, 0x00, 0x00, 0x13, 0x13, 0x13, 0x12, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x6E, 0x71, 0x73, 0x1D, 0x1A, 0x28, 0x7B, 0x72,
+ 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x28, 0x28, 0x28, 0x6E, 0x7B, 0x1D,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x13, 0x13, 0x28, 0x28, 0x28, 0x28,
+ 0x6F, 0x72, 0x73, 0x6F, 0x6E, 0x0E, 0x1A, 0x13, 0x00, 0x13, 0x13, 0x6E,
+ 0x28, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x6E, 0x71, 0x73, 0x13,
+ 0x28, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x1A, 0x28,
+ 0x28, 0x28, 0x7B, 0x1D, 0x72, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x11, 0x12,
+ 0x28, 0x28, 0x1A, 0x28, 0x6F, 0x73, 0x73, 0x6F, 0x28, 0x0E, 0x28, 0x28,
+ 0x00, 0x13, 0x6E, 0x28, 0x0E, 0x6E, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6E,
+ 0x12, 0x71, 0x73, 0x12, 0x28, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x73, 0x24,
+ 0x7B, 0x6F, 0x28, 0x28, 0x1A, 0x28, 0x7B, 0x11, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x24, 0x1D, 0x7B, 0x1A, 0x28, 0x28, 0x28, 0x6F, 0x73, 0x73, 0x6F,
+ 0x6E, 0x0E, 0x28, 0x13, 0x13, 0x6E, 0x28, 0x0E, 0x1A, 0x0E, 0x6E, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x6E, 0x7B, 0x73, 0x73, 0x7B, 0x28, 0x28, 0x7B, 0x72,
+ 0x73, 0x73, 0x73, 0x24, 0x7B, 0x1A, 0x28, 0x1A, 0x28, 0x28, 0x7B, 0x11,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x24, 0x1D, 0x7B, 0x28, 0x28, 0x1A, 0x28,
+ 0x1A, 0x73, 0x73, 0x6F, 0x6E, 0x0E, 0x13, 0x12, 0x6E, 0x28, 0x1A, 0x0E,
+ 0x1A, 0x28, 0x28, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x6E, 0x7B, 0x73, 0x73, 0x7B,
+ 0x1A, 0x28, 0x7B, 0x0E, 0x73, 0x73, 0x73, 0x24, 0x7B, 0x6F, 0x1A, 0x1A,
+ 0x1A, 0x28, 0x7B, 0x13, 0x72, 0x73, 0x73, 0x73, 0x73, 0x73, 0x1D, 0x7B,
+ 0x11, 0x1A, 0x28, 0x1A, 0x28, 0x73, 0x73, 0x28, 0x28, 0x13, 0x12, 0x13,
+ 0x6E, 0x28, 0x1A, 0x1A, 0x28, 0x0E, 0x0E, 0x13, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6E, 0x6E,
+ 0x7B, 0x73, 0x73, 0x7B, 0x28, 0x1A, 0x7B, 0x0E, 0x73, 0x73, 0x73, 0x24,
+ 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7B, 0x13, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x71, 0x1D, 0x7B, 0x13, 0x1A, 0x1A, 0x28, 0x1A, 0x73, 0x73, 0x28,
+ 0x6E, 0x0E, 0x13, 0x6E, 0x28, 0x1A, 0x71, 0x28, 0x24, 0x28, 0x11, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x28, 0x6E, 0x28, 0x12, 0x73, 0x73, 0x7B, 0x1A, 0x1A, 0x7B, 0x0E,
+ 0x73, 0x73, 0x73, 0x24, 0x12, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7B, 0x11,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x13, 0x12, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x73, 0x73, 0x28, 0x1A, 0x28, 0x28, 0x6E, 0x1A, 0x72, 0x0E, 0x28,
+ 0x1A, 0x1D, 0x28, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x12, 0x73, 0x73, 0x7B,
+ 0x1A, 0x1A, 0x12, 0x72, 0x71, 0x73, 0x73, 0x24, 0x13, 0x28, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x7B, 0x13, 0x72, 0x73, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x11,
+ 0x12, 0x1A, 0x1A, 0x1A, 0x1A, 0x73, 0x73, 0x1A, 0x28, 0x1A, 0x6E, 0x1A,
+ 0x6E, 0x1A, 0x28, 0x1A, 0x72, 0x1A, 0x1D, 0x13, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x73, 0x73,
+ 0x12, 0x73, 0x73, 0x13, 0x0E, 0x1A, 0x13, 0x11, 0x72, 0x73, 0x73, 0x72,
+ 0x11, 0x13, 0x28, 0x1A, 0x28, 0x1A, 0x7B, 0x12, 0x72, 0x73, 0x73, 0x73,
+ 0x73, 0x71, 0x1D, 0x1D, 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x73, 0x73, 0x28,
+ 0x1A, 0x28, 0x28, 0x6E, 0x28, 0x6E, 0x28, 0x72, 0x1A, 0x1A, 0x1D, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x1A, 0x73, 0x7B, 0x7B, 0x73, 0x0E, 0x73, 0x1D, 0x13, 0x28, 0x1A, 0x13,
+ 0x72, 0x73, 0x73, 0x72, 0x24, 0x12, 0x28, 0x28, 0x1A, 0x28, 0x12, 0x7B,
+ 0x72, 0x73, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x1D, 0x7B, 0x1A, 0x28, 0x1A,
+ 0x6F, 0x73, 0x73, 0x1A, 0x6E, 0x28, 0x13, 0x28, 0x6E, 0x28, 0x72, 0x28,
+ 0x1A, 0x72, 0x28, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x73, 0x7B, 0x7B, 0x73, 0x0E, 0x73, 0x24,
+ 0x7B, 0x28, 0x1A, 0x7B, 0x72, 0x73, 0x73, 0x72, 0x24, 0x12, 0x1A, 0x28,
+ 0x28, 0x28, 0x13, 0x7B, 0x72, 0x71, 0x73, 0x73, 0x71, 0x71, 0x1D, 0x1D,
+ 0x7B, 0x6F, 0x1A, 0x28, 0x1A, 0x72, 0x73, 0x1A, 0x28, 0x13, 0x12, 0x13,
+ 0x6E, 0x1A, 0x28, 0x1A, 0x28, 0x1A, 0x1A, 0x13, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x71, 0x11, 0x71, 0x73,
+ 0x12, 0x1A, 0x73, 0x24, 0x7B, 0x1A, 0x28, 0x7B, 0x72, 0x73, 0x73, 0x72,
+ 0x24, 0x12, 0x28, 0x28, 0x28, 0x6E, 0x11, 0x7B, 0x72, 0x71, 0x73, 0x73,
+ 0x73, 0x71, 0x24, 0x1D, 0x7B, 0x11, 0x28, 0x1A, 0x28, 0x72, 0x73, 0x1A,
+ 0x6F, 0x6E, 0x13, 0x12, 0x6E, 0x28, 0x1A, 0x1A, 0x1A, 0x28, 0x1D, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x71,
+ 0x73, 0x11, 0x28, 0x28, 0x7B, 0x1A, 0x73, 0x72, 0x13, 0x28, 0x28, 0x7B,
+ 0x72, 0x71, 0x73, 0x72, 0x24, 0x12, 0x11, 0x28, 0x1A, 0x28, 0x6E, 0x7B,
+ 0x72, 0x71, 0x71, 0x73, 0x71, 0x71, 0x24, 0x1D, 0x7B, 0x13, 0x28, 0x28,
+ 0x28, 0x72, 0x73, 0x1A, 0x28, 0x6E, 0x13, 0x7B, 0x13, 0x6E, 0x28, 0x28,
+ 0x1A, 0x1A, 0x6E, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x13, 0x71, 0x73, 0x1D, 0x11, 0x6E, 0x28, 0x7B, 0x1A, 0x73, 0x71,
+ 0x13, 0x6E, 0x28, 0x7B, 0x24, 0x72, 0x73, 0x72, 0x24, 0x12, 0x13, 0x28,
+ 0x28, 0x28, 0x28, 0x7B, 0x72, 0x71, 0x73, 0x73, 0x73, 0x72, 0x24, 0x1D,
+ 0x13, 0x12, 0x28, 0x28, 0x1A, 0x72, 0x73, 0x24, 0x28, 0x6F, 0x13, 0x12,
+ 0x00, 0x13, 0x6E, 0x6E, 0x28, 0x6E, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x12, 0x0E, 0x71, 0x73, 0x72, 0x13, 0x6F, 0x6E, 0x6E,
+ 0x7B, 0x1A, 0x71, 0x73, 0x13, 0x28, 0x6E, 0x13, 0x11, 0x24, 0x71, 0x73,
+ 0x72, 0x13, 0x12, 0x6F, 0x1A, 0x28, 0x6E, 0x7B, 0x72, 0x71, 0x71, 0x73,
+ 0x71, 0x72, 0x24, 0x1D, 0x13, 0x12, 0x28, 0x28, 0x28, 0x72, 0x73, 0x24,
+ 0x1A, 0x6F, 0x0E, 0x13, 0x00, 0x00, 0x00, 0x6E, 0x6E, 0x6E, 0x13, 0x00,
+ 0x00, 0x0E, 0x0E, 0x0E, 0x24, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x0E,
+ 0x11, 0x13, 0x6F, 0x6E, 0x7B, 0x1A, 0x71, 0x71, 0x13, 0x6E, 0x6F, 0x6E,
+ 0x13, 0x24, 0x72, 0x71, 0x72, 0x11, 0x7B, 0x6F, 0x28, 0x28, 0x6E, 0x7B,
+ 0x24, 0x72, 0x71, 0x72, 0x71, 0x72, 0x72, 0x1D, 0x13, 0x7B, 0x28, 0x1A,
+ 0x28, 0x72, 0x72, 0x73, 0x1A, 0x28, 0x28, 0x0E, 0x13, 0x00, 0x00, 0x00,
+ 0x13, 0x13, 0x12, 0x00, 0x00, 0x12, 0x70, 0x70, 0x0E, 0x0E, 0x0E, 0x0E,
+ 0x0E, 0x0E, 0x72, 0x72, 0x0E, 0x11, 0x13, 0x6E, 0x13, 0x1A, 0x72, 0x71,
+ 0x11, 0x11, 0x6E, 0x70, 0x7B, 0x0E, 0x72, 0x71, 0x72, 0x72, 0x7B, 0x6F,
+ 0x28, 0x28, 0x6E, 0x13, 0x24, 0x24, 0x72, 0x71, 0x72, 0x71, 0x72, 0x24,
+ 0x13, 0x7B, 0x28, 0x28, 0x28, 0x1A, 0x72, 0x73, 0x1A, 0x28, 0x6E, 0x28,
+ 0x0E, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x70, 0x70, 0x0E, 0x0E, 0x0E, 0x1A, 0x72, 0x0E, 0x13, 0x6E,
+ 0x13, 0x0E, 0x24, 0x72, 0x71, 0x13, 0x6E, 0x6E, 0x13, 0x11, 0x0E, 0x72,
+ 0x71, 0x72, 0x7B, 0x70, 0x28, 0x70, 0x6E, 0x13, 0x0E, 0x1D, 0x24, 0x72,
+ 0x71, 0x72, 0x72, 0x24, 0x11, 0x7B, 0x28, 0x28, 0x28, 0x1A, 0x72, 0x73,
+ 0x24, 0x1A, 0x6E, 0x6E, 0x1A, 0x28, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x1A, 0x0E, 0x6E, 0x6E, 0x13, 0x1A, 0x24, 0x72, 0x13, 0x70, 0x70,
+ 0x6E, 0x13, 0x11, 0x0E, 0x72, 0x0E, 0x12, 0x28, 0x70, 0x28, 0x6E, 0x11,
+ 0x13, 0x1D, 0x1D, 0x24, 0x72, 0x72, 0x72, 0x72, 0x1D, 0x7B, 0x28, 0x28,
+ 0x28, 0x1A, 0x72, 0x73, 0x24, 0x1A, 0x28, 0x6E, 0x6E, 0x28, 0x70, 0x13,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x1A, 0x6E, 0x13, 0x11, 0x0E,
+ 0x0E, 0x13, 0x70, 0x6E, 0x70, 0x13, 0x11, 0x11, 0x0E, 0x72, 0x13, 0x6E,
+ 0x6F, 0x70, 0x28, 0x6E, 0x13, 0x0E, 0x1D, 0x1D, 0x24, 0x72, 0x72, 0x72,
+ 0x1D, 0x7B, 0x28, 0x28, 0x1A, 0x1A, 0x72, 0x73, 0x73, 0x1A, 0x1A, 0x28,
+ 0x6E, 0x6E, 0x28, 0x13, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x6E, 0x13, 0x11, 0x0E, 0x0E, 0x13, 0x13, 0x70, 0x13, 0x11, 0x11,
+ 0x11, 0x0E, 0x11, 0x6E, 0x70, 0x28, 0x70, 0x6E, 0x13, 0x11, 0x0E, 0x1D,
+ 0x1D, 0x24, 0x72, 0x72, 0x1D, 0x13, 0x28, 0x28, 0x28, 0x1A, 0x72, 0x72,
+ 0x73, 0x73, 0x1A, 0x1A, 0x28, 0x6E, 0x6E, 0x28, 0x70, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E, 0x13, 0x11, 0x11, 0x13, 0x70,
+ 0x13, 0x70, 0x13, 0x11, 0x11, 0x11, 0x1D, 0x13, 0x6E, 0x70, 0x6E, 0x70,
+ 0x6E, 0x13, 0x11, 0x0E, 0x1D, 0x1D, 0x24, 0x24, 0x1D, 0x13, 0x28, 0x28,
+ 0x1A, 0x1A, 0x1A, 0x72, 0x72, 0x73, 0x72, 0x1A, 0x1A, 0x6E, 0x6E, 0x6E,
+ 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
+ 0x13, 0x13, 0x11, 0x13, 0x70, 0x13, 0x70, 0x13, 0x70, 0x11, 0x70, 0x0E,
+ 0x13, 0x6E, 0x70, 0x70, 0x70, 0x13, 0x11, 0x11, 0x0E, 0x0E, 0x1D, 0x1D,
+ 0x24, 0x11, 0x28, 0x28, 0x28, 0x1A, 0x1A, 0x1A, 0x72, 0x72, 0x72, 0x1A,
+ 0x1A, 0x6E, 0x6E, 0x6E, 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, 0x13, 0x13, 0x13, 0x13, 0x70, 0x70, 0x70,
+ 0x13, 0x13, 0x13, 0x11, 0x0E, 0x13, 0x6E, 0x6E, 0x70, 0x70, 0x13, 0x11,
+ 0x11, 0x0E, 0x0E, 0x1D, 0x1D, 0x11, 0x28, 0x28, 0x1A, 0x28, 0x1A, 0x1A,
+ 0x1A, 0x72, 0x72, 0x1A, 0x1A, 0x28, 0x6E, 0x6E, 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,
+ 0x13, 0x70, 0x6E, 0x6E, 0x6F, 0x6F, 0x1A, 0x13, 0x13, 0x13, 0x70, 0x70,
+ 0x6E, 0x6E, 0x70, 0x13, 0x11, 0x11, 0x0E, 0x0E, 0x1D, 0x28, 0x6E, 0x28,
+ 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x28, 0x28, 0x6E, 0x70,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E, 0x6F, 0x6F, 0x6F,
+ 0x1A, 0x1A, 0x6E, 0x70, 0x70, 0x70, 0x70, 0x6E, 0x13, 0x11, 0x11, 0x0E,
+ 0x0E, 0x0E, 0x6E, 0x6E, 0x28, 0x28, 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x28,
+ 0x28, 0x6E, 0x6E, 0x70, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x6E, 0x6E, 0x6F, 0x6F, 0x1A, 0x1A, 0x1A, 0x6E, 0x70, 0x70, 0x70,
+ 0x70, 0x6E, 0x13, 0x11, 0x11, 0x0E, 0x28, 0x11, 0x6E, 0x6E, 0x28, 0x28,
+ 0x28, 0x1A, 0x28, 0x28, 0x6E, 0x6E, 0x70, 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, 0x70, 0x70, 0x6E, 0x6F, 0x6F, 0x1A, 0x71,
+ 0x1A, 0x6E, 0x6E, 0x70, 0x00, 0x70, 0x70, 0x70, 0x13, 0x13, 0x0E, 0x28,
+ 0x11, 0x11, 0x6E, 0x6E, 0x28, 0x28, 0x28, 0x6E, 0x6E, 0x6E, 0x70, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x70, 0x6E, 0x6F, 0x6F, 0x1A, 0x1A, 0x1A, 0x6E, 0x00, 0x00, 0x00, 0x70,
+ 0x6F, 0x6F, 0x13, 0x13, 0x28, 0x1A, 0x13, 0x13, 0x6E, 0x6E, 0x6E, 0x6E,
+ 0x6E, 0x70, 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, 0x70, 0x70, 0x70, 0x6E, 0x6F, 0x1A, 0x1A,
+ 0x6E, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E, 0x6E, 0x6E, 0x28, 0x6E, 0x11,
+ 0x70, 0x6E, 0x6E, 0x70, 0x70, 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,
+ 0x70, 0x70, 0x6E, 0x6F, 0x1A, 0x1A, 0x1A, 0x6E, 0x6E, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x70, 0x70, 0x13, 0x70, 0x70, 0x70, 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, 0x12, 0x12, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask16LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x9E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1B, 0xFC, 0x07, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x37,
+ 0xFF, 0xDF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x03, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80,
+ 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C,
+ 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x01, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x7F, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1E,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8E, 0x7F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xC0, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x1F,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0,
+ 0x00, 0x00, 0x00, 0x07, 0xFF, 0x7F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x01,
+ 0xFF, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x87, 0xFF, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite16RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x6E, 0x00, 0x00, 0x00, 0x6E,
+ 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6E, 0x00, 0x00, 0x6F, 0x6E, 0x1A, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x28, 0x11, 0x13, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6E, 0x00, 0x00, 0x6E, 0x6F, 0x70, 0x6F, 0x6E, 0x00, 0x00,
+ 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x1A, 0x72, 0x71, 0x71, 0x24, 0x24, 0x24, 0x71,
+ 0x71, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x00, 0x6E, 0x6E,
+ 0x6E, 0x6E, 0x6F, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1A, 0x71, 0x71, 0x71, 0x28, 0x6E,
+ 0x28, 0x6F, 0x28, 0x0E, 0x1D, 0x71, 0x1A, 0x28, 0x28, 0x6F, 0x6E, 0x6F,
+ 0x6F, 0x0E, 0x0E, 0x24, 0x72, 0x71, 0x6E, 0x6F, 0x1A, 0x70, 0x6F, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1A, 0x71, 0x71,
+ 0x28, 0x6E, 0x28, 0x28, 0x28, 0x1A, 0x1A, 0x1A, 0x0E, 0x1D, 0x1D, 0x24,
+ 0x71, 0x1A, 0x28, 0x6E, 0x28, 0x6F, 0x6E, 0x0E, 0x24, 0x72, 0x71, 0x72,
+ 0x6F, 0x6E, 0x6E, 0x6F, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
+ 0x1A, 0x71, 0x71, 0x6E, 0x6E, 0x28, 0x28, 0x6F, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x0E, 0x1D, 0x71, 0x71, 0x71, 0x72, 0x1D, 0x6E, 0x28, 0x70, 0x6E,
+ 0x0E, 0x24, 0x71, 0x71, 0x71, 0x72, 0x6E, 0x6E, 0x6F, 0x6F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x71, 0x71, 0x6E, 0x1A, 0x1A, 0x6F, 0x6F, 0x0E,
+ 0x12, 0x12, 0x0E, 0x1A, 0x1A, 0x1A, 0x0E, 0x1D, 0x71, 0x73, 0x71, 0x72,
+ 0x1D, 0x6E, 0x28, 0x70, 0x6E, 0x0E, 0x24, 0x71, 0x71, 0x71, 0x72, 0x6E,
+ 0x71, 0x6E, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x72, 0x71, 0x6E, 0x28, 0x72,
+ 0x28, 0x6F, 0x0E, 0x7B, 0x7B, 0x7B, 0x7B, 0x0E, 0x1A, 0x1A, 0x11, 0x1D,
+ 0x71, 0x73, 0x71, 0x71, 0x1D, 0x6E, 0x28, 0x28, 0x70, 0x6E, 0x0E, 0x24,
+ 0x71, 0x71, 0x71, 0x72, 0x6E, 0x71, 0x6E, 0x13, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x71,
+ 0x28, 0x28, 0x72, 0x1A, 0x28, 0x6F, 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13,
+ 0x1A, 0x28, 0x11, 0x1D, 0x71, 0x73, 0x73, 0x71, 0x1D, 0x0E, 0x28, 0x28,
+ 0x28, 0x70, 0x11, 0x0E, 0x24, 0x71, 0x73, 0x71, 0x6E, 0x28, 0x71, 0x1D,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1A, 0x71, 0x6E, 0x28, 0x72, 0x1A, 0x28, 0x28, 0x13, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x13, 0x6F, 0x28, 0x11, 0x1D, 0x71, 0x73, 0x73, 0x71,
+ 0x1D, 0x0E, 0x6E, 0x28, 0x28, 0x70, 0x70, 0x11, 0x24, 0x71, 0x73, 0x71,
+ 0x72, 0x6E, 0x28, 0x71, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x71, 0x6E, 0x28, 0x72, 0x72,
+ 0x1A, 0x28, 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13, 0x6F, 0x28, 0x11, 0x24,
+ 0x73, 0x73, 0x73, 0x71, 0x1D, 0x11, 0x6E, 0x28, 0x28, 0x28, 0x70, 0x13,
+ 0x24, 0x71, 0x73, 0x71, 0x72, 0x6E, 0x28, 0x73, 0x1D, 0x6F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x71,
+ 0x6E, 0x6F, 0x1A, 0x72, 0x72, 0x1A, 0x28, 0x13, 0x7B, 0x7B, 0x13, 0x6F,
+ 0x6F, 0x11, 0x11, 0x24, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x13, 0x6E, 0x28,
+ 0x28, 0x28, 0x6F, 0x12, 0x24, 0x73, 0x73, 0x71, 0x71, 0x0E, 0x28, 0x71,
+ 0x73, 0x1D, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x28, 0x71, 0x1A, 0x6E, 0x6F, 0x1A, 0x72, 0x72, 0x1A, 0x28,
+ 0x6E, 0x6E, 0x28, 0x28, 0x6F, 0x13, 0x11, 0x24, 0x73, 0x73, 0x73, 0x72,
+ 0x1D, 0x11, 0x6E, 0x28, 0x28, 0x28, 0x6F, 0x12, 0x24, 0x73, 0x73, 0x73,
+ 0x71, 0x0E, 0x6F, 0x1A, 0x73, 0x1D, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x1A, 0x6E, 0x6E, 0x28,
+ 0x1A, 0x72, 0x1A, 0x28, 0x28, 0x28, 0x28, 0x28, 0x6F, 0x12, 0x1D, 0x24,
+ 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x28, 0x28, 0x28, 0x28, 0x6F, 0x7B,
+ 0x24, 0x73, 0x73, 0x73, 0x71, 0x13, 0x28, 0x1A, 0x71, 0x71, 0x6E, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
+ 0x72, 0x1A, 0x6E, 0x6F, 0x1A, 0x72, 0x72, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x6F, 0x7B, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x6E, 0x28,
+ 0x28, 0x28, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73, 0x72, 0x12, 0x28, 0x1A,
+ 0x71, 0x71, 0x71, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
+ 0x11, 0x00, 0x00, 0x28, 0x1A, 0x72, 0x6E, 0x28, 0x6F, 0x73, 0x72, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x11, 0x7B, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x1D, 0x7B, 0x28, 0x28, 0x1A, 0x28, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73,
+ 0x72, 0x7B, 0x28, 0x1A, 0x71, 0x71, 0x71, 0x6E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x11, 0x0E, 0x6E, 0x11, 0x12, 0x00, 0x00, 0x28, 0x1A, 0x0E, 0x6E,
+ 0x6F, 0x73, 0x72, 0x6F, 0x28, 0x28, 0x28, 0x28, 0x13, 0x13, 0x1D, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x6E, 0x28, 0x28, 0x28, 0x6F, 0x7B,
+ 0x24, 0x73, 0x73, 0x73, 0x72, 0x7B, 0x28, 0x1A, 0x1D, 0x73, 0x71, 0x6E,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x0E, 0x28, 0x11, 0x12, 0x00,
+ 0x28, 0x28, 0x0E, 0x28, 0x6F, 0x73, 0x73, 0x6F, 0x28, 0x1A, 0x28, 0x28,
+ 0x12, 0x11, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x28, 0x28,
+ 0x28, 0x1A, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73, 0x72, 0x7B, 0x28, 0x28,
+ 0x13, 0x73, 0x71, 0x6E, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x0E, 0x1A, 0x71,
+ 0x28, 0x6E, 0x12, 0x00, 0x13, 0x28, 0x0E, 0x6E, 0x6F, 0x73, 0x73, 0x6F,
+ 0x28, 0x28, 0x28, 0x1A, 0x7B, 0x1D, 0x24, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x11, 0x7B, 0x28, 0x1A, 0x28, 0x28, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73,
+ 0x72, 0x7B, 0x28, 0x28, 0x12, 0x73, 0x71, 0x12, 0x6E, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0E, 0x28, 0x1A, 0x0E, 0x1A, 0x28, 0x6E, 0x12, 0x12, 0x13, 0x0E, 0x6E,
+ 0x6F, 0x73, 0x73, 0x1A, 0x28, 0x1A, 0x28, 0x28, 0x7B, 0x1D, 0x24, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x11, 0x7B, 0x28, 0x28, 0x1A, 0x28, 0x1A, 0x7B,
+ 0x24, 0x73, 0x73, 0x73, 0x72, 0x7B, 0x28, 0x28, 0x7B, 0x73, 0x73, 0x7B,
+ 0x6E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1A, 0x0E, 0x28, 0x1A, 0x1A, 0x28, 0x6E, 0x13,
+ 0x12, 0x12, 0x0E, 0x28, 0x28, 0x73, 0x73, 0x28, 0x1A, 0x28, 0x1A, 0x11,
+ 0x7B, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x73, 0x72, 0x13, 0x7B, 0x28, 0x1A,
+ 0x1A, 0x1A, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73, 0x0E, 0x7B, 0x28, 0x1A,
+ 0x7B, 0x73, 0x73, 0x7B, 0x6E, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x28, 0x24, 0x28,
+ 0x71, 0x1A, 0x28, 0x6E, 0x13, 0x13, 0x0E, 0x6E, 0x28, 0x73, 0x73, 0x1A,
+ 0x28, 0x1A, 0x1A, 0x13, 0x7B, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x13, 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7B, 0x24, 0x73, 0x73, 0x73,
+ 0x0E, 0x7B, 0x1A, 0x28, 0x7B, 0x73, 0x73, 0x7B, 0x6E, 0x6E, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x1D, 0x1A, 0x28, 0x0E, 0x72, 0x1A, 0x28, 0x6E, 0x28, 0x28, 0x1A,
+ 0x28, 0x73, 0x73, 0x1A, 0x1A, 0x1A, 0x1A, 0x12, 0x13, 0x1D, 0x71, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x11, 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x12,
+ 0x24, 0x73, 0x73, 0x73, 0x0E, 0x7B, 0x1A, 0x1A, 0x7B, 0x73, 0x73, 0x12,
+ 0x28, 0x6E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x1A, 0x72, 0x1A, 0x28, 0x1A, 0x6E, 0x6E,
+ 0x1A, 0x6E, 0x1A, 0x28, 0x1A, 0x73, 0x73, 0x1A, 0x1A, 0x1A, 0x1A, 0x12,
+ 0x11, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x73, 0x72, 0x13, 0x7B, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x28, 0x13, 0x24, 0x73, 0x73, 0x71, 0x72, 0x12, 0x1A, 0x1A,
+ 0x7B, 0x73, 0x73, 0x12, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1A, 0x1A, 0x72,
+ 0x28, 0x6E, 0x28, 0x6E, 0x6E, 0x28, 0x28, 0x1A, 0x28, 0x73, 0x73, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x7B, 0x1D, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x12, 0x7B, 0x1A, 0x28, 0x1A, 0x28, 0x13, 0x11, 0x72, 0x73, 0x73, 0x72,
+ 0x11, 0x13, 0x1A, 0x0E, 0x13, 0x73, 0x73, 0x12, 0x73, 0x73, 0x28, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x72, 0x1A, 0x28, 0x72, 0x28, 0x6E, 0x6E, 0x28, 0x13, 0x28, 0x6E,
+ 0x1A, 0x73, 0x73, 0x6F, 0x1A, 0x28, 0x1A, 0x7B, 0x1D, 0x1D, 0x71, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x7B, 0x12, 0x28, 0x1A, 0x28, 0x28, 0x12, 0x24,
+ 0x72, 0x73, 0x73, 0x72, 0x13, 0x1A, 0x28, 0x13, 0x1D, 0x73, 0x0E, 0x73,
+ 0x7B, 0x7B, 0x73, 0x1A, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x1A, 0x28, 0x1A, 0x6E, 0x13,
+ 0x00, 0x00, 0x28, 0x28, 0x1A, 0x73, 0x72, 0x1A, 0x28, 0x1A, 0x6F, 0x7B,
+ 0x1D, 0x1D, 0x71, 0x71, 0x73, 0x73, 0x71, 0x72, 0x7B, 0x13, 0x28, 0x28,
+ 0x28, 0x1A, 0x12, 0x24, 0x72, 0x73, 0x73, 0x72, 0x7B, 0x1A, 0x28, 0x7B,
+ 0x24, 0x73, 0x0E, 0x73, 0x7B, 0x7B, 0x73, 0x24, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1A, 0x28,
+ 0x1A, 0x28, 0x6E, 0x00, 0x00, 0x13, 0x6E, 0x6F, 0x1A, 0x73, 0x72, 0x28,
+ 0x1A, 0x28, 0x11, 0x7B, 0x1D, 0x24, 0x71, 0x73, 0x73, 0x73, 0x71, 0x72,
+ 0x7B, 0x11, 0x6E, 0x28, 0x28, 0x28, 0x12, 0x24, 0x72, 0x73, 0x73, 0x72,
+ 0x7B, 0x28, 0x1A, 0x7B, 0x24, 0x73, 0x1A, 0x12, 0x73, 0x71, 0x11, 0x71,
+ 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6E, 0x1A, 0x1A, 0x28, 0x28, 0x00, 0x00, 0x13, 0x28, 0x6E, 0x28,
+ 0x1A, 0x73, 0x72, 0x28, 0x28, 0x28, 0x13, 0x7B, 0x1D, 0x24, 0x71, 0x71,
+ 0x73, 0x71, 0x71, 0x72, 0x7B, 0x6E, 0x28, 0x1A, 0x28, 0x11, 0x12, 0x24,
+ 0x72, 0x73, 0x71, 0x72, 0x7B, 0x28, 0x28, 0x13, 0x72, 0x73, 0x1A, 0x7B,
+ 0x28, 0x28, 0x11, 0x73, 0x71, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x1A, 0x28, 0x28, 0x00, 0x00, 0x13,
+ 0x28, 0x6E, 0x6F, 0x28, 0x24, 0x73, 0x72, 0x1A, 0x28, 0x28, 0x12, 0x13,
+ 0x1D, 0x24, 0x72, 0x73, 0x73, 0x73, 0x71, 0x72, 0x7B, 0x28, 0x28, 0x28,
+ 0x28, 0x13, 0x12, 0x24, 0x72, 0x73, 0x72, 0x24, 0x7B, 0x28, 0x6E, 0x13,
+ 0x71, 0x73, 0x1A, 0x7B, 0x28, 0x6E, 0x11, 0x1D, 0x73, 0x71, 0x13, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x28, 0x28,
+ 0x6E, 0x00, 0x13, 0x28, 0x6E, 0x6E, 0x6F, 0x1A, 0x24, 0x73, 0x72, 0x28,
+ 0x28, 0x28, 0x12, 0x13, 0x1D, 0x24, 0x72, 0x71, 0x73, 0x71, 0x71, 0x72,
+ 0x7B, 0x6E, 0x28, 0x1A, 0x6F, 0x12, 0x13, 0x72, 0x73, 0x71, 0x24, 0x11,
+ 0x13, 0x6E, 0x28, 0x13, 0x73, 0x71, 0x1A, 0x7B, 0x6E, 0x6E, 0x6F, 0x13,
+ 0x72, 0x73, 0x71, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x6E, 0x00, 0x00, 0x28, 0x28, 0x6E, 0x6F, 0x28, 0x1A,
+ 0x73, 0x72, 0x72, 0x28, 0x1A, 0x28, 0x7B, 0x13, 0x1D, 0x72, 0x72, 0x71,
+ 0x72, 0x71, 0x72, 0x24, 0x7B, 0x6E, 0x28, 0x28, 0x6F, 0x7B, 0x11, 0x72,
+ 0x71, 0x72, 0x24, 0x13, 0x6E, 0x6F, 0x6E, 0x13, 0x71, 0x71, 0x1A, 0x7B,
+ 0x6E, 0x6F, 0x13, 0x11, 0x0E, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x24,
+ 0x24, 0x72, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6E,
+ 0x6E, 0x6F, 0x28, 0x1A, 0x73, 0x72, 0x1A, 0x28, 0x28, 0x28, 0x7B, 0x13,
+ 0x24, 0x72, 0x71, 0x72, 0x71, 0x72, 0x24, 0x24, 0x13, 0x6E, 0x28, 0x28,
+ 0x6F, 0x7B, 0x72, 0x72, 0x71, 0x72, 0x0E, 0x7B, 0x70, 0x6E, 0x11, 0x11,
+ 0x71, 0x72, 0x1A, 0x13, 0x6E, 0x13, 0x11, 0x0E, 0x72, 0x72, 0x72, 0x72,
+ 0x72, 0x72, 0x01, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x28, 0x6E, 0x28, 0x6F, 0x1A, 0x24, 0x73, 0x72, 0x1A, 0x28,
+ 0x28, 0x28, 0x7B, 0x11, 0x24, 0x72, 0x72, 0x71, 0x72, 0x24, 0x1D, 0x0E,
+ 0x13, 0x6E, 0x70, 0x28, 0x70, 0x7B, 0x72, 0x71, 0x72, 0x0E, 0x11, 0x13,
+ 0x6E, 0x6E, 0x13, 0x71, 0x72, 0x24, 0x0E, 0x13, 0x6E, 0x13, 0x0E, 0x72,
+ 0x0E, 0x0E, 0x0E, 0x0E, 0x1A, 0x11, 0x11, 0x0E, 0x0E, 0x13, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6E, 0x6E, 0x28, 0x28, 0x1A, 0x24,
+ 0x73, 0x72, 0x1A, 0x28, 0x28, 0x28, 0x7B, 0x1D, 0x72, 0x72, 0x72, 0x72,
+ 0x24, 0x1D, 0x1D, 0x13, 0x11, 0x6E, 0x28, 0x70, 0x28, 0x12, 0x0E, 0x72,
+ 0x0E, 0x11, 0x13, 0x6E, 0x70, 0x70, 0x13, 0x72, 0x24, 0x1A, 0x13, 0x6E,
+ 0x6E, 0x0E, 0x1A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1A, 0x6E, 0x28,
+ 0x28, 0x1A, 0x1A, 0x73, 0x73, 0x72, 0x1A, 0x1A, 0x28, 0x28, 0x7B, 0x1D,
+ 0x72, 0x72, 0x72, 0x24, 0x1D, 0x1D, 0x0E, 0x13, 0x6E, 0x28, 0x70, 0x6F,
+ 0x6E, 0x13, 0x72, 0x0E, 0x11, 0x11, 0x13, 0x70, 0x6E, 0x70, 0x13, 0x0E,
+ 0x0E, 0x11, 0x13, 0x6E, 0x1A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x6E, 0x6E, 0x6E, 0x28, 0x1A, 0x1A, 0x71, 0x73, 0x72, 0x72, 0x1A, 0x28,
+ 0x28, 0x28, 0x13, 0x1D, 0x72, 0x72, 0x24, 0x1D, 0x1D, 0x0E, 0x11, 0x13,
+ 0x6E, 0x70, 0x28, 0x70, 0x6E, 0x11, 0x0E, 0x11, 0x11, 0x11, 0x13, 0x70,
+ 0x13, 0x13, 0x0E, 0x0E, 0x11, 0x13, 0x6E, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x70, 0x6E, 0x6E, 0x28, 0x28, 0x1A, 0x1A, 0x73, 0x73,
+ 0x72, 0x1A, 0x1A, 0x1A, 0x28, 0x28, 0x13, 0x1D, 0x24, 0x24, 0x1D, 0x1D,
+ 0x0E, 0x11, 0x13, 0x6E, 0x70, 0x6E, 0x70, 0x6E, 0x13, 0x1D, 0x11, 0x11,
+ 0x11, 0x13, 0x70, 0x13, 0x70, 0x13, 0x11, 0x11, 0x13, 0x6E, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x6E, 0x28, 0x28,
+ 0x1A, 0x72, 0x73, 0x72, 0x72, 0x1A, 0x1A, 0x28, 0x28, 0x28, 0x11, 0x24,
+ 0x1D, 0x1D, 0x0E, 0x0E, 0x11, 0x11, 0x13, 0x70, 0x70, 0x70, 0x6E, 0x13,
+ 0x0E, 0x70, 0x11, 0x70, 0x13, 0x70, 0x13, 0x70, 0x13, 0x11, 0x13, 0x13,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x70, 0x6E, 0x28, 0x28, 0x1A, 0x72, 0x72, 0x72, 0x1A, 0x1A, 0x28, 0x1A,
+ 0x28, 0x28, 0x11, 0x1D, 0x1D, 0x0E, 0x0E, 0x11, 0x11, 0x13, 0x70, 0x70,
+ 0x6E, 0x6E, 0x13, 0x0E, 0x11, 0x13, 0x13, 0x13, 0x70, 0x70, 0x70, 0x13,
+ 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E, 0x28, 0x28, 0x28, 0x72, 0x72, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x28, 0x28, 0x6E, 0x28, 0x1D, 0x0E, 0x0E, 0x11, 0x11,
+ 0x13, 0x70, 0x6E, 0x6E, 0x70, 0x70, 0x13, 0x13, 0x13, 0x1A, 0x6F, 0x6F,
+ 0x6E, 0x6E, 0x70, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x6E, 0x28,
+ 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x28, 0x1A, 0x6E, 0x6E, 0x0E, 0x0E,
+ 0x0E, 0x11, 0x11, 0x13, 0x13, 0x6E, 0x70, 0x70, 0x70, 0x6E, 0x71, 0x1A,
+ 0x1A, 0x6F, 0x6F, 0x6E, 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, 0x6E, 0x70, 0x6E, 0x28, 0x28, 0x28, 0x1A, 0x28, 0x28, 0x1A, 0x6E,
+ 0x11, 0x28, 0x0E, 0x11, 0x11, 0x11, 0x13, 0x6E, 0x6E, 0x70, 0x6E, 0x1A,
+ 0x1A, 0x71, 0x1A, 0x1A, 0x6F, 0x6F, 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, 0x13, 0x70, 0x70, 0x6E, 0x6E, 0x28, 0x28,
+ 0x28, 0x6E, 0x6E, 0x6E, 0x28, 0x0E, 0x11, 0x11, 0x13, 0x13, 0x70, 0x00,
+ 0x70, 0x6E, 0x1A, 0x71, 0x1A, 0x1A, 0x1A, 0x6F, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6E,
+ 0x70, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x28, 0x0E, 0x11, 0x13, 0x13,
+ 0x70, 0x00, 0x00, 0x00, 0x6E, 0x70, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x13, 0x70, 0x70, 0x70, 0x11, 0x6E, 0x0E, 0x11,
+ 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x1A, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x13, 0x13,
+ 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E, 0x70,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70,
+ 0x6E, 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, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask16RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xD0, 0x00, 0x00, 0x00,
+ 0x00, 0x0F, 0xF8, 0x27, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFB,
+ 0xE4, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x7E, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0x3F, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0x7E, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0x7C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x79, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0x00, 0x7B, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
+ 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF,
+ 0xF8, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00,
+ 0x07, 0xFF, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0xFC,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xC1, 0xE0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7E, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite16RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x6E, 0x6E,
+ 0x6F, 0x00, 0x00, 0x12, 0x1A, 0x00, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x28, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x12, 0x6E, 0x6E, 0x6E, 0x6E, 0x12, 0x1A, 0x00, 0x6F,
+ 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6E, 0x13, 0x72, 0x71, 0x71, 0x24, 0x24, 0x24, 0x24, 0x71,
+ 0x71, 0x00, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x7B, 0x7B, 0x72, 0x6E,
+ 0x6E, 0x12, 0x1A, 0x00, 0x6F, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x28, 0x1A, 0x71, 0x28, 0x6E, 0x28,
+ 0x6F, 0x28, 0x28, 0x0E, 0x1D, 0x71, 0x1A, 0x28, 0x28, 0x6F, 0x6E, 0x6F,
+ 0x6F, 0x0E, 0x0E, 0x72, 0x71, 0x6E, 0x6F, 0x1A, 0x6E, 0x6F, 0x1A, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x1A, 0x71, 0x28,
+ 0x6E, 0x28, 0x28, 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x0E, 0x1D, 0x1D, 0x24,
+ 0x71, 0x1A, 0x28, 0x6E, 0x28, 0x6F, 0x6E, 0x0E, 0x24, 0x72, 0x71, 0x6F,
+ 0x6E, 0x6E, 0x6F, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1A, 0x71, 0x6E, 0x6E, 0x1A, 0x28, 0x6F, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x0E, 0x1D, 0x71, 0x71, 0x71, 0x72, 0x1D, 0x6E, 0x28, 0x70, 0x6E,
+ 0x0E, 0x24, 0x71, 0x71, 0x71, 0x72, 0x6E, 0x6E, 0x6F, 0x6F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x28, 0x71, 0x6E, 0x72, 0x72, 0x1A, 0x6F, 0x6E, 0x0E,
+ 0x12, 0x12, 0x0E, 0x1A, 0x1A, 0x1A, 0x0E, 0x1D, 0x71, 0x73, 0x71, 0x72,
+ 0x1D, 0x6E, 0x28, 0x70, 0x6E, 0x0E, 0x24, 0x71, 0x71, 0x71, 0x72, 0x6E,
+ 0x71, 0x6E, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6E, 0x1A, 0x71, 0x1A,
+ 0x6F, 0x28, 0x0E, 0x7B, 0x7B, 0x7B, 0x7B, 0x0E, 0x1A, 0x1A, 0x11, 0x1D,
+ 0x71, 0x73, 0x71, 0x71, 0x1D, 0x6E, 0x28, 0x28, 0x70, 0x6E, 0x0E, 0x24,
+ 0x71, 0x71, 0x71, 0x72, 0x6E, 0x71, 0x6E, 0x13, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A,
+ 0x6E, 0x72, 0x72, 0x1A, 0x6F, 0x28, 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13,
+ 0x1A, 0x28, 0x11, 0x1D, 0x71, 0x73, 0x73, 0x71, 0x1D, 0x0E, 0x28, 0x28,
+ 0x28, 0x70, 0x11, 0x0E, 0x24, 0x71, 0x73, 0x71, 0x6E, 0x28, 0x71, 0x1D,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1A, 0x6E, 0x72, 0x1A, 0x28, 0x28, 0x28, 0x13, 0x7B,
+ 0x7B, 0x7B, 0x7B, 0x13, 0x6F, 0x28, 0x11, 0x1D, 0x71, 0x73, 0x73, 0x71,
+ 0x1D, 0x0E, 0x6E, 0x28, 0x28, 0x70, 0x70, 0x11, 0x24, 0x71, 0x73, 0x71,
+ 0x72, 0x6E, 0x28, 0x71, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x28, 0x72, 0x72, 0x1A,
+ 0x28, 0x28, 0x13, 0x7B, 0x7B, 0x7B, 0x7B, 0x13, 0x6F, 0x28, 0x11, 0x24,
+ 0x73, 0x73, 0x73, 0x71, 0x1D, 0x11, 0x6E, 0x28, 0x28, 0x28, 0x70, 0x13,
+ 0x24, 0x71, 0x73, 0x71, 0x72, 0x6E, 0x28, 0x73, 0x1D, 0x6F, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28,
+ 0x6E, 0x1A, 0x72, 0x72, 0x1A, 0x1A, 0x28, 0x13, 0x7B, 0x7B, 0x13, 0x6F,
+ 0x6F, 0x11, 0x11, 0x24, 0x73, 0x73, 0x73, 0x71, 0x1D, 0x13, 0x6E, 0x28,
+ 0x28, 0x28, 0x6F, 0x12, 0x24, 0x73, 0x73, 0x71, 0x71, 0x0E, 0x28, 0x71,
+ 0x73, 0x1D, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x6E, 0x28, 0x6F, 0x1A, 0x72, 0x72, 0x72, 0x1A, 0x28,
+ 0x6E, 0x6E, 0x28, 0x28, 0x6F, 0x13, 0x11, 0x24, 0x73, 0x73, 0x73, 0x72,
+ 0x1D, 0x11, 0x6E, 0x28, 0x28, 0x28, 0x6F, 0x12, 0x24, 0x73, 0x73, 0x73,
+ 0x71, 0x0E, 0x6F, 0x1A, 0x73, 0x1D, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x6E, 0x28, 0x28,
+ 0x1A, 0x72, 0x1A, 0x28, 0x28, 0x28, 0x28, 0x28, 0x6F, 0x12, 0x1D, 0x24,
+ 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x28, 0x28, 0x28, 0x28, 0x6F, 0x7B,
+ 0x24, 0x73, 0x73, 0x73, 0x71, 0x13, 0x28, 0x1A, 0x71, 0x71, 0x6E, 0x28,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x72, 0x1A, 0x6E, 0x6F, 0x1A, 0x72, 0x72, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x6F, 0x7B, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x6E, 0x28,
+ 0x28, 0x28, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73, 0x72, 0x12, 0x28, 0x1A,
+ 0x71, 0x71, 0x71, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,
+ 0x13, 0x13, 0x00, 0x00, 0x28, 0x72, 0x6E, 0x28, 0x6F, 0x73, 0x72, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x11, 0x7B, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x1D, 0x7B, 0x28, 0x28, 0x1A, 0x28, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73,
+ 0x72, 0x7B, 0x28, 0x1A, 0x71, 0x71, 0x71, 0x6E, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x13, 0x28, 0x6E, 0x13, 0x13, 0x00, 0x13, 0x1A, 0x0E, 0x6E,
+ 0x6F, 0x73, 0x72, 0x6F, 0x28, 0x28, 0x28, 0x28, 0x13, 0x13, 0x1D, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x6E, 0x28, 0x28, 0x28, 0x6F, 0x7B,
+ 0x24, 0x73, 0x73, 0x73, 0x72, 0x7B, 0x28, 0x1A, 0x1D, 0x73, 0x71, 0x6E,
+ 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x6E, 0x0E, 0x28, 0x6E, 0x13, 0x00,
+ 0x28, 0x28, 0x0E, 0x28, 0x6F, 0x73, 0x73, 0x6F, 0x28, 0x1A, 0x28, 0x28,
+ 0x12, 0x11, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x72, 0x1D, 0x7B, 0x28, 0x28,
+ 0x28, 0x1A, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73, 0x72, 0x7B, 0x28, 0x28,
+ 0x13, 0x73, 0x71, 0x6E, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6E, 0x0E, 0x1A,
+ 0x0E, 0x28, 0x6E, 0x13, 0x13, 0x28, 0x0E, 0x6E, 0x6F, 0x73, 0x73, 0x6F,
+ 0x28, 0x28, 0x28, 0x1A, 0x7B, 0x1D, 0x24, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x11, 0x7B, 0x28, 0x1A, 0x28, 0x28, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73,
+ 0x72, 0x7B, 0x28, 0x28, 0x12, 0x73, 0x71, 0x12, 0x6E, 0x28, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x28, 0x28, 0x1A, 0x0E, 0x1A, 0x28, 0x6E, 0x12, 0x13, 0x0E, 0x6E,
+ 0x6F, 0x73, 0x73, 0x1A, 0x28, 0x1A, 0x28, 0x28, 0x7B, 0x1D, 0x24, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x11, 0x7B, 0x28, 0x28, 0x1A, 0x28, 0x1A, 0x7B,
+ 0x24, 0x73, 0x73, 0x73, 0x72, 0x7B, 0x28, 0x28, 0x7B, 0x73, 0x73, 0x7B,
+ 0x6E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0x0E, 0x0E, 0x28, 0x1A, 0x1A, 0x28, 0x6E,
+ 0x13, 0x12, 0x13, 0x28, 0x28, 0x73, 0x73, 0x28, 0x1A, 0x28, 0x1A, 0x11,
+ 0x7B, 0x1D, 0x73, 0x73, 0x73, 0x73, 0x73, 0x72, 0x13, 0x7B, 0x28, 0x1A,
+ 0x1A, 0x1A, 0x6F, 0x7B, 0x24, 0x73, 0x73, 0x73, 0x0E, 0x7B, 0x28, 0x1A,
+ 0x7B, 0x73, 0x73, 0x7B, 0x6E, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x28, 0x24,
+ 0x28, 0x71, 0x1A, 0x28, 0x6E, 0x13, 0x0E, 0x6E, 0x28, 0x73, 0x73, 0x1A,
+ 0x28, 0x1A, 0x1A, 0x13, 0x7B, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x13, 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x7B, 0x24, 0x73, 0x73, 0x73,
+ 0x0E, 0x7B, 0x1A, 0x28, 0x7B, 0x73, 0x73, 0x7B, 0x6E, 0x6E, 0x28, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x28, 0x1D, 0x1A, 0x28, 0x0E, 0x72, 0x1A, 0x6E, 0x28, 0x28, 0x1A,
+ 0x28, 0x73, 0x73, 0x1A, 0x1A, 0x1A, 0x1A, 0x12, 0x13, 0x1D, 0x71, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x11, 0x7B, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x12,
+ 0x24, 0x73, 0x73, 0x73, 0x0E, 0x7B, 0x1A, 0x1A, 0x7B, 0x73, 0x73, 0x12,
+ 0x28, 0x6E, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0x1D, 0x1A, 0x72, 0x1A, 0x28, 0x1A, 0x6E,
+ 0x1A, 0x6E, 0x1A, 0x28, 0x1A, 0x73, 0x73, 0x1A, 0x1A, 0x1A, 0x1A, 0x12,
+ 0x11, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x73, 0x72, 0x13, 0x7B, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x28, 0x13, 0x24, 0x73, 0x73, 0x71, 0x72, 0x12, 0x1A, 0x1A,
+ 0x7B, 0x73, 0x73, 0x12, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1D, 0x1A, 0x1A,
+ 0x72, 0x28, 0x6E, 0x28, 0x6E, 0x28, 0x28, 0x1A, 0x28, 0x73, 0x73, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x7B, 0x1D, 0x1D, 0x71, 0x73, 0x73, 0x73, 0x73, 0x72,
+ 0x12, 0x7B, 0x1A, 0x28, 0x1A, 0x28, 0x13, 0x11, 0x72, 0x73, 0x73, 0x72,
+ 0x11, 0x13, 0x1A, 0x0E, 0x13, 0x73, 0x73, 0x12, 0x73, 0x73, 0x28, 0x1A,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x28, 0x72, 0x1A, 0x28, 0x72, 0x28, 0x6E, 0x28, 0x13, 0x28, 0x6E,
+ 0x1A, 0x73, 0x73, 0x6F, 0x1A, 0x28, 0x1A, 0x7B, 0x1D, 0x1D, 0x71, 0x73,
+ 0x73, 0x73, 0x73, 0x72, 0x7B, 0x12, 0x28, 0x1A, 0x28, 0x28, 0x12, 0x24,
+ 0x72, 0x73, 0x73, 0x72, 0x13, 0x1A, 0x28, 0x13, 0x1D, 0x73, 0x0E, 0x73,
+ 0x7B, 0x7B, 0x73, 0x1A, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0x1A, 0x1A, 0x28, 0x1A, 0x28, 0x1A, 0x6E,
+ 0x13, 0x12, 0x13, 0x28, 0x1A, 0x73, 0x72, 0x1A, 0x28, 0x1A, 0x6F, 0x7B,
+ 0x1D, 0x1D, 0x71, 0x71, 0x73, 0x73, 0x71, 0x72, 0x7B, 0x13, 0x28, 0x28,
+ 0x28, 0x1A, 0x12, 0x24, 0x72, 0x73, 0x73, 0x72, 0x7B, 0x1A, 0x28, 0x7B,
+ 0x24, 0x73, 0x0E, 0x73, 0x7B, 0x7B, 0x73, 0x24, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x1D, 0x28, 0x1A,
+ 0x1A, 0x1A, 0x28, 0x6E, 0x12, 0x13, 0x6E, 0x6F, 0x1A, 0x73, 0x72, 0x28,
+ 0x1A, 0x28, 0x11, 0x7B, 0x1D, 0x24, 0x71, 0x73, 0x73, 0x73, 0x71, 0x72,
+ 0x7B, 0x11, 0x6E, 0x28, 0x28, 0x28, 0x12, 0x24, 0x72, 0x73, 0x73, 0x72,
+ 0x7B, 0x28, 0x1A, 0x7B, 0x24, 0x73, 0x1A, 0x12, 0x73, 0x71, 0x11, 0x71,
+ 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x13, 0x6E, 0x1A, 0x1A, 0x28, 0x28, 0x6E, 0x13, 0x7B, 0x13, 0x6E, 0x28,
+ 0x1A, 0x73, 0x72, 0x28, 0x28, 0x28, 0x13, 0x7B, 0x1D, 0x24, 0x71, 0x71,
+ 0x73, 0x71, 0x71, 0x72, 0x7B, 0x6E, 0x28, 0x1A, 0x28, 0x11, 0x12, 0x24,
+ 0x72, 0x73, 0x71, 0x72, 0x7B, 0x28, 0x28, 0x13, 0x72, 0x73, 0x1A, 0x7B,
+ 0x28, 0x28, 0x11, 0x73, 0x71, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x6E, 0x28, 0x6E, 0x6E, 0x13, 0x00,
+ 0x12, 0x13, 0x6F, 0x28, 0x24, 0x73, 0x72, 0x1A, 0x28, 0x28, 0x12, 0x13,
+ 0x1D, 0x24, 0x72, 0x73, 0x73, 0x73, 0x71, 0x72, 0x7B, 0x28, 0x28, 0x28,
+ 0x28, 0x13, 0x12, 0x24, 0x72, 0x73, 0x72, 0x24, 0x7B, 0x28, 0x6E, 0x13,
+ 0x71, 0x73, 0x1A, 0x7B, 0x28, 0x6E, 0x11, 0x1D, 0x73, 0x71, 0x13, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x6E, 0x6E,
+ 0x6E, 0x00, 0x00, 0x00, 0x13, 0x0E, 0x6F, 0x1A, 0x24, 0x73, 0x72, 0x28,
+ 0x28, 0x28, 0x12, 0x13, 0x1D, 0x24, 0x72, 0x71, 0x73, 0x71, 0x71, 0x72,
+ 0x7B, 0x6E, 0x28, 0x1A, 0x6F, 0x12, 0x13, 0x72, 0x73, 0x71, 0x24, 0x11,
+ 0x13, 0x6E, 0x28, 0x13, 0x73, 0x71, 0x1A, 0x7B, 0x6E, 0x6E, 0x6F, 0x13,
+ 0x72, 0x73, 0x71, 0x0E, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x13, 0x13, 0x00, 0x00, 0x00, 0x13, 0x0E, 0x28, 0x28, 0x1A,
+ 0x73, 0x72, 0x72, 0x28, 0x1A, 0x28, 0x7B, 0x13, 0x1D, 0x72, 0x72, 0x71,
+ 0x72, 0x71, 0x72, 0x24, 0x7B, 0x6E, 0x28, 0x28, 0x6F, 0x7B, 0x11, 0x72,
+ 0x71, 0x72, 0x24, 0x13, 0x6E, 0x6F, 0x6E, 0x13, 0x71, 0x71, 0x1A, 0x7B,
+ 0x6E, 0x6F, 0x13, 0x11, 0x0E, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x24,
+ 0x0E, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x0E,
+ 0x28, 0x6E, 0x28, 0x1A, 0x73, 0x72, 0x1A, 0x28, 0x28, 0x28, 0x7B, 0x13,
+ 0x24, 0x72, 0x71, 0x72, 0x71, 0x72, 0x24, 0x24, 0x13, 0x6E, 0x28, 0x28,
+ 0x6F, 0x7B, 0x72, 0x72, 0x71, 0x72, 0x0E, 0x7B, 0x70, 0x6E, 0x11, 0x11,
+ 0x71, 0x72, 0x1A, 0x13, 0x6E, 0x13, 0x11, 0x0E, 0x72, 0x72, 0x0E, 0x0E,
+ 0x0E, 0x0E, 0x0E, 0x0E, 0x70, 0x70, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x13, 0x28, 0x1A, 0x6E, 0x6E, 0x1A, 0x24, 0x73, 0x72, 0x1A, 0x28,
+ 0x28, 0x28, 0x7B, 0x11, 0x24, 0x72, 0x72, 0x71, 0x72, 0x24, 0x1D, 0x0E,
+ 0x13, 0x6E, 0x70, 0x28, 0x70, 0x7B, 0x72, 0x71, 0x72, 0x0E, 0x11, 0x13,
+ 0x6E, 0x6E, 0x13, 0x71, 0x72, 0x24, 0x0E, 0x13, 0x6E, 0x13, 0x0E, 0x72,
+ 0x1A, 0x0E, 0x0E, 0x0E, 0x70, 0x70, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x13, 0x70, 0x28, 0x6E, 0x6E, 0x28, 0x1A, 0x24,
+ 0x73, 0x72, 0x1A, 0x28, 0x28, 0x28, 0x7B, 0x1D, 0x72, 0x72, 0x72, 0x72,
+ 0x24, 0x1D, 0x1D, 0x13, 0x11, 0x6E, 0x28, 0x70, 0x28, 0x12, 0x0E, 0x72,
+ 0x0E, 0x11, 0x13, 0x6E, 0x70, 0x70, 0x13, 0x72, 0x24, 0x1A, 0x13, 0x6E,
+ 0x6E, 0x0E, 0x1A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, 0x28, 0x6E, 0x6E,
+ 0x28, 0x1A, 0x1A, 0x73, 0x73, 0x72, 0x1A, 0x1A, 0x28, 0x28, 0x7B, 0x1D,
+ 0x72, 0x72, 0x72, 0x24, 0x1D, 0x1D, 0x0E, 0x13, 0x6E, 0x28, 0x70, 0x6F,
+ 0x6E, 0x13, 0x72, 0x0E, 0x11, 0x11, 0x13, 0x70, 0x6E, 0x70, 0x13, 0x0E,
+ 0x0E, 0x11, 0x13, 0x6E, 0x1A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x28, 0x6E, 0x6E, 0x28, 0x1A, 0x1A, 0x73, 0x73, 0x72, 0x72, 0x1A, 0x28,
+ 0x28, 0x28, 0x13, 0x1D, 0x72, 0x72, 0x24, 0x1D, 0x1D, 0x0E, 0x11, 0x13,
+ 0x6E, 0x70, 0x28, 0x70, 0x6E, 0x11, 0x0E, 0x11, 0x11, 0x11, 0x13, 0x70,
+ 0x13, 0x13, 0x0E, 0x0E, 0x11, 0x13, 0x6E, 0x70, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x70, 0x6E, 0x6E, 0x6E, 0x1A, 0x1A, 0x72, 0x73, 0x72,
+ 0x72, 0x1A, 0x1A, 0x1A, 0x28, 0x28, 0x13, 0x1D, 0x24, 0x24, 0x1D, 0x1D,
+ 0x0E, 0x11, 0x13, 0x6E, 0x70, 0x6E, 0x70, 0x6E, 0x13, 0x1D, 0x11, 0x11,
+ 0x11, 0x13, 0x70, 0x13, 0x70, 0x13, 0x11, 0x11, 0x13, 0x6E, 0x70, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6E, 0x6E, 0x6E, 0x1A,
+ 0x1A, 0x72, 0x72, 0x72, 0x1A, 0x1A, 0x1A, 0x28, 0x28, 0x28, 0x11, 0x24,
+ 0x1D, 0x1D, 0x0E, 0x0E, 0x11, 0x11, 0x13, 0x70, 0x70, 0x70, 0x6E, 0x13,
+ 0x0E, 0x70, 0x11, 0x70, 0x13, 0x70, 0x13, 0x70, 0x13, 0x11, 0x13, 0x13,
+ 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
+ 0x6E, 0x6E, 0x28, 0x1A, 0x1A, 0x72, 0x72, 0x1A, 0x1A, 0x1A, 0x28, 0x1A,
+ 0x28, 0x28, 0x11, 0x1D, 0x1D, 0x0E, 0x0E, 0x11, 0x11, 0x13, 0x70, 0x70,
+ 0x6E, 0x6E, 0x13, 0x0E, 0x11, 0x13, 0x13, 0x13, 0x70, 0x70, 0x70, 0x13,
+ 0x13, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x13, 0x70, 0x6E, 0x28, 0x28, 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x28, 0x28, 0x6E, 0x28, 0x1D, 0x0E, 0x0E, 0x11, 0x11,
+ 0x13, 0x70, 0x6E, 0x6E, 0x70, 0x70, 0x13, 0x13, 0x13, 0x1A, 0x6F, 0x6F,
+ 0x6E, 0x6E, 0x70, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x70, 0x6E, 0x6E, 0x28,
+ 0x28, 0x1A, 0x1A, 0x1A, 0x1A, 0x28, 0x28, 0x28, 0x6E, 0x6E, 0x0E, 0x0E,
+ 0x0E, 0x11, 0x11, 0x13, 0x6E, 0x70, 0x70, 0x70, 0x70, 0x6E, 0x1A, 0x1A,
+ 0x6F, 0x6F, 0x6F, 0x6E, 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,
+ 0x70, 0x70, 0x6E, 0x6E, 0x28, 0x28, 0x1A, 0x28, 0x28, 0x28, 0x6E, 0x6E,
+ 0x11, 0x28, 0x0E, 0x11, 0x11, 0x13, 0x6E, 0x70, 0x70, 0x70, 0x70, 0x6E,
+ 0x1A, 0x1A, 0x1A, 0x6F, 0x6F, 0x6E, 0x6E, 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, 0x12, 0x70, 0x6E, 0x6E, 0x6E, 0x28, 0x28, 0x28,
+ 0x6E, 0x6E, 0x11, 0x11, 0x28, 0x0E, 0x13, 0x13, 0x70, 0x70, 0x70, 0x00,
+ 0x70, 0x6E, 0x6E, 0x1A, 0x71, 0x1A, 0x6F, 0x6F, 0x6E, 0x70, 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, 0x70, 0x70, 0x6E,
+ 0x6E, 0x6E, 0x6E, 0x6E, 0x13, 0x13, 0x1A, 0x28, 0x13, 0x13, 0x6F, 0x6F,
+ 0x70, 0x00, 0x00, 0x00, 0x6E, 0x1A, 0x1A, 0x1A, 0x6F, 0x6F, 0x6E, 0x70,
+ 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, 0x70, 0x70, 0x70, 0x6E, 0x6E, 0x70, 0x11, 0x6E, 0x28, 0x6E,
+ 0x6E, 0x6E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x1A, 0x1A, 0x6F, 0x6E,
+ 0x70, 0x70, 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, 0x70, 0x70, 0x70, 0x70, 0x13,
+ 0x70, 0x70, 0x13, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x6E, 0x1A, 0x1A, 0x1A,
+ 0x6F, 0x6E, 0x70, 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,
+ 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask16RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xB0, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xE0, 0x3F, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFB, 0xFF,
+ 0xEC, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xC0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0x00,
+ 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0xFE, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF0, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xFE, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x00, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0,
+ 0x71, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x03, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFE, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0,
+ 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xC0, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00,
+ 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF,
+ 0xF8, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00,
+ 0x0F, 0xFF, 0xFE, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0xFF,
+ 0x80, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xE1, 0xFE, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xFE, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite17LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 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, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x03, 0x03, 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, 0x03, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x05, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x04, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x02, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02,
+ 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05,
+ 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x03, 0x03, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02,
+ 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x05, 0x05, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x04, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x05, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05, 0x02, 0x02, 0x00, 0x03, 0x02, 0x05, 0x05, 0x04, 0x06,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x03, 0x05, 0x02,
+ 0x05, 0x05, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x02,
+ 0x02, 0x03, 0x05, 0x02, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x05,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x05, 0x02, 0x03, 0x05, 0x02, 0x05, 0x05, 0x05, 0x04,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x03, 0x05, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x05,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x05, 0x05,
+ 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04,
+ 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x05, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x04, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04,
+ 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x04, 0x05, 0x02, 0x02, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04,
+ 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05, 0x04, 0x04, 0x06,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x03, 0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x00, 0x02, 0x02, 0x05,
+ 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x03,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x06, 0x00,
+ 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x06, 0x03, 0x05, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x05, 0x06, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x03, 0x05, 0x00, 0x00, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x02, 0x05,
+ 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06,
+ 0x04, 0x07, 0x07, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x03, 0x02, 0x05,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x07, 0x05, 0x05, 0x02, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x06, 0x03, 0x05, 0x05, 0x00, 0x00, 0x02, 0x02, 0x05, 0x04, 0x04, 0x06,
+ 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x04, 0x07, 0x07,
+ 0x05, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x03, 0x05, 0x02, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x06, 0x03, 0x02, 0x05, 0x05, 0x00, 0x00, 0x02, 0x05,
+ 0x05, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x04, 0x04, 0x07, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x03,
+ 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x03, 0x02, 0x05, 0x05,
+ 0x00, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04, 0x04, 0x07, 0x05, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x03, 0x05, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x03,
+ 0x02, 0x02, 0x05, 0x07, 0x00, 0x02, 0x05, 0x05, 0x04, 0x07, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04,
+ 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x05, 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04,
+ 0x07, 0x07, 0x05, 0x02, 0x02, 0x03, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x07, 0x04, 0x03, 0x02, 0x02, 0x05, 0x07, 0x00, 0x02, 0x05, 0x05,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x05, 0x05, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x04, 0x07, 0x07, 0x05, 0x02, 0x02, 0x03, 0x05,
+ 0x02, 0x02, 0x02, 0x05, 0x05, 0x07, 0x04, 0x03, 0x02, 0x02, 0x05, 0x07,
+ 0x00, 0x05, 0x05, 0x04, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04, 0x07, 0x05,
+ 0x02, 0x02, 0x03, 0x05, 0x02, 0x02, 0x02, 0x05, 0x07, 0x07, 0x03, 0x03,
+ 0x02, 0x05, 0x07, 0x05, 0x00, 0x05, 0x05, 0x04, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x07, 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x02, 0x02, 0x05,
+ 0x07, 0x04, 0x03, 0x02, 0x02, 0x05, 0x07, 0x00, 0x02, 0x05, 0x04, 0x07,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x05, 0x02, 0x03, 0x05,
+ 0x03, 0x02, 0x05, 0x05, 0x07, 0x03, 0x03, 0x02, 0x05, 0x07, 0x00, 0x00,
+ 0x02, 0x05, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05,
+ 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07,
+ 0x07, 0x02, 0x03, 0x05, 0x03, 0x02, 0x05, 0x05, 0x07, 0x03, 0x02, 0x02,
+ 0x05, 0x07, 0x00, 0x02, 0x02, 0x05, 0x07, 0x06, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x07, 0x05, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07,
+ 0x07, 0x03, 0x02, 0x02, 0x07, 0x07, 0x00, 0x02, 0x05, 0x04, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x06,
+ 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07, 0x07, 0x02, 0x05,
+ 0x03, 0x02, 0x05, 0x07, 0x07, 0x02, 0x02, 0x07, 0x07, 0x00, 0x02, 0x02,
+ 0x05, 0x04, 0x07, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x04, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x02, 0x05, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x07, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07, 0x07, 0x02, 0x02, 0x07,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x07, 0x06, 0x00, 0x00, 0x02, 0x05, 0x07,
+ 0x07, 0x06, 0x04, 0x04, 0x00, 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, 0x02, 0x02, 0x05, 0x07, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07,
+ 0x07, 0x02, 0x07, 0x00, 0x00, 0x00, 0x02, 0x05, 0x04, 0x07, 0x00, 0x00,
+ 0x00, 0x05, 0x07, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x02, 0x05, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07, 0x02, 0x03,
+ 0x03, 0x02, 0x05, 0x07, 0x07, 0x02, 0x07, 0x00, 0x00, 0x00, 0x02, 0x05,
+ 0x04, 0x07, 0x00, 0x00, 0x02, 0x05, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 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, 0x05, 0x05, 0x07, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x03, 0x02, 0x05, 0x05, 0x07, 0x04, 0x02, 0x07, 0x00,
+ 0x00, 0x05, 0x02, 0x05, 0x07, 0x07, 0x00, 0x00, 0x05, 0x07, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x05, 0x05,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x05, 0x05, 0x03, 0x02, 0x05, 0x05, 0x07,
+ 0x00, 0x05, 0x07, 0x00, 0x00, 0x05, 0x05, 0x04, 0x07, 0x00, 0x00, 0x03,
+ 0x05, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x03,
+ 0x02, 0x05, 0x07, 0x07, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04,
+ 0x06, 0x00, 0x00, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05, 0x03, 0x02, 0x05, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask17LA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
+ 0x00, 0x1C, 0x00, 0x10, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x18,
+ 0x00, 0x00, 0x1F, 0x00, 0x00, 0x3C, 0x00, 0x18, 0x00, 0x00, 0x1F, 0x00,
+ 0x00, 0x7C, 0x00, 0x38, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7E, 0x00, 0x38,
+ 0x00, 0x00, 0x3E, 0x00, 0x00, 0x7E, 0x00, 0x39, 0x80, 0x00, 0x7E, 0x00,
+ 0x00, 0x7F, 0x00, 0x78, 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x80, 0x78,
+ 0xC0, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x80, 0x70, 0xE0, 0x00, 0x7E, 0x00,
+ 0x00, 0x7F, 0x80, 0x70, 0xE0, 0x00, 0x7E, 0x00, 0x00, 0x3F, 0x80, 0x71,
+ 0xF0, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x79, 0xF0, 0x00, 0xFC, 0x00,
+ 0x00, 0x3F, 0xC0, 0x7B, 0xF8, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x7F,
+ 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x7F, 0xF8, 0x01, 0xFC, 0x00,
+ 0x00, 0x1F, 0xE0, 0x3F, 0xF8, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xE0, 0x3F,
+ 0xFC, 0x01, 0xFC, 0x00, 0x00, 0x1F, 0xE0, 0x3F, 0xFC, 0x01, 0xFC, 0x00,
+ 0x00, 0x0F, 0xE0, 0x3F, 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x1F,
+ 0xFE, 0x03, 0xFE, 0x00, 0x00, 0x0F, 0xE0, 0x1F, 0xFE, 0x03, 0xFE, 0x00,
+ 0x00, 0x07, 0xE0, 0x1F, 0xFE, 0x03, 0xFE, 0x00, 0x00, 0x07, 0xE0, 0x1F,
+ 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x07, 0xF0, 0x1F, 0xFE, 0x03, 0xFE, 0x00,
+ 0x00, 0x03, 0xF8, 0x1F, 0xFE, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x1F,
+ 0xFE, 0x07, 0xFE, 0x00, 0x00, 0x03, 0xF8, 0x0F, 0xFF, 0x07, 0xFE, 0x00,
+ 0x00, 0x03, 0xF8, 0x0F, 0xFF, 0x07, 0xFC, 0x00, 0x00, 0x03, 0xF8, 0x0F,
+ 0xFF, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x07, 0xFF, 0x87, 0xF0, 0x00,
+ 0x00, 0x07, 0xF0, 0x07, 0xFF, 0x87, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x07,
+ 0xFF, 0x87, 0xF8, 0x00, 0x60, 0x0F, 0xF8, 0x07, 0xFF, 0x87, 0xF8, 0x00,
+ 0x70, 0x0F, 0xFC, 0x07, 0xFF, 0x8F, 0xF8, 0x00, 0x70, 0x0F, 0xFC, 0x03,
+ 0xFF, 0x0F, 0xF0, 0x00, 0x70, 0x0F, 0xFC, 0x03, 0xFF, 0x0F, 0xF0, 0x00,
+ 0x7C, 0x0F, 0xFC, 0x03, 0xFF, 0x1F, 0xF0, 0x06, 0x7E, 0x07, 0xFC, 0x07,
+ 0xFF, 0x1F, 0xF0, 0x06, 0x7F, 0x07, 0xFE, 0x0F, 0xFF, 0x1F, 0xF0, 0x0E,
+ 0x7F, 0x87, 0xFE, 0x0F, 0xFF, 0x1F, 0xE0, 0x0E, 0x7F, 0x83, 0xFE, 0x0F,
+ 0xFF, 0x3F, 0xE0, 0x3E, 0x3F, 0xC3, 0xFF, 0x0F, 0xFF, 0x3F, 0xC0, 0xFE,
+ 0x3F, 0xC1, 0xFF, 0x1F, 0xFF, 0x3F, 0xC1, 0xFE, 0x1F, 0xC1, 0xFF, 0x1F,
+ 0xFF, 0x3F, 0x83, 0xFE, 0x1F, 0xE0, 0xFF, 0x9F, 0xFF, 0x7E, 0x07, 0xFC,
+ 0x1F, 0xF0, 0x7F, 0x9F, 0xFF, 0x7E, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0xDF,
+ 0xFF, 0x7C, 0x1F, 0xFC, 0x0F, 0xFC, 0x1F, 0xFF, 0xFF, 0x7C, 0x3F, 0xFC,
+ 0x0F, 0xFC, 0x0F, 0xFF, 0xFF, 0x78, 0x7F, 0xF8, 0x03, 0xFE, 0x07, 0xFF,
+ 0xFE, 0xF8, 0x7F, 0xF8, 0x01, 0xFE, 0x03, 0xFF, 0xFC, 0xF0, 0xFF, 0xF0,
+ 0x00, 0xFF, 0x03, 0xFF, 0xFD, 0xF1, 0xFF, 0xE0, 0x00, 0x3F, 0x81, 0xFF,
+ 0xFD, 0xE1, 0xFF, 0xC0, 0x00, 0x1F, 0xC1, 0xFF, 0xFB, 0xE3, 0xFF, 0x00,
+ 0x00, 0x0F, 0xC0, 0xFF, 0xF3, 0xE7, 0xF0, 0x00, 0x00, 0x07, 0xE0, 0xFF,
+ 0xE3, 0xC7, 0x80, 0x00, 0x00, 0x01, 0xF0, 0xFF, 0xE3, 0xCF, 0x00, 0x00,
+ 0x00, 0x00, 0xF8, 0x7F, 0xE7, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7F,
+ 0x67, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7F, 0x43, 0x9C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite17LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 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, 0x03, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 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, 0x03, 0x02,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 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, 0x03, 0x03, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 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, 0x03, 0x03, 0x02, 0x05, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x02, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x05,
+ 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05,
+ 0x05, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x02, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x02, 0x05, 0x02, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05, 0x02, 0x02, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x05, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x05,
+ 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x05, 0x05, 0x05,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x03, 0x05, 0x02, 0x05, 0x05, 0x04, 0x06, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05,
+ 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06,
+ 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x05, 0x02, 0x03, 0x03, 0x05, 0x02, 0x05, 0x05, 0x05,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x04, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x03, 0x05, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05,
+ 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05,
+ 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x06, 0x06, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x05, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x04, 0x06, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x03, 0x05, 0x02, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x05,
+ 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x06, 0x04, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x06, 0x04, 0x05, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04, 0x06, 0x04,
+ 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05,
+ 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x06, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x05, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04,
+ 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x06, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x05, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x06, 0x04,
+ 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x06, 0x06, 0x04, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x04, 0x05, 0x05, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x04, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x06, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x04,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x04, 0x04, 0x05, 0x05,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x06,
+ 0x04, 0x04, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x03,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x04,
+ 0x00, 0x03, 0x03, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x06, 0x03, 0x05, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x06, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04, 0x05,
+ 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x03, 0x05, 0x00, 0x00, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x06, 0x06, 0x00, 0x03, 0x03, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x05, 0x06,
+ 0x06, 0x04, 0x07, 0x07, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x03, 0x02, 0x05,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x07, 0x05, 0x05, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x06, 0x03, 0x05, 0x05, 0x00, 0x00, 0x02, 0x02, 0x05, 0x04, 0x04, 0x06,
+ 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05,
+ 0x05, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x04, 0x04, 0x07,
+ 0x07, 0x05, 0x05, 0x03, 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x06, 0x03, 0x02, 0x05, 0x05, 0x00, 0x00, 0x02, 0x05,
+ 0x05, 0x04, 0x04, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x03, 0x03,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x04, 0x04, 0x04, 0x07, 0x05, 0x05, 0x02, 0x03, 0x00, 0x00, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x03, 0x02, 0x05, 0x05,
+ 0x00, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04, 0x04, 0x04, 0x07, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x03, 0x05, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x03,
+ 0x02, 0x02, 0x05, 0x07, 0x00, 0x02, 0x05, 0x05, 0x04, 0x07, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05,
+ 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04,
+ 0x04, 0x07, 0x07, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x07, 0x04, 0x03, 0x02, 0x02, 0x05, 0x07, 0x00, 0x02, 0x05, 0x05,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x04, 0x04, 0x07, 0x05, 0x02, 0x02, 0x03, 0x05,
+ 0x02, 0x02, 0x02, 0x05, 0x05, 0x07, 0x04, 0x03, 0x02, 0x02, 0x05, 0x07,
+ 0x00, 0x05, 0x05, 0x04, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04, 0x04, 0x05,
+ 0x02, 0x02, 0x03, 0x05, 0x02, 0x02, 0x02, 0x05, 0x07, 0x07, 0x03, 0x03,
+ 0x02, 0x05, 0x07, 0x05, 0x00, 0x05, 0x05, 0x04, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x07, 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x02, 0x02, 0x05,
+ 0x07, 0x04, 0x03, 0x02, 0x02, 0x05, 0x07, 0x00, 0x02, 0x05, 0x04, 0x07,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04,
+ 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x05, 0x02, 0x03, 0x05,
+ 0x03, 0x02, 0x05, 0x05, 0x07, 0x03, 0x03, 0x02, 0x05, 0x07, 0x00, 0x00,
+ 0x02, 0x05, 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05,
+ 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x02, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07,
+ 0x07, 0x02, 0x03, 0x05, 0x03, 0x02, 0x05, 0x05, 0x07, 0x03, 0x02, 0x02,
+ 0x05, 0x07, 0x00, 0x02, 0x02, 0x05, 0x07, 0x06, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x02, 0x05, 0x04, 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x07, 0x05, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07,
+ 0x07, 0x03, 0x02, 0x02, 0x07, 0x07, 0x00, 0x02, 0x05, 0x04, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x05, 0x04, 0x04, 0x04, 0x06, 0x06, 0x04, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x04,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07, 0x07, 0x02, 0x05,
+ 0x03, 0x02, 0x05, 0x07, 0x07, 0x02, 0x02, 0x07, 0x07, 0x00, 0x02, 0x02,
+ 0x05, 0x04, 0x07, 0x00, 0x00, 0x00, 0x02, 0x05, 0x04, 0x04, 0x04, 0x06,
+ 0x04, 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, 0x02, 0x05, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x07, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07, 0x07, 0x02, 0x02, 0x07,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x07, 0x06, 0x00, 0x00, 0x02, 0x05, 0x07,
+ 0x07, 0x06, 0x04, 0x00, 0x00, 0x00, 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, 0x02, 0x05, 0x05, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07,
+ 0x07, 0x02, 0x07, 0x00, 0x00, 0x00, 0x02, 0x05, 0x04, 0x07, 0x00, 0x00,
+ 0x00, 0x05, 0x07, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02,
+ 0x02, 0x05, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x05, 0x07, 0x02, 0x03,
+ 0x03, 0x02, 0x05, 0x07, 0x07, 0x02, 0x07, 0x00, 0x00, 0x00, 0x02, 0x05,
+ 0x04, 0x07, 0x00, 0x00, 0x02, 0x05, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 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, 0x02, 0x02, 0x05, 0x07, 0x07, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x02, 0x03, 0x02, 0x05, 0x05, 0x07, 0x04, 0x02, 0x07, 0x00,
+ 0x00, 0x05, 0x02, 0x05, 0x07, 0x07, 0x00, 0x00, 0x05, 0x07, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x05, 0x05,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x05, 0x05, 0x03, 0x02, 0x05, 0x05, 0x07,
+ 0x00, 0x05, 0x07, 0x00, 0x00, 0x05, 0x05, 0x04, 0x07, 0x00, 0x00, 0x03,
+ 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 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, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x03,
+ 0x02, 0x05, 0x07, 0x07, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x05, 0x04,
+ 0x06, 0x00, 0x00, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05, 0x03, 0x02, 0x05, 0x07, 0x07, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask17LB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80,
+ 0x00, 0x38, 0x00, 0x20, 0x00, 0x00, 0x03, 0x80, 0x00, 0x78, 0x00, 0x20,
+ 0x00, 0x00, 0x07, 0x80, 0x00, 0x78, 0x00, 0x20, 0x00, 0x00, 0x0F, 0x80,
+ 0x00, 0x78, 0x00, 0x30, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x7C, 0x00, 0x30,
+ 0x20, 0x00, 0x1F, 0x00, 0x00, 0x7C, 0x00, 0x30, 0x20, 0x00, 0x1F, 0x00,
+ 0x00, 0x7E, 0x00, 0x70, 0x70, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x00, 0x70,
+ 0x70, 0x00, 0x1F, 0x00, 0x00, 0x7F, 0x00, 0x70, 0xF0, 0x00, 0x1F, 0x00,
+ 0x00, 0x7F, 0x00, 0x70, 0xF0, 0x00, 0x3E, 0x00, 0x00, 0x7F, 0x00, 0x71,
+ 0xF0, 0x00, 0x3E, 0x00, 0x00, 0x7F, 0x80, 0x79, 0xF8, 0x00, 0x3E, 0x00,
+ 0x00, 0x7F, 0x80, 0x7B, 0xF8, 0x00, 0x7E, 0x00, 0x00, 0x7F, 0x80, 0x7F,
+ 0xF8, 0x00, 0x7C, 0x00, 0x00, 0x3F, 0x80, 0x7F, 0xFC, 0x00, 0x7C, 0x00,
+ 0x00, 0x3F, 0xC0, 0x3F, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x3F, 0xC0, 0x3F,
+ 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x3F, 0xFE, 0x00, 0xFC, 0x00,
+ 0x00, 0x1F, 0xC0, 0x3F, 0xFE, 0x00, 0xFC, 0x00, 0x00, 0x1F, 0xC0, 0x1F,
+ 0xFE, 0x00, 0xFE, 0x00, 0x00, 0x0F, 0xC0, 0x1F, 0xFF, 0x01, 0xFE, 0x00,
+ 0x00, 0x0F, 0xC0, 0x1F, 0xFF, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xC0, 0x1F,
+ 0xFF, 0x01, 0xFE, 0x00, 0x00, 0x0F, 0xC0, 0x1F, 0xFF, 0x01, 0xFE, 0x00,
+ 0x00, 0x07, 0xC0, 0x1F, 0xFF, 0x83, 0xFE, 0x00, 0x00, 0x07, 0xE0, 0x1F,
+ 0xFF, 0x83, 0xFE, 0x00, 0x00, 0x07, 0xE0, 0x0F, 0xFF, 0x83, 0xFE, 0x00,
+ 0x00, 0x07, 0xE0, 0x0F, 0xFF, 0x83, 0xFE, 0x00, 0x00, 0x07, 0xE0, 0x0F,
+ 0xFF, 0x83, 0xFC, 0x00, 0x00, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xFC, 0x00,
+ 0x00, 0x0F, 0xE0, 0x07, 0xFF, 0x83, 0xF8, 0x00, 0x60, 0x0F, 0xE0, 0x07,
+ 0xFF, 0x87, 0xF0, 0x00, 0x70, 0x0F, 0xF0, 0x07, 0xFF, 0x87, 0xF0, 0x00,
+ 0x70, 0x0F, 0xF0, 0x07, 0xFF, 0x87, 0xF0, 0x00, 0x78, 0x0F, 0xF0, 0x07,
+ 0xFF, 0x0F, 0xF0, 0x00, 0x7C, 0x0F, 0xF8, 0x07, 0xFF, 0x0F, 0xF0, 0x00,
+ 0x7E, 0x07, 0xF8, 0x07, 0xFF, 0x0F, 0xF0, 0x00, 0x7F, 0x07, 0xF8, 0x0F,
+ 0xFF, 0x1F, 0xF0, 0x02, 0x7F, 0x87, 0xF8, 0x0F, 0xFF, 0x1F, 0xF0, 0x0F,
+ 0x7F, 0xC3, 0xFC, 0x1F, 0xFF, 0x1F, 0xE0, 0x3F, 0x7F, 0xC3, 0xFC, 0x1F,
+ 0xFF, 0x3F, 0xE0, 0x7F, 0x7F, 0xE3, 0xFE, 0x1F, 0xFF, 0x3F, 0xC1, 0xFE,
+ 0x3F, 0xE1, 0xFF, 0x1F, 0xFF, 0x3F, 0xC3, 0xFE, 0x3F, 0xE1, 0xFF, 0x1F,
+ 0xFF, 0x3F, 0x83, 0xFE, 0x3F, 0xF0, 0xFF, 0x9F, 0xFF, 0x7E, 0x07, 0xFC,
+ 0x1F, 0xF0, 0x7F, 0x9F, 0xFF, 0x7E, 0x0F, 0xFC, 0x1F, 0xF8, 0x3F, 0x8F,
+ 0xFF, 0x7C, 0x1F, 0xFC, 0x0F, 0xFC, 0x1F, 0xFF, 0xFF, 0x7C, 0x1F, 0xFC,
+ 0x0F, 0xFC, 0x0F, 0xFF, 0xFF, 0x78, 0x3F, 0xF8, 0x03, 0xFE, 0x07, 0xFF,
+ 0xFE, 0xF8, 0x7F, 0xF0, 0x01, 0xFE, 0x03, 0xFF, 0xFC, 0xF0, 0xFF, 0xE0,
+ 0x00, 0x7F, 0x03, 0xFF, 0xFD, 0xF1, 0xFF, 0xC0, 0x00, 0x3F, 0x81, 0xFF,
+ 0xFD, 0xE1, 0xFF, 0x00, 0x00, 0x1F, 0xC1, 0xFF, 0xFB, 0xE3, 0xF8, 0x00,
+ 0x00, 0x07, 0xC0, 0xFF, 0xF3, 0xE7, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0xFF,
+ 0xE3, 0xC7, 0x80, 0x00, 0x00, 0x03, 0xF0, 0xFF, 0xE3, 0xCF, 0x00, 0x00,
+ 0x00, 0x01, 0xF8, 0x7F, 0xE7, 0xCE, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x7F,
+ 0x67, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x38, 0x7F, 0x43, 0x9C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7F, 0x40, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite17RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 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, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 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,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x05, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x04, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x02, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05,
+ 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05,
+ 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x05,
+ 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x04, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x05, 0x02, 0x05, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x05, 0x05, 0x02, 0x03, 0x00, 0x02,
+ 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x05, 0x05,
+ 0x02, 0x05, 0x03, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
+ 0x04, 0x05, 0x05, 0x05, 0x02, 0x05, 0x03, 0x02, 0x02, 0x05, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05, 0x05, 0x05,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x05, 0x03, 0x02,
+ 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x05, 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x03, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x06,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x02, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05,
+ 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x02, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x04, 0x04, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x02, 0x05,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x03, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x02, 0x05, 0x04, 0x06, 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, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x02, 0x05,
+ 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x03, 0x02, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05, 0x05,
+ 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05, 0x04, 0x06, 0x04, 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,
+ 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x05,
+ 0x04, 0x06, 0x04, 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, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0x03, 0x02, 0x02, 0x05, 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x04, 0x05,
+ 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x04, 0x04, 0x06, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x06,
+ 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
+ 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x02, 0x00,
+ 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00,
+ 0x06, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06,
+ 0x04, 0x02, 0x02, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x03, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x06, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x05,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03, 0x06, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x03, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x05, 0x02, 0x02, 0x00,
+ 0x00, 0x06, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00,
+ 0x05, 0x03, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x05, 0x04,
+ 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05,
+ 0x05, 0x02, 0x02, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x00, 0x00, 0x05, 0x03, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x06, 0x04, 0x05,
+ 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
+ 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x05, 0x02, 0x03, 0x06,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x02, 0x05, 0x05, 0x07, 0x07, 0x04, 0x06, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x06, 0x06, 0x04, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00,
+ 0x05, 0x05, 0x03, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x03, 0x00, 0x00, 0x00, 0x03, 0x02, 0x02, 0x05, 0x05, 0x07, 0x04, 0x04,
+ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x04, 0x05,
+ 0x05, 0x02, 0x00, 0x00, 0x05, 0x05, 0x02, 0x03, 0x06, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x02, 0x05, 0x03, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05,
+ 0x07, 0x07, 0x04, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04,
+ 0x05, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x00, 0x05, 0x05, 0x02, 0x03,
+ 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x03, 0x00, 0x00, 0x03,
+ 0x02, 0x02, 0x05, 0x05, 0x07, 0x04, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x04, 0x05, 0x05, 0x02, 0x00,
+ 0x07, 0x05, 0x02, 0x02, 0x03, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x05,
+ 0x03, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x07, 0x04, 0x04, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x05, 0x05, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
+ 0x05, 0x05, 0x02, 0x00, 0x07, 0x05, 0x02, 0x02, 0x03, 0x04, 0x07, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x03, 0x02, 0x02, 0x05, 0x07, 0x07,
+ 0x04, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x04, 0x05,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06,
+ 0x06, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x07, 0x04, 0x05, 0x05, 0x00, 0x07, 0x05, 0x02, 0x02,
+ 0x03, 0x04, 0x07, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x03, 0x02, 0x02,
+ 0x05, 0x07, 0x07, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
+ 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x05, 0x05, 0x00,
+ 0x05, 0x07, 0x05, 0x02, 0x03, 0x03, 0x07, 0x07, 0x05, 0x02, 0x02, 0x02,
+ 0x05, 0x03, 0x02, 0x02, 0x05, 0x07, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x07, 0x04, 0x05, 0x02, 0x00, 0x07, 0x05, 0x02, 0x02, 0x03, 0x04, 0x07,
+ 0x05, 0x02, 0x02, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07, 0x07, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x06, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x00, 0x07, 0x05,
+ 0x02, 0x03, 0x03, 0x07, 0x05, 0x05, 0x02, 0x03, 0x05, 0x03, 0x02, 0x05,
+ 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x04, 0x04, 0x04, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x06, 0x07, 0x05, 0x02,
+ 0x02, 0x00, 0x07, 0x05, 0x02, 0x02, 0x03, 0x07, 0x05, 0x05, 0x02, 0x03,
+ 0x05, 0x03, 0x02, 0x07, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x05, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06,
+ 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x07, 0x07, 0x02, 0x02, 0x03, 0x07,
+ 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x05, 0x07, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x05,
+ 0x05, 0x02, 0x00, 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x02, 0x00, 0x07,
+ 0x07, 0x02, 0x02, 0x07, 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x07, 0x07,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x05, 0x05, 0x02, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x04, 0x06, 0x07, 0x07, 0x05, 0x02, 0x00, 0x00, 0x06, 0x07, 0x05,
+ 0x02, 0x02, 0x00, 0x00, 0x07, 0x02, 0x02, 0x07, 0x07, 0x05, 0x02, 0x03,
+ 0x05, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05,
+ 0x05, 0x02, 0x02, 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, 0x00, 0x06, 0x07, 0x07, 0x05, 0x00,
+ 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x07, 0x02, 0x07,
+ 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x07, 0x05, 0x02, 0x02, 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, 0x00, 0x00, 0x00,
+ 0x06, 0x07, 0x05, 0x02, 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x00,
+ 0x00, 0x07, 0x02, 0x07, 0x07, 0x05, 0x02, 0x03, 0x03, 0x02, 0x07, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x07, 0x05, 0x00, 0x00, 0x07, 0x07,
+ 0x05, 0x02, 0x05, 0x00, 0x00, 0x07, 0x02, 0x04, 0x07, 0x05, 0x05, 0x02,
+ 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x05, 0x05, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x05,
+ 0x03, 0x00, 0x00, 0x07, 0x04, 0x05, 0x05, 0x00, 0x00, 0x07, 0x05, 0x00,
+ 0x07, 0x05, 0x05, 0x02, 0x03, 0x05, 0x05, 0x00, 0x00, 0x00, 0x07, 0x07,
+ 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x04, 0x05, 0x00, 0x00, 0x06, 0x04, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x07, 0x07, 0x05, 0x02, 0x03, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x07, 0x05, 0x02,
+ 0x03, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask17RA[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00,
+ 0x00, 0xF0, 0x00, 0x00, 0x08, 0x00, 0x38, 0x00, 0x00, 0xF8, 0x00, 0x00,
+ 0x18, 0x00, 0x3C, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x18, 0x00, 0x3C, 0x00,
+ 0x00, 0x7C, 0x00, 0x00, 0x1C, 0x00, 0x3E, 0x00, 0x00, 0x7C, 0x00, 0x00,
+ 0x1C, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x01, 0x9C, 0x00, 0x7E, 0x00,
+ 0x00, 0x7E, 0x00, 0x03, 0x1E, 0x00, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x03,
+ 0x1E, 0x01, 0xFE, 0x00, 0x00, 0x7E, 0x00, 0x07, 0x0E, 0x01, 0xFE, 0x00,
+ 0x00, 0x7E, 0x00, 0x07, 0x0E, 0x01, 0xFE, 0x00, 0x00, 0x3F, 0x00, 0x0F,
+ 0x8E, 0x01, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x0F, 0x9E, 0x03, 0xFC, 0x00,
+ 0x00, 0x3F, 0x00, 0x1F, 0xDE, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x1F,
+ 0xFE, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x80, 0x1F, 0xFE, 0x03, 0xF8, 0x00,
+ 0x00, 0x3F, 0x80, 0x1F, 0xFC, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x3F,
+ 0xFC, 0x07, 0xF8, 0x00, 0x00, 0x3F, 0x80, 0x3F, 0xFC, 0x07, 0xF8, 0x00,
+ 0x00, 0x7F, 0x80, 0x7F, 0xFC, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x7F,
+ 0xF8, 0x07, 0xF0, 0x00, 0x00, 0x7F, 0xC0, 0x7F, 0xF8, 0x07, 0xF0, 0x00,
+ 0x00, 0x7F, 0xC0, 0x7F, 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0x80, 0x7F,
+ 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0xC0, 0x7F, 0xF8, 0x0F, 0xE0, 0x00,
+ 0x00, 0x7F, 0xE0, 0x7F, 0xF8, 0x1F, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x7F,
+ 0xF8, 0x1F, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0xFF, 0xF0, 0x1F, 0xC0, 0x00,
+ 0x00, 0x3F, 0xE0, 0xFF, 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x1F, 0xE0, 0xFF,
+ 0xF0, 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0xE1, 0xFF, 0xE0, 0x0F, 0xE0, 0x00,
+ 0x00, 0x1F, 0xE1, 0xFF, 0xE0, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xE1, 0xFF,
+ 0xE0, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xE1, 0xFF, 0xE0, 0x1F, 0xF0, 0x06,
+ 0x00, 0x1F, 0xF1, 0xFF, 0xE0, 0x3F, 0xF0, 0x0E, 0x00, 0x0F, 0xF0, 0xFF,
+ 0xC0, 0x3F, 0xF0, 0x0E, 0x00, 0x0F, 0xF0, 0xFF, 0xC0, 0x3F, 0xF0, 0x0E,
+ 0x60, 0x0F, 0xF8, 0xFF, 0xC0, 0x3F, 0xF0, 0x3E, 0x60, 0x0F, 0xF8, 0xFF,
+ 0xE0, 0x3F, 0xE0, 0x7E, 0x70, 0x0F, 0xF8, 0xFF, 0xF0, 0x7F, 0xE0, 0xFE,
+ 0x70, 0x07, 0xF8, 0xFF, 0xF0, 0x7F, 0xE1, 0xFE, 0x7C, 0x07, 0xFC, 0xFF,
+ 0xF0, 0x7F, 0xC1, 0xFE, 0x7F, 0x03, 0xFC, 0xFF, 0xF0, 0xFF, 0xC3, 0xFC,
+ 0x7F, 0x83, 0xFC, 0xFF, 0xF8, 0xFF, 0x83, 0xFC, 0x7F, 0xC1, 0xFC, 0xFF,
+ 0xF8, 0xFF, 0x83, 0xF8, 0x3F, 0xE0, 0x7E, 0xFF, 0xF9, 0xFF, 0x07, 0xF8,
+ 0x3F, 0xF0, 0x7E, 0xFF, 0xF9, 0xFE, 0x0F, 0xF8, 0x3F, 0xF8, 0x3E, 0xFF,
+ 0xFB, 0xFC, 0x1F, 0xF8, 0x3F, 0xFC, 0x3E, 0xFF, 0xFF, 0xF8, 0x3F, 0xF0,
+ 0x1F, 0xFE, 0x1E, 0xFF, 0xFF, 0xF0, 0x3F, 0xF0, 0x1F, 0xFE, 0x1F, 0x7F,
+ 0xFF, 0xE0, 0x7F, 0xC0, 0x0F, 0xFF, 0x0F, 0x3F, 0xFF, 0xC0, 0x7F, 0x80,
+ 0x07, 0xFF, 0x8F, 0xBF, 0xFF, 0xC0, 0xFF, 0x00, 0x03, 0xFF, 0x87, 0xBF,
+ 0xFF, 0x81, 0xFC, 0x00, 0x00, 0xFF, 0xC7, 0xDF, 0xFF, 0x83, 0xF8, 0x00,
+ 0x00, 0x0F, 0xE7, 0xCF, 0xFF, 0x03, 0xF0, 0x00, 0x00, 0x01, 0xE3, 0xC7,
+ 0xFF, 0x07, 0xE0, 0x00, 0x00, 0x00, 0xF3, 0xC7, 0xFF, 0x0F, 0x80, 0x00,
+ 0x00, 0x00, 0x73, 0xE7, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x79, 0xE6,
+ 0xFE, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x39, 0xC2, 0xFE, 0x1C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite17RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 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,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x02, 0x03, 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, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x05, 0x03, 0x03, 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, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x02, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x03, 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,
+ 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x05, 0x05, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x05, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x05, 0x05, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05,
+ 0x05, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x02, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x04, 0x05, 0x02, 0x05, 0x02, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x05,
+ 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x05,
+ 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x02,
+ 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02,
+ 0x05, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04, 0x06, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06,
+ 0x04, 0x05, 0x05, 0x02, 0x05, 0x03, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x04,
+ 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05,
+ 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x05, 0x03, 0x03, 0x02,
+ 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x05, 0x05, 0x04, 0x06, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x05, 0x03, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x04, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05, 0x05, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x03, 0x05, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04,
+ 0x05, 0x05, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x03,
+ 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02,
+ 0x05, 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x02, 0x05, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x05, 0x04, 0x06, 0x04, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x04, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x04, 0x06, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05,
+ 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05,
+ 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x05, 0x04, 0x06, 0x06, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x04, 0x06, 0x04, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05,
+ 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x05, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x04, 0x06, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05,
+ 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x02, 0x05, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x04, 0x06, 0x04, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05,
+ 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x05, 0x05, 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x02,
+ 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x06, 0x06, 0x04,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x05, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x05, 0x05, 0x04,
+ 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04,
+ 0x05, 0x02, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x00, 0x00, 0x00, 0x03, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x03, 0x00, 0x04, 0x05, 0x05, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x05,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x03, 0x06, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x04, 0x04, 0x06, 0x06, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x02, 0x02, 0x03, 0x00,
+ 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00,
+ 0x05, 0x03, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x05, 0x05, 0x04, 0x04,
+ 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05,
+ 0x02, 0x03, 0x03, 0x00, 0x06, 0x06, 0x05, 0x05, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x00, 0x00, 0x05, 0x03, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05,
+ 0x05, 0x04, 0x04, 0x04, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04,
+ 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x06, 0x04, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x05, 0x02, 0x03, 0x06,
+ 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x05, 0x05, 0x07, 0x07, 0x04, 0x06, 0x06, 0x05, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00,
+ 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x06, 0x06, 0x04, 0x04, 0x05, 0x02, 0x02, 0x00, 0x00,
+ 0x05, 0x05, 0x03, 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x02, 0x05,
+ 0x05, 0x00, 0x00, 0x00, 0x03, 0x02, 0x05, 0x05, 0x07, 0x04, 0x04, 0x06,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x04, 0x04, 0x05,
+ 0x05, 0x02, 0x00, 0x00, 0x05, 0x05, 0x02, 0x03, 0x06, 0x04, 0x05, 0x05,
+ 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x00, 0x03, 0x05, 0x05, 0x07,
+ 0x07, 0x04, 0x04, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05,
+ 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x04, 0x04, 0x05, 0x05, 0x02, 0x00, 0x05, 0x05, 0x02, 0x03,
+ 0x06, 0x04, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x03,
+ 0x02, 0x05, 0x05, 0x07, 0x04, 0x04, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x04, 0x05, 0x05, 0x02, 0x00,
+ 0x07, 0x05, 0x02, 0x02, 0x03, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x05,
+ 0x03, 0x00, 0x00, 0x03, 0x02, 0x05, 0x07, 0x04, 0x04, 0x04, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03,
+ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05,
+ 0x05, 0x05, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
+ 0x05, 0x05, 0x02, 0x00, 0x07, 0x05, 0x02, 0x02, 0x03, 0x04, 0x07, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x07, 0x07, 0x04,
+ 0x04, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05,
+ 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06,
+ 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x07, 0x04, 0x05, 0x05, 0x00, 0x07, 0x05, 0x02, 0x02,
+ 0x03, 0x04, 0x07, 0x05, 0x05, 0x02, 0x02, 0x02, 0x05, 0x03, 0x02, 0x02,
+ 0x05, 0x07, 0x04, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04,
+ 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x05, 0x05, 0x00,
+ 0x05, 0x07, 0x05, 0x02, 0x03, 0x03, 0x07, 0x07, 0x05, 0x02, 0x02, 0x02,
+ 0x05, 0x03, 0x02, 0x02, 0x05, 0x04, 0x04, 0x05, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x03, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04,
+ 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x07, 0x04, 0x05, 0x02, 0x00, 0x07, 0x05, 0x02, 0x02, 0x03, 0x04, 0x07,
+ 0x05, 0x02, 0x02, 0x02, 0x05, 0x03, 0x02, 0x05, 0x07, 0x07, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x05, 0x05, 0x02, 0x02,
+ 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x00, 0x07, 0x05,
+ 0x02, 0x03, 0x03, 0x07, 0x05, 0x05, 0x02, 0x03, 0x05, 0x03, 0x02, 0x05,
+ 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x05,
+ 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04,
+ 0x04, 0x05, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x06, 0x07, 0x05, 0x02,
+ 0x02, 0x00, 0x07, 0x05, 0x02, 0x02, 0x03, 0x07, 0x05, 0x05, 0x02, 0x03,
+ 0x05, 0x03, 0x02, 0x07, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x04, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x04, 0x06, 0x06, 0x04, 0x04, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x07, 0x07, 0x02, 0x02, 0x03, 0x07,
+ 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x05, 0x07, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x04, 0x05, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x04, 0x04, 0x04,
+ 0x05, 0x02, 0x00, 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x02, 0x00, 0x07,
+ 0x07, 0x02, 0x02, 0x07, 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x07, 0x07,
+ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, 0x02, 0x02, 0x03,
+ 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, 0x04, 0x06, 0x07, 0x07, 0x05, 0x02, 0x00, 0x00, 0x06, 0x07, 0x05,
+ 0x02, 0x02, 0x00, 0x00, 0x07, 0x02, 0x02, 0x07, 0x07, 0x05, 0x02, 0x03,
+ 0x05, 0x02, 0x07, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05,
+ 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x07, 0x07, 0x05, 0x00,
+ 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x00, 0x00, 0x07, 0x02, 0x07,
+ 0x07, 0x05, 0x02, 0x03, 0x05, 0x02, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x05, 0x05, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x07, 0x05, 0x02, 0x00, 0x00, 0x07, 0x04, 0x05, 0x02, 0x00, 0x00,
+ 0x00, 0x07, 0x02, 0x07, 0x07, 0x05, 0x02, 0x03, 0x03, 0x02, 0x07, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x05, 0x02, 0x02, 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x05, 0x00, 0x00, 0x07, 0x07,
+ 0x05, 0x02, 0x05, 0x00, 0x00, 0x07, 0x02, 0x04, 0x07, 0x05, 0x05, 0x02,
+ 0x03, 0x02, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x05, 0x02, 0x02,
+ 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x05,
+ 0x03, 0x00, 0x00, 0x07, 0x04, 0x05, 0x05, 0x00, 0x00, 0x07, 0x05, 0x00,
+ 0x07, 0x05, 0x05, 0x02, 0x03, 0x05, 0x05, 0x00, 0x00, 0x00, 0x07, 0x07,
+ 0x05, 0x05, 0x02, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x04, 0x05, 0x00, 0x00, 0x06, 0x04, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x07, 0x07, 0x05, 0x02, 0x03, 0x05, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x05, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x07, 0x05, 0x02,
+ 0x03, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask17RB[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0C, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00,
+ 0x01, 0xC0, 0x00, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x01, 0xE0, 0x00, 0x00,
+ 0x04, 0x00, 0x1E, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x04, 0x00, 0x1E, 0x00,
+ 0x01, 0xF0, 0x00, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x04,
+ 0x0C, 0x00, 0x3E, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x0C, 0x00, 0x3E, 0x00,
+ 0x00, 0xF8, 0x00, 0x0E, 0x0E, 0x00, 0x7E, 0x00, 0x00, 0xF8, 0x00, 0x0E,
+ 0x0E, 0x00, 0xFE, 0x00, 0x00, 0xF8, 0x00, 0x0F, 0x0E, 0x00, 0xFE, 0x00,
+ 0x00, 0x7C, 0x00, 0x0F, 0x0E, 0x00, 0xFE, 0x00, 0x00, 0x7C, 0x00, 0x0F,
+ 0x8E, 0x00, 0xFE, 0x00, 0x00, 0x7C, 0x00, 0x1F, 0x9E, 0x01, 0xFE, 0x00,
+ 0x00, 0x7E, 0x00, 0x1F, 0xDE, 0x01, 0xFE, 0x00, 0x00, 0x3E, 0x00, 0x1F,
+ 0xFE, 0x01, 0xFE, 0x00, 0x00, 0x3E, 0x00, 0x3F, 0xFE, 0x01, 0xFC, 0x00,
+ 0x00, 0x3F, 0x00, 0x3F, 0xFC, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x3F,
+ 0xFC, 0x03, 0xFC, 0x00, 0x00, 0x3F, 0x00, 0x7F, 0xFC, 0x03, 0xF8, 0x00,
+ 0x00, 0x3F, 0x00, 0x7F, 0xFC, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x00, 0x7F,
+ 0xF8, 0x03, 0xF8, 0x00, 0x00, 0x7F, 0x80, 0xFF, 0xF8, 0x03, 0xF0, 0x00,
+ 0x00, 0x7F, 0x80, 0xFF, 0xF8, 0x03, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0xFF,
+ 0xF8, 0x03, 0xF0, 0x00, 0x00, 0x7F, 0x80, 0xFF, 0xF8, 0x03, 0xF0, 0x00,
+ 0x00, 0x7F, 0xC1, 0xFF, 0xF8, 0x03, 0xE0, 0x00, 0x00, 0x7F, 0xC1, 0xFF,
+ 0xF8, 0x07, 0xE0, 0x00, 0x00, 0x7F, 0xC1, 0xFF, 0xF0, 0x07, 0xE0, 0x00,
+ 0x00, 0x7F, 0xC1, 0xFF, 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0xC1, 0xFF,
+ 0xF0, 0x07, 0xE0, 0x00, 0x00, 0x3F, 0xC1, 0xFF, 0xE0, 0x07, 0xF0, 0x00,
+ 0x00, 0x1F, 0xC1, 0xFF, 0xE0, 0x07, 0xF0, 0x00, 0x00, 0x0F, 0xE1, 0xFF,
+ 0xE0, 0x07, 0xF0, 0x06, 0x00, 0x0F, 0xE1, 0xFF, 0xE0, 0x0F, 0xF0, 0x0E,
+ 0x00, 0x0F, 0xE1, 0xFF, 0xE0, 0x0F, 0xF0, 0x0E, 0x00, 0x0F, 0xF0, 0xFF,
+ 0xE0, 0x0F, 0xF0, 0x1E, 0x00, 0x0F, 0xF0, 0xFF, 0xE0, 0x1F, 0xF0, 0x3E,
+ 0x00, 0x0F, 0xF0, 0xFF, 0xE0, 0x1F, 0xE0, 0x7E, 0x40, 0x0F, 0xF8, 0xFF,
+ 0xF0, 0x1F, 0xE0, 0xFE, 0xF0, 0x0F, 0xF8, 0xFF, 0xF0, 0x1F, 0xE1, 0xFE,
+ 0xFC, 0x07, 0xF8, 0xFF, 0xF8, 0x3F, 0xC3, 0xFE, 0xFE, 0x07, 0xFC, 0xFF,
+ 0xF8, 0x3F, 0xC3, 0xFE, 0x7F, 0x83, 0xFC, 0xFF, 0xF8, 0x7F, 0xC7, 0xFE,
+ 0x7F, 0xC3, 0xFC, 0xFF, 0xF8, 0xFF, 0x87, 0xFC, 0x7F, 0xC1, 0xFC, 0xFF,
+ 0xF8, 0xFF, 0x87, 0xFC, 0x3F, 0xE0, 0x7E, 0xFF, 0xF9, 0xFF, 0x0F, 0xFC,
+ 0x3F, 0xF0, 0x7E, 0xFF, 0xF9, 0xFE, 0x0F, 0xF8, 0x3F, 0xF8, 0x3E, 0xFF,
+ 0xF1, 0xFC, 0x1F, 0xF8, 0x3F, 0xF8, 0x3E, 0xFF, 0xFF, 0xF8, 0x3F, 0xF0,
+ 0x1F, 0xFC, 0x1E, 0xFF, 0xFF, 0xF0, 0x3F, 0xF0, 0x0F, 0xFE, 0x1F, 0x7F,
+ 0xFF, 0xE0, 0x7F, 0xC0, 0x07, 0xFF, 0x0F, 0x3F, 0xFF, 0xC0, 0x7F, 0x80,
+ 0x03, 0xFF, 0x8F, 0xBF, 0xFF, 0xC0, 0xFE, 0x00, 0x00, 0xFF, 0x87, 0xBF,
+ 0xFF, 0x81, 0xFC, 0x00, 0x00, 0x1F, 0xC7, 0xDF, 0xFF, 0x83, 0xF8, 0x00,
+ 0x00, 0x07, 0xE7, 0xCF, 0xFF, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xE3, 0xC7,
+ 0xFF, 0x07, 0xC0, 0x00, 0x00, 0x00, 0xF3, 0xC7, 0xFF, 0x0F, 0xC0, 0x00,
+ 0x00, 0x00, 0x73, 0xE7, 0xFE, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x39, 0xE6,
+ 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x39, 0xC2, 0xFE, 0x1C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0xFE, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite18A[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x10, 0x14, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x14, 0x10, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x15, 0x1D, 0x1D, 0x15, 0x15, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x14, 0x1D, 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x15, 0x15, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x1D, 0x01,
+ 0x01, 0x1D, 0x15, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x1D, 0x01, 0x01, 0x1D, 0x15, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x11, 0x12, 0x00, 0x00,
+ 0x00, 0x12, 0x15, 0x15, 0x15, 0x15, 0x14, 0x12, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x1D,
+ 0x1D, 0x15, 0x15, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D,
+ 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x1D, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x14, 0x14, 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11,
+ 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x16,
+ 0x16, 0x16, 0x16, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x16, 0x1D, 0x01, 0x01, 0x1D, 0x16, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x16, 0x16,
+ 0x1D, 0x1D, 0x16, 0x16, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x16, 0x16, 0x1D, 0x1D, 0x16, 0x16,
+ 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x11, 0x16, 0x1D, 0x01, 0x01, 0x1D, 0x16, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x11,
+ 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x11, 0x16, 0x16, 0x16, 0x16, 0x11,
+ 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10,
+ 0x10, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x1D, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x11,
+ 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x1D, 0x11, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask18A[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,
+ 0x00, 0x1E, 0x00, 0x00, 0x00, 0x3E, 0x07, 0xF0, 0x00, 0x3E, 0x03, 0xE0,
+ 0x00, 0x00, 0x07, 0xF0, 0x00, 0x1E, 0x07, 0xF0, 0x00, 0x03, 0xC7, 0xF0,
+ 0x00, 0x00, 0x07, 0xF0, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x03, 0xC3, 0xE0,
+ 0x01, 0xF0, 0x00, 0x00, 0x00, 0x03, 0xC0, 0x00, 0x07, 0xF8, 0x00, 0x00,
+ 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00,
+ 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00,
+ 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x78, 0x00,
+ 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t sprite18B[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x1D, 0x11, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x11, 0x16, 0x16, 0x16, 0x16, 0x11, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x11, 0x1D, 0x1D, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x16, 0x1D, 0x01, 0x01, 0x1D,
+ 0x16, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x11, 0x12, 0x00, 0x00,
+ 0x00, 0x10, 0x11, 0x16, 0x16, 0x1D, 0x1D, 0x16, 0x16, 0x11, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x16,
+ 0x16, 0x1D, 0x1D, 0x16, 0x16, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x11, 0x16, 0x1D, 0x01, 0x01, 0x1D,
+ 0x16, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10, 0x11,
+ 0x16, 0x16, 0x16, 0x16, 0x11, 0x10, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x12, 0x10, 0x10, 0x10, 0x10, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x15,
+ 0x15, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x15, 0x1D, 0x01, 0x01, 0x1D, 0x15, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x15, 0x1D,
+ 0x1D, 0x15, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x1D, 0x1D, 0x15, 0x15, 0x14,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x01, 0x1D,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x15, 0x1D, 0x01, 0x01, 0x1D, 0x15, 0x14, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x14,
+ 0x14, 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x11, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x15, 0x15, 0x15, 0x15, 0x14, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x1D, 0x1D,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x14, 0x11, 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12,
+ 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x14, 0x11, 0x14, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x12, 0x11, 0x1D, 0x11, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x12, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+};
+
+const uint8_t mask18B[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x0F, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x3F, 0xC0, 0x00, 0x3C, 0x3F, 0xC0,
+ 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x3C, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE0,
+ 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0xE0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x03, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00,
+ 0x07, 0xF0, 0x07, 0x80, 0x07, 0xF0, 0x07, 0x80, 0x03, 0xE0, 0x07, 0x80,
+ 0x07, 0xF0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00,
+ 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/TFT_FeatherWing_TSC2007_Demos/Arduino_TouchPaint_TSC2007/.feather_rp2040.test.only b/TFT_FeatherWing_TSC2007_Demos/Arduino_TouchPaint_TSC2007/.feather_rp2040.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/TFT_FeatherWing_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino b/TFT_FeatherWing_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino
new file mode 100644
index 000000000..43f73c52c
--- /dev/null
+++ b/TFT_FeatherWing_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino
@@ -0,0 +1,127 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried/Ladyada for Adafruit Industries
+// SPDX-License-Identifier: MIT
+
+/***************************************************
+ This is our touchscreen painting example for the updated Adafruit
+ TFT FeatherWing V2 with TSC2007
+ ----> http://www.adafruit.com/products/3315
+
+ Adafruit invests time and resources providing this open source code,
+ please support Adafruit and open-source hardware by purchasing
+ products from Adafruit!
+
+ Written by Limor Fried/Ladyada for Adafruit Industries.
+ MIT license, all text above must be included in any redistribution
+ ****************************************************/
+
+
+#include
+#include
+#include
+#include
+#include
+
+// This is calibration data for the raw touch data to the screen coordinates
+#define TS_MINX 150
+#define TS_MINY 130
+#define TS_MAXX 3800
+#define TS_MAXY 4000
+#define TS_MIN_PRESSURE 200
+
+Adafruit_TSC2007 ts;
+
+// The display also uses hardware SPI, plus #9 & #10
+#define TFT_CS 9
+#define TFT_DC 10
+Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
+
+// Size of the color selection boxes and the paintbrush size
+#define BOXSIZE 40
+#define PENRADIUS 3
+int oldcolor, currentcolor;
+
+void setup(void) {
+
+ Serial.begin(115200);
+ // while (!Serial) delay(10);
+
+ tft.begin();
+
+ if (!ts.begin()) {
+ Serial.println("Couldn't start touchscreen controller");
+ while (1);
+ }
+ Serial.println("Touchscreen started");
+
+ tft.fillScreen(ILI9341_BLACK);
+
+ // make the color selection boxes
+ tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
+ tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
+ tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
+ tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
+ tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
+ tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
+
+ // select the current color 'red'
+ tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ currentcolor = ILI9341_RED;
+}
+
+void loop(){
+ uint16_t x, y, z1, z2;
+ if (ts.read_touch(&x, &y, &z1, &z2) && (z1 > TS_MIN_PRESSURE)) {
+
+ Serial.print("Touch point: (");
+ Serial.print(x); Serial.print(", ");
+ Serial.print(y); Serial.print(", ");
+ Serial.print(z1); Serial.print(" / ");
+ Serial.print(z2); Serial.println(")");
+
+ // Scale from ~0->4000 to tft.width using the calibration #'s
+ x = map(x, TS_MINX, TS_MAXX, 0, tft.width());
+ y = map(y, TS_MINY, TS_MAXY, 0, tft.height());
+
+ if (y < BOXSIZE) {
+ oldcolor = currentcolor;
+
+ if (x < BOXSIZE) {
+ currentcolor = ILI9341_RED;
+ tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*2) {
+ currentcolor = ILI9341_YELLOW;
+ tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*3) {
+ currentcolor = ILI9341_GREEN;
+ tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*4) {
+ currentcolor = ILI9341_CYAN;
+ tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*5) {
+ currentcolor = ILI9341_BLUE;
+ tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*6) {
+ currentcolor = ILI9341_MAGENTA;
+ tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ }
+
+ if (oldcolor != currentcolor) {
+ if (oldcolor == ILI9341_RED)
+ tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
+ if (oldcolor == ILI9341_YELLOW)
+ tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
+ if (oldcolor == ILI9341_GREEN)
+ tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
+ if (oldcolor == ILI9341_CYAN)
+ tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
+ if (oldcolor == ILI9341_BLUE)
+ tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
+ if (oldcolor == ILI9341_MAGENTA)
+ tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
+ }
+ }
+ if (((y-PENRADIUS) > BOXSIZE) && ((y+PENRADIUS) < tft.height())) {
+ tft.fillCircle(x, y, PENRADIUS, currentcolor);
+ }
+ }
+}
diff --git a/TFT_FeatherWing_TSC2007_Demos/CircuitPython/code.py b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/code.py
new file mode 100644
index 000000000..c2c9ba604
--- /dev/null
+++ b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/code.py
@@ -0,0 +1,69 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+This test will initialize the display using displayio and display
+a bitmap image. The image advances when the touch screen is touched.
+
+Pinouts are for the 2.4" TFT FeatherWing V2
+"""
+import os
+import board
+import displayio
+import adafruit_ili9341
+import adafruit_tsc2007
+
+# Release any resources currently in use for the displays
+displayio.release_displays()
+
+# Use Hardware SPI
+spi = board.SPI()
+
+tft_cs = board.D9
+tft_dc = board.D10
+
+display_width = 320
+display_height = 240
+
+display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs)
+display = adafruit_ili9341.ILI9341(display_bus, width=display_width, height=display_height)
+
+i2c = board.STEMMA_I2C()
+
+irq_dio = None
+tsc = adafruit_tsc2007.TSC2007(i2c, irq=irq_dio)
+
+groups = []
+images = []
+for filename in os.listdir('/'):
+ if filename.lower().endswith('.bmp') and not filename.startswith('.'):
+ images.append("/"+filename)
+print(images)
+
+for i in range(len(images)):
+ splash = displayio.Group()
+ bitmap = displayio.OnDiskBitmap(images[i])
+ tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
+ splash.append(tile_grid)
+ groups.append(splash)
+
+index = 0
+touch_state = False
+
+display.show(groups[index])
+
+while True:
+ if tsc.touched and not touch_state:
+ point = tsc.touch
+ print("Touchpoint: (%d, %d, %d)" % (point["x"], point["y"], point["pressure"]))
+ # left side of the screen
+ if point["y"] < 2000:
+ index = (index - 1) % len(images)
+ display.show(groups[index])
+ # right side of the screen
+ else:
+ index = (index + 1) % len(images)
+ display.show(groups[index])
+ touch_state = True
+ if not tsc.touched and touch_state:
+ touch_state = False
diff --git a/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_5.bmp b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_5.bmp
new file mode 100644
index 000000000..25e34560c
Binary files /dev/null and b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_5.bmp differ
diff --git a/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_6.bmp b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_6.bmp
new file mode 100644
index 000000000..a1bacb3ff
Binary files /dev/null and b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_6.bmp differ
diff --git a/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_7.bmp b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_7.bmp
new file mode 100644
index 000000000..606ecaa69
Binary files /dev/null and b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_7.bmp differ
diff --git a/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_8.bmp b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_8.bmp
new file mode 100644
index 000000000..9515ac512
Binary files /dev/null and b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_8.bmp differ
diff --git a/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_9.bmp b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_9.bmp
new file mode 100644
index 000000000..184e45095
Binary files /dev/null and b/TFT_FeatherWing_TSC2007_Demos/CircuitPython/cp_9.bmp differ
diff --git a/TFT_FeatherWing_V2_CircuitPython_Example/code.py b/TFT_FeatherWing_V2_CircuitPython_Example/code.py
new file mode 100644
index 000000000..118b7cb3f
--- /dev/null
+++ b/TFT_FeatherWing_V2_CircuitPython_Example/code.py
@@ -0,0 +1,69 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+This test will initialize the display using displayio and display
+a bitmap image. The image advances when the touch screen is touched.
+
+Pinouts are for the 3.5" TFT FeatherWing V2
+"""
+import os
+import board
+import displayio
+import adafruit_hx8357
+import adafruit_tsc2007
+
+# Release any resources currently in use for the displays
+displayio.release_displays()
+
+# Use Hardware SPI
+spi = board.SPI()
+
+tft_cs = board.D9
+tft_dc = board.D10
+
+display_width = 480
+display_height = 320
+
+display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs)
+display = adafruit_hx8357.HX8357(display_bus, width=display_width, height=display_height)
+
+i2c = board.STEMMA_I2C()
+
+irq_dio = None
+tsc = adafruit_tsc2007.TSC2007(i2c, irq=irq_dio)
+
+groups = []
+images = []
+for filename in os.listdir('/'):
+ if filename.lower().endswith('.bmp') and not filename.startswith('.'):
+ images.append("/"+filename)
+print(images)
+
+for i in range(len(images)):
+ splash = displayio.Group()
+ bitmap = displayio.OnDiskBitmap(images[i])
+ tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
+ splash.append(tile_grid)
+ groups.append(splash)
+
+index = 0
+touch_state = False
+
+display.root_group = groups[index]
+
+while True:
+ if tsc.touched and not touch_state:
+ point = tsc.touch
+ print("Touchpoint: (%d, %d, %d)" % (point["x"], point["y"], point["pressure"]))
+ # left side of the screen
+ if point["y"] < 2000:
+ index = (index - 1) % len(images)
+ display.root_group = groups[index]
+ # right side of the screen
+ else:
+ index = (index + 1) % len(images)
+ display.root_group = groups[index]
+ touch_state = True
+ if not tsc.touched and touch_state:
+ touch_state = False
diff --git a/TFT_FeatherWing_V2_CircuitPython_Example/cp_5.bmp b/TFT_FeatherWing_V2_CircuitPython_Example/cp_5.bmp
new file mode 100644
index 000000000..ce1127ece
Binary files /dev/null and b/TFT_FeatherWing_V2_CircuitPython_Example/cp_5.bmp differ
diff --git a/TFT_FeatherWing_V2_CircuitPython_Example/cp_6.bmp b/TFT_FeatherWing_V2_CircuitPython_Example/cp_6.bmp
new file mode 100644
index 000000000..65e297156
Binary files /dev/null and b/TFT_FeatherWing_V2_CircuitPython_Example/cp_6.bmp differ
diff --git a/TFT_FeatherWing_V2_CircuitPython_Example/cp_7.bmp b/TFT_FeatherWing_V2_CircuitPython_Example/cp_7.bmp
new file mode 100644
index 000000000..3707ba21c
Binary files /dev/null and b/TFT_FeatherWing_V2_CircuitPython_Example/cp_7.bmp differ
diff --git a/TFT_FeatherWing_V2_CircuitPython_Example/cp_8.bmp b/TFT_FeatherWing_V2_CircuitPython_Example/cp_8.bmp
new file mode 100644
index 000000000..a9c5257be
Binary files /dev/null and b/TFT_FeatherWing_V2_CircuitPython_Example/cp_8.bmp differ
diff --git a/TFT_FeatherWing_V2_CircuitPython_Example/cp_9.bmp b/TFT_FeatherWing_V2_CircuitPython_Example/cp_9.bmp
new file mode 100644
index 000000000..078ae7b7b
Binary files /dev/null and b/TFT_FeatherWing_V2_CircuitPython_Example/cp_9.bmp differ
diff --git a/TFT_Gizmo_Candy_Hearts/candy_heart_ble/code.py b/TFT_Gizmo_Candy_Hearts/candy_heart_ble/code.py
index 681cb6598..fcae3923c 100755
--- a/TFT_Gizmo_Candy_Hearts/candy_heart_ble/code.py
+++ b/TFT_Gizmo_Candy_Hearts/candy_heart_ble/code.py
@@ -54,7 +54,7 @@
group.append(heart)
group.append(line1)
group.append(line2)
-display.show(group)
+display.root_group = group
def update_heart(message, heart_color):
# turn off auto refresh while we change some things
diff --git a/TFT_Gizmo_Candy_Hearts/candy_hearts/code.py b/TFT_Gizmo_Candy_Hearts/candy_hearts/code.py
index 709856afc..6ebc776fd 100755
--- a/TFT_Gizmo_Candy_Hearts/candy_hearts/code.py
+++ b/TFT_Gizmo_Candy_Hearts/candy_hearts/code.py
@@ -56,7 +56,7 @@
group.append(heart)
group.append(line1)
group.append(line2)
-display.show(group)
+display.root_group = group
while True:
# turn off auto refresh while we change some things
diff --git a/TFT_Gizmo_Candy_Hearts/clue_heart_ble/code.py b/TFT_Gizmo_Candy_Hearts/clue_heart_ble/code.py
index 54f621546..a6474089f 100755
--- a/TFT_Gizmo_Candy_Hearts/clue_heart_ble/code.py
+++ b/TFT_Gizmo_Candy_Hearts/clue_heart_ble/code.py
@@ -54,7 +54,7 @@
group.append(heart)
group.append(line1)
group.append(line2)
-display.show(group)
+display.root_group = group
def update_heart(message, heart_color):
# turn off auto refresh while we change some things
diff --git a/TFT_Gizmo_Candy_Hearts/clue_hearts/code.py b/TFT_Gizmo_Candy_Hearts/clue_hearts/code.py
index 96274d57b..567378c77 100755
--- a/TFT_Gizmo_Candy_Hearts/clue_hearts/code.py
+++ b/TFT_Gizmo_Candy_Hearts/clue_hearts/code.py
@@ -56,7 +56,7 @@
group.append(heart)
group.append(line1)
group.append(line2)
-display.show(group)
+display.root_group = group
while True:
# turn off auto refresh while we change some things
diff --git a/TFT_Gizmo_Dreidel/code.py b/TFT_Gizmo_Dreidel/code.py
index 063193831..5da4e7b1e 100644
--- a/TFT_Gizmo_Dreidel/code.py
+++ b/TFT_Gizmo_Dreidel/code.py
@@ -33,7 +33,7 @@
# setup TFT Gizmo and main display group (splash)
display = tft_gizmo.TFT_Gizmo()
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
# load dreidel background image
dreidel_bmp, dreidel_pal = adafruit_imageload.load("/dreidel_background.bmp",
diff --git a/TFT_Gizmo_Snowglobe/snowglobe_fancy/code.py b/TFT_Gizmo_Snowglobe/snowglobe_fancy/code.py
index 4a1f7a353..6431fd94a 100644
--- a/TFT_Gizmo_Snowglobe/snowglobe_fancy/code.py
+++ b/TFT_Gizmo_Snowglobe/snowglobe_fancy/code.py
@@ -80,7 +80,7 @@
splash.append(background)
splash.append(flakes)
splash.append(snow)
-display.show(splash)
+display.root_group = splash
def clear_the_snow():
#pylint: disable=global-statement, redefined-outer-name
diff --git a/TFT_Gizmo_Snowglobe/snowglobe_simple/code.py b/TFT_Gizmo_Snowglobe/snowglobe_simple/code.py
index a538687ba..589ef4dd4 100644
--- a/TFT_Gizmo_Snowglobe/snowglobe_simple/code.py
+++ b/TFT_Gizmo_Snowglobe/snowglobe_simple/code.py
@@ -72,7 +72,7 @@
splash.append(background)
splash.append(flakes)
splash.append(snow)
-display.show(splash)
+display.root_group = splash
def clear_the_snow():
#pylint: disable=global-statement, redefined-outer-name
diff --git a/TFT_Shield_TSC2007_Demos/Arduino_TouchPaint_TSC2007/.uno.test.only b/TFT_Shield_TSC2007_Demos/Arduino_TouchPaint_TSC2007/.uno.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/TFT_Shield_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino b/TFT_Shield_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino
new file mode 100644
index 000000000..d488379ad
--- /dev/null
+++ b/TFT_Shield_TSC2007_Demos/Arduino_TouchPaint_TSC2007/Arduino_TouchPaint_TSC2007.ino
@@ -0,0 +1,130 @@
+// SPDX-FileCopyrightText: 2023 Limor Fried/Ladyada for Adafruit Industries
+// SPDX-License-Identifier: MIT
+
+/***************************************************
+ This is our touchscreen painting example for the updated Adafruit
+ ILI9341 Shield with TSC2007
+ ----> http://www.adafruit.com/products/1651
+
+ Check out the links above for our tutorials and wiring diagrams
+ These displays use SPI to communicate, 4 or 5 pins are required to
+ interface (RST is optional)
+ Adafruit invests time and resources providing this open source code,
+ please support Adafruit and open-source hardware by purchasing
+ products from Adafruit!
+
+ Written by Limor Fried/Ladyada for Adafruit Industries.
+ MIT license, all text above must be included in any redistribution
+ ****************************************************/
+
+
+#include
+#include
+#include
+#include
+#include
+
+// This is calibration data for the raw touch data to the screen coordinates
+#define TS_MINX 150
+#define TS_MINY 130
+#define TS_MAXX 3800
+#define TS_MAXY 4000
+#define TS_MIN_PRESSURE 200
+
+Adafruit_TSC2007 ts;
+
+// The display also uses hardware SPI, plus #9 & #10
+#define TFT_CS 10
+#define TFT_DC 9
+Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
+
+// Size of the color selection boxes and the paintbrush size
+#define BOXSIZE 40
+#define PENRADIUS 3
+int oldcolor, currentcolor;
+
+void setup(void) {
+
+ Serial.begin(115200);
+ // while (!Serial) delay(10);
+
+ tft.begin();
+
+ if (!ts.begin()) {
+ Serial.println("Couldn't start touchscreen controller");
+ while (1);
+ }
+ Serial.println("Touchscreen started");
+
+ tft.fillScreen(ILI9341_BLACK);
+
+ // make the color selection boxes
+ tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
+ tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
+ tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
+ tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
+ tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
+ tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
+
+ // select the current color 'red'
+ tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ currentcolor = ILI9341_RED;
+}
+
+void loop(){
+ uint16_t x, y, z1, z2;
+ if (ts.read_touch(&x, &y, &z1, &z2) && (z1 > TS_MIN_PRESSURE)) {
+
+ Serial.print("Touch point: (");
+ Serial.print(x); Serial.print(", ");
+ Serial.print(y); Serial.print(", ");
+ Serial.print(z1); Serial.print(" / ");
+ Serial.print(z2); Serial.println(")");
+
+ // Scale from ~0->4000 to tft.width using the calibration #'s
+ x = map(x, TS_MINX, TS_MAXX, 0, tft.width());
+ y = map(y, TS_MINY, TS_MAXY, 0, tft.height());
+
+ if (y < BOXSIZE) {
+ oldcolor = currentcolor;
+
+ if (x < BOXSIZE) {
+ currentcolor = ILI9341_RED;
+ tft.drawRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*2) {
+ currentcolor = ILI9341_YELLOW;
+ tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*3) {
+ currentcolor = ILI9341_GREEN;
+ tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*4) {
+ currentcolor = ILI9341_CYAN;
+ tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*5) {
+ currentcolor = ILI9341_BLUE;
+ tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ } else if (x < BOXSIZE*6) {
+ currentcolor = ILI9341_MAGENTA;
+ tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_WHITE);
+ }
+
+ if (oldcolor != currentcolor) {
+ if (oldcolor == ILI9341_RED)
+ tft.fillRect(0, 0, BOXSIZE, BOXSIZE, ILI9341_RED);
+ if (oldcolor == ILI9341_YELLOW)
+ tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, ILI9341_YELLOW);
+ if (oldcolor == ILI9341_GREEN)
+ tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, ILI9341_GREEN);
+ if (oldcolor == ILI9341_CYAN)
+ tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, ILI9341_CYAN);
+ if (oldcolor == ILI9341_BLUE)
+ tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, ILI9341_BLUE);
+ if (oldcolor == ILI9341_MAGENTA)
+ tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, ILI9341_MAGENTA);
+ }
+ }
+ if (((y-PENRADIUS) > BOXSIZE) && ((y+PENRADIUS) < tft.height())) {
+ tft.fillCircle(x, y, PENRADIUS, currentcolor);
+ }
+ }
+}
diff --git a/TFT_Shield_TSC2007_Demos/CircuitPython/code.py b/TFT_Shield_TSC2007_Demos/CircuitPython/code.py
new file mode 100644
index 000000000..d24e070ae
--- /dev/null
+++ b/TFT_Shield_TSC2007_Demos/CircuitPython/code.py
@@ -0,0 +1,74 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""
+This test will initialize the display using displayio and display
+a bitmap image. The image advances when the touch screen is touched.
+
+Pinouts are for the 2.8" TFT Shield
+"""
+import os
+import board
+import displayio
+import adafruit_ili9341
+import adafruit_tsc2007
+
+# Release any resources currently in use for the displays
+displayio.release_displays()
+
+# Use Hardware SPI
+spi = board.SPI()
+
+# Use Software SPI if you have a shield with pins 11-13 jumpered
+# import busio
+# spi = busio.SPI(board.D11, board.D13)
+
+tft_cs = board.D10
+tft_dc = board.D9
+
+display_width = 320
+display_height = 240
+
+display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs)
+display = adafruit_ili9341.ILI9341(display_bus, width=display_width, height=display_height)
+
+i2c = board.I2C()
+
+irq_dio = None
+tsc = adafruit_tsc2007.TSC2007(i2c, irq=irq_dio)
+
+groups = []
+images = []
+for filename in os.listdir('/'):
+ if filename.lower().endswith('.bmp') and not filename.startswith('.'):
+ images.append("/"+filename)
+print(images)
+
+for i in range(len(images)):
+ splash = displayio.Group()
+ bitmap = displayio.OnDiskBitmap(images[i])
+ tile_grid = displayio.TileGrid(bitmap, pixel_shader=bitmap.pixel_shader)
+ splash.append(tile_grid)
+ groups.append(splash)
+
+index = 0
+touch_state = False
+
+display.show(groups[index])
+while True:
+ if tsc.touched and not touch_state:
+ point = tsc.touch
+ touch_state = True
+ if point["pressure"] < 200: # ignore touches with no 'pressure' as false
+ continue
+ print("Touchpoint: (%d, %d, %d)" % (point["x"], point["y"], point["pressure"]))
+ # left side of the screen
+ if point["y"] < 2000:
+ index = (index - 1) % len(images)
+ display.show(groups[index])
+ # right side of the screen
+ else:
+ index = (index + 1) % len(images)
+ display.show(groups[index])
+ if not tsc.touched and touch_state:
+ touch_state = False
diff --git a/TFT_Shield_TSC2007_Demos/CircuitPython/cp_5.bmp b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_5.bmp
new file mode 100644
index 000000000..25e34560c
Binary files /dev/null and b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_5.bmp differ
diff --git a/TFT_Shield_TSC2007_Demos/CircuitPython/cp_6.bmp b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_6.bmp
new file mode 100644
index 000000000..a1bacb3ff
Binary files /dev/null and b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_6.bmp differ
diff --git a/TFT_Shield_TSC2007_Demos/CircuitPython/cp_7.bmp b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_7.bmp
new file mode 100644
index 000000000..606ecaa69
Binary files /dev/null and b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_7.bmp differ
diff --git a/TFT_Shield_TSC2007_Demos/CircuitPython/cp_8.bmp b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_8.bmp
new file mode 100644
index 000000000..9515ac512
Binary files /dev/null and b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_8.bmp differ
diff --git a/TFT_Shield_TSC2007_Demos/CircuitPython/cp_9.bmp b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_9.bmp
new file mode 100644
index 000000000..184e45095
Binary files /dev/null and b/TFT_Shield_TSC2007_Demos/CircuitPython/cp_9.bmp differ
diff --git a/Talking_D20/Arduino/Audio/01.ogg b/Talking_D20/Arduino/Audio/01.ogg
new file mode 100644
index 000000000..b50923afc
Binary files /dev/null and b/Talking_D20/Arduino/Audio/01.ogg differ
diff --git a/Talking_D20/Arduino/Audio/02.ogg b/Talking_D20/Arduino/Audio/02.ogg
new file mode 100644
index 000000000..99bc7288b
Binary files /dev/null and b/Talking_D20/Arduino/Audio/02.ogg differ
diff --git a/Talking_D20/Arduino/Audio/03.ogg b/Talking_D20/Arduino/Audio/03.ogg
new file mode 100644
index 000000000..1e4e6ba42
Binary files /dev/null and b/Talking_D20/Arduino/Audio/03.ogg differ
diff --git a/Talking_D20/Arduino/Audio/03alt.ogg b/Talking_D20/Arduino/Audio/03alt.ogg
new file mode 100644
index 000000000..304af8cd5
Binary files /dev/null and b/Talking_D20/Arduino/Audio/03alt.ogg differ
diff --git a/Talking_D20/Arduino/Audio/04.ogg b/Talking_D20/Arduino/Audio/04.ogg
new file mode 100644
index 000000000..43bccb442
Binary files /dev/null and b/Talking_D20/Arduino/Audio/04.ogg differ
diff --git a/Talking_D20/Arduino/Audio/05.ogg b/Talking_D20/Arduino/Audio/05.ogg
new file mode 100644
index 000000000..962a68a9c
Binary files /dev/null and b/Talking_D20/Arduino/Audio/05.ogg differ
diff --git a/Talking_D20/Arduino/Audio/06.ogg b/Talking_D20/Arduino/Audio/06.ogg
new file mode 100644
index 000000000..9ddd5d7f0
Binary files /dev/null and b/Talking_D20/Arduino/Audio/06.ogg differ
diff --git a/Talking_D20/Arduino/Audio/07.ogg b/Talking_D20/Arduino/Audio/07.ogg
new file mode 100644
index 000000000..17201494f
Binary files /dev/null and b/Talking_D20/Arduino/Audio/07.ogg differ
diff --git a/Talking_D20/Arduino/Audio/08.ogg b/Talking_D20/Arduino/Audio/08.ogg
new file mode 100644
index 000000000..a3f1334e1
Binary files /dev/null and b/Talking_D20/Arduino/Audio/08.ogg differ
diff --git a/Talking_D20/Arduino/Audio/09.ogg b/Talking_D20/Arduino/Audio/09.ogg
new file mode 100644
index 000000000..b9ff3b96f
Binary files /dev/null and b/Talking_D20/Arduino/Audio/09.ogg differ
diff --git a/Talking_D20/Arduino/Audio/10.ogg b/Talking_D20/Arduino/Audio/10.ogg
new file mode 100644
index 000000000..b91d60320
Binary files /dev/null and b/Talking_D20/Arduino/Audio/10.ogg differ
diff --git a/Talking_D20/Arduino/Audio/11.ogg b/Talking_D20/Arduino/Audio/11.ogg
new file mode 100644
index 000000000..90a4dbe5b
Binary files /dev/null and b/Talking_D20/Arduino/Audio/11.ogg differ
diff --git a/Talking_D20/Arduino/Audio/12.ogg b/Talking_D20/Arduino/Audio/12.ogg
new file mode 100644
index 000000000..d75c02af3
Binary files /dev/null and b/Talking_D20/Arduino/Audio/12.ogg differ
diff --git a/Talking_D20/Arduino/Audio/13.ogg b/Talking_D20/Arduino/Audio/13.ogg
new file mode 100644
index 000000000..05a023147
Binary files /dev/null and b/Talking_D20/Arduino/Audio/13.ogg differ
diff --git a/Talking_D20/Arduino/Audio/14.ogg b/Talking_D20/Arduino/Audio/14.ogg
new file mode 100644
index 000000000..5e499d170
Binary files /dev/null and b/Talking_D20/Arduino/Audio/14.ogg differ
diff --git a/Talking_D20/Arduino/Audio/15.ogg b/Talking_D20/Arduino/Audio/15.ogg
new file mode 100644
index 000000000..6ef22bcc3
Binary files /dev/null and b/Talking_D20/Arduino/Audio/15.ogg differ
diff --git a/Talking_D20/Arduino/Audio/16.ogg b/Talking_D20/Arduino/Audio/16.ogg
new file mode 100644
index 000000000..87b228910
Binary files /dev/null and b/Talking_D20/Arduino/Audio/16.ogg differ
diff --git a/Talking_D20/Arduino/Audio/17.ogg b/Talking_D20/Arduino/Audio/17.ogg
new file mode 100644
index 000000000..1c9593016
Binary files /dev/null and b/Talking_D20/Arduino/Audio/17.ogg differ
diff --git a/Talking_D20/Arduino/Audio/18.ogg b/Talking_D20/Arduino/Audio/18.ogg
new file mode 100644
index 000000000..7a961dfd9
Binary files /dev/null and b/Talking_D20/Arduino/Audio/18.ogg differ
diff --git a/Talking_D20/Arduino/Audio/19.ogg b/Talking_D20/Arduino/Audio/19.ogg
new file mode 100644
index 000000000..2cd916633
Binary files /dev/null and b/Talking_D20/Arduino/Audio/19.ogg differ
diff --git a/Talking_D20/Arduino/Audio/20.ogg b/Talking_D20/Arduino/Audio/20.ogg
new file mode 100644
index 000000000..45cc9b644
Binary files /dev/null and b/Talking_D20/Arduino/Audio/20.ogg differ
diff --git a/Talking_D20/Arduino/Audio/annc1.ogg b/Talking_D20/Arduino/Audio/annc1.ogg
new file mode 100644
index 000000000..ad07edda7
Binary files /dev/null and b/Talking_D20/Arduino/Audio/annc1.ogg differ
diff --git a/Talking_D20/Arduino/Audio/annc2.ogg b/Talking_D20/Arduino/Audio/annc2.ogg
new file mode 100644
index 000000000..d4d604d02
Binary files /dev/null and b/Talking_D20/Arduino/Audio/annc2.ogg differ
diff --git a/Talking_D20/Arduino/Audio/annc3.ogg b/Talking_D20/Arduino/Audio/annc3.ogg
new file mode 100644
index 000000000..2c3e75f3b
Binary files /dev/null and b/Talking_D20/Arduino/Audio/annc3.ogg differ
diff --git a/Talking_D20/Arduino/Audio/bad1.ogg b/Talking_D20/Arduino/Audio/bad1.ogg
new file mode 100644
index 000000000..8f8767486
Binary files /dev/null and b/Talking_D20/Arduino/Audio/bad1.ogg differ
diff --git a/Talking_D20/Arduino/Audio/bad2.ogg b/Talking_D20/Arduino/Audio/bad2.ogg
new file mode 100644
index 000000000..e02281dcc
Binary files /dev/null and b/Talking_D20/Arduino/Audio/bad2.ogg differ
diff --git a/Talking_D20/Arduino/Audio/bad3.ogg b/Talking_D20/Arduino/Audio/bad3.ogg
new file mode 100644
index 000000000..287ab69e5
Binary files /dev/null and b/Talking_D20/Arduino/Audio/bad3.ogg differ
diff --git a/Talking_D20/Arduino/Audio/batt1.ogg b/Talking_D20/Arduino/Audio/batt1.ogg
new file mode 100644
index 000000000..4f1e7e3ce
Binary files /dev/null and b/Talking_D20/Arduino/Audio/batt1.ogg differ
diff --git a/Talking_D20/Arduino/Audio/batt2.ogg b/Talking_D20/Arduino/Audio/batt2.ogg
new file mode 100644
index 000000000..50f22916f
Binary files /dev/null and b/Talking_D20/Arduino/Audio/batt2.ogg differ
diff --git a/Talking_D20/Arduino/Audio/good1.ogg b/Talking_D20/Arduino/Audio/good1.ogg
new file mode 100644
index 000000000..3707590bd
Binary files /dev/null and b/Talking_D20/Arduino/Audio/good1.ogg differ
diff --git a/Talking_D20/Arduino/Audio/good2.ogg b/Talking_D20/Arduino/Audio/good2.ogg
new file mode 100644
index 000000000..0e003c859
Binary files /dev/null and b/Talking_D20/Arduino/Audio/good2.ogg differ
diff --git a/Talking_D20/Arduino/Audio/good3.ogg b/Talking_D20/Arduino/Audio/good3.ogg
new file mode 100644
index 000000000..eb79f3447
Binary files /dev/null and b/Talking_D20/Arduino/Audio/good3.ogg differ
diff --git a/Talking_D20/Arduino/Audio/startup.ogg b/Talking_D20/Arduino/Audio/startup.ogg
new file mode 100644
index 000000000..f819137f4
Binary files /dev/null and b/Talking_D20/Arduino/Audio/startup.ogg differ
diff --git a/Talking_D20/Arduino/README.md b/Talking_D20/Arduino/README.md
new file mode 100644
index 000000000..161e32919
--- /dev/null
+++ b/Talking_D20/Arduino/README.md
@@ -0,0 +1,10 @@
+Talking_D20
+===========
+
+GREETINGS, ADVENTURER! This is the Arduino source code for the original Talking d20 project:
+
+https://learn.adafruit.com/talking-d20-20-sided-gaming-die/overview
+
+Please visit the above guide for links to 3D-printable files, a list of parts and required Arduino libraries, and assembly instructions.
+
+This project was later revisited using CircuitPython and the Adafruit Prop Maker Feather. This is located up one level in the CircuitPython folder. The code, hardware and 3D models are NOT interchangeable; each is specific to the corresponding version of the project.
diff --git a/Talking_D20/Arduino/d20/.protrinket_5v.test.only b/Talking_D20/Arduino/d20/.protrinket_5v.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/Talking_D20/Arduino/d20/d20.ino b/Talking_D20/Arduino/d20/d20.ino
new file mode 100644
index 000000000..c99b4a5ec
--- /dev/null
+++ b/Talking_D20/Arduino/d20/d20.ino
@@ -0,0 +1,353 @@
+// SPDX-FileCopyrightText: 2017 Phillip Burgess for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// Talking D20 sketch. Uses the following Adafruit parts:
+//
+// - Pro Trinket 3V or 5V (adafruit.com/product/2010 or 2000)
+// - 150 mAh LiPoly battery (1317)
+// - LiPoly backpack (2124)
+// - MMA8451 accelerometer (2019)
+// - 2.5W class D mono amp (2130)
+// - Audio FX Mini sound board (2342 or 2341)
+//
+// Needs Adafruit_MMA8451, Adafruit_Sensor and Adafruit_Soundboard libs:
+// github.com/adafruit
+// 3D-printable enclosure can be downloaded from Thingiverse:
+// (add link here)
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+// A few pins are configurable; selections here were to make wiring diagram
+// simpler. Other pins MUST go to designated spots, e.g. accelerometer pins
+// I2, SDA and SCL to Pro Trinket pins 3, A4 and A5, TX/RX to Audio FX, etc.
+#define AMP_SHUTDOWN A3 // "SD" on amplifier board
+#define AUDIO_ACT 4 // "Act" on Audio FX
+#define AUDIO_RESET 8 // "Rst" on Audio FX
+#define LED 13 // Pro Trinket onboard LED
+
+// Need access to some MMA8451 registers not defined in .h file:
+#define MMA8451_REG_FF_MT_CFG 0x15
+#define MMA8451_REG_FF_MT_SRC 0x16
+#define MMA8451_REG_FF_MT_THS 0x17
+#define MMA8451_REG_FF_MT_COUNT 0x18
+#define MMA8451_REG_CTRL_REG3 0x2C
+#define MMA8451_I2C_ADDR 0x1D // If pin A -> GND, use 0x1C instead
+
+Adafruit_MMA8451 mma = Adafruit_MMA8451();
+Adafruit_Soundboard sfx = Adafruit_Soundboard(&Serial, NULL, AUDIO_RESET);
+
+char filename[12] = " OGG"; // Tail end of filename NEVER changes
+
+// PROGMEM string arrays are wretched, and sfx.playTrack() expects a
+// goofball fixed-length space-padded filename...we take care of both by
+// declaring all the filenames inside one big contiguous PROGMEM string
+// (notice there are no commas here, it's all concatenated), and copying
+// an 8-byte section as needed into filename[]. Some waste, but we're
+// not hurting for space. If you change or add any filenames, they MUST
+// be padded with spaces to 8 characters, else there will be...trouble.
+static const char PROGMEM bigStringTable[] = // play() index
+ "01 " "02 " "03 " "04 " // 0- 3
+ "05 " "06 " "07 " "08 " // 4- 7
+ "09 " "10 " "11 " "12 " // 8-11
+ "13 " "14 " "15 " "16 " // 12-15
+ "17 " "18 " "19 " "20 " // 16-19
+ "ANNC1 " "ANNC2 " "ANNC3 " // 20-22
+ "BAD1 " "BAD2 " "BAD3 " // 23-25
+ "GOOD1 " "GOOD2 " "GOOD3 " // 26-28
+ "STARTUP " "03ALT " "BATT1 " "BATT2 "; // 29-32
+
+// INITIALIZATION ----------------------------------------------------------
+
+// If there's an error during startup, LED flashes to indicate status
+void fail(uint16_t ms) {
+ for(uint8_t x=0;;) {
+ digitalWrite(LED, ++x & 1);
+ delay(ms);
+ }
+}
+
+void dummyISR(void) { } // Empty ISR function to make attachInterrupt happy
+
+void setup(void) {
+ pinMode(LED, OUTPUT);
+ digitalWrite(LED, HIGH); // LED on at startup
+ Serial.begin(9600); // Start serial connection
+ uint8_t sfxInit = sfx.reset(); // Contact Audio FX board
+ if(!sfxInit) fail(250); // Audio FX error? Slow blink
+ if(!mma.begin()) fail(100); // Init accelerometer, fast blink = error
+ mma.setRange(MMA8451_RANGE_2_G); // Set accelerometer sensitivity (2G)
+ digitalWrite(LED, LOW); // LED off = good init!
+ play(29); // Startup greeting
+ audioOff(); // Turn off amplifier & Audio FX
+ randomSeed(analogRead(0)); // Seed random() from floating input
+
+ // Configure high-to-low interrupt detect on Arduino pin 3.
+ // Accelerometer will be set up to generate freefall interrupt.
+ pinMode(3, INPUT_PULLUP);
+ attachInterrupt(1, dummyISR, FALLING);
+ // 'FALLING' above refers to the interrupt signal logic level change --
+ // high to low -- the fact that we're using this to sense physical
+ // 'falling' is a coincidence; don't be misled by the syntax!
+
+ wait(); // Power down everything and wait for interrupt
+}
+
+// MAIN LOOP ---------------------------------------------------------------
+// Active when an interrupt occurs and chip is awakened...
+
+uint8_t batt = 0; // Low battery announcement counter
+
+void loop() {
+ // audioOn() needs a moment to start up before anything plays,
+ // stabilize() takes time anyway, so exploit that rather than delay()ing.
+ audioOn();
+ if(stabilize(250, 3000)) {
+ uint8_t f = getFace();
+
+ if(f == 2) { // If '3' face
+ if(!random(10)) { // 1-in-10 chance of...
+ f = 30; // Alternate 'face 3' track
+ } // LOL
+ }
+
+ play(20 + random(3)); // One of 3 random announcements
+
+ play(f); // Face #
+
+ if(f != 30) { // If not the alt face...
+ if(f <= 3) { // 0-3 (1-4) = bad
+ play(23 + random(3)); // Random jab
+ } else if(f >= 16) { // 16-19 (17-20) = good
+ play(26 + random(3)); // Random praise
+ }
+ }
+
+ // Estimate voltage from battery, report if low.
+ // This is "ish" and may need work.
+ if((readVoltage() < 3000) && !(batt++ & 1)) { // Annc on every 2nd roll
+ delay(500);
+ play(31 + random(2));
+ }
+ }
+
+ audioOff();
+ (void)readReg(0x16); // Clear interrupt
+ wait(); // Return to power-down state
+}
+
+// AUDIO STUFF -------------------------------------------------------------
+
+// Activating the Audio FX board and amplifier only when needed saves
+// a TON of battery life.
+
+void audioOn(void) {
+ pinMode(AMP_SHUTDOWN, INPUT_PULLUP);
+ pinMode(AUDIO_RESET , INPUT_PULLUP);
+}
+
+void audioOff(void) {
+ digitalWrite(AMP_SHUTDOWN, LOW);
+ pinMode( AMP_SHUTDOWN, OUTPUT);
+ digitalWrite(AUDIO_RESET , LOW); // Hold low = XRESET (low power)
+ pinMode( AUDIO_RESET , OUTPUT);
+}
+
+void play(uint16_t i) {
+ memcpy_P(filename, &bigStringTable[i * 8], 8);
+
+ sfx.playTrack(filename);
+ delay(250); // Need this -- some delay before ACT LED is valid
+ while(digitalRead(AUDIO_ACT) == LOW); // Wait for sound to finish
+}
+
+// ACCELEROMETER STUFF -----------------------------------------------------
+
+// Waits for accelerometer output to stabilize, indicating movement stopped
+boolean stabilize(uint32_t ms, uint32_t timeout) {
+ uint32_t startTime, prevTime, currentTime;
+ int32_t prevX, prevY, prevZ;
+ int32_t dX, dY, dZ;
+
+ // Get initial orientation and time
+ mma.read();
+ prevX = mma.x;
+ prevY = mma.y;
+ prevZ = mma.z;
+ prevTime = startTime = millis();
+
+ // Then make repeated readings until orientation settles down.
+ // A normal roll should only take a second or two...if things do not
+ // stabilize before timeout, probably being moved or carried.
+ while(((currentTime = millis()) - startTime) < timeout) {
+ if((currentTime - prevTime) >= ms) return true; // Stable!
+ mma.read();
+ dX = mma.x - prevX; // X/Y/Z delta from last stable position
+ dY = mma.y - prevY;
+ dZ = mma.z - prevZ;
+ // Compare distance. sqrt() can be avoided by squaring distance
+ // to be compared; about 100 units on X+Y+Z axes ((100^2)*3 = 30K)
+ if((dX * dX + dY * dY + dZ * dZ) >= 30000) { // Big change?
+ prevX = mma.x; // Save new position
+ prevY = mma.y;
+ prevZ = mma.z;
+ prevTime = millis(); // Reset timer
+ }
+ }
+
+ return false; // Didn't stabilize, probably false trigger
+}
+
+// Face gravity vectors (accelerometer installed FACE DOWN)
+static const int16_t PROGMEM gtable[20][3] = {
+ { 1475, -1950, 3215 }, // 1
+ { -2420, 3295, -775 }, // 2
+ { 3715, -1175 -795 }, // 3
+ { -3830, -1125, -920 }, // 4
+ { -2440, 875, 3105 }, // 5
+ { -50, -2395, -3265 }, // 6
+ { 2290, 770, 3210 }, // 7
+ { 1380, 2105, -3225 }, // 8
+ { 50, -3995, -845 }, // 9
+ { 2300, 3310, -695 }, // 10
+ { -2430, -3190, 610 }, // 11
+ { -25, 4045, 835 }, // 12
+ { -1515, -2030, 3160 }, // 13
+ { -2425, -665, -3250 }, // 14
+ { -65, 2470, 3215 }, // 15
+ { 2260, -805, -3200 }, // 16
+ { 3740, 1200, 775 }, // 17
+ { -3820, 1280, 715 }, // 18
+ { 2235, -3250, 785 }, // 19
+ { -1605, 2080, -3235 } // 20
+};
+
+// Find nearest face to accelerometer reading.
+uint8_t getFace(void) {
+ int32_t dX, dY, dZ, d, dMin = LONG_MAX;
+ int16_t fX, fY, fZ;
+ uint8_t i, iMin = 0;
+ uint16_t addr = 0;
+
+ mma.read();
+ for(i=0; i<20; i++) { // For each face...
+ fX = pgm_read_word(>able[i][0]); // Read face X/Y/Z
+ fY = pgm_read_word(>able[i][1]); // from PROGMEM
+ fZ = pgm_read_word(>able[i][2]);
+ dX = mma.x - fX; // Delta between accelerometer & face
+ dY = mma.y - fY;
+ dZ = mma.z - fZ;
+ d = dX * dX + dY * dY + dZ * dZ; // Distance^2
+ // Check if this face is the closest match so far. Because
+ // we're comparing RELATIVE distances, sqrt() can be avoided.
+ if(d < dMin) { // New closest match?
+ dMin = d; // Save closest distance^2
+ iMin = i; // Save index of closest match
+ }
+ }
+
+ return iMin; // Index of closest matching face
+}
+
+// A couple of private functions from accelerometer library need
+// to be duplicated here:
+
+void writeReg(uint8_t reg, uint8_t value) {
+ Wire.beginTransmission(MMA8451_I2C_ADDR);
+ Wire.write(reg);
+ Wire.write(value);
+ Wire.endTransmission();
+}
+
+uint8_t readReg(uint8_t reg) {
+ Wire.beginTransmission(MMA8451_I2C_ADDR);
+ Wire.write(reg);
+ Wire.endTransmission(false);
+ Wire.requestFrom(MMA8451_I2C_ADDR, 1);
+ if(!Wire.available()) return -1;
+ return Wire.read();
+}
+
+// POWER-SAVING STUFF ------------------------------------------------------
+
+// Audio FX in XRESET state saves ~13 mA
+// Amplifier shutdown saves ~5 mA
+// MCU deep sleep w/peripherals off saves ~9 mA
+// Circuit in sleep state draws about 8.6 mA w/3V Pro Trinket, 10.6 mA w/5V
+// The accelerometer is not currently put into a reduced-power state;
+// docs are a bit confusing about this. Potential power saving there looks
+// minimal, like 0.2 mA, so I'm not too worried about this.
+// Full-on, circuit playing audio peaks around 220 mA.
+
+void wait(void) {
+ // Configure the accelerometer to issue an interrupt when free-fall
+ // is detected (which we'll interpret as initiating a roll). Free-fall
+ // detection is the same feature as used in some laptops to park spinning
+ // disks before impact. Cool, huh? It's REALLY good at this...can
+ // distinguish between a shake and a drop, we don't need to process a
+ // bunch of accelerometer readings...in fact the MCU is put to sleep
+ // while waiting. Being a somewhat esoteric function, free-fall detect
+ // isn't provided in the normal Adafruit_MMA8451 library...we need to set
+ // up registers manually. This sequence mostly comes from a Freescale
+ // application note, just tweaking thresholds slightly:
+ writeReg(MMA8451_REG_CTRL_REG1 , 0x20); // Standby
+ writeReg(MMA8451_REG_FF_MT_CFG , 0xB8); // X+Y+Z + latch
+ writeReg(MMA8451_REG_FF_MT_THS , 0x02); // < 0.2G
+ writeReg(MMA8451_REG_FF_MT_COUNT, 0x05); // 5 count debounce
+ writeReg(MMA8451_REG_CTRL_REG3 , 0x08); // Freefall wake, active low
+ writeReg(MMA8451_REG_CTRL_REG4 , 0x04); // Enable interrupt
+ writeReg(MMA8451_REG_CTRL_REG5 , 0x00); // Route to I2 pin
+ uint8_t a = readReg(MMA8451_REG_CTRL_REG1) | 0x01;
+ writeReg(MMA8451_REG_CTRL_REG1, a); // Enable
+
+ DIDR0 = 0x3F; DIDR1 = 0x03; // Disable digital input on analog
+ power_all_disable(); // Disable ALL AVR peripherals
+ set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Deepest sleep mode
+ sleep_enable();
+ interrupts();
+ sleep_mode(); // Power-down MCU
+
+ // Code resumes here on interrupt. Re-enable peripherals used by sketch:
+ power_twi_enable(); // Used by Wire lib (accelerometer)
+ Wire.begin(); // Need to re-init I2C
+ power_usart0_enable(); // Used by Serial (to Audio FX)
+ power_timer0_enable(); // Used by delay(), millis(), etc.
+}
+
+// Battery monitoring idea adapted from JeeLabs article:
+// jeelabs.org/2012/05/04/measuring-vcc-via-the-bandgap/
+// Code from Adafruit TimeSquare project.
+static uint16_t readVoltage() {
+ int i, prev;
+ uint8_t count;
+ uint16_t mV;
+
+ power_adc_enable();
+ ADMUX = _BV(REFS0) | // AVcc voltage reference
+ _BV(MUX3) | _BV(MUX2) | _BV(MUX1); // Bandgap (1.8V) input
+ ADCSRA = _BV(ADEN) | // Enable ADC
+ _BV(ADPS2) | _BV(ADPS1); // 1/64 prescaler (8 MHz -> 125 KHz)
+ // Datasheet notes that the first bandgap reading is usually garbage as
+ // voltages are stabilizing. It practice, it seems to take a bit longer
+ // than that (perhaps due to sleep). Tried various delays, but this was
+ // still inconsistent and kludgey. Instead, repeated readings are taken
+ // until four concurrent readings stabilize within 10 mV.
+ for(prev=9999, count=0; count<4; ) {
+ for(ADCSRA |= _BV(ADSC); ADCSRA & _BV(ADSC); ); // Start, await ADC conv.
+ i = ADC; // Result
+ mV = i ? (1100L * 1023 / i) : 0; // Scale to millivolts
+ if(abs((int)mV - prev) <= 10) count++; // +1 stable reading
+ else count = 0; // too much change, start over
+ prev = mV;
+ }
+ ADCSRA = 0; // ADC off
+ power_adc_disable();
+ return mV;
+}
+
diff --git a/Talking_D20/CircuitPython/README.md b/Talking_D20/CircuitPython/README.md
new file mode 100644
index 000000000..7233d645c
--- /dev/null
+++ b/Talking_D20/CircuitPython/README.md
@@ -0,0 +1,6 @@
+Talking_D20
+===========
+
+GREETINGS, ADVENTURER! This is the CircuitPython code for the revised Talking d20 project.
+
+An earlier version of this project was written in Arduino and relied on different hardware. The code, hardware and 3D models are NOT interchangeable; each is specific to the corresponding version of the project.
diff --git a/Talking_D20/CircuitPython/WAVs/01.wav b/Talking_D20/CircuitPython/WAVs/01.wav
new file mode 100755
index 000000000..c886ace1b
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/01.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/02.wav b/Talking_D20/CircuitPython/WAVs/02.wav
new file mode 100755
index 000000000..abd65027a
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/02.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/03.wav b/Talking_D20/CircuitPython/WAVs/03.wav
new file mode 100755
index 000000000..c540e33b6
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/03.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/03alt.wav b/Talking_D20/CircuitPython/WAVs/03alt.wav
new file mode 100755
index 000000000..11dd7d0bb
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/03alt.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/04.wav b/Talking_D20/CircuitPython/WAVs/04.wav
new file mode 100755
index 000000000..45d4e95b2
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/04.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/05.wav b/Talking_D20/CircuitPython/WAVs/05.wav
new file mode 100755
index 000000000..3caa22738
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/05.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/06.wav b/Talking_D20/CircuitPython/WAVs/06.wav
new file mode 100755
index 000000000..851f2f3b5
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/06.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/07.wav b/Talking_D20/CircuitPython/WAVs/07.wav
new file mode 100755
index 000000000..a285a0e05
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/07.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/08.wav b/Talking_D20/CircuitPython/WAVs/08.wav
new file mode 100755
index 000000000..02899a461
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/08.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/09.wav b/Talking_D20/CircuitPython/WAVs/09.wav
new file mode 100755
index 000000000..1e9fe1a01
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/09.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/10.wav b/Talking_D20/CircuitPython/WAVs/10.wav
new file mode 100755
index 000000000..13ea27de0
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/10.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/11.wav b/Talking_D20/CircuitPython/WAVs/11.wav
new file mode 100755
index 000000000..0dd57f8e0
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/11.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/12.wav b/Talking_D20/CircuitPython/WAVs/12.wav
new file mode 100755
index 000000000..418c78a21
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/12.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/13.wav b/Talking_D20/CircuitPython/WAVs/13.wav
new file mode 100755
index 000000000..2f0716445
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/13.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/14.wav b/Talking_D20/CircuitPython/WAVs/14.wav
new file mode 100755
index 000000000..2615c1cdc
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/14.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/15.wav b/Talking_D20/CircuitPython/WAVs/15.wav
new file mode 100755
index 000000000..ad36a312f
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/15.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/16.wav b/Talking_D20/CircuitPython/WAVs/16.wav
new file mode 100755
index 000000000..135d46781
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/16.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/17.wav b/Talking_D20/CircuitPython/WAVs/17.wav
new file mode 100755
index 000000000..2538a6e32
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/17.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/18.wav b/Talking_D20/CircuitPython/WAVs/18.wav
new file mode 100755
index 000000000..ab3f78ceb
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/18.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/19.wav b/Talking_D20/CircuitPython/WAVs/19.wav
new file mode 100755
index 000000000..d0869251f
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/19.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/20.wav b/Talking_D20/CircuitPython/WAVs/20.wav
new file mode 100755
index 000000000..81cc08215
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/20.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/annc1.wav b/Talking_D20/CircuitPython/WAVs/annc1.wav
new file mode 100755
index 000000000..4b98b3374
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/annc1.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/annc2.wav b/Talking_D20/CircuitPython/WAVs/annc2.wav
new file mode 100755
index 000000000..0bf69e943
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/annc2.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/annc3.wav b/Talking_D20/CircuitPython/WAVs/annc3.wav
new file mode 100755
index 000000000..dbdc413b7
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/annc3.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/bad1.wav b/Talking_D20/CircuitPython/WAVs/bad1.wav
new file mode 100755
index 000000000..2f46697c5
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/bad1.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/bad2.wav b/Talking_D20/CircuitPython/WAVs/bad2.wav
new file mode 100755
index 000000000..b88156f3f
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/bad2.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/bad3.wav b/Talking_D20/CircuitPython/WAVs/bad3.wav
new file mode 100755
index 000000000..28f22eb9c
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/bad3.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/batt1.wav b/Talking_D20/CircuitPython/WAVs/batt1.wav
new file mode 100755
index 000000000..ef8c6e078
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/batt1.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/batt2.wav b/Talking_D20/CircuitPython/WAVs/batt2.wav
new file mode 100755
index 000000000..ff78f457d
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/batt2.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/good1.wav b/Talking_D20/CircuitPython/WAVs/good1.wav
new file mode 100755
index 000000000..a6a0efdfd
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/good1.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/good2.wav b/Talking_D20/CircuitPython/WAVs/good2.wav
new file mode 100755
index 000000000..0dc924907
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/good2.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/good3.wav b/Talking_D20/CircuitPython/WAVs/good3.wav
new file mode 100755
index 000000000..cb5e06666
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/good3.wav differ
diff --git a/Talking_D20/CircuitPython/WAVs/startup.wav b/Talking_D20/CircuitPython/WAVs/startup.wav
new file mode 100755
index 000000000..9a0eb9850
Binary files /dev/null and b/Talking_D20/CircuitPython/WAVs/startup.wav differ
diff --git a/Talking_D20/CircuitPython/code.py b/Talking_D20/CircuitPython/code.py
new file mode 100755
index 000000000..92ea5b093
--- /dev/null
+++ b/Talking_D20/CircuitPython/code.py
@@ -0,0 +1,193 @@
+# SPDX-FileCopyrightText: 2023 Phillip Burgess for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+"""
+Talking D20 for Adafruit RP2040 Prop-Maker Feather.
+Required additions:
+- 8 Ohm 1 watt speaker (Adafruit #4227)
+- 400 mAh LiPoly battery (Adafruit #3898)
+- 3D printed enclosure
+Optional additions:
+- Battery monitoring can be added with two 10K resistors in series.
+ One end to BAT, one to GND, and center point to an analog pin (e.g. A3).
+ Then set BATT_SENSE in configurables section, e.g. BATT_SENSE = board.A3
+"""
+
+
+# pylint: disable=import-error
+from random import randint
+import time
+import adafruit_lis3dh
+import analogio
+import audiocore
+import audiobusio
+import board
+from digitalio import DigitalInOut, Direction
+
+# CONFIGURABLES ------------------------------------------------------------
+
+WAV_PATH = "WAVs"
+WAV_FILES = (
+ "01", # Index 0 (WAV for face 1)
+ "02", # Index 1 (WAV for face 2)
+ "03", # etc...
+ "04",
+ "05",
+ "06",
+ "07",
+ "08",
+ "09",
+ "10",
+ "11",
+ "12",
+ "13",
+ "14",
+ "15",
+ "16",
+ "17",
+ "18",
+ "19",
+ "20",
+ "annc1", # Index 20
+ "annc2",
+ "annc3",
+ "bad1", # Index 23
+ "bad2",
+ "bad3",
+ "good1", # Index 26
+ "good2",
+ "good3",
+ "startup", # Index 29
+ "03alt",
+ "batt1",
+ "batt2",
+)
+
+BATT_SENSE = None # Assign analog pin if voltage divider present
+BATT_LOW = 3.4 # Voltage for battery warning (if BATT_SENSE)
+FREEFALL_THRESHOLD = 8.65 # Near-freefall = 0.3G ^ 2
+FREEFALL_MIN_DURATION = 1 / 25 # Time (seconds) roll is in near-freefall
+SETTLE_TIME = 0.5 # Time (seconds) to settle on a face
+SETTLE_TIMEOUT = 3.0 # If unsettled by this, resume freefall check
+
+FACE_VECTORS = ( # Accelerometer vectors, shouldn't need to edit
+ (-3.50, 0.00, 9.16), # Face 1 (index 0)
+ (5.66, -5.66, -5.66), # Face 2 (index 1)
+ (-9.16, 3.50, 0.00), # 3 etc...
+ (9.16, 3.50, 0.00),
+ (5.66, -5.66, 5.66), # 5
+ (0.00, 9.16, -3.50),
+ (-5.66, -5.66, 5.66),
+ (-3.50, 0.00, -9.16),
+ (0.00, 9.16, 3.50),
+ (-5.66, -5.66, -5.66), # 10
+ (5.66, 5.66, 5.66),
+ (0.00, -9.16, -3.50),
+ (3.50, 0.00, 9.16),
+ (5.66, 5.66, -5.66),
+ (0.00, -9.16, 3.50), # 15
+ (-5.66, 5.66, -5.66),
+ (-9.16, -3.50, 0.00),
+ (9.16, -3.50, 0.00),
+ (-5.66, 5.66, 5.66),
+ (3.50, 0.00, -9.16), # 20
+)
+
+# HARDWARE SETUP -----------------------------------------------------------
+
+# Enable power to audio amp, etc.
+external_power = DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = Direction.OUTPUT
+external_power.value = True
+
+# I2S audio out
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+
+# LIS3DH accelerometer
+lis3dh = adafruit_lis3dh.LIS3DH_I2C(board.I2C())
+lis3dh.range = adafruit_lis3dh.RANGE_4_G
+
+# Battery monitor, if present (requires two 10K resistors)
+if BATT_SENSE:
+ adc = analogio.AnalogIn(BATT_SENSE)
+
+# FUNCTIONS ----------------------------------------------------------------
+
+
+def play(index, block=True):
+ """Play one WAV file from the WAV_FILES table. Pass in table index (0-n)
+ and optional 'block' flag (if True, function blocks until audio is
+ finished playing)."""
+ wave_file = open(f"{WAV_PATH}/{WAV_FILES[index]}.wav", "rb")
+ wave = audiocore.WaveFile(wave_file)
+ audio.play(wave)
+ while block and audio.playing:
+ pass
+
+
+def freefall_wait():
+ """Watch for freefall condition (low G for FREEFALL_MIN_DURATION)."""
+ start_time = time.monotonic()
+ while time.monotonic() - start_time < FREEFALL_MIN_DURATION:
+ accel = lis3dh.acceleration
+ if accel[0] ** 2 + accel[1] ** 2 + accel[2] ** 2 > FREEFALL_THRESHOLD:
+ start_time = time.monotonic()
+
+
+# pylint: disable=redefined-outer-name
+def settle_wait():
+ """Wait for die to stabilize (steady ~1G) on one number. Returns
+ index of corresponding audio file (0-19 for faces 1-20), or -1
+ if acceleration did not stabilize within SETTLE_TIMEOUT."""
+ start_time = time.monotonic()
+ prev_face = -1
+ while time.monotonic() - start_time < SETTLE_TIMEOUT:
+ accel = lis3dh.acceleration
+ mag = accel[0] ** 2 + accel[1] ** 2 + accel[2] ** 2
+ if 77.89 < mag < 116.35: # ~1G
+ face = -1
+ min_dist = 1000000
+ for index, vec in enumerate(FACE_VECTORS):
+ dist_sq = (
+ (accel[0] - vec[0]) ** 2
+ + (accel[1] - vec[1]) ** 2
+ + (accel[2] - vec[2]) ** 2
+ )
+ if dist_sq < min_dist: # New closest match?
+ min_dist = dist_sq # Save closest distance^2
+ face = index # Save index of closest match
+ if face != prev_face:
+ prev_face = face
+ settle_start = time.monotonic()
+ elif time.monotonic() - settle_start > SETTLE_TIME:
+ return face
+ else:
+ prev_face = -1
+ return -1
+
+
+# STARTUP & MAIN LOOP ------------------------------------------------------
+
+play(29, False) # Play greeting (non-blocking)
+
+# pylint: disable=invalid-name, used-before-assignment
+while True:
+ freefall_wait() # Wait for roll
+ face = settle_wait() # Wait for landing (or timeout)
+ if face >= 0: # Not timeout...
+ if face == 2: # If '3' face
+ if randint(0, 9) == 0: # 1-in-10 chance of...
+ face = 30 # Alternate 'face 3' track
+ play(randint(20, 22)) # One of 3 random announcements
+ play(face) # Face number
+ if face != 30: # If not the alt face...
+ if face <= 3: # Index 0-3 (face 1-4) = bad
+ play(randint(23, 25)) # Random jab
+ elif face >= 16: # index 16-19 (face 17-20) = good
+ play(randint(26, 28)) # Random praise
+ if BATT_SENSE:
+ volts = adc.value / 65535 * 3.3 * 2
+ if volts < BATT_LOW:
+ time.sleep(0.5)
+ play(randint(31, 32), False)
diff --git a/Talking_D20/README.md b/Talking_D20/README.md
new file mode 100644
index 000000000..a54eac4ae
--- /dev/null
+++ b/Talking_D20/README.md
@@ -0,0 +1,10 @@
+Talking_D20
+===========
+
+GREETINGS, ADVENTURER! This folder contains code and audio for TWO VERSIONS of the Talking D20 project.
+
+The ORIGINAL project was written in Arduino and relied on separate accelerometer and audio decoder boards. This is in the 'Arduino' folder.
+
+The REVISED project is written in CircuitPython and uses the all-in-one Adafruit Prop Maker Feather. This is in the 'CircuitPython' folder.
+
+THE CODE, HARDWARE AND 3D MODELS ARE NOT INTERCHANGEABLE; each is specific to the corresponding version of the project. The CircuitPython code will NOT work on the original design, nor will the Arduino code work on the newer design.
diff --git a/Tilemap_Game_With_CircuitPython/basic_movement/code.py b/Tilemap_Game_With_CircuitPython/basic_movement/code.py
index 2a1604ee2..ce7b4b512 100644
--- a/Tilemap_Game_With_CircuitPython/basic_movement/code.py
+++ b/Tilemap_Game_With_CircuitPython/basic_movement/code.py
@@ -79,7 +79,7 @@
sprite.y = 16 * player_loc["y"]
# Add the Group to the Display
-display.show(group)
+display.root_group = group
prev_btn_vals = ugame.buttons.get_pressed()
diff --git a/Tilemap_Game_With_CircuitPython/basic_movement_transparent_sprite/code.py b/Tilemap_Game_With_CircuitPython/basic_movement_transparent_sprite/code.py
index 00696fafc..e607f2f7d 100644
--- a/Tilemap_Game_With_CircuitPython/basic_movement_transparent_sprite/code.py
+++ b/Tilemap_Game_With_CircuitPython/basic_movement_transparent_sprite/code.py
@@ -79,7 +79,7 @@
sprite.y = 16 * player_loc["y"]
# Add the Group to the Display
-display.show(group)
+display.root_group = group
prev_btn_vals = ugame.buttons.get_pressed()
diff --git a/Tilemap_Game_With_CircuitPython/basic_rendering/code.py b/Tilemap_Game_With_CircuitPython/basic_rendering/code.py
index 2e010ce74..015a70cf0 100644
--- a/Tilemap_Game_With_CircuitPython/basic_rendering/code.py
+++ b/Tilemap_Game_With_CircuitPython/basic_rendering/code.py
@@ -76,6 +76,6 @@
sprite.y = 16 * 3
# Add the Group to the Display
-display.show(group)
+display.root_group = group
while True:
pass
diff --git a/Tilemap_Game_With_CircuitPython/code.py b/Tilemap_Game_With_CircuitPython/code.py
index afd182fa3..49ac85252 100644
--- a/Tilemap_Game_With_CircuitPython/code.py
+++ b/Tilemap_Game_With_CircuitPython/code.py
@@ -273,7 +273,7 @@ def load_map(file_name):
load_map(MAPS[GAME_STATE["MAP_INDEX"]])
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# variables to store previous value of button state
prev_up = False
diff --git a/Tombstone_Matrix_Prop-Maker/code.py b/Tombstone_Matrix_Prop-Maker/code.py
new file mode 100644
index 000000000..52cfeb92b
--- /dev/null
+++ b/Tombstone_Matrix_Prop-Maker/code.py
@@ -0,0 +1,149 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import os
+import random
+import board
+import audiocore
+import audiobusio
+import audiomixer
+import pwmio
+from digitalio import DigitalInOut, Direction
+import neopixel
+from adafruit_motor import servo
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_led_animation.animation.pulse import Pulse
+from adafruit_led_animation.color import RED, BLACK, GREEN
+import adafruit_display_text.label
+import displayio
+import framebufferio
+import rgbmatrix
+import terminalio
+import adafruit_vl53l4cd
+
+distance_trigger = 90 # cm
+text="Here lies Fred"
+text_color = 0xff0000
+# how often to check for a new trigger from ToF
+pause_time = 30 # seconds
+# speed for scrolling the text on the matrix
+scroll_time = 0.1 # seconds
+
+displayio.release_displays()
+
+# enable external power pin
+# provides power to the external components
+external_power = DigitalInOut(board.EXTERNAL_POWER)
+external_power.direction = Direction.OUTPUT
+external_power.value = True
+
+i2c = board.I2C()
+vl53 = adafruit_vl53l4cd.VL53L4CD(i2c)
+
+vl53.inter_measurement = 0
+vl53.timing_budget = 200
+
+matrix = rgbmatrix.RGBMatrix(
+ width=64, height=32, bit_depth=4,
+ rgb_pins=[board.D6, board.D5, board.D9, board.D11, board.D10, board.D12],
+ addr_pins=[board.D25, board.D24, board.A3, board.A2],
+ clock_pin=board.D13, latch_pin=board.D0, output_enable_pin=board.D1)
+
+display = framebufferio.FramebufferDisplay(matrix, auto_refresh=True)
+
+line1 = adafruit_display_text.label.Label(
+ terminalio.FONT,
+ color=text_color,
+ text=text)
+line1.x = 1
+line1.y = 14
+
+def scroll(line):
+ line.x = line.x - 1
+ line_width = line.bounding_box[2]
+ if line.x < -line_width:
+ line.x = display.width
+
+g = displayio.Group()
+g.append(line1)
+
+display.root_group = g
+
+wavs = []
+for filename in os.listdir('/tomb_sounds'):
+ if filename.lower().endswith('.wav') and not filename.startswith('.'):
+ wavs.append("/tomb_sounds/"+filename)
+
+audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True, buffer_size=32768)
+
+mixer.voice[0].level = 1
+audio.play(mixer)
+wav_length = len(wavs) - 1
+
+def open_audio(num):
+ n = wavs[num]
+ f = open(n, "rb")
+ w = audiocore.WaveFile(f)
+ return w
+
+PIXEL_PIN = board.EXTERNAL_NEOPIXELS
+BRIGHTNESS = 0.3
+NUM_PIXELS = 2
+
+PIXELS = neopixel.NeoPixel(PIXEL_PIN, NUM_PIXELS, auto_write=True)
+pulse = Pulse(PIXELS, speed=0.05, color=RED, period=3)
+COLORS = [RED, GREEN, BLACK]
+
+SERVO_PIN = board.EXTERNAL_SERVO
+PWM = pwmio.PWMOut(SERVO_PIN, duty_cycle=2 ** 15, frequency=50)
+SERVO = servo.Servo(PWM)
+SERVO.angle = 0
+
+clock = ticks_ms()
+the_time = 5000
+x = 0
+scroll_clock = ticks_ms()
+scroll_time = int(scroll_time * 1000)
+pause_clock = ticks_ms()
+pause_time = pause_time * 1000
+pause = False
+
+vl53.start_ranging()
+
+while True:
+
+ vl53.clear_interrupt()
+
+ if vl53.distance < distance_trigger:
+ if not pause:
+ print("Distance: {} cm".format(vl53.distance))
+ SERVO.angle = 90
+ wave = open_audio(random.randint(0, wav_length))
+ mixer.voice[0].play(wave)
+ while mixer.playing:
+ pulse.color = COLORS[x]
+ pulse.animate()
+ if ticks_diff(ticks_ms(), scroll_clock) >= scroll_time:
+ scroll(line1)
+ display.refresh(minimum_frames_per_second=0)
+ scroll_clock = ticks_add(scroll_clock, scroll_time)
+ x = (x + 1) % 2
+ pause = True
+ print("paused")
+ pause_clock = ticks_add(pause_clock, pause_time)
+ else:
+ if ticks_diff(ticks_ms(), pause_clock) >= pause_time:
+ print("back to sensing")
+ pause = False
+ print("still paused")
+ if ticks_diff(ticks_ms(), scroll_clock) >= scroll_time:
+ print("Distance: {} cm".format(vl53.distance))
+ scroll(line1)
+ display.refresh(minimum_frames_per_second=0)
+ scroll_clock = ticks_add(scroll_clock, scroll_time)
+ SERVO.angle = 0
+ pulse.color = COLORS[2]
+ pulse.animate()
diff --git a/Tombstone_Matrix_Prop-Maker/tomb_sounds/halloween.wav b/Tombstone_Matrix_Prop-Maker/tomb_sounds/halloween.wav
new file mode 100644
index 000000000..662a3875e
Binary files /dev/null and b/Tombstone_Matrix_Prop-Maker/tomb_sounds/halloween.wav differ
diff --git a/Tombstone_Matrix_Prop-Maker/tomb_sounds/muhaha.wav b/Tombstone_Matrix_Prop-Maker/tomb_sounds/muhaha.wav
new file mode 100644
index 000000000..473240829
Binary files /dev/null and b/Tombstone_Matrix_Prop-Maker/tomb_sounds/muhaha.wav differ
diff --git a/Tombstone_Matrix_Prop-Maker/tomb_sounds/smell.wav b/Tombstone_Matrix_Prop-Maker/tomb_sounds/smell.wav
new file mode 100644
index 000000000..ae4eb95d4
Binary files /dev/null and b/Tombstone_Matrix_Prop-Maker/tomb_sounds/smell.wav differ
diff --git a/TrellisM4_Simple_MIDI_UART/code.py b/TrellisM4_Simple_MIDI_UART/code.py
index 772703674..38e7f0cd3 100644
--- a/TrellisM4_Simple_MIDI_UART/code.py
+++ b/TrellisM4_Simple_MIDI_UART/code.py
@@ -8,7 +8,7 @@
from rainbowio import colorwheel
import board
import busio
-midiuart = busio.UART(board.SDA, board.SCL, baudrate=31250)
+midiuart = busio.UART(board.SDA, board.SCL, baudrate=31250, timeout=0.001)
print("MIDI UART EXAMPLE")
trellis = adafruit_trellism4.TrellisM4Express()
diff --git a/Trinket_Ultrasonic_Rangefinder/.gemma_m0.test.only b/Trinket_Ultrasonic_Rangefinder/.gemma_m0.test.only
index e69de29bb..8b1378917 100644
--- a/Trinket_Ultrasonic_Rangefinder/.gemma_m0.test.only
+++ b/Trinket_Ultrasonic_Rangefinder/.gemma_m0.test.only
@@ -0,0 +1 @@
+
diff --git a/Trinket_Ultrasonic_Rangefinder/.trinket_m0.test.only b/Trinket_Ultrasonic_Rangefinder/.trinket_m0.test.only
new file mode 100644
index 000000000..8d1c8b69c
--- /dev/null
+++ b/Trinket_Ultrasonic_Rangefinder/.trinket_m0.test.only
@@ -0,0 +1 @@
+
diff --git a/Trinket_Ultrasonic_Rangefinder/README.md b/Trinket_Ultrasonic_Rangefinder/README.md
index 20329235f..d143627ba 100644
--- a/Trinket_Ultrasonic_Rangefinder/README.md
+++ b/Trinket_Ultrasonic_Rangefinder/README.md
@@ -2,3 +2,5 @@
Code to accompany this tutorial:
https://learn.adafruit.com/trinket-ultrasonic-rangefinder
+
+Currently limited to M0 versions due to an issue in the Arduino IDE
diff --git a/Trinket_Ultrasonic_Rangefinder/code.py b/Trinket_Ultrasonic_Rangefinder/code.py
index 3efd313d7..abaa43af9 100644
--- a/Trinket_Ultrasonic_Rangefinder/code.py
+++ b/Trinket_Ultrasonic_Rangefinder/code.py
@@ -81,6 +81,12 @@ def find_mode(x):
"""
n = len(x)
+ if n == 0: # If somehow there is a null array
+ return 0
+
+ if n == 1: # In trivial case of a one element array
+ return x[0] # just return the element as the mode.
+
max_count = 0
mode = 0
bimodal = 0
diff --git a/Trinkey_QT2040_Enviro_Gadget/circuitpython/enviromon.py b/Trinkey_QT2040_Enviro_Gadget/circuitpython/enviromon.py
index 4c104312c..3d6ff4946 100755
--- a/Trinkey_QT2040_Enviro_Gadget/circuitpython/enviromon.py
+++ b/Trinkey_QT2040_Enviro_Gadget/circuitpython/enviromon.py
@@ -23,9 +23,11 @@
pass
# setup stuff
-scd = adafruit_scd4x.SCD4X(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+scd = adafruit_scd4x.SCD4X(i2c)
scd.start_periodic_measurement()
-bme = adafruit_bme280.Adafruit_BME280_I2C(board.I2C())
+bme = adafruit_bme280.Adafruit_BME280_I2C(i2c)
pixel = neopixel.NeoPixel(board.NEOPIXEL, 1)
# CSV output
diff --git a/Trinkey_QT2040_Enviro_Gadget/u2if/enviro_u2if.py b/Trinkey_QT2040_Enviro_Gadget/u2if/enviro_u2if.py
index cb186a302..cb605d5aa 100755
--- a/Trinkey_QT2040_Enviro_Gadget/u2if/enviro_u2if.py
+++ b/Trinkey_QT2040_Enviro_Gadget/u2if/enviro_u2if.py
@@ -7,10 +7,12 @@
import adafruit_scd4x
from adafruit_bme280 import basic as adafruit_bme280
-scd = adafruit_scd4x.SCD4X(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+scd = adafruit_scd4x.SCD4X(i2c)
scd.start_periodic_measurement()
-bme = adafruit_bme280.Adafruit_BME280_I2C(board.I2C())
+bme = adafruit_bme280.Adafruit_BME280_I2C(i2c)
while True:
time.sleep(5)
diff --git a/Tyrell_Synth/code.py b/Tyrell_Synth/code.py
new file mode 100644
index 000000000..424b6d52a
--- /dev/null
+++ b/Tyrell_Synth/code.py
@@ -0,0 +1,146 @@
+# SPDX-FileCopyrightText: 2023 John Park & Tod Kurt
+#
+# SPDX-License-Identifier: MIT
+# Tyrell Synth Distopia
+# based on:
+# 19 Jun 2023 - @todbot / Tod Kurt
+# - A swirling ominous wub that evolves over time
+# - Made for QTPy RP2040 but will work on any synthio-capable board
+# - wallow in the sound
+#
+# Circuit:
+# - QT Py RP2040
+# - QTPy TX/RX pins for audio out, going through RC filter (1k + 100nF) to TRS jack
+# Touch io for eight pins, pairs that -/+ tempo, transpose pitch, filter rate, volume
+# use >1MΩ resistors to pull down to ground
+#
+# Code:
+# - Five detuned oscillators are randomly detuned very second or so
+# - A low-pass filter is slowly modulated over the filters
+# - The filter modulation rate also changes randomly every second (also reflected on neopixel)
+# - Every x seconds a new note is randomly chosen from the allowed note list
+
+import time
+import random
+import board
+import audiopwmio
+import audiomixer
+import synthio
+import ulab.numpy as np
+import neopixel
+import rainbowio
+import touchio
+from adafruit_debouncer import Debouncer
+
+touch_pins = (board.A0, board.A1, board.A2, board.A3, board.SDA, board.SCL, board.MISO, board.MOSI)
+touchpads = []
+for pin in touch_pins:
+ tmp_pin = touchio.TouchIn(pin)
+ touchpads.append(Debouncer(tmp_pin))
+
+notes = (37, 38, 35, 49) # MIDI C#, D, B
+note_duration = 10 # how long each note plays for
+num_voices = 6 # how many voices for each note
+lpf_basef = 300 # low pass filter lowest frequency
+lpf_resonance = 1.7 # filter q
+
+led = neopixel.NeoPixel(board.NEOPIXEL, 1, brightness=0.1)
+
+# PWM pin pair on QTPY RP2040
+audio = audiopwmio.PWMAudioOut(left_channel=board.TX, right_channel=board.RX)
+
+mixer = audiomixer.Mixer(channel_count=2, sample_rate=28000, buffer_size=2048)
+synth = synthio.Synthesizer(channel_count=2, sample_rate=28000)
+audio.play(mixer)
+mixer.voice[0].play(synth)
+mixer_vol = 0.5
+mixer.voice[0].level = mixer_vol
+
+# oscillator waveform, a 512 sample downward saw wave going from +/-30k
+wave_saw = np.linspace(30000, -30000, num=512, dtype=np.int16) # max is +/-32k gives us headroom
+amp_env = synthio.Envelope(attack_level=1, sustain_level=1)
+
+# set up the voices (aka "Notes" in synthio-speak) w/ initial values
+voices = []
+for i in range(num_voices):
+ voices.append(synthio.Note(frequency=0, envelope=amp_env, waveform=wave_saw))
+
+lfo_panning = synthio.LFO(rate=0.1, scale=0.75)
+
+# set all the voices to the "same" frequency (with random detuning)
+# zeroth voice is sub-oscillator, one-octave down
+def set_notes(n):
+ for voice in voices:
+ f = synthio.midi_to_hz(n + random.uniform(0, 0.4))
+ voice.frequency = f
+ voice.panning = lfo_panning
+ voices[0].frequency = voices[0].frequency/2 # bass note one octave down
+
+# the LFO that modulates the filter cutoff
+lfo_filtermod = synthio.LFO(rate=0.05, scale=2000, offset=2000)
+# we can't attach this directly to a filter input, so stash it in the blocks runner
+synth.blocks.append(lfo_filtermod)
+
+note = notes[0]
+last_note_time = time.monotonic()
+last_filtermod_time = time.monotonic()
+
+# start the voices playing
+set_notes(note)
+synth.press(voices)
+
+# user input variables
+note_offset = (0, 1, 3, 4, 5, 7)
+note_offset_index = 0
+
+lfo_subdivision = 8
+
+print("'Prepare to wallow.' \n- Major Jack Dongle")
+
+
+while True:
+ for t in range(len(touchpads)):
+ touchpads[t].update()
+ if touchpads[t].rose:
+ if t == 0:
+ note_offset_index = (note_offset_index + 1) % (len(note_offset))
+ set_notes(note + note_offset[note_offset_index])
+ elif t == 1:
+ note_offset_index = (note_offset_index - 1) % (len(note_offset))
+ set_notes(note + note_offset[note_offset_index])
+
+ elif t == 2:
+ note_duration = note_duration + 1
+ elif t == 3:
+ note_duration = abs(max((note_duration - 1), 1))
+
+ elif t == 4:
+ lfo_subdivision = 20
+ elif t == 5:
+ lfo_subdivision = 0.2
+
+ elif t == 6: # volume
+ mixer_vol = max(mixer_vol - 0.05, 0.0)
+ mixer.voice[0].level = mixer_vol
+
+ elif t == 7: # volume
+ mixer_vol = min(mixer_vol + 0.05, 1.0)
+ mixer.voice[0].level = mixer_vol
+
+ # continuosly update filter, no global filter, so update each voice's filter
+ for v in voices:
+ v.filter = synth.low_pass_filter(lpf_basef + lfo_filtermod.value, lpf_resonance)
+
+ led.fill(rainbowio.colorwheel(lfo_filtermod.value/20)) # show filtermod moving
+
+ if time.monotonic() - last_filtermod_time > 1:
+ last_filtermod_time = time.monotonic()
+ # randomly modulate the filter frequency ('rate' in synthio) to make more dynamic
+ lfo_filtermod.rate = 0.01 + random.random() / lfo_subdivision
+
+ if time.monotonic() - last_note_time > note_duration:
+ last_note_time = time.monotonic()
+ # pick new note, but not one we're currently playing
+ note = random.choice([n for n in notes if n != note])
+ set_notes(note+note_offset[note_offset_index])
+ print("note", note, ["%3.2f" % v.frequency for v in voices])
diff --git a/Ukulele/code.py b/Ukulele/code.py
index 78bff364c..12c3fab32 100644
--- a/Ukulele/code.py
+++ b/Ukulele/code.py
@@ -68,7 +68,8 @@
enable.direction = digitalio.Direction.OUTPUT
enable.value = False
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
pixels = neopixel.NeoPixel(NEOPIXEL_PIN, NUM_PIXELS, brightness=1, auto_write=False)
pixels.fill(0) # NeoPixels off ASAP on startup
diff --git a/Vertical_Garden_Barometer/code.py b/Vertical_Garden_Barometer/code.py
index c59818ad7..b52ef7187 100755
--- a/Vertical_Garden_Barometer/code.py
+++ b/Vertical_Garden_Barometer/code.py
@@ -111,7 +111,7 @@
text_group.append(timer_label)
clue_display.append(text_group)
-clue.display.show(clue_display)
+clue.display.root_group = clue_display
# Define color Palettes
waterPalette = [0x00d9ff, 0x006f82, 0x43bfb9, 0x0066ff]
@@ -231,7 +231,7 @@
reading2_label.text = "Last {:.1f}".format(reading2)
reading3_label.text = "Prev {:.1f}".format(reading3)
timer_label.text = "{}".format(counter)
- clue.display.show(clue_display)
+ clue.display.root_group = clue_display
# Is it time to update?
if counter > timeToCheck:
diff --git a/Voice2Json_Edge_Detection/demo.py b/Voice2Json_Edge_Detection/demo.py
index de64fc959..9ec8b9559 100644
--- a/Voice2Json_Edge_Detection/demo.py
+++ b/Voice2Json_Edge_Detection/demo.py
@@ -110,7 +110,7 @@ def process_output(line):
)
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
for output_line in shell_command(listen_command):
process_output(output_line)
diff --git a/WS2801_LED_Menorah/code.py b/WS2801_LED_Menorah/code.py
new file mode 100644
index 000000000..0bb1f51f2
--- /dev/null
+++ b/WS2801_LED_Menorah/code.py
@@ -0,0 +1,85 @@
+# SPDX-FileCopyrightText: 2021 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+"""Jack-o'-Lantern flame example Adafruit Circuit Playground Express"""
+import time
+import math
+import random
+import board
+import adafruit_ws2801
+from digitalio import DigitalInOut, Direction, Pull
+
+# button setup
+button = DigitalInOut(board.A2)
+button.direction = Direction.INPUT
+button.pull = Pull.UP
+
+# pixel setup
+pixel_num = 9
+pixel_offset = 2
+pixels = adafruit_ws2801.WS2801(board.SDA1, board.SCL1, pixel_num+pixel_offset, brightness=1,
+ auto_write=False)
+
+pixel_prev = [128] * len(pixels)
+
+lit_candles = None
+night = 0
+timestamp = None
+
+def split(first, second, offset):
+ """
+ Subdivide a brightness range, introducing a random offset in middle,
+ then call recursively with smaller offsets along the way.
+ @param1 first: Initial brightness value.
+ @param1 second: Ending brightness value.
+ @param1 offset: Midpoint offset range is +/- this amount max.
+ """
+ thelevel = 0
+ if offset != 0:
+ mid = ((first + second + 1) / 2 + random.randint(-offset, offset))
+ offset = int(offset / 2)
+ split(first, mid, offset)
+ split(mid, second, offset)
+ else:
+ thelevel = math.pow(first / 255.0, 2.7) * 255.0 + 0.5
+ return thelevel
+ return thelevel
+
+while True:
+ if not button.value:
+ while not button.value:
+ time.sleep(0.01) # debounce
+ night += 1 # next night
+ if night == 9: # wrap around
+ night = 0 # shamash-only mode
+ lit_candles = None # reset the lights
+ if not lit_candles:
+ print("Current night: ", night)
+ night_countup = 0
+ timestamp = time.monotonic()-1
+
+ if night == 0:
+ # special case of shamash-only
+ lit_candles = [False, False, False, False, True, False, False, False, False]
+ elif (night_countup != night) and (time.monotonic() - timestamp >= 1):
+ # we slowly 'light' up the candles from left to right, once a second
+ night_countup += 1
+ lit_candles = [False] * (8-night) + [True] * night_countup + [False] * (night-night_countup)
+ lit_candles.insert(4, True) # shamash always on
+ print("Count up candle #", night_countup, lit_candles)
+ timestamp = time.monotonic()
+
+ # animate candles
+ for p in range(len(pixels)-pixel_offset):
+ if not lit_candles[p]:
+ pixels[p+pixel_offset] = 0
+ continue
+ if p == 4:
+ level = random.randint(128, 255)
+ else:
+ level = random.randint(64, 191)
+
+ color = split(pixel_prev[p], level, 32)
+ pixels[p+pixel_offset] = ((int(level), int(level / 8), int(level / 48)))
+ pixel_prev[p] = level
+ pixels.show()
diff --git a/Walkmp3rson/code.py b/Walkmp3rson/code.py
index 8e46f1a09..a586e0573 100644
--- a/Walkmp3rson/code.py
+++ b/Walkmp3rson/code.py
@@ -83,7 +83,7 @@ def tracktext(full_path_name, position):
# Feather M4
# audio = audiobusio.I2SOut(bit_clock=board.D1, word_select=board.D10, data=board.D11)
mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
- bits_per_sample=16, samples_signed=True)
+ bits_per_sample=16, samples_signed=True, buffer_size=32768)
mixer.voice[0].level = 0.15
# Colors
@@ -97,7 +97,7 @@ def tracktext(full_path_name, position):
# display
main_display_group = displayio.Group() # everything goes in main group
-display.show(main_display_group) # show main group (clears screen, too)
+display.root_group = main_display_group # show main group (clears screen, too)
# background bitmap w OnDiskBitmap
tape_bitmap = displayio.OnDiskBitmap(open("mp3_tape.bmp", "rb"))
diff --git a/Weather_Display_Matrix/openweather_graphics.py b/Weather_Display_Matrix/openweather_graphics.py
index 290662967..fa35e4f63 100644
--- a/Weather_Display_Matrix/openweather_graphics.py
+++ b/Weather_Display_Matrix/openweather_graphics.py
@@ -58,7 +58,7 @@ def __init__(
# bg_sprite = displayio.TileGrid(background, pixel_shader=background.pixel_shader)
splash.append(bg_sprite)
- display.show(splash)
+ display.root_group = splash
self.root_group = displayio.Group()
self.root_group.append(self)
@@ -155,7 +155,7 @@ def display_weather(self, weather):
else:
self.wind_text.text = "%d mph" % wind
- self.display.show(self.root_group)
+ self.display.root_group = self.root_group
def set_icon(self, icon_name):
"""Use icon_name to get the position of the sprite and update
diff --git a/Weather_Wise_Umbrella_Stand/code.py b/Weather_Wise_Umbrella_Stand/code.py
new file mode 100644
index 000000000..fb890208a
--- /dev/null
+++ b/Weather_Wise_Umbrella_Stand/code.py
@@ -0,0 +1,127 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import os
+import ssl
+import time
+import microcontroller
+import board
+import wifi
+import socketpool
+import adafruit_requests
+import neopixel
+from adafruit_ticks import ticks_ms, ticks_add, ticks_diff
+from adafruit_io.adafruit_io import IO_HTTP
+
+# latitude
+lat = 38.58
+# longitude
+long = -121.49
+# hours in 24 hour time that the pixels should be off
+hours_off = (0, 6)
+# color of the pixels when rain is expected
+PIXELS_COLOR = (0, 0, 255)
+
+# neopixel setup
+NUMPIXELS = 30 # number of neopixels
+BRIGHTNESS = 0.5 # A number between 0.0 and 1.0, where 0.0 is off, and 1.0 is max.
+PIN = board.GP0
+
+pixels = neopixel.NeoPixel(PIN, NUMPIXELS, brightness=BRIGHTNESS, auto_write=False)
+
+# turn on NeoPixels on boot to check wiring
+pixels.fill(PIXELS_COLOR)
+pixels.show()
+
+# API request to open-meteo
+weather_url = "https://api.open-meteo.com/v1/forecast?"
+# pass latitude and longitude
+# will return sunrise and sunset times
+weather_url += "latitude=%d&longitude=%d&timezone=auto&hourly=rain&forecast_days=1" % (lat, long)
+
+# connect to SSID
+wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD'))
+
+pool = socketpool.SocketPool(wifi.radio)
+requests = adafruit_requests.Session(pool, ssl.create_default_context())
+
+pool = socketpool.SocketPool(wifi.radio)
+
+# adafruit IO info
+aio_username = os.getenv('aio_username')
+aio_key = os.getenv('aio_key')
+
+# io HTTP for getting the time from the internet
+io = IO_HTTP(aio_username, aio_key, requests)
+
+def reset_on_error(delay, error):
+ print("Error:\n", str(error))
+ print("Resetting microcontroller in %d seconds" % delay)
+ time.sleep(delay)
+ microcontroller.reset()
+
+# function for making http requests with try/except
+def get_request(tries, ping):
+ for i in range(tries):
+ try:
+ n = ping
+ except Exception as error:
+ print(error)
+ time.sleep(10)
+ if i < tries - 1:
+ continue
+ raise
+ break
+ return n
+
+# pylint: disable=broad-except
+# function to make a request to open-meteo & time from IO
+def rain_check():
+ # gets current time
+ now = get_request(5, io.receive_time())
+ h = now.tm_hour
+ time.sleep(1)
+ # make the API request
+ weather_call = get_request(5, requests.get(weather_url))
+ # packs the response into a JSON
+ response_as_json = weather_call.json()
+ # gets rain forecast
+ _chance = response_as_json['hourly']['rain']
+ return h, _chance
+
+# ticks time tracker
+clock = ticks_ms()
+
+# tracker for initial start-up state
+first_run = True
+
+# 15 minutes in milliseconds
+time_check = 900000
+
+while True:
+ try:
+ # every 15 minutes...
+ if first_run or ticks_diff(ticks_ms(), clock) > time_check:
+ print("pinging Open-Meteo")
+ hour, rain_chance = rain_check()
+ print("Rain expected: %.2f mm" % rain_chance[hour])
+ if hour in hours_off:
+ print("sleeping, please don't tell me it's raining")
+ color = (0, 0, 0)
+ else:
+ # if rain is expected. turn pixels blue
+ if rain_chance[hour] > 0:
+ print("tut tut, looks like rain")
+ color = PIXELS_COLOR
+ # otherwise turn pixels off
+ else:
+ print("no rain expected")
+ color = (0, 0, 0)
+ if first_run:
+ first_run = False
+ pixels.fill(color)
+ pixels.show()
+ # reset clock
+ clock = ticks_add(clock, time_check)
+ except Exception as e:
+ reset_on_error(10, e)
diff --git a/Web_Workflow_Quickstart/env.py b/Web_Workflow_Quickstart/env.py
index bba64ca85..ca2fb5463 100755
--- a/Web_Workflow_Quickstart/env.py
+++ b/Web_Workflow_Quickstart/env.py
@@ -6,79 +6,87 @@
import storage
import microcontroller
-# Get all files in the format of .env.xxxxxxxxxx
-def enumerate_env_files():
+SETTINGS_FOLDER = "/"
+
+# Get all files in the format of xxxxxxxxxx.toml except settings.toml
+def enumerate_toml_files():
found_files = []
- all_files = os.listdir("/")
+ all_files = os.listdir(SETTINGS_FOLDER)
for current_file in all_files:
- if current_file[:4] == ".env" and len(current_file) > 4:
- found_files.append(current_file)
+ if (
+ not current_file.startswith("._")
+ and current_file.endswith(".toml")
+ and current_file != "settings.toml"
+ ):
+ found_files.append(SETTINGS_FOLDER + current_file)
return found_files
-# Compare .env to enumerated env files
-def get_current_env_file(enumerated_files):
- with open(".env") as env:
- env_lines = env.readlines()
- for env_file in enumerated_files:
- with open(env_file) as f:
+# Compare settings.toml to enumerated toml files
+def get_current_toml_file(enumerated_files):
+ with open("settings.toml") as settings:
+ settings_lines = settings.readlines()
+ for toml_file in enumerated_files:
+ with open(toml_file) as f:
lines = f.readlines()
- if len(env_lines) != len(lines):
+ if len(settings_lines) != len(lines):
continue
file_may_match = True
- for line_no, env_line in enumerate(env_lines):
- if env_line != lines[line_no]:
+ for line_no, settings_line in enumerate(settings_lines):
+ if settings_line != lines[line_no]:
file_may_match = False
break
if not file_may_match:
continue
- return env_file
+ return toml_file
return None
-# Erase .env then write the contents of the new env file
-def change_env_file(env_file):
+# Erase settings.toml then write the contents of the new settings.toml file
+def change_toml_file(toml_file):
try:
- storage.remount("/", False)
- open(".env", "w").close()
- with open(".env", "w") as env, open(env_file) as f:
+ storage.remount("/", readonly=False)
+ with open("settings.toml", "w") as settings:
+ settings.write("")
+ with open("settings.toml", "w") as settings, open(toml_file) as f:
for line in f.readlines():
- env.write(line)
- env.close()
+ settings.write(line)
print("Done. Hard resetting board...")
microcontroller.reset()
except RuntimeError:
print("You can't change the env file with this script while USB is mounted")
-# Return a prettier name than the env file
-def pretty_name(env_file):
- name = env_file[5:]
+# Return a prettier name than the toml filename
+def pretty_name(toml_file):
+ name = toml_file.rsplit("/", 1)[1]
+ name = name[:-5]
name = name[0].upper() + name[1:]
- return f"{name} .env file"
+ return f"{name} toml file"
+
-env_files = enumerate_env_files()
+toml_files = enumerate_toml_files()
-if len(env_files) < 2:
- print("You need to have at least 2 env files to change")
+if len(toml_files) < 2:
+ print("You need to have at least 2 .toml files to change")
-result = get_current_env_file(env_files)
+result = get_current_toml_file(toml_files)
if result:
- env_files.remove(result)
-print("WARNING: This will overwrite all of your current .env file settings.")
-if len(env_files) == 1:
- answer = input(f"Change to {pretty_name(env_files[0])}? ")
+ toml_files.remove(result)
+print("WARNING: This will overwrite all of your current settings.toml file settings.")
+if len(toml_files) == 1:
+ answer = input(f"Change to {pretty_name(toml_files[0])}? ")
answer = answer.lower()
if answer in ("y", "yes"):
- change_env_file(env_files[0])
+ change_toml_file(toml_files[0])
else:
valid_selection = False
while not valid_selection:
print("Select an option:")
- for index, file in enumerate(env_files):
+ for index, file in enumerate(toml_files):
print(f"{index + 1}: {pretty_name(file)}")
answer = input("Which option would you like? ")
- if answer.isdigit() and 0 < int(answer) <= len(env_files):
+ if answer.isdigit() and 0 < int(answer) <= len(toml_files):
valid_selection = True
- change_env_file(env_files[int(answer) - 1])
+ change_toml_file(toml_files[int(answer) - 1])
print(f"{answer} was an invalid selection.\n")
diff --git a/Webhook_Plant_Sensor/code.py b/Webhook_Plant_Sensor/code.py
index 1be85bb7f..438602e30 100644
--- a/Webhook_Plant_Sensor/code.py
+++ b/Webhook_Plant_Sensor/code.py
@@ -24,8 +24,9 @@
MIN = 500
# Set up moisture sensor with seesaw
-i2c_bus = board.I2C()
-seesaw = Seesaw(i2c_bus, addr=0x36)
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+seesaw = Seesaw(i2c, addr=0x36)
# Get wifi details and more from a secrets.py file
try:
diff --git a/White_Noise_Rocket/Enceladus_Hiss_NASA.mp3 b/White_Noise_Rocket/Enceladus_Hiss_NASA.mp3
new file mode 100644
index 000000000..4870db340
Binary files /dev/null and b/White_Noise_Rocket/Enceladus_Hiss_NASA.mp3 differ
diff --git a/White_Noise_Rocket/code.py b/White_Noise_Rocket/code.py
new file mode 100644
index 000000000..41dc0054a
--- /dev/null
+++ b/White_Noise_Rocket/code.py
@@ -0,0 +1,148 @@
+# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import time
+import board
+import digitalio
+import audiomixer
+import audiomp3
+from audiopwmio import PWMAudioOut as AudioOut
+from adafruit_seesaw import seesaw, rotaryio, digitalio as seesaw_io, neopixel as seesaw_neopixel
+from adafruit_led_animation.animation.pulse import Pulse
+import neopixel
+
+# wait a little bit so USB can stabilize and not glitch audio
+time.sleep(3)
+
+# enable propmaker speaker output
+enable = digitalio.DigitalInOut(board.D10)
+enable.direction = digitalio.Direction.OUTPUT
+enable.value = True
+
+# enable fan pin
+fan_pin = digitalio.DigitalInOut(board.D11)
+fan_pin.direction = digitalio.Direction.OUTPUT
+fan_pin.value = True
+
+# speaker pin on the propmaker
+audio = AudioOut(board.A0)
+# create mixer instance
+mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
+ bits_per_sample=16, samples_signed=True)
+# attach mixer to audio playback
+audio.play(mixer)
+
+# open mp3 audio file
+audio_file = audiomp3.MP3Decoder(open("Enceladus_Hiss_NASA.mp3","rb"))
+# play audio file in first channel of mixer
+mixer.voice[0].play(audio_file, loop=True)
+# set mixer channel level
+mixer.voice[0].level = 0
+
+# propmaker neopixel pin
+pixel_pin = board.D5
+num_pixels = 35
+
+pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.3, auto_write=False)
+
+# define neopixel colors
+RED = (255, 0, 0)
+BLUE = (0, 0, 255)
+
+# pulse animation
+pulse = Pulse(pixels, speed=0.1, color=RED, period=3)
+
+# i2c setup for rp2040 feather stemma port
+i2c = board.STEMMA_I2C()
+
+# rotary encoder
+enc0 = seesaw.Seesaw(i2c, addr=0x36)
+encoder0 = rotaryio.IncrementalEncoder(enc0)
+last_position0 = None
+
+# encoder button
+enc0.pin_mode(24, enc0.INPUT_PULLUP)
+enc_button = seesaw_io.DigitalIO(enc0, 24)
+enc_button_state = False
+
+# encoder neopixel
+pixel0 = seesaw_neopixel.NeoPixel(enc0, 6, 1)
+pixel0.brightness = 0.2
+pixel0.fill(BLUE)
+
+# variables
+volume = 0 # volume
+pixel_level = 25 # pixel brightness for rings
+last_pos0 = 0 # position of the encoder
+ctrl_mode = 0 # control mode set with encoder
+
+while True:
+ # run neopixel animation
+ pulse.animate()
+ # get encoder position
+ pos0 = -encoder0.position
+
+ # if the encoder button is pressed..
+ if not enc_button.value and not enc_button_state:
+ enc_button_state = True
+ # switch between control modes
+ if ctrl_mode == 0:
+ ctrl_mode = 1
+ else:
+ ctrl_mode = 0
+ print("ctrl_mode is %d" % ctrl_mode)
+ # button debounce
+ if enc_button.value and enc_button_state:
+ enc_button_state = False
+ # if control mode is 0..
+ # control the volume of the white noise
+ if ctrl_mode == 0:
+ # encoder neopixel is blue
+ pixel0.fill(BLUE)
+ # if the encoder moves..
+ if pos0 != last_pos0:
+ # if you increase the encoder
+ # increase value by 0.1
+ # maxed out at 1
+ if pos0 > last_pos0:
+ volume = volume + 0.1
+ if volume > 1:
+ volume = 1
+ # if you decrease
+ # decrease value by 0.1
+ # minimum value of 0
+ if pos0 < last_pos0:
+ volume = volume - 0.1
+ if volume < 0:
+ volume = 0
+ print(volume)
+ # reset the position
+ last_pos0 = pos0
+ # if control mode is 1..
+ # control the brightness of the neopixel rings
+ # actually controlling the % of red, not brightness directly
+ if ctrl_mode == 1:
+ # set the encoder neopixel to red
+ pixel0.fill(RED)
+ # if you increase the encoder
+ # increase value by 10
+ # max out at 255
+ if pos0 != last_pos0:
+ if pos0 > last_pos0:
+ pixel_level = pixel_level + 10
+ if pixel_level > 255:
+ pixel_level = 255
+ # if you decrease the encoder
+ # decrease value by 10
+ # minimum level of 25
+ if pos0 < last_pos0:
+ pixel_level = pixel_level - 10
+ if pixel_level < 25:
+ pixel_level = 25
+ print(pixel_level)
+ # reset the position
+ last_pos0 = pos0
+ # set the neopixel ring color
+ pulse.color = (pixel_level, 0, 0)
+ # set the audio volume
+ mixer.voice[0].level = volume
diff --git a/Window_Skull_Matrix/code.py b/Window_Skull_Matrix/code.py
index 4b82a09a7..6ac936562 100644
--- a/Window_Skull_Matrix/code.py
+++ b/Window_Skull_Matrix/code.py
@@ -24,12 +24,16 @@
def jaw_wag():
for angle in range(90, 70, -2): # start angle, end angle, degree step size
jaw_servo.angle = angle
+ time.sleep(0.01)
for angle in range(70, 90, 2):
jaw_servo.angle = angle
+ time.sleep(0.01)
for angle in range(90, 110, 2):
jaw_servo.angle = angle
+ time.sleep(0.01)
for angle in range(110, 90, -2):
jaw_servo.angle = angle
+ time.sleep(0.01)
# TO LOAD DIFFERENT EYE DESIGNS: change the middle word here (between
@@ -76,8 +80,7 @@ def __init__(self, filename, transparent=None):
palette.make_transparent(closest_index)
elif isinstance(transparent, int):
palette.make_transparent(transparent)
- super(Sprite, self).__init__(bitmap, pixel_shader=palette)
- self.height = bitmap.height
+ super().__init__(bitmap, pixel_shader=palette, height=bitmap.height)
# ONE-TIME INITIALIZATION --------------------------------------------------
@@ -93,7 +96,7 @@ def __init__(self, filename, transparent=None):
SPRITES.append(Sprite(EYE_DATA["lower_lid_image"], EYE_DATA["transparent"]))
SPRITES.append(Sprite(EYE_DATA["upper_lid_image"], EYE_DATA["transparent"]))
SPRITES.append(Sprite(EYE_DATA["stencil_image"], EYE_DATA["transparent"]))
-DISPLAY.show(SPRITES)
+DISPLAY.root_group = SPRITES
EYE_CENTER = (
(EYE_DATA["eye_move_min"][0] + EYE_DATA["eye_move_max"][0]) # Pixel coords of eye
diff --git a/blahaj/code.py b/blahaj/code.py
index 6f5273151..ccbc1bcd1 100644
--- a/blahaj/code.py
+++ b/blahaj/code.py
@@ -11,8 +11,10 @@
import neopixel
from adafruit_led_animation.animation.rainbow import Rainbow
-rtc = adafruit_pcf8523.PCF8523(board.I2C())
-battery = LC709203F(board.I2C())
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
+rtc = adafruit_pcf8523.PCF8523(i2c)
+battery = LC709203F(i2c)
indicator = neopixel.NeoPixel(board.A1, 1)
LEDs = neopixel.NeoPixel(board.A2, 20)
diff --git a/library.deps b/library.deps
index 01224727e..562811304 100644
--- a/library.deps
+++ b/library.deps
@@ -1 +1 @@
-depends=Adafruit ILI9341, Adafruit BusIO, SD, Adafruit NeoPixel, Adafruit VS1053 Library, Adafruit BluefruitLE nRF51, Adafruit seesaw Library, Ethernet, Adafruit IO Arduino, FastLED, Adafruit LiquidCrystal, Adafruit SoftServo, TinyWireM, Adafruit AM radio library, WaveHC, Adafruit LED Backpack Library, MAX31850 OneWire, Adafruit VC0706 Serial Camera Library, RTClib, Adafruit SleepyDog Library, Adafruit Thermal Printer Library, Adafruit Zero I2S Library, Adafruit EPD, Adafruit SSD1351 library, Adafruit FONA Library, Adafruit Motor Shield V2 Library, Adafruit NeoMatrix, Adafruit Soundboard library, Adafruit Circuit Playground, ArduinoJson, Adafruit TCS34725, Adafruit Pixie, Adafruit GPS Library, TinyGPS, WiFi101, Adafruit DotStar, Adafruit Si7021 Library, Adafruit WS2801 Library, Mouse, Keyboard, Time, IRremote, Adafruit LSM9DS0 Library, Adafruit Arcada Library, MIDIUSB, PubSubClient, Adafruit LIS2MDL, Adafruit NeoPXL8, Adafruit MCP23017 Arduino Library, Adafruit MLX90640, LiquidCrystal, Adafruit NeoTrellis M4 Library, RGB matrix Panel, Adafruit MLX90614 Library, Adafruit RGB LCD Shield Library, MAX6675 library, Adafruit MP3, Adafruit Keypad, Adafruit Arcada GifDecoder, Keypad, Neosegment, Encoder, Adafruit TiCoServo, Adafruit Trellis Library, FauxmoESP, Adafruit LSM303 Accel, Adafruit LSM303DLH Mag, Adafruit LSM303DLHC, CapacitiveSensor, Adafruit Zero PDM Library, Adafruit DMA neopixel library, elapsedMillis, DST RTC, Adafruit SHARP Memory Display, Adafruit SPIFlash, BSEC Software Library, WiiChuck, Adafruit DPS310, Adafruit AHTX0, RotaryEncoder, Adafruit MCP9808 Library, LSM303, Adafruit Protomatter, Adafruit IS31FL3741 Library, Sensirion I2C SCD4x, Adafruit TestBed, Bounce2, Adafruit AHRS, Adafruit DRV2605 Library
+depends=Adafruit ILI9341, Adafruit BusIO, SD, Adafruit NeoPixel, Adafruit VS1053 Library, Adafruit BluefruitLE nRF51, Adafruit seesaw Library, Ethernet, Adafruit IO Arduino, FastLED, Adafruit LiquidCrystal, Adafruit SoftServo, TinyWireM, Adafruit AM radio library, WaveHC, Adafruit LED Backpack Library, MAX31850 OneWire, Adafruit VC0706 Serial Camera Library, RTClib, Adafruit SleepyDog Library, Adafruit Thermal Printer Library, Adafruit Zero I2S Library, Adafruit EPD, Adafruit SSD1351 library, Adafruit FONA Library, Adafruit Motor Shield V2 Library, Adafruit NeoMatrix, Adafruit Soundboard library, Adafruit Circuit Playground, ArduinoJson, Adafruit TCS34725, Adafruit Pixie, Adafruit GPS Library, TinyGPS, WiFi101, Adafruit DotStar, Adafruit Si7021 Library, Adafruit WS2801 Library, Mouse, Keyboard, Time, IRremote, Adafruit LSM9DS0 Library, Adafruit Arcada Library, MIDIUSB, PubSubClient, Adafruit LIS2MDL, Adafruit NeoPXL8, Adafruit MCP23017 Arduino Library, Adafruit MLX90640, LiquidCrystal, Adafruit NeoTrellis M4 Library, RGB matrix Panel, Adafruit MLX90614 Library, Adafruit RGB LCD Shield Library, MAX6675 library, Adafruit MP3, Adafruit Keypad, Adafruit Arcada GifDecoder, Keypad, Neosegment, Encoder, Adafruit TiCoServo, Adafruit Trellis Library, FauxmoESP, Adafruit LSM303 Accel, Adafruit LSM303DLH Mag, Adafruit LSM303DLHC, CapacitiveSensor, Adafruit Zero PDM Library, Adafruit DMA neopixel library, elapsedMillis, DST RTC, Adafruit SHARP Memory Display, Adafruit SPIFlash, BSEC Software Library, WiiChuck, Adafruit DPS310, Adafruit AHTX0, RotaryEncoder, Adafruit MCP9808 Library, LSM303, Adafruit Protomatter, Adafruit IS31FL3741 Library, Sensirion I2C SCD4x, Adafruit TestBed, Bounce2, Adafruit AHRS, Adafruit DRV2605 Library, STM32duino VL53L4CD, PicoDVI - Adafruit Fork, Adafruit MMA8451 Library, Adafruit TSC2007, GFX Library for Arduino, Adafruit PyCamera Library
diff --git a/literary-clock/code.py b/literary-clock/code.py
index 3cf149e19..57ce1bcde 100644
--- a/literary-clock/code.py
+++ b/literary-clock/code.py
@@ -27,7 +27,7 @@
display = board.DISPLAY
splash = displayio.Group()
-display.show(splash)
+display.root_group = splash
arial = bitmap_font.load_font("fonts/Arial-12.pcf")
bold = bitmap_font.load_font("fonts/Arial-Bold-12.pcf")
diff --git a/microSD_BFF_Examples/ReadWriteQT/.qtpy_esp32s2.test.only b/microSD_BFF_Examples/ReadWriteQT/.qtpy_esp32s2.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/microSD_BFF_Examples/ReadWriteQT/ReadWriteQT.ino b/microSD_BFF_Examples/ReadWriteQT/ReadWriteQT.ino
new file mode 100644
index 000000000..f2feb6da0
--- /dev/null
+++ b/microSD_BFF_Examples/ReadWriteQT/ReadWriteQT.ino
@@ -0,0 +1,89 @@
+// SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+/*
+ SD card read/write
+
+ This example shows how to read and write data to and from an SD card file
+ The circuit:
+ * SD card attached to SPI bus as follows:
+ ** MOSI - pin 11
+ ** MISO - pin 12
+ ** CLK - pin 13
+
+ created Nov 2010
+ by David A. Mellis
+ modified 9 Apr 2012
+ by Tom Igoe
+ modified 14 Feb 2023
+ by Liz Clark
+
+ This example code is in the public domain.
+
+ */
+
+#include
+//#include
+#include "SdFat.h"
+SdFat SD;
+
+#define SD_FAT_TYPE 3
+
+// default CS pin is TX for microSD BFF
+#define SD_CS_PIN TX
+
+File myFile;
+
+void setup() {
+ // Open serial communications and wait for port to open:
+ Serial.begin(115200);
+ while (!Serial) {
+ ; // wait for serial port to connect. Needed for native USB port only
+ }
+
+
+ Serial.print("Initializing SD card...");
+
+ if (!SD.begin(SD_CS_PIN)) {
+ Serial.println("initialization failed!");
+ return;
+ }
+ Serial.println("initialization done.");
+
+ // open the file. note that only one file can be open at a time,
+ // so you have to close this one before opening another.
+ myFile = SD.open("test.txt", FILE_WRITE);
+
+ // if the file opened okay, write to it:
+ if (myFile) {
+ Serial.print("Writing to test.txt...");
+ myFile.println("testing 1, 2, 3.");
+ myFile.println("hello bff!");
+ // close the file:
+ myFile.close();
+ Serial.println("done.");
+ } else {
+ // if the file didn't open, print an error:
+ Serial.println("error opening test.txt");
+ }
+
+ // re-open the file for reading:
+ myFile = SD.open("test.txt");
+ if (myFile) {
+ Serial.println("test.txt:");
+
+ // read from the file until there's nothing else in it:
+ while (myFile.available()) {
+ Serial.write(myFile.read());
+ }
+ // close the file:
+ myFile.close();
+ } else {
+ // if the file didn't open, print an error:
+ Serial.println("error opening test.txt");
+ }
+}
+
+void loop() {
+ // nothing happens after setup
+}
diff --git a/microSD_BFF_Examples/read_sd/code.py b/microSD_BFF_Examples/read_sd/code.py
new file mode 100644
index 000000000..b1cf0b75e
--- /dev/null
+++ b/microSD_BFF_Examples/read_sd/code.py
@@ -0,0 +1,53 @@
+# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
+# SPDX-License-Identifier: MIT
+
+import os
+import busio
+import digitalio
+import board
+import storage
+import adafruit_sdcard
+
+# The SD_CS pin is the chip select line.
+
+SD_CS = board.TX # setup for microSD BFF
+
+# Connect to the card and mount the filesystem.
+spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(spi, cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+# This helper function will print the contents of the SD
+def print_directory(path, tabs=0):
+ for file in os.listdir(path):
+ stats = os.stat(path + "/" + file)
+ filesize = stats[6]
+ isdir = stats[0] & 0x4000
+
+ if filesize < 1000:
+ sizestr = str(filesize) + " bytes"
+ elif filesize < 1000000:
+ sizestr = "%0.1f KB" % (filesize / 1000)
+ else:
+ sizestr = "%0.1f MB" % (filesize / 1000000)
+
+ prettyprintname = ""
+ for _ in range(tabs):
+ prettyprintname += " "
+ prettyprintname += file
+ if isdir:
+ prettyprintname += "/"
+ print("{0:<40} Size: {1:>10}".format(prettyprintname, sizestr))
+
+ # recursively print directory contents
+ if isdir:
+ print_directory(path + "/" + file, tabs + 1)
+
+
+print("Files on filesystem:")
+print("====================")
+print_directory("/sd")
diff --git a/microSD_BFF_Examples/write_to_sd/code.py b/microSD_BFF_Examples/write_to_sd/code.py
new file mode 100644
index 000000000..3f0e4f7df
--- /dev/null
+++ b/microSD_BFF_Examples/write_to_sd/code.py
@@ -0,0 +1,34 @@
+# SPDX-FileCopyrightText: 2017 Limor Fried for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+
+import time
+import adafruit_sdcard
+import board
+import busio
+import digitalio
+import microcontroller
+import storage
+
+# default CS pin for the microSD bff is TX
+SD_CS = board.TX
+
+# Connect to the card and mount the filesystem.
+spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
+cs = digitalio.DigitalInOut(SD_CS)
+sdcard = adafruit_sdcard.SDCard(spi, cs)
+vfs = storage.VfsFat(sdcard)
+storage.mount(vfs, "/sd")
+
+# Use the filesystem as normal! Our files are under /sd
+
+print("Logging temperature to filesystem")
+# append to the file!
+while True:
+ # open file for append
+ with open("/sd/temperature.txt", "a") as f:
+ t = microcontroller.cpu.temperature
+ print("Temperature = %0.1f" % t)
+ f.write("%0.1f\n" % t)
+ # file is saved
+ time.sleep(1)
diff --git a/pylint_check.sh b/pylint_check.sh
index 119742c55..44b7643e0 100755
--- a/pylint_check.sh
+++ b/pylint_check.sh
@@ -1,9 +1,13 @@
#!/bin/bash
-PYLINT="`type -p pylint3 2>/dev/null || type -p pylint`"
+SOURCE_LOCATION="$(dirname "$0")"
+PYLINT="`type -p pylint-learn 2>/dev/null || type -p pylint3 2>/dev/null || type -p pylint`"
echo "Using pylint bin at $PYLINT"
+PYLINTRC=$SOURCE_LOCATION/.pylintrc
# Use * as the default argument to avoid descending into hidden directories like .git
+# don't use advanced functions of find without verifying they are present in
+# the archaic default version on macos
function find_pyfiles() {
if [ $# -eq 0 ]; then set -- *; fi
for f in $(find "$@" -type f -iname '*.py'); do
@@ -13,4 +17,4 @@ function find_pyfiles() {
done
}
-find_pyfiles "$@" | xargs "$PYLINT"
+find_pyfiles "$@" | xargs "$PYLINT" --rcfile "$PYLINTRC"
diff --git a/rfm-poi/.feather_rp2040_tinyusb.test.only b/rfm-poi/.feather_rp2040_tinyusb.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/rfm-poi/bmp.cpp b/rfm-poi/bmp.cpp
new file mode 100644
index 000000000..290140a07
--- /dev/null
+++ b/rfm-poi/bmp.cpp
@@ -0,0 +1,191 @@
+// SPDX-FileCopyrightText: 2023 Phillip Burgess for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// BMP-reading code. Much of this is adapted from the Adafruit_ImageReader
+// library, which is extremely LCD-display-centric and turned out to be
+// neither workable nor easily extensible into what was needed here. That's
+// okay. For now, I just pulled in minimal parts of that code, with changes
+// as needed for this project (and dropping some portability considerations).
+
+#include
+
+// Barebones query pixel height of BMP image file. NOT universally portable;
+// does some rude straight-to-var little-endian reads.
+// Param: Pointer to FAT volume.
+// Param: Absolute filename.
+// Param: Pointer to int32_t for height result.
+// Returns: true on success, false on ANY error, does not distinguish
+// (file not found, no BMP signature, etc.).
+bool bmpHeight(FatVolume *fs, char *filename, int32_t *height) {
+ File32 file;
+ bool status = false; // Assume error until success
+ if ((file = fs->open(filename, FILE_READ))) {
+ uint16_t sig;
+ file.read(&sig, sizeof sig); // Little-endian straight to var
+ if (sig == 0x4D42) { // BMP signature?
+ file.seekCur(20); // Skip file size, width, etc.
+ file.read(height, sizeof(int32_t)); // Little-endian straight to var
+ if (*height < 0) *height *= -1; // Handle top-to-bottom variant
+ status = true; // YAY
+ }
+ file.close();
+ }
+ return status;
+}
+
+// Barebones BMP read into RAM. ALL images regardless of BMP format are
+// converted as needed into a DotStar-ready 24-bit-per-pixel format. Again
+// this is NOT universally portable; rude little-endian reads.
+// Param: Pointer to FAT volume.
+// Param: Absolute filename.
+// Param: Pointer to uint8_t for storing result (destination buffer
+// is assumed allocated and cleared, not performed here).
+// Param: Max width to clip or pad to (DotStar strip length).
+// Param: Red, green, blue byte offsets (0-2) in dest buffer.
+// Param: Brightness (0.0 to 255.0).
+// Param: Gamma (1.0 = linear, 2.6 = typical LED curve). Gamma is a lossy
+// operation; might prefer to pass 1.0 and do adjustment on source
+// image instead w/dithering, or perhaps future poi code could do
+// this on-the-fly. But for now, on load.
+// Returns: true on success, false on ANY error, does not distinguish
+// (file not found, no BMP signature, etc.).
+bool loadBMP(FatVolume *fs, char *filename, uint8_t *dest,
+ const uint16_t dest_width, const uint8_t rOffset,
+ const uint8_t gOffset, const uint8_t bOffset,
+ const float brightness, const float gamma) {
+ File32 file;
+ bool status = false; // Assume error until success
+ if ((file = fs->open(filename, FILE_READ))) {
+ uint16_t sig;
+ file.read(&sig, sizeof sig); // Little-endian straight to var
+ if (sig == 0x4D42) { // BMP signature?
+ uint32_t offset; // Start of image data
+ uint32_t header_size; // Indicates BMP version
+ int32_t bmp_width, bmp_height; // BMP width & height in pixels
+ boolean flip = true; // BMP is stored bottom-to-top
+ uint32_t compression = 0; // BMP compression mode
+ uint32_t colors = 0; // Number of colors in palette
+ uint16_t planes;
+ uint16_t depth;
+
+ file.seekCur(8); // Skip file size, creator bytes
+ file.read(&offset , sizeof offset);
+ file.read(&header_size, sizeof header_size); // DIB header...
+ file.read(&bmp_width , sizeof bmp_width);
+ file.read(&bmp_height , sizeof bmp_height);
+ // If bmpHeight is negative, image is in top-down order.
+ // This is not canon but has been observed in the wild.
+ if (bmp_height < 0) {
+ bmp_height *= -1;
+ flip = false;
+ }
+ file.read(&planes, sizeof planes);
+ file.read(&depth , sizeof depth);
+ // Compression mode is present in later BMP versions (default = none)
+ if (header_size > 12) {
+ file.read(&compression, sizeof compression);
+ file.seekCur(12); // Skip raw bitmap data size, etc.
+ file.read(&colors, sizeof colors); // # of colors in palette; 0 = 2^depth
+ file.seekCur(4); // Skip # of colors used
+ // File position should now be at start of palette (if present)
+ }
+
+ if ((planes == 1) && (compression == 0)) { // Only uncompressed is handled
+ uint8_t palette[3][256]; // Rude but code's easier than malloc check
+ uint8_t b; // Byte-holding var used in 1-8 bit modes
+
+ if (depth < 16) { // Lower depths include a color palette
+ if (!colors) colors = 1 << depth;
+ for (uint16_t i = 0; i < colors; i++) {
+ uint32_t rgb;
+ file.read(&rgb, sizeof rgb);
+ palette[rOffset][i] = (uint8_t)(pow((float)((rgb >> 16) & 0xFF) / 255.0, gamma) * brightness + 0.5);
+ palette[gOffset][i] = (uint8_t)(pow((float)((rgb >> 8) & 0xFF) / 255.0, gamma) * brightness + 0.5);
+ palette[bOffset][i] = (uint8_t)(pow((float)( rgb & 0xFF) / 255.0, gamma) * brightness + 0.5);
+ }
+ } else {
+ // But HEY, as long as we have that palette array taking up space
+ // on the heap...use it to pre-compute a brightness/gamma table,
+ // saves a TON of floating-point math on every pixel later.
+ for (uint16_t i = 0; i < 256; i++) {
+ palette[0][i] = (uint8_t)(pow((float)i / 255.0, gamma) * brightness + 0.5);
+ }
+ }
+
+ // BMP rows are padded (if needed) to 4-byte boundary,
+ // width loaded is cropped if needed to DotStar strand length.
+ uint32_t row_size = ((depth * bmp_width + 31) / 32) * 4;
+ int load_width = min(bmp_width, dest_width);
+
+ for (int row = 0; row < bmp_height; row++) { // For each scanline...
+
+ file.seekSet(offset + row_size * (flip ? bmp_height - 1 - row : row));
+ uint8_t *d2 = dest + row * dest_width * 3;
+
+ switch (depth) {
+ case 32:
+ for (int col = 0; col < load_width; col++, d2 += 3) {
+ uint32_t rgba;
+ file.read(&rgba, sizeof rgba);
+ d2[rOffset] = palette[0][(rgba >> 16) & 0xFF]; // palette[0] is
+ d2[gOffset] = palette[0][(rgba >> 8) & 0xFF]; // brightness/gamma
+ d2[bOffset] = palette[0][ rgba & 0xFF]; // adjustment table
+ }
+ break;
+ case 24:
+ for (int col = 0; col < load_width; col++, d2 += 3) {
+ d2[bOffset] = palette[0][file.read()]; // palette[0] is
+ d2[gOffset] = palette[0][file.read()]; // brightness/gamma
+ d2[rOffset] = palette[0][file.read()]; // adjustment table
+ }
+ break;
+ case 16:
+ // Not currently supported but might be nice to have.
+ // Will require dissecting DIB header bitfields.
+ break;
+ case 8:
+ for (int col = 0; col < load_width; col++, d2 += 3) {
+ b = file.read();
+ d2[0] = palette[0][b];
+ d2[1] = palette[1][b];
+ d2[2] = palette[2][b];
+ }
+ break;
+ case 4:
+ for (int col = 0; col < load_width; col++, d2 += 3) {
+ uint8_t n; // 4-bit pixel value
+ if (!(col & 1)) {
+ b = file.read();
+ n = b >> 4;
+ } else {
+ n = b & 0xF;
+ }
+ d2[0] = palette[0][n];
+ d2[1] = palette[1][n];
+ d2[2] = palette[2][n];
+ }
+ break;
+ // A 2-bit BMP mode exists but is SUPER ESOTERIC (apparently
+ // a Windows CE thing), not supported here (nor in Photoshop).
+ case 2:
+ break;
+ case 1:
+ for (int col = 0; col < load_width; col++, d2 += 3) {
+ if (!(col & 7)) b = file.read();
+ uint8_t n = (b >> (7 - (col & 7))) & 1;
+ d2[0] = palette[0][n];
+ d2[1] = palette[1][n];
+ d2[2] = palette[2][n];
+ }
+ break;
+ } // end switch
+
+ } // end row
+ status = true; // YAY
+ } // end planes/compression check
+ } // end signature
+ file.close();
+ } // end file open
+ return status;
+}
diff --git a/rfm-poi/rfm-poi.ino b/rfm-poi/rfm-poi.ino
new file mode 100644
index 000000000..e8b841168
--- /dev/null
+++ b/rfm-poi/rfm-poi.ino
@@ -0,0 +1,356 @@
+// SPDX-FileCopyrightText: 2023 Phillip Burgess for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+/*
+DotStar POV poi using Adafruit Feather RP2040 RFM. Unlike prior POV poi
+projects, rather than compile in graphics in arrays, they're stored in BMP
+format on the board's CIRCUITPY flash filesystem.
+
+Run-time configuration is stored in CIRCUITPY/poi.cfg and resembles:
+
+{
+ "dotstar_length" : 36,
+ "dotstar_data" : 3,
+ "dotstar_clock" : 2,
+ "dotstar_order" : "BGR",
+ "brightness" : 255,
+ "gamma" : 2.6,
+ "path" : "images",
+ "program" : [[ "one.bmp", 5.0, 5.0 ],
+ [ "two.bmp", 10.0, 3.0 ],
+ [ "three.bmp", 1.0, 3.0 ]]
+}
+
+Be warned that JSON is notoriously picky, and even a single missing or
+excess comma will stop everything in its tracks (the format isn't really
+designed for human editing, but there's a robust, ready-made JSON library
+that saves us a TON of would-be config-parsing code).
+*/
+
+
+//34567890123456789012345678901234567890123456789012345678901234567890123456
+
+
+
+#include
+#include
+#include
+#include
+
+// Extern functions in bmp.cpp:
+extern bool bmpHeight(FatVolume *fs, char *filename, int32_t *height);
+extern bool loadBMP(FatVolume *fs, char *filename, uint8_t *dest,
+ const uint16_t dest_width, const uint8_t rOffset,
+ const uint8_t gOffset, const uint8_t bOffset,
+ const float brightness, const float gamma);
+
+// Some general global stuff -----------------------------------------------
+FatVolume *fs; // CIRCUITPY filesystem
+volatile bool core1_wait = true; // For syncing RP2040's two cores
+int error_code = 0; // >= 1 on startup error
+DeserializationError json_error; // For JSON-specific errors
+struct {
+ char *msg; // Error message to Serial console
+ uint16_t ms; // LED blink rate, milliseconds
+} err[] = {
+ "poi.cfg syntax error" , 250, // json_error will be set
+ "poi.cfg not found" , 250,
+ "Can't access CIRCUITPY drive", 100,
+ "Radio init error" , 500,
+};
+
+// DotStar- and image-related stuff ----------------------------------------
+typedef struct { // Per-image structure:
+ uint32_t usec_pass; // Time for each pass of image, microseconds
+ uint32_t total_usec; // Total display time of image, microseconds
+ int32_t height; // Image height in pixels
+ union {
+ char name[30]; // BMP filename (within path), not used after load
+ uint8_t *data; // -> first scanline, not used before load
+ };
+} img;
+Adafruit_DotStar *strip = NULL; // DotStar alloc'd after config
+uint16_t dotstar_length = 36; // Default = 1/4m of 144 strip
+int8_t dotstar_clock = 2; // " = SDA pin on Feather RP2040
+int8_t dotstar_data = 3; // " = SCL pin on Feather RP2040
+uint8_t dotstar_order = DOTSTAR_BRG;
+float dotstar_brightness = 255.0;
+float dotstar_gamma = 2.6;
+uint8_t rOffset = 1;
+uint8_t gOffset = 2;
+uint8_t bOffset = 0;
+char path[50] = ""; // Path to images ("" = root)
+uint16_t num_images = 1; // Image count (1 for "off" image)
+uint32_t total_height = 1; // Sum of image heights (1 for "off")
+img *imglist = NULL; // Image array (allocated before load)
+uint8_t *linebuf = NULL; // Data for ALL images
+volatile uint16_t imgnum = 0;
+volatile uint32_t last_change = 0;
+// linebuf is dynamically allocated after config read to contain ALL POV
+// data used in performance; images are NOT loaded dynamically as needed.
+// This is to help ensure quick program change and keep all the poi in
+// better sync. Free RAM on RP2040 after code's needs is about 250K.
+// At 3 bytes/pixel, a 36-pixel poi can hold a bit over 2,000 lines.
+
+// Radio-related stuff -----------------------------------------------------
+
+#define ENCRYPTKEY "sampleEncryptKey" // Use same 16 char on ALL nodes
+#define IS_RFM69HCW true // Set true if using RFM69HCW module
+#define RFM69_CS 16 // Chip-select pin
+#define RFM69_RST 17 // Radio reset pin
+#define RFM69_INT 21 // Interrupt pin
+#define NETWORKID 1
+#define NODEID 255
+#define INTERVAL 250000 // Broadcast interval, microseconds
+#define LATENCY 1000 // Encode, xmit, decode microseconds
+
+RH_RF69 *radio;
+bool sender = false; // Radio send vs receive
+uint32_t last_xmit = 0;
+
+// The PRIMARY CORE runs all the non-deterministic grunt work --
+// Filesystem/config init, talking to the radio and infrared,
+// keeping the CIRCUITPY filesystem alive.
+
+void setup() { // Core 0 start-up code
+
+ // Start the CIRCUITPY flash filesystem first. Very important!
+ fs = Adafruit_CPFS::begin();
+
+ Serial.begin(115200);
+ // while (!Serial);
+
+ if (fs) { // Filesystem OK?
+ StaticJsonDocument<1024> doc;
+ FatFile file;
+
+ // Open configuration file and attempt to decode JSON data within.
+ if ((file = fs->open("poi.cfg", FILE_READ))) {
+ json_error = deserializeJson(doc, file);
+ file.close();
+ if (!json_error) {
+ // Config is valid, override defaults in program variables...
+ dotstar_length = doc["dotstar_length"] | dotstar_length;
+ dotstar_clock = doc["dotstar_clock"] | dotstar_clock;
+ dotstar_data = doc["dotstar_data"] | dotstar_data;
+ dotstar_brightness = doc["brightness"] | dotstar_brightness;
+ dotstar_gamma = doc["gamma"] | dotstar_gamma;
+ JsonVariant v = doc["dotstar_order"];
+ if (v.is()) { // Present and is a string?
+ const struct {
+ const char *key; // String version of color order, e.g. "RGB"
+ uint8_t val; // Numeric version of same, e.g. DOTSTAR_RGB
+ uint8_t offset[3]; // Red, green, blue indices
+ } dict[] = {
+ "RGB", DOTSTAR_RGB, { 0, 1, 2 },
+ "RBG", DOTSTAR_RBG, { 0, 2, 1 },
+ "GRB", DOTSTAR_GRB, { 1, 0, 2 },
+ "GBR", DOTSTAR_GBR, { 2, 0, 1 },
+ "BRG", DOTSTAR_BRG, { 1, 2, 0 },
+ "BGR", DOTSTAR_BGR, { 2, 1, 0 },
+ };
+ for (uint8_t i=0; i< sizeof dict / sizeof dict[0]; i++) {
+ if (!strcasecmp(v, dict[i].key)) {
+ dotstar_order = dict[i].val;
+ rOffset = dict[i].offset[0];
+ gOffset = dict[i].offset[1];
+ bOffset = dict[i].offset[2];
+ break;
+ }
+ }
+ }
+
+ // Validate inputs; clip to ranges
+ rOffset = min(max(rOffset , 0 ), 2 );
+ gOffset = min(max(gOffset , 0 ), 2 );
+ bOffset = min(max(bOffset , 0 ), 2 );
+ dotstar_data = min(max(dotstar_data , 0 ), 29 );
+ dotstar_clock = min(max(dotstar_clock , 0 ), 29 );
+ dotstar_brightness = min(max(dotstar_brightness, 0.0), 255.0);
+
+ sender = doc["sender"] | sender; // true if xmit, false if recv
+
+ v = doc["path"];
+ if (v.is()) {
+ strncpy(path, v, sizeof path - 1);
+ path[sizeof path - 1] = 0;
+ // Strip trailing / if present
+ int n = strlen(path) - 1;
+ while ((n >= 0) && (path[n] == '/')) path[n--] = 0;
+ }
+
+ v = doc["program"];
+ if (v.is()) {
+ num_images += v.size();
+ if ((imglist = (img *)malloc(num_images * sizeof(img)))) {
+ for (int i=1; i() && (v2.size() == 3)) {
+ char filename[80];
+ strncpy(imglist[i].name, (char *)v2[0].as(), sizeof imglist[i].name);
+ imglist[i].name[sizeof imglist[i].name - 1] = 0;
+ float reps_sec = v2[1].as();
+ if (reps_sec > 0.0) {
+ imglist[i].usec_pass = (uint32_t)(1000000.0 / reps_sec);
+ } else {
+ imglist[i].usec_pass = 1;
+ }
+ imglist[i].total_usec = (uint32_t)(1000000.0 * fabs(v2[2].as()));
+ sprintf(filename, "%s/%s", path, imglist[i].name);
+ if (bmpHeight(fs, filename, &imglist[i].height))
+ total_height += imglist[i].height;
+ }
+ }
+ }
+ }
+ } else error_code = 1; // end JSON decode
+ } else error_code = 2; // end config file open
+ } else error_code = 3; // end filesys
+
+ // If Dotstar data and clock pins are on the same SPI instance,
+ // and form a valid TX/SCK pair...
+ if ((((dotstar_data / 8) & 1) == ((dotstar_clock / 8) & 1)) &&
+ ((dotstar_data & 3) == 3) && ((dotstar_clock & 3) == 2)) {
+ // Use hardware SPI for writing pixels. Most likely is spi0, NOT shared w/radio.
+ spi_inst_t *inst = ((dotstar_data / 8) & 1) ? spi1 : spi0;
+ SPIClassRP2040 *spi = new SPIClassRP2040(spi0, -1, -1, dotstar_clock, dotstar_data);
+ strip = new Adafruit_DotStar(dotstar_length, dotstar_order, (SPIClass *)spi);
+ } else { // Use bitbang for writing pixels (slower, but any 2 pins)
+ strip = new Adafruit_DotStar(dotstar_length, dotstar_data, dotstar_clock, dotstar_order);
+ }
+
+ // If no image alloc above, make a single "off" image instance:
+ if (!imglist) imglist = (img *)malloc(sizeof(img));
+
+ if ((linebuf = (uint8_t *)calloc(dotstar_length * total_height, 3))) {
+ uint8_t *dest = linebuf + dotstar_length * 3;
+ for (int i=1; ibegin();
+ core1_wait = false; // All initialized, core 1 can proceed
+ }
+
+ radio = new RH_RF69(RFM69_CS, RFM69_INT);
+
+ pinMode(LED_BUILTIN, OUTPUT);
+ digitalWrite(LED_BUILTIN, LOW);
+ pinMode(RFM69_RST, OUTPUT);
+ digitalWrite(RFM69_RST, LOW);
+
+ // Manual reset of radio
+ digitalWrite(RFM69_RST, HIGH);
+ delay(10);
+ digitalWrite(RFM69_RST, LOW);
+ delay(10);
+
+ // Initialize radio
+ if (radio) {
+ radio->init();
+ radio->setFrequency(915.0);
+ radio->setTxPower(14, true);
+ radio->setEncryptionKey((uint8_t *)ENCRYPTKEY);
+ } else error_code = 4;
+}
+
+uint8_t buf[RH_RF69_MAX_MESSAGE_LEN] __attribute__ ((aligned(4)));
+
+void loop() {
+ uint32_t now = micros();
+
+ if (error_code) {
+ digitalWrite(LED_BUILTIN, (now / (err[error_code - 1].ms * 1000)) & 1);
+ if ((now - last_change) >= 1000000) {
+ Serial.printf("ERROR: %s\r\n", err[error_code - 1].msg);
+ if (json_error) {
+ Serial.print("JSON error: ");
+ Serial.println(json_error.c_str());
+ }
+ last_change = now;
+ }
+ } else if (sender) {
+ bool xmit = false; // Will be set true if it's time to send
+ uint32_t elapsed = now - last_change;
+
+ if (elapsed >= imglist[imgnum].total_usec) {
+ elapsed -= imglist[imgnum].total_usec; // Partly into new image
+ if (++imgnum >= num_images) imgnum = 1;
+ last_change = now;
+ xmit = true;
+ } else if ((now - last_xmit) >= INTERVAL) {
+ xmit = true;
+ }
+ if (xmit) {
+ radio->waitPacketSent();
+ memcpy(&buf[0], &elapsed , 4);
+ memcpy(&buf[4], (void *)&imgnum , 2);
+ memcpy(&buf[6], &buf[0] , 6); // Rather than checksum, send data 2X
+ last_xmit = now;
+ radio->send((uint8_t *)buf, 12);
+ }
+ } else {
+ if (radio->waitAvailableTimeout(250)) {
+ uint8_t len;
+ if (radio->recv(buf, &len)) {
+ Serial.print("got reply: ");
+ Serial.println((char*)buf);
+ if ((len == 12) && !memcmp(&buf[0], &buf[6], 6)) {
+ uint32_t t = *(uint32_t *)(&buf[0]);
+ uint16_t n = *(uint16_t *)(&buf[4]);
+ if (n != imgnum) {
+ imgnum = n;
+ last_change = now - t - LATENCY;
+ } else {
+ // Compare last change time against
+ // our perception of elapsed time.
+ }
+ }
+ } else {
+ Serial.println("recv failed");
+ }
+ } else {
+ Serial.println("No reply, is rf69_server running?");
+ }
+ }
+}
+
+// The SECOND CORE is then FULLY DEDICATED to keeping the LEDs
+// continually refreshed, does not have to pause for other tasks.
+
+void setup1() {
+ while (core1_wait); // Wait for setup() to complete before going to loop1()
+}
+
+// TO DO: compensate for clock difference
+void loop1() {
+ // core1_wait won't release unless strip is non-NULL, this is OK...
+ uint32_t row = imglist[imgnum].height * ((micros() - last_change) % imglist[imgnum].usec_pass) / imglist[imgnum].usec_pass;
+ memcpy(strip->getPixels(), imglist[imgnum].data + row * dotstar_length * 3, dotstar_length * 3);
+ strip->show();
+}
diff --git a/runcpm-rp2040-dvi-usb/keyboard-copro/.feather_rp2040_tinyusb.test.only b/runcpm-rp2040-dvi-usb/keyboard-copro/.feather_rp2040_tinyusb.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/runcpm-rp2040-dvi-usb/keyboard-copro/keyboard-copro.ino b/runcpm-rp2040-dvi-usb/keyboard-copro/keyboard-copro.ino
new file mode 100644
index 000000000..1bfc7feb9
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/keyboard-copro/keyboard-copro.ino
@@ -0,0 +1,244 @@
+// SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+// pio-usb is required for rp2040 host
+#include "pio_usb.h"
+#include "Adafruit_TinyUSB.h"
+#include "pico/stdlib.h"
+
+// Pin D+ for host, D- = D+ + 1
+#ifndef PIN_USB_HOST_DP
+#define PIN_USB_HOST_DP 16
+#endif
+
+// Pin for enabling Host VBUS. comment out if not used
+#ifndef PIN_5V_EN
+#define PIN_5V_EN 18
+#endif
+
+#ifndef PIN_5V_EN_STATE
+#define PIN_5V_EN_STATE 1
+#endif
+
+// USB Host object
+Adafruit_USBH_Host USBHost;
+
+// Serial output for RunCPM
+SerialPIO pio_serial(1 /* RX of the sibling board */, SerialPIO::NOPIN);
+
+void setup() {
+}
+
+void loop() {
+}
+
+void setup1() {
+
+ // override tools menu CPU frequency setting
+ set_sys_clock_khz(120'000, true);
+
+#if 0
+ while ( !Serial ) delay(10); // wait for native usb
+ Serial.println("Core1 setup to run TinyUSB host with pio-usb");
+#endif
+
+#ifdef PIN_5V_EN
+ pinMode(PIN_5V_EN, OUTPUT);
+ digitalWrite(PIN_5V_EN, PIN_5V_EN_STATE);
+#endif
+
+ pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG;
+ pio_cfg.pin_dp = PIN_USB_HOST_DP;
+ USBHost.configure_pio_usb(1, &pio_cfg);
+
+ // run host stack on controller (rhport) 1
+ // Note: For rp2040 pico-pio-usb, calling USBHost.begin() on core1 will have most of the
+ // host bit-banging processing works done in core1 to free up core0 for other works
+ USBHost.begin(1);
+
+ // this `begin` is a void function, no way to check for failure!
+ pio_serial.begin(115200);
+}
+
+int old_ascii = -1;
+uint32_t repeat_timeout;
+// this matches Linux default of 500ms to first repeat, 1/20s thereafter
+const uint32_t default_repeat_time = 50;
+const uint32_t initial_repeat_time = 500;
+
+void send_ascii(uint8_t code, uint32_t repeat_time=default_repeat_time) {
+ old_ascii = code;
+ repeat_timeout = millis() + repeat_time;
+ if (code > 32 && code < 127) {
+ Serial.printf("'%c'\r\n", code);
+ } else {
+ Serial.printf("'\\x%02x'\r\n", code);
+ }
+ pio_serial.write(code);
+}
+
+void loop1()
+{
+ uint32_t now = millis();
+ uint32_t deadline = repeat_timeout - now;
+ if (old_ascii >= 0 && deadline > INT32_MAX) {
+ send_ascii(old_ascii);
+ deadline = repeat_timeout - now;
+ } else if (old_ascii < 0) {
+ deadline = UINT32_MAX;
+ }
+ tuh_task_ext(deadline, false);
+}
+
+// Invoked when device with hid interface is mounted
+// Report descriptor is also available for use.
+// tuh_hid_parse_report_descriptor() can be used to parse common/simple enough
+// descriptor. Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE,
+// it will be skipped therefore report_desc = NULL, desc_len = 0
+void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *desc_report, uint16_t desc_len) {
+ (void)desc_report;
+ (void)desc_len;
+ uint16_t vid, pid;
+ tuh_vid_pid_get(dev_addr, &vid, &pid);
+
+ Serial.printf("HID device address = %d, instance = %d is mounted\r\n", dev_addr, instance);
+ Serial.printf("VID = %04x, PID = %04x\r\n", vid, pid);
+
+ uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance);
+ if (itf_protocol == HID_ITF_PROTOCOL_KEYBOARD) {
+ Serial.printf("HID Keyboard\r\n");
+ if (!tuh_hid_receive_report(dev_addr, instance)) {
+ Serial.printf("Error: cannot request to receive report\r\n");
+ }
+ }
+}
+
+// Invoked when device with hid interface is un-mounted
+void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance) {
+ Serial.printf("HID device address = %d, instance = %d is unmounted\r\n", dev_addr, instance);
+}
+
+#define FLAG_ALPHABETIC (1)
+#define FLAG_SHIFT (2)
+#define FLAG_NUMLOCK (4)
+#define FLAG_CTRL (8)
+#define FLAG_LUT (16)
+
+const char * const lut[] = {
+ "!@#$%^&*()", /* 0 - shifted numeric keys */
+ "\r\x1b\10\t -=[]\\#;'`,./", /* 1 - symbol keys */
+ "\n\x1b\177\t _+{}|~:\"~<>?", /* 2 - shifted */
+ "\12\13\10\22", /* 3 - arrow keys RLDU */
+ "/*-+\n1234567890.", /* 4 - keypad w/numlock */
+ "/*-+\n\xff\2\xff\4\xff\3\xff\1\xff\xff.", /* 5 - keypad w/o numlock */
+};
+
+struct keycode_mapper {
+ uint8_t first, last, code, flags;
+} keycode_to_ascii[] = {
+ { HID_KEY_A, HID_KEY_Z, 'a', FLAG_ALPHABETIC, },
+
+ { HID_KEY_1, HID_KEY_9, 0, FLAG_SHIFT | FLAG_LUT, },
+ { HID_KEY_1, HID_KEY_9, '1', 0, },
+ { HID_KEY_0, HID_KEY_0, ')', FLAG_SHIFT, },
+ { HID_KEY_0, HID_KEY_0, '0', 0, },
+
+ { HID_KEY_ENTER, HID_KEY_ENTER, '\n', FLAG_CTRL },
+ { HID_KEY_ENTER, HID_KEY_SLASH, 2, FLAG_SHIFT | FLAG_LUT, },
+ { HID_KEY_ENTER, HID_KEY_SLASH, 1, FLAG_LUT, },
+
+ { HID_KEY_F1, HID_KEY_F1, 0x1e, 0, }, // help key on xerox 820 kbd
+
+ { HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_UP, 3, FLAG_LUT },
+
+ { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 4, FLAG_NUMLOCK | FLAG_LUT },
+ { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 5, FLAG_LUT },
+};
+
+
+bool report_contains(const hid_keyboard_report_t &report, uint8_t key) {
+ for (int i = 0; i < 6; i++) {
+ if (report.keycode[i] == key) return true;
+ }
+ return false;
+}
+
+hid_keyboard_report_t old_report;
+
+void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard_report_t &report) {
+ bool alt = report.modifier & 0x44;
+ bool shift = report.modifier & 0x22;
+ bool ctrl = report.modifier & 0x11;
+ bool caps = old_report.reserved & 1;
+ bool num = old_report.reserved & 2;
+ uint8_t code = 0;
+
+ if (report.keycode[0] == 1 && report.keycode[1] == 1) {
+ // keyboard says it has exceeded max kro
+ return;
+ }
+
+ // something was pressed or release, so cancel any key repeat
+ old_ascii = -1;
+
+ for (auto keycode : report.keycode) {
+ if (keycode == 0) continue;
+ if (report_contains(old_report, keycode)) continue;
+
+ /* key is newly pressed */
+ if (keycode == HID_KEY_NUM_LOCK) {
+ num = !num;
+ } else if (keycode == HID_KEY_CAPS_LOCK) {
+ caps = !caps;
+ } else {
+ for (const auto &mapper : keycode_to_ascii) {
+ if (!(keycode >= mapper.first && keycode <= mapper.last))
+ continue;
+ if (mapper.flags & FLAG_SHIFT && !shift)
+ continue;
+ if (mapper.flags & FLAG_NUMLOCK && !num)
+ continue;
+ if (mapper.flags & FLAG_CTRL && !ctrl)
+ continue;
+ if (mapper.flags & FLAG_LUT) {
+ code = lut[mapper.code][keycode - mapper.first];
+ } else {
+ code = keycode - mapper.first + mapper.code;
+ }
+ if (mapper.flags & FLAG_ALPHABETIC) {
+ if (shift ^ caps) {
+ code ^= ('a' ^ 'A');
+ }
+ }
+ if (ctrl) code &= 0x1f;
+ if (alt) code ^= 0x80;
+ send_ascii(code, initial_repeat_time);
+ break;
+ }
+ }
+ }
+
+ uint8_t leds = (caps | (num << 1));
+ if (leds != old_report.reserved) {
+ Serial.printf("Send LEDs report %d (dev:instance = %d:%d)\r\n", leds, dev_addr, instance);
+ // no worky
+ auto r = tuh_hid_set_report(dev_addr, instance/*idx*/, 0/*report_id*/, HID_REPORT_TYPE_OUTPUT/*report_type*/, &leds, sizeof(leds));
+ Serial.printf("set_report() -> %d\n", (int)r);
+ }
+ old_report = report;
+ old_report.reserved = leds;
+}
+
+// Invoked when received report from device via interrupt endpoint
+void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *report, uint16_t len) {
+ if ( len != sizeof(hid_keyboard_report_t) ) {
+ Serial.printf("report len = %u NOT 8, probably something wrong !!\r\n", len);
+ } else {
+ process_event(dev_addr, instance, *(hid_keyboard_report_t*)report);
+ }
+ // continue to request to receive report
+ if (!tuh_hid_receive_report(dev_addr, instance)) {
+ Serial.printf("Error: cannot request to receive report\r\n");
+ }
+}
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/.feather_rp2040_tinyusb.test.only b/runcpm-rp2040-dvi-usb/runcpm-pico/.feather_rp2040_tinyusb.test.only
new file mode 100644
index 000000000..e69de29bb
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/LICENSE b/runcpm-rp2040-dvi-usb/runcpm-pico/LICENSE
new file mode 100644
index 000000000..f7a6865b8
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Mockba the Borg
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation 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
+furnished 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 FOR 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.
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/README.md b/runcpm-rp2040-dvi-usb/runcpm-pico/README.md
new file mode 100644
index 000000000..bf8a5e7f7
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/README.md
@@ -0,0 +1,31 @@
+
+
+This is a port of runcpm to the raspberry pi pico.
+
+It is based on:
+ * [RunCPM](https://github.com/MockbaTheBorg/RunCPM/)
+ * [RunCPM_RPi_Pico](https://github.com/guidol70/RunCPM_RPi_Pico)
+
+It works on a Raspberry Pi Pico (or Pico W). It uses the internal flash
+for storage, and can be mounted as USB storage.
+
+If your Pico is placed on the Pico DV carrier board, you also get a 100x30
+character screen to enjoy your CP/M output on!
+
+First, build for your device. You must
+ * Use the Philhower Pico Core
+ * In the Tools menu, select
+ * A flash size option that includes at least 512kB for filesystem
+ * USB Stack: Adafruit TinyUSB
+
+After it boots the first time, you need to
+ * Format the flash device on your host computer
+ * Create the folder "/A/0"
+ * Put something useful in that folder, such as [Zork](http://www.retroarchive.org/cpm/games/zork123_80.zip)
+ * Files must respect the "8.3" naming convention (8 letters filename + 3 letters extension) and be all uppercase
+ * Safely eject the drive, then reset the emulator.
+ * Now at the "A0>" prompt you can run "ZORK1".
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/abstraction_arduino.h b/runcpm-rp2040-dvi-usb/runcpm-pico/abstraction_arduino.h
new file mode 100644
index 000000000..12378617c
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/abstraction_arduino.h
@@ -0,0 +1,531 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef ABSTRACT_H
+#define ABSTRACT_H
+
+#ifdef PROFILE
+#define printf(a, b) Serial.println(b)
+#endif
+
+// #if defined ARDUINO_SAM_DUE || defined ADAFRUIT_GRAND_CENTRAL_M4
+#define HostOS 0x01
+// #endif
+
+#if defined CORE_TEENSY
+#define HostOS 0x04
+#endif
+#if defined ESP32
+#define HostOS 0x05
+#endif
+#if defined _STM32_DEF_
+#define HostOS 0x06
+#endif
+
+/* Memory abstraction functions */
+/*===============================================================================*/
+bool _RamLoad(char* filename, uint16 address) {
+ File32 f;
+ bool result = false;
+
+ if (f = SD.open(filename, FILE_READ)) {
+ while (f.available())
+ _RamWrite(address++, f.read());
+ f.close();
+ result = true;
+ }
+ return(result);
+}
+
+/* Filesystem (disk) abstraction fuctions */
+/*===============================================================================*/
+File32 rootdir, userdir;
+#define FOLDERCHAR '/'
+
+typedef struct {
+ uint8 dr;
+ uint8 fn[8];
+ uint8 tp[3];
+ uint8 ex, s1, s2, rc;
+ uint8 al[16];
+ uint8 cr, r0, r1, r2;
+} CPM_FCB;
+
+typedef struct {
+ uint8 dr;
+ uint8 fn[8];
+ uint8 tp[3];
+ uint8 ex, s1, s2, rc;
+ uint8 al[16];
+} CPM_DIRENTRY;
+
+static DirFat_t fileDirEntry;
+
+bool _sys_exists(uint8* filename) {
+ return(SD.exists((const char *)filename));
+}
+
+File32 _sys_fopen_w(uint8* filename) {
+ return(SD.open((char*)filename, O_CREAT | O_WRITE));
+}
+
+int _sys_fputc(uint8 ch, File32& f) {
+ return(f.write(ch));
+}
+
+void _sys_fflush(File32& f) {
+ f.flush();
+}
+
+void _sys_fclose(File32& f) {
+ f.close();
+}
+
+int _sys_select(uint8* disk) {
+ uint8 result = FALSE;
+ File32 f;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ if (f = SD.open((char*)disk, O_READ)) {
+ if (f.isDirectory())
+ result = TRUE;
+ f.close();
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+long _sys_filesize(uint8* filename) {
+ long l = -1;
+ File32 f;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ if (f = SD.open((char*)filename, O_RDONLY)) {
+ l = f.size();
+ f.close();
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(l);
+}
+
+int _sys_openfile(uint8* filename) {
+ File32 f;
+ int result = 0;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ f = SD.open((char*)filename, O_READ);
+ if (f) {
+ f.dirEntry(&fileDirEntry);
+ f.close();
+ result = 1;
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+int _sys_makefile(uint8* filename) {
+ File32 f;
+ int result = 0;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ f = SD.open((char*)filename, O_CREAT | O_WRITE);
+ if (f) {
+ f.close();
+ result = 1;
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+int _sys_deletefile(uint8* filename) {
+ digitalWrite(LED, HIGH ^ LEDinv);
+ return(SD.remove((char*)filename));
+ digitalWrite(LED, LOW ^ LEDinv);
+}
+
+int _sys_renamefile(uint8* filename, uint8* newname) {
+ File32 f;
+ int result = 0;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ f = SD.open((char*)filename, O_WRITE | O_APPEND);
+ if (f) {
+ if (f.rename((char*)newname)) {
+ f.close();
+ result = 1;
+ }
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+#ifdef DEBUGLOG
+void _sys_logbuffer(uint8* buffer) {
+#ifdef CONSOLELOG
+ puts((char*)buffer);
+#else
+ File32 f;
+ uint8 s = 0;
+ while (*(buffer + s)) // Computes buffer size
+ ++s;
+ if (f = SD.open(LogName, O_CREAT | O_APPEND | O_WRITE)) {
+ f.write(buffer, s);
+ f.flush();
+ f.close();
+ }
+#endif
+}
+#endif
+
+bool _sys_extendfile(char* fn, unsigned long fpos)
+{
+ uint8 result = true;
+ File32 f;
+ unsigned long i;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ if (f = SD.open(fn, O_WRITE | O_APPEND)) {
+ if (fpos > f.size()) {
+ for (i = 0; i < f.size() - fpos; ++i) {
+ if (f.write((uint8)0) != 1) {
+ result = false;
+ break;
+ }
+ }
+ }
+ f.close();
+ } else {
+ result = false;
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+uint8 _sys_readseq(uint8* filename, long fpos) {
+ uint8 result = 0xff;
+ File32 f;
+ uint8 bytesread;
+ uint8 dmabuf[BlkSZ];
+ uint8 i;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ f = SD.open((char*)filename, O_READ);
+ if (f) {
+ if (f.seek(fpos)) {
+ for (i = 0; i < BlkSZ; ++i)
+ dmabuf[i] = 0x1a;
+ bytesread = f.read(&dmabuf[0], BlkSZ);
+ if (bytesread) {
+ for (i = 0; i < BlkSZ; ++i)
+ _RamWrite(dmaAddr + i, dmabuf[i]);
+ }
+ result = bytesread ? 0x00 : 0x01;
+ } else {
+ result = 0x01;
+ }
+ f.close();
+ } else {
+ result = 0x10;
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+uint8 _sys_writeseq(uint8* filename, long fpos) {
+ uint8 result = 0xff;
+ File32 f;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ if (_sys_extendfile((char*)filename, fpos))
+ f = SD.open((char*)filename, O_RDWR);
+ if (f) {
+ if (f.seek(fpos)) {
+ if (f.write(_RamSysAddr(dmaAddr), BlkSZ))
+ result = 0x00;
+ } else {
+ result = 0x01;
+ }
+ f.close();
+ } else {
+ result = 0x10;
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+uint8 _sys_readrand(uint8* filename, long fpos) {
+ uint8 result = 0xff;
+ File32 f;
+ uint8 bytesread;
+ uint8 dmabuf[BlkSZ];
+ uint8 i;
+ long extSize;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ f = SD.open((char*)filename, O_READ);
+ if (f) {
+ if (f.seek(fpos)) {
+ for (i = 0; i < BlkSZ; ++i)
+ dmabuf[i] = 0x1a;
+ bytesread = f.read(&dmabuf[0], BlkSZ);
+ if (bytesread) {
+ for (i = 0; i < BlkSZ; ++i)
+ _RamWrite(dmaAddr + i, dmabuf[i]);
+ }
+ result = bytesread ? 0x00 : 0x01;
+ } else {
+ if (fpos >= 65536L * BlkSZ) {
+ result = 0x06; // seek past 8MB (largest file size in CP/M)
+ } else {
+ extSize = f.size();
+ // round file size up to next full logical extent
+ extSize = ExtSZ * ((extSize / ExtSZ) + ((extSize % ExtSZ) ? 1 : 0));
+ if (fpos < extSize)
+ result = 0x01; // reading unwritten data
+ else
+ result = 0x04; // seek to unwritten extent
+ }
+ }
+ f.close();
+ } else {
+ result = 0x10;
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+uint8 _sys_writerand(uint8* filename, long fpos) {
+ uint8 result = 0xff;
+ File32 f;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ if (_sys_extendfile((char*)filename, fpos)) {
+ f = SD.open((char*)filename, O_RDWR);
+ }
+ if (f) {
+ if (f.seek(fpos)) {
+ if (f.write(_RamSysAddr(dmaAddr), BlkSZ))
+ result = 0x00;
+ } else {
+ result = 0x06;
+ }
+ f.close();
+ } else {
+ result = 0x10;
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+static uint8 findNextDirName[13];
+static uint16 fileRecords = 0;
+static uint16 fileExtents = 0;
+static uint16 fileExtentsUsed = 0;
+static uint16 firstFreeAllocBlock;
+
+uint8 _findnext(uint8 isdir) {
+ File32 f;
+ uint8 result = 0xff;
+ bool isfile;
+ uint32 bytes;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ if (allExtents && fileRecords) {
+ _mockupDirEntry();
+ result = 0;
+ } else {
+ while (f = userdir.openNextFile()) {
+ f.getName((char*)&findNextDirName[0], 13);
+ isfile = !f.isDirectory();
+ bytes = f.size();
+ f.dirEntry(&fileDirEntry);
+ f.close();
+ if (!isfile)
+ continue;
+ _HostnameToFCBname(findNextDirName, fcbname);
+ if (match(fcbname, pattern)) {
+ if (isdir) {
+ // account for host files that aren't multiples of the block size
+ // by rounding their bytes up to the next multiple of blocks
+ if (bytes & (BlkSZ - 1)) {
+ bytes = (bytes & ~(BlkSZ - 1)) + BlkSZ;
+ }
+ fileRecords = bytes / BlkSZ;
+ fileExtents = fileRecords / BlkEX + ((fileRecords & (BlkEX - 1)) ? 1 : 0);
+ fileExtentsUsed = 0;
+ firstFreeAllocBlock = firstBlockAfterDir;
+ _mockupDirEntry();
+ } else {
+ fileRecords = 0;
+ fileExtents = 0;
+ fileExtentsUsed = 0;
+ firstFreeAllocBlock = firstBlockAfterDir;
+ }
+ _RamWrite(tmpFCB, filename[0] - '@');
+ _HostnameToFCB(tmpFCB, findNextDirName);
+ result = 0x00;
+ break;
+ }
+ }
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+uint8 _findfirst(uint8 isdir) {
+ uint8 path[4] = { '?', FOLDERCHAR, '?', 0 };
+ path[0] = filename[0];
+ path[2] = filename[2];
+ if (userdir)
+ userdir.close();
+ userdir = SD.open((char*)path); // Set directory search to start from the first position
+ _HostnameToFCBname(filename, pattern);
+ fileRecords = 0;
+ fileExtents = 0;
+ fileExtentsUsed = 0;
+ return(_findnext(isdir));
+}
+
+uint8 _findnextallusers(uint8 isdir) {
+ uint8 result = 0xFF;
+ char dirname[13];
+ bool done = false;
+
+ while (!done) {
+ while (!userdir) {
+ userdir = rootdir.openNextFile();
+ if (!userdir) {
+ done = true;
+ break;
+ }
+ userdir.getName(dirname, sizeof dirname);
+ if (userdir.isDirectory() && strlen(dirname) == 1 && isxdigit(dirname[0])) {
+ currFindUser = dirname[0] <= '9' ? dirname[0] - '0' : toupper(dirname[0]) - 'A' + 10;
+ break;
+ }
+ userdir.close();
+ }
+ if (userdir) {
+ result = _findnext(isdir);
+ if (result) {
+ userdir.close();
+ } else {
+ done = true;
+ }
+ } else {
+ result = 0xFF;
+ done = true;
+ }
+ }
+ return result;
+}
+
+uint8 _findfirstallusers(uint8 isdir) {
+ uint8 path[2] = { '?', 0 };
+
+ path[0] = filename[0];
+ if (rootdir)
+ rootdir.close();
+ if (userdir)
+ userdir.close();
+ rootdir = SD.open((char*)path); // Set directory search to start from the first position
+ strcpy((char*)pattern, "???????????");
+ if (!rootdir)
+ return 0xFF;
+ fileRecords = 0;
+ fileExtents = 0;
+ fileExtentsUsed = 0;
+ return(_findnextallusers(isdir));
+}
+
+uint8 _Truncate(char* filename, uint8 rc) {
+ File32 f;
+ int result = 0;
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ f = SD.open((char*)filename, O_WRITE | O_APPEND);
+ if (f) {
+ if (f.truncate(rc * BlkSZ)) {
+ f.close();
+ result = 1;
+ }
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ return(result);
+}
+
+void _MakeUserDir() {
+ uint8 dFolder = cDrive + 'A';
+ uint8 uFolder = toupper(tohex(userCode));
+
+ uint8 path[4] = { dFolder, FOLDERCHAR, uFolder, 0 };
+
+ digitalWrite(LED, HIGH ^ LEDinv);
+ SD.mkdir((char*)path);
+ digitalWrite(LED, LOW ^ LEDinv);
+}
+
+uint8 _sys_makedisk(uint8 drive) {
+ uint8 result = 0;
+ if (drive < 1 || drive>16) {
+ result = 0xff;
+ } else {
+ uint8 dFolder = drive + '@';
+ uint8 disk[2] = { dFolder, 0 };
+ digitalWrite(LED, HIGH ^ LEDinv);
+ if (!SD.mkdir((char*)disk)) {
+ result = 0xfe;
+ } else {
+ uint8 path[4] = { dFolder, FOLDERCHAR, '0', 0 };
+ SD.mkdir((char*)path);
+ }
+ digitalWrite(LED, LOW ^ LEDinv);
+ }
+
+ return(result);
+}
+
+/* Hardware abstraction functions */
+/*===============================================================================*/
+void _HardwareOut(const uint32 Port, const uint32 Value) {
+
+}
+
+uint32 _HardwareIn(const uint32 Port) {
+ return 0;
+}
+
+/* Console abstraction functions */
+/*===============================================================================*/
+
+#include "arduino_hooks.h"
+
+int _kbhit(void) {
+ if (_kbhit_hook && _kbhit_hook()) { return true; }
+ return(Serial.available());
+}
+
+uint8 _getch(void) {
+ while(true) {
+ if(_kbhit_hook && _kbhit_hook()) { return _getch_hook(); }
+ if(Serial.available()) { return Serial.read(); }
+ }
+}
+
+uint8 _getche(void) {
+ uint8 ch = _getch();
+ _putch(ch);
+ return(ch);
+}
+
+void _putch(uint8 ch) {
+ Serial.write(ch);
+ if(_putch_hook) _putch_hook(ch);
+}
+
+void _clrscr(void) {
+ Serial.print("\e[H\e[J");
+}
+
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/arduino_hooks.c b/runcpm-rp2040-dvi-usb/runcpm-pico/arduino_hooks.c
new file mode 100644
index 000000000..be225ac5a
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/arduino_hooks.c
@@ -0,0 +1,10 @@
+// SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include "arduino_hooks.h"
+
+bool (*_kbhit_hook)(void);
+uint8_t (*_getch_hook)(void);
+void (*_putch_hook)(uint8_t ch);
+
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/arduino_hooks.h b/runcpm-rp2040-dvi-usb/runcpm-pico/arduino_hooks.h
new file mode 100644
index 000000000..a1baed74b
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/arduino_hooks.h
@@ -0,0 +1,13 @@
+// SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#pragma once
+
+#include
+#include
+
+extern bool (*_kbhit_hook)(void);
+extern uint8_t (*_getch_hook)(void);
+extern void (*_putch_hook)(uint8_t ch);
+
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/ccp.h b/runcpm-rp2040-dvi-usb/runcpm-pico/ccp.h
new file mode 100644
index 000000000..38da86fc2
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/ccp.h
@@ -0,0 +1,891 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef CCP_H
+#define CCP_H
+
+// CP/M BDOS calls
+#include "cpm.h"
+
+#define CmdFCB (BatchFCB + 48) // FCB for use by internal commands
+#define ParFCB 0x005C // FCB for use by line parameters
+#define SecFCB 0x006C // Secondary part of FCB for renaming files
+#define Trampoline (CmdFCB + 36) // Trampoline for running external commands
+
+#define inBuf (BDOSjmppage - 256) // Input buffer location
+#define cmdLen 125 // Maximum size of a command line (sz+rd+cmd+\0)
+
+#define defDMA 0x0080 // Default DMA address
+#define defLoad 0x0100 // Default load address
+
+// CCP global variables
+uint8 pgSize = 22; // for TYPE
+uint8 curDrive = 0; // 0 -> 15 = A -> P .. Current drive for the CCP (same as RAM[DSKByte])
+uint8 parDrive = 0; // 0 -> 15 = A -> P .. Drive for the first file parameter
+uint8 curUser = 0; // 0 -> 15 .. Current user area to access
+bool sFlag = FALSE; // Submit Flag
+uint8 sRecs = 0; // Number of records on the Submit file
+uint8 prompt[8] = "\r\n >";
+uint16 pbuf, perr;
+uint8 blen; // Actual size of the typed command line (size of the buffer)
+
+static const char *Commands[] =
+{
+ // Standard CP/M commands
+ "DIR",
+ "ERA",
+ "TYPE",
+ "SAVE",
+ "REN",
+ "USER",
+
+ // Extra CCP commands
+ "CLS",
+ "DEL",
+ "EXIT",
+ "PAGE",
+ "VOL",
+ "?",
+ NULL
+};
+
+// Used to call BDOS from inside the CCP
+uint16 _ccp_bdos(uint8 function, uint16 de) {
+ SET_LOW_REGISTER(BC, function);
+ DE = de;
+ _Bdos();
+
+ return (HL & 0xffff);
+} // _ccp_bdos
+
+// Compares two strings (Atmel doesn't like strcmp)
+uint8 _ccp_strcmp(char *stra, char *strb) {
+ while (*stra && *strb && (*stra == *strb)) {
+ ++stra;
+ ++strb;
+ }
+ return (*stra == *strb);
+} // _ccp_strcmp
+
+// Gets the command ID number
+uint8 _ccp_cnum(void) {
+ uint8 result = 255;
+ uint8 command[9];
+ uint8 i = 0;
+
+ if (!_RamRead(CmdFCB)) { // If a drive was set, then the command is external
+ while (i < 8 && _RamRead(CmdFCB + i + 1) != ' ') {
+ command[i] = _RamRead(CmdFCB + i + 1);
+ ++i;
+ }
+ command[i] = 0;
+ i = 0;
+ while (Commands[i]) {
+ if (_ccp_strcmp((char *)command, (char *)Commands[i])) {
+ result = i;
+ perr = defDMA + 2;
+ break;
+ }
+ ++i;
+ }
+ }
+ return (result);
+} // _ccp_cnum
+
+// Returns true if character is a separator
+uint8 _ccp_delim(uint8 ch) {
+ return (ch == 0 || ch == ' ' || ch == '=' || ch == '.' || ch == ':' || ch == ';' || ch == '<' || ch == '>');
+}
+
+// Prints the FCB filename
+void _ccp_printfcb(uint16 fcb, uint8 compact) {
+ uint8 i, ch;
+
+ ch = _RamRead(fcb);
+ if (ch && compact) {
+ _ccp_bdos( C_WRITE, ch + '@');
+ _ccp_bdos( C_WRITE, ':');
+ }
+
+ for (i = 1; i < 12; ++i) {
+ ch = _RamRead(fcb + i);
+ if ((ch == ' ') && compact)
+ continue;
+ if (i == 9)
+ _ccp_bdos(C_WRITE, compact ? '.' : ' ');
+ _ccp_bdos(C_WRITE, ch);
+ }
+} // _ccp_printfcb
+
+// Initializes the FCB
+void _ccp_initFCB(uint16 address, uint8 size) {
+ uint8 i;
+
+ for (i = 0; i < size; ++i)
+ _RamWrite(address + i, 0x00);
+
+ for (i = 0; i < 11; ++i)
+ _RamWrite(address + 1 + i, 0x20);
+} // _ccp_initFCB
+
+// Name to FCB
+uint8 _ccp_nameToFCB(uint16 fcb) {
+ uint8 pad, plen, ch, n = 0;
+
+ // Checks for a drive and places it on the Command FCB
+ if (_RamRead(pbuf + 1) == ':') {
+ ch = toupper(_RamRead(pbuf++));
+ _RamWrite(fcb, ch - '@'); // Makes the drive 0x1-0xF for A-P
+ ++pbuf; // Points pbuf past the :
+ blen -= 2;
+ }
+ if (blen) {
+ ++fcb;
+
+ plen = 8;
+ pad = ' ';
+ ch = toupper(_RamRead(pbuf));
+
+ while (blen && plen) {
+ if (_ccp_delim(ch))
+ break;
+ ++pbuf;
+ --blen;
+ if (ch == '*')
+ pad = '?';
+ if (pad == '?') {
+ ch = pad;
+ n = n | 0x80; // Name is not unique
+ }
+ --plen;
+ ++n;
+ _RamWrite(fcb++, ch);
+ ch = toupper(_RamRead(pbuf));
+ }
+
+ while (plen--)
+ _RamWrite(fcb++, pad);
+ plen = 3;
+ pad = ' ';
+ if (ch == '.') {
+ ++pbuf;
+ --blen;
+ }
+
+ while (blen && plen) {
+ ch = toupper(_RamRead(pbuf));
+ if (_ccp_delim(ch))
+ break;
+ ++pbuf;
+ --blen;
+ if (ch == '*')
+ pad = '?';
+ if (pad == '?') {
+ ch = pad;
+ n = n | 0x80; // Name is not unique
+ }
+ --plen;
+ ++n;
+ _RamWrite(fcb++, ch);
+ }
+
+ while (plen--)
+ _RamWrite(fcb++, pad);
+ }
+ return (n);
+} // _ccp_nameToFCB
+
+// Converts the ParFCB name to a number
+uint16 _ccp_fcbtonum() {
+ uint8 ch;
+ uint16 n = 0;
+ uint8 pos = ParFCB + 1;
+
+ while (TRUE) {
+ ch = _RamRead(pos++);
+ if ((ch < '0') || (ch > '9')) {
+ break;
+ }
+ n = (n * 10) + (ch - '0');
+ }
+ return (n);
+} // _ccp_fcbtonum
+
+// DIR command
+void _ccp_dir(void) {
+ uint8 i;
+ uint8 dirHead[6] = "A: ";
+ uint8 dirSep[6] = " | ";
+ uint32 fcount = 0; // Number of files printed
+ uint32 ccount = 0; // Number of columns printed
+
+ if (_RamRead(ParFCB + 1) == ' ')
+ for (i = 1; i < 12; ++i)
+ _RamWrite(ParFCB + i, '?');
+ dirHead[0] = _RamRead(ParFCB) ? _RamRead(ParFCB) + '@' : prompt[2];
+
+ _puts("\r\n");
+ if (!_SearchFirst(ParFCB, TRUE)) {
+ _puts((char *)dirHead);
+ _ccp_printfcb(tmpFCB, FALSE);
+ ++fcount;
+ ++ccount;
+
+ while (!_SearchNext(ParFCB, TRUE)) {
+ if (!ccount) {
+ _puts( "\r\n");
+ _puts( (char *)dirHead);
+ } else {
+ _puts((char *)dirSep);
+ }
+ _ccp_printfcb(tmpFCB, FALSE);
+ ++fcount;
+ ++ccount;
+ if (ccount > 3)
+ ccount = 0;
+ }
+ } else {
+ _puts("No file");
+ }
+} // _ccp_dir
+
+// ERA command
+void _ccp_era(void) {
+ if (_ccp_bdos(F_DELETE, ParFCB))
+ _puts("\r\nNo file");
+} // _ccp_era
+
+// TYPE command
+uint8 _ccp_type(void) {
+ uint8 i, c, l = 0, error = TRUE;
+ uint16 a, p = 0;
+
+ if (!_ccp_bdos(F_OPEN, ParFCB)) {
+ _puts("\r\n");
+
+ while (!_ccp_bdos(F_READ, ParFCB)) {
+ i = 128;
+ a = dmaAddr;
+
+ while (i) {
+ c = _RamRead(a);
+ if (c == 0x1a)
+ break;
+ _ccp_bdos(C_WRITE, c);
+ if (c == 0x0a) {
+ ++l;
+ if (pgSize && (l == pgSize)) {
+ l = 0;
+ p = _ccp_bdos(C_READ, 0x0000);
+ if (p == 3)
+ break;
+ }
+ }
+ --i;
+ ++a;
+ }
+ if (p == 3)
+ break;
+ }
+ error = FALSE;
+ }
+ return (error);
+} // _ccp_type
+
+// SAVE command
+uint8 _ccp_save(void) {
+ uint8 error = TRUE;
+ uint16 pages = _ccp_fcbtonum();
+ uint16 i, dma;
+
+ if (pages < 256) {
+ error = FALSE;
+
+ while (_RamRead(pbuf) == ' ' && blen) { // Skips any leading spaces
+ ++pbuf;
+ --blen;
+ }
+ _ccp_nameToFCB(SecFCB); // Loads file name onto the ParFCB
+ if (_ccp_bdos(F_MAKE, SecFCB)) {
+ _puts("Err: create");
+ } else {
+ if (_ccp_bdos(F_OPEN, SecFCB)) {
+ _puts("Err: open");
+ } else {
+ pages *= 2; // Calculates the number of CP/M blocks to write
+ dma = defLoad;
+ _puts("\r\n");
+
+ for (i = 0; i < pages; i++) {
+ _ccp_bdos( F_DMAOFF, dma);
+ _ccp_bdos( F_WRITE, SecFCB);
+ dma += 128;
+ _ccp_bdos( C_WRITE, '.');
+ }
+ _ccp_bdos(F_CLOSE, SecFCB);
+ }
+ }
+ }
+ return (error);
+} // _ccp_save
+
+// REN command
+void _ccp_ren(void) {
+ uint8 ch, i;
+
+ ++pbuf;
+
+ _ccp_nameToFCB(SecFCB);
+
+ for (i = 0; i < 12; ++i) { // Swap the filenames on the fcb
+ ch = _RamRead(ParFCB + i);
+ _RamWrite( ParFCB + i, _RamRead(SecFCB + i));
+ _RamWrite( SecFCB + i, ch);
+ }
+ if (_ccp_bdos(F_RENAME, ParFCB))
+ _puts("\r\nNo file");
+} // _ccp_ren
+
+// USER command
+uint8 _ccp_user(void) {
+ uint8 error = TRUE;
+
+ curUser = (uint8)_ccp_fcbtonum();
+ if (curUser < 16) {
+ _ccp_bdos(F_USERNUM, curUser);
+ error = FALSE;
+ }
+ return (error);
+} // _ccp_user
+
+// PAGE command
+uint8 _ccp_page(void) {
+ uint8 error = TRUE;
+ uint16 r = _ccp_fcbtonum();
+
+ if (r < 256) {
+ pgSize = (uint8)r;
+ error = FALSE;
+ }
+ return (error);
+} // _ccp_page
+
+// VOL command
+uint8 _ccp_vol(void) {
+ uint8 error = FALSE;
+ uint8 letter = _RamRead(ParFCB) ? '@' + _RamRead(ParFCB) : 'A' + curDrive;
+ uint8 folder[5] = {letter, FOLDERCHAR, '0', FOLDERCHAR, 0};
+ uint8 filename[13] = {letter, FOLDERCHAR, '0', FOLDERCHAR, 'I', 'N', 'F', 'O', '.', 'T', 'X', 'T', 0};
+ uint8 bytesread;
+ uint8 i, j;
+
+ _puts("\r\nVolumes on ");
+ _putcon(folder[0]);
+ _puts(":\r\n");
+
+ for (i = 0; i < 16; ++i) {
+ folder[2] = i < 10 ? i + 48 : i + 55;
+ if (_sys_exists(folder)) {
+ _putcon(i < 10 ? ' ' : '1');
+ _putcon(i < 10 ? folder[2] : 38 + i);
+ _puts(": ");
+ filename[2] = i < 10 ? i + 48 : i + 55;
+ bytesread = (uint8)_sys_readseq(filename, 0);
+ if (!bytesread) {
+ for (j = 0; j < 128; ++j) {
+ if ((_RamRead(dmaAddr + j) < 32) || (_RamRead(dmaAddr + j) > 126))
+ break;
+ _putcon(_RamRead(dmaAddr + j));
+ }
+ }
+ _puts("\r\n");
+ }
+ }
+ return (error);
+} // _ccp_vol
+
+// ?/Help command
+uint8 _ccp_hlp(void) {
+ _puts("\r\nCCP Commands:\r\n");
+ _puts("\t? - Shows this list of commands\r\n");
+ _puts("\tCLS - Clears the screen\r\n");
+ _puts("\tDEL - Alias to ERA\r\n");
+ _puts("\tEXIT - Terminates RunCPM\r\n");
+ _puts("\tPAGE [] - Sets the page size for TYPE\r\n");
+ _puts("\t or disables paging if no parameter passed\r\n");
+ _puts("\tVOL [drive] - Shows the volume information\r\n");
+ _puts("\t which comes from each volume's INFO.TXT");
+ return(FALSE);
+}
+#ifdef HASLUA
+
+// External (.LUA) command
+uint8 _ccp_lua(void) {
+ uint8 error = TRUE;
+ uint8 found, drive, user = 0;
+ uint16 loadAddr = defLoad;
+
+ _RamWrite( CmdFCB + 9, 'L');
+ _RamWrite( CmdFCB + 10, 'U');
+ _RamWrite( CmdFCB + 11, 'A');
+
+ drive = _RamRead(CmdFCB);
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // Look for the program on the FCB drive, current or specified
+ if (!found) { // If not found
+ if (!drive) { // and the search was on the default drive
+ _RamWrite(CmdFCB, 0x01); // Then look on drive A: user 0
+ if (curUser) {
+ user = curUser; // Save the current user
+ _ccp_bdos(F_USERNUM, 0x0000); // then set it to 0
+ }
+ found = !_ccp_bdos(F_OPEN, CmdFCB);
+ if (!found) { // If still not found then
+ if (curUser) { // If current user not = 0
+ _RamWrite(CmdFCB, 0x00); // look on current drive user 0
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // and try again
+ }
+ }
+ }
+ }
+ if (found) {
+ _puts("\r\n");
+
+ _ccp_bdos(F_RUNLUA, CmdFCB);
+ if (user) { // If a user was selected
+ _ccp_bdos(F_USERNUM, curUser); // Set it back
+ user = 0;
+ }
+ _RamWrite(CmdFCB, drive); // Set the command FCB drive back to what it was
+ cDrive = oDrive; // And restore cDrive
+ error = FALSE;
+ }
+ if (user) // If a user was selected
+ _ccp_bdos(F_USERNUM, curUser); // Set it back
+ _RamWrite(CmdFCB, drive); // Set the command FCB drive back to what it was
+
+ return (error);
+} // _ccp_lua
+#endif // ifdef HASLUA
+
+// External (.COM) command
+uint8 _ccp_ext(void) {
+ bool error = TRUE, found = FALSE;
+ uint8 drive = 0, user = 0;
+ uint16 loadAddr = defLoad;
+
+ bool wasBlank = (_RamRead(CmdFCB + 9) == ' ');
+ bool wasSUB = ((_RamRead(CmdFCB + 9) == 'S') &&
+ (_RamRead(CmdFCB + 10) == 'U') &&
+ (_RamRead(CmdFCB + 11) == 'B'));
+
+ if (!wasSUB) {
+ if (wasBlank) {
+ _RamWrite(CmdFCB + 9, 'C'); //first look for a .COM file
+ _RamWrite(CmdFCB + 10, 'O');
+ _RamWrite(CmdFCB + 11, 'M');
+ }
+
+ drive = _RamRead(CmdFCB); // Get the drive from the command FCB
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // Look for the program on the FCB drive, current or specified
+ if (!found) { // If not found
+ if (!drive) { // and the search was on the default drive
+ _RamWrite(CmdFCB, 0x01); // Then look on drive A: user 0
+ if (curUser) {
+ user = curUser; // Save the current user
+ _ccp_bdos(F_USERNUM, 0x0000); // then set it to 0
+ }
+ found = !_ccp_bdos(F_OPEN, CmdFCB);
+ if (!found) { // If still not found then
+ if (curUser) { // If current user not = 0
+ _RamWrite(CmdFCB, 0x00); // look on current drive user 0
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // and try again
+ }
+ }
+ }
+ }
+ if (!found) {
+ _RamWrite(CmdFCB, drive); // restore previous drive
+ _ccp_bdos(F_USERNUM, curUser); // restore to previous user
+ }
+ }
+
+ //if .COM not found then look for a .SUB file
+ if ((wasBlank || wasSUB) && !found && !sFlag) { //don't auto-submit while executing a submit file
+ _RamWrite(CmdFCB + 9, 'S');
+ _RamWrite(CmdFCB + 10, 'U');
+ _RamWrite(CmdFCB + 11, 'B');
+
+ drive = _RamRead(CmdFCB); // Get the drive from the command FCB
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // Look for the program on the FCB drive, current or specified
+ if (!found) { // If not found
+ if (!drive) { // and the search was on the default drive
+ _RamWrite(CmdFCB, 0x01); // Then look on drive A: user 0
+ if (curUser) {
+ user = curUser; // Save the current user
+ _ccp_bdos(F_USERNUM, 0x0000); // then set it to 0
+ }
+ found = !_ccp_bdos(F_OPEN, CmdFCB);
+ if (!found) { // If still not found then
+ if (curUser) { // If current user not = 0
+ _RamWrite(CmdFCB, 0x00); // look on current drive user 0
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // and try again
+ }
+ }
+ }
+ }
+ if (!found) {
+ _RamWrite(CmdFCB, drive); // restore previous drive
+ _ccp_bdos(F_USERNUM, curUser); // restore to previous user
+ }
+
+ if (found) {
+ //_puts(".SUB file found!\n");
+ int i;
+
+ //move FCB's (CmdFCB --> ParFCB --> SecFCB)
+ for (i = 0; i < 16; i++) {
+ //ParFCB to SecFCB
+ _RamWrite(SecFCB + i, _RamRead(ParFCB + i));
+ //CmdFCB to ParFCB
+ _RamWrite(ParFCB + i, _RamRead(CmdFCB + i));
+ }
+ // (Re)Initialize the CmdFCB
+ _ccp_initFCB(CmdFCB, 36);
+
+ //put 'SUBMIT.COM' in CmdFCB
+ const char *str = "SUBMIT COM";
+ int s = (int)strlen(str);
+ for (i = 0; i < s; i++)
+ _RamWrite(CmdFCB + i + 1, str[i]);
+
+ //now try to find SUBMIT.COM file
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // Look for the program on the FCB drive, current or specified
+ if (!found) { // If not found
+ if (!drive) { // and the search was on the default drive
+ _RamWrite(CmdFCB, 0x01); // Then look on drive A: user 0
+ if (curUser) {
+ user = curUser; // Save the current user
+ _ccp_bdos(F_USERNUM, 0x0000); // then set it to 0
+ }
+ found = !_ccp_bdos(F_OPEN, CmdFCB);
+ if (!found) { // If still not found then
+ if (curUser) { // If current user not = 0
+ _RamWrite(CmdFCB, 0x00); // look on current drive user 0
+ found = !_ccp_bdos(F_OPEN, CmdFCB); // and try again
+ }
+ }
+ }
+ }
+ if (found) {
+ //insert "@" into command buffer
+ //note: this is so the rest will be parsed correctly
+ blen = _RamRead(defDMA);
+ if (blen < cmdLen) {
+ blen++;
+ _RamWrite(defDMA, blen);
+ }
+ uint8 lc = '@';
+ for (i = 0; i < blen; i++) {
+ uint8 nc = _RamRead(defDMA + 1 + i);
+ _RamWrite(defDMA + 1 + i, lc);
+ lc = nc;
+ }
+ }
+ }
+ }
+
+ if (found) { // Program was found somewhere
+ _puts("\r\n");
+ _ccp_bdos(F_DMAOFF, loadAddr); // Sets the DMA address for the loading
+ while (!_ccp_bdos(F_READ, CmdFCB)) { // Loads the program into memory
+ loadAddr += 128;
+ if (loadAddr == BDOSjmppage) { // Breaks if it reaches the end of TPA
+ _puts("\r\nNo Memory");
+ break;
+ }
+ _ccp_bdos(F_DMAOFF, loadAddr); // Points the DMA offset to the next loadAddr
+ }
+ _ccp_bdos(F_DMAOFF, defDMA); // Points the DMA offset back to the default
+
+ if (user) { // If a user was selected
+ _ccp_bdos(F_USERNUM, curUser); // Set it back
+ user = 0;
+ }
+ _RamWrite(CmdFCB, drive); // Set the command FCB drive back to what it was
+ cDrive = oDrive; // And restore cDrive
+
+ // Place a trampoline to call the external command
+ // as it may return using RET instead of JP 0000h
+ loadAddr = Trampoline;
+ _RamWrite(loadAddr, CALL); // CALL 0100h
+ _RamWrite16(loadAddr + 1, defLoad);
+ _RamWrite(loadAddr + 3, JP); // JP USERF
+ _RamWrite16(loadAddr + 4, BIOSjmppage + B_USERF);
+
+ Z80reset(); // Resets the Z80 CPU
+ SET_LOW_REGISTER(BC, _RamRead(DSKByte)); // Sets C to the current drive/user
+ PC = loadAddr; // Sets CP/M application jump point
+ SP = BDOSjmppage; // Sets the stack to the top of the TPA
+
+ Z80run(); // Starts Z80 simulation
+
+ error = FALSE;
+ }
+
+ if (user) // If a user was selected
+ _ccp_bdos(F_USERNUM, curUser); // Set it back
+ _RamWrite(CmdFCB, drive); // Set the command FCB drive back to what it was
+
+ return(error);
+} // _ccp_ext
+
+// Prints a command error
+void _ccp_cmdError() {
+ uint8 ch;
+
+ _puts("\r\n");
+ while ((ch = _RamRead(perr++))) {
+ if (ch == ' ')
+ break;
+ _ccp_bdos(C_WRITE, toupper(ch));
+ }
+ _puts("?\r\n");
+} // _ccp_cmdError
+
+// Reads input, either from the $$$.SUB or console
+void _ccp_readInput(void) {
+ uint8 i;
+ uint8 chars;
+
+ if (sFlag) { // Are we running a submit?
+ if (!sRecs) { // Are we already counting?
+ _ccp_bdos(F_OPEN, BatchFCB); // Open the batch file
+ sRecs = _RamRead(BatchFCB + 15); // Gets its record count
+ }
+ --sRecs; // Counts one less
+ _RamWrite(BatchFCB + 32, sRecs); // And sets to be the next read
+ _ccp_bdos( F_DMAOFF, defDMA); // Reset current DMA
+ _ccp_bdos( F_READ, BatchFCB); // And reads the last sector
+ chars = _RamRead(defDMA); // Then moves it to the input buffer
+
+ for (i = 0; i <= chars; ++i)
+ _RamWrite(inBuf + i + 1, _RamRead(defDMA + i));
+ _RamWrite(inBuf + i + 1, 0);
+ _puts((char *)_RamSysAddr(inBuf + 2));
+ if (!sRecs) {
+ _ccp_bdos(F_DELETE, BatchFCB); // Deletes the submit file
+ sFlag = FALSE; // and clears the submit flag
+ }
+ } else {
+ _ccp_bdos(C_READSTR, inBuf); // Reads the command line from console
+ if (Debug)
+ Z80run();
+ }
+} // _ccp_readInput
+
+// Main CCP code
+void _ccp(void) {
+ uint8 i;
+
+ sFlag = (bool)_ccp_bdos(DRV_ALLRESET, 0x0000);
+ _ccp_bdos(DRV_SET, curDrive);
+
+ for (i = 0; i < 36; ++i)
+ _RamWrite(BatchFCB + i, _RamRead(tmpFCB + i));
+
+ while (TRUE) {
+ curDrive = (uint8)_ccp_bdos(DRV_GET, 0x0000); // Get current drive
+ curUser = (uint8)_ccp_bdos(F_USERNUM, 0x00FF); // Get current user
+ _RamWrite(DSKByte, (curUser << 4) + curDrive); // Set user/drive on addr DSKByte
+
+ parDrive = curDrive; // Initially the parameter drive is the same as the current drive
+
+ sprintf((char *) prompt, "\r\n%c%u%c", 'A' + curDrive, curUser, sFlag ? '$' : '>');
+ _puts((char *)prompt);
+
+ _RamWrite(inBuf, cmdLen); // Sets the buffer size to read the command line
+ _ccp_readInput();
+
+ blen = _RamRead(inBuf + 1); // Obtains the number of bytes read
+
+ _ccp_bdos(F_DMAOFF, defDMA); // Reset current DMA
+ if (blen) {
+ _RamWrite(inBuf + 2 + blen, 0); // "Closes" the read buffer with a \0
+ pbuf = inBuf + 2; // Points pbuf to the first command character
+
+ while (_RamRead(pbuf) == ' ' && blen) { // Skips any leading spaces
+ ++pbuf;
+ --blen;
+ }
+ if (!blen) // There were only spaces
+ continue;
+ if (_RamRead(pbuf) == ';') // Found a comment line
+ continue;
+
+ // parse for DU: command line shortcut
+ bool errorFlag = FALSE, continueFlag = FALSE;
+ uint8 ch, tDrive = 0, tUser = curUser, u = 0;
+
+ for (i = 0; i < blen; i++) {
+ ch = toupper(_RamRead(pbuf + i));
+ if ((ch >= 'A') && (ch <= 'P')) {
+ if (tDrive) { // if we've already specified a new drive
+ break; // not a DU: command
+ } else {
+ tDrive = ch - '@';
+ }
+ } else if ((ch >= '0') && (ch <= '9')) {
+ tUser = u = (u * 10) + (ch - '0');
+ } else if (ch == ':') {
+ if (i == blen - 1) { // if we at the end of the command line
+ if (tUser >= 16) { // if invalid user
+ errorFlag = TRUE;
+ break;
+ }
+ if (tDrive != 0) {
+ cDrive = oDrive = tDrive - 1;
+ _RamWrite(DSKByte, (_RamRead(DSKByte) & 0xf0) | cDrive);
+ _ccp_bdos(DRV_SET, cDrive);
+ if (Status)
+ curDrive = 0;
+ }
+ if (tUser != curUser) {
+ curUser = tUser;
+ _ccp_bdos(F_USERNUM, curUser);
+ }
+ continueFlag = TRUE;
+ }
+ break;
+ } else { // invalid character
+ break; // don't error; may be valid (non-DU:) command
+ }
+ }
+ if (errorFlag) {
+ _ccp_cmdError(); // print command error
+ continue;
+ }
+ if (continueFlag) {
+ continue;
+ }
+ _ccp_initFCB(CmdFCB, 36); // Initializes the command FCB
+
+ perr = pbuf; // Saves the pointer in case there's an error
+ if (_ccp_nameToFCB(CmdFCB) > 8) { // Extracts the command from the buffer
+ _ccp_cmdError(); // Command name cannot be non-unique or have an extension
+ continue;
+ }
+ _RamWrite(defDMA, blen); // Move the command line at this point to 0x0080
+
+ for (i = 0; i < blen; ++i)
+ _RamWrite(defDMA + i + 1, toupper(_RamRead(pbuf + i)));
+ while (i++ < 127) // "Zero" the rest of the DMA buffer
+ _RamWrite(defDMA + i, 0);
+ _ccp_initFCB( ParFCB, 18); // Initializes the parameter FCB
+ _ccp_initFCB( SecFCB, 18); // Initializes the secondary FCB
+
+ while (_RamRead(pbuf) == ' ' && blen) { // Skips any leading spaces
+ ++pbuf;
+ --blen;
+ }
+ _ccp_nameToFCB(ParFCB); // Loads the next file parameter onto the parameter FCB
+
+ while (_RamRead(pbuf) == ' ' && blen) { // Skips any leading spaces
+ ++pbuf;
+ --blen;
+ }
+ _ccp_nameToFCB(SecFCB); // Loads the next file parameter onto the secondary FCB
+
+ i = FALSE; // Checks if the command is valid and executes
+
+ switch (_ccp_cnum()) {
+ // Standard CP/M commands
+ case 0: { // DIR
+ _ccp_dir();
+ break;
+ }
+
+ case 1: { // ERA
+ _ccp_era();
+ break;
+ }
+
+ case 2: { // TYPE
+ i = _ccp_type();
+ break;
+ }
+
+ case 3: { // SAVE
+ i = _ccp_save();
+ break;
+ }
+
+ case 4: { // REN
+ _ccp_ren();
+ break;
+ }
+
+ case 5: { // USER
+ i = _ccp_user();
+ break;
+ }
+
+ // Extra CCP commands
+ case 6: { // CLS
+ _clrscr();
+ break;
+ }
+
+ case 7: { // DEL is an alias to ERA
+ _ccp_era();
+ break;
+ }
+
+ case 8: { // EXIT
+ _puts( "Terminating RunCPM.\r\n");
+ _puts( "CPU Halted.\r\n");
+ Status = 1;
+ break;
+ }
+
+ case 9: { // PAGE
+ i = _ccp_page();
+ break;
+ }
+
+ case 10: { // VOL
+ i = _ccp_vol();
+ break;
+ }
+
+ case 11: { // HELP
+ i = _ccp_hlp();
+ break;
+ }
+
+ // External/Lua commands
+ case 255: { // It is an external command
+ i = _ccp_ext();
+#ifdef HASLUA
+ if (i)
+ i = _ccp_lua();
+#endif // ifdef HASLUA
+ break;
+ }
+
+ default: {
+ i = TRUE;
+ break;
+ }
+ } // switch
+ cDrive = oDrive = curDrive; // Restore cDrive and oDrive
+ if (i)
+ _ccp_cmdError();
+ }
+ if ((Status == 1) || (Status == 2))
+ break;
+ }
+ _puts("\r\n");
+} // _ccp
+
+#endif // ifndef CCP_H
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/console.h b/runcpm-rp2040-dvi-usb/runcpm-pico/console.h
new file mode 100644
index 000000000..1e9cf168b
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/console.h
@@ -0,0 +1,64 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef CONSOLE_H
+#define CONSOLE_H
+
+extern int _kbhit(void);
+uint8_t _getch(void);
+void _putch(uint8 ch);
+
+/* see main.c for definition */
+
+uint8 mask8bit = 0x7f; // TO be used for masking 8 bit characters (XMODEM related)
+ // If set to 0x7f, RunCPM masks the 8th bit of characters sent
+ // to the console. This is the standard CP/M behavior.
+ // If set to 0xff, RunCPM passes 8 bit characters. This is
+ // required for XMODEM to work.
+ // Use the CONSOLE7 and CONSOLE8 programs to change this on the fly.
+
+uint8 _chready(void) // Checks if there's a character ready for input
+{
+ return(_kbhit() ? 0xff : 0x00);
+}
+
+uint8 _getchNB(void) // Gets a character, non-blocking, no echo
+{
+ return(_kbhit() ? _getch() : 0x00);
+}
+
+void _putcon(uint8 ch) // Puts a character
+{
+ _putch(ch & mask8bit);
+}
+
+void _puts(const char* str) // Puts a \0 terminated string
+{
+ while (*str)
+ _putcon(*(str++));
+}
+
+void _puthex8(uint8 c) // Puts a HH hex string
+{
+ _putcon(tohex(c >> 4));
+ _putcon(tohex(c & 0x0f));
+}
+
+void _puthex16(uint16 w) // puts a HHHH hex string
+{
+ _puthex8(w >> 8);
+ _puthex8(w & 0x00ff);
+}
+
+void _putdec(uint16_t w) {
+ char buf[] = " 0";
+ size_t i=sizeof(buf)-1;
+ while(w) {
+ assert(i > 0);
+ buf[--i] = '0' + (w % 10);
+ w /= 10;
+ }
+ _puts(buf);
+}
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/cpm.h b/runcpm-rp2040-dvi-usb/runcpm-pico/cpm.h
new file mode 100644
index 000000000..b580a3cc9
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/cpm.h
@@ -0,0 +1,1782 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef CPM_H
+#define CPM_H
+
+enum eBIOSFunc {
+// CP/M 2.2 Stuff
+ B_BOOT = 0,
+ B_WBOOT = 3,
+ B_CONST = 6,
+ B_CONIN = 9,
+ B_CONOUT = 12,
+ B_LIST = 15,
+ B_AUXOUT = 18,
+ B_READER = 21,
+ B_HOME = 24,
+ B_SELDSK = 27,
+ B_SETTRK = 30,
+ B_SETSEC = 33,
+ B_SETDMA = 36,
+ B_READ = 39,
+ B_WRITE = 42,
+ B_LISTST = 45,
+ B_SECTRAN = 48,
+// CP/M 3.0 Stuff
+ B_CONOST = 51,
+ B_AUXIST = 54,
+ B_AUXOST = 57,
+ B_DEVTBL = 60,
+ B_DEVINI = 63,
+ B_DRVTBL = 66,
+ B_MULTIO = 69,
+ B_FLUSH = 72,
+ B_MOVE = 75,
+ B_TIME = 78,
+ B_SELMEM = 81,
+ B_SETBNK = 84,
+ B_XMOVE = 87,
+ B_USERF = 90, // Used by internal CCP to return to prompt
+ B_RESERV1 = 93,
+ B_RESERV2 = 96
+};
+
+enum eBDOSFunc {
+// CP/M 2.2 Stuff
+ P_TERMCPM = 0,
+ C_READ = 1,
+ C_WRITE = 2,
+ A_READ = 3,
+ A_WRITE = 4,
+ L_WRITE = 5,
+ C_RAWIO = 6,
+ A_STATIN = 7,
+ A_STATOUT = 8,
+ C_WRITESTR = 9,
+ C_READSTR = 10,
+ C_STAT = 11,
+ S_BDOSVER = 12,
+ DRV_ALLRESET = 13,
+ DRV_SET = 14,
+ F_OPEN = 15,
+ F_CLOSE = 16,
+ F_SFIRST = 17,
+ F_SNEXT = 18,
+ F_DELETE = 19,
+ F_READ = 20,
+ F_WRITE = 21,
+ F_MAKE = 22,
+ F_RENAME = 23,
+ DRV_LOGINVEC = 24,
+ DRV_GET = 25,
+ F_DMAOFF = 26,
+ DRV_ALLOCVEC = 27,
+ DRV_SETRO = 28,
+ DRV_ROVEC = 29,
+ F_ATTRIB = 30,
+ DRV_PDB = 31,
+ F_USERNUM = 32,
+ F_READRAND = 33,
+ F_WRITERAND = 34,
+ F_SIZE = 35,
+ F_RANDREC = 36,
+ DRV_RESET = 37,
+ DRV_ACCESS = 38, // This is an MP/M function that is not supported under CP/M 3.
+ DRV_FREE = 39, // This is an MP/M function that is not supported under CP/M 3.
+ F_WRITEZF = 40,
+// CP/M 3.0 Stuff
+ F_TESTWRITE = 41,
+ F_LOCKFILE = 42,
+ F_UNLOCKFILE = 43,
+ F_MULTISEC = 44,
+ F_ERRMODE = 45,
+ DRV_SPACE = 46,
+ P_CHAIN = 47,
+ DRV_FLUSH = 48,
+ S_SCB = 49,
+ S_BIOS = 50,
+ P_LOAD = 59,
+ S_RSX = 60,
+ F_CLEANUP = 98,
+ F_TRUNCATE = 99,
+ DRV_SETLABEL = 100,
+ DRV_GETLABEL = 101,
+ F_TIMEDATE = 102,
+ F_WRITEXFCB = 103,
+ T_SET = 104,
+ T_GET = 105,
+ F_PASSWD = 106,
+ S_SERIAL = 107,
+ P_CODE = 108,
+ C_MODE = 109,
+ C_DELIMIT = 110,
+ C_WRITEBLK = 111,
+ L_WRITEBLK = 112,
+ F_PARSE = 152,
+// RunCPM Stuff
+ F_RUNLUA = 254
+};
+
+/* see main.c for definition */
+
+#define JP 0xc3
+#define CALL 0xcd
+#define RET 0xc9
+#define INa 0xdb // Triggers a BIOS call
+#define OUTa 0xd3 // Triggers a BDOS call
+
+/* set up full PUN and LST filenames to be on drive A: user 0 */
+#ifdef USE_PUN
+char pun_file[17] = {'A', FOLDERCHAR, '0', FOLDERCHAR, 'P', 'U', 'N', '.', 'T', 'X', 'T', 0};
+
+#endif // ifdef USE_PUN
+#ifdef USE_LST
+char lst_file[17] = {'A', FOLDERCHAR, '0', FOLDERCHAR, 'L', 'S', 'T', '.', 'T', 'X', 'T', 0};
+
+#endif // ifdef USE_LST
+
+#ifdef PROFILE
+unsigned long time_start = 0;
+unsigned long time_now = 0;
+
+#endif // ifdef PROFILE
+
+void _PatchCPM(void) {
+ uint16 i;
+
+ // ********** Patch CP/M page zero into the memory **********
+
+ /* BIOS entry point */
+ _RamWrite(0x0000, JP); /* JP BIOS+3 (warm boot) */
+ _RamWrite16(0x0001, BIOSjmppage + 3);
+ if (Status != 2) {
+ /* IOBYTE - Points to Console */
+ _RamWrite( IOByte, 0x3D);
+
+ /* Current drive/user - A:/0 */
+ _RamWrite( DSKByte, 0x00);
+ }
+ /* BDOS entry point (0x0005) */
+ _RamWrite(0x0005, JP);
+ _RamWrite16(0x0006, BDOSjmppage + 0x06);
+
+ // ********** Patch CP/M Version into the memory so the CCP can see it
+ _RamWrite16(BDOSjmppage, 0x1600);
+ _RamWrite16(BDOSjmppage + 2, 0x0000);
+ _RamWrite16(BDOSjmppage + 4, 0x0000);
+
+ // Patches in the BDOS jump destination
+ _RamWrite( BDOSjmppage + 6, JP);
+ _RamWrite16(BDOSjmppage + 7, BDOSpage);
+
+ // Patches in the BDOS page content
+ _RamWrite( BDOSpage, INa);
+ _RamWrite( BDOSpage + 1, 0xFF);
+ _RamWrite( BDOSpage + 2, RET);
+
+ // Patches in the BIOS jump destinations
+ for (i = 0; i < 99; i = i + 3) {
+ _RamWrite( BIOSjmppage + i, JP);
+ _RamWrite16(BIOSjmppage + i + 1, BIOSpage + i);
+ }
+
+ // Patches in the BIOS page content
+ for (i = 0; i < 99; i = i + 3) {
+ _RamWrite( BIOSpage + i, OUTa);
+ _RamWrite( BIOSpage + i + 1, 0xFF);
+ _RamWrite( BIOSpage + i + 2, RET);
+ }
+ // ********** Patch CP/M (fake) Disk Paramater Block after the BDOS call entry **********
+ i = DPBaddr;
+ _RamWrite( i++, 64); // spt - Sectors Per Track
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 5); // bsh - Data allocation "Block Shift Factor"
+ _RamWrite( i++, 0x1F); // blm - Data allocation Block Mask
+ _RamWrite( i++, 1); // exm - Extent Mask
+ _RamWrite( i++, 0xFF); // dsm - Total storage capacity of the disk drive
+ _RamWrite( i++, 0x07);
+ _RamWrite( i++, 255); // drm - Number of the last directory entry
+ _RamWrite( i++, 3);
+ _RamWrite( i++, 0xFF); // al0
+ _RamWrite( i++, 0x00); // al1
+ _RamWrite( i++, 0); // cks - Check area Size
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0x02); // off - Number of system reserved tracks at the beginning of the ( logical ) disk
+ _RamWrite( i++, 0x00);
+ blockShift = _RamRead(DPBaddr + 2);
+ blockMask = _RamRead(DPBaddr + 3);
+ extentMask = _RamRead(DPBaddr + 4);
+ numAllocBlocks = _RamRead16(DPBaddr + 5) + 1;
+ extentsPerDirEntry = extentMask + 1;
+
+ // ********** Patch CP/M (fake) Disk Parameter Header after the Disk Parameter Block **********
+ _RamWrite( i++, 0); // Addr of the sector translation table
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0); // Workspace
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0x80); // Addr of the Sector Buffer
+ _RamWrite( i++, 0);
+ _RamWrite( i++, LOW_REGISTER(DPBaddr)); // Addr of the DPB Disk Parameter Block
+ _RamWrite( i++, HIGH_REGISTER(DPBaddr));
+ _RamWrite( i++, 0); // Addr of the Directory Checksum Vector
+ _RamWrite( i++, 0);
+ _RamWrite( i++, 0); // Addr of the Allocation Vector
+ _RamWrite( i++, 0);
+
+ //
+
+ // figure out the number of the first allocation block
+ // after the directory for the phoney allocation block
+ // list in _findnext()
+ firstBlockAfterDir = 0;
+ i = 0x80;
+
+ while (_RamRead(DPBaddr + 9) & i) {
+ firstBlockAfterDir++;
+ i >>= 1;
+ }
+ if (_RamRead(DPBaddr + 9) == 0xFF) {
+ i = 0x80;
+
+ while (_RamRead(DPBaddr + 10) & i) {
+ firstBlockAfterDir++;
+ i >>= 1;
+ }
+ }
+ physicalExtentBytes = logicalExtentBytes * (extentMask + 1);
+} // _PatchCPM
+
+#ifdef DEBUGLOG
+uint8 LogBuffer[128];
+
+void _logRegs(void) {
+ uint8 J, I;
+ uint8 Flags[9] = {'S', 'Z', '5', 'H', '3', 'P', 'N', 'C'};
+ uint8 c = HIGH_REGISTER(AF);
+
+ if ((c < 32) || (c > 126))
+ c = 46;
+
+ for (J = 0, I = LOW_REGISTER(AF); J < 8; ++J, I <<= 1)
+ Flags[J] = I & 0x80 ? Flags[J] : '.';
+ sprintf((char *)LogBuffer, " BC:%04x DE:%04x HL:%04x AF:%02x(%c)|%s| IX:%04x IY:%04x SP:%04x PC:%04x\n",
+ WORD16(BC), WORD16(DE), WORD16(HL), HIGH_REGISTER(AF), c, Flags, WORD16(IX), WORD16(IY), WORD16(SP), WORD16(PC));
+ _sys_logbuffer(LogBuffer);
+} // _logRegs
+
+void _logMem(uint16 address, uint8 amount) { // Amount = number of 16 bytes lines, so 1 CP/M block = 8, not 128
+ uint8 i, m, c, pos;
+ uint8 head = 8;
+ uint8 hexa[] = "0123456789ABCDEF";
+
+ for (i = 0; i < amount; ++i) {
+ pos = 0;
+
+ for (m = 0; m < head; ++m)
+ LogBuffer[pos++] = ' ';
+ sprintf((char *)LogBuffer, " %04x: ", address);
+
+ for (m = 0; m < 16; ++m) {
+ c = _RamRead(address++);
+ LogBuffer[pos++] = hexa[c >> 4];
+ LogBuffer[pos++] = hexa[c & 0x0f];
+ LogBuffer[pos++] = ' ';
+ LogBuffer[m + head + 48] = c > 31 && c < 127 ? c : '.';
+ }
+ pos += 16;
+ LogBuffer[pos++] = 0x0a;
+ LogBuffer[pos++] = 0x00;
+ _sys_logbuffer(LogBuffer);
+ }
+} // _logMem
+
+void _logChar(char *txt, uint8 c) {
+ uint8 asc[2];
+
+ asc[0] = c > 31 && c < 127 ? c : '.';
+ asc[1] = 0;
+ sprintf((char *)LogBuffer, " %s = %02xh:%3d (%s)\n", txt, c, c, asc);
+ _sys_logbuffer(LogBuffer);
+} // _logChar
+
+void _logBiosIn(uint8 ch) {
+#ifdef LOGBIOS_NOT
+ if (ch == LOGBIOS_NOT)
+ return;
+#endif // ifdef LOGBIOS_NOT
+#ifdef LOGBIOS_ONLY
+ if (ch != LOGBIOS_ONLY)
+ return;
+#endif // ifdef LOGBIOS_ONLY
+ static const char *BIOSCalls[33] =
+ {
+ "boot", "wboot", "const", "conin", "conout", "list", "punch/aux", "reader", "home", "seldsk", "settrk", "setsec", "setdma",
+ "read", "write", "listst", "sectran", "conost", "auxist", "auxost", "devtbl", "devini", "drvtbl", "multio", "flush", "move",
+ "time", "selmem", "setbnk", "xmove", "userf", "reserv1", "reserv2"
+ };
+ int index = ch / 3;
+
+ if (index < 18) {
+ sprintf((char *)LogBuffer, "\nBios call: %3d/%02xh (%s) IN:\n", ch, ch, BIOSCalls[index]);
+ _sys_logbuffer(LogBuffer);
+ } else {
+ sprintf((char *)LogBuffer, "\nBios call: %3d/%02xh IN:\n", ch, ch);
+ _sys_logbuffer(LogBuffer);
+ }
+ _logRegs();
+} // _logBiosIn
+
+void _logBiosOut(uint8 ch) {
+#ifdef LOGBIOS_NOT
+ if (ch == LOGBIOS_NOT)
+ return;
+#endif // ifdef LOGBIOS_NOT
+#ifdef LOGBIOS_ONLY
+ if (ch != LOGBIOS_ONLY)
+ return;
+#endif // ifdef LOGBIOS_ONLY
+ sprintf((char *)LogBuffer, " OUT:\n");
+ _sys_logbuffer(LogBuffer);
+ _logRegs();
+} // _logBiosOut
+
+void _logBdosIn(uint8 ch) {
+#ifdef LOGBDOS_NOT
+ if (ch == LOGBDOS_NOT)
+ return;
+#endif // ifdef LOGBDOS_NOT
+#ifdef LOGBDOS_ONLY
+ if (ch != LOGBDOS_ONLY)
+ return;
+#endif // ifdef LOGBDOS_ONLY
+ uint16 address = 0;
+ uint8 size = 0;
+
+ static const char *CPMCalls[41] =
+ {
+ "System Reset", "Console Input", "Console Output", "Reader Input", "Punch Output", "List Output", "Direct I/O",
+ "Get IOByte", "Set IOByte", "Print String", "Read Buffered", "Console Status", "Get Version", "Reset Disk",
+ "Select Disk", "Open File", "Close File", "Search First", "Search Next", "Delete File", "Read Sequential",
+ "Write Sequential", "Make File", "Rename File", "Get Login Vector", "Get Current Disk", "Set DMA Address",
+ "Get Alloc", "Write Protect Disk", "Get R/O Vector", "Set File Attr", "Get Disk Params", "Get/Set User",
+ "Read Random", "Write Random", "Get File Size", "Set Random Record", "Reset Drive", "N/A", "N/A",
+ "Write Random 0 fill"
+ };
+
+ if (ch < 41) {
+ sprintf((char *)LogBuffer, "\nBdos call: %3d/%02xh (%s) IN from 0x%04x:\n", ch, ch, CPMCalls[ch], _RamRead16(SP) - 3);
+ _sys_logbuffer(LogBuffer);
+ } else {
+ sprintf((char *)LogBuffer, "\nBdos call: %3d/%02xh IN from 0x%04x:\n", ch, ch, _RamRead16(SP) - 3);
+ _sys_logbuffer(LogBuffer);
+ }
+ _logRegs();
+
+ switch (ch) {
+ case 2:
+ case 4:
+ case 5:
+ case 6: {
+ _logChar("E", LOW_REGISTER(DE));
+ break;
+ }
+
+ case 9:
+ case 10: {
+ address = DE;
+ size = 8;
+ break;
+ }
+
+ case 15:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 22:
+ case 23:
+ case 30:
+ case 35:
+ case 36: {
+ address = DE;
+ size = 3;
+ break;
+ }
+
+ case 20:
+ case 21:
+ case 33:
+ case 34:
+ case 40: {
+ address = DE;
+ size = 3;
+ _logMem(address, size);
+ sprintf((char *)LogBuffer, "\n");
+ _sys_logbuffer(LogBuffer);
+ address = dmaAddr;
+ size = 8;
+ break;
+ }
+
+ default: {
+ break;
+ }
+ } // switch
+ if (size)
+ _logMem(address, size);
+} // _logBdosIn
+
+void _logBdosOut(uint8 ch) {
+#ifdef LOGBDOS_NOT
+ if (ch == LOGBDOS_NOT)
+ return;
+#endif // ifdef LOGBDOS_NOT
+#ifdef LOGBDOS_ONLY
+ if (ch != LOGBDOS_ONLY)
+ return;
+#endif // ifdef LOGBDOS_ONLY
+ uint16 address = 0;
+ uint8 size = 0;
+
+ sprintf((char *)LogBuffer, " OUT:\n");
+ _sys_logbuffer(LogBuffer);
+ _logRegs();
+
+ switch (ch) {
+ case 1:
+ case 3:
+ case 6: {
+ _logChar("A", HIGH_REGISTER(AF));
+ break;
+ }
+
+ case 10: {
+ address = DE;
+ size = 8;
+ break;
+ }
+
+ case 20:
+ case 21:
+ case 33:
+ case 34:
+ case 40: {
+ address = DE;
+ size = 3;
+ _logMem(address, size);
+ sprintf((char *)LogBuffer, "\n");
+ _sys_logbuffer(LogBuffer);
+ address = dmaAddr;
+ size = 8;
+ break;
+ }
+
+ case 26: {
+ address = dmaAddr;
+ size = 8;
+ break;
+ }
+
+ case 35:
+ case 36: {
+ address = DE;
+ size = 3;
+ break;
+ }
+
+ default: {
+ break;
+ }
+ } // switch
+ if (size)
+ _logMem(address, size);
+} // _logBdosOut
+#endif // ifdef DEBUGLOG
+
+void _Bios(void) {
+ uint8 ch = LOW_REGISTER(PCX);
+ uint8 disk[2] = {'A', 0};
+
+#ifdef DEBUGLOG
+ _logBiosIn(ch);
+#endif
+
+ switch (ch) {
+ case B_BOOT: {
+ Status = 1; // 0 - Ends RunCPM
+ break;
+ }
+ case B_WBOOT: {
+ Status = 2; // 1 - Back to CCP
+ break;
+ }
+ case B_CONST: { // 2 - Console status
+ SET_HIGH_REGISTER(AF, _chready());
+ break;
+ }
+ case B_CONIN: { // 3 - Console input
+ SET_HIGH_REGISTER(AF, _getch());
+#ifdef DEBUG
+ if (HIGH_REGISTER(AF) == 4)
+ Debug = 1;
+#endif // ifdef DEBUG
+ break;
+ }
+ case B_CONOUT: { // 4 - Console output
+ _putcon(LOW_REGISTER(BC));
+ break;
+ }
+ case B_LIST: { // 5 - List output
+ break;
+ }
+ case B_AUXOUT: { // 6 - Aux/Punch output
+ break;
+ }
+ case B_READER: { // 7 - Reader input (returns 0x1a = device not implemented)
+ SET_HIGH_REGISTER(AF, 0x1a);
+ break;
+ }
+ case B_HOME: { // 8 - Home disk head
+ break;
+ }
+ case B_SELDSK: { // 9 - Select disk drive
+ disk[0] += LOW_REGISTER(BC);
+ HL = 0x0000;
+ if (_sys_select(&disk[0]))
+ HL = DPHaddr;
+ break;
+ }
+ case B_SETTRK: { // 10 - Set track number
+ break;
+ }
+ case B_SETSEC: { // 11 - Set sector number
+ break;
+ }
+ case B_SETDMA: { // 12 - Set DMA address
+ HL = BC;
+ dmaAddr = BC;
+ break;
+ }
+ case B_READ: { // 13 - Read selected sector
+ SET_HIGH_REGISTER(AF, 0x00);
+ break;
+ }
+ case B_WRITE: { // 14 - Write selected sector
+ SET_HIGH_REGISTER(AF, 0x00);
+ break;
+ }
+ case B_LISTST: { // 15 - Get list device status
+ SET_HIGH_REGISTER(AF, 0x0ff);
+ break;
+ }
+ case B_SECTRAN: { // 16 - Sector translate
+ HL = BC; // HL=BC=No translation (1:1)
+ break;
+ }
+ case B_CONOST: { // 17 - Return status of current screen output device
+ SET_HIGH_REGISTER(AF, 0x0ff);
+ break;
+ }
+ case B_AUXIST: { // 18 - Return status of current auxiliary input device
+ SET_HIGH_REGISTER(AF, 0x00);
+ break;
+ }
+ case B_AUXOST: { // 19 - Return status of current auxiliary output device
+ SET_HIGH_REGISTER(AF, 0x00);
+ break;
+ }
+ case B_DEVTBL: { // 20 - Return the address of the devices table, or 0 if not implemented
+ HL = 0x0000;
+ break;
+ }
+ case B_DEVINI: { // 21 - Reinitialise character device number C
+ break;
+ }
+ case B_DRVTBL: { // 22 - Return the address of the drive table
+ HL = 0x0FFFF;
+ break;
+ }
+ case B_MULTIO: { // 23 - Notify the BIOS of multi sector transfer
+ break;
+ }
+ case B_FLUSH: { // 24 - Write any pending data to disc
+ SET_HIGH_REGISTER(AF, 0x00);
+ break;
+ }
+ case B_MOVE: { // 25 - Move a block of memory
+ if (!isXmove)
+ srcBank = dstBank = curBank;
+ while (BC--)
+ RAM[HL++ * dstBank] = RAM[DE++ * srcBank];
+ isXmove = FALSE;
+ break;
+ }
+ case B_TIME: { // 26 - Get/Set SCB time
+ break;
+ }
+ case B_SELMEM: { // 27 - Select memory bank
+ curBank = HIGH_REGISTER(AF);
+ break;
+ }
+ case B_SETBNK: { // 28 - Set the bank to be used for the next read/write sector operation
+ ioBank = HIGH_REGISTER(AF);
+ }
+ case B_XMOVE: { // 29 - Preload banks for MOVE
+ srcBank = LOW_REGISTER(BC);
+ dstBank = HIGH_REGISTER(BC);
+ isXmove = TRUE;
+ break;
+ }
+ case B_USERF: { // 30 - This allows programs ending in RET return to internal CCP
+ Status = 3;
+ break;
+ }
+ case B_RESERV1:
+ case B_RESERV2: {
+ break;
+ }
+ default: {
+#ifdef DEBUG // Show unimplemented BIOS calls only when debugging
+ _puts("\r\nUnimplemented BIOS call.\r\n");
+ _puts("C = 0x");
+ _puthex8(ch);
+ _puts("\r\n");
+#endif // ifdef DEBUG
+ break;
+ }
+ } // switch
+#ifdef DEBUGLOG
+ _logBiosOut(ch);
+#endif
+} // _Bios
+
+void _Bdos(void) {
+ uint16 i;
+ uint8 j, chr, ch = LOW_REGISTER(BC);
+
+#ifdef DEBUGLOG
+ _logBdosIn(ch);
+#endif
+
+ HL = 0x0000; // HL is reset by the BDOS
+ SET_LOW_REGISTER(BC, LOW_REGISTER(DE)); // C ends up equal to E
+
+ switch (ch) {
+ /*
+ C = 0 : System reset
+ Doesn't return. Reloads CP/M
+ */
+ case P_TERMCPM: {
+ Status = 2; // Same as call to "BOOT"
+ break;
+ }
+
+ /*
+ C = 1 : Console input
+ Gets a char from the console
+ Returns: A=Char
+ */
+ case C_READ: {
+ HL = _getche();
+#ifdef DEBUG
+ if (HL == 4)
+ Debug = 1;
+#endif // ifdef DEBUG
+ break;
+ }
+
+ /*
+ C = 2 : Console output
+ E = Char
+ Sends the char in E to the console
+ */
+ case C_WRITE: {
+ _putcon(LOW_REGISTER(DE));
+ break;
+ }
+
+ /*
+ C = 3 : Auxiliary (Reader) input
+ Returns: A=Char
+ */
+ case A_READ: {
+ HL = 0x1a;
+ break;
+ }
+
+ /*
+ C = 4 : Auxiliary (Punch) output
+ */
+ case A_WRITE: {
+#ifdef USE_PUN
+ if (!pun_open) {
+ pun_dev = _sys_fopen_w((uint8 *)pun_file);
+ pun_open = TRUE;
+ }
+ if (pun_dev) {
+ _sys_fputc(LOW_REGISTER(DE), pun_dev);
+ }
+#endif // ifdef USE_PUN
+ break;
+ }
+
+ /*
+ C = 5 : Printer output
+ */
+ case L_WRITE: {
+#ifdef USE_LST
+ if (!lst_open) {
+ lst_dev = _sys_fopen_w((uint8 *)lst_file);
+ lst_open = TRUE;
+ }
+ if (lst_dev)
+ _sys_fputc(LOW_REGISTER(DE), lst_dev);
+#endif // ifdef USE_LST
+ break;
+ }
+
+ /*
+ C = 6 : Direct console IO
+ E = 0xFF : Checks for char available and returns it, or 0x00 if none (read)
+ ToDo E = 0xFE : Return console input status. Zero if no character is waiting, nonzero otherwise. (CPM3)
+ ToDo E = 0xFD : Wait until a character is ready, return it without echoing. (CPM3)
+ E = char : Outputs char (write)
+ Returns: A=Char or 0x00 (on read)
+ */
+ case C_RAWIO: {
+ if (LOW_REGISTER(DE) == 0xff) {
+ HL = _getchNB();
+#ifdef DEBUG
+ if (HL == 4)
+ Debug = 1;
+#endif // ifdef DEBUG
+ } else {
+ _putcon(LOW_REGISTER(DE));
+ }
+ break;
+ }
+
+ /*
+ C = 7 : Get IOBYTE (CPM2)
+ Gets the system IOBYTE
+ Returns: A = IOBYTE (CPM2)
+ ToDo REPLACE with
+ C = 7 : Auxiliary Input status (CPM3)
+ 0FFh is returned if the Auxiliary Input device has a character ready; otherwise 0 is returned.
+ Returns: A=0 or 0FFh (CPM3)
+ */
+ case A_STATIN: {
+ HL = _RamRead(0x0003);
+ break;
+ }
+
+ /*
+ C = 8 : Set IOBYTE (CPM2)
+ E = IOBYTE
+ Sets the system IOBYTE to E
+ ToDo REPLACE with
+ C = 8 : Auxiliary Output status (CPM3)
+ 0FFh is returned if the Auxiliary Output device is ready for characters; otherwise 0 is returned.
+ Returns: A=0 or 0FFh (CPM3)
+ */
+ case A_STATOUT: {
+ _RamWrite(0x0003, LOW_REGISTER(DE));
+ break;
+ }
+
+ /*
+ C = 9 : Output string
+ DE = Address of string
+ Sends the $ terminated string pointed by (DE) to the screen
+ */
+ case C_WRITESTR: {
+ while ((ch = _RamRead(DE++)) != '$')
+ _putcon(ch);
+ break;
+ }
+
+ /*
+ C = 10 (0Ah) : Buffered input
+ DE = Address of buffer
+ ToDo DE = 0 Use DMA address (CPM3) AND
+ DE=address: DE=0:
+ buffer: DEFB size buffer: DEFB size
+ DEFB ? DEFB len
+ bytes bytes
+ Reads (DE) bytes from the console
+ Returns: A = Number of chars read
+ DE) = First char
+ */
+ case C_READSTR: {
+ uint16 chrsMaxIdx = WORD16(DE); //index to max number of characters
+ uint16 chrsCntIdx = (chrsMaxIdx + 1) & 0xFFFF; //index to number of characters read
+ uint16 chrsIdx = (chrsCntIdx + 1) & 0xFFFF; //index to characters
+ //printf("\n\r chrsMaxIdx: %0X, chrsCntIdx: %0X", chrsMaxIdx, chrsCntIdx);
+
+ static uint8 *last = 0;
+ if (!last)
+ last = (uint8*)calloc(1,256); //allocate one (for now!)
+
+#ifdef PROFILE
+ if (time_start != 0) {
+ time_now = millis();
+ printf(": %ld\n", time_now - time_start);
+ time_start = 0;
+ }
+#endif // ifdef PROFILE
+ uint8 chrsMax = _RamRead(chrsMaxIdx); // Gets the max number of characters that can be read
+ uint8 chrsCnt = 0; // this is the number of characters read
+ uint8 curCol = 0; //this is the cursor column (relative to where it started)
+
+ while (chrsMax) {
+ // pre-backspace, retype & post backspace counts
+ uint8 preBS = 0, reType = 0, postBS = 0;
+
+ chr = _getch(); //input a character
+
+ if (chr == 1) { // ^A - Move cursor one character to the left
+ if (curCol > 0) {
+ preBS++; //backspace one
+ } else {
+ _putcon('\007'); //ring the bell
+ }
+ }
+
+ if (chr == 2) { // ^B - Toggle between beginning & end of line
+ if (curCol) {
+ preBS = curCol; //move to beginning
+ } else {
+ reType = chrsCnt - curCol; //move to EOL
+ }
+ }
+
+ if ((chr == 3) && (chrsCnt == 0)) { // ^C - Abort string input
+ _puts("^C");
+ Status = 2;
+ break;
+ }
+
+#ifdef DEBUG
+ if (chr == 4) { // ^D - DEBUG
+ Debug = 1;
+ break;
+ }
+#endif // ifdef DEBUG
+
+ if (chr == 5) { // ^E - goto beginning of next line
+ _putcon('\n');
+ preBS = curCol;
+ reType = postBS = chrsCnt;
+ }
+
+ if (chr == 6) { // ^F - Move the cursor one character forward
+ if (curCol < chrsCnt) {
+ reType++;
+ } else {
+ _putcon('\007'); //ring the bell
+ }
+ }
+
+ if (chr == 7) { // ^G - Delete character at cursor
+ if (curCol < chrsCnt) {
+ //delete this character from buffer
+ for (i = curCol, j = i + 1; j < chrsCnt; i++, j++) {
+ ch = _RamRead(((chrsIdx + j) & 0xFFFF));
+ _RamWrite((chrsIdx + i) & 0xFFFF, ch);
+ }
+ reType = postBS = chrsCnt - curCol;
+ chrsCnt--;
+ } else {
+ _putcon('\007'); //ring the bell
+ }
+ }
+
+ if (((chr == 0x08) || (chr == 0x7F))) { // ^H and DEL - Delete one character to left of cursor
+ if (curCol > 0) { //not at BOL
+ if (curCol < chrsCnt) { //not at EOL
+ //delete previous character from buffer
+ for (i = curCol, j = i - 1; i < chrsCnt; i++, j++) {
+ ch = _RamRead(((chrsIdx + i) & 0xFFFF));
+ _RamWrite((chrsIdx + j) & 0xFFFF, ch);
+ }
+ preBS++; //pre-backspace one
+ //note: does one extra to erase EOL
+ reType = postBS = chrsCnt - curCol + 1;
+ } else {
+ preBS = reType = postBS = 1;
+ }
+ chrsCnt--;
+ } else {
+ _putcon('\007'); //ring the bell
+ }
+ }
+
+ if ((chr == 0x0A) || (chr == 0x0D)) { // ^J and ^M - Ends editing
+#ifdef PROFILE
+ time_start = millis();
+#endif
+ break;
+ }
+
+ if (chr == 0x0B) { // ^K - Delete to EOL from cursor
+ if (curCol < chrsCnt) {
+ reType = postBS = chrsCnt - curCol;
+ chrsCnt = curCol; //truncate buffer to here
+ } else {
+ _putcon('\007'); //ring the bell
+ }
+ }
+
+ if (chr == 18) { // ^R - Retype the command line
+ _puts("#\b\n");
+ preBS = curCol; //backspace to BOL
+ reType = chrsCnt; //retype everything
+ postBS = chrsCnt - curCol; //backspace to cursor column
+ }
+
+ if (chr == 21) { // ^U - delete all characters
+ _puts("#\b\n");
+ preBS = curCol; //backspace to BOL
+ chrsCnt = 0;
+ }
+
+ if (chr == 23) { // ^W - recall last command
+ if (!curCol) { //if at beginning of command line
+ uint8 lastCnt = last[0];
+ if (lastCnt) { //and there's a last command
+ //restore last command
+ for (j = 0; j <= lastCnt; j++) {
+ _RamWrite((chrsCntIdx + j) & 0xFFFF, last[j]);
+ }
+ //retype to greater of chrsCnt & lastCnt
+ reType = (chrsCnt > lastCnt) ? chrsCnt : lastCnt;
+ chrsCnt = lastCnt; //this is the restored length
+ //backspace to end of restored command
+ postBS = reType - chrsCnt;
+ } else {
+ _putcon('\007'); //ring the bell
+ }
+ } else if (curCol < chrsCnt) { //if not at EOL
+ reType = chrsCnt - curCol; //move to EOL
+ }
+ }
+
+ if (chr == 24) { // ^X - delete all character left of the cursor
+ if (curCol > 0) {
+ //move rest of line to beginning of line
+ for (i = 0, j = curCol; j < chrsCnt;i++, j++) {
+ ch = _RamRead(((chrsIdx + j) & 0xFFFF));
+ _RamWrite((chrsIdx +i) & 0xFFFF, ch);
+ }
+ preBS = curCol;
+ reType = chrsCnt;
+ postBS = chrsCnt;
+ chrsCnt -= curCol;
+ } else {
+ _putcon('\007'); //ring the bell
+ }
+ }
+
+ if ((chr >= 0x20) && (chr <= 0x7E)) { //valid character
+ if (curCol < chrsCnt) {
+ //move rest of buffer one character right
+ for (i = chrsCnt, j = i - 1; i > curCol; i--, j--) {
+ ch = _RamRead(((chrsIdx + j) & 0xFFFF));
+ _RamWrite((chrsIdx + i) & 0xFFFF, ch);
+ }
+ }
+ //put the new character in the buffer
+ _RamWrite((chrsIdx + curCol) & 0xffff, chr);
+
+ chrsCnt++;
+ reType = chrsCnt - curCol;
+ postBS = reType - 1;
+ }
+
+ //pre-backspace
+ for (i = 0; i < preBS; i++) {
+ _putcon('\b');
+ curCol--;
+ }
+
+ //retype
+ for (i = 0; i < reType; i++) {
+ if (curCol < chrsCnt) {
+ ch = _RamRead(((chrsIdx + curCol) & 0xFFFF));
+ } else {
+ ch = ' ';
+ }
+ _putcon(ch);
+ curCol++;
+ }
+
+ //post-backspace
+ for (i = 0; i < postBS; i++) {
+ _putcon('\b');
+ curCol--;
+ }
+
+ if (chrsCnt == chrsMax) // Reached the maximum count
+ break;
+ } // while (chrsMax)
+
+ // Save the number of characters read
+ _RamWrite(chrsCntIdx, chrsCnt);
+
+ //if there are characters...
+ if (chrsCnt) {
+ //... then save this as last command
+ for (j = 0; j <= chrsCnt; j++) {
+ last[j] = _RamRead((chrsCntIdx + j) & 0xFFFF);
+ }
+ }
+#if 0
+ printf("\n\r chrsMaxIdx: %0X, chrsMax: %u, chrsCnt: %u", chrsMaxIdx, chrsMax, chrsCnt);
+ for (j = 0; j < chrsCnt + 2; j++) {
+ printf("\n\r chrsMaxIdx[%u]: %0.2x", j, last[j]);
+ }
+#endif
+ _putcon('\r'); // Gives a visual feedback that read ended
+ break;
+ }
+
+ /*
+ C = 11 (0Bh) : Get console status
+ Returns: A=0x00 or 0xFF
+ */
+ case C_STAT: {
+ HL = _chready();
+ break;
+ }
+
+ /*
+ C = 12 (0Ch) : Get version number
+ Returns: B=H=system type, A=L=version number
+ */
+ case S_BDOSVER: {
+ HL = 0x22;
+ break;
+ }
+
+ /*
+ C = 13 (0Dh) : Reset disk system
+ */
+ case DRV_ALLRESET: {
+ roVector = 0; // Make all drives R/W
+ loginVector = 0;
+ dmaAddr = 0x0080;
+ cDrive = 0; // userCode remains unchanged
+ HL = _CheckSUB(); // Checks if there's a $$$.SUB on the boot disk
+ break;
+ }
+
+ /*
+ C = 14 (0Eh) : Select Disk
+ Returns: A=0x00 or 0xFF
+ */
+ case DRV_SET: {
+ oDrive = cDrive;
+ cDrive = LOW_REGISTER(DE);
+ HL = _SelectDisk(LOW_REGISTER(DE) + 1); // +1 here is to allow SelectDisk to be used directly by disk.h as well
+ if (!HL) {
+ oDrive = cDrive;
+ } else {
+ if ((_RamRead(DSKByte) & 0x0f) == cDrive) {
+ cDrive = oDrive = 0;
+ _RamWrite(DSKByte, _RamRead(DSKByte) & 0xf0);
+ } else {
+ cDrive = oDrive;
+ }
+ }
+ break;
+ }
+
+ /*
+ C = 15 (0Fh) : Open file
+ Returns: A=0x00 or 0xFF
+ */
+ case F_OPEN: {
+ HL = _OpenFile(DE);
+ break;
+ }
+
+ /*
+ C = 16 (10h) : Close file
+ */
+ case F_CLOSE: {
+ HL = _CloseFile(DE);
+ break;
+ }
+
+ /*
+ C = 17 (11h) : Search for first
+ */
+ case F_SFIRST: {
+ HL = _SearchFirst(DE, TRUE); // TRUE = Creates a fake dir entry when finding the file
+ break;
+ }
+
+ /*
+ C = 18 (12h) : Search for next
+ */
+ case F_SNEXT: {
+ HL = _SearchNext(DE, TRUE); // TRUE = Creates a fake dir entry when finding the file
+ break;
+ }
+
+ /*
+ C = 19 (13h) : Delete file
+ */
+ case F_DELETE: {
+ HL = _DeleteFile(DE);
+ break;
+ }
+
+ /*
+ C = 20 (14h) : Read sequential
+ DE = address of FCB
+ ToDo under CP/M 3 this can be a multiple of 128 bytes
+ Returns: A = return code
+ */
+ case F_READ: {
+ HL = _ReadSeq(DE);
+ break;
+ }
+
+ /*
+ C = 21 (15h) : Write sequential
+ DE = address of FCB
+ ToDo under CP/M 3 this can be a multiple of 128 bytes
+ Returns: A=return code
+ */
+ case F_WRITE: {
+ HL = _WriteSeq(DE);
+ break;
+ }
+
+ /*
+ C = 22 (16h) : Make file
+ */
+ case F_MAKE: {
+ HL = _MakeFile(DE);
+ break;
+ }
+
+ /*
+ C = 23 (17h) : Rename file
+ */
+ case F_RENAME: {
+ HL = _RenameFile(DE);
+ break;
+ }
+
+ /*
+ C = 24 (18h) : Return log-in vector (active drive map)
+ */
+ case DRV_LOGINVEC: {
+ HL = loginVector; // (todo) improve this
+ break;
+ }
+
+ /*
+ C = 25 (19h) : Return current disk
+ */
+ case DRV_GET: {
+ HL = cDrive;
+ break;
+ }
+
+ /*
+ C = 26 (1Ah) : Set DMA address
+ */
+ case F_DMAOFF: {
+ dmaAddr = DE;
+ break;
+ }
+
+ /*
+ C = 27 (1Bh) : Get ADDR(Alloc)
+ */
+ case DRV_ALLOCVEC: {
+ HL = SCBaddr;
+ break;
+ }
+
+ /*
+ C = 28 (1Ch) : Write protect current disk
+ */
+ case DRV_SETRO: {
+ roVector = roVector | (1 << cDrive);
+ break;
+ }
+
+ /*
+ C = 29 (1Dh) : Get R/O vector
+ */
+ case DRV_ROVEC: {
+ HL = roVector;
+ break;
+ }
+
+ /*
+ C = 30 (1Eh) : Set file attributes (does nothing)
+ */
+ case F_ATTRIB: {
+ HL = 0;
+ break;
+ }
+
+ /*
+ C = 31 (1Fh) : Get ADDR(Disk Parms)
+ */
+ case DRV_PDB: {
+ HL = DPBaddr;
+ break;
+ }
+
+ /*
+ C = 32 (20h) : Get/Set user code
+ */
+ case F_USERNUM: {
+ if (LOW_REGISTER(DE) == 0xFF) {
+ HL = userCode;
+ } else {
+ _SetUser(DE);
+ }
+ break;
+ }
+
+ /*
+ C = 33 (21h) : Read random
+ ToDo under CPM3, if A returns 0xFF, H returns hardware error
+ */
+ case F_READRAND: {
+ HL = _ReadRand(DE);
+ break;
+ }
+
+ /*
+ C = 34 (22h) : Write random
+ ToDo under CPM3, if A returns 0xFF, H returns hardware error
+ */
+ case F_WRITERAND: {
+ HL = _WriteRand(DE);
+ break;
+ }
+
+ /*
+ C = 35 (23h) : Compute file size
+ */
+ case F_SIZE: {
+ HL = _GetFileSize(DE);
+ break;
+ }
+
+ /*
+ C = 36 (24h) : Set random record
+ */
+ case F_RANDREC: {
+ HL = _SetRandom(DE);
+ break;
+ }
+
+ /*
+ C = 37 (25h) : Reset drive
+ */
+ case DRV_RESET: {
+ roVector = roVector & ~DE;
+ break;
+ }
+
+ /* ********* Function 38: Not supported by CP/M 2.2 *********
+ ********* Function 39: Not supported by CP/M 2.2 *********
+ ********* (todo) Function 40: Write random with zero fill *********
+ */
+
+ /*
+ ToDo C = 38 (26h) : Access drives (CPM3)
+ This is an MP/M function that is not supported under CP/M 3. If called, the file
+ system returns a zero In register A indicating that the access request is successful.
+ */
+ case DRV_ACCESS: {
+ break;
+ }
+
+ /*
+ ToDo C = 39 (27h) : Free drives (CPM3)
+ This is an MP/M function that is not supported under CP/M 3. If called, the file
+ system returns a zero In register A indicating that the access request is successful.
+ */
+ case DRV_FREE: {
+ break;
+ }
+
+ /*
+ C = 40 (28h) : Write random with zero fill (we have no disk blocks, so just write random)
+ DE = address of FCB
+ Returns: A = return code
+ H = Physical Error
+ */
+ case F_WRITEZF: {
+ HL = _WriteRand(DE);
+ break;
+ }
+
+ /*
+ ToDo: C = 41 (29h) : Test and Write Record (CPM3)
+ DE = address of FCB
+ Returns: A = return code
+ H = Physical Error
+ */
+ case F_TESTWRITE: {
+ break;
+ }
+
+ /*
+ ToDo: C = 42 (2Ah) : Lock Record (CPM3)
+ DE = address of FCB
+ Returns: A = return code
+ H = Physical Error
+ */
+ case F_LOCKFILE: {
+ break;
+ }
+
+ /*
+ ToDo: C = 43 (2Bh) : Unlock Record (CPM3)
+ DE = address of FCB
+ Returns: A = return code
+ H = Physical Error
+ */
+ case F_UNLOCKFILE: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 44 (2Ch) : Set number of records to read/write at once (CPM3)
+ E = Number of Sectors
+ Returns: A = return code (Returns A=0 if E was valid, 0FFh otherwise)
+ */
+ case F_MULTISEC: {
+ break;
+ }
+
+ /*
+ ToDo: C = 45 (2Dh) : Set BDOS Error Mode (CPM3)
+ E = BDOS Error Mode
+ E < 254 Compatibility mode; program is terminated and an error message printed.
+ E = 254 Error code is returned in H, error message is printed.
+ E = 255 Error code is returned in H, no error message is printed.
+ Returns: None
+ */
+ case F_ERRMODE: {
+ break;
+ }
+
+ /*
+ ToDo: C = 46 (2Eh) : Get Free Disk Space (CPM3)
+ E = Drive
+ Returns: A = return code
+ H = Physical Error
+ Binary result in the first 3 bytes of current DMA buffer
+ */
+ case DRV_SPACE: {
+ break;
+ }
+
+ /*
+ ToDo: C = 47 (2Fh) : Chain to program (CPM3)
+ E = Chain flag
+ Returns: None
+ */
+ case P_CHAIN: {
+ break;
+ }
+
+ /*
+ ToDo: C = 48 (30h) : Flush Bufers (CPM3)
+ E = Purge flag
+ Returns: A = return code
+ H = Physical Error
+ */
+ case DRV_FLUSH: {
+ break;
+ }
+
+ /*
+ ToDo: C = 49 (31h) : Get/Set System Control (CPM3)
+ DE = SCB PB Address
+ Returns: A = Returned Byte
+ HL = Returned Word
+ */
+ case S_SCB: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 50 (32h) : Direct BIOS Calls (CPM3)
+ DE = BIOS PB Address
+ Returns: BIOS Return
+ */
+ case S_BIOS: {
+ break;
+ }
+
+ /*
+ ToDo: C = 59 (3Bh) : Load Overlay (CPM3)
+ DE = address of FCB
+ Returns: A = return code
+ H = Physical Error
+ */
+ case P_LOAD: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 60 (3Ch) : Call Resident System Extension (RSX) (CPM3)
+ DE = RSX PB Address
+ Returns: A = return code
+ H = Physical Error
+ */
+ case S_RSX: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 98 (62h) : Free Blocks (CPM3)
+ Returns: A = return code
+ H = Physical Error
+ */
+ case F_CLEANUP: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 99 (63h) : Truncate File (CPM3)
+ DE = address of FCB
+ Returns: A = Directory code
+ H = Extended or Physical Error
+ */
+ case F_TRUNCATE: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 100 (64h) : Set Directory Label (CPM3)
+ DE = address of FCB
+ Returns: A = Directory code
+ H = Extended or Physical Error
+ */
+ case DRV_SETLABEL: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 101 (65h) : Return Directory Label Data (CPM3)
+ E = Drive
+ Returns: A = Directory Label Data Byte or 0xFF
+ H = Physical Error
+ */
+ case DRV_GETLABEL: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 102 (66h) : Read File Date Stamps and Password Mode (CPM3)
+ DE = address of FCB
+ Returns: A = Directory code
+ H = Physical Error
+ */
+ case F_TIMEDATE: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 103 (67h) : Write File XFCB (CPM3)
+ DE = address of FCB
+ Returns: A = Directory code
+ H = Physical Error
+ */
+ case F_WRITEXFCB: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 104 (68h) : Set Date and Time (CPM3)
+ DE = Date and Time (DAT) Address
+ Returns: None
+ */
+ case T_SET: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 105 (69h) : Get Date and Time (CPM3)
+ DE = Date and Time (DAT) Address
+ Returns: Date and Time (DAT) set
+ A = Seconds (in packed BCD format)
+ */
+ case T_GET: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 106 (6Ah) : Set Default Password (CPM3)
+ DE = Password Addresss
+ Returns: None
+ */
+ case F_PASSWD: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 107 (6Bh) : Return Serial Number (CPM3)
+ DE = Serial Number Field
+ Returns: Serial number field set
+ */
+ case S_SERIAL: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 108 (6Ch) : Get/Set Program Return Code (CPM3)
+ DE = 0xFFFF (Get) or Program Return Code (Set)
+ Returns: HL = Program Return Code or (none)
+ */
+ case P_CODE: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 109 (6Dh) : Get/Set Console Mode (CPM3)
+ DE = 0xFFFF (Get) or Console Mode (Set)
+ Returns: HL = Console Mode or (none)
+ */
+ case C_MODE: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 110 (6Eh) : Get/Set Output Delimiter (CPM3)
+ DE = 0xFFFF (Get) or E = Delimiter (Set)
+ Returns: A = Output Delimiter or (none)
+ */
+ case C_DELIMIT: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 111 (6Fh) : Print Block (CPM3)
+ DE = address of CCB
+ Returns: None
+ */
+ case C_WRITEBLK: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 112 (70h) : List Block (CPM3)
+ DE = address of CCB
+ Returns: None
+ */
+ case L_WRITEBLK: {
+ break;
+ }
+
+
+ /*
+ ToDo: C = 152 (98h) : List Block (CPM3)
+ DE = address of PFCB
+ Returns: HL = Return code
+ Parsed file control block
+ */
+ case F_PARSE: {
+ break;
+ }
+
+
+#if defined board_digital_io
+
+ /*
+ C = 220 (DCh) : PinMode
+ */
+ case 220: {
+ pinMode(HIGH_REGISTER(DE), LOW_REGISTER(DE));
+ break;
+ }
+
+ /*
+ C = 221 (DDh) : DigitalRead
+ */
+ case 221: {
+ HL = digitalRead(HIGH_REGISTER(DE));
+ break;
+ }
+
+ /*
+ C = 222 (DEh) : DigitalWrite
+ */
+ case 222: {
+ digitalWrite(HIGH_REGISTER(DE), LOW_REGISTER(DE));
+ break;
+ }
+
+ /*
+ C = 223 (DFh) : AnalogRead
+ */
+ case 223: {
+ HL = analogRead(HIGH_REGISTER(DE));
+ break;
+ }
+
+#endif // if defined board_digital_io
+#if defined board_analog_io
+
+ /*
+ C = 224 (E0h) : AnalogWrite
+ */
+ case 224: {
+ analogWrite(HIGH_REGISTER(DE), LOW_REGISTER(DE));
+ break;
+ }
+
+#endif // if defined board_analog_io
+
+ /*
+ C = 230 (E6h) : Set 8 bit masking
+ */
+ case 230: {
+ mask8bit = LOW_REGISTER(DE);
+ break;
+ }
+
+ /*
+ C = 231 (E7h) : Host specific BDOS call
+ */
+ case 231: {
+ HL = hostbdos(DE);
+ break;
+ }
+
+ /*
+ C = 232 (E8h) : ESP32 specific BDOS call
+ */
+#if defined board_esp32
+ case 232: {
+ HL = esp32bdos(DE);
+ break;
+ }
+
+#endif // if defined board_esp32
+#if defined board_stm32
+ case 232: {
+ HL = stm32bdos(DE);
+ break;
+ }
+
+#endif // if defined board_stm32
+
+ /*
+ C = 249 (F9h) : MakeDisk
+ Makes a disk directory if not existent.
+ */
+ case 249: {
+ HL = _MakeDisk(DE);
+ break;
+ }
+
+ /*
+ C = 250 (FAh) : HostOS
+ Returns: A = 0x00 - Windows / 0x01 - Arduino / 0x02 - Posix / 0x03 - Dos / 0x04 - Teensy / 0x05 - ESP32 / 0x06 - STM32
+ */
+ case 250: {
+ HL = HostOS;
+ break;
+ }
+
+ /*
+ C = 251 (FBh) : Version
+ Returns: A = 0xVv - Version in BCD representation: V.v
+ */
+ case 251: {
+ HL = VersionBCD;
+ break;
+ }
+
+ /*
+ C = 252 (FCh) : CCP version
+ Returns: A = 0x00-0x04 = DRI|CCPZ|ZCPR2|ZCPR3|Z80CCP / 0xVv = Internal version in BCD: V.v
+ */
+ case 252: {
+ HL = VersionCCP;
+ break;
+ }
+
+ /*
+ C = 253 (FDh) : CCP address
+ */
+ case 253: {
+ HL = CCPaddr;
+ break;
+ }
+
+#ifdef HASLUA
+
+ /*
+ C = 254 (FEh) : Run Lua file
+ */
+ case 254: {
+ HL = _RunLua(DE);
+ break;
+ }
+
+#endif // ifdef HASLUA
+
+ /*
+ Unimplemented calls get listed
+ */
+ default: {
+#ifdef DEBUG // Show unimplemented BDOS calls only when debugging
+ _puts("\r\nUnimplemented BDOS call.\r\n");
+ _puts("C = 0x");
+ _puthex8(ch);
+ _puts("\r\n");
+#endif // ifdef DEBUG
+ break;
+ }
+ } // switch
+
+ // CP/M BDOS does this before returning
+ SET_HIGH_REGISTER( BC, HIGH_REGISTER(HL));
+ SET_HIGH_REGISTER( AF, LOW_REGISTER(HL));
+
+#ifdef DEBUGLOG
+ _logBdosOut(ch);
+#endif
+} // _Bdos
+
+#endif // ifndef CPM_H
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/cpu.h b/runcpm-rp2040-dvi-usb/runcpm-pico/cpu.h
new file mode 100644
index 000000000..92b40993d
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/cpu.h
@@ -0,0 +1,4637 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef CPU_H
+#define CPU_H
+
+/* see main.c for definition */
+
+int32 PCX; /* external view of PC */
+int32 AF; /* AF register */
+int32 BC; /* BC register */
+int32 DE; /* DE register */
+int32 HL; /* HL register */
+int32 IX; /* IX register */
+int32 IY; /* IY register */
+int32 PC; /* program counter */
+int32 SP; /* SP register */
+int32 AF1; /* alternate AF register */
+int32 BC1; /* alternate BC register */
+int32 DE1; /* alternate DE register */
+int32 HL1; /* alternate HL register */
+int32 IFF; /* Interrupt Flip Flop */
+int32 IR; /* Interrupt (upper) / Refresh (lower) register */
+int32 Status = 0; /* Status of the CPU 0=running 1=end request 2=back to CCP */
+int32 Debug = 0;
+int32 Break = -1;
+int32 Step = -1;
+
+#ifdef iDEBUG
+FILE* iLogFile;
+char iLogBuffer[256];
+const char* iLogTxt;
+#endif
+
+/* increase R by val (to correctly implement refresh counter) if enabled */
+#ifdef DO_INCR
+#define INCR(val) IR = (IR & ~0x3f) | ((IR + (val)) & 0x3f)
+#else
+#define INCR(val) ;
+#endif
+
+/*
+ Functions needed by the soft CPU implementation
+*/
+void cpu_out(const uint32 Port, const uint32 Value) {
+ if (Port == 0xFF) {
+ _Bios();
+ } else {
+ _HardwareOut(Port, Value);
+ }
+}
+
+uint32 cpu_in(const uint32 Port) {
+ uint32 Result;
+ if (Port == 0xFF) {
+ _Bdos();
+ Result = HIGH_REGISTER(AF);
+ } else {
+ Result = _HardwareIn(Port);
+ }
+ return(Result);
+}
+
+/* Z80 Custom soft core */
+
+/* simulator stop codes */
+#define STOP_HALT 0 /* HALT */
+#define STOP_IBKPT 1 /* breakpoint (program counter) */
+#define STOP_MEM 2 /* breakpoint (memory access) */
+#define STOP_INSTR 3 /* breakpoint (instruction access) */
+#define STOP_OPCODE 4 /* invalid operation encountered (8080, Z80, 8086) */
+
+#define ADDRMASK 0xffff
+
+#define FLAG_C 1
+#define FLAG_N 2
+#define FLAG_P 4
+#define FLAG_H 16
+#define FLAG_Z 64
+#define FLAG_S 128
+
+#define SETFLAG(f,c) (AF = (c) ? AF | FLAG_ ## f : AF & ~FLAG_ ## f)
+#define TSTFLAG(f) ((AF & FLAG_ ## f) != 0)
+
+#define PARITY(x) parityTable[(x) & 0xff]
+
+#define SET_PVS(s) (((cbits >> 6) ^ (cbits >> 5)) & 4)
+#define SET_PV (SET_PVS(sum))
+#define SET_PV2(x) ((temp == (x)) << 2)
+
+#define POP(x) { \
+ uint32 y = RAM_PP(SP); \
+ x = y + (RAM_PP(SP) << 8); \
+}
+
+#define JPC(cond) { \
+ if (cond) { \
+ PC = GET_WORD(PC); \
+ } else { \
+ PC += 2; \
+ } \
+}
+
+#define CALLC(cond) { \
+ if (cond) { \
+ uint32 adrr = GET_WORD(PC); \
+ PUSH(PC + 2); \
+ PC = adrr; \
+ } else { \
+ PC += 2; \
+ } \
+}
+
+/* the following tables precompute some common subexpressions
+parityTable[i] 0..255 (number of 1's in i is odd) ? 0 : 4
+incTable[i] 0..256! (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0) << 4)
+decTable[i] 0..255 (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0xf) << 4) | 2
+cbitsTable[i] 0..511 (i & 0x10) | ((i >> 8) & 1)
+cbitsDup8Table[i] 0..511 (i & 0x10) | ((i >> 8) & 1) | ((i & 0xff) << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6)
+cbitsDup16Table[i] 0..511 (i & 0x10) | ((i >> 8) & 1) | (i & 0x28)
+cbits2Table[i] 0..511 (i & 0x10) | ((i >> 8) & 1) | 2
+rrcaTable[i] 0..255 ((i & 1) << 15) | ((i >> 1) << 8) | ((i >> 1) & 0x28) | (i & 1)
+rraTable[i] 0..255 ((i >> 1) << 8) | ((i >> 1) & 0x28) | (i & 1)
+addTable[i] 0..511 ((i & 0xff) << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6)
+subTable[i] 0..255 ((i & 0xff) << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6) | 2
+andTable[i] 0..255 (i << 8) | (i & 0xa8) | ((i == 0) << 6) | 0x10 | parityTable[i]
+xororTable[i] 0..255 (i << 8) | (i & 0xa8) | ((i == 0) << 6) | parityTable[i]
+rotateShiftTable[i] 0..255 (i & 0xa8) | (((i & 0xff) == 0) << 6) | parityTable[i & 0xff]
+incZ80Table[i] 0..256! (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0) << 4) | ((i == 0x80) << 2)
+decZ80Table[i] 0..255 (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0xf) << 4) | ((i == 0x7f) << 2) | 2
+cbitsZ80Table[i] 0..511 (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1)
+cbitsZ80DupTable[i] 0..511 (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1) | (i & 0xa8)
+cbits2Z80Table[i] 0..511 (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1) | 2
+cbits2Z80DupTable[i] 0..511 (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1) | 2 | (i & 0xa8)
+negTable[i] 0..255 (((i & 0x0f) != 0) << 4) | ((i == 0x80) << 2) | 2 | (i != 0)
+rrdrldTable[i] 0..255 (i << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6) | parityTable[i]
+cpTable[i] 0..255 (i & 0x80) | (((i & 0xff) == 0) << 6)
+*/
+
+/* parityTable[i] = (number of 1's in i is odd) ? 0 : 4, i = 0..255 */
+static const uint8 parityTable[256] = {
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 0,4,4,0,4,0,0,4,4,0,0,4,0,4,4,0,
+ 4,0,0,4,0,4,4,0,0,4,4,0,4,0,0,4,
+};
+
+/* incTable[i] = (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0) << 4), i = 0..256 */
+static const uint8 incTable[257] = {
+ 80, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 16, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 144,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 144,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168,
+ 144,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 144,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168, 80
+};
+
+/* decTable[i] = (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0xf) << 4) | 2, i = 0..255 */
+static const uint8 decTable[256] = {
+ 66, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 58,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 58,
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 58,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 58,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+};
+
+/* cbitsTable[i] = (i & 0x10) | ((i >> 8) & 1), i = 0..511 */
+static const uint8 cbitsTable[512] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+};
+
+/* cbitsDup8Table[i] = (i & 0x10) | ((i >> 8) & 1) | ((i & 0xff) << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6), i = 0..511 */
+static const uint16 cbitsDup8Table[512] = {
+ 0x0040,0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700,
+ 0x0808,0x0908,0x0a08,0x0b08,0x0c08,0x0d08,0x0e08,0x0f08,
+ 0x1010,0x1110,0x1210,0x1310,0x1410,0x1510,0x1610,0x1710,
+ 0x1818,0x1918,0x1a18,0x1b18,0x1c18,0x1d18,0x1e18,0x1f18,
+ 0x2020,0x2120,0x2220,0x2320,0x2420,0x2520,0x2620,0x2720,
+ 0x2828,0x2928,0x2a28,0x2b28,0x2c28,0x2d28,0x2e28,0x2f28,
+ 0x3030,0x3130,0x3230,0x3330,0x3430,0x3530,0x3630,0x3730,
+ 0x3838,0x3938,0x3a38,0x3b38,0x3c38,0x3d38,0x3e38,0x3f38,
+ 0x4000,0x4100,0x4200,0x4300,0x4400,0x4500,0x4600,0x4700,
+ 0x4808,0x4908,0x4a08,0x4b08,0x4c08,0x4d08,0x4e08,0x4f08,
+ 0x5010,0x5110,0x5210,0x5310,0x5410,0x5510,0x5610,0x5710,
+ 0x5818,0x5918,0x5a18,0x5b18,0x5c18,0x5d18,0x5e18,0x5f18,
+ 0x6020,0x6120,0x6220,0x6320,0x6420,0x6520,0x6620,0x6720,
+ 0x6828,0x6928,0x6a28,0x6b28,0x6c28,0x6d28,0x6e28,0x6f28,
+ 0x7030,0x7130,0x7230,0x7330,0x7430,0x7530,0x7630,0x7730,
+ 0x7838,0x7938,0x7a38,0x7b38,0x7c38,0x7d38,0x7e38,0x7f38,
+ 0x8080,0x8180,0x8280,0x8380,0x8480,0x8580,0x8680,0x8780,
+ 0x8888,0x8988,0x8a88,0x8b88,0x8c88,0x8d88,0x8e88,0x8f88,
+ 0x9090,0x9190,0x9290,0x9390,0x9490,0x9590,0x9690,0x9790,
+ 0x9898,0x9998,0x9a98,0x9b98,0x9c98,0x9d98,0x9e98,0x9f98,
+ 0xa0a0,0xa1a0,0xa2a0,0xa3a0,0xa4a0,0xa5a0,0xa6a0,0xa7a0,
+ 0xa8a8,0xa9a8,0xaaa8,0xaba8,0xaca8,0xada8,0xaea8,0xafa8,
+ 0xb0b0,0xb1b0,0xb2b0,0xb3b0,0xb4b0,0xb5b0,0xb6b0,0xb7b0,
+ 0xb8b8,0xb9b8,0xbab8,0xbbb8,0xbcb8,0xbdb8,0xbeb8,0xbfb8,
+ 0xc080,0xc180,0xc280,0xc380,0xc480,0xc580,0xc680,0xc780,
+ 0xc888,0xc988,0xca88,0xcb88,0xcc88,0xcd88,0xce88,0xcf88,
+ 0xd090,0xd190,0xd290,0xd390,0xd490,0xd590,0xd690,0xd790,
+ 0xd898,0xd998,0xda98,0xdb98,0xdc98,0xdd98,0xde98,0xdf98,
+ 0xe0a0,0xe1a0,0xe2a0,0xe3a0,0xe4a0,0xe5a0,0xe6a0,0xe7a0,
+ 0xe8a8,0xe9a8,0xeaa8,0xeba8,0xeca8,0xeda8,0xeea8,0xefa8,
+ 0xf0b0,0xf1b0,0xf2b0,0xf3b0,0xf4b0,0xf5b0,0xf6b0,0xf7b0,
+ 0xf8b8,0xf9b8,0xfab8,0xfbb8,0xfcb8,0xfdb8,0xfeb8,0xffb8,
+ 0x0041,0x0101,0x0201,0x0301,0x0401,0x0501,0x0601,0x0701,
+ 0x0809,0x0909,0x0a09,0x0b09,0x0c09,0x0d09,0x0e09,0x0f09,
+ 0x1011,0x1111,0x1211,0x1311,0x1411,0x1511,0x1611,0x1711,
+ 0x1819,0x1919,0x1a19,0x1b19,0x1c19,0x1d19,0x1e19,0x1f19,
+ 0x2021,0x2121,0x2221,0x2321,0x2421,0x2521,0x2621,0x2721,
+ 0x2829,0x2929,0x2a29,0x2b29,0x2c29,0x2d29,0x2e29,0x2f29,
+ 0x3031,0x3131,0x3231,0x3331,0x3431,0x3531,0x3631,0x3731,
+ 0x3839,0x3939,0x3a39,0x3b39,0x3c39,0x3d39,0x3e39,0x3f39,
+ 0x4001,0x4101,0x4201,0x4301,0x4401,0x4501,0x4601,0x4701,
+ 0x4809,0x4909,0x4a09,0x4b09,0x4c09,0x4d09,0x4e09,0x4f09,
+ 0x5011,0x5111,0x5211,0x5311,0x5411,0x5511,0x5611,0x5711,
+ 0x5819,0x5919,0x5a19,0x5b19,0x5c19,0x5d19,0x5e19,0x5f19,
+ 0x6021,0x6121,0x6221,0x6321,0x6421,0x6521,0x6621,0x6721,
+ 0x6829,0x6929,0x6a29,0x6b29,0x6c29,0x6d29,0x6e29,0x6f29,
+ 0x7031,0x7131,0x7231,0x7331,0x7431,0x7531,0x7631,0x7731,
+ 0x7839,0x7939,0x7a39,0x7b39,0x7c39,0x7d39,0x7e39,0x7f39,
+ 0x8081,0x8181,0x8281,0x8381,0x8481,0x8581,0x8681,0x8781,
+ 0x8889,0x8989,0x8a89,0x8b89,0x8c89,0x8d89,0x8e89,0x8f89,
+ 0x9091,0x9191,0x9291,0x9391,0x9491,0x9591,0x9691,0x9791,
+ 0x9899,0x9999,0x9a99,0x9b99,0x9c99,0x9d99,0x9e99,0x9f99,
+ 0xa0a1,0xa1a1,0xa2a1,0xa3a1,0xa4a1,0xa5a1,0xa6a1,0xa7a1,
+ 0xa8a9,0xa9a9,0xaaa9,0xaba9,0xaca9,0xada9,0xaea9,0xafa9,
+ 0xb0b1,0xb1b1,0xb2b1,0xb3b1,0xb4b1,0xb5b1,0xb6b1,0xb7b1,
+ 0xb8b9,0xb9b9,0xbab9,0xbbb9,0xbcb9,0xbdb9,0xbeb9,0xbfb9,
+ 0xc081,0xc181,0xc281,0xc381,0xc481,0xc581,0xc681,0xc781,
+ 0xc889,0xc989,0xca89,0xcb89,0xcc89,0xcd89,0xce89,0xcf89,
+ 0xd091,0xd191,0xd291,0xd391,0xd491,0xd591,0xd691,0xd791,
+ 0xd899,0xd999,0xda99,0xdb99,0xdc99,0xdd99,0xde99,0xdf99,
+ 0xe0a1,0xe1a1,0xe2a1,0xe3a1,0xe4a1,0xe5a1,0xe6a1,0xe7a1,
+ 0xe8a9,0xe9a9,0xeaa9,0xeba9,0xeca9,0xeda9,0xeea9,0xefa9,
+ 0xf0b1,0xf1b1,0xf2b1,0xf3b1,0xf4b1,0xf5b1,0xf6b1,0xf7b1,
+ 0xf8b9,0xf9b9,0xfab9,0xfbb9,0xfcb9,0xfdb9,0xfeb9,0xffb9,
+};
+
+/* cbitsDup16Table[i] = (i & 0x10) | ((i >> 8) & 1) | (i & 0x28), i = 0..511 */
+static const uint8 cbitsDup16Table[512] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,
+ 32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,
+ 48,48,48,48,48,48,48,48,56,56,56,56,56,56,56,56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,
+ 32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,
+ 48,48,48,48,48,48,48,48,56,56,56,56,56,56,56,56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,
+ 32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,
+ 48,48,48,48,48,48,48,48,56,56,56,56,56,56,56,56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,
+ 32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,
+ 48,48,48,48,48,48,48,48,56,56,56,56,56,56,56,56,
+ 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17,17,17,17,17,17,17,17,25,25,25,25,25,25,25,25,
+ 33,33,33,33,33,33,33,33,41,41,41,41,41,41,41,41,
+ 49,49,49,49,49,49,49,49,57,57,57,57,57,57,57,57,
+ 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17,17,17,17,17,17,17,17,25,25,25,25,25,25,25,25,
+ 33,33,33,33,33,33,33,33,41,41,41,41,41,41,41,41,
+ 49,49,49,49,49,49,49,49,57,57,57,57,57,57,57,57,
+ 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17,17,17,17,17,17,17,17,25,25,25,25,25,25,25,25,
+ 33,33,33,33,33,33,33,33,41,41,41,41,41,41,41,41,
+ 49,49,49,49,49,49,49,49,57,57,57,57,57,57,57,57,
+ 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9,
+ 17,17,17,17,17,17,17,17,25,25,25,25,25,25,25,25,
+ 33,33,33,33,33,33,33,33,41,41,41,41,41,41,41,41,
+ 49,49,49,49,49,49,49,49,57,57,57,57,57,57,57,57,
+};
+
+/* cbits2Table[i] = (i & 0x10) | ((i >> 8) & 1) | 2, i = 0..511 */
+static const uint8 cbits2Table[512] = {
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+};
+
+/* rrcaTable[i] = ((i & 1) << 15) | ((i >> 1) << 8) | ((i >> 1) & 0x28) | (i & 1), i = 0..255 */
+static const uint16 rrcaTable[256] = {
+ 0x0000,0x8001,0x0100,0x8101,0x0200,0x8201,0x0300,0x8301,
+ 0x0400,0x8401,0x0500,0x8501,0x0600,0x8601,0x0700,0x8701,
+ 0x0808,0x8809,0x0908,0x8909,0x0a08,0x8a09,0x0b08,0x8b09,
+ 0x0c08,0x8c09,0x0d08,0x8d09,0x0e08,0x8e09,0x0f08,0x8f09,
+ 0x1000,0x9001,0x1100,0x9101,0x1200,0x9201,0x1300,0x9301,
+ 0x1400,0x9401,0x1500,0x9501,0x1600,0x9601,0x1700,0x9701,
+ 0x1808,0x9809,0x1908,0x9909,0x1a08,0x9a09,0x1b08,0x9b09,
+ 0x1c08,0x9c09,0x1d08,0x9d09,0x1e08,0x9e09,0x1f08,0x9f09,
+ 0x2020,0xa021,0x2120,0xa121,0x2220,0xa221,0x2320,0xa321,
+ 0x2420,0xa421,0x2520,0xa521,0x2620,0xa621,0x2720,0xa721,
+ 0x2828,0xa829,0x2928,0xa929,0x2a28,0xaa29,0x2b28,0xab29,
+ 0x2c28,0xac29,0x2d28,0xad29,0x2e28,0xae29,0x2f28,0xaf29,
+ 0x3020,0xb021,0x3120,0xb121,0x3220,0xb221,0x3320,0xb321,
+ 0x3420,0xb421,0x3520,0xb521,0x3620,0xb621,0x3720,0xb721,
+ 0x3828,0xb829,0x3928,0xb929,0x3a28,0xba29,0x3b28,0xbb29,
+ 0x3c28,0xbc29,0x3d28,0xbd29,0x3e28,0xbe29,0x3f28,0xbf29,
+ 0x4000,0xc001,0x4100,0xc101,0x4200,0xc201,0x4300,0xc301,
+ 0x4400,0xc401,0x4500,0xc501,0x4600,0xc601,0x4700,0xc701,
+ 0x4808,0xc809,0x4908,0xc909,0x4a08,0xca09,0x4b08,0xcb09,
+ 0x4c08,0xcc09,0x4d08,0xcd09,0x4e08,0xce09,0x4f08,0xcf09,
+ 0x5000,0xd001,0x5100,0xd101,0x5200,0xd201,0x5300,0xd301,
+ 0x5400,0xd401,0x5500,0xd501,0x5600,0xd601,0x5700,0xd701,
+ 0x5808,0xd809,0x5908,0xd909,0x5a08,0xda09,0x5b08,0xdb09,
+ 0x5c08,0xdc09,0x5d08,0xdd09,0x5e08,0xde09,0x5f08,0xdf09,
+ 0x6020,0xe021,0x6120,0xe121,0x6220,0xe221,0x6320,0xe321,
+ 0x6420,0xe421,0x6520,0xe521,0x6620,0xe621,0x6720,0xe721,
+ 0x6828,0xe829,0x6928,0xe929,0x6a28,0xea29,0x6b28,0xeb29,
+ 0x6c28,0xec29,0x6d28,0xed29,0x6e28,0xee29,0x6f28,0xef29,
+ 0x7020,0xf021,0x7120,0xf121,0x7220,0xf221,0x7320,0xf321,
+ 0x7420,0xf421,0x7520,0xf521,0x7620,0xf621,0x7720,0xf721,
+ 0x7828,0xf829,0x7928,0xf929,0x7a28,0xfa29,0x7b28,0xfb29,
+ 0x7c28,0xfc29,0x7d28,0xfd29,0x7e28,0xfe29,0x7f28,0xff29,
+};
+
+/* rraTable[i] = ((i >> 1) << 8) | ((i >> 1) & 0x28) | (i & 1), i = 0..255 */
+static const uint16 rraTable[256] = {
+ 0x0000,0x0001,0x0100,0x0101,0x0200,0x0201,0x0300,0x0301,
+ 0x0400,0x0401,0x0500,0x0501,0x0600,0x0601,0x0700,0x0701,
+ 0x0808,0x0809,0x0908,0x0909,0x0a08,0x0a09,0x0b08,0x0b09,
+ 0x0c08,0x0c09,0x0d08,0x0d09,0x0e08,0x0e09,0x0f08,0x0f09,
+ 0x1000,0x1001,0x1100,0x1101,0x1200,0x1201,0x1300,0x1301,
+ 0x1400,0x1401,0x1500,0x1501,0x1600,0x1601,0x1700,0x1701,
+ 0x1808,0x1809,0x1908,0x1909,0x1a08,0x1a09,0x1b08,0x1b09,
+ 0x1c08,0x1c09,0x1d08,0x1d09,0x1e08,0x1e09,0x1f08,0x1f09,
+ 0x2020,0x2021,0x2120,0x2121,0x2220,0x2221,0x2320,0x2321,
+ 0x2420,0x2421,0x2520,0x2521,0x2620,0x2621,0x2720,0x2721,
+ 0x2828,0x2829,0x2928,0x2929,0x2a28,0x2a29,0x2b28,0x2b29,
+ 0x2c28,0x2c29,0x2d28,0x2d29,0x2e28,0x2e29,0x2f28,0x2f29,
+ 0x3020,0x3021,0x3120,0x3121,0x3220,0x3221,0x3320,0x3321,
+ 0x3420,0x3421,0x3520,0x3521,0x3620,0x3621,0x3720,0x3721,
+ 0x3828,0x3829,0x3928,0x3929,0x3a28,0x3a29,0x3b28,0x3b29,
+ 0x3c28,0x3c29,0x3d28,0x3d29,0x3e28,0x3e29,0x3f28,0x3f29,
+ 0x4000,0x4001,0x4100,0x4101,0x4200,0x4201,0x4300,0x4301,
+ 0x4400,0x4401,0x4500,0x4501,0x4600,0x4601,0x4700,0x4701,
+ 0x4808,0x4809,0x4908,0x4909,0x4a08,0x4a09,0x4b08,0x4b09,
+ 0x4c08,0x4c09,0x4d08,0x4d09,0x4e08,0x4e09,0x4f08,0x4f09,
+ 0x5000,0x5001,0x5100,0x5101,0x5200,0x5201,0x5300,0x5301,
+ 0x5400,0x5401,0x5500,0x5501,0x5600,0x5601,0x5700,0x5701,
+ 0x5808,0x5809,0x5908,0x5909,0x5a08,0x5a09,0x5b08,0x5b09,
+ 0x5c08,0x5c09,0x5d08,0x5d09,0x5e08,0x5e09,0x5f08,0x5f09,
+ 0x6020,0x6021,0x6120,0x6121,0x6220,0x6221,0x6320,0x6321,
+ 0x6420,0x6421,0x6520,0x6521,0x6620,0x6621,0x6720,0x6721,
+ 0x6828,0x6829,0x6928,0x6929,0x6a28,0x6a29,0x6b28,0x6b29,
+ 0x6c28,0x6c29,0x6d28,0x6d29,0x6e28,0x6e29,0x6f28,0x6f29,
+ 0x7020,0x7021,0x7120,0x7121,0x7220,0x7221,0x7320,0x7321,
+ 0x7420,0x7421,0x7520,0x7521,0x7620,0x7621,0x7720,0x7721,
+ 0x7828,0x7829,0x7928,0x7929,0x7a28,0x7a29,0x7b28,0x7b29,
+ 0x7c28,0x7c29,0x7d28,0x7d29,0x7e28,0x7e29,0x7f28,0x7f29,
+};
+
+/* addTable[i] = ((i & 0xff) << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6), i = 0..511 */
+static const uint16 addTable[512] = {
+ 0x0040,0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700,
+ 0x0808,0x0908,0x0a08,0x0b08,0x0c08,0x0d08,0x0e08,0x0f08,
+ 0x1000,0x1100,0x1200,0x1300,0x1400,0x1500,0x1600,0x1700,
+ 0x1808,0x1908,0x1a08,0x1b08,0x1c08,0x1d08,0x1e08,0x1f08,
+ 0x2020,0x2120,0x2220,0x2320,0x2420,0x2520,0x2620,0x2720,
+ 0x2828,0x2928,0x2a28,0x2b28,0x2c28,0x2d28,0x2e28,0x2f28,
+ 0x3020,0x3120,0x3220,0x3320,0x3420,0x3520,0x3620,0x3720,
+ 0x3828,0x3928,0x3a28,0x3b28,0x3c28,0x3d28,0x3e28,0x3f28,
+ 0x4000,0x4100,0x4200,0x4300,0x4400,0x4500,0x4600,0x4700,
+ 0x4808,0x4908,0x4a08,0x4b08,0x4c08,0x4d08,0x4e08,0x4f08,
+ 0x5000,0x5100,0x5200,0x5300,0x5400,0x5500,0x5600,0x5700,
+ 0x5808,0x5908,0x5a08,0x5b08,0x5c08,0x5d08,0x5e08,0x5f08,
+ 0x6020,0x6120,0x6220,0x6320,0x6420,0x6520,0x6620,0x6720,
+ 0x6828,0x6928,0x6a28,0x6b28,0x6c28,0x6d28,0x6e28,0x6f28,
+ 0x7020,0x7120,0x7220,0x7320,0x7420,0x7520,0x7620,0x7720,
+ 0x7828,0x7928,0x7a28,0x7b28,0x7c28,0x7d28,0x7e28,0x7f28,
+ 0x8080,0x8180,0x8280,0x8380,0x8480,0x8580,0x8680,0x8780,
+ 0x8888,0x8988,0x8a88,0x8b88,0x8c88,0x8d88,0x8e88,0x8f88,
+ 0x9080,0x9180,0x9280,0x9380,0x9480,0x9580,0x9680,0x9780,
+ 0x9888,0x9988,0x9a88,0x9b88,0x9c88,0x9d88,0x9e88,0x9f88,
+ 0xa0a0,0xa1a0,0xa2a0,0xa3a0,0xa4a0,0xa5a0,0xa6a0,0xa7a0,
+ 0xa8a8,0xa9a8,0xaaa8,0xaba8,0xaca8,0xada8,0xaea8,0xafa8,
+ 0xb0a0,0xb1a0,0xb2a0,0xb3a0,0xb4a0,0xb5a0,0xb6a0,0xb7a0,
+ 0xb8a8,0xb9a8,0xbaa8,0xbba8,0xbca8,0xbda8,0xbea8,0xbfa8,
+ 0xc080,0xc180,0xc280,0xc380,0xc480,0xc580,0xc680,0xc780,
+ 0xc888,0xc988,0xca88,0xcb88,0xcc88,0xcd88,0xce88,0xcf88,
+ 0xd080,0xd180,0xd280,0xd380,0xd480,0xd580,0xd680,0xd780,
+ 0xd888,0xd988,0xda88,0xdb88,0xdc88,0xdd88,0xde88,0xdf88,
+ 0xe0a0,0xe1a0,0xe2a0,0xe3a0,0xe4a0,0xe5a0,0xe6a0,0xe7a0,
+ 0xe8a8,0xe9a8,0xeaa8,0xeba8,0xeca8,0xeda8,0xeea8,0xefa8,
+ 0xf0a0,0xf1a0,0xf2a0,0xf3a0,0xf4a0,0xf5a0,0xf6a0,0xf7a0,
+ 0xf8a8,0xf9a8,0xfaa8,0xfba8,0xfca8,0xfda8,0xfea8,0xffa8,
+ 0x0040,0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700,
+ 0x0808,0x0908,0x0a08,0x0b08,0x0c08,0x0d08,0x0e08,0x0f08,
+ 0x1000,0x1100,0x1200,0x1300,0x1400,0x1500,0x1600,0x1700,
+ 0x1808,0x1908,0x1a08,0x1b08,0x1c08,0x1d08,0x1e08,0x1f08,
+ 0x2020,0x2120,0x2220,0x2320,0x2420,0x2520,0x2620,0x2720,
+ 0x2828,0x2928,0x2a28,0x2b28,0x2c28,0x2d28,0x2e28,0x2f28,
+ 0x3020,0x3120,0x3220,0x3320,0x3420,0x3520,0x3620,0x3720,
+ 0x3828,0x3928,0x3a28,0x3b28,0x3c28,0x3d28,0x3e28,0x3f28,
+ 0x4000,0x4100,0x4200,0x4300,0x4400,0x4500,0x4600,0x4700,
+ 0x4808,0x4908,0x4a08,0x4b08,0x4c08,0x4d08,0x4e08,0x4f08,
+ 0x5000,0x5100,0x5200,0x5300,0x5400,0x5500,0x5600,0x5700,
+ 0x5808,0x5908,0x5a08,0x5b08,0x5c08,0x5d08,0x5e08,0x5f08,
+ 0x6020,0x6120,0x6220,0x6320,0x6420,0x6520,0x6620,0x6720,
+ 0x6828,0x6928,0x6a28,0x6b28,0x6c28,0x6d28,0x6e28,0x6f28,
+ 0x7020,0x7120,0x7220,0x7320,0x7420,0x7520,0x7620,0x7720,
+ 0x7828,0x7928,0x7a28,0x7b28,0x7c28,0x7d28,0x7e28,0x7f28,
+ 0x8080,0x8180,0x8280,0x8380,0x8480,0x8580,0x8680,0x8780,
+ 0x8888,0x8988,0x8a88,0x8b88,0x8c88,0x8d88,0x8e88,0x8f88,
+ 0x9080,0x9180,0x9280,0x9380,0x9480,0x9580,0x9680,0x9780,
+ 0x9888,0x9988,0x9a88,0x9b88,0x9c88,0x9d88,0x9e88,0x9f88,
+ 0xa0a0,0xa1a0,0xa2a0,0xa3a0,0xa4a0,0xa5a0,0xa6a0,0xa7a0,
+ 0xa8a8,0xa9a8,0xaaa8,0xaba8,0xaca8,0xada8,0xaea8,0xafa8,
+ 0xb0a0,0xb1a0,0xb2a0,0xb3a0,0xb4a0,0xb5a0,0xb6a0,0xb7a0,
+ 0xb8a8,0xb9a8,0xbaa8,0xbba8,0xbca8,0xbda8,0xbea8,0xbfa8,
+ 0xc080,0xc180,0xc280,0xc380,0xc480,0xc580,0xc680,0xc780,
+ 0xc888,0xc988,0xca88,0xcb88,0xcc88,0xcd88,0xce88,0xcf88,
+ 0xd080,0xd180,0xd280,0xd380,0xd480,0xd580,0xd680,0xd780,
+ 0xd888,0xd988,0xda88,0xdb88,0xdc88,0xdd88,0xde88,0xdf88,
+ 0xe0a0,0xe1a0,0xe2a0,0xe3a0,0xe4a0,0xe5a0,0xe6a0,0xe7a0,
+ 0xe8a8,0xe9a8,0xeaa8,0xeba8,0xeca8,0xeda8,0xeea8,0xefa8,
+ 0xf0a0,0xf1a0,0xf2a0,0xf3a0,0xf4a0,0xf5a0,0xf6a0,0xf7a0,
+ 0xf8a8,0xf9a8,0xfaa8,0xfba8,0xfca8,0xfda8,0xfea8,0xffa8,
+};
+
+/* subTable[i] = ((i & 0xff) << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6) | 2, i = 0..255 */
+static const uint16 subTable[256] = {
+ 0x0042,0x0102,0x0202,0x0302,0x0402,0x0502,0x0602,0x0702,
+ 0x080a,0x090a,0x0a0a,0x0b0a,0x0c0a,0x0d0a,0x0e0a,0x0f0a,
+ 0x1002,0x1102,0x1202,0x1302,0x1402,0x1502,0x1602,0x1702,
+ 0x180a,0x190a,0x1a0a,0x1b0a,0x1c0a,0x1d0a,0x1e0a,0x1f0a,
+ 0x2022,0x2122,0x2222,0x2322,0x2422,0x2522,0x2622,0x2722,
+ 0x282a,0x292a,0x2a2a,0x2b2a,0x2c2a,0x2d2a,0x2e2a,0x2f2a,
+ 0x3022,0x3122,0x3222,0x3322,0x3422,0x3522,0x3622,0x3722,
+ 0x382a,0x392a,0x3a2a,0x3b2a,0x3c2a,0x3d2a,0x3e2a,0x3f2a,
+ 0x4002,0x4102,0x4202,0x4302,0x4402,0x4502,0x4602,0x4702,
+ 0x480a,0x490a,0x4a0a,0x4b0a,0x4c0a,0x4d0a,0x4e0a,0x4f0a,
+ 0x5002,0x5102,0x5202,0x5302,0x5402,0x5502,0x5602,0x5702,
+ 0x580a,0x590a,0x5a0a,0x5b0a,0x5c0a,0x5d0a,0x5e0a,0x5f0a,
+ 0x6022,0x6122,0x6222,0x6322,0x6422,0x6522,0x6622,0x6722,
+ 0x682a,0x692a,0x6a2a,0x6b2a,0x6c2a,0x6d2a,0x6e2a,0x6f2a,
+ 0x7022,0x7122,0x7222,0x7322,0x7422,0x7522,0x7622,0x7722,
+ 0x782a,0x792a,0x7a2a,0x7b2a,0x7c2a,0x7d2a,0x7e2a,0x7f2a,
+ 0x8082,0x8182,0x8282,0x8382,0x8482,0x8582,0x8682,0x8782,
+ 0x888a,0x898a,0x8a8a,0x8b8a,0x8c8a,0x8d8a,0x8e8a,0x8f8a,
+ 0x9082,0x9182,0x9282,0x9382,0x9482,0x9582,0x9682,0x9782,
+ 0x988a,0x998a,0x9a8a,0x9b8a,0x9c8a,0x9d8a,0x9e8a,0x9f8a,
+ 0xa0a2,0xa1a2,0xa2a2,0xa3a2,0xa4a2,0xa5a2,0xa6a2,0xa7a2,
+ 0xa8aa,0xa9aa,0xaaaa,0xabaa,0xacaa,0xadaa,0xaeaa,0xafaa,
+ 0xb0a2,0xb1a2,0xb2a2,0xb3a2,0xb4a2,0xb5a2,0xb6a2,0xb7a2,
+ 0xb8aa,0xb9aa,0xbaaa,0xbbaa,0xbcaa,0xbdaa,0xbeaa,0xbfaa,
+ 0xc082,0xc182,0xc282,0xc382,0xc482,0xc582,0xc682,0xc782,
+ 0xc88a,0xc98a,0xca8a,0xcb8a,0xcc8a,0xcd8a,0xce8a,0xcf8a,
+ 0xd082,0xd182,0xd282,0xd382,0xd482,0xd582,0xd682,0xd782,
+ 0xd88a,0xd98a,0xda8a,0xdb8a,0xdc8a,0xdd8a,0xde8a,0xdf8a,
+ 0xe0a2,0xe1a2,0xe2a2,0xe3a2,0xe4a2,0xe5a2,0xe6a2,0xe7a2,
+ 0xe8aa,0xe9aa,0xeaaa,0xebaa,0xecaa,0xedaa,0xeeaa,0xefaa,
+ 0xf0a2,0xf1a2,0xf2a2,0xf3a2,0xf4a2,0xf5a2,0xf6a2,0xf7a2,
+ 0xf8aa,0xf9aa,0xfaaa,0xfbaa,0xfcaa,0xfdaa,0xfeaa,0xffaa,
+};
+
+/* andTable[i] = (i << 8) | (i & 0xa8) | ((i == 0) << 6) | 0x10 | parityTable[i], i = 0..255 */
+static const uint16 andTable[256] = {
+ 0x0054,0x0110,0x0210,0x0314,0x0410,0x0514,0x0614,0x0710,
+ 0x0818,0x091c,0x0a1c,0x0b18,0x0c1c,0x0d18,0x0e18,0x0f1c,
+ 0x1010,0x1114,0x1214,0x1310,0x1414,0x1510,0x1610,0x1714,
+ 0x181c,0x1918,0x1a18,0x1b1c,0x1c18,0x1d1c,0x1e1c,0x1f18,
+ 0x2030,0x2134,0x2234,0x2330,0x2434,0x2530,0x2630,0x2734,
+ 0x283c,0x2938,0x2a38,0x2b3c,0x2c38,0x2d3c,0x2e3c,0x2f38,
+ 0x3034,0x3130,0x3230,0x3334,0x3430,0x3534,0x3634,0x3730,
+ 0x3838,0x393c,0x3a3c,0x3b38,0x3c3c,0x3d38,0x3e38,0x3f3c,
+ 0x4010,0x4114,0x4214,0x4310,0x4414,0x4510,0x4610,0x4714,
+ 0x481c,0x4918,0x4a18,0x4b1c,0x4c18,0x4d1c,0x4e1c,0x4f18,
+ 0x5014,0x5110,0x5210,0x5314,0x5410,0x5514,0x5614,0x5710,
+ 0x5818,0x591c,0x5a1c,0x5b18,0x5c1c,0x5d18,0x5e18,0x5f1c,
+ 0x6034,0x6130,0x6230,0x6334,0x6430,0x6534,0x6634,0x6730,
+ 0x6838,0x693c,0x6a3c,0x6b38,0x6c3c,0x6d38,0x6e38,0x6f3c,
+ 0x7030,0x7134,0x7234,0x7330,0x7434,0x7530,0x7630,0x7734,
+ 0x783c,0x7938,0x7a38,0x7b3c,0x7c38,0x7d3c,0x7e3c,0x7f38,
+ 0x8090,0x8194,0x8294,0x8390,0x8494,0x8590,0x8690,0x8794,
+ 0x889c,0x8998,0x8a98,0x8b9c,0x8c98,0x8d9c,0x8e9c,0x8f98,
+ 0x9094,0x9190,0x9290,0x9394,0x9490,0x9594,0x9694,0x9790,
+ 0x9898,0x999c,0x9a9c,0x9b98,0x9c9c,0x9d98,0x9e98,0x9f9c,
+ 0xa0b4,0xa1b0,0xa2b0,0xa3b4,0xa4b0,0xa5b4,0xa6b4,0xa7b0,
+ 0xa8b8,0xa9bc,0xaabc,0xabb8,0xacbc,0xadb8,0xaeb8,0xafbc,
+ 0xb0b0,0xb1b4,0xb2b4,0xb3b0,0xb4b4,0xb5b0,0xb6b0,0xb7b4,
+ 0xb8bc,0xb9b8,0xbab8,0xbbbc,0xbcb8,0xbdbc,0xbebc,0xbfb8,
+ 0xc094,0xc190,0xc290,0xc394,0xc490,0xc594,0xc694,0xc790,
+ 0xc898,0xc99c,0xca9c,0xcb98,0xcc9c,0xcd98,0xce98,0xcf9c,
+ 0xd090,0xd194,0xd294,0xd390,0xd494,0xd590,0xd690,0xd794,
+ 0xd89c,0xd998,0xda98,0xdb9c,0xdc98,0xdd9c,0xde9c,0xdf98,
+ 0xe0b0,0xe1b4,0xe2b4,0xe3b0,0xe4b4,0xe5b0,0xe6b0,0xe7b4,
+ 0xe8bc,0xe9b8,0xeab8,0xebbc,0xecb8,0xedbc,0xeebc,0xefb8,
+ 0xf0b4,0xf1b0,0xf2b0,0xf3b4,0xf4b0,0xf5b4,0xf6b4,0xf7b0,
+ 0xf8b8,0xf9bc,0xfabc,0xfbb8,0xfcbc,0xfdb8,0xfeb8,0xffbc,
+};
+
+/* xororTable[i] = (i << 8) | (i & 0xa8) | ((i == 0) << 6) | parityTable[i], i = 0..255 */
+static const uint16 xororTable[256] = {
+ 0x0044,0x0100,0x0200,0x0304,0x0400,0x0504,0x0604,0x0700,
+ 0x0808,0x090c,0x0a0c,0x0b08,0x0c0c,0x0d08,0x0e08,0x0f0c,
+ 0x1000,0x1104,0x1204,0x1300,0x1404,0x1500,0x1600,0x1704,
+ 0x180c,0x1908,0x1a08,0x1b0c,0x1c08,0x1d0c,0x1e0c,0x1f08,
+ 0x2020,0x2124,0x2224,0x2320,0x2424,0x2520,0x2620,0x2724,
+ 0x282c,0x2928,0x2a28,0x2b2c,0x2c28,0x2d2c,0x2e2c,0x2f28,
+ 0x3024,0x3120,0x3220,0x3324,0x3420,0x3524,0x3624,0x3720,
+ 0x3828,0x392c,0x3a2c,0x3b28,0x3c2c,0x3d28,0x3e28,0x3f2c,
+ 0x4000,0x4104,0x4204,0x4300,0x4404,0x4500,0x4600,0x4704,
+ 0x480c,0x4908,0x4a08,0x4b0c,0x4c08,0x4d0c,0x4e0c,0x4f08,
+ 0x5004,0x5100,0x5200,0x5304,0x5400,0x5504,0x5604,0x5700,
+ 0x5808,0x590c,0x5a0c,0x5b08,0x5c0c,0x5d08,0x5e08,0x5f0c,
+ 0x6024,0x6120,0x6220,0x6324,0x6420,0x6524,0x6624,0x6720,
+ 0x6828,0x692c,0x6a2c,0x6b28,0x6c2c,0x6d28,0x6e28,0x6f2c,
+ 0x7020,0x7124,0x7224,0x7320,0x7424,0x7520,0x7620,0x7724,
+ 0x782c,0x7928,0x7a28,0x7b2c,0x7c28,0x7d2c,0x7e2c,0x7f28,
+ 0x8080,0x8184,0x8284,0x8380,0x8484,0x8580,0x8680,0x8784,
+ 0x888c,0x8988,0x8a88,0x8b8c,0x8c88,0x8d8c,0x8e8c,0x8f88,
+ 0x9084,0x9180,0x9280,0x9384,0x9480,0x9584,0x9684,0x9780,
+ 0x9888,0x998c,0x9a8c,0x9b88,0x9c8c,0x9d88,0x9e88,0x9f8c,
+ 0xa0a4,0xa1a0,0xa2a0,0xa3a4,0xa4a0,0xa5a4,0xa6a4,0xa7a0,
+ 0xa8a8,0xa9ac,0xaaac,0xaba8,0xacac,0xada8,0xaea8,0xafac,
+ 0xb0a0,0xb1a4,0xb2a4,0xb3a0,0xb4a4,0xb5a0,0xb6a0,0xb7a4,
+ 0xb8ac,0xb9a8,0xbaa8,0xbbac,0xbca8,0xbdac,0xbeac,0xbfa8,
+ 0xc084,0xc180,0xc280,0xc384,0xc480,0xc584,0xc684,0xc780,
+ 0xc888,0xc98c,0xca8c,0xcb88,0xcc8c,0xcd88,0xce88,0xcf8c,
+ 0xd080,0xd184,0xd284,0xd380,0xd484,0xd580,0xd680,0xd784,
+ 0xd88c,0xd988,0xda88,0xdb8c,0xdc88,0xdd8c,0xde8c,0xdf88,
+ 0xe0a0,0xe1a4,0xe2a4,0xe3a0,0xe4a4,0xe5a0,0xe6a0,0xe7a4,
+ 0xe8ac,0xe9a8,0xeaa8,0xebac,0xeca8,0xedac,0xeeac,0xefa8,
+ 0xf0a4,0xf1a0,0xf2a0,0xf3a4,0xf4a0,0xf5a4,0xf6a4,0xf7a0,
+ 0xf8a8,0xf9ac,0xfaac,0xfba8,0xfcac,0xfda8,0xfea8,0xffac,
+};
+
+/* rotateShiftTable[i] = (i & 0xa8) | (((i & 0xff) == 0) << 6) | parityTable[i & 0xff], i = 0..255 */
+static const uint8 rotateShiftTable[256] = {
+ 68, 0, 0, 4, 0, 4, 4, 0, 8, 12, 12, 8, 12, 8, 8, 12,
+ 0, 4, 4, 0, 4, 0, 0, 4, 12, 8, 8, 12, 8, 12, 12, 8,
+ 32, 36, 36, 32, 36, 32, 32, 36, 44, 40, 40, 44, 40, 44, 44, 40,
+ 36, 32, 32, 36, 32, 36, 36, 32, 40, 44, 44, 40, 44, 40, 40, 44,
+ 0, 4, 4, 0, 4, 0, 0, 4, 12, 8, 8, 12, 8, 12, 12, 8,
+ 4, 0, 0, 4, 0, 4, 4, 0, 8, 12, 12, 8, 12, 8, 8, 12,
+ 36, 32, 32, 36, 32, 36, 36, 32, 40, 44, 44, 40, 44, 40, 40, 44,
+ 32, 36, 36, 32, 36, 32, 32, 36, 44, 40, 40, 44, 40, 44, 44, 40,
+ 128,132,132,128,132,128,128,132,140,136,136,140,136,140,140,136,
+ 132,128,128,132,128,132,132,128,136,140,140,136,140,136,136,140,
+ 164,160,160,164,160,164,164,160,168,172,172,168,172,168,168,172,
+ 160,164,164,160,164,160,160,164,172,168,168,172,168,172,172,168,
+ 132,128,128,132,128,132,132,128,136,140,140,136,140,136,136,140,
+ 128,132,132,128,132,128,128,132,140,136,136,140,136,140,140,136,
+ 160,164,164,160,164,160,160,164,172,168,168,172,168,172,172,168,
+ 164,160,160,164,160,164,164,160,168,172,172,168,172,168,168,172,
+};
+
+/* incZ80Table[i] = (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0) << 4) | ((i == 0x80) << 2), i = 0..256 */
+static const uint8 incZ80Table[257] = {
+ 80, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 16, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 48, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 148,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 144,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168,
+ 144,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 144,128,128,128,128,128,128,128,136,136,136,136,136,136,136,136,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168,
+ 176,160,160,160,160,160,160,160,168,168,168,168,168,168,168,168, 80,
+};
+
+/* decZ80Table[i] = (i & 0xa8) | (((i & 0xff) == 0) << 6) | (((i & 0xf) == 0xf) << 4) | ((i == 0x7f) << 2) | 2, i = 0..255 */
+static const uint8 decZ80Table[256] = {
+ 66, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 58,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 58,
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 26,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 58,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 62,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 130,130,130,130,130,130,130,130,138,138,138,138,138,138,138,154,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+ 162,162,162,162,162,162,162,162,170,170,170,170,170,170,170,186,
+};
+
+/* cbitsZ80Table[i] = (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1), i = 0..511 */
+static const uint8 cbitsZ80Table[512] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+};
+
+/* cbitsZ80DupTable[i] = (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1) | (i & 0xa8), i = 0..511 */
+static const uint8 cbitsZ80DupTable[512] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16, 16, 16, 16, 16, 16, 16, 16, 24, 24, 24, 24, 24, 24, 24, 24,
+ 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 48, 48, 48, 48, 48, 48, 48, 48, 56, 56, 56, 56, 56, 56, 56, 56,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8,
+ 16, 16, 16, 16, 16, 16, 16, 16, 24, 24, 24, 24, 24, 24, 24, 24,
+ 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 40, 40, 40,
+ 48, 48, 48, 48, 48, 48, 48, 48, 56, 56, 56, 56, 56, 56, 56, 56,
+ 132,132,132,132,132,132,132,132,140,140,140,140,140,140,140,140,
+ 148,148,148,148,148,148,148,148,156,156,156,156,156,156,156,156,
+ 164,164,164,164,164,164,164,164,172,172,172,172,172,172,172,172,
+ 180,180,180,180,180,180,180,180,188,188,188,188,188,188,188,188,
+ 132,132,132,132,132,132,132,132,140,140,140,140,140,140,140,140,
+ 148,148,148,148,148,148,148,148,156,156,156,156,156,156,156,156,
+ 164,164,164,164,164,164,164,164,172,172,172,172,172,172,172,172,
+ 180,180,180,180,180,180,180,180,188,188,188,188,188,188,188,188,
+ 5, 5, 5, 5, 5, 5, 5, 5, 13, 13, 13, 13, 13, 13, 13, 13,
+ 21, 21, 21, 21, 21, 21, 21, 21, 29, 29, 29, 29, 29, 29, 29, 29,
+ 37, 37, 37, 37, 37, 37, 37, 37, 45, 45, 45, 45, 45, 45, 45, 45,
+ 53, 53, 53, 53, 53, 53, 53, 53, 61, 61, 61, 61, 61, 61, 61, 61,
+ 5, 5, 5, 5, 5, 5, 5, 5, 13, 13, 13, 13, 13, 13, 13, 13,
+ 21, 21, 21, 21, 21, 21, 21, 21, 29, 29, 29, 29, 29, 29, 29, 29,
+ 37, 37, 37, 37, 37, 37, 37, 37, 45, 45, 45, 45, 45, 45, 45, 45,
+ 53, 53, 53, 53, 53, 53, 53, 53, 61, 61, 61, 61, 61, 61, 61, 61,
+ 129,129,129,129,129,129,129,129,137,137,137,137,137,137,137,137,
+ 145,145,145,145,145,145,145,145,153,153,153,153,153,153,153,153,
+ 161,161,161,161,161,161,161,161,169,169,169,169,169,169,169,169,
+ 177,177,177,177,177,177,177,177,185,185,185,185,185,185,185,185,
+ 129,129,129,129,129,129,129,129,137,137,137,137,137,137,137,137,
+ 145,145,145,145,145,145,145,145,153,153,153,153,153,153,153,153,
+ 161,161,161,161,161,161,161,161,169,169,169,169,169,169,169,169,
+ 177,177,177,177,177,177,177,177,185,185,185,185,185,185,185,185,
+};
+
+/* cbits2Z80Table[i] = (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1) | 2, i = 0..511 */
+static const uint8 cbits2Z80Table[512] = {
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+};
+
+/* cbits2Z80DupTable[i] = (i & 0x10) | (((i >> 6) ^ (i >> 5)) & 4) | ((i >> 8) & 1) | 2 | (i & 0xa8), i = 0..511 */
+static const uint8 cbits2Z80DupTable[512] = {
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 10,
+ 18, 18, 18, 18, 18, 18, 18, 18, 26, 26, 26, 26, 26, 26, 26, 26,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 42,
+ 50, 50, 50, 50, 50, 50, 50, 50, 58, 58, 58, 58, 58, 58, 58, 58,
+ 2, 2, 2, 2, 2, 2, 2, 2, 10, 10, 10, 10, 10, 10, 10, 10,
+ 18, 18, 18, 18, 18, 18, 18, 18, 26, 26, 26, 26, 26, 26, 26, 26,
+ 34, 34, 34, 34, 34, 34, 34, 34, 42, 42, 42, 42, 42, 42, 42, 42,
+ 50, 50, 50, 50, 50, 50, 50, 50, 58, 58, 58, 58, 58, 58, 58, 58,
+ 134,134,134,134,134,134,134,134,142,142,142,142,142,142,142,142,
+ 150,150,150,150,150,150,150,150,158,158,158,158,158,158,158,158,
+ 166,166,166,166,166,166,166,166,174,174,174,174,174,174,174,174,
+ 182,182,182,182,182,182,182,182,190,190,190,190,190,190,190,190,
+ 134,134,134,134,134,134,134,134,142,142,142,142,142,142,142,142,
+ 150,150,150,150,150,150,150,150,158,158,158,158,158,158,158,158,
+ 166,166,166,166,166,166,166,166,174,174,174,174,174,174,174,174,
+ 182,182,182,182,182,182,182,182,190,190,190,190,190,190,190,190,
+ 7, 7, 7, 7, 7, 7, 7, 7, 15, 15, 15, 15, 15, 15, 15, 15,
+ 23, 23, 23, 23, 23, 23, 23, 23, 31, 31, 31, 31, 31, 31, 31, 31,
+ 39, 39, 39, 39, 39, 39, 39, 39, 47, 47, 47, 47, 47, 47, 47, 47,
+ 55, 55, 55, 55, 55, 55, 55, 55, 63, 63, 63, 63, 63, 63, 63, 63,
+ 7, 7, 7, 7, 7, 7, 7, 7, 15, 15, 15, 15, 15, 15, 15, 15,
+ 23, 23, 23, 23, 23, 23, 23, 23, 31, 31, 31, 31, 31, 31, 31, 31,
+ 39, 39, 39, 39, 39, 39, 39, 39, 47, 47, 47, 47, 47, 47, 47, 47,
+ 55, 55, 55, 55, 55, 55, 55, 55, 63, 63, 63, 63, 63, 63, 63, 63,
+ 131,131,131,131,131,131,131,131,139,139,139,139,139,139,139,139,
+ 147,147,147,147,147,147,147,147,155,155,155,155,155,155,155,155,
+ 163,163,163,163,163,163,163,163,171,171,171,171,171,171,171,171,
+ 179,179,179,179,179,179,179,179,187,187,187,187,187,187,187,187,
+ 131,131,131,131,131,131,131,131,139,139,139,139,139,139,139,139,
+ 147,147,147,147,147,147,147,147,155,155,155,155,155,155,155,155,
+ 163,163,163,163,163,163,163,163,171,171,171,171,171,171,171,171,
+ 179,179,179,179,179,179,179,179,187,187,187,187,187,187,187,187,
+};
+
+/* negTable[i] = (((i & 0x0f) != 0) << 4) | ((i == 0x80) << 2) | 2 | (i != 0), i = 0..255 */
+static const uint8 negTable[256] = {
+ 2,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 7,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 3,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+};
+
+/* rrdrldTable[i] = (i << 8) | (i & 0xa8) | (((i & 0xff) == 0) << 6) | parityTable[i], i = 0..255 */
+static const uint16 rrdrldTable[256] = {
+ 0x0044,0x0100,0x0200,0x0304,0x0400,0x0504,0x0604,0x0700,
+ 0x0808,0x090c,0x0a0c,0x0b08,0x0c0c,0x0d08,0x0e08,0x0f0c,
+ 0x1000,0x1104,0x1204,0x1300,0x1404,0x1500,0x1600,0x1704,
+ 0x180c,0x1908,0x1a08,0x1b0c,0x1c08,0x1d0c,0x1e0c,0x1f08,
+ 0x2020,0x2124,0x2224,0x2320,0x2424,0x2520,0x2620,0x2724,
+ 0x282c,0x2928,0x2a28,0x2b2c,0x2c28,0x2d2c,0x2e2c,0x2f28,
+ 0x3024,0x3120,0x3220,0x3324,0x3420,0x3524,0x3624,0x3720,
+ 0x3828,0x392c,0x3a2c,0x3b28,0x3c2c,0x3d28,0x3e28,0x3f2c,
+ 0x4000,0x4104,0x4204,0x4300,0x4404,0x4500,0x4600,0x4704,
+ 0x480c,0x4908,0x4a08,0x4b0c,0x4c08,0x4d0c,0x4e0c,0x4f08,
+ 0x5004,0x5100,0x5200,0x5304,0x5400,0x5504,0x5604,0x5700,
+ 0x5808,0x590c,0x5a0c,0x5b08,0x5c0c,0x5d08,0x5e08,0x5f0c,
+ 0x6024,0x6120,0x6220,0x6324,0x6420,0x6524,0x6624,0x6720,
+ 0x6828,0x692c,0x6a2c,0x6b28,0x6c2c,0x6d28,0x6e28,0x6f2c,
+ 0x7020,0x7124,0x7224,0x7320,0x7424,0x7520,0x7620,0x7724,
+ 0x782c,0x7928,0x7a28,0x7b2c,0x7c28,0x7d2c,0x7e2c,0x7f28,
+ 0x8080,0x8184,0x8284,0x8380,0x8484,0x8580,0x8680,0x8784,
+ 0x888c,0x8988,0x8a88,0x8b8c,0x8c88,0x8d8c,0x8e8c,0x8f88,
+ 0x9084,0x9180,0x9280,0x9384,0x9480,0x9584,0x9684,0x9780,
+ 0x9888,0x998c,0x9a8c,0x9b88,0x9c8c,0x9d88,0x9e88,0x9f8c,
+ 0xa0a4,0xa1a0,0xa2a0,0xa3a4,0xa4a0,0xa5a4,0xa6a4,0xa7a0,
+ 0xa8a8,0xa9ac,0xaaac,0xaba8,0xacac,0xada8,0xaea8,0xafac,
+ 0xb0a0,0xb1a4,0xb2a4,0xb3a0,0xb4a4,0xb5a0,0xb6a0,0xb7a4,
+ 0xb8ac,0xb9a8,0xbaa8,0xbbac,0xbca8,0xbdac,0xbeac,0xbfa8,
+ 0xc084,0xc180,0xc280,0xc384,0xc480,0xc584,0xc684,0xc780,
+ 0xc888,0xc98c,0xca8c,0xcb88,0xcc8c,0xcd88,0xce88,0xcf8c,
+ 0xd080,0xd184,0xd284,0xd380,0xd484,0xd580,0xd680,0xd784,
+ 0xd88c,0xd988,0xda88,0xdb8c,0xdc88,0xdd8c,0xde8c,0xdf88,
+ 0xe0a0,0xe1a4,0xe2a4,0xe3a0,0xe4a4,0xe5a0,0xe6a0,0xe7a4,
+ 0xe8ac,0xe9a8,0xeaa8,0xebac,0xeca8,0xedac,0xeeac,0xefa8,
+ 0xf0a4,0xf1a0,0xf2a0,0xf3a4,0xf4a0,0xf5a4,0xf6a4,0xf7a0,
+ 0xf8a8,0xf9ac,0xfaac,0xfba8,0xfcac,0xfda8,0xfea8,0xffac,
+};
+
+/* cpTable[i] = (i & 0x80) | (((i & 0xff) == 0) << 6), i = 0..255 */
+static const uint8 cpTable[256] = {
+ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+ 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
+};
+
+#if defined(DEBUG) || defined(iDEBUG)
+static const char* Mnemonics[256] =
+{
+ "NOP", "LD BC,#h", "LD (BC),A", "INC BC", "INC B", "DEC B", "LD B,*h", "RLCA",
+ "EX AF,AF'", "ADD HL,BC", "LD A,(BC)", "DEC BC", "INC C", "DEC C", "LD C,*h", "RRCA",
+ "DJNZ @h", "LD DE,#h", "LD (DE),A", "INC DE", "INC D", "DEC D", "LD D,*h", "RLA",
+ "JR @h", "ADD HL,DE", "LD A,(DE)", "DEC DE", "INC E", "DEC E", "LD E,*h", "RRA",
+ "JR NZ,@h", "LD HL,#h", "LD (#h),HL", "INC HL", "INC H", "DEC H", "LD H,*h", "DAA",
+ "JR Z,@h", "ADD HL,HL", "LD HL,(#h)", "DEC HL", "INC L", "DEC L", "LD L,*h", "CPL",
+ "JR NC,@h", "LD SP,#h", "LD (#h),A", "INC SP", "INC (HL)", "DEC (HL)", "LD (HL),*h", "SCF",
+ "JR C,@h", "ADD HL,SP", "LD A,(#h)", "DEC SP", "INC A", "DEC A", "LD A,*h", "CCF",
+ "LD B,B", "LD B,C", "LD B,D", "LD B,E", "LD B,H", "LD B,L", "LD B,(HL)", "LD B,A",
+ "LD C,B", "LD C,C", "LD C,D", "LD C,E", "LD C,H", "LD C,L", "LD C,(HL)", "LD C,A",
+ "LD D,B", "LD D,C", "LD D,D", "LD D,E", "LD D,H", "LD D,L", "LD D,(HL)", "LD D,A",
+ "LD E,B", "LD E,C", "LD E,D", "LD E,E", "LD E,H", "LD E,L", "LD E,(HL)", "LD E,A",
+ "LD H,B", "LD H,C", "LD H,D", "LD H,E", "LD H,H", "LD H,L", "LD H,(HL)", "LD H,A",
+ "LD L,B", "LD L,C", "LD L,D", "LD L,E", "LD L,H", "LD L,L", "LD L,(HL)", "LD L,A",
+ "LD (HL),B", "LD (HL),C", "LD (HL),D", "LD (HL),E", "LD (HL),H", "LD (HL),L", "HALT", "LD (HL),A",
+ "LD A,B", "LD A,C", "LD A,D", "LD A,E", "LD A,H", "LD A,L", "LD A,(HL)", "LD A,A",
+ "ADD B", "ADD C", "ADD D", "ADD E", "ADD H", "ADD L", "ADD (HL)", "ADD A",
+ "ADC B", "ADC C", "ADC D", "ADC E", "ADC H", "ADC L", "ADC (HL)", "ADC A",
+ "SUB B", "SUB C", "SUB D", "SUB E", "SUB H", "SUB L", "SUB (HL)", "SUB A",
+ "SBC B", "SBC C", "SBC D", "SBC E", "SBC H", "SBC L", "SBC (HL)", "SBC A",
+ "AND B", "AND C", "AND D", "AND E", "AND H", "AND L", "AND (HL)", "AND A",
+ "XOR B", "XOR C", "XOR D", "XOR E", "XOR H", "XOR L", "XOR (HL)", "XOR A",
+ "OR B", "OR C", "OR D", "OR E", "OR H", "OR L", "OR (HL)", "OR A",
+ "CP B", "CP C", "CP D", "CP E", "CP H", "CP L", "CP (HL)", "CP A",
+ "RET NZ", "POP BC", "JP NZ,#h", "JP #h", "CALL NZ,#h", "PUSH BC", "ADD *h", "RST 00h",
+ "RET Z", "RET", "JP Z,#h", "PFX_CB", "CALL Z,#h", "CALL #h", "ADC *h", "RST 08h",
+ "RET NC", "POP DE", "JP NC,#h", "OUTA (*h)", "CALL NC,#h", "PUSH DE", "SUB *h", "RST 10h",
+ "RET C", "EXX", "JP C,#h", "INA (*h)", "CALL C,#h", "PFX_DD", "SBC *h", "RST 18h",
+ "RET PO", "POP HL", "JP PO,#h", "EX HL,(SP)", "CALL PO,#h", "PUSH HL", "AND *h", "RST 20h",
+ "RET PE", "LD PC,HL", "JP PE,#h", "EX DE,HL", "CALL PE,#h", "PFX_ED", "XOR *h", "RST 28h",
+ "RET P", "POP AF", "JP P,#h", "DI", "CALL P,#h", "PUSH AF", "OR *h", "RST 30h",
+ "RET M", "LD SP,HL", "JP M,#h", "EI", "CALL M,#h", "PFX_FD", "CP *h", "RST 38h"
+};
+
+static const char* MnemonicsCB[256] =
+{
+ "RLC B", "RLC C", "RLC D", "RLC E", "RLC H", "RLC L", "RLC (HL)", "RLC A",
+ "RRC B", "RRC C", "RRC D", "RRC E", "RRC H", "RRC L", "RRC (HL)", "RRC A",
+ "RL B", "RL C", "RL D", "RL E", "RL H", "RL L", "RL (HL)", "RL A",
+ "RR B", "RR C", "RR D", "RR E", "RR H", "RR L", "RR (HL)", "RR A",
+ "SLA B", "SLA C", "SLA D", "SLA E", "SLA H", "SLA L", "SLA (HL)", "SLA A",
+ "SRA B", "SRA C", "SRA D", "SRA E", "SRA H", "SRA L", "SRA (HL)", "SRA A",
+ "SLL B", "SLL C", "SLL D", "SLL E", "SLL H", "SLL L", "SLL (HL)", "SLL A",
+ "SRL B", "SRL C", "SRL D", "SRL E", "SRL H", "SRL L", "SRL (HL)", "SRL A",
+ "BIT 0,B", "BIT 0,C", "BIT 0,D", "BIT 0,E", "BIT 0,H", "BIT 0,L", "BIT 0,(HL)", "BIT 0,A",
+ "BIT 1,B", "BIT 1,C", "BIT 1,D", "BIT 1,E", "BIT 1,H", "BIT 1,L", "BIT 1,(HL)", "BIT 1,A",
+ "BIT 2,B", "BIT 2,C", "BIT 2,D", "BIT 2,E", "BIT 2,H", "BIT 2,L", "BIT 2,(HL)", "BIT 2,A",
+ "BIT 3,B", "BIT 3,C", "BIT 3,D", "BIT 3,E", "BIT 3,H", "BIT 3,L", "BIT 3,(HL)", "BIT 3,A",
+ "BIT 4,B", "BIT 4,C", "BIT 4,D", "BIT 4,E", "BIT 4,H", "BIT 4,L", "BIT 4,(HL)", "BIT 4,A",
+ "BIT 5,B", "BIT 5,C", "BIT 5,D", "BIT 5,E", "BIT 5,H", "BIT 5,L", "BIT 5,(HL)", "BIT 5,A",
+ "BIT 6,B", "BIT 6,C", "BIT 6,D", "BIT 6,E", "BIT 6,H", "BIT 6,L", "BIT 6,(HL)", "BIT 6,A",
+ "BIT 7,B", "BIT 7,C", "BIT 7,D", "BIT 7,E", "BIT 7,H", "BIT 7,L", "BIT 7,(HL)", "BIT 7,A",
+ "RES 0,B", "RES 0,C", "RES 0,D", "RES 0,E", "RES 0,H", "RES 0,L", "RES 0,(HL)", "RES 0,A",
+ "RES 1,B", "RES 1,C", "RES 1,D", "RES 1,E", "RES 1,H", "RES 1,L", "RES 1,(HL)", "RES 1,A",
+ "RES 2,B", "RES 2,C", "RES 2,D", "RES 2,E", "RES 2,H", "RES 2,L", "RES 2,(HL)", "RES 2,A",
+ "RES 3,B", "RES 3,C", "RES 3,D", "RES 3,E", "RES 3,H", "RES 3,L", "RES 3,(HL)", "RES 3,A",
+ "RES 4,B", "RES 4,C", "RES 4,D", "RES 4,E", "RES 4,H", "RES 4,L", "RES 4,(HL)", "RES 4,A",
+ "RES 5,B", "RES 5,C", "RES 5,D", "RES 5,E", "RES 5,H", "RES 5,L", "RES 5,(HL)", "RES 5,A",
+ "RES 6,B", "RES 6,C", "RES 6,D", "RES 6,E", "RES 6,H", "RES 6,L", "RES 6,(HL)", "RES 6,A",
+ "RES 7,B", "RES 7,C", "RES 7,D", "RES 7,E", "RES 7,H", "RES 7,L", "RES 7,(HL)", "RES 7,A",
+ "SET 0,B", "SET 0,C", "SET 0,D", "SET 0,E", "SET 0,H", "SET 0,L", "SET 0,(HL)", "SET 0,A",
+ "SET 1,B", "SET 1,C", "SET 1,D", "SET 1,E", "SET 1,H", "SET 1,L", "SET 1,(HL)", "SET 1,A",
+ "SET 2,B", "SET 2,C", "SET 2,D", "SET 2,E", "SET 2,H", "SET 2,L", "SET 2,(HL)", "SET 2,A",
+ "SET 3,B", "SET 3,C", "SET 3,D", "SET 3,E", "SET 3,H", "SET 3,L", "SET 3,(HL)", "SET 3,A",
+ "SET 4,B", "SET 4,C", "SET 4,D", "SET 4,E", "SET 4,H", "SET 4,L", "SET 4,(HL)", "SET 4,A",
+ "SET 5,B", "SET 5,C", "SET 5,D", "SET 5,E", "SET 5,H", "SET 5,L", "SET 5,(HL)", "SET 5,A",
+ "SET 6,B", "SET 6,C", "SET 6,D", "SET 6,E", "SET 6,H", "SET 6,L", "SET 6,(HL)", "SET 6,A",
+ "SET 7,B", "SET 7,C", "SET 7,D", "SET 7,E", "SET 7,H", "SET 7,L", "SET 7,(HL)", "SET 7,A"
+};
+
+static const char* MnemonicsED[256] =
+{
+ "DB EDh,00h", "DB EDh,01h", "DB EDh,02h", "DB EDh,03h",
+ "DB EDh,04h", "DB EDh,05h", "DB EDh,06h", "DB EDh,07h",
+ "DB EDh,08h", "DB EDh,09h", "DB EDh,0Ah", "DB EDh,0Bh",
+ "DB EDh,0Ch", "DB EDh,0Dh", "DB EDh,0Eh", "DB EDh,0Fh",
+ "DB EDh,10h", "DB EDh,11h", "DB EDh,12h", "DB EDh,13h",
+ "DB EDh,14h", "DB EDh,15h", "DB EDh,16h", "DB EDh,17h",
+ "DB EDh,18h", "DB EDh,19h", "DB EDh,1Ah", "DB EDh,1Bh",
+ "DB EDh,1Ch", "DB EDh,1Dh", "DB EDh,1Eh", "DB EDh,1Fh",
+ "DB EDh,20h", "DB EDh,21h", "DB EDh,22h", "DB EDh,23h",
+ "DB EDh,24h", "DB EDh,25h", "DB EDh,26h", "DB EDh,27h",
+ "DB EDh,28h", "DB EDh,29h", "DB EDh,2Ah", "DB EDh,2Bh",
+ "DB EDh,2Ch", "DB EDh,2Dh", "DB EDh,2Eh", "DB EDh,2Fh",
+ "DB EDh,30h", "DB EDh,31h", "DB EDh,32h", "DB EDh,33h",
+ "DB EDh,34h", "DB EDh,35h", "DB EDh,36h", "DB EDh,37h",
+ "DB EDh,38h", "DB EDh,39h", "DB EDh,3Ah", "DB EDh,3Bh",
+ "DB EDh,3Ch", "DB EDh,3Dh", "DB EDh,3Eh", "DB EDh,3Fh",
+ "IN B,(C)", "OUT (C),B", "SBC HL,BC", "LD (#h),BC",
+ "NEG", "RETN", "IM 0", "LD I,A",
+ "IN C,(C)", "OUT (C),C", "ADC HL,BC", "LD BC,(#h)",
+ "DB EDh,4Ch", "RETI", "DB EDh,4Eh", "LD R,A",
+ "IN D,(C)", "OUT (C),D", "SBC HL,DE", "LD (#h),DE",
+ "DB EDh,54h", "DB EDh,55h", "IM 1", "LD A,I",
+ "IN E,(C)", "OUT (C),E", "ADC HL,DE", "LD DE,(#h)",
+ "DB EDh,5Ch", "DB EDh,5Dh", "IM 2", "LD A,R",
+ "IN H,(C)", "OUT (C),H", "SBC HL,HL", "LD (#h),HL",
+ "DB EDh,64h", "DB EDh,65h", "DB EDh,66h", "RRD",
+ "IN L,(C)", "OUT (C),L", "ADC HL,HL", "LD HL,(#h)",
+ "DB EDh,6Ch", "DB EDh,6Dh", "DB EDh,6Eh", "RLD",
+ "IN F,(C)", "DB EDh,71h", "SBC HL,SP", "LD (#h),SP",
+ "DB EDh,74h", "DB EDh,75h", "DB EDh,76h", "DB EDh,77h",
+ "IN A,(C)", "OUT (C),A", "ADC HL,SP", "LD SP,(#h)",
+ "DB EDh,7Ch", "DB EDh,7Dh", "DB EDh,7Eh", "DB EDh,7Fh",
+ "DB EDh,80h", "DB EDh,81h", "DB EDh,82h", "DB EDh,83h",
+ "DB EDh,84h", "DB EDh,85h", "DB EDh,86h", "DB EDh,87h",
+ "DB EDh,88h", "DB EDh,89h", "DB EDh,8Ah", "DB EDh,8Bh",
+ "DB EDh,8Ch", "DB EDh,8Dh", "DB EDh,8Eh", "DB EDh,8Fh",
+ "DB EDh,90h", "DB EDh,91h", "DB EDh,92h", "DB EDh,93h",
+ "DB EDh,94h", "DB EDh,95h", "DB EDh,96h", "DB EDh,97h",
+ "DB EDh,98h", "DB EDh,99h", "DB EDh,9Ah", "DB EDh,9Bh",
+ "DB EDh,9Ch", "DB EDh,9Dh", "DB EDh,9Eh", "DB EDh,9Fh",
+ "LDI", "CPI", "INI", "OUTI",
+ "DB EDh,A4h", "DB EDh,A5h", "DB EDh,A6h", "DB EDh,A7h",
+ "LDD", "CPD", "IND", "OUTD",
+ "DB EDh,ACh", "DB EDh,ADh", "DB EDh,AEh", "DB EDh,AFh",
+ "LDIR", "CPIR", "INIR", "OTIR",
+ "DB EDh,B4h", "DB EDh,B5h", "DB EDh,B6h", "DB EDh,B7h",
+ "LDDR", "CPDR", "INDR", "OTDR",
+ "DB EDh,BCh", "DB EDh,BDh", "DB EDh,BEh", "DB EDh,BFh",
+ "DB EDh,C0h", "DB EDh,C1h", "DB EDh,C2h", "DB EDh,C3h",
+ "DB EDh,C4h", "DB EDh,C5h", "DB EDh,C6h", "DB EDh,C7h",
+ "DB EDh,C8h", "DB EDh,C9h", "DB EDh,CAh", "DB EDh,CBh",
+ "DB EDh,CCh", "DB EDh,CDh", "DB EDh,CEh", "DB EDh,CFh",
+ "DB EDh,D0h", "DB EDh,D1h", "DB EDh,D2h", "DB EDh,D3h",
+ "DB EDh,D4h", "DB EDh,D5h", "DB EDh,D6h", "DB EDh,D7h",
+ "DB EDh,D8h", "DB EDh,D9h", "DB EDh,DAh", "DB EDh,DBh",
+ "DB EDh,DCh", "DB EDh,DDh", "DB EDh,DEh", "DB EDh,DFh",
+ "DB EDh,E0h", "DB EDh,E1h", "DB EDh,E2h", "DB EDh,E3h",
+ "DB EDh,E4h", "DB EDh,E5h", "DB EDh,E6h", "DB EDh,E7h",
+ "DB EDh,E8h", "DB EDh,E9h", "DB EDh,EAh", "DB EDh,EBh",
+ "DB EDh,ECh", "DB EDh,EDh", "DB EDh,EEh", "DB EDh,EFh",
+ "DB EDh,F0h", "DB EDh,F1h", "DB EDh,F2h", "DB EDh,F3h",
+ "DB EDh,F4h", "DB EDh,F5h", "DB EDh,F6h", "DB EDh,F7h",
+ "DB EDh,F8h", "DB EDh,F9h", "DB EDh,FAh", "DB EDh,FBh",
+ "DB EDh,FCh", "DB EDh,FDh", "DB EDh,FEh", "DB EDh,FFh"
+};
+
+static const char* MnemonicsXX[256] =
+{
+ "NOP", "LD BC,#h", "LD (BC),A", "INC BC", "INC B", "DEC B", "LD B,*h", "RLCA",
+ "EX AF,AF'", "ADD I%,BC", "LD A,(BC)", "DEC BC", "INC C", "DEC C", "LD C,*h", "RRCA",
+ "DJNZ @h", "LD DE,#h", "LD (DE),A", "INC DE", "INC D", "DEC D", "LD D,*h", "RLA",
+ "JR @h", "ADD I%,DE", "LD A,(DE)", "DEC DE", "INC E", "DEC E", "LD E,*h", "RRA",
+ "JR NZ,@h", "LD I%,#h", "LD (#h),I%", "INC I%", "INC I%h", "DEC I%h", "LD I%h,*h", "DAA",
+ "JR Z,@h", "ADD I%,I%", "LD I%,(#h)", "DEC I%", "INC I%l", "DEC I%l", "LD I%l,*h", "CPL",
+ "JR NC,@h", "LD SP,#h", "LD (#h),A", "INC SP", "INC (I%+^h)", "DEC (I%+^h)", "LD (I%+^h),*h", "SCF",
+ "JR C,@h", "ADD I%,SP", "LD A,(#h)", "DEC SP", "INC A", "DEC A", "LD A,*h", "CCF",
+ "LD B,B", "LD B,C", "LD B,D", "LD B,E", "LD B,I%h", "LD B,I%l", "LD B,(I%+^h)", "LD B,A",
+ "LD C,B", "LD C,C", "LD C,D", "LD C,E", "LD C,I%h", "LD C,I%l", "LD C,(I%+^h)", "LD C,A",
+ "LD D,B", "LD D,C", "LD D,D", "LD D,E", "LD D,I%h", "LD D,I%l", "LD D,(I%+^h)", "LD D,A",
+ "LD E,B", "LD E,C", "LD E,D", "LD E,E", "LD E,I%h", "LD E,I%l", "LD E,(I%+^h)", "LD E,A",
+ "LD I%h,B", "LD I%h,C", "LD I%h,D", "LD I%h,E", "LD I%h,I%h", "LD I%h,I%l", "LD H,(I%+^h)", "LD I%h,A",
+ "LD I%l,B", "LD I%l,C", "LD I%l,D", "LD I%l,E", "LD I%l,I%h", "LD I%l,I%l", "LD L,(I%+^h)", "LD I%l,A",
+ "LD (I%+^h),B", "LD (I%+^h),C", "LD (I%+^h),D", "LD (I%+^h),E", "LD (I%+^h),H", "LD (I%+^h),L", "HALT", "LD (I%+^h),A",
+ "LD A,B", "LD A,C", "LD A,D", "LD A,E", "LD A,I%h", "LD A,I%l", "LD A,(I%+^h)", "LD A,A",
+ "ADD B", "ADD C", "ADD D", "ADD E", "ADD I%h", "ADD I%l", "ADD (I%+^h)", "ADD A",
+ "ADC B", "ADC C", "ADC D", "ADC E", "ADC I%h", "ADC I%l", "ADC (I%+^h)", "ADC,A",
+ "SUB B", "SUB C", "SUB D", "SUB E", "SUB I%h", "SUB I%l", "SUB (I%+^h)", "SUB A",
+ "SBC B", "SBC C", "SBC D", "SBC E", "SBC I%h", "SBC I%l", "SBC (I%+^h)", "SBC A",
+ "AND B", "AND C", "AND D", "AND E", "AND I%h", "AND I%l", "AND (I%+^h)", "AND A",
+ "XOR B", "XOR C", "XOR D", "XOR E", "XOR I%h", "XOR I%l", "XOR (I%+^h)", "XOR A",
+ "OR B", "OR C", "OR D", "OR E", "OR I%h", "OR I%l", "OR (I%+^h)", "OR A",
+ "CP B", "CP C", "CP D", "CP E", "CP I%h", "CP I%l", "CP (I%+^h)", "CP A",
+ "RET NZ", "POP BC", "JP NZ,#h", "JP #h", "CALL NZ,#h", "PUSH BC", "ADD *h", "RST 00h",
+ "RET Z", "RET", "JP Z,#h", "PFX_CB", "CALL Z,#h", "CALL #h", "ADC *h", "RST 08h",
+ "RET NC", "POP DE", "JP NC,#h", "OUTA (*h)", "CALL NC,#h", "PUSH DE", "SUB *h", "RST 10h",
+ "RET C", "EXX", "JP C,#h", "INA (*h)", "CALL C,#h", "PFX_DD", "SBC *h", "RST 18h",
+ "RET PO", "POP I%", "JP PO,#h", "EX I%,(SP)", "CALL PO,#h", "PUSH I%", "AND *h", "RST 20h",
+ "RET PE", "LD PC,I%", "JP PE,#h", "EX DE,I%", "CALL PE,#h", "PFX_ED", "XOR *h", "RST 28h",
+ "RET P", "POP AF", "JP P,#h", "DI", "CALL P,#h", "PUSH AF", "OR *h", "RST 30h",
+ "RET M", "LD SP,I%", "JP M,#h", "EI", "CALL M,#h", "PFX_FD", "CP *h", "RST 38h"
+};
+
+static const char* MnemonicsXCB[256] =
+{
+ "RLC B", "RLC C", "RLC D", "RLC E", "RLC H", "RLC L", "RLC (I%@h)", "RLC A",
+ "RRC B", "RRC C", "RRC D", "RRC E", "RRC H", "RRC L", "RRC (I%@h)", "RRC A",
+ "RL B", "RL C", "RL D", "RL E", "RL H", "RL L", "RL (I%@h)", "RL A",
+ "RR B", "RR C", "RR D", "RR E", "RR H", "RR L", "RR (I%@h)", "RR A",
+ "SLA B", "SLA C", "SLA D", "SLA E", "SLA H", "SLA L", "SLA (I%@h)", "SLA A",
+ "SRA B", "SRA C", "SRA D", "SRA E", "SRA H", "SRA L", "SRA (I%@h)", "SRA A",
+ "SLL B", "SLL C", "SLL D", "SLL E", "SLL H", "SLL L", "SLL (I%@h)", "SLL A",
+ "SRL B", "SRL C", "SRL D", "SRL E", "SRL H", "SRL L", "SRL (I%@h)", "SRL A",
+ "BIT 0,B", "BIT 0,C", "BIT 0,D", "BIT 0,E", "BIT 0,H", "BIT 0,L", "BIT 0,(I%@h)", "BIT 0,A",
+ "BIT 1,B", "BIT 1,C", "BIT 1,D", "BIT 1,E", "BIT 1,H", "BIT 1,L", "BIT 1,(I%@h)", "BIT 1,A",
+ "BIT 2,B", "BIT 2,C", "BIT 2,D", "BIT 2,E", "BIT 2,H", "BIT 2,L", "BIT 2,(I%@h)", "BIT 2,A",
+ "BIT 3,B", "BIT 3,C", "BIT 3,D", "BIT 3,E", "BIT 3,H", "BIT 3,L", "BIT 3,(I%@h)", "BIT 3,A",
+ "BIT 4,B", "BIT 4,C", "BIT 4,D", "BIT 4,E", "BIT 4,H", "BIT 4,L", "BIT 4,(I%@h)", "BIT 4,A",
+ "BIT 5,B", "BIT 5,C", "BIT 5,D", "BIT 5,E", "BIT 5,H", "BIT 5,L", "BIT 5,(I%@h)", "BIT 5,A",
+ "BIT 6,B", "BIT 6,C", "BIT 6,D", "BIT 6,E", "BIT 6,H", "BIT 6,L", "BIT 6,(I%@h)", "BIT 6,A",
+ "BIT 7,B", "BIT 7,C", "BIT 7,D", "BIT 7,E", "BIT 7,H", "BIT 7,L", "BIT 7,(I%@h)", "BIT 7,A",
+ "RES 0,B", "RES 0,C", "RES 0,D", "RES 0,E", "RES 0,H", "RES 0,L", "RES 0,(I%@h)", "RES 0,A",
+ "RES 1,B", "RES 1,C", "RES 1,D", "RES 1,E", "RES 1,H", "RES 1,L", "RES 1,(I%@h)", "RES 1,A",
+ "RES 2,B", "RES 2,C", "RES 2,D", "RES 2,E", "RES 2,H", "RES 2,L", "RES 2,(I%@h)", "RES 2,A",
+ "RES 3,B", "RES 3,C", "RES 3,D", "RES 3,E", "RES 3,H", "RES 3,L", "RES 3,(I%@h)", "RES 3,A",
+ "RES 4,B", "RES 4,C", "RES 4,D", "RES 4,E", "RES 4,H", "RES 4,L", "RES 4,(I%@h)", "RES 4,A",
+ "RES 5,B", "RES 5,C", "RES 5,D", "RES 5,E", "RES 5,H", "RES 5,L", "RES 5,(I%@h)", "RES 5,A",
+ "RES 6,B", "RES 6,C", "RES 6,D", "RES 6,E", "RES 6,H", "RES 6,L", "RES 6,(I%@h)", "RES 6,A",
+ "RES 7,B", "RES 7,C", "RES 7,D", "RES 7,E", "RES 7,H", "RES 7,L", "RES 7,(I%@h)", "RES 7,A",
+ "SET 0,B", "SET 0,C", "SET 0,D", "SET 0,E", "SET 0,H", "SET 0,L", "SET 0,(I%@h)", "SET 0,A",
+ "SET 1,B", "SET 1,C", "SET 1,D", "SET 1,E", "SET 1,H", "SET 1,L", "SET 1,(I%@h)", "SET 1,A",
+ "SET 2,B", "SET 2,C", "SET 2,D", "SET 2,E", "SET 2,H", "SET 2,L", "SET 2,(I%@h)", "SET 2,A",
+ "SET 3,B", "SET 3,C", "SET 3,D", "SET 3,E", "SET 3,H", "SET 3,L", "SET 3,(I%@h)", "SET 3,A",
+ "SET 4,B", "SET 4,C", "SET 4,D", "SET 4,E", "SET 4,H", "SET 4,L", "SET 4,(I%@h)", "SET 4,A",
+ "SET 5,B", "SET 5,C", "SET 5,D", "SET 5,E", "SET 5,H", "SET 5,L", "SET 5,(I%@h)", "SET 5,A",
+ "SET 6,B", "SET 6,C", "SET 6,D", "SET 6,E", "SET 6,H", "SET 6,L", "SET 6,(I%@h)", "SET 6,A",
+ "SET 7,B", "SET 7,C", "SET 7,D", "SET 7,E", "SET 7,H", "SET 7,L", "SET 7,(I%@h)", "SET 7,A"
+};
+
+static const char* CPMCalls[41] =
+{
+ "System Reset", "Console Input", "Console Output", "Reader Input", "Punch Output", "List Output", "Direct I/O", "Get IOByte",
+ "Set IOByte", "Print String", "Read Buffered", "Console Status", "Get Version", "Reset Disk", "Select Disk", "Open File",
+ "Close File", "Search First", "Search Next", "Delete File", "Read Sequential", "Write Sequential", "Make File", "Rename File",
+ "Get Login Vector", "Get Current Disk", "Set DMA Address", "Get Alloc", "Write Protect Disk", "Get R/O Vector", "Set File Attr", "Get Disk Params",
+ "Get/Set User", "Read Random", "Write Random", "Get File Size", "Set Random Record", "Reset Drive", "N/A", "N/A", "Write Random 0 fill"
+};
+
+int32 Watch = -1;
+#endif
+
+/* Memory management */
+static uint8 GET_BYTE(uint32 Addr) {
+ return _RamRead(Addr & ADDRMASK);
+}
+
+static void PUT_BYTE(uint32 Addr, uint32 Value) {
+ _RamWrite(Addr & ADDRMASK, Value);
+}
+
+static uint16 GET_WORD(uint32 a) {
+ return GET_BYTE(a) | (GET_BYTE(a + 1) << 8);
+}
+
+static void PUT_WORD(uint32 Addr, uint32 Value) {
+ _RamWrite(Addr, Value);
+ _RamWrite(++Addr, Value >> 8);
+}
+
+#define RAM_MM(a) GET_BYTE(a--)
+#define RAM_PP(a) GET_BYTE(a++)
+
+#define PUT_BYTE_PP(a,v) PUT_BYTE(a++, v)
+#define PUT_BYTE_MM(a,v) PUT_BYTE(a--, v)
+#define MM_PUT_BYTE(a,v) PUT_BYTE(--a, v)
+
+#define PUSH(x) do { \
+ MM_PUT_BYTE(SP, (x) >> 8); \
+ MM_PUT_BYTE(SP, x); \
+} while (0)
+
+/* Macros for the IN/OUT instructions INI/INIR/IND/INDR/OUTI/OTIR/OUTD/OTDR
+
+Pre condition
+temp == value of register B at entry of the instruction
+acu == value of transferred byte (IN or OUT)
+Post condition
+F is set correctly
+
+Use INOUTFLAGS_ZERO(x) for INIR/INDR/OTIR/OTDR where
+x == (C + 1) & 0xff for INIR
+x == L for OTIR and OTDR
+x == (C - 1) & 0xff for INDR
+Use INOUTFLAGS_NONZERO(x) for INI/IND/OUTI/OUTD where
+x == (C + 1) & 0xff for INI
+x == L for OUTI and OUTD
+x == (C - 1) & 0xff for IND
+*/
+#define INOUTFLAGS(syxz, x) \
+ AF = (AF & 0xff00) | (syxz) | /* SF, YF, XF, ZF */ \
+ ((acu & 0x80) >> 6) | /* NF */ \
+ ((acu + (x)) > 0xff ? (FLAG_C | FLAG_H) : 0) | /* CF, HF */ \
+ parityTable[((acu + (x)) & 7) ^ temp] /* PF */
+
+#define INOUTFLAGS_ZERO(x) INOUTFLAGS(FLAG_Z, x)
+#define INOUTFLAGS_NONZERO(x) \
+ INOUTFLAGS((HIGH_REGISTER(BC) & 0xa8) | ((HIGH_REGISTER(BC) == 0) << 6), x)
+
+static inline void Z80reset(void) {
+ PC = 0;
+ IFF = 0;
+ IR = 0;
+ Status = 0;
+ Debug = 0;
+ Break = -1;
+ Step = -1;
+}
+
+#ifdef DEBUG
+void watchprint(uint16 pos) {
+ uint8 I, J;
+ _puts("\r\n");
+ _puts(" Watch : "); _puthex16(Watch);
+ _puts(" = "); _puthex8(_RamRead(Watch)); _putcon(':'); _puthex8(_RamRead(Watch + 1));
+ _puts(" / ");
+ for (J = 0, I = _RamRead(Watch); J < 8; ++J, I <<= 1) _putcon(I & 0x80 ? '1' : '0');
+ _putcon(':');
+ for (J = 0, I = _RamRead(Watch + 1); J < 8; ++J, I <<= 1) _putcon(I & 0x80 ? '1' : '0');
+}
+
+void memdump(uint16 pos) {
+ uint16 h = pos;
+ uint16 c = pos;
+ uint8 l, i;
+ uint8 ch = pos & 0xff;
+
+ _puts(" ");
+ for (i = 0; i < 16; ++i) {
+ _puthex8(ch++ & 0x0f);
+ _puts(" ");
+ }
+ _puts("\r\n");
+ _puts(" ");
+ for (i = 0; i < 16; ++i)
+ _puts("---");
+ _puts("\r\n");
+ for (l = 0; l < 16; ++l) {
+ _puthex16(h);
+ _puts(" : ");
+ for (i = 0; i < 16; ++i) {
+ _puthex8(_RamRead(h++));
+ _puts(" ");
+ }
+ for (i = 0; i < 16; ++i) {
+ ch = _RamRead(c++);
+ _putcon(ch > 31 && ch < 127 ? ch : '.');
+ }
+ _puts("\r\n");
+ }
+}
+
+uint8 Disasm(uint16 pos) {
+ const char* txt;
+ char jr;
+ uint8 ch = _RamRead(pos);
+ uint8 count = 1;
+ uint8 C = 0;
+
+ switch (ch) {
+ case 0xCB: ++pos; txt = MnemonicsCB[_RamRead(pos++)]; count++; break;
+ case 0xED: ++pos; txt = MnemonicsED[_RamRead(pos++)]; count++; break;
+ case 0xDD: ++pos; C = 'X';
+ if (_RamRead(pos) != 0xCB) {
+ txt = MnemonicsXX[_RamRead(pos++)]; ++count;
+ } else {
+ ++pos; txt = MnemonicsXCB[_RamRead(pos++)]; count += 2;
+ }
+ break;
+ case 0xFD: ++pos; C = 'Y';
+ if (_RamRead(pos) != 0xCB) {
+ txt = MnemonicsXX[_RamRead(pos++)]; ++count;
+ } else {
+ ++pos; txt = MnemonicsXCB[_RamRead(pos++)]; count += 2;
+ }
+ break;
+ default: txt = Mnemonics[_RamRead(pos++)];
+ }
+ while (*txt != 0) {
+ switch (*txt) {
+ case '*':
+ txt += 2;
+ ++count;
+ _puthex8(_RamRead(pos++));
+ break;
+ case '^':
+ txt += 2;
+ ++count;
+ _puthex8(_RamRead(pos++));
+ break;
+ case '#':
+ txt += 2;
+ count += 2;
+ _puthex8(_RamRead(pos + 1));
+ _puthex8(_RamRead(pos));
+ break;
+ case '@':
+ txt += 2;
+ ++count;
+ jr = _RamRead(pos++);
+ _puthex16(pos + jr);
+ break;
+ case '%':
+ _putch(C);
+ ++txt;
+ break;
+ default:
+ _putch(*txt);
+ ++txt;
+ }
+ }
+
+ return(count);
+}
+
+void Z80debug(void) {
+ uint8 ch = 0;
+ uint16 pos, l;
+ static const char Flags[9] = "SZ5H3PNC";
+ uint8 J, I;
+ unsigned int bpoint;
+ uint8 loop = TRUE;
+ uint8 res = 0;
+
+ _puts("\r\nDebug Mode - Press '?' for help");
+
+ while (loop) {
+ pos = PC;
+ _puts("\r\n");
+ _puts("BC:"); _puthex16(BC);
+ _puts(" DE:"); _puthex16(DE);
+ _puts(" HL:"); _puthex16(HL);
+ _puts(" AF:"); _puthex16(AF);
+ _puts(" : [");
+ for (J = 0, I = LOW_REGISTER(AF); J < 8; ++J, I <<= 1) _putcon(I & 0x80 ? Flags[J] : '.');
+ _puts("]\r\n");
+ _puts("IX:"); _puthex16(IX);
+ _puts(" IY:"); _puthex16(IY);
+ _puts(" SP:"); _puthex16(SP);
+ _puts(" PC:"); _puthex16(PC);
+ _puts(" : ");
+
+ Disasm(pos);
+
+ if (PC == 0x0005) {
+ if (LOW_REGISTER(BC) > 40) {
+ _puts(" (Unknown)");
+ } else {
+ _puts(" (");
+ _puts(CPMCalls[LOW_REGISTER(BC)]);
+ _puts(")");
+ }
+ }
+
+ if (Watch != -1) {
+ watchprint(Watch);
+ }
+
+ _puts("\r\n");
+ _puts("Command|? : ");
+ ch = _getch();
+ if (ch > 21 && ch < 127)
+ _putch(ch);
+ switch (ch) {
+ case 't':
+ loop = FALSE;
+ break;
+ case 'c':
+ loop = FALSE;
+ _puts("\r\n");
+ Debug = 0;
+ break;
+ case 'b':
+ _puts("\r\n"); memdump(BC); break;
+ case 'd':
+ _puts("\r\n"); memdump(DE); break;
+ case 'h':
+ _puts("\r\n"); memdump(HL); break;
+ case 'p':
+ _puts("\r\n"); memdump(PC & 0xFF00); break;
+ case 's':
+ _puts("\r\n"); memdump(SP & 0xFF00); break;
+ case 'x':
+ _puts("\r\n"); memdump(IX & 0xFF00); break;
+ case 'y':
+ _puts("\r\n"); memdump(IY & 0xFF00); break;
+ case 'a':
+ _puts("\r\n"); memdump(dmaAddr); break;
+ case 'l':
+ _puts("\r\n");
+ I = 16;
+ l = pos;
+ while (I > 0) {
+ _puthex16(l);
+ _puts(" : ");
+ l += Disasm(l);
+ _puts("\r\n");
+ --I;
+ }
+ break;
+ case 'B':
+ _puts(" Addr: ");
+ res=scanf("%04x", &bpoint);
+ if (res) {
+ Break = bpoint;
+ _puts("Breakpoint set to ");
+ _puthex16(Break);
+ _puts("\r\n");
+ }
+ break;
+ case 'C':
+ Break = -1;
+ _puts(" Breakpoint cleared\r\n");
+ break;
+ case 'D':
+ _puts(" Addr: ");
+ res=scanf("%04x", &bpoint);
+ if(res)
+ memdump(bpoint);
+ break;
+ case 'L':
+ _puts(" Addr: ");
+ res=scanf("%04x", &bpoint);
+ if (res) {
+ I = 16;
+ l = bpoint;
+ while (I > 0) {
+ _puthex16(l);
+ _puts(" : ");
+ l += Disasm(l);
+ _puts("\r\n");
+ --I;
+ }
+ }
+ break;
+ case 'T':
+ loop = FALSE;
+ Step = pos + 3; // This only works correctly with CALL
+ // If the called function messes with the stack, this will fail as well.
+ Debug = 0;
+ break;
+ case 'W':
+ _puts(" Addr: ");
+ res=scanf("%04x", &bpoint);
+ if (res) {
+ Watch = bpoint;
+ _puts("Watch set to ");
+ _puthex16(Watch);
+ _puts("\r\n");
+ }
+ break;
+ case '?':
+ _puts("\r\n");
+ _puts("Lowercase commands:\r\n");
+ _puts(" t - traces to the next instruction\r\n");
+ _puts(" c - Continue execution\r\n");
+ _puts(" b - Dumps memory pointed by (BC)\r\n");
+ _puts(" d - Dumps memory pointed by (DE)\r\n");
+ _puts(" h - Dumps memory pointed by (HL)\r\n");
+ _puts(" p - Dumps the page (PC) points to\r\n");
+ _puts(" s - Dumps the page (SP) points to\r\n");
+ _puts(" x - Dumps the page (IX) points to\r\n");
+ _puts(" y - Dumps the page (IY) points to\r\n");
+ _puts(" a - Dumps memory pointed by dmaAddr\r\n");
+ _puts(" l - Disassembles from current PC\r\n");
+ _puts("Uppercase commands:\r\n");
+ _puts(" B - Sets breakpoint at address\r\n");
+ _puts(" C - Clears breakpoint\r\n");
+ _puts(" D - Dumps memory at address\r\n");
+ _puts(" L - Disassembles at address\r\n");
+ _puts(" T - Steps over a call\r\n");
+ _puts(" W - Sets a byte/word watch\r\n");
+ break;
+ default:
+ _puts(" ???\r\n");
+ }
+ }
+}
+#endif
+
+static inline void Z80run(void) {
+ uint32 temp = 0;
+ uint32 acu;
+ uint32 sum;
+ uint32 cbits;
+ uint32 op;
+ uint32 adr;
+
+ /* main instruction fetch/decode loop */
+ while (!Status) { /* loop until Status != 0 */
+
+#ifdef DEBUG
+ if (PC == Break) {
+ _puts(":BREAK at ");
+ _puthex16(Break);
+ _puts(":");
+ Debug = 1;
+ }
+ if (PC == Step) {
+ Debug = 1;
+ Step = -1;
+ }
+ if (Debug)
+ Z80debug();
+#endif
+
+ PCX = PC;
+ INCR(1); /* Add one M1 cycle to refresh counter */
+
+#ifdef iDEBUG
+ iLogFile = fopen("iDump.log", "a");
+ switch (RAM[PCX & 0xffff]) {
+ case 0xCB: iLogTxt = MnemonicsCB[RAM[(PCX & 0xffff) + 1]]; break;
+ case 0xED: iLogTxt = MnemonicsED[RAM[(PCX & 0xffff) + 1]]; break;
+ case 0xDD:
+ case 0xFD:
+ if (RAM[PCX & 0xffff] == 0xCB) {
+ iLogTxt = MnemonicsXCB[RAM[(PCX & 0xffff) + 1]]; break;
+ } else {
+ iLogTxt = MnemonicsXX[RAM[(PCX & 0xffff) + 1]]; break;
+ }
+ default: iLogTxt = Mnemonics[RAM[PCX & 0xffff]];
+ }
+ sprintf(iLogBuffer, "0x%04x : 0x%02x = %s\n", PCX, RAM[PCX & 0xffff], iLogTxt);
+ fputs(iLogBuffer, iLogFile);
+ fclose(iLogFile);
+#endif
+
+ switch (RAM_PP(PC)) {
+
+ case 0x00: /* NOP */
+ break;
+
+ case 0x01: /* LD BC,nnnn */
+ BC = GET_WORD(PC);
+ PC += 2;
+ break;
+
+ case 0x02: /* LD (BC),A */
+ PUT_BYTE(BC, HIGH_REGISTER(AF));
+ break;
+
+ case 0x03: /* INC BC */
+ ++BC;
+ break;
+
+ case 0x04: /* INC B */
+ BC += 0x100;
+ temp = HIGH_REGISTER(BC);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80); /* SET_PV2 uses temp */
+ break;
+
+ case 0x05: /* DEC B */
+ BC -= 0x100;
+ temp = HIGH_REGISTER(BC);
+ AF = (AF & ~0xfe) | decTable[temp] | SET_PV2(0x7f); /* SET_PV2 uses temp */
+ break;
+
+ case 0x06: /* LD B,nn */
+ SET_HIGH_REGISTER(BC, RAM_PP(PC));
+ break;
+
+ case 0x07: /* RLCA */
+ AF = ((AF >> 7) & 0x0128) | ((AF << 1) & ~0x1ff) |
+ (AF & 0xc4) | ((AF >> 15) & 1);
+ break;
+
+ case 0x08: /* EX AF,AF' */
+ temp = AF;
+ AF = AF1;
+ AF1 = temp;
+ break;
+
+ case 0x09: /* ADD HL,BC */
+ HL &= ADDRMASK;
+ BC &= ADDRMASK;
+ sum = HL + BC;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(HL ^ BC ^ sum) >> 8];
+ HL = sum;
+ break;
+
+ case 0x0a: /* LD A,(BC) */
+ SET_HIGH_REGISTER(AF, GET_BYTE(BC));
+ break;
+
+ case 0x0b: /* DEC BC */
+ --BC;
+ break;
+
+ case 0x0c: /* INC C */
+ temp = LOW_REGISTER(BC) + 1;
+ SET_LOW_REGISTER(BC, temp);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80);
+ break;
+
+ case 0x0d: /* DEC C */
+ temp = LOW_REGISTER(BC) - 1;
+ SET_LOW_REGISTER(BC, temp);
+ AF = (AF & ~0xfe) | decTable[temp & 0xff] | SET_PV2(0x7f);
+ break;
+
+ case 0x0e: /* LD C,nn */
+ SET_LOW_REGISTER(BC, RAM_PP(PC));
+ break;
+
+ case 0x0f: /* RRCA */
+ AF = (AF & 0xc4) | rrcaTable[HIGH_REGISTER(AF)];
+ break;
+
+ case 0x10: /* DJNZ dd */
+ if ((BC -= 0x100) & 0xff00)
+ PC += (int8)GET_BYTE(PC) + 1;
+ else
+ ++PC;
+ break;
+
+ case 0x11: /* LD DE,nnnn */
+ DE = GET_WORD(PC);
+ PC += 2;
+ break;
+
+ case 0x12: /* LD (DE),A */
+ PUT_BYTE(DE, HIGH_REGISTER(AF));
+ break;
+
+ case 0x13: /* INC DE */
+ ++DE;
+ break;
+
+ case 0x14: /* INC D */
+ DE += 0x100;
+ temp = HIGH_REGISTER(DE);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80); /* SET_PV2 uses temp */
+ break;
+
+ case 0x15: /* DEC D */
+ DE -= 0x100;
+ temp = HIGH_REGISTER(DE);
+ AF = (AF & ~0xfe) | decTable[temp] | SET_PV2(0x7f); /* SET_PV2 uses temp */
+ break;
+
+ case 0x16: /* LD D,nn */
+ SET_HIGH_REGISTER(DE, RAM_PP(PC));
+ break;
+
+ case 0x17: /* RLA */
+ AF = ((AF << 8) & 0x0100) | ((AF >> 7) & 0x28) | ((AF << 1) & ~0x01ff) |
+ (AF & 0xc4) | ((AF >> 15) & 1);
+ break;
+
+ case 0x18: /* JR dd */
+ PC += (int8)GET_BYTE(PC) + 1;
+ break;
+
+ case 0x19: /* ADD HL,DE */
+ HL &= ADDRMASK;
+ DE &= ADDRMASK;
+ sum = HL + DE;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(HL ^ DE ^ sum) >> 8];
+ HL = sum;
+ break;
+
+ case 0x1a: /* LD A,(DE) */
+ SET_HIGH_REGISTER(AF, GET_BYTE(DE));
+ break;
+
+ case 0x1b: /* DEC DE */
+ --DE;
+ break;
+
+ case 0x1c: /* INC E */
+ temp = LOW_REGISTER(DE) + 1;
+ SET_LOW_REGISTER(DE, temp);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80);
+ break;
+
+ case 0x1d: /* DEC E */
+ temp = LOW_REGISTER(DE) - 1;
+ SET_LOW_REGISTER(DE, temp);
+ AF = (AF & ~0xfe) | decTable[temp & 0xff] | SET_PV2(0x7f);
+ break;
+
+ case 0x1e: /* LD E,nn */
+ SET_LOW_REGISTER(DE, RAM_PP(PC));
+ break;
+
+ case 0x1f: /* RRA */
+ AF = ((AF & 1) << 15) | (AF & 0xc4) | rraTable[HIGH_REGISTER(AF)];
+ break;
+
+ case 0x20: /* JR NZ,dd */
+ if (TSTFLAG(Z))
+ ++PC;
+ else
+ PC += (int8)GET_BYTE(PC) + 1;
+ break;
+
+ case 0x21: /* LD HL,nnnn */
+ HL = GET_WORD(PC);
+ PC += 2;
+ break;
+
+ case 0x22: /* LD (nnnn),HL */
+ PUT_WORD(GET_WORD(PC), HL);
+ PC += 2;
+ break;
+
+ case 0x23: /* INC HL */
+ ++HL;
+ break;
+
+ case 0x24: /* INC H */
+ HL += 0x100;
+ temp = HIGH_REGISTER(HL);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80); /* SET_PV2 uses temp */
+ break;
+
+ case 0x25: /* DEC H */
+ HL -= 0x100;
+ temp = HIGH_REGISTER(HL);
+ AF = (AF & ~0xfe) | decTable[temp] | SET_PV2(0x7f); /* SET_PV2 uses temp */
+ break;
+
+ case 0x26: /* LD H,nn */
+ SET_HIGH_REGISTER(HL, RAM_PP(PC));
+ break;
+
+ case 0x27: /* DAA */
+ acu = HIGH_REGISTER(AF);
+ temp = LOW_DIGIT(acu);
+ cbits = TSTFLAG(C);
+ if (TSTFLAG(N)) { /* last operation was a subtract */
+ int hd = cbits || acu > 0x99;
+ if (TSTFLAG(H) || (temp > 9)) { /* adjust low digit */
+ if (temp > 5)
+ SETFLAG(H, 0);
+ acu -= 6;
+ acu &= 0xff;
+ }
+ if (hd)
+ acu -= 0x160; /* adjust high digit */
+ } else { /* last operation was an add */
+ if (TSTFLAG(H) || (temp > 9)) { /* adjust low digit */
+ SETFLAG(H, (temp > 9));
+ acu += 6;
+ }
+ if (cbits || ((acu & 0x1f0) > 0x90))
+ acu += 0x60; /* adjust high digit */
+ }
+ AF = (AF & 0x12) | rrdrldTable[acu & 0xff] | ((acu >> 8) & 1) | cbits;
+ break;
+
+ case 0x28: /* JR Z,dd */
+ if (TSTFLAG(Z))
+ PC += (int8)GET_BYTE(PC) + 1;
+ else
+ ++PC;
+ break;
+
+ case 0x29: /* ADD HL,HL */
+ HL &= ADDRMASK;
+ sum = HL + HL;
+ AF = (AF & ~0x3b) | cbitsDup16Table[sum >> 8];
+ HL = sum;
+ break;
+
+ case 0x2a: /* LD HL,(nnnn) */
+ HL = GET_WORD(GET_WORD(PC));
+ PC += 2;
+ break;
+
+ case 0x2b: /* DEC HL */
+ --HL;
+ break;
+
+ case 0x2c: /* INC L */
+ temp = LOW_REGISTER(HL) + 1;
+ SET_LOW_REGISTER(HL, temp);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80);
+ break;
+
+ case 0x2d: /* DEC L */
+ temp = LOW_REGISTER(HL) - 1;
+ SET_LOW_REGISTER(HL, temp);
+ AF = (AF & ~0xfe) | decTable[temp & 0xff] | SET_PV2(0x7f);
+ break;
+
+ case 0x2e: /* LD L,nn */
+ SET_LOW_REGISTER(HL, RAM_PP(PC));
+ break;
+
+ case 0x2f: /* CPL */
+ AF = (~AF & ~0xff) | (AF & 0xc5) | ((~AF >> 8) & 0x28) | 0x12;
+ break;
+
+ case 0x30: /* JR NC,dd */
+ if (TSTFLAG(C))
+ ++PC;
+ else
+ PC += (int8)GET_BYTE(PC) + 1;
+ break;
+
+ case 0x31: /* LD SP,nnnn */
+ SP = GET_WORD(PC);
+ PC += 2;
+ break;
+
+ case 0x32: /* LD (nnnn),A */
+ PUT_BYTE(GET_WORD(PC), HIGH_REGISTER(AF));
+ PC += 2;
+ break;
+
+ case 0x33: /* INC SP */
+ ++SP;
+ break;
+
+ case 0x34: /* INC (HL) */
+ temp = GET_BYTE(HL) + 1;
+ PUT_BYTE(HL, temp);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80);
+ break;
+
+ case 0x35: /* DEC (HL) */
+ temp = GET_BYTE(HL) - 1;
+ PUT_BYTE(HL, temp);
+ AF = (AF & ~0xfe) | decTable[temp & 0xff] | SET_PV2(0x7f);
+ break;
+
+ case 0x36: /* LD (HL),nn */
+ PUT_BYTE(HL, RAM_PP(PC));
+ break;
+
+ case 0x37: /* SCF */
+ AF = (AF & ~0x3b) | ((AF >> 8) & 0x28) | 1;
+ break;
+
+ case 0x38: /* JR C,dd */
+ if (TSTFLAG(C))
+ PC += (int8)GET_BYTE(PC) + 1;
+ else
+ ++PC;
+ break;
+
+ case 0x39: /* ADD HL,SP */
+ HL &= ADDRMASK;
+ SP &= ADDRMASK;
+ sum = HL + SP;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(HL ^ SP ^ sum) >> 8];
+ HL = sum;
+ break;
+
+ case 0x3a: /* LD A,(nnnn) */
+ SET_HIGH_REGISTER(AF, GET_BYTE(GET_WORD(PC)));
+ PC += 2;
+ break;
+
+ case 0x3b: /* DEC SP */
+ --SP;
+ break;
+
+ case 0x3c: /* INC A */
+ AF += 0x100;
+ temp = HIGH_REGISTER(AF);
+ AF = (AF & ~0xfe) | incTable[temp] | SET_PV2(0x80); /* SET_PV2 uses temp */
+ break;
+
+ case 0x3d: /* DEC A */
+ AF -= 0x100;
+ temp = HIGH_REGISTER(AF);
+ AF = (AF & ~0xfe) | decTable[temp] | SET_PV2(0x7f); /* SET_PV2 uses temp */
+ break;
+
+ case 0x3e: /* LD A,nn */
+ SET_HIGH_REGISTER(AF, RAM_PP(PC));
+ break;
+
+ case 0x3f: /* CCF */
+ AF = (AF & ~0x3b) | ((AF >> 8) & 0x28) | ((AF & 1) << 4) | (~AF & 1);
+ break;
+
+ case 0x40: /* LD B,B */
+ break;
+
+ case 0x41: /* LD B,C */
+ BC = (BC & 0xff) | ((BC & 0xff) << 8);
+ break;
+
+ case 0x42: /* LD B,D */
+ BC = (BC & 0xff) | (DE & ~0xff);
+ break;
+
+ case 0x43: /* LD B,E */
+ BC = (BC & 0xff) | ((DE & 0xff) << 8);
+ break;
+
+ case 0x44: /* LD B,H */
+ BC = (BC & 0xff) | (HL & ~0xff);
+ break;
+
+ case 0x45: /* LD B,L */
+ BC = (BC & 0xff) | ((HL & 0xff) << 8);
+ break;
+
+ case 0x46: /* LD B,(HL) */
+ SET_HIGH_REGISTER(BC, GET_BYTE(HL));
+ break;
+
+ case 0x47: /* LD B,A */
+ BC = (BC & 0xff) | (AF & ~0xff);
+ break;
+
+ case 0x48: /* LD C,B */
+ BC = (BC & ~0xff) | ((BC >> 8) & 0xff);
+ break;
+
+ case 0x49: /* LD C,C */
+ break;
+
+ case 0x4a: /* LD C,D */
+ BC = (BC & ~0xff) | ((DE >> 8) & 0xff);
+ break;
+
+ case 0x4b: /* LD C,E */
+ BC = (BC & ~0xff) | (DE & 0xff);
+ break;
+
+ case 0x4c: /* LD C,H */
+ BC = (BC & ~0xff) | ((HL >> 8) & 0xff);
+ break;
+
+ case 0x4d: /* LD C,L */
+ BC = (BC & ~0xff) | (HL & 0xff);
+ break;
+
+ case 0x4e: /* LD C,(HL) */
+ SET_LOW_REGISTER(BC, GET_BYTE(HL));
+ break;
+
+ case 0x4f: /* LD C,A */
+ BC = (BC & ~0xff) | ((AF >> 8) & 0xff);
+ break;
+
+ case 0x50: /* LD D,B */
+ DE = (DE & 0xff) | (BC & ~0xff);
+ break;
+
+ case 0x51: /* LD D,C */
+ DE = (DE & 0xff) | ((BC & 0xff) << 8);
+ break;
+
+ case 0x52: /* LD D,D */
+ break;
+
+ case 0x53: /* LD D,E */
+ DE = (DE & 0xff) | ((DE & 0xff) << 8);
+ break;
+
+ case 0x54: /* LD D,H */
+ DE = (DE & 0xff) | (HL & ~0xff);
+ break;
+
+ case 0x55: /* LD D,L */
+ DE = (DE & 0xff) | ((HL & 0xff) << 8);
+ break;
+
+ case 0x56: /* LD D,(HL) */
+ SET_HIGH_REGISTER(DE, GET_BYTE(HL));
+ break;
+
+ case 0x57: /* LD D,A */
+ DE = (DE & 0xff) | (AF & ~0xff);
+ break;
+
+ case 0x58: /* LD E,B */
+ DE = (DE & ~0xff) | ((BC >> 8) & 0xff);
+ break;
+
+ case 0x59: /* LD E,C */
+ DE = (DE & ~0xff) | (BC & 0xff);
+ break;
+
+ case 0x5a: /* LD E,D */
+ DE = (DE & ~0xff) | ((DE >> 8) & 0xff);
+ break;
+
+ case 0x5b: /* LD E,E */
+ break;
+
+ case 0x5c: /* LD E,H */
+ DE = (DE & ~0xff) | ((HL >> 8) & 0xff);
+ break;
+
+ case 0x5d: /* LD E,L */
+ DE = (DE & ~0xff) | (HL & 0xff);
+ break;
+
+ case 0x5e: /* LD E,(HL) */
+ SET_LOW_REGISTER(DE, GET_BYTE(HL));
+ break;
+
+ case 0x5f: /* LD E,A */
+ DE = (DE & ~0xff) | ((AF >> 8) & 0xff);
+ break;
+
+ case 0x60: /* LD H,B */
+ HL = (HL & 0xff) | (BC & ~0xff);
+ break;
+
+ case 0x61: /* LD H,C */
+ HL = (HL & 0xff) | ((BC & 0xff) << 8);
+ break;
+
+ case 0x62: /* LD H,D */
+ HL = (HL & 0xff) | (DE & ~0xff);
+ break;
+
+ case 0x63: /* LD H,E */
+ HL = (HL & 0xff) | ((DE & 0xff) << 8);
+ break;
+
+ case 0x64: /* LD H,H */
+ break;
+
+ case 0x65: /* LD H,L */
+ HL = (HL & 0xff) | ((HL & 0xff) << 8);
+ break;
+
+ case 0x66: /* LD H,(HL) */
+ SET_HIGH_REGISTER(HL, GET_BYTE(HL));
+ break;
+
+ case 0x67: /* LD H,A */
+ HL = (HL & 0xff) | (AF & ~0xff);
+ break;
+
+ case 0x68: /* LD L,B */
+ HL = (HL & ~0xff) | ((BC >> 8) & 0xff);
+ break;
+
+ case 0x69: /* LD L,C */
+ HL = (HL & ~0xff) | (BC & 0xff);
+ break;
+
+ case 0x6a: /* LD L,D */
+ HL = (HL & ~0xff) | ((DE >> 8) & 0xff);
+ break;
+
+ case 0x6b: /* LD L,E */
+ HL = (HL & ~0xff) | (DE & 0xff);
+ break;
+
+ case 0x6c: /* LD L,H */
+ HL = (HL & ~0xff) | ((HL >> 8) & 0xff);
+ break;
+
+ case 0x6d: /* LD L,L */
+ break;
+
+ case 0x6e: /* LD L,(HL) */
+ SET_LOW_REGISTER(HL, GET_BYTE(HL));
+ break;
+
+ case 0x6f: /* LD L,A */
+ HL = (HL & ~0xff) | ((AF >> 8) & 0xff);
+ break;
+
+ case 0x70: /* LD (HL),B */
+ PUT_BYTE(HL, HIGH_REGISTER(BC));
+ break;
+
+ case 0x71: /* LD (HL),C */
+ PUT_BYTE(HL, LOW_REGISTER(BC));
+ break;
+
+ case 0x72: /* LD (HL),D */
+ PUT_BYTE(HL, HIGH_REGISTER(DE));
+ break;
+
+ case 0x73: /* LD (HL),E */
+ PUT_BYTE(HL, LOW_REGISTER(DE));
+ break;
+
+ case 0x74: /* LD (HL),H */
+ PUT_BYTE(HL, HIGH_REGISTER(HL));
+ break;
+
+ case 0x75: /* LD (HL),L */
+ PUT_BYTE(HL, LOW_REGISTER(HL));
+ break;
+
+ case 0x76: /* HALT */
+#ifdef DEBUG
+ _puts("\r\n::CPU HALTED::"); // A halt is a good indicator of broken code
+ _puts("Press any key...");
+ _getch();
+#endif
+ --PC;
+ goto end_decode;
+ break;
+
+ case 0x77: /* LD (HL),A */
+ PUT_BYTE(HL, HIGH_REGISTER(AF));
+ break;
+
+ case 0x78: /* LD A,B */
+ AF = (AF & 0xff) | (BC & ~0xff);
+ break;
+
+ case 0x79: /* LD A,C */
+ AF = (AF & 0xff) | ((BC & 0xff) << 8);
+ break;
+
+ case 0x7a: /* LD A,D */
+ AF = (AF & 0xff) | (DE & ~0xff);
+ break;
+
+ case 0x7b: /* LD A,E */
+ AF = (AF & 0xff) | ((DE & 0xff) << 8);
+ break;
+
+ case 0x7c: /* LD A,H */
+ AF = (AF & 0xff) | (HL & ~0xff);
+ break;
+
+ case 0x7d: /* LD A,L */
+ AF = (AF & 0xff) | ((HL & 0xff) << 8);
+ break;
+
+ case 0x7e: /* LD A,(HL) */
+ SET_HIGH_REGISTER(AF, GET_BYTE(HL));
+ break;
+
+ case 0x7f: /* LD A,A */
+ break;
+
+ case 0x80: /* ADD A,B */
+ temp = HIGH_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x81: /* ADD A,C */
+ temp = LOW_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x82: /* ADD A,D */
+ temp = HIGH_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x83: /* ADD A,E */
+ temp = LOW_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x84: /* ADD A,H */
+ temp = HIGH_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x85: /* ADD A,L */
+ temp = LOW_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x86: /* ADD A,(HL) */
+ temp = GET_BYTE(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x87: /* ADD A,A */
+ cbits = 2 * HIGH_REGISTER(AF);
+ AF = cbitsDup8Table[cbits] | (SET_PVS(cbits));
+ break;
+
+ case 0x88: /* ADC A,B */
+ temp = HIGH_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x89: /* ADC A,C */
+ temp = LOW_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x8a: /* ADC A,D */
+ temp = HIGH_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x8b: /* ADC A,E */
+ temp = LOW_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x8c: /* ADC A,H */
+ temp = HIGH_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x8d: /* ADC A,L */
+ temp = LOW_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x8e: /* ADC A,(HL) */
+ temp = GET_BYTE(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0x8f: /* ADC A,A */
+ cbits = 2 * HIGH_REGISTER(AF) + TSTFLAG(C);
+ AF = cbitsDup8Table[cbits] | (SET_PVS(cbits));
+ break;
+
+ case 0x90: /* SUB B */
+ temp = HIGH_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x91: /* SUB C */
+ temp = LOW_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x92: /* SUB D */
+ temp = HIGH_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x93: /* SUB E */
+ temp = LOW_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x94: /* SUB H */
+ temp = HIGH_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x95: /* SUB L */
+ temp = LOW_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x96: /* SUB (HL) */
+ temp = GET_BYTE(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x97: /* SUB A */
+ AF = 0x42;
+ break;
+
+ case 0x98: /* SBC A,B */
+ temp = HIGH_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x99: /* SBC A,C */
+ temp = LOW_REGISTER(BC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x9a: /* SBC A,D */
+ temp = HIGH_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x9b: /* SBC A,E */
+ temp = LOW_REGISTER(DE);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x9c: /* SBC A,H */
+ temp = HIGH_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x9d: /* SBC A,L */
+ temp = LOW_REGISTER(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x9e: /* SBC A,(HL) */
+ temp = GET_BYTE(HL);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0x9f: /* SBC A,A */
+ cbits = -TSTFLAG(C);
+ AF = subTable[cbits & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PVS(cbits));
+ break;
+
+ case 0xa0: /* AND B */
+ AF = andTable[((AF & BC) >> 8) & 0xff];
+ break;
+
+ case 0xa1: /* AND C */
+ AF = andTable[((AF >> 8)& BC) & 0xff];
+ break;
+
+ case 0xa2: /* AND D */
+ AF = andTable[((AF & DE) >> 8) & 0xff];
+ break;
+
+ case 0xa3: /* AND E */
+ AF = andTable[((AF >> 8)& DE) & 0xff];
+ break;
+
+ case 0xa4: /* AND H */
+ AF = andTable[((AF & HL) >> 8) & 0xff];
+ break;
+
+ case 0xa5: /* AND L */
+ AF = andTable[((AF >> 8)& HL) & 0xff];
+ break;
+
+ case 0xa6: /* AND (HL) */
+ AF = andTable[((AF >> 8)& GET_BYTE(HL)) & 0xff];
+ break;
+
+ case 0xa7: /* AND A */
+ AF = andTable[(AF >> 8) & 0xff];
+ break;
+
+ case 0xa8: /* XOR B */
+ AF = xororTable[((AF ^ BC) >> 8) & 0xff];
+ break;
+
+ case 0xa9: /* XOR C */
+ AF = xororTable[((AF >> 8) ^ BC) & 0xff];
+ break;
+
+ case 0xaa: /* XOR D */
+ AF = xororTable[((AF ^ DE) >> 8) & 0xff];
+ break;
+
+ case 0xab: /* XOR E */
+ AF = xororTable[((AF >> 8) ^ DE) & 0xff];
+ break;
+
+ case 0xac: /* XOR H */
+ AF = xororTable[((AF ^ HL) >> 8) & 0xff];
+ break;
+
+ case 0xad: /* XOR L */
+ AF = xororTable[((AF >> 8) ^ HL) & 0xff];
+ break;
+
+ case 0xae: /* XOR (HL) */
+ AF = xororTable[((AF >> 8) ^ GET_BYTE(HL)) & 0xff];
+ break;
+
+ case 0xaf: /* XOR A */
+ AF = 0x44;
+ break;
+
+ case 0xb0: /* OR B */
+ AF = xororTable[((AF | BC) >> 8) & 0xff];
+ break;
+
+ case 0xb1: /* OR C */
+ AF = xororTable[((AF >> 8) | BC) & 0xff];
+ break;
+
+ case 0xb2: /* OR D */
+ AF = xororTable[((AF | DE) >> 8) & 0xff];
+ break;
+
+ case 0xb3: /* OR E */
+ AF = xororTable[((AF >> 8) | DE) & 0xff];
+ break;
+
+ case 0xb4: /* OR H */
+ AF = xororTable[((AF | HL) >> 8) & 0xff];
+ break;
+
+ case 0xb5: /* OR L */
+ AF = xororTable[((AF >> 8) | HL) & 0xff];
+ break;
+
+ case 0xb6: /* OR (HL) */
+ AF = xororTable[((AF >> 8) | GET_BYTE(HL)) & 0xff];
+ break;
+
+ case 0xb7: /* OR A */
+ AF = xororTable[(AF >> 8) & 0xff];
+ break;
+
+ case 0xb8: /* CP B */
+ temp = HIGH_REGISTER(BC);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xb9: /* CP C */
+ temp = LOW_REGISTER(BC);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xba: /* CP D */
+ temp = HIGH_REGISTER(DE);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xbb: /* CP E */
+ temp = LOW_REGISTER(DE);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xbc: /* CP H */
+ temp = HIGH_REGISTER(HL);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xbd: /* CP L */
+ temp = LOW_REGISTER(HL);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xbe: /* CP (HL) */
+ temp = GET_BYTE(HL);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xbf: /* CP A */
+ SET_LOW_REGISTER(AF, (HIGH_REGISTER(AF) & 0x28) | 0x42);
+ break;
+
+ case 0xc0: /* RET NZ */
+ if (!(TSTFLAG(Z)))
+ POP(PC);
+ break;
+
+ case 0xc1: /* POP BC */
+ POP(BC);
+ break;
+
+ case 0xc2: /* JP NZ,nnnn */
+ JPC(!TSTFLAG(Z));
+ break;
+
+ case 0xc3: /* JP nnnn */
+ JPC(1);
+ break;
+
+ case 0xc4: /* CALL NZ,nnnn */
+ CALLC(!TSTFLAG(Z));
+ break;
+
+ case 0xc5: /* PUSH BC */
+ PUSH(BC);
+ break;
+
+ case 0xc6: /* ADD A,nn */
+ temp = RAM_PP(PC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0xc7: /* RST 0 */
+ PUSH(PC);
+ PC = 0;
+ break;
+
+ case 0xc8: /* RET Z */
+ if (TSTFLAG(Z))
+ POP(PC);
+ break;
+
+ case 0xc9: /* RET */
+ POP(PC);
+ break;
+
+ case 0xca: /* JP Z,nnnn */
+ JPC(TSTFLAG(Z));
+ break;
+
+ case 0xcb: /* CB prefix */
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ adr = HL;
+ switch ((op = GET_BYTE(PC)) & 7) {
+
+ case 0:
+ ++PC;
+ acu = HIGH_REGISTER(BC);
+ break;
+
+ case 1:
+ ++PC;
+ acu = LOW_REGISTER(BC);
+ break;
+
+ case 2:
+ ++PC;
+ acu = HIGH_REGISTER(DE);
+ break;
+
+ case 3:
+ ++PC;
+ acu = LOW_REGISTER(DE);
+ break;
+
+ case 4:
+ ++PC;
+ acu = HIGH_REGISTER(HL);
+ break;
+
+ case 5:
+ ++PC;
+ acu = LOW_REGISTER(HL);
+ break;
+
+ case 6:
+ ++PC;
+ acu = GET_BYTE(adr);
+ break;
+
+ case 7:
+ ++PC;
+ acu = HIGH_REGISTER(AF);
+ break;
+ }
+ switch (op & 0xc0) {
+
+ case 0x00: /* shift/rotate */
+ switch (op & 0x38) {
+
+ case 0x00:/* RLC */
+ temp = (acu << 1) | (acu >> 7);
+ cbits = temp & 1;
+ goto cbshflg1;
+
+ case 0x08:/* RRC */
+ temp = (acu >> 1) | (acu << 7);
+ cbits = temp & 0x80;
+ goto cbshflg1;
+
+ case 0x10:/* RL */
+ temp = (acu << 1) | TSTFLAG(C);
+ cbits = acu & 0x80;
+ goto cbshflg1;
+
+ case 0x18:/* RR */
+ temp = (acu >> 1) | (TSTFLAG(C) << 7);
+ cbits = acu & 1;
+ goto cbshflg1;
+
+ case 0x20:/* SLA */
+ temp = acu << 1;
+ cbits = acu & 0x80;
+ goto cbshflg1;
+
+ case 0x28:/* SRA */
+ temp = (acu >> 1) | (acu & 0x80);
+ cbits = acu & 1;
+ goto cbshflg1;
+
+ case 0x30:/* SLIA */
+ temp = (acu << 1) | 1;
+ cbits = acu & 0x80;
+ goto cbshflg1;
+
+ case 0x38:/* SRL */
+ temp = acu >> 1;
+ cbits = acu & 1;
+ cbshflg1:
+ AF = (AF & ~0xff) | rotateShiftTable[temp & 0xff] | !!cbits;
+ }
+ break;
+
+ case 0x40: /* BIT */
+ if (acu & (1 << ((op >> 3) & 7)))
+ AF = (AF & ~0xfe) | 0x10 | (((op & 0x38) == 0x38) << 7);
+ else
+ AF = (AF & ~0xfe) | 0x54;
+ if ((op & 7) != 6)
+ AF |= (acu & 0x28);
+ temp = acu;
+ break;
+
+ case 0x80: /* RES */
+ temp = acu & ~(1 << ((op >> 3) & 7));
+ break;
+
+ case 0xc0: /* SET */
+ temp = acu | (1 << ((op >> 3) & 7));
+ break;
+ }
+ switch (op & 7) {
+
+ case 0:
+ SET_HIGH_REGISTER(BC, temp);
+ break;
+
+ case 1:
+ SET_LOW_REGISTER(BC, temp);
+ break;
+
+ case 2:
+ SET_HIGH_REGISTER(DE, temp);
+ break;
+
+ case 3:
+ SET_LOW_REGISTER(DE, temp);
+ break;
+
+ case 4:
+ SET_HIGH_REGISTER(HL, temp);
+ break;
+
+ case 5:
+ SET_LOW_REGISTER(HL, temp);
+ break;
+
+ case 6:
+ PUT_BYTE(adr, temp);
+ break;
+
+ case 7:
+ SET_HIGH_REGISTER(AF, temp);
+ break;
+ }
+ break;
+
+ case 0xcc: /* CALL Z,nnnn */
+ CALLC(TSTFLAG(Z));
+ break;
+
+ case 0xcd: /* CALL nnnn */
+ CALLC(1);
+ break;
+
+ case 0xce: /* ADC A,nn */
+ temp = RAM_PP(PC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = addTable[sum] | cbitsTable[cbits] | (SET_PV);
+ break;
+
+ case 0xcf: /* RST 8 */
+ PUSH(PC);
+ PC = 8;
+ break;
+
+ case 0xd0: /* RET NC */
+ if (!(TSTFLAG(C)))
+ POP(PC);
+ break;
+
+ case 0xd1: /* POP DE */
+ POP(DE);
+ break;
+
+ case 0xd2: /* JP NC,nnnn */
+ JPC(!TSTFLAG(C));
+ break;
+
+ case 0xd3: /* OUT (nn),A */
+ cpu_out(RAM_PP(PC), HIGH_REGISTER(AF));
+ break;
+
+ case 0xd4: /* CALL NC,nnnn */
+ CALLC(!TSTFLAG(C));
+ break;
+
+ case 0xd5: /* PUSH DE */
+ PUSH(DE);
+ break;
+
+ case 0xd6: /* SUB nn */
+ temp = RAM_PP(PC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0xd7: /* RST 10H */
+ PUSH(PC);
+ PC = 0x10;
+ break;
+
+ case 0xd8: /* RET C */
+ if (TSTFLAG(C))
+ POP(PC);
+ break;
+
+ case 0xd9: /* EXX */
+ temp = BC;
+ BC = BC1;
+ BC1 = temp;
+ temp = DE;
+ DE = DE1;
+ DE1 = temp;
+ temp = HL;
+ HL = HL1;
+ HL1 = temp;
+ break;
+
+ case 0xda: /* JP C,nnnn */
+ JPC(TSTFLAG(C));
+ break;
+
+ case 0xdb: /* IN A,(nn) */
+ SET_HIGH_REGISTER(AF, cpu_in(RAM_PP(PC)));
+ break;
+
+ case 0xdc: /* CALL C,nnnn */
+ CALLC(TSTFLAG(C));
+ break;
+
+ case 0xdd: /* DD prefix */
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ switch (RAM_PP(PC)) {
+
+ case 0x09: /* ADD IX,BC */
+ IX &= ADDRMASK;
+ BC &= ADDRMASK;
+ sum = IX + BC;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(IX ^ BC ^ sum) >> 8];
+ IX = sum;
+ break;
+
+ case 0x19: /* ADD IX,DE */
+ IX &= ADDRMASK;
+ DE &= ADDRMASK;
+ sum = IX + DE;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(IX ^ DE ^ sum) >> 8];
+ IX = sum;
+ break;
+
+ case 0x21: /* LD IX,nnnn */
+ IX = GET_WORD(PC);
+ PC += 2;
+ break;
+
+ case 0x22: /* LD (nnnn),IX */
+ PUT_WORD(GET_WORD(PC), IX);
+ PC += 2;
+ break;
+
+ case 0x23: /* INC IX */
+ ++IX;
+ break;
+
+ case 0x24: /* INC IXH */
+ IX += 0x100;
+ AF = (AF & ~0xfe) | incZ80Table[HIGH_REGISTER(IX)];
+ break;
+
+ case 0x25: /* DEC IXH */
+ IX -= 0x100;
+ AF = (AF & ~0xfe) | decZ80Table[HIGH_REGISTER(IX)];
+ break;
+
+ case 0x26: /* LD IXH,nn */
+ SET_HIGH_REGISTER(IX, RAM_PP(PC));
+ break;
+
+ case 0x29: /* ADD IX,IX */
+ IX &= ADDRMASK;
+ sum = IX + IX;
+ AF = (AF & ~0x3b) | cbitsDup16Table[sum >> 8];
+ IX = sum;
+ break;
+
+ case 0x2a: /* LD IX,(nnnn) */
+ IX = GET_WORD(GET_WORD(PC));
+ PC += 2;
+ break;
+
+ case 0x2b: /* DEC IX */
+ --IX;
+ break;
+
+ case 0x2c: /* INC IXL */
+ temp = LOW_REGISTER(IX) + 1;
+ SET_LOW_REGISTER(IX, temp);
+ AF = (AF & ~0xfe) | incZ80Table[temp];
+ break;
+
+ case 0x2d: /* DEC IXL */
+ temp = LOW_REGISTER(IX) - 1;
+ SET_LOW_REGISTER(IX, temp);
+ AF = (AF & ~0xfe) | decZ80Table[temp & 0xff];
+ break;
+
+ case 0x2e: /* LD IXL,nn */
+ SET_LOW_REGISTER(IX, RAM_PP(PC));
+ break;
+
+ case 0x34: /* INC (IX+dd) */
+ adr = IX + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr) + 1;
+ PUT_BYTE(adr, temp);
+ AF = (AF & ~0xfe) | incZ80Table[temp];
+ break;
+
+ case 0x35: /* DEC (IX+dd) */
+ adr = IX + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr) - 1;
+ PUT_BYTE(adr, temp);
+ AF = (AF & ~0xfe) | decZ80Table[temp & 0xff];
+ break;
+
+ case 0x36: /* LD (IX+dd),nn */
+ adr = IX + (int8)RAM_PP(PC);
+ PUT_BYTE(adr, RAM_PP(PC));
+ break;
+
+ case 0x39: /* ADD IX,SP */
+ IX &= ADDRMASK;
+ SP &= ADDRMASK;
+ sum = IX + SP;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(IX ^ SP ^ sum) >> 8];
+ IX = sum;
+ break;
+
+ case 0x44: /* LD B,IXH */
+ SET_HIGH_REGISTER(BC, HIGH_REGISTER(IX));
+ break;
+
+ case 0x45: /* LD B,IXL */
+ SET_HIGH_REGISTER(BC, LOW_REGISTER(IX));
+ break;
+
+ case 0x46: /* LD B,(IX+dd) */
+ SET_HIGH_REGISTER(BC, GET_BYTE(IX + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x4c: /* LD C,IXH */
+ SET_LOW_REGISTER(BC, HIGH_REGISTER(IX));
+ break;
+
+ case 0x4d: /* LD C,IXL */
+ SET_LOW_REGISTER(BC, LOW_REGISTER(IX));
+ break;
+
+ case 0x4e: /* LD C,(IX+dd) */
+ SET_LOW_REGISTER(BC, GET_BYTE(IX + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x54: /* LD D,IXH */
+ SET_HIGH_REGISTER(DE, HIGH_REGISTER(IX));
+ break;
+
+ case 0x55: /* LD D,IXL */
+ SET_HIGH_REGISTER(DE, LOW_REGISTER(IX));
+ break;
+
+ case 0x56: /* LD D,(IX+dd) */
+ SET_HIGH_REGISTER(DE, GET_BYTE(IX + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x5c: /* LD E,IXH */
+ SET_LOW_REGISTER(DE, HIGH_REGISTER(IX));
+ break;
+
+ case 0x5d: /* LD E,IXL */
+ SET_LOW_REGISTER(DE, LOW_REGISTER(IX));
+ break;
+
+ case 0x5e: /* LD E,(IX+dd) */
+ SET_LOW_REGISTER(DE, GET_BYTE(IX + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x60: /* LD IXH,B */
+ SET_HIGH_REGISTER(IX, HIGH_REGISTER(BC));
+ break;
+
+ case 0x61: /* LD IXH,C */
+ SET_HIGH_REGISTER(IX, LOW_REGISTER(BC));
+ break;
+
+ case 0x62: /* LD IXH,D */
+ SET_HIGH_REGISTER(IX, HIGH_REGISTER(DE));
+ break;
+
+ case 0x63: /* LD IXH,E */
+ SET_HIGH_REGISTER(IX, LOW_REGISTER(DE));
+ break;
+
+ case 0x64: /* LD IXH,IXH */
+ break;
+
+ case 0x65: /* LD IXH,IXL */
+ SET_HIGH_REGISTER(IX, LOW_REGISTER(IX));
+ break;
+
+ case 0x66: /* LD H,(IX+dd) */
+ SET_HIGH_REGISTER(HL, GET_BYTE(IX + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x67: /* LD IXH,A */
+ SET_HIGH_REGISTER(IX, HIGH_REGISTER(AF));
+ break;
+
+ case 0x68: /* LD IXL,B */
+ SET_LOW_REGISTER(IX, HIGH_REGISTER(BC));
+ break;
+
+ case 0x69: /* LD IXL,C */
+ SET_LOW_REGISTER(IX, LOW_REGISTER(BC));
+ break;
+
+ case 0x6a: /* LD IXL,D */
+ SET_LOW_REGISTER(IX, HIGH_REGISTER(DE));
+ break;
+
+ case 0x6b: /* LD IXL,E */
+ SET_LOW_REGISTER(IX, LOW_REGISTER(DE));
+ break;
+
+ case 0x6c: /* LD IXL,IXH */
+ SET_LOW_REGISTER(IX, HIGH_REGISTER(IX));
+ break;
+
+ case 0x6d: /* LD IXL,IXL */
+ break;
+
+ case 0x6e: /* LD L,(IX+dd) */
+ SET_LOW_REGISTER(HL, GET_BYTE(IX + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x6f: /* LD IXL,A */
+ SET_LOW_REGISTER(IX, HIGH_REGISTER(AF));
+ break;
+
+ case 0x70: /* LD (IX+dd),B */
+ PUT_BYTE(IX + (int8)RAM_PP(PC), HIGH_REGISTER(BC));
+ break;
+
+ case 0x71: /* LD (IX+dd),C */
+ PUT_BYTE(IX + (int8)RAM_PP(PC), LOW_REGISTER(BC));
+ break;
+
+ case 0x72: /* LD (IX+dd),D */
+ PUT_BYTE(IX + (int8)RAM_PP(PC), HIGH_REGISTER(DE));
+ break;
+
+ case 0x73: /* LD (IX+dd),E */
+ PUT_BYTE(IX + (int8)RAM_PP(PC), LOW_REGISTER(DE));
+ break;
+
+ case 0x74: /* LD (IX+dd),H */
+ PUT_BYTE(IX + (int8)RAM_PP(PC), HIGH_REGISTER(HL));
+ break;
+
+ case 0x75: /* LD (IX+dd),L */
+ PUT_BYTE(IX + (int8)RAM_PP(PC), LOW_REGISTER(HL));
+ break;
+
+ case 0x77: /* LD (IX+dd),A */
+ PUT_BYTE(IX + (int8)RAM_PP(PC), HIGH_REGISTER(AF));
+ break;
+
+ case 0x7c: /* LD A,IXH */
+ SET_HIGH_REGISTER(AF, HIGH_REGISTER(IX));
+ break;
+
+ case 0x7d: /* LD A,IXL */
+ SET_HIGH_REGISTER(AF, LOW_REGISTER(IX));
+ break;
+
+ case 0x7e: /* LD A,(IX+dd) */
+ SET_HIGH_REGISTER(AF, GET_BYTE(IX + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x84: /* ADD A,IXH */
+ temp = HIGH_REGISTER(IX);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x85: /* ADD A,IXL */
+ temp = LOW_REGISTER(IX);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x86: /* ADD A,(IX+dd) */
+ adr = IX + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x8c: /* ADC A,IXH */
+ temp = HIGH_REGISTER(IX);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x8d: /* ADC A,IXL */
+ temp = LOW_REGISTER(IX);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x8e: /* ADC A,(IX+dd) */
+ adr = IX + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x96: /* SUB (IX+dd) */
+ adr = IX + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0x94: /* SUB IXH */
+ SETFLAG(C, 0);/* fall through, a bit less efficient but smaller code */
+
+ case 0x9c: /* SBC A,IXH */
+ temp = HIGH_REGISTER(IX);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0x95: /* SUB IXL */
+ SETFLAG(C, 0);/* fall through, a bit less efficient but smaller code */
+
+ case 0x9d: /* SBC A,IXL */
+ temp = LOW_REGISTER(IX);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0x9e: /* SBC A,(IX+dd) */
+ adr = IX + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xa4: /* AND IXH */
+ AF = andTable[((AF & IX) >> 8) & 0xff];
+ break;
+
+ case 0xa5: /* AND IXL */
+ AF = andTable[((AF >> 8)& IX) & 0xff];
+ break;
+
+ case 0xa6: /* AND (IX+dd) */
+ AF = andTable[((AF >> 8)& GET_BYTE(IX + (int8)RAM_PP(PC))) & 0xff];
+ break;
+
+ case 0xac: /* XOR IXH */
+ AF = xororTable[((AF ^ IX) >> 8) & 0xff];
+ break;
+
+ case 0xad: /* XOR IXL */
+ AF = xororTable[((AF >> 8) ^ IX) & 0xff];
+ break;
+
+ case 0xae: /* XOR (IX+dd) */
+ AF = xororTable[((AF >> 8) ^ GET_BYTE(IX + (int8)RAM_PP(PC))) & 0xff];
+ break;
+
+ case 0xb4: /* OR IXH */
+ AF = xororTable[((AF | IX) >> 8) & 0xff];
+ break;
+
+ case 0xb5: /* OR IXL */
+ AF = xororTable[((AF >> 8) | IX) & 0xff];
+ break;
+
+ case 0xb6: /* OR (IX+dd) */
+ AF = xororTable[((AF >> 8) | GET_BYTE(IX + (int8)RAM_PP(PC))) & 0xff];
+ break;
+
+ case 0xbc: /* CP IXH */
+ temp = HIGH_REGISTER(IX);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xbd: /* CP IXL */
+ temp = LOW_REGISTER(IX);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xbe: /* CP (IX+dd) */
+ adr = IX + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xcb: /* CB prefix */
+ adr = IX + (int8)RAM_PP(PC);
+ switch ((op = GET_BYTE(PC)) & 7) {
+
+ case 0:
+ ++PC;
+ acu = HIGH_REGISTER(BC);
+ break;
+
+ case 1:
+ ++PC;
+ acu = LOW_REGISTER(BC);
+ break;
+
+ case 2:
+ ++PC;
+ acu = HIGH_REGISTER(DE);
+ break;
+
+ case 3:
+ ++PC;
+ acu = LOW_REGISTER(DE);
+ break;
+
+ case 4:
+ ++PC;
+ acu = HIGH_REGISTER(HL);
+ break;
+
+ case 5:
+ ++PC;
+ acu = LOW_REGISTER(HL);
+ break;
+
+ case 6:
+ ++PC;
+ acu = GET_BYTE(adr);
+ break;
+
+ case 7:
+ ++PC;
+ acu = HIGH_REGISTER(AF);
+ break;
+ }
+ switch (op & 0xc0) {
+
+ case 0x00: /* shift/rotate */
+ switch (op & 0x38) {
+
+ case 0x00:/* RLC */
+ temp = (acu << 1) | (acu >> 7);
+ cbits = temp & 1;
+ goto cbshflg2;
+
+ case 0x08:/* RRC */
+ temp = (acu >> 1) | (acu << 7);
+ cbits = temp & 0x80;
+ goto cbshflg2;
+
+ case 0x10:/* RL */
+ temp = (acu << 1) | TSTFLAG(C);
+ cbits = acu & 0x80;
+ goto cbshflg2;
+
+ case 0x18:/* RR */
+ temp = (acu >> 1) | (TSTFLAG(C) << 7);
+ cbits = acu & 1;
+ goto cbshflg2;
+
+ case 0x20:/* SLA */
+ temp = acu << 1;
+ cbits = acu & 0x80;
+ goto cbshflg2;
+
+ case 0x28:/* SRA */
+ temp = (acu >> 1) | (acu & 0x80);
+ cbits = acu & 1;
+ goto cbshflg2;
+
+ case 0x30:/* SLIA */
+ temp = (acu << 1) | 1;
+ cbits = acu & 0x80;
+ goto cbshflg2;
+
+ case 0x38:/* SRL */
+ temp = acu >> 1;
+ cbits = acu & 1;
+ cbshflg2:
+ AF = (AF & ~0xff) | rotateShiftTable[temp & 0xff] | !!cbits;
+ }
+ break;
+
+ case 0x40: /* BIT */
+ if (acu & (1 << ((op >> 3) & 7)))
+ AF = (AF & ~0xfe) | 0x10 | (((op & 0x38) == 0x38) << 7);
+ else
+ AF = (AF & ~0xfe) | 0x54;
+ if ((op & 7) != 6)
+ AF |= (acu & 0x28);
+ temp = acu;
+ break;
+
+ case 0x80: /* RES */
+ temp = acu & ~(1 << ((op >> 3) & 7));
+ break;
+
+ case 0xc0: /* SET */
+ temp = acu | (1 << ((op >> 3) & 7));
+ break;
+ }
+ switch (op & 7) {
+
+ case 0:
+ SET_HIGH_REGISTER(BC, temp);
+ break;
+
+ case 1:
+ SET_LOW_REGISTER(BC, temp);
+ break;
+
+ case 2:
+ SET_HIGH_REGISTER(DE, temp);
+ break;
+
+ case 3:
+ SET_LOW_REGISTER(DE, temp);
+ break;
+
+ case 4:
+ SET_HIGH_REGISTER(HL, temp);
+ break;
+
+ case 5:
+ SET_LOW_REGISTER(HL, temp);
+ break;
+
+ case 6:
+ PUT_BYTE(adr, temp);
+ break;
+
+ case 7:
+ SET_HIGH_REGISTER(AF, temp);
+ break;
+ }
+ break;
+
+ case 0xe1: /* POP IX */
+ POP(IX);
+ break;
+
+ case 0xe3: /* EX (SP),IX */
+ temp = IX;
+ POP(IX);
+ PUSH(temp);
+ break;
+
+ case 0xe5: /* PUSH IX */
+ PUSH(IX);
+ break;
+
+ case 0xe9: /* JP (IX) */
+ PC = IX;
+ break;
+
+ case 0xf9: /* LD SP,IX */
+ SP = IX;
+ break;
+
+ default: /* ignore DD */
+ --PC;
+ }
+ break;
+
+ case 0xde: /* SBC A,nn */
+ temp = RAM_PP(PC);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ cbits = acu ^ temp ^ sum;
+ AF = subTable[sum & 0xff] | cbitsTable[cbits & 0x1ff] | (SET_PV);
+ break;
+
+ case 0xdf: /* RST 18H */
+ PUSH(PC);
+ PC = 0x18;
+ break;
+
+ case 0xe0: /* RET PO */
+ if (!(TSTFLAG(P)))
+ POP(PC);
+ break;
+
+ case 0xe1: /* POP HL */
+ POP(HL);
+ break;
+
+ case 0xe2: /* JP PO,nnnn */
+ JPC(!TSTFLAG(P));
+ break;
+
+ case 0xe3: /* EX (SP),HL */
+ temp = HL;
+ POP(HL);
+ PUSH(temp);
+ break;
+
+ case 0xe4: /* CALL PO,nnnn */
+ CALLC(!TSTFLAG(P));
+ break;
+
+ case 0xe5: /* PUSH HL */
+ PUSH(HL);
+ break;
+
+ case 0xe6: /* AND nn */
+ AF = andTable[((AF >> 8)& RAM_PP(PC)) & 0xff];
+ break;
+
+ case 0xe7: /* RST 20H */
+ PUSH(PC);
+ PC = 0x20;
+ break;
+
+ case 0xe8: /* RET PE */
+ if (TSTFLAG(P))
+ POP(PC);
+ break;
+
+ case 0xe9: /* JP (HL) */
+ PC = HL;
+ break;
+
+ case 0xea: /* JP PE,nnnn */
+ JPC(TSTFLAG(P));
+ break;
+
+ case 0xeb: /* EX DE,HL */
+ temp = HL;
+ HL = DE;
+ DE = temp;
+ break;
+
+ case 0xec: /* CALL PE,nnnn */
+ CALLC(TSTFLAG(P));
+ break;
+
+ case 0xed: /* ED prefix */
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ switch (RAM_PP(PC)) {
+
+ case 0x40: /* IN B,(C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_HIGH_REGISTER(BC, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x41: /* OUT (C),B */
+ cpu_out(LOW_REGISTER(BC), HIGH_REGISTER(BC));
+ break;
+
+ case 0x42: /* SBC HL,BC */
+ HL &= ADDRMASK;
+ BC &= ADDRMASK;
+ sum = HL - BC - TSTFLAG(C);
+ AF = (AF & ~0xff) | ((sum >> 8) & 0xa8) | (((sum & ADDRMASK) == 0) << 6) |
+ cbits2Z80Table[((HL ^ BC ^ sum) >> 8) & 0x1ff];
+ HL = sum;
+ break;
+
+ case 0x43: /* LD (nnnn),BC */
+ PUT_WORD(GET_WORD(PC), BC);
+ PC += 2;
+ break;
+
+ case 0x44: /* NEG */
+
+ case 0x4C: /* NEG, unofficial */
+
+ case 0x54: /* NEG, unofficial */
+
+ case 0x5C: /* NEG, unofficial */
+
+ case 0x64: /* NEG, unofficial */
+
+ case 0x6C: /* NEG, unofficial */
+
+ case 0x74: /* NEG, unofficial */
+
+ case 0x7C: /* NEG, unofficial */
+ temp = HIGH_REGISTER(AF);
+ AF = ((~(AF & 0xff00) + 1) & 0xff00); /* AF = (-(AF & 0xff00) & 0xff00); */
+ AF |= ((AF >> 8) & 0xa8) | (((AF & 0xff00) == 0) << 6) | negTable[temp];
+ break;
+
+ case 0x45: /* RETN */
+
+ case 0x55: /* RETN, unofficial */
+
+ case 0x5D: /* RETN, unofficial */
+
+ case 0x65: /* RETN, unofficial */
+
+ case 0x6D: /* RETN, unofficial */
+
+ case 0x75: /* RETN, unofficial */
+
+ case 0x7D: /* RETN, unofficial */
+ IFF |= IFF >> 1;
+ POP(PC);
+ break;
+
+ case 0x46: /* IM 0 */
+ /* interrupt mode 0 */
+ break;
+
+ case 0x47: /* LD I,A */
+ IR = (IR & 0xff) | (AF & ~0xff);
+ break;
+
+ case 0x48: /* IN C,(C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_LOW_REGISTER(BC, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x49: /* OUT (C),C */
+ cpu_out(LOW_REGISTER(BC), LOW_REGISTER(BC));
+ break;
+
+ case 0x4a: /* ADC HL,BC */
+ HL &= ADDRMASK;
+ BC &= ADDRMASK;
+ sum = HL + BC + TSTFLAG(C);
+ AF = (AF & ~0xff) | ((sum >> 8) & 0xa8) | (((sum & ADDRMASK) == 0) << 6) |
+ cbitsZ80Table[(HL ^ BC ^ sum) >> 8];
+ HL = sum;
+ break;
+
+ case 0x4b: /* LD BC,(nnnn) */
+ BC = GET_WORD(GET_WORD(PC));
+ PC += 2;
+ break;
+
+ case 0x4d: /* RETI */
+ IFF |= IFF >> 1;
+ POP(PC);
+ break;
+
+ case 0x4f: /* LD R,A */
+ IR = (IR & ~0xff) | ((AF >> 8) & 0xff);
+ break;
+
+ case 0x50: /* IN D,(C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_HIGH_REGISTER(DE, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x51: /* OUT (C),D */
+ cpu_out(LOW_REGISTER(BC), HIGH_REGISTER(DE));
+ break;
+
+ case 0x52: /* SBC HL,DE */
+ HL &= ADDRMASK;
+ DE &= ADDRMASK;
+ sum = HL - DE - TSTFLAG(C);
+ AF = (AF & ~0xff) | ((sum >> 8) & 0xa8) | (((sum & ADDRMASK) == 0) << 6) |
+ cbits2Z80Table[((HL ^ DE ^ sum) >> 8) & 0x1ff];
+ HL = sum;
+ break;
+
+ case 0x53: /* LD (nnnn),DE */
+ PUT_WORD(GET_WORD(PC), DE);
+ PC += 2;
+ break;
+
+ case 0x56: /* IM 1 */
+ /* interrupt mode 1 */
+ break;
+
+ case 0x57: /* LD A,I */
+ AF = (AF & 0x29) | (IR & ~0xff) | ((IR >> 8) & 0x80) | (((IR & ~0xff) == 0) << 6) | ((IFF & 2) << 1);
+ break;
+
+ case 0x58: /* IN E,(C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_LOW_REGISTER(DE, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x59: /* OUT (C),E */
+ cpu_out(LOW_REGISTER(BC), LOW_REGISTER(DE));
+ break;
+
+ case 0x5a: /* ADC HL,DE */
+ HL &= ADDRMASK;
+ DE &= ADDRMASK;
+ sum = HL + DE + TSTFLAG(C);
+ AF = (AF & ~0xff) | ((sum >> 8) & 0xa8) | (((sum & ADDRMASK) == 0) << 6) |
+ cbitsZ80Table[(HL ^ DE ^ sum) >> 8];
+ HL = sum;
+ break;
+
+ case 0x5b: /* LD DE,(nnnn) */
+ DE = GET_WORD(GET_WORD(PC));
+ PC += 2;
+ break;
+
+ case 0x5e: /* IM 2 */
+ /* interrupt mode 2 */
+ break;
+
+ case 0x5f: /* LD A,R */
+ AF = (AF & 0x29) | ((IR & 0xff) << 8) | (IR & 0x80) |
+ (((IR & 0xff) == 0) << 6) | ((IFF & 2) << 1);
+ break;
+
+ case 0x60: /* IN H,(C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_HIGH_REGISTER(HL, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x61: /* OUT (C),H */
+ cpu_out(LOW_REGISTER(BC), HIGH_REGISTER(HL));
+ break;
+
+ case 0x62: /* SBC HL,HL */
+ HL &= ADDRMASK;
+ sum = HL - HL - TSTFLAG(C);
+ AF = (AF & ~0xff) | (((sum & ADDRMASK) == 0) << 6) |
+ cbits2Z80DupTable[(sum >> 8) & 0x1ff];
+ HL = sum;
+ break;
+
+ case 0x63: /* LD (nnnn),HL */
+ PUT_WORD(GET_WORD(PC), HL);
+ PC += 2;
+ break;
+
+ case 0x67: /* RRD */
+ temp = GET_BYTE(HL);
+ acu = HIGH_REGISTER(AF);
+ PUT_BYTE(HL, HIGH_DIGIT(temp) | (LOW_DIGIT(acu) << 4));
+ AF = rrdrldTable[(acu & 0xf0) | LOW_DIGIT(temp)] | (AF & 1);
+ break;
+
+ case 0x68: /* IN L,(C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_LOW_REGISTER(HL, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x69: /* OUT (C),L */
+ cpu_out(LOW_REGISTER(BC), LOW_REGISTER(HL));
+ break;
+
+ case 0x6a: /* ADC HL,HL */
+ HL &= ADDRMASK;
+ sum = HL + HL + TSTFLAG(C);
+ AF = (AF & ~0xff) | (((sum & ADDRMASK) == 0) << 6) |
+ cbitsZ80DupTable[sum >> 8];
+ HL = sum;
+ break;
+
+ case 0x6b: /* LD HL,(nnnn) */
+ HL = GET_WORD(GET_WORD(PC));
+ PC += 2;
+ break;
+
+ case 0x6f: /* RLD */
+ temp = GET_BYTE(HL);
+ acu = HIGH_REGISTER(AF);
+ PUT_BYTE(HL, (LOW_DIGIT(temp) << 4) | LOW_DIGIT(acu));
+ AF = rrdrldTable[(acu & 0xf0) | HIGH_DIGIT(temp)] | (AF & 1);
+ break;
+
+ case 0x70: /* IN (C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_LOW_REGISTER(temp, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x71: /* OUT (C),0 */
+ cpu_out(LOW_REGISTER(BC), 0);
+ break;
+
+ case 0x72: /* SBC HL,SP */
+ HL &= ADDRMASK;
+ SP &= ADDRMASK;
+ sum = HL - SP - TSTFLAG(C);
+ AF = (AF & ~0xff) | ((sum >> 8) & 0xa8) | (((sum & ADDRMASK) == 0) << 6) |
+ cbits2Z80Table[((HL ^ SP ^ sum) >> 8) & 0x1ff];
+ HL = sum;
+ break;
+
+ case 0x73: /* LD (nnnn),SP */
+ PUT_WORD(GET_WORD(PC), SP);
+ PC += 2;
+ break;
+
+ case 0x78: /* IN A,(C) */
+ temp = cpu_in(LOW_REGISTER(BC));
+ SET_HIGH_REGISTER(AF, temp);
+ AF = (AF & ~0xfe) | rotateShiftTable[temp & 0xff];
+ break;
+
+ case 0x79: /* OUT (C),A */
+ cpu_out(LOW_REGISTER(BC), HIGH_REGISTER(AF));
+ break;
+
+ case 0x7a: /* ADC HL,SP */
+ HL &= ADDRMASK;
+ SP &= ADDRMASK;
+ sum = HL + SP + TSTFLAG(C);
+ AF = (AF & ~0xff) | ((sum >> 8) & 0xa8) | (((sum & ADDRMASK) == 0) << 6) |
+ cbitsZ80Table[(HL ^ SP ^ sum) >> 8];
+ HL = sum;
+ break;
+
+ case 0x7b: /* LD SP,(nnnn) */
+ SP = GET_WORD(GET_WORD(PC));
+ PC += 2;
+ break;
+
+ case 0xa0: /* LDI */
+ acu = RAM_PP(HL);
+ PUT_BYTE_PP(DE, acu);
+ acu += HIGH_REGISTER(AF);
+ AF = (AF & ~0x3e) | (acu & 8) | ((acu & 2) << 4) |
+ (((--BC & ADDRMASK) != 0) << 2);
+ break;
+
+ case 0xa1: /* CPI */
+ acu = HIGH_REGISTER(AF);
+ temp = RAM_PP(HL);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xfe) | (sum & 0x80) | (!(sum & 0xff) << 6) |
+ (((sum - ((cbits & 16) >> 4)) & 2) << 4) | (cbits & 16) |
+ ((sum - ((cbits >> 4) & 1)) & 8) |
+ ((--BC & ADDRMASK) != 0) << 2 | 2;
+ if ((sum & 15) == 8 && (cbits & 16) != 0)
+ AF &= ~8;
+ break;
+
+ /* SF, ZF, YF, XF flags are affected by decreasing register B, as in DEC B.
+ NF flag A is copy of bit 7 of the value read from or written to an I/O port.
+ INI/INIR/IND/INDR use the C flag in stead of the L register. There is a
+ catch though, because not the value of C is used, but C + 1 if it's INI/INIR or
+ C - 1 if it's IND/INDR. So, first of all INI/INIR:
+ HF and CF Both set if ((HL) + ((C + 1) & 255) > 255)
+ PF The parity of (((HL) + ((C + 1) & 255)) & 7) xor B) */
+ case 0xa2: /* INI */
+ acu = cpu_in(LOW_REGISTER(BC));
+ PUT_BYTE(HL, acu);
+ ++HL;
+ temp = HIGH_REGISTER(BC);
+ BC -= 0x100;
+ INOUTFLAGS_NONZERO((LOW_REGISTER(BC) + 1) & 0xff);
+ break;
+
+ /* SF, ZF, YF, XF flags are affected by decreasing register B, as in DEC B.
+ NF flag A is copy of bit 7 of the value read from or written to an I/O port.
+ And now the for OUTI/OTIR/OUTD/OTDR instructions. Take state of the L
+ after the increment or decrement of HL; add the value written to the I/O port
+ to; call that k for now. If k > 255, then the CF and HF flags are set. The PF
+ flags is set like the parity of k bitwise and'ed with 7, bitwise xor'ed with B.
+ HF and CF Both set if ((HL) + L > 255)
+ PF The parity of ((((HL) + L) & 7) xor B) */
+ case 0xa3: /* OUTI */
+ acu = GET_BYTE(HL);
+ cpu_out(LOW_REGISTER(BC), acu);
+ ++HL;
+ temp = HIGH_REGISTER(BC);
+ BC -= 0x100;
+ INOUTFLAGS_NONZERO(LOW_REGISTER(HL));
+ break;
+
+ case 0xa8: /* LDD */
+ acu = RAM_MM(HL);
+ PUT_BYTE_MM(DE, acu);
+ acu += HIGH_REGISTER(AF);
+ AF = (AF & ~0x3e) | (acu & 8) | ((acu & 2) << 4) |
+ (((--BC & ADDRMASK) != 0) << 2);
+ break;
+
+ case 0xa9: /* CPD */
+ acu = HIGH_REGISTER(AF);
+ temp = RAM_MM(HL);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xfe) | (sum & 0x80) | (!(sum & 0xff) << 6) |
+ (((sum - ((cbits & 16) >> 4)) & 2) << 4) | (cbits & 16) |
+ ((sum - ((cbits >> 4) & 1)) & 8) |
+ ((--BC & ADDRMASK) != 0) << 2 | 2;
+ if ((sum & 15) == 8 && (cbits & 16) != 0)
+ AF &= ~8;
+ break;
+
+ /* SF, ZF, YF, XF flags are affected by decreasing register B, as in DEC B.
+ NF flag A is copy of bit 7 of the value read from or written to an I/O port.
+ INI/INIR/IND/INDR use the C flag in stead of the L register. There is a
+ catch though, because not the value of C is used, but C + 1 if it's INI/INIR or
+ C - 1 if it's IND/INDR. And last IND/INDR:
+ HF and CF Both set if ((HL) + ((C - 1) & 255) > 255)
+ PF The parity of (((HL) + ((C - 1) & 255)) & 7) xor B) */
+ case 0xaa: /* IND */
+ acu = cpu_in(LOW_REGISTER(BC));
+ PUT_BYTE(HL, acu);
+ --HL;
+ temp = HIGH_REGISTER(BC);
+ BC -= 0x100;
+ INOUTFLAGS_NONZERO((LOW_REGISTER(BC) - 1) & 0xff);
+ break;
+
+ case 0xab: /* OUTD */
+ acu = GET_BYTE(HL);
+ cpu_out(LOW_REGISTER(BC), acu);
+ --HL;
+ temp = HIGH_REGISTER(BC);
+ BC -= 0x100;
+ INOUTFLAGS_NONZERO(LOW_REGISTER(HL));
+ break;
+
+ case 0xb0: /* LDIR */
+ BC &= ADDRMASK;
+ if (BC == 0)
+ BC = 0x10000;
+ do {
+ INCR(2); /* Add two M1 cycles to refresh counter */
+ acu = RAM_PP(HL);
+ PUT_BYTE_PP(DE, acu);
+ } while (--BC);
+ acu += HIGH_REGISTER(AF);
+ AF = (AF & ~0x3e) | (acu & 8) | ((acu & 2) << 4);
+ break;
+
+ case 0xb1: /* CPIR */
+ acu = HIGH_REGISTER(AF);
+ BC &= ADDRMASK;
+ if (BC == 0)
+ BC = 0x10000;
+ do {
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ temp = RAM_PP(HL);
+ op = --BC != 0;
+ sum = acu - temp;
+ } while (op && sum != 0);
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xfe) | (sum & 0x80) | (!(sum & 0xff) << 6) |
+ (((sum - ((cbits & 16) >> 4)) & 2) << 4) |
+ (cbits & 16) | ((sum - ((cbits >> 4) & 1)) & 8) |
+ op << 2 | 2;
+ if ((sum & 15) == 8 && (cbits & 16) != 0)
+ AF &= ~8;
+ break;
+
+ case 0xb2: /* INIR */
+ temp = HIGH_REGISTER(BC);
+ if (temp == 0)
+ temp = 0x100;
+ do {
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ acu = cpu_in(LOW_REGISTER(BC));
+ PUT_BYTE(HL, acu);
+ ++HL;
+ } while (--temp);
+ temp = HIGH_REGISTER(BC);
+ SET_HIGH_REGISTER(BC, 0);
+ INOUTFLAGS_ZERO((LOW_REGISTER(BC) + 1) & 0xff);
+ break;
+
+ case 0xb3: /* OTIR */
+ temp = HIGH_REGISTER(BC);
+ if (temp == 0)
+ temp = 0x100;
+ do {
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ acu = GET_BYTE(HL);
+ cpu_out(LOW_REGISTER(BC), acu);
+ ++HL;
+ } while (--temp);
+ temp = HIGH_REGISTER(BC);
+ SET_HIGH_REGISTER(BC, 0);
+ INOUTFLAGS_ZERO(LOW_REGISTER(HL));
+ break;
+
+ case 0xb8: /* LDDR */
+ BC &= ADDRMASK;
+ if (BC == 0)
+ BC = 0x10000;
+ do {
+ INCR(2); /* Add two M1 cycles to refresh counter */
+ acu = RAM_MM(HL);
+ PUT_BYTE_MM(DE, acu);
+ } while (--BC);
+ acu += HIGH_REGISTER(AF);
+ AF = (AF & ~0x3e) | (acu & 8) | ((acu & 2) << 4);
+ break;
+
+ case 0xb9: /* CPDR */
+ acu = HIGH_REGISTER(AF);
+ BC &= ADDRMASK;
+ if (BC == 0)
+ BC = 0x10000;
+ do {
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ temp = RAM_MM(HL);
+ op = --BC != 0;
+ sum = acu - temp;
+ } while (op && sum != 0);
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xfe) | (sum & 0x80) | (!(sum & 0xff) << 6) |
+ (((sum - ((cbits & 16) >> 4)) & 2) << 4) |
+ (cbits & 16) | ((sum - ((cbits >> 4) & 1)) & 8) |
+ op << 2 | 2;
+ if ((sum & 15) == 8 && (cbits & 16) != 0)
+ AF &= ~8;
+ break;
+
+ case 0xba: /* INDR */
+ temp = HIGH_REGISTER(BC);
+ if (temp == 0)
+ temp = 0x100;
+ do {
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ acu = cpu_in(LOW_REGISTER(BC));
+ PUT_BYTE(HL, acu);
+ --HL;
+ } while (--temp);
+ temp = HIGH_REGISTER(BC);
+ SET_HIGH_REGISTER(BC, 0);
+ INOUTFLAGS_ZERO((LOW_REGISTER(BC) - 1) & 0xff);
+ break;
+
+ case 0xbb: /* OTDR */
+ temp = HIGH_REGISTER(BC);
+ if (temp == 0)
+ temp = 0x100;
+ do {
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ acu = GET_BYTE(HL);
+ cpu_out(LOW_REGISTER(BC), acu);
+ --HL;
+ } while (--temp);
+ temp = HIGH_REGISTER(BC);
+ SET_HIGH_REGISTER(BC, 0);
+ INOUTFLAGS_ZERO(LOW_REGISTER(HL));
+ break;
+
+ default: /* ignore ED and following byte */
+ break;
+ }
+ break;
+
+ case 0xee: /* XOR nn */
+ AF = xororTable[((AF >> 8) ^ RAM_PP(PC)) & 0xff];
+ break;
+
+ case 0xef: /* RST 28H */
+ PUSH(PC);
+ PC = 0x28;
+ break;
+
+ case 0xf0: /* RET P */
+ if (!(TSTFLAG(S)))
+ POP(PC);
+ break;
+
+ case 0xf1: /* POP AF */
+ POP(AF);
+ break;
+
+ case 0xf2: /* JP P,nnnn */
+ JPC(!TSTFLAG(S));
+ break;
+
+ case 0xf3: /* DI */
+ IFF = 0;
+ break;
+
+ case 0xf4: /* CALL P,nnnn */
+ CALLC(!TSTFLAG(S));
+ break;
+
+ case 0xf5: /* PUSH AF */
+ PUSH(AF);
+ break;
+
+ case 0xf6: /* OR nn */
+ AF = xororTable[((AF >> 8) | RAM_PP(PC)) & 0xff];
+ break;
+
+ case 0xf7: /* RST 30H */
+ PUSH(PC);
+ PC = 0x30;
+ break;
+
+ case 0xf8: /* RET M */
+ if (TSTFLAG(S))
+ POP(PC);
+ break;
+
+ case 0xf9: /* LD SP,HL */
+ SP = HL;
+ break;
+
+ case 0xfa: /* JP M,nnnn */
+ JPC(TSTFLAG(S));
+ break;
+
+ case 0xfb: /* EI */
+ IFF = 3;
+ break;
+
+ case 0xfc: /* CALL M,nnnn */
+ CALLC(TSTFLAG(S));
+ break;
+
+ case 0xfd: /* FD prefix */
+ INCR(1); /* Add one M1 cycle to refresh counter */
+ switch (RAM_PP(PC)) {
+
+ case 0x09: /* ADD IY,BC */
+ IY &= ADDRMASK;
+ BC &= ADDRMASK;
+ sum = IY + BC;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(IY ^ BC ^ sum) >> 8];
+ IY = sum;
+ break;
+
+ case 0x19: /* ADD IY,DE */
+ IY &= ADDRMASK;
+ DE &= ADDRMASK;
+ sum = IY + DE;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(IY ^ DE ^ sum) >> 8];
+ IY = sum;
+ break;
+
+ case 0x21: /* LD IY,nnnn */
+ IY = GET_WORD(PC);
+ PC += 2;
+ break;
+
+ case 0x22: /* LD (nnnn),IY */
+ temp = GET_WORD(PC);
+ PUT_WORD(temp, IY);
+ PC += 2;
+ break;
+
+ case 0x23: /* INC IY */
+ ++IY;
+ break;
+
+ case 0x24: /* INC IYH */
+ IY += 0x100;
+ AF = (AF & ~0xfe) | incZ80Table[HIGH_REGISTER(IY)];
+ break;
+
+ case 0x25: /* DEC IYH */
+ IY -= 0x100;
+ AF = (AF & ~0xfe) | decZ80Table[HIGH_REGISTER(IY)];
+ break;
+
+ case 0x26: /* LD IYH,nn */
+ SET_HIGH_REGISTER(IY, RAM_PP(PC));
+ break;
+
+ case 0x29: /* ADD IY,IY */
+ IY &= ADDRMASK;
+ sum = IY + IY;
+ AF = (AF & ~0x3b) | cbitsDup16Table[sum >> 8];
+ IY = sum;
+ break;
+
+ case 0x2a: /* LD IY,(nnnn) */
+ IY = GET_WORD(GET_WORD(PC));
+ PC += 2;
+ break;
+
+ case 0x2b: /* DEC IY */
+ --IY;
+ break;
+
+ case 0x2c: /* INC IYL */
+ temp = LOW_REGISTER(IY) + 1;
+ SET_LOW_REGISTER(IY, temp);
+ AF = (AF & ~0xfe) | incZ80Table[temp];
+ break;
+
+ case 0x2d: /* DEC IYL */
+ temp = LOW_REGISTER(IY) - 1;
+ SET_LOW_REGISTER(IY, temp);
+ AF = (AF & ~0xfe) | decZ80Table[temp & 0xff];
+ break;
+
+ case 0x2e: /* LD IYL,nn */
+ SET_LOW_REGISTER(IY, RAM_PP(PC));
+ break;
+
+ case 0x34: /* INC (IY+dd) */
+ adr = IY + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr) + 1;
+ PUT_BYTE(adr, temp);
+ AF = (AF & ~0xfe) | incZ80Table[temp];
+ break;
+
+ case 0x35: /* DEC (IY+dd) */
+ adr = IY + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr) - 1;
+ PUT_BYTE(adr, temp);
+ AF = (AF & ~0xfe) | decZ80Table[temp & 0xff];
+ break;
+
+ case 0x36: /* LD (IY+dd),nn */
+ adr = IY + (int8)RAM_PP(PC);
+ PUT_BYTE(adr, RAM_PP(PC));
+ break;
+
+ case 0x39: /* ADD IY,SP */
+ IY &= ADDRMASK;
+ SP &= ADDRMASK;
+ sum = IY + SP;
+ AF = (AF & ~0x3b) | ((sum >> 8) & 0x28) | cbitsTable[(IY ^ SP ^ sum) >> 8];
+ IY = sum;
+ break;
+
+ case 0x44: /* LD B,IYH */
+ SET_HIGH_REGISTER(BC, HIGH_REGISTER(IY));
+ break;
+
+ case 0x45: /* LD B,IYL */
+ SET_HIGH_REGISTER(BC, LOW_REGISTER(IY));
+ break;
+
+ case 0x46: /* LD B,(IY+dd) */
+ SET_HIGH_REGISTER(BC, GET_BYTE(IY + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x4c: /* LD C,IYH */
+ SET_LOW_REGISTER(BC, HIGH_REGISTER(IY));
+ break;
+
+ case 0x4d: /* LD C,IYL */
+ SET_LOW_REGISTER(BC, LOW_REGISTER(IY));
+ break;
+
+ case 0x4e: /* LD C,(IY+dd) */
+ SET_LOW_REGISTER(BC, GET_BYTE(IY + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x54: /* LD D,IYH */
+ SET_HIGH_REGISTER(DE, HIGH_REGISTER(IY));
+ break;
+
+ case 0x55: /* LD D,IYL */
+ SET_HIGH_REGISTER(DE, LOW_REGISTER(IY));
+ break;
+
+ case 0x56: /* LD D,(IY+dd) */
+ SET_HIGH_REGISTER(DE, GET_BYTE(IY + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x5c: /* LD E,IYH */
+ SET_LOW_REGISTER(DE, HIGH_REGISTER(IY));
+ break;
+
+ case 0x5d: /* LD E,IYL */
+ SET_LOW_REGISTER(DE, LOW_REGISTER(IY));
+ break;
+
+ case 0x5e: /* LD E,(IY+dd) */
+ SET_LOW_REGISTER(DE, GET_BYTE(IY + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x60: /* LD IYH,B */
+ SET_HIGH_REGISTER(IY, HIGH_REGISTER(BC));
+ break;
+
+ case 0x61: /* LD IYH,C */
+ SET_HIGH_REGISTER(IY, LOW_REGISTER(BC));
+ break;
+
+ case 0x62: /* LD IYH,D */
+ SET_HIGH_REGISTER(IY, HIGH_REGISTER(DE));
+ break;
+
+ case 0x63: /* LD IYH,E */
+ SET_HIGH_REGISTER(IY, LOW_REGISTER(DE));
+ break;
+
+ case 0x64: /* LD IYH,IYH */
+ break;
+
+ case 0x65: /* LD IYH,IYL */
+ SET_HIGH_REGISTER(IY, LOW_REGISTER(IY));
+ break;
+
+ case 0x66: /* LD H,(IY+dd) */
+ SET_HIGH_REGISTER(HL, GET_BYTE(IY + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x67: /* LD IYH,A */
+ SET_HIGH_REGISTER(IY, HIGH_REGISTER(AF));
+ break;
+
+ case 0x68: /* LD IYL,B */
+ SET_LOW_REGISTER(IY, HIGH_REGISTER(BC));
+ break;
+
+ case 0x69: /* LD IYL,C */
+ SET_LOW_REGISTER(IY, LOW_REGISTER(BC));
+ break;
+
+ case 0x6a: /* LD IYL,D */
+ SET_LOW_REGISTER(IY, HIGH_REGISTER(DE));
+ break;
+
+ case 0x6b: /* LD IYL,E */
+ SET_LOW_REGISTER(IY, LOW_REGISTER(DE));
+ break;
+
+ case 0x6c: /* LD IYL,IYH */
+ SET_LOW_REGISTER(IY, HIGH_REGISTER(IY));
+ break;
+
+ case 0x6d: /* LD IYL,IYL */
+ break;
+
+ case 0x6e: /* LD L,(IY+dd) */
+ SET_LOW_REGISTER(HL, GET_BYTE(IY + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x6f: /* LD IYL,A */
+ SET_LOW_REGISTER(IY, HIGH_REGISTER(AF));
+ break;
+
+ case 0x70: /* LD (IY+dd),B */
+ PUT_BYTE(IY + (int8)RAM_PP(PC), HIGH_REGISTER(BC));
+ break;
+
+ case 0x71: /* LD (IY+dd),C */
+ PUT_BYTE(IY + (int8)RAM_PP(PC), LOW_REGISTER(BC));
+ break;
+
+ case 0x72: /* LD (IY+dd),D */
+ PUT_BYTE(IY + (int8)RAM_PP(PC), HIGH_REGISTER(DE));
+ break;
+
+ case 0x73: /* LD (IY+dd),E */
+ PUT_BYTE(IY + (int8)RAM_PP(PC), LOW_REGISTER(DE));
+ break;
+
+ case 0x74: /* LD (IY+dd),H */
+ PUT_BYTE(IY + (int8)RAM_PP(PC), HIGH_REGISTER(HL));
+ break;
+
+ case 0x75: /* LD (IY+dd),L */
+ PUT_BYTE(IY + (int8)RAM_PP(PC), LOW_REGISTER(HL));
+ break;
+
+ case 0x77: /* LD (IY+dd),A */
+ PUT_BYTE(IY + (int8)RAM_PP(PC), HIGH_REGISTER(AF));
+ break;
+
+ case 0x7c: /* LD A,IYH */
+ SET_HIGH_REGISTER(AF, HIGH_REGISTER(IY));
+ break;
+
+ case 0x7d: /* LD A,IYL */
+ SET_HIGH_REGISTER(AF, LOW_REGISTER(IY));
+ break;
+
+ case 0x7e: /* LD A,(IY+dd) */
+ SET_HIGH_REGISTER(AF, GET_BYTE(IY + (int8)RAM_PP(PC)));
+ break;
+
+ case 0x84: /* ADD A,IYH */
+ temp = HIGH_REGISTER(IY);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x85: /* ADD A,IYL */
+ temp = LOW_REGISTER(IY);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x86: /* ADD A,(IY+dd) */
+ adr = IY + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp;
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x8c: /* ADC A,IYH */
+ temp = HIGH_REGISTER(IY);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x8d: /* ADC A,IYL */
+ temp = LOW_REGISTER(IY);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x8e: /* ADC A,(IY+dd) */
+ adr = IY + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu + temp + TSTFLAG(C);
+ AF = addTable[sum] | cbitsZ80Table[acu ^ temp ^ sum];
+ break;
+
+ case 0x96: /* SUB (IY+dd) */
+ adr = IY + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0x94: /* SUB IYH */
+ SETFLAG(C, 0);/* fall through, a bit less efficient but smaller code */
+
+ case 0x9c: /* SBC A,IYH */
+ temp = HIGH_REGISTER(IY);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0x95: /* SUB IYL */
+ SETFLAG(C, 0);/* fall through, a bit less efficient but smaller code */
+
+ case 0x9d: /* SBC A,IYL */
+ temp = LOW_REGISTER(IY);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0x9e: /* SBC A,(IY+dd) */
+ adr = IY + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp - TSTFLAG(C);
+ AF = addTable[sum & 0xff] | cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xa4: /* AND IYH */
+ AF = andTable[((AF & IY) >> 8) & 0xff];
+ break;
+
+ case 0xa5: /* AND IYL */
+ AF = andTable[((AF >> 8)& IY) & 0xff];
+ break;
+
+ case 0xa6: /* AND (IY+dd) */
+ AF = andTable[((AF >> 8)& GET_BYTE(IY + (int8)RAM_PP(PC))) & 0xff];
+ break;
+
+ case 0xac: /* XOR IYH */
+ AF = xororTable[((AF ^ IY) >> 8) & 0xff];
+ break;
+
+ case 0xad: /* XOR IYL */
+ AF = xororTable[((AF >> 8) ^ IY) & 0xff];
+ break;
+
+ case 0xae: /* XOR (IY+dd) */
+ AF = xororTable[((AF >> 8) ^ GET_BYTE(IY + (int8)RAM_PP(PC))) & 0xff];
+ break;
+
+ case 0xb4: /* OR IYH */
+ AF = xororTable[((AF | IY) >> 8) & 0xff];
+ break;
+
+ case 0xb5: /* OR IYL */
+ AF = xororTable[((AF >> 8) | IY) & 0xff];
+ break;
+
+ case 0xb6: /* OR (IY+dd) */
+ AF = xororTable[((AF >> 8) | GET_BYTE(IY + (int8)RAM_PP(PC))) & 0xff];
+ break;
+
+ case 0xbc: /* CP IYH */
+ temp = HIGH_REGISTER(IY);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xbd: /* CP IYL */
+ temp = LOW_REGISTER(IY);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xbe: /* CP (IY+dd) */
+ adr = IY + (int8)RAM_PP(PC);
+ temp = GET_BYTE(adr);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ cbits2Z80Table[(acu ^ temp ^ sum) & 0x1ff];
+ break;
+
+ case 0xcb: /* CB prefix */
+ adr = IY + (int8)RAM_PP(PC);
+ switch ((op = GET_BYTE(PC)) & 7) {
+
+ case 0:
+ ++PC;
+ acu = HIGH_REGISTER(BC);
+ break;
+
+ case 1:
+ ++PC;
+ acu = LOW_REGISTER(BC);
+ break;
+
+ case 2:
+ ++PC;
+ acu = HIGH_REGISTER(DE);
+ break;
+
+ case 3:
+ ++PC;
+ acu = LOW_REGISTER(DE);
+ break;
+
+ case 4:
+ ++PC;
+ acu = HIGH_REGISTER(HL);
+ break;
+
+ case 5:
+ ++PC;
+ acu = LOW_REGISTER(HL);
+ break;
+
+ case 6:
+ ++PC;
+ acu = GET_BYTE(adr);
+ break;
+
+ case 7:
+ ++PC;
+ acu = HIGH_REGISTER(AF);
+ break;
+ }
+ switch (op & 0xc0) {
+
+ case 0x00: /* shift/rotate */
+ switch (op & 0x38) {
+
+ case 0x00:/* RLC */
+ temp = (acu << 1) | (acu >> 7);
+ cbits = temp & 1;
+ goto cbshflg3;
+
+ case 0x08:/* RRC */
+ temp = (acu >> 1) | (acu << 7);
+ cbits = temp & 0x80;
+ goto cbshflg3;
+
+ case 0x10:/* RL */
+ temp = (acu << 1) | TSTFLAG(C);
+ cbits = acu & 0x80;
+ goto cbshflg3;
+
+ case 0x18:/* RR */
+ temp = (acu >> 1) | (TSTFLAG(C) << 7);
+ cbits = acu & 1;
+ goto cbshflg3;
+
+ case 0x20:/* SLA */
+ temp = acu << 1;
+ cbits = acu & 0x80;
+ goto cbshflg3;
+
+ case 0x28:/* SRA */
+ temp = (acu >> 1) | (acu & 0x80);
+ cbits = acu & 1;
+ goto cbshflg3;
+
+ case 0x30:/* SLIA */
+ temp = (acu << 1) | 1;
+ cbits = acu & 0x80;
+ goto cbshflg3;
+
+ case 0x38:/* SRL */
+ temp = acu >> 1;
+ cbits = acu & 1;
+ cbshflg3:
+ AF = (AF & ~0xff) | rotateShiftTable[temp & 0xff] | !!cbits;
+ }
+ break;
+
+ case 0x40: /* BIT */
+ if (acu & (1 << ((op >> 3) & 7)))
+ AF = (AF & ~0xfe) | 0x10 | (((op & 0x38) == 0x38) << 7);
+ else
+ AF = (AF & ~0xfe) | 0x54;
+ if ((op & 7) != 6)
+ AF |= (acu & 0x28);
+ temp = acu;
+ break;
+
+ case 0x80: /* RES */
+ temp = acu & ~(1 << ((op >> 3) & 7));
+ break;
+
+ case 0xc0: /* SET */
+ temp = acu | (1 << ((op >> 3) & 7));
+ break;
+ }
+ switch (op & 7) {
+
+ case 0:
+ SET_HIGH_REGISTER(BC, temp);
+ break;
+
+ case 1:
+ SET_LOW_REGISTER(BC, temp);
+ break;
+
+ case 2:
+ SET_HIGH_REGISTER(DE, temp);
+ break;
+
+ case 3:
+ SET_LOW_REGISTER(DE, temp);
+ break;
+
+ case 4:
+ SET_HIGH_REGISTER(HL, temp);
+ break;
+
+ case 5:
+ SET_LOW_REGISTER(HL, temp);
+ break;
+
+ case 6:
+ PUT_BYTE(adr, temp);
+ break;
+
+ case 7:
+ SET_HIGH_REGISTER(AF, temp);
+ break;
+ }
+ break;
+
+ case 0xe1: /* POP IY */
+ POP(IY);
+ break;
+
+ case 0xe3: /* EX (SP),IY */
+ temp = IY;
+ POP(IY);
+ PUSH(temp);
+ break;
+
+ case 0xe5: /* PUSH IY */
+ PUSH(IY);
+ break;
+
+ case 0xe9: /* JP (IY) */
+ PC = IY;
+ break;
+
+ case 0xf9: /* LD SP,IY */
+ SP = IY;
+ break;
+
+ default: /* ignore FD */
+ --PC;
+ }
+ break;
+
+ case 0xfe: /* CP nn */
+ temp = RAM_PP(PC);
+ AF = (AF & ~0x28) | (temp & 0x28);
+ acu = HIGH_REGISTER(AF);
+ sum = acu - temp;
+ cbits = acu ^ temp ^ sum;
+ AF = (AF & ~0xff) | cpTable[sum & 0xff] | (temp & 0x28) |
+ (SET_PV) | cbits2Table[cbits & 0x1ff];
+ break;
+
+ case 0xff: /* RST 38H */
+ PUSH(PC);
+ PC = 0x38;
+ }
+ }
+end_decode:
+ ;
+}
+
+
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/disk.h b/runcpm-rp2040-dvi-usb/runcpm-pico/disk.h
new file mode 100644
index 000000000..d8ee06c76
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/disk.h
@@ -0,0 +1,635 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef DISK_H
+#define DISK_H
+
+/* see main.c for definition */
+
+#ifdef __linux__
+#include
+#endif
+
+#ifdef __DJGPP__
+#include
+#endif
+
+/*
+Disk errors
+*/
+#define errWRITEPROT 1
+#define errSELECT 2
+
+#define RW (roVector & (1 << cDrive))
+
+// Prints out a BDOS error
+void _error(uint8 error) {
+ _puts("\r\nBdos Err on ");
+ _putcon('A' + cDrive);
+ _puts(": ");
+ switch (error) {
+ case errWRITEPROT:
+ _puts("R/O");
+ break;
+ case errSELECT:
+ _puts("Select");
+ break;
+ default:
+ _puts("\r\nCP/M ERR");
+ break;
+ }
+ Status = _getch();
+ _puts("\r\n");
+ cDrive = oDrive = _RamRead(DSKByte) & 0x0f;
+ Status = 2;
+}
+
+// Selects the disk to be used by the next disk function
+int _SelectDisk(uint8 dr) {
+ uint8 result = 0xff;
+ uint8 disk[2] = { 'A', 0 };
+
+ if (!dr || dr == '?') {
+ dr = cDrive; // This will set dr to defDisk in case no disk is passed
+ } else {
+ --dr; // Called from BDOS, set dr back to 0=A: format
+ }
+
+ disk[0] += dr;
+ if (_sys_select(&disk[0])) {
+ loginVector = loginVector | (1 << (disk[0] - 'A'));
+ result = 0x00;
+ } else {
+ _error(errSELECT);
+ }
+
+ return(result);
+}
+
+// Converts a FCB entry onto a host OS filename string
+uint8 _FCBtoHostname(uint16 fcbaddr, uint8* filename) {
+ uint8 addDot = TRUE;
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 i = 0;
+ uint8 unique = TRUE;
+ uint8 c;
+
+ if (F->dr && F->dr != '?') {
+ *(filename++) = (F->dr - 1) + 'A';
+ } else {
+ *(filename++) = cDrive + 'A';
+ }
+ *(filename++) = FOLDERCHAR;
+
+ *(filename++) = toupper(tohex(userCode));
+ *(filename++) = FOLDERCHAR;
+
+ if (F->dr != '?') {
+ while (i < 8) {
+ c = F->fn[i] & 0x7F;
+#ifdef NOSLASH
+ if (c == '/')
+ c = '_';
+#endif
+ if (c > 32)
+ *(filename++) = toupper(c);
+ if (c == '?')
+ unique = FALSE;
+ ++i;
+ }
+ i = 0;
+ while (i < 3) {
+ c = F->tp[i] & 0x7F;
+ if (c > 32) {
+ if (addDot) {
+ addDot = FALSE;
+ *(filename++) = '.'; // Only add the dot if there's an extension
+ }
+#ifdef NOSLASH
+ if (c == '/')
+ c = '_';
+#endif
+ *(filename++) = toupper(c);
+ }
+ if (c == '?')
+ unique = FALSE;
+ ++i;
+ }
+ } else {
+ for (i = 0; i < 8; ++i)
+ *(filename++) = '?';
+ *(filename++) = '.';
+ for (i = 0; i < 3; ++i)
+ *(filename++) = '?';
+ unique = FALSE;
+ }
+ *filename = 0x00;
+
+ return(unique);
+}
+
+// Convers a host OS filename string onto a FCB entry
+void _HostnameToFCB(uint16 fcbaddr, uint8* filename) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 i = 0;
+
+ ++filename;
+ if (*filename == FOLDERCHAR) { // Skips the drive and / if needed
+ filename += 3;
+ } else {
+ --filename;
+ }
+
+ while (*filename != 0 && *filename != '.') {
+ F->fn[i] = toupper(*filename);
+ ++filename;
+ ++i;
+ }
+ while (i < 8) {
+ F->fn[i] = ' ';
+ ++i;
+ }
+ if (*filename == '.')
+ ++filename;
+ i = 0;
+ while (*filename != 0) {
+ F->tp[i] = toupper(*filename);
+ ++filename;
+ ++i;
+ }
+ while (i < 3) {
+ F->tp[i] = ' ';
+ ++i;
+ }
+}
+
+// Converts a string name (AB.TXT) onto FCB name (AB TXT)
+void _HostnameToFCBname(uint8* from, uint8* to) {
+ int i = 0;
+
+ ++from;
+ if (*from == FOLDERCHAR) { // Skips the drive and / if needed
+ from += 3;
+ } else {
+ --from;
+ }
+
+ while (*from != 0 && *from != '.') {
+ *to = toupper(*from);
+ ++to; ++from; ++i;
+ }
+ while (i < 8) {
+ *to = ' ';
+ ++to; ++i;
+ }
+ if (*from == '.')
+ ++from;
+ i = 0;
+ while (*from != 0) {
+ *to = toupper(*from);
+ ++to; ++from; ++i;
+ }
+ while (i < 3) {
+ *to = ' ';
+ ++to; ++i;
+ }
+ *to = 0;
+}
+
+// Creates a fake directory entry for the current dmaAddr FCB
+void _mockupDirEntry(void) {
+ CPM_DIRENTRY* DE = (CPM_DIRENTRY*)_RamSysAddr(dmaAddr);
+ uint8 blocks, i;
+
+ for (i = 0; i < sizeof(CPM_DIRENTRY); ++i)
+ _RamWrite(dmaAddr + i, 0x00); // zero out directory entry
+ _HostnameToFCB(dmaAddr, (uint8*)findNextDirName);
+
+ if (allUsers) {
+ DE->dr = currFindUser; // set user code for return
+ } else {
+ DE->dr = userCode;
+ }
+ // does file fit in a single directory entry?
+ if (fileExtents <= extentsPerDirEntry) {
+ if (fileExtents) {
+ DE->ex = (fileExtents - 1 + fileExtentsUsed) % (MaxEX + 1);
+ DE->s2 = (fileExtents - 1 + fileExtentsUsed) / (MaxEX + 1);
+ DE->rc = fileRecords - (BlkEX * (fileExtents - 1));
+ }
+ blocks = (fileRecords >> blockShift) + ((fileRecords & blockMask) ? 1 : 0);
+ fileRecords = 0;
+ fileExtents = 0;
+ fileExtentsUsed = 0;
+ } else { // no, max out the directory entry
+ DE->ex = (extentsPerDirEntry - 1 + fileExtentsUsed) % (MaxEX + 1);
+ DE->s2 = (extentsPerDirEntry - 1 + fileExtentsUsed) / (MaxEX + 1);
+ DE->rc = BlkEX;
+ blocks = numAllocBlocks < 256 ? 16 : 8;
+ // update remaining records and extents for next call
+ fileRecords -= BlkEX * extentsPerDirEntry;
+ fileExtents -= extentsPerDirEntry;
+ fileExtentsUsed += extentsPerDirEntry;
+ }
+ // phoney up an appropriate number of allocation blocks
+ if (numAllocBlocks < 256) {
+ for (i = 0; i < blocks; ++i)
+ DE->al[i] = (uint8)firstFreeAllocBlock++;
+ } else {
+ for (i = 0; i < 2 * blocks; i += 2) {
+ DE->al[i] = firstFreeAllocBlock & 0xFF;
+ DE->al[i + 1] = firstFreeAllocBlock >> 8;
+ ++firstFreeAllocBlock;
+ }
+ }
+}
+
+// Matches a FCB name to a search pattern
+uint8 match(uint8* fcbname, uint8* pattern) {
+ uint8 result = 1;
+ uint8 i;
+
+ for (i = 0; i < 12; ++i) {
+ if (*pattern == '?' || *pattern == *fcbname) {
+ ++pattern; ++fcbname;
+ continue;
+ } else {
+ result = 0;
+ break;
+ }
+ }
+ return(result);
+}
+
+// Returns the size of a file
+long _FileSize(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ long r, l = -1;
+
+ if (!_SelectDisk(F->dr)) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ l = _sys_filesize(filename);
+ r = l % BlkSZ;
+ if (r)
+ l = l + BlkSZ - r;
+ }
+ return(l);
+}
+
+// Opens a file
+uint8 _OpenFile(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+ long len;
+ int32 i;
+
+ if (!_SelectDisk(F->dr)) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ if (_sys_openfile(&filename[0])) {
+
+ len = _FileSize(fcbaddr) / BlkSZ; // Compute the len on the file in blocks
+
+ F->s1 = 0x00;
+ F->s2 = 0x80; // set unmodified flag
+
+
+ F->rc = len > MaxRC ? MaxRC : (uint8)len;
+ for (i = 0; i < 16; ++i) // Clean up AL
+ F->al[i] = 0x00;
+
+ result = 0x00;
+ }
+ }
+ return(result);
+}
+
+// Closes a file
+uint8 _CloseFile(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+
+ if (!_SelectDisk(F->dr)) {
+ if (!(F->s2 & 0x80)) { // if file is modified
+ if (!RW) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ if (fcbaddr == BatchFCB)
+ _Truncate((char*)filename, F->rc); // Truncate $$$.SUB to F->rc CP/M records so SUBMIT.COM can work
+ result = 0x00;
+ } else {
+ _error(errWRITEPROT);
+ }
+ } else {
+ result = 0x00;
+ }
+ }
+ return(result);
+}
+
+// Creates a file
+uint8 _MakeFile(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+ uint8 i;
+
+ if (!_SelectDisk(F->dr)) {
+ if (!RW) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ if (_sys_makefile(&filename[0])) {
+ F->ex = 0x00; // Makefile also initializes the FCB (file becomes "open")
+ F->s1 = 0x00;
+ F->s2 = 0x00; // newly created files are already modified
+ F->rc = 0x00;
+ for (i = 0; i < 16; ++i) // Clean up AL
+ F->al[i] = 0x00;
+ F->cr = 0x00;
+ result = 0x00;
+ }
+ } else {
+ _error(errWRITEPROT);
+ }
+ }
+ return(result);
+}
+
+// Searches for the first directory file
+uint8 _SearchFirst(uint16 fcbaddr, uint8 isdir) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+
+ if (!_SelectDisk(F->dr)) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ allUsers = F->dr == '?';
+ allExtents = F->ex == '?';
+ if (allUsers) {
+ result = _findfirstallusers(isdir);
+ } else {
+ result = _findfirst(isdir);
+ }
+ }
+ return(result);
+}
+
+// Searches for the next directory file
+uint8 _SearchNext(uint16 fcbaddr, uint8 isdir) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(tmpFCB);
+ uint8 result = 0xff;
+
+ if (!_SelectDisk(F->dr)) {
+ if (allUsers) {
+ result = _findnextallusers(isdir);
+ } else {
+ result = _findnext(isdir);
+ }
+ }
+ return(result);
+}
+
+// Deletes a file
+uint8 _DeleteFile(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+#if defined(USE_PUN) || defined(USE_LST)
+ CPM_FCB* T = (CPM_FCB*)_RamSysAddr(tmpFCB);
+#endif
+ uint8 result = 0xff;
+ uint8 deleted = 0xff;
+
+ if (!_SelectDisk(F->dr)) {
+ if (!RW) {
+ result = _SearchFirst(fcbaddr, FALSE); // FALSE = Does not create a fake dir entry when finding the file
+ while (result != 0xff) {
+#ifdef USE_PUN
+ if (!strcmp((char*)T->fn, "PUN TXT") && pun_open) {
+ _sys_fclose(pun_dev);
+ pun_open = FALSE;
+ }
+#endif
+#ifdef USE_LST
+ if (!strcmp((char*)T->fn, "LST TXT") && lst_open) {
+ _sys_fclose(lst_dev);
+ lst_open = FALSE;
+ }
+#endif
+ _FCBtoHostname(tmpFCB, &filename[0]);
+ if (_sys_deletefile(&filename[0]))
+ deleted = 0x00;
+ result = _SearchFirst(fcbaddr, FALSE); // FALSE = Does not create a fake dir entry when finding the file
+ }
+ } else {
+ _error(errWRITEPROT);
+ }
+ }
+ return(deleted);
+}
+
+// Renames a file
+uint8 _RenameFile(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+
+ if (!_SelectDisk(F->dr)) {
+ if (!RW) {
+ _RamWrite(fcbaddr + 16, _RamRead(fcbaddr)); // Prevents rename from moving files among folders
+ _FCBtoHostname(fcbaddr + 16, &newname[0]);
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ if (_sys_renamefile(&filename[0], &newname[0]))
+ result = 0x00;
+ } else {
+ _error(errWRITEPROT);
+ }
+ }
+ return(result);
+}
+
+// Sequential read
+uint8 _ReadSeq(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+
+ long fpos = ((F->s2 & MaxS2) * BlkS2 * BlkSZ) +
+ (F->ex * BlkEX * BlkSZ) +
+ (F->cr * BlkSZ);
+
+ if (!_SelectDisk(F->dr)) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ result = _sys_readseq(&filename[0], fpos);
+ if (!result) { // Read succeeded, adjust FCB
+ ++F->cr;
+ if (F->cr > MaxCR) {
+ F->cr = 1;
+ ++F->ex;
+ }
+ if (F->ex > MaxEX) {
+ F->ex = 0;
+ ++F->s2;
+ }
+ if ((F->s2 & 0x7F) > MaxS2)
+ result = 0xfe; // (todo) not sure what to do
+ }
+ }
+ return(result);
+}
+
+// Sequential write
+uint8 _WriteSeq(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+
+ long fpos = ((F->s2 & MaxS2) * BlkS2 * BlkSZ) +
+ (F->ex * BlkEX * BlkSZ) +
+ (F->cr * BlkSZ);
+
+ if (!_SelectDisk(F->dr)) {
+ if (!RW) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ result = _sys_writeseq(&filename[0], fpos);
+ if (!result) { // Write succeeded, adjust FCB
+ F->s2 &= 0x7F; // reset unmodified flag
+ ++F->cr;
+ if (F->cr > MaxCR) {
+ F->cr = 1;
+ ++F->ex;
+ }
+ if (F->ex > MaxEX) {
+ F->ex = 0;
+ ++F->s2;
+ }
+ if (F->s2 > MaxS2)
+ result = 0xfe; // (todo) not sure what to do
+ }
+ } else {
+ _error(errWRITEPROT);
+ }
+ }
+ return(result);
+}
+
+// Random read
+uint8 _ReadRand(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+
+ int32 record = (F->r2 << 16) | (F->r1 << 8) | F->r0;
+ long fpos = record * BlkSZ;
+
+ if (!_SelectDisk(F->dr)) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ result = _sys_readrand(&filename[0], fpos);
+ if (result == 0 || result == 1 || result == 4) {
+ // adjust FCB unless error #6 (seek past 8MB - max CP/M file & disk size)
+ F->cr = record & 0x7F;
+ F->ex = (record >> 7) & 0x1f;
+ if (F->s2 & 0x80) {
+ F->s2 = ((record >> 12) & MaxS2) | 0x80;
+ } else {
+ F->s2 = (record >> 12) & MaxS2;
+ }
+ }
+ }
+ return(result);
+}
+
+// Random write
+uint8 _WriteRand(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+
+ int32 record = (F->r2 << 16) | (F->r1 << 8) | F->r0;
+ long fpos = record * BlkSZ;
+
+ if (!_SelectDisk(F->dr)) {
+ if (!RW) {
+ _FCBtoHostname(fcbaddr, &filename[0]);
+ result = _sys_writerand(&filename[0], fpos);
+ if (!result) { // Write succeeded, adjust FCB
+ F->cr = record & 0x7F;
+ F->ex = (record >> 7) & 0x1f;
+ F->s2 = (record >> 12) & MaxS2; // resets unmodified flag
+ }
+ } else {
+ _error(errWRITEPROT);
+ }
+ }
+ return(result);
+}
+
+// Returns the size of a CP/M file
+uint8 _GetFileSize(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0xff;
+ int32 count = _FileSize(DE) >> 7;
+
+ if (count != -1) {
+ F->r0 = count & 0xff;
+ F->r1 = (count >> 8) & 0xff;
+ F->r2 = (count >> 16) & 0xff;
+ }
+ return(result);
+}
+
+// Set the next random record
+uint8 _SetRandom(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ uint8 result = 0x00;
+
+ int32 count = F->cr & 0x7f;
+ count += (F->ex & 0x1f) << 7;
+ count += (F->s2 & MaxS2) << 12;
+
+ F->r0 = count & 0xff;
+ F->r1 = (count >> 8) & 0xff;
+ F->r2 = (count >> 16) & 0xff;
+
+ return(result);
+}
+
+// Sets the current user area
+void _SetUser(uint8 user) {
+ userCode = user & 0x1f; // BDOS unoficially allows user areas 0-31
+ // this may create folders from G-V if this function is called from an user program
+ // It is an unwanted behavior, but kept as BDOS does it
+#ifdef NOHIGHUSER
+ if(userCode < 16)
+#endif
+ _MakeUserDir(); // Creates the user dir (0-F[G-V]) if needed
+}
+
+// Creates a disk directory folder
+uint8 _MakeDisk(uint16 fcbaddr) {
+ CPM_FCB* F = (CPM_FCB*)_RamSysAddr(fcbaddr);
+ return(_sys_makedisk(F->dr));
+}
+
+// Checks if there's a temp submit file present
+uint8 _CheckSUB(void) {
+ uint8 result;
+ uint8 oCode = userCode; // Saves the current user code (original BDOS does not do this)
+ _HostnameToFCB(tmpFCB, (uint8*)"$???????.???"); // The original BDOS in fact only looks for a file which start with $
+#ifdef BATCHA
+ _RamWrite(tmpFCB, 1); // Forces it to be checked on drive A:
+#endif
+#ifdef BATCH0
+ userCode = 0; // Forces it to be checked on user 0
+#endif
+ result = (_SearchFirst(tmpFCB, FALSE) == 0x00) ? 0xff : 0x00;
+ userCode = oCode; // Restores the current user code
+ return(result);
+}
+
+#ifdef HASLUA
+// Executes a Lua script
+uint8 _RunLua(uint16 fcbaddr) {
+ uint8 luascript[17];
+ uint8 result = 0xff;
+
+ if (_FCBtoHostname(fcbaddr, &luascript[0])) { // Script name must be unique
+ if (!_SearchFirst(fcbaddr, FALSE)) { // and must exist
+ result = _RunLuaScript((char*)&luascript[0]);
+ }
+ }
+
+ return(result);
+}
+#endif
+
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/globals.h b/runcpm-rp2040-dvi-usb/runcpm-pico/globals.h
new file mode 100644
index 000000000..511c0ddf9
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/globals.h
@@ -0,0 +1,252 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef GLOBALS_H
+#define GLOBALS_H
+
+/* Some definitions needed globally */
+#ifdef __MINGW32__
+#include
+#endif
+
+/* Definition for enabling incrementing the R register for each M1 cycle */
+#define DO_INCR
+
+/* Definitions for enabling PUN: and LST: devices */
+#define USE_PUN // The pun.txt and lst.txt files will appear on drive A: user 0
+#define USE_LST
+
+/* Definitions for file/console based debugging */
+//#define DEBUG // Enables the internal debugger (enabled by default on vstudio debug builds)
+//#define iDEBUG // Enables instruction logging onto iDebug.log (for development debug only)
+//#define DEBUGLOG // Writes extensive call trace information to RunCPM.log
+//#define CONSOLELOG // Writes debug information to console instead of file
+//#define LOGBIOS_NOT 01 // If defined will not log this BIOS function number
+//#define LOGBIOS_ONLY 02 // If defines will log only this BIOS function number
+//#define LOGBDOS_NOT 06 // If defined will not log this BDOS function number
+//#define LOGBDOS_ONLY 22 // If defines will log only this BDOS function number
+#define LogName "RunCPM.log"
+
+/* RunCPM version for the greeting header */
+#define VERSION "6.0"
+#define VersionBCD 0x60
+
+/* Definition of which CCP to use (must define only one) */
+#define CCP_INTERNAL // If this is defined, an internal CCP will emulated
+//#define CCP_DR
+//#define CCP_CCPZ
+//#define CCP_ZCPR2
+//#define CCP_ZCPR3
+//#define CCP_Z80
+
+/* Definition of the CCP memory information */
+//
+#ifdef CCP_INTERNAL
+#define CCPname "INTERNAL v3.0" // Will use the CCP from ccp.h
+#define VersionCCP 0x30 // 0x10 and above reserved for Internal CCP
+#define BatchFCB (tmpFCB + 48)
+#define CCPaddr BDOSjmppage // Internal CCP has size 0
+#endif
+//
+#ifdef CCP_DR
+#define CCPname "CCP-DR." STR(TPASIZE) "K"
+#define VersionCCP 0x00 // Version to be used by INFO.COM
+#define BatchFCB (CCPaddr + 0x7AC) // Position of the $$$.SUB fcb on this CCP
+#define CCPaddr (BDOSjmppage-0x0800) // CCP memory address
+#endif
+//
+#ifdef CCP_CCPZ
+#define CCPname "CCP-CCPZ." STR(TPASIZE) "K"
+#define VersionCCP 0x01
+#define BatchFCB (CCPaddr + 0x7A) // Position of the $$$.SUB fcb on this CCP
+#define CCPaddr (BDOSjmppage-0x0800)
+#endif
+//
+#ifdef CCP_ZCPR2
+#define CCPname "CCP-ZCP2." STR(TPASIZE) "K"
+#define VersionCCP 0x02
+#define BatchFCB (CCPaddr + 0x5E) // Position of the $$$.SUB fcb on this CCP
+#define CCPaddr (BDOSjmppage-0x0800)
+#endif
+//
+#ifdef CCP_ZCPR3
+#define CCPname "CCP-ZCP3." STR(TPASIZE) "K"
+#define VersionCCP 0x03
+#define BatchFCB (CCPaddr + 0x5E) // Position of the $$$.SUB fcb on this CCP
+#define CCPaddr (BDOSjmppage-0x1000)
+#endif
+//
+#ifdef CCP_Z80
+#define CCPname "CCP-Z80." STR(TPASIZE) "K"
+#define VersionCCP 0x04
+#define BatchFCB (CCPaddr + 0x79E) // Position of the $$$.SUB fcb on this CCP
+#define CCPaddr (BDOSjmppage-0x0800)
+#endif
+//
+#ifndef CCPname
+#error No CCP defined
+#endif
+//
+#define STR_HELPER(x) #x
+#define STR(x) STR_HELPER(x)
+// #define CCPHEAD "\r\nRunCPM Version " VERSION " (CP/M " STR(TPASIZE) "K)\r\n"
+#define CCPHEAD "\r\nRunCPM [" TEXT_BOLD "v" VERSION TEXT_NORMAL "] => CCP:[" TEXT_BOLD CCPname TEXT_NORMAL "] TPA:" TEXT_BOLD STR(TPASIZE) "K" TEXT_NORMAL "\r\n"
+
+#define NOSLASH // Will translate '/' to '_' on filenames to prevent directory errors
+
+//#define HASLUA // Will enable Lua scripting (BDOS call 254)
+ // Should be passed externally per-platform with -DHASLUA
+
+//#define PROFILE // For measuring time taken to run a CP/M command
+ // This should be enabled only for debugging purposes when trying to improve emulation speed
+
+#define NOHIGHUSER // Prevents the creation of user folders above 'F' (15) by programs
+ // Original CP/M BDOS allows it, but I prefer to keep the folders clean
+
+/* Definition for CP/M 2.2 user number support */
+
+#define BATCHA // If this is defined, the $$$.SUB will be looked for on drive A:
+//#define BATCH0 // If this is defined, the $$$.SUB will be looked for on user area 0
+ // The default behavior of DRI's CP/M 2.2 was to have $$$.SUB created on the current drive/user while looking for it
+ // on drive A: current user, which made it complicated to run SUBMITs when not logged to drive A: user 0
+
+/* Some environment and type definitions */
+
+#ifndef TRUE
+#define FALSE 0
+#define TRUE 1
+#endif
+
+typedef signed char int8;
+typedef signed short int16;
+typedef signed int int32;
+typedef unsigned char uint8;
+typedef unsigned short uint16;
+typedef unsigned int uint32;
+
+#define LOW_DIGIT(x) ((x) & 0xf)
+#define HIGH_DIGIT(x) (((x) >> 4) & 0xf)
+#define LOW_REGISTER(x) ((x) & 0xff)
+#define HIGH_REGISTER(x) (((x) >> 8) & 0xff)
+
+#define SET_LOW_REGISTER(x, v) x = (((x) & 0xff00) | ((v) & 0xff))
+#define SET_HIGH_REGISTER(x, v) x = (((x) & 0xff) | (((v) & 0xff) << 8))
+
+#define WORD16(x) ((x) & 0xffff)
+
+/* CP/M Page 0 definitions */
+#define IOByte 0x03
+#define DSKByte 0x04
+
+/* CP/M disk definitions */
+#define BlkSZ 128 // CP/M block size
+#define BlkEX 128 // Number of blocks on an extension
+#define ExtSZ (BlkSZ * BlkEX)
+#define BlkS2 4096 // Number of blocks on a S2 (module)
+#define MaxEX 31 // Maximum value the EX field can take
+#define MaxS2 15 // Maximum value the S2 (modules) field can take - Can be set to 63 to emulate CP/M Plus
+#define MaxCR 128 // Maximum value the CR field can take
+#define MaxRC 128 // Maximum value the RC field can take
+
+/* CP/M memory definitions */
+#define TPASIZE 64 // Can be 60 for CP/M 2.2 compatibility or more, up to 64 for extra memory
+ // Values other than 60 or 64 would require rebuilding the CCP
+ // For TPASIZE<60 CCP ORG = (SIZEK * 1024) - 0x0C00
+
+#define BANKS 1 // Number of memory banks available
+static uint8 curBank = 1; // Number of the current RAM bank in use (1-x, not 0-x)
+static uint8 isXmove = FALSE; // Used by BIOS
+static uint8 srcBank = 1; // Source bank for memory MOVE
+static uint8 dstBank = 1; // Destination bank for memory MOVE
+static uint8 ioBank = 1; // Destination bank for sector IO
+
+#define PAGESIZE 64 * 1024 // RAM(plus ROM) needs to be 64K to avoid compatibility issues
+#define MEMSIZE PAGESIZE * BANKS // Total RAM size
+
+#if BANKS==1
+#define RAM_FAST // If this is defined, all RAM function calls become direct access (see below)
+ // This saves about 2K on the Arduino code and should bring speed improvements
+#endif
+
+#ifdef RAM_FAST // Makes all function calls to memory access into direct RAM access (less calls / less code)
+ static uint8 RAM[MEMSIZE];
+ #define _RamSysAddr(a) &RAM[a]
+ #define _RamRead(a) RAM[a]
+ #define _RamRead16(a) ((RAM[((a) & 0xffff) + 1] << 8) | RAM[(a) & 0xffff])
+ #define _RamWrite(a, v) RAM[a] = v
+ #define _RamWrite16(a, v) RAM[a] = (v) & 0xff; RAM[(a) + 1] = (v) >> 8
+#endif
+
+// Size of the allocated pages (Minimum size = 1 page = 256 bytes)
+
+// BIOS Pages (512 bytes from the top of memory)
+#define BIOSjmppage (PAGESIZE - 512)
+#define BIOSpage (BIOSjmppage + 256)
+
+// BDOS Pages (depends on TPASIZE for external CCPs)
+#if defined CCP_INTERNAL
+ #define BDOSjmppage (BIOSjmppage - 256)
+ #define BDOSpage (BDOSjmppage + 16)
+#else
+ #define BDOSjmppage (TPASIZE * 1024) - 1024
+ #define BDOSpage (BDOSjmppage + 256)
+#endif
+
+#define DPBaddr (BIOSpage + 128) // Address of the Disk Parameter Block (Hardcoded in BIOS)
+#define DPHaddr (DPBaddr + 15) // Address of the Disk Parameter Header
+
+#define SCBaddr (BDOSpage + 3) // Address of the System Control Block
+#define tmpFCB (BDOSpage + 16) // Address of the temporary FCB
+
+/* Definition of global variables */
+static uint8 filename[17]; // Current filename in host filesystem format
+static uint8 newname[17]; // New filename in host filesystem format
+static uint8 fcbname[13]; // Current filename in CP/M format
+static uint8 pattern[13]; // File matching pattern in CP/M format
+static uint16 dmaAddr = 0x0080; // Current dmaAddr
+static uint8 oDrive = 0; // Old selected drive
+static uint8 cDrive = 0; // Currently selected drive
+static uint8 userCode = 0; // Current user code
+static uint16 roVector = 0;
+static uint16 loginVector = 0;
+static uint8 allUsers = FALSE; // true when dr is '?' in BDOS search first
+static uint8 allExtents = FALSE; // true when ex is '?' in BDOS search first
+static uint8 currFindUser = 0; // user number of current directory in BDOS search first on all user numbers
+static uint8 blockShift; // disk allocation block shift
+static uint8 blockMask; // disk allocation block mask
+static uint8 extentMask; // disk extent mask
+static uint16 firstBlockAfterDir; // first allocation block after directory
+static uint16 numAllocBlocks; // # of allocation blocks on disk
+static uint8 extentsPerDirEntry; // # of logical (16K) extents in a directory entry
+#define logicalExtentBytes (16*1024UL)
+static uint16 physicalExtentBytes;// # bytes described by 1 directory entry
+
+#define tohex(x) ((x) < 10 ? (x) + 48 : (x) + 87)
+
+/* Definition of externs to prevent precedence compilation errors */
+#ifdef __cplusplus // If building on Arduino
+extern "C"
+{
+#endif
+
+#ifndef RAM_FAST
+ extern uint8* _RamSysAddr(uint16 address);
+ extern void _RamWrite(uint16 address, uint8 value);
+#endif
+
+ extern void _Bdos(void);
+ extern void _Bios(void);
+
+ extern void _HostnameToFCB(uint16 fcbaddr, uint8* filename);
+ extern void _HostnameToFCBname(uint8* from, uint8* to);
+ extern void _mockupDirEntry(void);
+ extern uint8 match(uint8* fcbname, uint8* pattern);
+
+ extern void _puts(const char* str);
+
+#ifdef __cplusplus // If building on Arduino
+}
+#endif
+
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/hardware/pico/feather_dvi.h b/runcpm-rp2040-dvi-usb/runcpm-pico/hardware/pico/feather_dvi.h
new file mode 100644
index 000000000..9d02f5255
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/hardware/pico/feather_dvi.h
@@ -0,0 +1,130 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+// SPDX-FileCopyrightText: 2023 Jeff Epler for Adafruit Industries
+//
+// SPDX-License-Identifier: MIT
+
+#include // SDFat - Adafruit Fork
+#include
+#include "../../console.h"
+#include "../../arduino_hooks.h"
+
+#ifndef USE_DISPLAY
+#define USE_DISPLAY (1)
+#endif
+
+#ifndef USE_MSC
+#define USE_MSC (0)
+#endif
+
+#if USE_DISPLAY
+DVItext1 display(DVI_RES_800x240p30, adafruit_feather_dvi_cfg);
+#endif
+#define SPI_CLOCK (20'000'000)
+#define SD_CS_PIN (10)
+#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK)
+DedicatedSpiCard blockdevice;
+FatFileSystem SD; // Filesystem object from SdFat
+
+// =========================================================================================
+// Define Board-Data
+// GP25 green onboard LED
+// =========================================================================================
+#define LED (13)
+#define LEDinv (false)
+#define board_pico
+#define board_analog_io
+#define board_digital_io
+
+// FUNCTIONS REQUIRED FOR USB MASS STORAGE ---------------------------------
+
+#if USE_MSC
+Adafruit_USBD_MSC usb_msc; // USB mass storage object
+static bool msc_changed = true; // Is set true on filesystem changes
+
+// Callback on READ10 command.
+int32_t msc_read_cb(uint32_t lba, void *buffer, uint32_t bufsize) {
+ return blockdevice.readBlocks(lba, (uint8_t *)buffer, bufsize / 512) ? bufsize : -1;
+}
+
+// Callback on WRITE10 command.
+int32_t msc_write_cb(uint32_t lba, uint8_t *buffer, uint32_t bufsize) {
+ digitalWrite(LED_BUILTIN, HIGH);
+ return blockdevice.writeBlocks(lba, buffer, bufsize / 512) ? bufsize : -1;
+}
+
+// Callback on WRITE10 completion.
+void msc_flush_cb(void) {
+ blockdevice.syncBlocks(); // Sync with blockdevice
+ SD.cacheClear(); // Clear filesystem cache to force refresh
+ digitalWrite(LED_BUILTIN, LOW);
+ msc_changed = true;
+}
+#endif
+
+#if USE_DISPLAY
+uint16_t underCursor = ' ';
+
+void putch_display(uint8_t ch) {
+ auto x = display.getCursorX();
+ auto y = display.getCursorY();
+ display.drawPixel(x, y, underCursor);
+ if(ch == 8) {
+ if(x > 0) {
+ display.setCursor(--x, y);
+ display.drawPixel(x, y, ' ');
+ }
+ } else {
+ display.write(ch);
+ }
+ x = display.getCursorX();
+ y = display.getCursorY();
+ underCursor = display.getPixel(x, y);
+ display.drawPixel(x, y, 0xDB);
+}
+#endif
+
+uint8_t getch_serial1(void) {
+ while(true) {
+ int r = Serial1.read();
+ if(r != -1) {
+ return r;
+ }
+ }
+}
+
+bool kbhit_serial1(void) {
+ return Serial1.available();
+}
+
+bool port_init_early() {
+#if USE_DISPLAY
+ vreg_set_voltage(VREG_VOLTAGE_1_20);
+ delay(10);
+ if (!display.begin()) { return false; }
+ _putch_hook = putch_display;
+#endif
+ _getch_hook = getch_serial1;
+ _kbhit_hook = kbhit_serial1;
+ // USB mass storage / filesystem setup (do BEFORE Serial init)
+ if (!blockdevice.begin(SD_CONFIG)) { _puts("Failed to initialize SD card"); return false; }
+#if USE_MSC
+ // Set disk vendor id, product id and revision
+ usb_msc.setID("Adafruit", "Internal Flash", "1.0");
+ // Set disk size, block size is 512 regardless of blockdevice page size
+ usb_msc.setCapacity(blockdevice.sectorCount(), 512);
+ usb_msc.setReadWriteCallback(msc_read_cb, msc_write_cb, msc_flush_cb);
+ usb_msc.setUnitReady(true); // MSC is ready for read/write
+ if (!usb_msc.begin()) {
+ _puts("Failed to initialize USB MSC"); return false;
+ }
+#endif
+ return true;
+}
+
+bool port_flash_begin() {
+ if (!SD.begin(&blockdevice, true, 1)) { // Start filesystem on the blockdevice
+ _puts("!SD.begin()"); return false;
+ }
+ return true;
+}
+
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/host.h b/runcpm-rp2040-dvi-usb/runcpm-pico/host.h
new file mode 100644
index 000000000..024f98e14
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/host.h
@@ -0,0 +1,12 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef HOST_H
+#define HOST_H
+
+uint8 hostbdos(uint16 dmaaddr) {
+ return(0x00);
+}
+
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/main.c b/runcpm-rp2040-dvi-usb/runcpm-pico/main.c
new file mode 100644
index 000000000..683ad7243
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/main.c
@@ -0,0 +1,115 @@
+// Copyright (c) 2016 - Marcelo Dantas
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+// Only build this code if not on Arduino
+#ifndef ARDUINO
+
+/* globals.h must be the first file included - it defines the bare essentials */
+#include "globals.h"
+
+/* Any system specific includes should go here - this will define system functions used by the abstraction */
+
+/* all the RunCPM includes must go after the system specific includes */
+
+/*
+abstraction.h - Adds all system dependent calls and definitions needed by RunCPM
+This should be the only file modified for portability. Any other file
+shoud be kept the same.
+*/
+
+#ifdef _WIN32
+#include "abstraction_vstudio.h"
+#else
+#include "abstraction_posix.h"
+#endif
+
+// AUX: device configuration
+#ifdef USE_PUN
+FILE* pun_dev;
+int pun_open = FALSE;
+#endif
+
+// PRT: device configuration
+#ifdef USE_LST
+FILE* lst_dev;
+int lst_open = FALSE;
+#endif
+
+#include "ram.h" // ram.h - Implements the RAM
+#include "console.h" // console.h - Defines all the console abstraction functions
+#include "cpu.h" // cpu.h - Implements the emulated CPU
+#include "disk.h" // disk.h - Defines all the disk access abstraction functions
+#include "host.h" // host.h - Custom host-specific BDOS call
+#include "cpm.h" // cpm.h - Defines the CPM structures and calls
+#ifdef CCP_INTERNAL
+#include "ccp.h" // ccp.h - Defines a simple internal CCP
+#endif
+
+int main(int argc, char* argv[]) {
+
+#ifdef DEBUGLOG
+ _sys_deletefile((uint8*)LogName);
+#endif
+
+ _host_init(argc, &argv[0]);
+ _console_init();
+ _clrscr();
+ _puts(" CP/M Emulator v" VERSION " by Marcelo Dantas\r\n");
+ _puts(" Built " __DATE__ " - " __TIME__ "\r\n");
+#ifdef HASLUA
+ _puts(" with Lua scripting support\r\n");
+#endif
+ _puts("-----------------------------------------\r\n");
+ _puts("BIOS at 0x");
+ _puthex16(BIOSjmppage);
+ _puts(" - ");
+ _puts("BDOS at 0x");
+ _puthex16(BDOSjmppage);
+ _puts("\r\n");
+ _puts("CCP " CCPname " at 0x");
+ _puthex16(CCPaddr);
+ _puts("\r\n");
+#if BANKS > 1
+ _puts("Banked Memory: ");
+ _puthex8(BANKS);
+ _puts(" banks\r\n");
+#endif
+
+ while (TRUE) {
+ _puts(CCPHEAD);
+ _PatchCPM(); // Patches the CP/M entry points and other things in
+ Status = 0;
+#ifdef CCP_INTERNAL
+ _ccp();
+#else
+ if (!_sys_exists((uint8*)CCPname)) {
+ _puts("Unable to load CP/M CCP.\r\nCPU halted.\r\n");
+ break;
+ }
+ _RamLoad((uint8*)CCPname, CCPaddr); // Loads the CCP binary file into memory
+ Z80reset(); // Resets the Z80 CPU
+ SET_LOW_REGISTER(BC, _RamRead(DSKByte)); // Sets C to the current drive/user
+ PC = CCPaddr; // Sets CP/M application jump point
+ Z80run(); // Starts simulation
+#endif
+ if (Status == 1) // This is set by a call to BIOS 0 - ends CP/M
+ break;
+#ifdef USE_PUN
+ if (pun_dev)
+ _sys_fflush(pun_dev);
+#endif
+#ifdef USE_LST
+ if (lst_dev)
+ _sys_fflush(lst_dev);
+#endif
+ }
+
+ _puts("\r\n");
+ _console_reset();
+
+ return(0);
+}
+
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/ram.h b/runcpm-rp2040-dvi-usb/runcpm-pico/ram.h
new file mode 100644
index 000000000..3c7604bd7
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/ram.h
@@ -0,0 +1,52 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+#ifndef RAM_H
+#define RAM_H
+
+/* see main.c for definition */
+
+#ifndef RAM_FAST
+static uint8 RAM[MEMSIZE]; // Definition of the emulated RAM
+
+uint8* _RamSysAddr(uint16 address) {
+ if (address < CCPaddr) {
+ return(&RAM[address * curBank]);
+ } else {
+ return(&RAM[address]);
+ }
+}
+
+uint8 _RamRead(uint16 address) {
+ if (address < CCPaddr) {
+ return(RAM[address * curBank]);
+ } else {
+ return(RAM[address]);
+ }
+}
+
+uint16 _RamRead16(uint16 address) {
+ if (address < CCPaddr) {
+ return(RAM[address * curBank] + (RAM[(address * curBank) + 1] << 8));
+ } else {
+ return(RAM[address] + (RAM[address + 1] << 8));
+ }
+}
+
+void _RamWrite(uint16 address, uint8 value) {
+ if (address < CCPaddr) {
+ RAM[address * curBank] = value;
+ } else {
+ RAM[address] = value;
+ }
+}
+
+void _RamWrite16(uint16 address, uint16 value) {
+ // Z80 is a "little indian" (8 bit era joke)
+ _RamWrite(address, value & 0xff);
+ _RamWrite(address + 1, (value >> 8) & 0xff);
+}
+#endif
+
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/resource.h b/runcpm-rp2040-dvi-usb/runcpm-pico/resource.h
new file mode 100644
index 000000000..018f0cef8
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/resource.h
@@ -0,0 +1,20 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by RunCPM.rc
+//
+#define IDI_ICON1 101
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/runcpm-rp2040-dvi-usb/runcpm-pico/runcpm-pico.ino b/runcpm-rp2040-dvi-usb/runcpm-pico/runcpm-pico.ino
new file mode 100644
index 000000000..a0e9fcb3f
--- /dev/null
+++ b/runcpm-rp2040-dvi-usb/runcpm-pico/runcpm-pico.ino
@@ -0,0 +1,226 @@
+// SPDX-FileCopyrightText: 2023 Mockba the Borg
+//
+// SPDX-License-Identifier: MIT
+
+// only AVR and ARM CPU
+// #include
+
+// =========================================================================================
+// Guido Lehwalder's Code-Revision-Number
+// =========================================================================================
+#define GL_REV "GL20230303.0"
+
+#include
+
+#include // One SD library to rule them all - Greinman SdFat from Library Manager
+#include
+
+#ifndef USE_VT100
+#define USE_VT100 (0)
+#endif
+
+#if USE_VT100
+#define TEXT_BOLD "\033[1m"
+#define TEXT_NORMAL "\033[0m"
+#else
+#define TEXT_BOLD ""
+#define TEXT_NORMAL ""
+#endif
+
+#include "globals.h"
+
+
+// =========================================================================================
+// Board definitions go into the "hardware" folder, if you use a board different than the
+// Arduino DUE, choose/change a file from there and reference that file here
+// =========================================================================================
+
+// Raspberry Pi Pico - normal (LED = GPIO25)
+#include "hardware/pico/feather_dvi.h"
+
+#ifndef BOARD_TEXT
+#define BOARD_TEXT USB_MANUFACTURER " " USB_PRODUCT
+#endif
+
+#include "abstraction_arduino.h"
+// Raspberry Pi Pico W(iFi) (LED = GPIO32)
+// #include "hardware/pico/pico_w_sd_spi.h"
+
+// =========================================================================================
+// Delays for LED blinking
+// =========================================================================================
+#define sDELAY 100
+#define DELAY 1200
+
+
+// =========================================================================================
+// Serial port speed
+// =========================================================================================
+#define SERIALSPD 115200
+
+// =========================================================================================
+// PUN: device configuration
+// =========================================================================================
+#ifdef USE_PUN
+File32 pun_dev;
+int pun_open = FALSE;
+#endif
+
+// =========================================================================================
+// LST: device configuration
+// =========================================================================================
+#ifdef USE_LST
+File32 lst_dev;
+int lst_open = FALSE;
+#endif
+
+#include "ram.h"
+#include "console.h"
+#include "cpu.h"
+#include "disk.h"
+#include "host.h"
+#include "cpm.h"
+#ifdef CCP_INTERNAL
+#include "ccp.h"
+#endif
+
+void setup(void) {
+ pinMode(LED, OUTPUT);
+ digitalWrite(LED, LOW ^ LEDinv);
+
+
+ // =========================================================================================
+ // Serial Port Definition
+ // =========================================================================================
+ // Serial =USB / Serial1 =UART0/COM1 / Serial2 =UART1/COM2
+
+ Serial1.setRX(1); // Pin 2
+ Serial1.setTX(0); // Pin 1
+ Serial1.begin(SERIALSPD);
+
+ Serial2.setRX(5); // Pin 7
+ Serial2.setTX(4); // Pin 6
+ Serial2.begin(SERIALSPD);
+
+ // or
+
+ // Serial1.setRX(17); // Pin 22
+ // Serial1.setTX(16); // Pin 21
+
+ // Serial2.setRX(21); // Pin 27
+ // Serial2.setTX(20); // Pin 26
+ // =========================================================================================
+
+ if (!port_init_early()) {
+ return;
+ }
+
+#if defined(WAIT_SERIAL)
+ // _clrscr();
+ // _puts("Opening serial-port...\r\n");
+ Serial.begin(SERIALSPD);
+ while (!Serial) { // Wait until serial is connected
+ digitalWrite(LED, HIGH ^ LEDinv);
+ delay(sDELAY);
+ digitalWrite(LED, LOW ^ LEDinv);
+ delay(DELAY);
+ }
+#endif
+
+#ifdef DEBUGLOG
+ _sys_deletefile((uint8 *)LogName);
+#endif
+
+
+ // =========================================================================================
+ // Printing the Startup-Messages
+ // =========================================================================================
+
+ _clrscr();
+
+ // if (bootup_press == 1)
+ // { _puts("Recognized " TEXT_BOLD "#" TEXT_NORMAL " key as pressed! :)\r\n\r\n");
+ // }
+
+ _puts("CP/M Emulator " TEXT_BOLD "v" VERSION "" TEXT_NORMAL " by " TEXT_BOLD "Marcelo Dantas" TEXT_NORMAL "\r\n");
+ _puts("----------------------------------------------\r\n");
+ _puts(" running on [" TEXT_BOLD BOARD_TEXT TEXT_NORMAL "]\r\n");
+ _puts("----------------------------------------------\r\n");
+
+ _puts("BIOS at [" TEXT_BOLD "0x");
+ _puthex16(BIOSjmppage);
+ // _puts(" - ");
+ _puts("" TEXT_NORMAL "]\r\n");
+
+ _puts("BDOS at [" TEXT_BOLD "0x");
+ _puthex16(BDOSjmppage);
+ _puts("" TEXT_NORMAL "]\r\n");
+
+ _puts("CCP " CCPname " at [" TEXT_BOLD "0x");
+ _puthex16(CCPaddr);
+ _puts("" TEXT_NORMAL "]\r\n");
+
+#if BANKS > 1
+ _puts("Banked Memory [" TEXT_BOLD "");
+ _puthex8(BANKS);
+ _puts("" TEXT_NORMAL "]banks\r\n");
+#endif
+
+ // Serial.printf("Free Memory [" TEXT_BOLD "%d bytes" TEXT_NORMAL "]\r\n", freeMemory());
+
+ _puts("CPU-Clock [" TEXT_BOLD);
+ _putdec((clock_get_hz( clk_sys ) + 500'000) / 1'000'000);
+ _puts(TEXT_NORMAL "] MHz\r\n");
+
+ _puts("Init Storage [ " TEXT_BOLD "");
+ if (port_flash_begin()) {
+ _puts("OK " TEXT_NORMAL "]\r\n");
+ _puts("----------------------------------------------");
+
+ if (VersionCCP >= 0x10 || SD.exists(CCPname)) {
+ while (true) {
+ _puts(CCPHEAD);
+ _PatchCPM();
+ Status = 0;
+#ifndef CCP_INTERNAL
+ if (!_RamLoad((char *)CCPname, CCPaddr)) {
+ _puts("Unable to load the CCP.\r\nCPU halted.\r\n");
+ break;
+ }
+ Z80reset();
+ SET_LOW_REGISTER(BC, _RamRead(DSKByte));
+ PC = CCPaddr;
+ Z80run();
+#else
+ _ccp();
+#endif
+ if (Status == 1)
+ break;
+#ifdef USE_PUN
+ if (pun_dev)
+ _sys_fflush(pun_dev);
+#endif
+#ifdef USE_LST
+ if (lst_dev)
+ _sys_fflush(lst_dev);
+#endif
+ }
+ } else {
+ _puts("Unable to load CP/M CCP.\r\nCPU halted.\r\n");
+ }
+ } else {
+ _puts("ERR " TEXT_NORMAL "]\r\nUnable to initialize SD card.\r\nCPU halted.\r\n");
+ }
+ }
+
+ // if loop is reached, blink LED forever to signal error
+ void loop(void) {
+ digitalWrite(LED, HIGH^LEDinv);
+ delay(DELAY);
+ digitalWrite(LED, LOW^LEDinv);
+ delay(DELAY);
+ digitalWrite(LED, HIGH^LEDinv);
+ delay(DELAY);
+ digitalWrite(LED, LOW^LEDinv);
+ delay(DELAY * 4);
+ }
diff --git a/ulab_Crunch_Numbers_Fast/cluebarometer/code.py b/ulab_Crunch_Numbers_Fast/cluebarometer/code.py
index 5d002b6b1..0b3904ee5 100644
--- a/ulab_Crunch_Numbers_Fast/cluebarometer/code.py
+++ b/ulab_Crunch_Numbers_Fast/cluebarometer/code.py
@@ -11,7 +11,7 @@
# Blank the screen. Scrolling text causes unwanted delays.
d = displayio.Group()
-board.DISPLAY.show(d)
+board.DISPLAY.root_group = d
# Sampling rate: 16Hz
# Cutoff frequency: 0.16Hz
@@ -136,7 +136,8 @@ def sleep_deadline(deadline_ns):
# Initialize our sensor
-i2c = board.I2C()
+i2c = board.I2C() # uses board.SCL and board.SDA
+# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
sensor = adafruit_bmp280.Adafruit_BMP280_I2C(i2c)
sensor.standby_period = adafruit_bmp280.STANDBY_TC_1000
# Disable in-sensor filtering, because we want to show how it's done in
diff --git a/ulab_Crunch_Numbers_Fast/cluepulse/code.py b/ulab_Crunch_Numbers_Fast/cluepulse/code.py
index cb880cc46..ca662dcd7 100644
--- a/ulab_Crunch_Numbers_Fast/cluepulse/code.py
+++ b/ulab_Crunch_Numbers_Fast/cluepulse/code.py
@@ -12,7 +12,7 @@
# Blank the screen. Scrolling text causes unwanted delays.
import displayio
d = displayio.Group()
-board.DISPLAY.show(d)
+board.DISPLAY.root_group = d
# Filter computed at https://fiiir.com/
# Sampling rate: 8Hz
diff --git a/ulab_Crunch_Numbers_Fast/waterfall/code.py b/ulab_Crunch_Numbers_Fast/waterfall/code.py
index 40d582967..2f85cb467 100644
--- a/ulab_Crunch_Numbers_Fast/waterfall/code.py
+++ b/ulab_Crunch_Numbers_Fast/waterfall/code.py
@@ -69,7 +69,7 @@ def show(self, data):
group.append(graph)
# Add the Group to the Display
-display.show(group)
+display.root_group = group
# instantiate board mic
mic = audiobusio.PDMIn(board.MICROPHONE_CLOCK, board.MICROPHONE_DATA,