Merge branch 'main' into cpal

This commit is contained in:
Blaz Kristan 2023-04-30 17:52:28 +02:00
commit f38851b7c6
29 changed files with 3344 additions and 2805 deletions

View File

@ -8,21 +8,23 @@ jobs:
name: Gather Environments
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Cache pip
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- uses: actions/setup-python@v2
- uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install PlatformIO
run: pip install -r requirements.txt
- name: Get default environments
id: envs
run: |
echo "::set-output name=environments::$(pio project config --json-output | jq -cr '.[0][1][0][1]')"
echo "environments=$(pio project config --json-output | jq -cr '.[0][1][0][1]')" >> $GITHUB_OUTPUT
outputs:
environments: ${{ steps.envs.outputs.environments }}
@ -32,24 +34,27 @@ jobs:
runs-on: ubuntu-latest
needs: get_default_envs
strategy:
fail-fast: false
matrix:
environment: ${{ fromJSON(needs.get_default_envs.outputs.environments) }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Cache pip
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Cache PlatformIO
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: ~/.platformio
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
- name: Set up Python
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install PlatformIO
run: pip install -r requirements.txt
- name: Build firmware

View File

@ -9,8 +9,11 @@
# (use `platformio_override.ini` when building for your own board; see `platformio_override.ini.sample` for an example)
# ------------------------------------------------------------------------------
# Release / CI binaries
default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, esp32s2_saola, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB
# CI binaries
default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth # ESP32 variant builds are temporarily excluded from CI due to toolchain issues on the GitHub Actions Linux environment
# Release binaries
; default_envs = nodemcuv2, esp8266_2m, esp01_1m_full, esp32dev, esp32_eth, lolin_s2_mini, esp32c3dev, esp32s3dev_8MB
# Build everything
; default_envs = esp32dev, esp8285_4CH_MagicHome, codm-controller-0.6-rev2, codm-controller-0.6, esp32s2_saola, d1_mini_5CH_Shojo_PCB, d1_mini, sp501e, nodemcuv2, esp32_eth, anavi_miracle_controller, esp07, esp01_1m_full, m5atom, h803wf, d1_mini_ota, heltec_wifi_kit_8, esp8285_H801, d1_mini_debug, wemos_shield_esp32, elekstube_ips
@ -109,6 +112,7 @@ debug_flags = -D DEBUG=1 -D WLED_DEBUG -DDEBUG_ESP_WIFI -DDEBUG_ESP_HTTP_CLIENT
# This reduces the OTA size with ~45KB, so it's especially useful on low memory boards (512k/1m).
# ------------------------------------------------------------------------------
build_flags =
-Wno-attributes
-DMQTT_MAX_PACKET_SIZE=1024
-DSECURE_CLIENT=SECURE_CLIENT_BEARSSL
-DBEARSSL_SSL_BASIC
@ -169,6 +173,7 @@ lib_compat_mode = strict
lib_deps =
fastled/FastLED @ 3.5.0
IRremoteESP8266 @ 2.8.2
makuna/NeoPixelBus @ 2.7.5
https://github.com/Aircoookie/ESPAsyncWebServer.git @ ~2.0.7
#For use of the TTGO T-Display ESP32 Module with integrated TFT display uncomment the following line
#TFT_eSPI
@ -209,11 +214,10 @@ build_flags =
-DMIMETYPE_MINIMAL
lib_deps =
${env.lib_deps}
#https://github.com/lorol/LITTLEFS.git
ESPAsyncTCP @ 1.2.2
ESPAsyncUDP
makuna/NeoPixelBus @ 2.7.3
${env.lib_deps}
[esp32]
#platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.3/platform-espressif32-2.0.2.3.zip
@ -232,10 +236,9 @@ build_flags = -g
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
lib_deps =
${env.lib_deps}
https://github.com/lorol/LITTLEFS.git
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32_idf_V4]
@ -254,9 +257,8 @@ build_flags = -g
-DARDUINO_USB_CDC_ON_BOOT=0 ;; this flag is mandatory for "classic ESP32" when building with arduino-esp32 >=2.0.3
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32s2]
;; generic definitions for all ESP32-S2 boards
@ -274,9 +276,8 @@ build_flags = -g
;; ARDUINO_USB_CDC_ON_BOOT
lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32c3]
;; generic definitions for all ESP32-C3 boards
@ -293,9 +294,8 @@ build_flags = -g
;; ARDUINO_USB_CDC_ON_BOOT
lib_deps =
${env.lib_deps}
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
[esp32s3]
;; generic definitions for all ESP32-S3 boards
@ -313,10 +313,8 @@ build_flags = -g
;; ARDUINO_USB_MODE, ARDUINO_USB_CDC_ON_BOOT
lib_deps =
${env.lib_deps}
;; NeoPixelBus 2.7.1 is the first that has official support for ESP32-S3
makuna/NeoPixelBus @ 2.7.3
https://github.com/pbolduc/AsyncTCP.git @ 1.2.0
${env.lib_deps}
# ------------------------------------------------------------------------------
@ -575,6 +573,9 @@ build_unflags = ${common.build_unflags} -DARDUINO_USB_CDC_ON_BOOT=1
build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=LolinS2
-DBOARD_HAS_PSRAM
-DARDUINO_USB_CDC_ON_BOOT=0
-DARDUINO_USB_MSC_ON_BOOT=0
-DARDUINO_USB_DFU_ON_BOOT=0
-DLOLIN_WIFI_FIX ; seems to work much better with this
-D WLED_USE_PSRAM
-D WLED_WATCHDOG_TIMEOUT=0
-D CONFIG_ASYNC_TCP_USE_WDT=0

View File

@ -4,63 +4,59 @@
#
# pip-compile
#
aiofiles==0.8.0
aiofiles==22.1.0
# via platformio
ajsonrpc==1.2.0
# via platformio
anyio==3.6.1
anyio==3.6.2
# via starlette
async-timeout==4.0.2
# via zeroconf
bottle==0.12.23
bottle==0.12.25
# via platformio
certifi==2022.12.7
# via requests
charset-normalizer==2.1.1
charset-normalizer==3.1.0
# via requests
click==8.1.3
# via
# platformio
# uvicorn
colorama==0.4.5
# via platformio
h11==0.13.0
colorama==0.4.6
# via
# click
# platformio
h11==0.14.0
# via
# uvicorn
# wsproto
idna==3.3
idna==3.4
# via
# anyio
# requests
ifaddr==0.2.0
# via zeroconf
marshmallow==3.17.0
marshmallow==3.19.0
# via platformio
packaging==21.3
packaging==23.1
# via marshmallow
platformio==6.1.4
platformio==6.1.6
# via -r requirements.in
pyelftools==0.29
# via platformio
pyparsing==3.0.9
# via packaging
pyserial==3.5
# via platformio
requests==2.28.1
requests==2.28.2
# via platformio
semantic-version==2.10.0
# via platformio
sniffio==1.2.0
sniffio==1.3.0
# via anyio
starlette==0.20.4
starlette==0.23.1
# via platformio
tabulate==0.8.10
tabulate==0.9.0
# via platformio
urllib3==1.26.11
typing-extensions==4.5.0
# via starlette
urllib3==1.26.15
# via requests
uvicorn==0.18.2
uvicorn==0.20.0
# via platformio
wsproto==1.1.0
# via platformio
zeroconf==0.39.0
wsproto==1.2.0
# via platformio

View File

@ -40,39 +40,39 @@ class WordClockUsermod : public Usermod
// Normal wiring
const int maskMinutes[14][maskSizeMinutes] =
{
{107, 108, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // :00
{ 7, 8, 9, 10, 40, 41, 42, 43, -1, -1, -1, -1}, // :05 fünf nach
{ 11, 12, 13, 14, 40, 41, 42, 43, -1, -1, -1, -1}, // :10 zehn nach
{ 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // :15 viertel
{ 15, 16, 17, 18, 19, 20, 21, 40, 41, 42, 43, -1}, // :20 zwanzig nach
{ 7, 8, 9, 10, 33, 34, 35, 44, 45, 46, 47, -1}, // :25 fünf vor halb
{ 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // :30 halb
{ 7, 8, 9, 10, 40, 41, 42, 43, 44, 45, 46, 47}, // :35 fünf nach halb
{ 15, 16, 17, 18, 19, 20, 21, 33, 34, 35, -1, -1}, // :40 zwanzig vor
{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // :45 dreiviertel
{ 11, 12, 13, 14, 33, 34, 35, -1, -1, -1, -1, -1}, // :50 zehn vor
{ 7, 8, 9, 10, 33, 34, 35, -1, -1, -1, -1, -1}, // :55 fünf vor
{ 26, 27, 28, 29, 30, 31, 32, 40, 41, 42, 43, -1}, // :15 alternative viertel nach
{ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1} // :45 alternative viertel vor
{107, 108, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 0 - 00
{ 7, 8, 9, 10, 40, 41, 42, 43, -1, -1, -1, -1}, // 1 - 05 fünf nach
{ 11, 12, 13, 14, 40, 41, 42, 43, -1, -1, -1, -1}, // 2 - 10 zehn nach
{ 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // 3 - 15 viertel
{ 15, 16, 17, 18, 19, 20, 21, 40, 41, 42, 43, -1}, // 4 - 20 zwanzig nach
{ 7, 8, 9, 10, 33, 34, 35, 44, 45, 46, 47, -1}, // 5 - 25 fünf vor halb
{ 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - 30 halb
{ 7, 8, 9, 10, 40, 41, 42, 43, 44, 45, 46, 47}, // 7 - 35 fünf nach halb
{ 15, 16, 17, 18, 19, 20, 21, 33, 34, 35, -1, -1}, // 8 - 40 zwanzig vor
{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // 9 - 45 dreiviertel
{ 11, 12, 13, 14, 33, 34, 35, -1, -1, -1, -1, -1}, // 10 - 50 zehn vor
{ 7, 8, 9, 10, 33, 34, 35, -1, -1, -1, -1, -1}, // 11 - 55 fünf vor
{ 26, 27, 28, 29, 30, 31, 32, 40, 41, 42, 43, -1}, // 12 - 15 alternative viertel nach
{ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1} // 13 - 45 alternative viertel vor
};
// Meander wiring
const int maskMinutesMea[14][maskSizeMinutesMea] =
{
{ 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // :00
{ 7, 8, 9, 10, 33, 34, 35, 36, -1, -1, -1, -1}, // :05 fünf nach
{ 18, 19, 20, 21, 33, 34, 35, 36, -1, -1, -1, -1}, // :10 zehn nach
{ 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // :15 viertel
{ 11, 12, 13, 14, 15, 16, 17, 33, 34, 35, 36, -1}, // :20 zwanzig nach
{ 7, 8, 9, 10, 41, 42, 43, 44, 45, 46, 47, -1}, // :25 fünf vor halb
{ 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // :30 halb
{ 7, 8, 9, 10, 33, 34, 35, 36, 44, 45, 46, 47}, // :35 fünf nach halb
{ 11, 12, 13, 14, 15, 16, 17, 41, 42, 43, -1, -1}, // :40 zwanzig vor
{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // :45 dreiviertel
{ 18, 19, 20, 21, 41, 42, 43, -1, -1, -1, -1, -1}, // :50 zehn vor
{ 7, 8, 9, 10, 41, 42, 43, -1, -1, -1, -1, -1}, // :55 fünf vor
{ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, -1}, // :15 alternative viertel nach
{ 26, 27, 28, 29, 30, 31, 32, 41, 42, 43, -1, -1} // :45 alternative viertel vor
{ 99, 100, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 0 - 00
{ 7, 8, 9, 10, 33, 34, 35, 36, -1, -1, -1, -1}, // 1 - 05 fünf nach
{ 18, 19, 20, 21, 33, 34, 35, 36, -1, -1, -1, -1}, // 2 - 10 zehn nach
{ 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, -1}, // 3 - 15 viertel
{ 11, 12, 13, 14, 15, 16, 17, 33, 34, 35, 36, -1}, // 4 - 20 zwanzig nach
{ 7, 8, 9, 10, 41, 42, 43, 44, 45, 46, 47, -1}, // 5 - 25 fünf vor halb
{ 44, 45, 46, 47, -1, -1, -1, -1, -1, -1, -1, -1}, // 6 - 30 halb
{ 7, 8, 9, 10, 33, 34, 35, 36, 44, 45, 46, 47}, // 7 - 35 fünf nach halb
{ 11, 12, 13, 14, 15, 16, 17, 41, 42, 43, -1, -1}, // 8 - 40 zwanzig vor
{ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, -1}, // 9 - 45 dreiviertel
{ 18, 19, 20, 21, 41, 42, 43, -1, -1, -1, -1, -1}, // 10 - 50 zehn vor
{ 7, 8, 9, 10, 41, 42, 43, -1, -1, -1, -1, -1}, // 11 - 55 fünf vor
{ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, -1}, // 12 - 15 alternative viertel nach
{ 26, 27, 28, 29, 30, 31, 32, 41, 42, 43, -1, -1} // 13 - 45 alternative viertel vor
};
@ -284,12 +284,13 @@ class WordClockUsermod : public Usermod
setHours(hours + 1, false);
break;
case 9:
// viertel vor bzw dreiviertel
// viertel vor
if (nord) {
setMinutes(9);
setMinutes(13);
}
// dreiviertel
else {
setMinutes(12);
setMinutes(9);
}
setHours(hours + 1, false);
break;
@ -422,12 +423,18 @@ class WordClockUsermod : public Usermod
*/
void addToConfig(JsonObject& root)
{
JsonObject top = root.createNestedObject("WordClockUsermod");
top["active"] = usermodActive;
top["displayItIs"] = displayItIs;
top["ledOffset"] = ledOffset;
top["Meander wiring?"] = meander;
top["Norddeutsch"] = nord;
JsonObject top = root.createNestedObject(F("WordClockUsermod"));
top[F("active")] = usermodActive;
top[F("displayItIs")] = displayItIs;
top[F("ledOffset")] = ledOffset;
top[F("Meander wiring?")] = meander;
top[F("Norddeutsch")] = nord;
}
void appendConfigData()
{
oappend(SET_F("addInfo('WordClockUsermod:ledOffset', 1, 'Number of LEDs before the letters');"));
oappend(SET_F("addInfo('WordClockUsermod:Norddeutsch', 1, 'Viertel vor instead of Dreiviertel');"));
}
/*
@ -450,15 +457,15 @@ class WordClockUsermod : public Usermod
// default settings values could be set here (or below using the 3-argument getJsonValue()) instead of in the class definition or constructor
// setting them inside readFromConfig() is slightly more robust, handling the rare but plausible use case of single value being missing after boot (e.g. if the cfg.json was manually edited and a value was removed)
JsonObject top = root["WordClockUsermod"];
JsonObject top = root[F("WordClockUsermod")];
bool configComplete = !top.isNull();
configComplete &= getJsonValue(top["active"], usermodActive);
configComplete &= getJsonValue(top["displayItIs"], displayItIs);
configComplete &= getJsonValue(top["ledOffset"], ledOffset);
configComplete &= getJsonValue(top["Meander wiring?"], meander);
configComplete &= getJsonValue(top["Norddeutsch"], nord);
configComplete &= getJsonValue(top[F("active")], usermodActive);
configComplete &= getJsonValue(top[F("displayItIs")], displayItIs);
configComplete &= getJsonValue(top[F("ledOffset")], ledOffset);
configComplete &= getJsonValue(top[F("Meander wiring?")], meander);
configComplete &= getJsonValue(top[F("Norddeutsch")], nord);
return configComplete;
}

View File

@ -1247,10 +1247,10 @@ uint16_t mode_rain() {
if (SEGENV.call && SEGENV.step > SPEED_FORMULA_L) {
SEGENV.step = 1;
if (strip.isMatrix) {
uint32_t ctemp[width];
for (int i = 0; i<width; i++) ctemp[i] = SEGMENT.getPixelColorXY(i, height-1);
SEGMENT.move(6,1); // move all pixels down
for (int i = 0; i<width; i++) SEGMENT.setPixelColorXY(i, 0, ctemp[i]); // wrap around
//uint32_t ctemp[width];
//for (int i = 0; i<width; i++) ctemp[i] = SEGMENT.getPixelColorXY(i, height-1);
SEGMENT.move(6, 1, true); // move all pixels down
//for (int i = 0; i<width; i++) SEGMENT.setPixelColorXY(i, 0, ctemp[i]); // wrap around
SEGENV.aux0 = (SEGENV.aux0 % width) + (SEGENV.aux0 / width + 1) * width;
SEGENV.aux1 = (SEGENV.aux1 % width) + (SEGENV.aux1 / width + 1) * width;
} else {
@ -1978,7 +1978,7 @@ uint16_t mode_fire_2012() {
if (!SEGENV.allocateData(strips * SEGLEN)) return mode_static(); //allocation failed
byte* heat = SEGENV.data;
const uint32_t it = strip.now >> 6; //div 64
const uint32_t it = strip.now >> 5; //div 32
struct virtualStrip {
static void runStrip(uint16_t stripNr, byte* heat, uint32_t it) {
@ -1987,28 +1987,24 @@ uint16_t mode_fire_2012() {
// Step 1. Cool down every cell a little
for (int i = 0; i < SEGLEN; i++) {
uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random(8);
uint8_t minTemp = 0;
if (i<ignition) {
minTemp = (ignition-i)/4 + 16; // and should not become black
}
uint8_t cool = (it != SEGENV.step) ? random8((((20 + SEGMENT.speed/3) * 16) / SEGLEN)+2) : random(4);
uint8_t minTemp = (i<ignition) ? (ignition-i)/4 + 16 : 0; // should not become black in ignition area
uint8_t temp = qsub8(heat[i], cool);
heat[i] = temp<minTemp ? minTemp : temp;
}
if (it != SEGENV.step)
{
if (it != SEGENV.step) {
// Step 2. Heat from each cell drifts 'up' and diffuses a little
for (int k = SEGLEN -1; k > 1; k--) {
heat[k] = (heat[k - 1] + (heat[k - 2]<<1) ) / 3; // heat[k-2] multiplied by 2
}
}
// Step 3. Randomly ignite new 'sparks' of heat near the bottom
if (random8() <= SEGMENT.intensity) {
uint8_t y = random8(ignition);
uint8_t boost = (32+SEGMENT.custom3*2) * (2*ignition-y) / (2*ignition);
heat[y] = qadd8(heat[y], random8(64+boost,128+boost));
// Step 3. Randomly ignite new 'sparks' of heat near the bottom
if (random8() <= SEGMENT.intensity) {
uint8_t y = random8(ignition);
uint8_t boost = (17+SEGMENT.custom3) * (ignition - y/2) / ignition; // integer math!
heat[y] = qadd8(heat[y], random8(96+2*boost,207+boost));
}
}
// Step 4. Map from heat cells to LED colors
@ -2028,7 +2024,7 @@ uint16_t mode_fire_2012() {
return FRAMETIME;
}
static const char _data_FX_MODE_FIRE_2012[] PROGMEM = "Fire 2012@Cooling,Spark rate,,,Boost;;!;1;sx=120,ix=64,m12=1"; // bars
static const char _data_FX_MODE_FIRE_2012[] PROGMEM = "Fire 2012@Cooling,Spark rate,,,Boost;;!;1;sx=64,ix=160,m12=1"; // bars
// ColorWavesWithPalettes by Mark Kriegsman: https://gist.github.com/kriegsman/8281905786e8b2632aeb
@ -2765,7 +2761,7 @@ uint16_t mode_spots()
{
return spots_base((255 - SEGMENT.speed) << 8);
}
static const char _data_FX_MODE_SPOTS[] PROGMEM = "Spots@,Width,,,,,Overlay;!,!;!";
static const char _data_FX_MODE_SPOTS[] PROGMEM = "Spots@Spread,Width,,,,,Overlay;!,!;!";
//Intensity slider sets number of "lights", LEDs per light fade in and out
@ -7333,7 +7329,7 @@ static const char _data_FX_MODE_2DAKEMI[] PROGMEM = "Akemi@Color speed,Dance;Hea
// Distortion waves - ldirko
// https://editor.soulmatelights.com/gallery/1089-distorsion-waves
// apated for WLD by @blazoncek
// adapted for WLED by @blazoncek
uint16_t mode_2Ddistortionwaves() {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up
@ -7382,7 +7378,116 @@ uint16_t mode_2Ddistortionwaves() {
return FRAMETIME;
}
static const char _data_FX_MODE_2DDISTORTIONWAVES[] PROGMEM = "Distortion Waves@!,Scale;;;2;";
static const char _data_FX_MODE_2DDISTORTIONWAVES[] PROGMEM = "Distortion Waves@!,Scale;;;2";
//Soap
//@Stepko
//Idea from https://www.youtube.com/watch?v=DiHBgITrZck&ab_channel=StefanPetrick
// adapted for WLED by @blazoncek
uint16_t mode_2Dsoap() {
if (!strip.isMatrix) return mode_static(); // not a 2D set-up
const uint16_t cols = SEGMENT.virtualWidth();
const uint16_t rows = SEGMENT.virtualHeight();
const size_t dataSize = SEGMENT.width() * SEGMENT.height() * sizeof(uint8_t); // prevent reallocation if mirrored or grouped
if (!SEGENV.allocateData(dataSize + sizeof(uint32_t)*3)) return mode_static(); //allocation failed
uint8_t *noise3d = reinterpret_cast<uint8_t*>(SEGENV.data);
uint32_t *noise32_x = reinterpret_cast<uint32_t*>(SEGENV.data + dataSize);
uint32_t *noise32_y = reinterpret_cast<uint32_t*>(SEGENV.data + dataSize + sizeof(uint32_t));
uint32_t *noise32_z = reinterpret_cast<uint32_t*>(SEGENV.data + dataSize + sizeof(uint32_t)*2);
uint32_t scale32_x = 160000U/cols;
uint32_t scale32_y = 160000U/rows;
// init
if (SEGENV.call == 0) {
SEGMENT.setUpLeds();
*noise32_x = random16();
*noise32_y = random16();
*noise32_z = random16();
for (int i = 0; i < cols; i++) {
int32_t ioffset = scale32_x * (i - cols / 2);
for (int j = 0; j < rows; j++) {
int32_t joffset = scale32_y * (j - rows / 2);
uint8_t data = inoise16(*noise32_x + ioffset, *noise32_y + joffset, *noise32_z) >> 8;
noise3d[XY(i,j)] = scale8(noise3d[XY(i,j)], SEGMENT.intensity) + scale8(data, 255 - SEGMENT.intensity);
SEGMENT.setPixelColorXY(i, j, ColorFromPalette(SEGPALETTE,~noise3d[XY(i,j)]*3));
}
}
}
uint32_t mov = MAX(cols,rows)*(SEGMENT.speed+1)/2;
*noise32_x += mov;
*noise32_y += mov;
*noise32_z += mov;
for (int i = 0; i < cols; i++) {
int32_t ioffset = scale32_x * (i - cols / 2);
for (int j = 0; j < rows; j++) {
int32_t joffset = scale32_y * (j - rows / 2);
uint8_t data = inoise16(*noise32_x + ioffset, *noise32_y + joffset, *noise32_z) >> 8;
noise3d[XY(i,j)] = scale8(noise3d[XY(i,j)], SEGMENT.intensity) + scale8(data, 256 - SEGMENT.intensity);
}
}
int zD;
int zF;
int amplitude;
int8_t shiftX = 0; //(SEGMENT.custom1 - 128) / 4;
int8_t shiftY = 0; //(SEGMENT.custom2 - 128) / 4;
amplitude = (cols >= 16) ? (cols-8)/8 : 1;
for (int y = 0; y < rows; y++) {
int amount = ((int)noise3d[XY(0,y)] - 128) * 2 * amplitude + 256*shiftX;
int delta = abs(amount) >> 8;
int fraction = abs(amount) & 255;
for (int x = 0; x < cols; x++) {
if (amount < 0) {
zD = x - delta;
zF = zD - 1;
} else {
zD = x + delta;
zF = zD + 1;
}
CRGB PixelA = CRGB::Black;
if ((zD >= 0) && (zD < cols)) PixelA = SEGMENT.getPixelColorXY(zD, y);
else PixelA = ColorFromPalette(SEGPALETTE, ~noise3d[XY(abs(zD),y)]*3);
CRGB PixelB = CRGB::Black;
if ((zF >= 0) && (zF < cols)) PixelB = SEGMENT.getPixelColorXY(zF, y);
else PixelB = ColorFromPalette(SEGPALETTE, ~noise3d[XY(abs(zF),y)]*3);
CRGB pix = (PixelA.nscale8(ease8InOutApprox(255 - fraction))) + (PixelB.nscale8(ease8InOutApprox(fraction)));
SEGMENT.setPixelColorXY(x, y, pix);
}
}
amplitude = (rows >= 16) ? (rows-8)/8 : 1;
for (int x = 0; x < cols; x++) {
int amount = ((int)noise3d[XY(x,0)] - 128) * 2 * amplitude + 256*shiftY;
int delta = abs(amount) >> 8;
int fraction = abs(amount) & 255;
for (int y = 0; y < rows; y++) {
if (amount < 0) {
zD = y - delta;
zF = zD - 1;
} else {
zD = y + delta;
zF = zD + 1;
}
CRGB PixelA = CRGB::Black;
if ((zD >= 0) && (zD < rows)) PixelA = SEGMENT.getPixelColorXY(x, zD);
else PixelA = ColorFromPalette(SEGPALETTE, ~noise3d[XY(x,abs(zD))]*3);
CRGB PixelB = CRGB::Black;
if ((zF >= 0) && (zF < rows)) PixelB = SEGMENT.getPixelColorXY(x, zF);
else PixelB = ColorFromPalette(SEGPALETTE, ~noise3d[XY(x,abs(zF))]*3);
CRGB pix = (PixelA.nscale8(ease8InOutApprox(255 - fraction))) + (PixelB.nscale8(ease8InOutApprox(fraction)));
SEGMENT.setPixelColorXY(x, y, pix);
}
}
return FRAMETIME;
}
static const char _data_FX_MODE_2DSOAP[] PROGMEM = "Soap@!,Smoothness;;!;2";
#endif // WLED_DISABLE_2D
@ -7617,6 +7722,7 @@ void WS2812FX::setupEffectData() {
addEffect(FX_MODE_2DSINDOTS, &mode_2DSindots, _data_FX_MODE_2DSINDOTS);
addEffect(FX_MODE_2DDNASPIRAL, &mode_2DDNASpiral, _data_FX_MODE_2DDNASPIRAL);
addEffect(FX_MODE_2DBLACKHOLE, &mode_2DBlackHole, _data_FX_MODE_2DBLACKHOLE);
addEffect(FX_MODE_2DSOAP, &mode_2Dsoap, _data_FX_MODE_2DSOAP);
addEffect(FX_MODE_2DAKEMI, &mode_2DAkemi, _data_FX_MODE_2DAKEMI); // audio
#endif // WLED_DISABLE_2D

View File

@ -254,7 +254,8 @@
#define FX_MODE_2DBLOBS 121 //gap fill
#define FX_MODE_2DSCROLLTEXT 122 //gap fill
#define FX_MODE_2DDRIFTROSE 123 //gap fill
#define FX_MODE_2DDISTORTIONWAVES 124
#define FX_MODE_2DDISTORTIONWAVES 124 //gap fill
#define FX_MODE_2DSOAP 125 //gap fill
// WLED-SR effects (SR compatible IDs !!!)
#define FX_MODE_PIXELS 128
@ -562,9 +563,9 @@ typedef struct Segment {
void fadeToBlackBy(uint8_t fadeBy);
void blendPixelColor(int n, uint32_t color, uint8_t blend);
void blendPixelColor(int n, CRGB c, uint8_t blend) { blendPixelColor(n, RGBW32(c.r,c.g,c.b,0), blend); }
void addPixelColor(int n, uint32_t color);
void addPixelColor(int n, byte r, byte g, byte b, byte w = 0) { addPixelColor(n, RGBW32(r,g,b,w)); } // automatically inline
void addPixelColor(int n, CRGB c) { addPixelColor(n, RGBW32(c.r,c.g,c.b,0)); } // automatically inline
void addPixelColor(int n, uint32_t color, bool fast = false);
void addPixelColor(int n, byte r, byte g, byte b, byte w = 0, bool fast = false) { addPixelColor(n, RGBW32(r,g,b,w), fast); } // automatically inline
void addPixelColor(int n, CRGB c, bool fast = false) { addPixelColor(n, RGBW32(c.r,c.g,c.b,0), fast); } // automatically inline
void fadePixelColor(uint16_t n, uint8_t fade);
uint8_t get_random_wheel_index(uint8_t pos);
uint32_t color_from_palette(uint16_t, bool mapping, bool wrap, uint8_t mcol, uint8_t pbri = 255);
@ -586,16 +587,16 @@ typedef struct Segment {
// 2D support functions
void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t blend);
void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), blend); }
void addPixelColorXY(int x, int y, uint32_t color);
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColorXY(x, y, RGBW32(r,g,b,w)); } // automatically inline
void addPixelColorXY(int x, int y, CRGB c) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0)); }
void addPixelColorXY(int x, int y, uint32_t color, bool fast = false);
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0, bool fast = false) { addPixelColorXY(x, y, RGBW32(r,g,b,w), fast); } // automatically inline
void addPixelColorXY(int x, int y, CRGB c, bool fast = false) { addPixelColorXY(x, y, RGBW32(c.r,c.g,c.b,0), fast); }
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade);
void box_blur(uint16_t i, bool vertical, fract8 blur_amount); // 1D box blur (with weight)
void blurRow(uint16_t row, fract8 blur_amount);
void blurCol(uint16_t col, fract8 blur_amount);
void moveX(int8_t delta);
void moveY(int8_t delta);
void move(uint8_t dir, uint8_t delta);
void moveX(int8_t delta, bool wrap = false);
void moveY(int8_t delta, bool wrap = false);
void move(uint8_t dir, uint8_t delta, bool wrap = false);
void draw_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c);
void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c);
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c);
@ -619,16 +620,16 @@ typedef struct Segment {
uint32_t getPixelColorXY(uint16_t x, uint16_t y) { return getPixelColor(x); }
void blendPixelColorXY(uint16_t x, uint16_t y, uint32_t c, uint8_t blend) { blendPixelColor(x, c, blend); }
void blendPixelColorXY(uint16_t x, uint16_t y, CRGB c, uint8_t blend) { blendPixelColor(x, RGBW32(c.r,c.g,c.b,0), blend); }
void addPixelColorXY(int x, int y, uint32_t color) { addPixelColor(x, color); }
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0) { addPixelColor(x, RGBW32(r,g,b,w)); }
void addPixelColorXY(int x, int y, CRGB c) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0)); }
void addPixelColorXY(int x, int y, uint32_t color, bool fast = false) { addPixelColor(x, color, fast); }
void addPixelColorXY(int x, int y, byte r, byte g, byte b, byte w = 0, bool fast = false) { addPixelColor(x, RGBW32(r,g,b,w), fast); }
void addPixelColorXY(int x, int y, CRGB c, bool fast = false) { addPixelColor(x, RGBW32(c.r,c.g,c.b,0), fast); }
void fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) { fadePixelColor(x, fade); }
void box_blur(uint16_t i, bool vertical, fract8 blur_amount) {}
void blurRow(uint16_t row, fract8 blur_amount) {}
void blurCol(uint16_t col, fract8 blur_amount) {}
void moveX(int8_t delta) {}
void moveY(int8_t delta) {}
void move(uint8_t dir, uint8_t delta) {}
void moveX(int8_t delta, bool wrap = false) {}
void moveY(int8_t delta, bool wrap = false) {}
void move(uint8_t dir, uint8_t delta, bool wrap = false) {}
void fill_circle(uint16_t cx, uint16_t cy, uint8_t radius, CRGB c) {}
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c) {}
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c) {}

View File

@ -304,8 +304,22 @@ void Segment::blendPixelColorXY(uint16_t x, uint16_t y, uint32_t color, uint8_t
}
// Adds the specified color with the existing pixel color perserving color balance.
void Segment::addPixelColorXY(int x, int y, uint32_t color) {
setPixelColorXY(x, y, color_add(getPixelColorXY(x,y), color));
void Segment::addPixelColorXY(int x, int y, uint32_t color, bool fast) {
uint32_t col = getPixelColorXY(x,y);
uint8_t r = R(col);
uint8_t g = G(col);
uint8_t b = B(col);
uint8_t w = W(col);
if (fast) {
r = qadd8(r, R(color));
g = qadd8(g, G(color));
b = qadd8(b, B(color));
w = qadd8(w, W(color));
col = RGBW32(r,g,b,w);
} else {
col = color_add(col, color);
}
setPixelColorXY(x, y, col);
}
void Segment::fadePixelColorXY(uint16_t x, uint16_t y, uint8_t fade) {
@ -416,54 +430,55 @@ void Segment::blur1d(fract8 blur_amount) {
for (uint16_t y = 0; y < rows; y++) blurRow(y, blur_amount);
}
void Segment::moveX(int8_t delta) {
void Segment::moveX(int8_t delta, bool wrap) {
const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight();
if (!delta) return;
if (delta > 0) {
for (uint8_t y = 0; y < rows; y++) for (uint8_t x = 0; x < cols-1; x++) {
if (x + delta >= cols) break;
setPixelColorXY(x, y, getPixelColorXY((x + delta)%cols, y));
}
} else {
for (uint8_t y = 0; y < rows; y++) for (int16_t x = cols-1; x >= 0; x--) {
if (x + delta < 0) break;
setPixelColorXY(x, y, getPixelColorXY(x + delta, y));
if (!delta || abs(delta) >= cols) return;
uint32_t newPxCol[cols];
for (int y = 0; y < rows; y++) {
if (delta > 0) {
for (int x = 0; x < cols-delta; x++) newPxCol[x] = getPixelColorXY((x + delta), y);
for (int x = cols-delta; x < cols; x++) newPxCol[x] = getPixelColorXY(wrap ? (x + delta) - cols : x, y);
} else {
for (int x = cols-1; x >= -delta; x--) newPxCol[x] = getPixelColorXY((x + delta), y);
for (int x = -delta-1; x >= 0; x--) newPxCol[x] = getPixelColorXY(wrap ? (x + delta) + cols : x, y);
}
for (int x = 0; x < cols; x++) setPixelColorXY(x, y, newPxCol[x]);
}
}
void Segment::moveY(int8_t delta) {
void Segment::moveY(int8_t delta, bool wrap) {
const uint16_t cols = virtualWidth();
const uint16_t rows = virtualHeight();
if (!delta) return;
if (delta > 0) {
for (uint8_t x = 0; x < cols; x++) for (uint8_t y = 0; y < rows-1; y++) {
if (y + delta >= rows) break;
setPixelColorXY(x, y, getPixelColorXY(x, (y + delta)));
}
} else {
for (uint8_t x = 0; x < cols; x++) for (int16_t y = rows-1; y >= 0; y--) {
if (y + delta < 0) break;
setPixelColorXY(x, y, getPixelColorXY(x, y + delta));
if (!delta || abs(delta) >= rows) return;
uint32_t newPxCol[rows];
for (int x = 0; x < cols; x++) {
if (delta > 0) {
for (int y = 0; y < rows-delta; y++) newPxCol[y] = getPixelColorXY(x, (y + delta));
for (int y = rows-delta; y < rows; y++) newPxCol[y] = getPixelColorXY(x, wrap ? (y + delta) - rows : y);
} else {
for (int y = rows-1; y >= -delta; y--) newPxCol[y] = getPixelColorXY(x, (y + delta));
for (int y = -delta-1; y >= 0; y--) newPxCol[y] = getPixelColorXY(x, wrap ? (y + delta) + rows : y);
}
for (int y = 0; y < rows; y++) setPixelColorXY(x, y, newPxCol[y]);
}
}
// move() - move all pixels in desired direction delta number of pixels
// @param dir direction: 0=left, 1=left-up, 2=up, 3=right-up, 4=right, 5=right-down, 6=down, 7=left-down
// @param delta number of pixels to move
void Segment::move(uint8_t dir, uint8_t delta) {
// @param wrap around
void Segment::move(uint8_t dir, uint8_t delta, bool wrap) {
if (delta==0) return;
switch (dir) {
case 0: moveX( delta); break;
case 1: moveX( delta); moveY( delta); break;
case 2: moveY( delta); break;
case 3: moveX(-delta); moveY( delta); break;
case 4: moveX(-delta); break;
case 5: moveX(-delta); moveY(-delta); break;
case 6: moveY(-delta); break;
case 7: moveX( delta); moveY(-delta); break;
case 0: moveX( delta, wrap); break;
case 1: moveX( delta, wrap); moveY( delta, wrap); break;
case 2: moveY( delta, wrap); break;
case 3: moveX(-delta, wrap); moveY( delta, wrap); break;
case 4: moveX(-delta, wrap); break;
case 5: moveX(-delta, wrap); moveY(-delta, wrap); break;
case 6: moveY(-delta, wrap); break;
case 7: moveX( delta, wrap); moveY(-delta, wrap); break;
}
}

View File

@ -228,6 +228,7 @@ CRGBPalette16 &Segment::loadPalette(CRGBPalette16 &targetPalette, uint8_t pal) {
case FX_MODE_GLITTER : pal = 11; break; // rainbow colors
case FX_MODE_SUNRISE : pal = 35; break; // heat palette
case FX_MODE_RAILWAY : pal = 3; break; // prim + sec
case FX_MODE_2DSOAP : pal = 11; break; // rainbow colors
}
switch (pal) {
case 0: //default palette. Exceptions for specific effects above
@ -820,8 +821,22 @@ void Segment::blendPixelColor(int n, uint32_t color, uint8_t blend) {
}
// Adds the specified color with the existing pixel color perserving color balance.
void Segment::addPixelColor(int n, uint32_t color) {
setPixelColor(n, color_add(getPixelColor(n), color));
void Segment::addPixelColor(int n, uint32_t color, bool fast) {
uint32_t col = getPixelColor(n);
uint8_t r = R(col);
uint8_t g = G(col);
uint8_t b = B(col);
uint8_t w = W(col);
if (fast) {
r = qadd8(r, R(color));
g = qadd8(g, G(color));
b = qadd8(b, B(color));
w = qadd8(w, W(color));
col = RGBW32(r,g,b,w);
} else {
col = color_add(col, color);
}
setPixelColor(n, col);
}
void Segment::fadePixelColor(uint16_t n, uint8_t fade) {

View File

@ -95,12 +95,14 @@ uint32_t Bus::autoWhiteCalc(uint32_t c) {
BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bus(bc.type, bc.start, bc.autoWhite), _colorOrderMap(com) {
if (!IS_DIGITAL(bc.type) || !bc.count) return;
if (!pinManager.allocatePin(bc.pins[0], true, PinOwner::BusDigital)) return;
_frequencykHz = 0U;
_pins[0] = bc.pins[0];
if (IS_2PIN(bc.type)) {
if (!pinManager.allocatePin(bc.pins[1], true, PinOwner::BusDigital)) {
cleanup(); return;
}
_pins[1] = bc.pins[1];
_frequencykHz = bc.frequency ? bc.frequency : 2000U; // 2MHz clock if undefined
}
reversed = bc.reversed;
_needsRefresh = bc.refreshReq || bc.type == TYPE_TM1814;
@ -110,7 +112,7 @@ BusDigital::BusDigital(BusConfig &bc, uint8_t nr, const ColorOrderMap &com) : Bu
if (_iType == I_NONE) return;
uint16_t lenToCreate = _len;
if (bc.type == TYPE_WS2812_1CH_X3) lenToCreate = NUM_ICS_WS2812_1CH_3X(_len); // only needs a third of "RGB" LEDs for NeoPixelBus
_busPtr = PolyBus::create(_iType, _pins, lenToCreate, nr);
_busPtr = PolyBus::create(_iType, _pins, lenToCreate, nr, _frequencykHz);
_valid = (_busPtr != nullptr);
_colorOrder = bc.colorOrder;
DEBUG_PRINTF("%successfully inited strip %u (len %u) with type %u and pins %u,%u (itype %u)\n", _valid?"S":"Uns", nr, _len, bc.type, _pins[0],_pins[1],_iType);
@ -212,10 +214,11 @@ BusPwm::BusPwm(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWhite) {
_valid = false;
if (!IS_PWM(bc.type)) return;
uint8_t numPins = NUM_PWM_PINS(bc.type);
_frequency = bc.frequency ? bc.frequency : WLED_PWM_FREQ;
#ifdef ESP8266
analogWriteRange(255); //same range as one RGB channel
analogWriteFreq(WLED_PWM_FREQ);
analogWriteFreq(_frequency);
#else
_ledcStart = pinManager.allocateLedc(numPins);
if (_ledcStart == 255) { //no more free LEDC channels
@ -232,7 +235,7 @@ BusPwm::BusPwm(BusConfig &bc) : Bus(bc.type, bc.start, bc.autoWhite) {
#ifdef ESP8266
pinMode(_pins[i], OUTPUT);
#else
ledcSetup(_ledcStart + i, WLED_PWM_FREQ, 8);
ledcSetup(_ledcStart + i, _frequency, 8);
ledcAttachPin(_pins[i], _ledcStart + i);
#endif
}
@ -450,21 +453,21 @@ void BusNetwork::cleanup() {
uint32_t BusManager::memUsage(BusConfig &bc) {
uint8_t type = bc.type;
uint16_t len = bc.count + bc.skipAmount;
if (type > 15 && type < 32) {
if (type > 15 && type < 32) { // digital types
if (type == TYPE_UCS8903 || type == TYPE_UCS8904) len *= 2; // 16-bit LEDs
#ifdef ESP8266
if (bc.pins[0] == 3) { //8266 DMA uses 5x the mem
if (type > 29) return len*20; //RGBW
if (type > 28) return len*20; //RGBW
return len*15;
}
if (type > 29) return len*4; //RGBW
if (type > 28) return len*4; //RGBW
return len*3;
#else //ESP32 RMT uses double buffer?
if (type > 29) return len*8; //RGBW
if (type > 28) return len*8; //RGBW
return len*6;
#endif
}
if (type > 31 && type < 48) return 5;
if (type == 44 || type == 45) return len*4; //RGBW
if (type > 31 && type < 48) return 5;
return len*3; //RGB
}

View File

@ -29,10 +29,11 @@ struct BusConfig {
bool refreshReq;
uint8_t autoWhite;
uint8_t pins[5] = {LEDPIN, 255, 255, 255, 255};
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY) {
uint16_t frequency;
BusConfig(uint8_t busType, uint8_t* ppins, uint16_t pstart, uint16_t len = 1, uint8_t pcolorOrder = COL_ORDER_GRB, bool rev = false, uint8_t skip = 0, byte aw=RGBW_MODE_MANUAL_ONLY, uint16_t clock_kHz=0U) {
refreshReq = (bool) GET_BIT(busType,7);
type = busType & 0x7F; // bit 7 may be/is hacked to include refresh info (1=refresh in off state, 0=no refresh)
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw;
count = len; start = pstart; colorOrder = pcolorOrder; reversed = rev; skipAmount = skip; autoWhite = aw; frequency = clock_kHz;
uint8_t nPins = 1;
if (type >= TYPE_NET_DDP_RGB && type < 96) nPins = 4; //virtual network bus. 4 "pins" store IP address
else if (type > 47) nPins = 2;
@ -114,6 +115,7 @@ class Bus {
virtual void setColorOrder() {}
virtual uint8_t getColorOrder() { return COL_ORDER_RGB; }
virtual uint8_t skippedLeds() { return 0; }
virtual uint16_t getFrequency() { return 0U; }
inline uint16_t getStart() { return _start; }
inline void setStart(uint16_t start) { _start = start; }
inline uint8_t getType() { return _type; }
@ -203,6 +205,8 @@ class BusDigital : public Bus {
return _skip;
}
uint16_t getFrequency() { return _frequencykHz; }
void reinit();
void cleanup();
@ -216,6 +220,7 @@ class BusDigital : public Bus {
uint8_t _pins[2] = {255, 255};
uint8_t _iType = 0; //I_NONE;
uint8_t _skip = 0;
uint16_t _frequencykHz = 0U;
void * _busPtr = nullptr;
const ColorOrderMap &_colorOrderMap;
};
@ -234,6 +239,8 @@ class BusPwm : public Bus {
uint8_t getPins(uint8_t* pinArray);
uint16_t getFrequency() { return _frequency; }
void cleanup() {
deallocatePins();
}
@ -248,6 +255,7 @@ class BusPwm : public Bus {
#ifdef ARDUINO_ARCH_ESP32
uint8_t _ledcStart = 255;
#endif
uint16_t _frequency = 0U;
void deallocatePins();
};
@ -335,7 +343,7 @@ class BusManager {
void setStatusPixel(uint32_t c);
void IRAM_ATTR setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1);
void setPixelColor(uint16_t pix, uint32_t c, int16_t cct=-1);
void setBrightness(uint8_t b);

View File

@ -1,7 +1,7 @@
#ifndef BusWrapper_h
#define BusWrapper_h
#include "NeoPixelBrightnessBus.h"
#include "NeoPixelBusLg.h"
// temporary - these defines should actually be set in platformio.ini
// C3: I2S0 and I2S1 methods not supported (has one I2S bus)
@ -53,6 +53,16 @@
#define I_8266_U1_TM2_3 18
#define I_8266_DM_TM2_3 19
#define I_8266_BB_TM2_3 20
//UCS8903 (RGB)
#define I_8266_U0_UCS_3 49
#define I_8266_U1_UCS_3 50
#define I_8266_DM_UCS_3 51
#define I_8266_BB_UCS_3 52
//UCS8904 (RGBW)
#define I_8266_U0_UCS_4 53
#define I_8266_U1_UCS_4 54
#define I_8266_DM_UCS_4 55
#define I_8266_BB_UCS_4 56
/*** ESP32 Neopixel methods ***/
//RGB
@ -80,6 +90,16 @@
#define I_32_I0_TM2_3 37
#define I_32_I1_TM2_3 38
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8903 (RGB)
#define I_32_RN_UCS_3 57
#define I_32_I0_UCS_3 58
#define I_32_I1_UCS_3 59
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8904 (RGBW)
#define I_32_RN_UCS_4 60
#define I_32_I0_UCS_4 61
#define I_32_I1_UCS_4 62
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//APA102
#define I_HS_DOT_3 39 //hardware SPI
@ -105,77 +125,105 @@
/*** ESP8266 Neopixel methods ***/
#ifdef ESP8266
//RGB
#define B_8266_U0_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart0Ws2813Method> //3 chan, esp8266, gpio1
#define B_8266_U1_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart1Ws2813Method> //3 chan, esp8266, gpio2
#define B_8266_DM_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266BitBang800KbpsMethod> //3 chan, esp8266, bb (any pin but 16)
#define B_8266_U0_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio1
#define B_8266_U1_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio2
#define B_8266_DM_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin but 16)
//RGBW
#define B_8266_U0_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Uart0Ws2813Method> //4 chan, esp8266, gpio1
#define B_8266_U1_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Uart1Ws2813Method> //4 chan, esp8266, gpio2
#define B_8266_DM_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266Dma800KbpsMethod> //4 chan, esp8266, gpio3
#define B_8266_BB_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp8266BitBang800KbpsMethod> //4 chan, esp8266, bb (any pin)
#define B_8266_U0_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio1
#define B_8266_U1_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio2
#define B_8266_DM_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, gpio3
#define B_8266_BB_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, bb (any pin)
//400Kbps
#define B_8266_U0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart0400KbpsMethod> //3 chan, esp8266, gpio1
#define B_8266_U1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart1400KbpsMethod> //3 chan, esp8266, gpio2
#define B_8266_DM_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Dma400KbpsMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266BitBang400KbpsMethod> //3 chan, esp8266, bb (any pin)
#define B_8266_U0_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart0400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio1
#define B_8266_U1_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Uart1400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio2
#define B_8266_DM_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266Dma400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp8266BitBang400KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin)
//TM1814 (RGBW)
#define B_8266_U0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart0Tm1814Method>
#define B_8266_U1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart1Tm1814Method>
#define B_8266_DM_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266DmaTm1814Method>
#define B_8266_BB_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266BitBangTm1814Method>
#define B_8266_U0_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266Uart0Tm1814Method, NeoGammaNullMethod>
#define B_8266_U1_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266Uart1Tm1814Method, NeoGammaNullMethod>
#define B_8266_DM_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266DmaTm1814Method, NeoGammaNullMethod>
#define B_8266_BB_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp8266BitBangTm1814Method, NeoGammaNullMethod>
//TM1829 (RGB)
#define B_8266_U0_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266Uart0Tm1829Method>
#define B_8266_U1_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266Uart1Tm1829Method>
#define B_8266_DM_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266DmaTm1829Method>
#define B_8266_BB_TM2_4 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp8266BitBangTm1829Method>
#define B_8266_U0_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266Uart0Tm1829Method, NeoGammaNullMethod>
#define B_8266_U1_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266Uart1Tm1829Method, NeoGammaNullMethod>
#define B_8266_DM_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266DmaTm1829Method, NeoGammaNullMethod>
#define B_8266_BB_TM2_4 NeoPixelBusLg<NeoBrgFeature, NeoEsp8266BitBangTm1829Method, NeoGammaNullMethod>
//UCS8903
#define B_8266_U0_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio1
#define B_8266_U1_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //3 chan, esp8266, gpio2
#define B_8266_DM_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, gpio3
#define B_8266_BB_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //3 chan, esp8266, bb (any pin but 16)
//UCS8904 RGBW
#define B_8266_U0_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Uart0Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio1
#define B_8266_U1_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Uart1Ws2813Method, NeoGammaNullMethod> //4 chan, esp8266, gpio2
#define B_8266_DM_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266Dma800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, gpio3
#define B_8266_BB_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp8266BitBang800KbpsMethod, NeoGammaNullMethod> //4 chan, esp8266, bb (any pin)
#endif
/*** ESP32 Neopixel methods ***/
#ifdef ARDUINO_ARCH_ESP32
//RGB
#define B_32_RN_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtNWs2812xMethod>
#define B_32_RN_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0800KbpsMethod>
#define B_32_I0_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1800KbpsMethod>
#define B_32_I1_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif
//#define B_32_BB_NEO_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod
//#define B_32_BB_NEO_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32BitBang800KbpsMethod, NeoGammaNullMethod> // NeoEsp8266BitBang800KbpsMethod
//RGBW
#define B_32_RN_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32RmtNWs2812xMethod>
#define B_32_RN_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s0800KbpsMethod>
#define B_32_I0_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32I2s1800KbpsMethod>
#define B_32_I1_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif
//#define B_32_BB_NEO_4 NeoPixelBrightnessBus<NeoGrbwFeature, NeoEsp32BitBang800KbpsMethod> // NeoEsp8266BitBang800KbpsMethod
//#define B_32_BB_NEO_4 NeoPixelBusLg<NeoGrbwFeature, NeoEsp32BitBang800KbpsMethod, NeoGammaNullMethod> // NeoEsp8266BitBang800KbpsMethod
//400Kbps
#define B_32_RN_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32RmtN400KbpsMethod>
#define B_32_RN_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32RmtN400KbpsMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod>
#define B_32_I0_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod>
#define B_32_I1_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod, NeoGammaNullMethod>
#endif
//#define B_32_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32BitBang400KbpsMethod> // NeoEsp8266BitBang400KbpsMethod
//#define B_32_BB_400_3 NeoPixelBusLg<NeoGrbFeature, NeoEsp32BitBang400KbpsMethod, NeoGammaNullMethod> // NeoEsp8266BitBang400KbpsMethod
//TM1814 (RGBW)
#define B_32_RN_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32RmtNTm1814Method>
#define B_32_RN_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32RmtNTm1814Method, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s0Tm1814Method>
#define B_32_I0_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32I2s0Tm1814Method, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32I2s1Tm1814Method>
#define B_32_I1_TM1_4 NeoPixelBusLg<NeoWrgbTm1814Feature, NeoEsp32I2s1Tm1814Method, NeoGammaNullMethod>
#endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//TM1829 (RGB)
#define B_32_RN_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32RmtNTm1829Method>
#define B_32_RN_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32RmtNTm1829Method, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32I2s0Tm1829Method>
#define B_32_I0_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32I2s0Tm1829Method, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_TM2_3 NeoPixelBrightnessBus<NeoBrgFeature, NeoEsp32I2s1Tm1829Method>
#define B_32_I1_TM2_3 NeoPixelBusLg<NeoBrgFeature, NeoEsp32I2s1Tm1829Method, NeoGammaNullMethod>
#endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8903
#define B_32_RN_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_UCS_3 NeoPixelBusLg<NeoRgbUcs8903Feature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
//UCS8904
#define B_32_RN_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32RmtNWs2812xMethod, NeoGammaNullMethod>
#ifndef WLED_NO_I2S0_PIXELBUS
#define B_32_I0_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32I2s0800KbpsMethod, NeoGammaNullMethod>
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
#define B_32_I1_UCS_4 NeoPixelBusLg<NeoRgbwUcs8904Feature, NeoEsp32I2s1800KbpsMethod, NeoGammaNullMethod>
#endif
//Bit Bang theoratically possible, but very undesirable and not needed (no pin restrictions on RMT and I2S)
@ -184,45 +232,47 @@
//APA102
#ifdef WLED_USE_ETHERNET
// fix for #2542 (by @BlackBird77)
#define B_HS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarHspi5MhzMethod> //hardware HSPI (was DotStarEsp32DmaHspi5MhzMethod in NPB 2.6.9)
#define B_HS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarEsp32HspiHzMethod, NeoGammaNullMethod> //hardware HSPI (was DotStarEsp32DmaHspi5MhzMethod in NPB @ 2.6.9)
#else
#define B_HS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarSpi5MhzMethod> //hardware VSPI
#define B_HS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarSpiHzMethod, NeoGammaNullMethod> //hardware VSPI
#endif
#define B_SS_DOT_3 NeoPixelBrightnessBus<DotStarBgrFeature, DotStarMethod> //soft SPI
#define B_SS_DOT_3 NeoPixelBusLg<DotStarBgrFeature, DotStarMethod, NeoGammaNullMethod> //soft SPI
//LPD8806
#define B_HS_LPD_3 NeoPixelBrightnessBus<Lpd8806GrbFeature, Lpd8806SpiMethod>
#define B_SS_LPD_3 NeoPixelBrightnessBus<Lpd8806GrbFeature, Lpd8806Method>
#define B_HS_LPD_3 NeoPixelBusLg<Lpd8806GrbFeature, Lpd8806SpiHzMethod, NeoGammaNullMethod>
#define B_SS_LPD_3 NeoPixelBusLg<Lpd8806GrbFeature, Lpd8806Method, NeoGammaNullMethod>
//LPD6803
#define B_HS_LPO_3 NeoPixelBrightnessBus<Lpd6803GrbFeature, Lpd6803SpiMethod>
#define B_SS_LPO_3 NeoPixelBrightnessBus<Lpd6803GrbFeature, Lpd6803Method>
#define B_HS_LPO_3 NeoPixelBusLg<Lpd6803GrbFeature, Lpd6803SpiHzMethod, NeoGammaNullMethod>
#define B_SS_LPO_3 NeoPixelBusLg<Lpd6803GrbFeature, Lpd6803Method, NeoGammaNullMethod>
//WS2801
#if defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==40000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi40MhzMethod> // fastest bus speed (not existing method?)
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==20000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi20MhzMethod> // 20MHz
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==10000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801SpiMethod> // 10MHz
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==2000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi2MhzMethod> //slower, more compatible
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==1000
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi1MhzMethod> //slower, more compatible
#elif defined(WLED_WS2801_SPEED_KHZ) && WLED_WS2801_SPEED_KHZ==500
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi500KhzMethod> //slower, more compatible
#else
#define B_HS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Spi2MhzMethod> // 2MHz; slower, more compatible
#endif
#define B_SS_WS1_3 NeoPixelBrightnessBus<NeoRbgFeature, NeoWs2801Method>
#define B_HS_WS1_3 NeoPixelBusLg<NeoRbgFeature, Ws2801SpiHzMethod, NeoGammaNullMethod>
#define B_SS_WS1_3 NeoPixelBusLg<NeoRbgFeature, Ws2801Method, NeoGammaNullMethod>
//P9813
#define B_HS_P98_3 NeoPixelBrightnessBus<P9813BgrFeature, P9813SpiMethod>
#define B_SS_P98_3 NeoPixelBrightnessBus<P9813BgrFeature, P9813Method>
#define B_HS_P98_3 NeoPixelBusLg<P9813BgrFeature, P9813SpiHzMethod, NeoGammaNullMethod>
#define B_SS_P98_3 NeoPixelBusLg<P9813BgrFeature, P9813Method, NeoGammaNullMethod>
// 48bit & 64bit to 24bit & 32bit RGB(W) conversion
#define toRGBW32(c) (RGBW32((c>>40)&0xFF, (c>>24)&0xFF, (c>>8)&0xFF, (c>>56)&0xFF))
#define RGBW32(r,g,b,w) (uint32_t((byte(w) << 24) | (byte(r) << 16) | (byte(g) << 8) | (byte(b))))
//handles pointer type conversion for all possible bus types
class PolyBus {
public:
// initialize SPI bus speed for DotStar methods
template <class T>
static void beginDotStar(void* busPtr, int8_t sck, int8_t miso, int8_t mosi, int8_t ss, uint16_t clock_kHz = 0U) {
T dotStar_strip = static_cast<T>(busPtr);
#ifdef ESP8266
dotStar_strip->Begin();
#else
if (sck == -1 && mosi == -1) dotStar_strip->Begin();
else dotStar_strip->Begin(sck, miso, mosi, ss);
#endif
if (clock_kHz) dotStar_strip->SetMethodSettings(NeoSpiSettings((uint32_t)clock_kHz*1000));
}
// Begin & initialize the PixelSettings for TM1814 strips.
template <class T>
static void beginTM1814(void* busPtr) {
@ -231,7 +281,7 @@ class PolyBus {
// Max current for each LED (22.5 mA).
tm1814_strip->SetPixelSettings(NeoTm1814Settings(/*R*/225, /*G*/225, /*B*/225, /*W*/225));
}
static void begin(void* busPtr, uint8_t busType, uint8_t* pins) {
static void begin(void* busPtr, uint8_t busType, uint8_t* pins, uint16_t clock_kHz = 0U) {
switch (busType) {
case I_NONE: break;
#ifdef ESP8266
@ -255,11 +305,19 @@ class PolyBus {
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Begin(); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Begin(); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Begin(); break;
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->Begin(); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->Begin(); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->Begin(); break;
case I_HS_DOT_3: beginDotStar<B_HS_DOT_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_LPD_3: beginDotStar<B_HS_LPD_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_LPO_3: beginDotStar<B_HS_LPO_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_WS1_3: beginDotStar<B_HS_WS1_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_HS_P98_3: beginDotStar<B_HS_P98_3*>(busPtr, -1, -1, -1, -1, clock_kHz); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->Begin(); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->Begin(); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->Begin(); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->Begin(); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->Begin(); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->Begin(); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->Begin(); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->Begin(); break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Begin(); break;
@ -296,12 +354,28 @@ class PolyBus {
case I_32_I1_TM1_4: beginTM1814<B_32_I1_TM1_4*>(busPtr); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Begin(); break;
#endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->Begin(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->Begin(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->Begin(); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->Begin(); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->Begin(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->Begin(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->Begin(); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->Begin(); break;
// ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin()
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
case I_HS_DOT_3: beginDotStar<B_HS_DOT_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_LPD_3: beginDotStar<B_HS_LPD_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_LPO_3: beginDotStar<B_HS_LPO_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_WS1_3: beginDotStar<B_HS_WS1_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
case I_HS_P98_3: beginDotStar<B_HS_P98_3*>(busPtr, pins[1], -1, pins[0], -1, clock_kHz); break;
#endif
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Begin(); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->Begin(); break;
@ -310,7 +384,7 @@ class PolyBus {
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->Begin(); break;
}
};
static void* create(uint8_t busType, uint8_t* pins, uint16_t len, uint8_t channel) {
static void* create(uint8_t busType, uint8_t* pins, uint16_t len, uint8_t channel, uint16_t clock_kHz = 0U) {
void* busPtr = nullptr;
switch (busType) {
case I_NONE: break;
@ -335,6 +409,14 @@ class PolyBus {
case I_8266_U1_TM2_3: busPtr = new B_8266_U1_TM2_4(len, pins[0]); break;
case I_8266_DM_TM2_3: busPtr = new B_8266_DM_TM2_4(len, pins[0]); break;
case I_8266_BB_TM2_3: busPtr = new B_8266_BB_TM2_4(len, pins[0]); break;
case I_8266_U0_UCS_3: busPtr = new B_8266_U0_UCS_3(len, pins[0]); break;
case I_8266_U1_UCS_3: busPtr = new B_8266_U1_UCS_3(len, pins[0]); break;
case I_8266_DM_UCS_3: busPtr = new B_8266_DM_UCS_3(len, pins[0]); break;
case I_8266_BB_UCS_3: busPtr = new B_8266_BB_UCS_3(len, pins[0]); break;
case I_8266_U0_UCS_4: busPtr = new B_8266_U0_UCS_4(len, pins[0]); break;
case I_8266_U1_UCS_4: busPtr = new B_8266_U1_UCS_4(len, pins[0]); break;
case I_8266_DM_UCS_4: busPtr = new B_8266_DM_UCS_4(len, pins[0]); break;
case I_8266_BB_UCS_4: busPtr = new B_8266_BB_UCS_4(len, pins[0]); break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: busPtr = new B_32_RN_NEO_3(len, pins[0], (NeoBusChannel)channel); break;
@ -371,6 +453,22 @@ class PolyBus {
case I_32_I1_TM1_4: busPtr = new B_32_I1_TM1_4(len, pins[0]); break;
case I_32_I1_TM2_3: busPtr = new B_32_I1_TM2_3(len, pins[0]); break;
#endif
case I_32_RN_UCS_3: busPtr = new B_32_RN_UCS_3(len, pins[0], (NeoBusChannel)channel); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: busPtr = new B_32_I0_UCS_3(len, pins[0]); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: busPtr = new B_32_I1_UCS_3(len, pins[0]); break;
#endif
// case I_32_BB_UCS_3: busPtr = new B_32_BB_UCS_3(len, pins[0], (NeoBusChannel)channel); break;
case I_32_RN_UCS_4: busPtr = new B_32_RN_UCS_4(len, pins[0], (NeoBusChannel)channel); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: busPtr = new B_32_I0_UCS_4(len, pins[0]); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: busPtr = new B_32_I1_UCS_4(len, pins[0]); break;
#endif
// case I_32_BB_UCS_4: busPtr = new B_32_BB_UCS_4(len, pins[0], (NeoBusChannel)channel); break;
#endif
// for 2-wire: pins[1] is clk, pins[0] is dat. begin expects (len, clk, dat)
case I_HS_DOT_3: busPtr = new B_HS_DOT_3(len, pins[1], pins[0]); break;
@ -384,7 +482,7 @@ class PolyBus {
case I_HS_P98_3: busPtr = new B_HS_P98_3(len, pins[1], pins[0]); break;
case I_SS_P98_3: busPtr = new B_SS_P98_3(len, pins[1], pins[0]); break;
}
begin(busPtr, busType, pins);
begin(busPtr, busType, pins, clock_kHz);
return busPtr;
};
static void show(void* busPtr, uint8_t busType) {
@ -411,6 +509,14 @@ class PolyBus {
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->Show(); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->Show(); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->Show(); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->Show(); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->Show(); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->Show(); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->Show(); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->Show(); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->Show(); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->Show(); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->Show(); break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->Show(); break;
@ -447,6 +553,22 @@ class PolyBus {
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->Show(); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->Show(); break;
#endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->Show(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->Show(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->Show(); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->Show(); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->Show(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->Show(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->Show(); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->Show(); break;
#endif
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Show(); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->Show(); break;
@ -484,6 +606,13 @@ class PolyBus {
case I_8266_U1_TM2_3: return (static_cast<B_8266_U1_TM2_4*>(busPtr))->CanShow(); break;
case I_8266_DM_TM2_3: return (static_cast<B_8266_DM_TM2_4*>(busPtr))->CanShow(); break;
case I_8266_BB_TM2_3: return (static_cast<B_8266_BB_TM2_4*>(busPtr))->CanShow(); break;
case I_8266_U0_UCS_3: return (static_cast<B_8266_U0_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_U1_UCS_3: return (static_cast<B_8266_U1_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_DM_UCS_3: return (static_cast<B_8266_DM_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_BB_UCS_3: return (static_cast<B_8266_BB_UCS_3*>(busPtr))->CanShow(); break;
case I_8266_U0_UCS_4: return (static_cast<B_8266_U0_UCS_4*>(busPtr))->CanShow(); break;
case I_8266_U1_UCS_4: return (static_cast<B_8266_U1_UCS_4*>(busPtr))->CanShow(); break;
case I_8266_DM_UCS_4: return (static_cast<B_8266_DM_UCS_4*>(busPtr))->CanShow(); break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: return (static_cast<B_32_RN_NEO_3*>(busPtr))->CanShow(); break;
@ -520,6 +649,22 @@ class PolyBus {
case I_32_I1_TM1_4: return (static_cast<B_32_I1_TM1_4*>(busPtr))->CanShow(); break;
case I_32_I1_TM2_3: return (static_cast<B_32_I1_TM2_3*>(busPtr))->CanShow(); break;
#endif
case I_32_RN_UCS_3: return (static_cast<B_32_RN_UCS_3*>(busPtr))->CanShow(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: return (static_cast<B_32_I0_UCS_3*>(busPtr))->CanShow(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: return (static_cast<B_32_I1_UCS_3*>(busPtr))->CanShow(); break;
#endif
// case I_32_BB_UCS_3: return (static_cast<B_32_BB_UCS_3*>(busPtr))->CanShow(); break;
case I_32_RN_UCS_4: return (static_cast<B_32_RN_UCS_4*>(busPtr))->CanShow(); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: return (static_cast<B_32_I0_UCS_4*>(busPtr))->CanShow(); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: return (static_cast<B_32_I1_UCS_4*>(busPtr))->CanShow(); break;
#endif
// case I_32_BB_UCS_4: return (static_cast<B_32_BB_UCS_4*>(busPtr))->CanShow(); break;
#endif
case I_HS_DOT_3: return (static_cast<B_HS_DOT_3*>(busPtr))->CanShow(); break;
case I_SS_DOT_3: return (static_cast<B_SS_DOT_3*>(busPtr))->CanShow(); break;
@ -561,36 +706,44 @@ class PolyBus {
switch (busType) {
case I_NONE: break;
#ifdef ESP8266
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
@ -599,108 +752,148 @@ class PolyBus {
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
#endif
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetPixelColor(pix, RgbColor(colB)); break;
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetPixelColor(pix, col); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
#endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->SetPixelColor(pix, Rgb48Color(RgbColor(col))); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->SetPixelColor(pix, Rgbw64Color(col)); break;
#endif
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col.R,col.G,col.B)); break;
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetPixelColor(pix, RgbColor(col)); break;
}
};
static void setBrightness(void* busPtr, uint8_t busType, uint8_t b) {
switch (busType) {
case I_NONE: break;
#ifdef ESP8266
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetBrightness(b); break;
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetBrightness(b); break;
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetBrightness(b); break;
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetBrightness(b); break;
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetBrightness(b); break;
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetBrightness(b); break;
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetBrightness(b); break;
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetBrightness(b); break;
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetBrightness(b); break;
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetBrightness(b); break;
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetBrightness(b); break;
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetBrightness(b); break;
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetBrightness(b); break;
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetBrightness(b); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetBrightness(b); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetBrightness(b); break;
case I_8266_U0_NEO_3: (static_cast<B_8266_U0_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_NEO_3: (static_cast<B_8266_U1_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_NEO_3: (static_cast<B_8266_DM_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_NEO_3: (static_cast<B_8266_BB_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_NEO_4: (static_cast<B_8266_U0_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_NEO_4: (static_cast<B_8266_U1_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_NEO_4: (static_cast<B_8266_DM_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_NEO_4: (static_cast<B_8266_BB_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_400_3: (static_cast<B_8266_U0_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_TM2_3: (static_cast<B_8266_U0_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_TM2_3: (static_cast<B_8266_U1_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_TM2_3: (static_cast<B_8266_DM_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_TM2_3: (static_cast<B_8266_BB_TM2_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_UCS_3: (static_cast<B_8266_U0_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_UCS_3: (static_cast<B_8266_U1_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_UCS_3: (static_cast<B_8266_DM_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_UCS_3: (static_cast<B_8266_BB_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_8266_U0_UCS_4: (static_cast<B_8266_U0_UCS_4*>(busPtr))->SetLuminance(b); break;
case I_8266_U1_UCS_4: (static_cast<B_8266_U1_UCS_4*>(busPtr))->SetLuminance(b); break;
case I_8266_DM_UCS_4: (static_cast<B_8266_DM_UCS_4*>(busPtr))->SetLuminance(b); break;
case I_8266_BB_UCS_4: (static_cast<B_8266_BB_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_32_RN_NEO_3: (static_cast<B_32_RN_NEO_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_32_I0_NEO_3: (static_cast<B_32_I0_NEO_3*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_32_I1_NEO_3: (static_cast<B_32_I1_NEO_3*>(busPtr))->SetLuminance(b); break;
#endif
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetBrightness(b); break;
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetBrightness(b); break;
// case I_32_BB_NEO_3: (static_cast<B_32_BB_NEO_3*>(busPtr))->SetLuminance(b); break;
case I_32_RN_NEO_4: (static_cast<B_32_RN_NEO_4*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetBrightness(b); break;
case I_32_I0_NEO_4: (static_cast<B_32_I0_NEO_4*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetBrightness(b); break;
case I_32_I1_NEO_4: (static_cast<B_32_I1_NEO_4*>(busPtr))->SetLuminance(b); break;
#endif
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetBrightness(b); break;
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetBrightness(b); break;
// case I_32_BB_NEO_4: (static_cast<B_32_BB_NEO_4*>(busPtr))->SetLuminance(b); break;
case I_32_RN_400_3: (static_cast<B_32_RN_400_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetBrightness(b); break;
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetBrightness(b); break;
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->SetLuminance(b); break;
#endif
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetBrightness(b); break;
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetBrightness(b); break;
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetBrightness(b); break;
// case I_32_BB_400_3: (static_cast<B_32_BB_400_3*>(busPtr))->SetLuminance(b); break;
case I_32_RN_TM1_4: (static_cast<B_32_RN_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_32_RN_TM2_3: (static_cast<B_32_RN_TM2_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetBrightness(b); break;
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetBrightness(b); break;
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_32_I0_TM2_3: (static_cast<B_32_I0_TM2_3*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetBrightness(b); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetBrightness(b); break;
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->SetLuminance(b); break;
case I_32_I1_TM2_3: (static_cast<B_32_I1_TM2_3*>(busPtr))->SetLuminance(b); break;
#endif
case I_32_RN_UCS_3: (static_cast<B_32_RN_UCS_3*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: (static_cast<B_32_I0_UCS_3*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: (static_cast<B_32_I1_UCS_3*>(busPtr))->SetLuminance(b); break;
#endif
// case I_32_BB_UCS_3: (static_cast<B_32_BB_UCS_3*>(busPtr))->SetLuminance(b); break;
case I_32_RN_UCS_4: (static_cast<B_32_RN_UCS_4*>(busPtr))->SetLuminance(b); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: (static_cast<B_32_I0_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: (static_cast<B_32_I1_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif
// case I_32_BB_UCS_4: (static_cast<B_32_BB_UCS_4*>(busPtr))->SetLuminance(b); break;
#endif
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetBrightness(b); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetBrightness(b); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetBrightness(b); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetBrightness(b); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetBrightness(b); break;
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetBrightness(b); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetBrightness(b); break;
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetBrightness(b); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetBrightness(b); break;
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetBrightness(b); break;
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->SetLuminance(b); break;
case I_SS_DOT_3: (static_cast<B_SS_DOT_3*>(busPtr))->SetLuminance(b); break;
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->SetLuminance(b); break;
case I_SS_LPD_3: (static_cast<B_SS_LPD_3*>(busPtr))->SetLuminance(b); break;
case I_HS_LPO_3: (static_cast<B_HS_LPO_3*>(busPtr))->SetLuminance(b); break;
case I_SS_LPO_3: (static_cast<B_SS_LPO_3*>(busPtr))->SetLuminance(b); break;
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->SetLuminance(b); break;
case I_SS_WS1_3: (static_cast<B_SS_WS1_3*>(busPtr))->SetLuminance(b); break;
case I_HS_P98_3: (static_cast<B_HS_P98_3*>(busPtr))->SetLuminance(b); break;
case I_SS_P98_3: (static_cast<B_SS_P98_3*>(busPtr))->SetLuminance(b); break;
}
};
static uint32_t getPixelColor(void* busPtr, uint8_t busType, uint16_t pix, uint8_t co) {
@ -728,6 +921,14 @@ class PolyBus {
case I_8266_U1_TM2_3: col = (static_cast<B_8266_U1_TM2_4*>(busPtr))->GetPixelColor(pix); break;
case I_8266_DM_TM2_3: col = (static_cast<B_8266_DM_TM2_4*>(busPtr))->GetPixelColor(pix); break;
case I_8266_BB_TM2_3: col = (static_cast<B_8266_BB_TM2_4*>(busPtr))->GetPixelColor(pix); break;
case I_8266_U0_UCS_3: { Rgb48Color c = (static_cast<B_8266_U0_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_U1_UCS_3: { Rgb48Color c = (static_cast<B_8266_U1_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_DM_UCS_3: { Rgb48Color c = (static_cast<B_8266_DM_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_BB_UCS_3: { Rgb48Color c = (static_cast<B_8266_BB_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
case I_8266_U0_UCS_4: { Rgbw64Color c = (static_cast<B_8266_U0_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
case I_8266_U1_UCS_4: { Rgbw64Color c = (static_cast<B_8266_U1_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
case I_8266_DM_UCS_4: { Rgbw64Color c = (static_cast<B_8266_DM_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
case I_8266_BB_UCS_4: { Rgbw64Color c = (static_cast<B_8266_BB_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: col = (static_cast<B_32_RN_NEO_3*>(busPtr))->GetPixelColor(pix); break;
@ -764,6 +965,22 @@ class PolyBus {
case I_32_I1_TM1_4: col = (static_cast<B_32_I1_TM1_4*>(busPtr))->GetPixelColor(pix); break;
case I_32_I1_TM2_3: col = (static_cast<B_32_I1_TM2_3*>(busPtr))->GetPixelColor(pix); break;
#endif
case I_32_RN_UCS_3: { Rgb48Color c = (static_cast<B_32_RN_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: { Rgb48Color c = (static_cast<B_32_I0_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: { Rgb48Color c = (static_cast<B_32_I1_UCS_3*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,0); } break;
#endif
// case I_32_BB_UCS_3: col = (static_cast<B_32_BB_UCS_3*>(busPtr))->GetPixelColor(pix); break;
case I_32_RN_UCS_4: { Rgbw64Color c = (static_cast<B_32_RN_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: { Rgbw64Color c = (static_cast<B_32_I0_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: { Rgbw64Color c = (static_cast<B_32_I1_UCS_4*>(busPtr))->GetPixelColor(pix); col = RGBW32(c.R>>8,c.G>>8,c.B>>8,c.W>>8); } break;
#endif
// case I_32_BB_UCS_4: col = (static_cast<B_32_BB_UCS_4*>(busPtr))->GetPixelColor(pix); break;
#endif
case I_HS_DOT_3: col = (static_cast<B_HS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
case I_SS_DOT_3: col = (static_cast<B_SS_DOT_3*>(busPtr))->GetPixelColor(pix); break;
@ -821,6 +1038,14 @@ class PolyBus {
case I_8266_U1_TM2_3: delete (static_cast<B_8266_U1_TM2_4*>(busPtr)); break;
case I_8266_DM_TM2_3: delete (static_cast<B_8266_DM_TM2_4*>(busPtr)); break;
case I_8266_BB_TM2_3: delete (static_cast<B_8266_BB_TM2_4*>(busPtr)); break;
case I_8266_U0_UCS_3: delete (static_cast<B_8266_U0_UCS_3*>(busPtr)); break;
case I_8266_U1_UCS_3: delete (static_cast<B_8266_U1_UCS_3*>(busPtr)); break;
case I_8266_DM_UCS_3: delete (static_cast<B_8266_DM_UCS_3*>(busPtr)); break;
case I_8266_BB_UCS_3: delete (static_cast<B_8266_BB_UCS_3*>(busPtr)); break;
case I_8266_U0_UCS_4: delete (static_cast<B_8266_U0_UCS_4*>(busPtr)); break;
case I_8266_U1_UCS_4: delete (static_cast<B_8266_U1_UCS_4*>(busPtr)); break;
case I_8266_DM_UCS_4: delete (static_cast<B_8266_DM_UCS_4*>(busPtr)); break;
case I_8266_BB_UCS_4: delete (static_cast<B_8266_BB_UCS_4*>(busPtr)); break;
#endif
#ifdef ARDUINO_ARCH_ESP32
case I_32_RN_NEO_3: delete (static_cast<B_32_RN_NEO_3*>(busPtr)); break;
@ -857,6 +1082,22 @@ class PolyBus {
case I_32_I1_TM1_4: delete (static_cast<B_32_I1_TM1_4*>(busPtr)); break;
case I_32_I1_TM2_3: delete (static_cast<B_32_I1_TM2_3*>(busPtr)); break;
#endif
case I_32_RN_UCS_3: delete (static_cast<B_32_RN_UCS_3*>(busPtr)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_3: delete (static_cast<B_32_I0_UCS_3*>(busPtr)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_3: delete (static_cast<B_32_I1_UCS_3*>(busPtr)); break;
#endif
// case I_32_BB_UCS_3: delete (static_cast<B_32_BB_UCS_3*>(busPtr)); break;
case I_32_RN_UCS_4: delete (static_cast<B_32_RN_UCS_4*>(busPtr)); break;
#ifndef WLED_NO_I2S0_PIXELBUS
case I_32_I0_UCS_4: delete (static_cast<B_32_I0_UCS_4*>(busPtr)); break;
#endif
#ifndef WLED_NO_I2S1_PIXELBUS
case I_32_I1_UCS_4: delete (static_cast<B_32_I1_UCS_4*>(busPtr)); break;
#endif
// case I_32_BB_UCS_4: delete (static_cast<B_32_BB_UCS_4*>(busPtr)); break;
#endif
case I_HS_DOT_3: delete (static_cast<B_HS_DOT_3*>(busPtr)); break;
case I_SS_DOT_3: delete (static_cast<B_SS_DOT_3*>(busPtr)); break;
@ -912,6 +1153,10 @@ class PolyBus {
return I_8266_U0_TM1_4 + offset;
case TYPE_TM1829:
return I_8266_U0_TM2_3 + offset;
case TYPE_UCS8903:
return I_8266_U0_UCS_3 + offset;
case TYPE_UCS8904:
return I_8266_U0_UCS_4 + offset;
}
#else //ESP32
uint8_t offset = 0; //0 = RMT (num 0-7) 8 = I2S0 9 = I2S1
@ -946,6 +1191,10 @@ class PolyBus {
return I_32_RN_TM1_4 + offset;
case TYPE_TM1829:
return I_32_RN_TM2_3 + offset;
case TYPE_UCS8903:
return I_32_RN_UCS_3 + offset;
case TYPE_UCS8904:
return I_32_RN_UCS_4 + offset;
}
#endif
}

View File

@ -225,7 +225,6 @@ void handleButton()
{
static unsigned long lastRead = 0UL;
static unsigned long lastRun = 0UL;
bool analog = false;
unsigned long now = millis();
//if (strip.isUpdating()) return; // don't interfere with strip updates. Our button will still be there in 1ms (next cycle)
@ -241,14 +240,18 @@ void handleButton()
if (usermods.handleButton(b)) continue; // did usermod handle buttons
if ((buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) && now - lastRead > ANALOG_BTN_READ_CYCLE) { // button is not a button but a potentiometer
analog = true;
handleAnalog(b); continue;
if (buttonType[b] == BTN_TYPE_ANALOG || buttonType[b] == BTN_TYPE_ANALOG_INVERTED) { // button is not a button but a potentiometer
if (now - lastRead > ANALOG_BTN_READ_CYCLE) {
handleAnalog(b);
lastRead = now;
}
continue;
}
//button is not momentary, but switch. This is only suitable on pins whose on-boot state does not matter (NOT gpio0)
if (buttonType[b] == BTN_TYPE_SWITCH || buttonType[b] == BTN_TYPE_PIR_SENSOR) {
handleSwitch(b); continue;
handleSwitch(b);
continue;
}
//momentary button logic
@ -305,7 +308,6 @@ void handleButton()
shortPressAction(b);
}
}
if (analog) lastRead = now;
}
// If enabled, RMT idle level is set to HIGH when off

View File

@ -156,10 +156,11 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
uint8_t ledType = elm["type"] | TYPE_WS2812_RGB;
bool reversed = elm["rev"];
bool refresh = elm["ref"] | false;
uint16_t freqkHz = elm[F("freq")] | 0; // will be in kHz for DotStar and Hz for PWM (not yet implemented fully)
ledType |= refresh << 7; // hack bit 7 to indicate strip requires off refresh
uint8_t AWmode = elm[F("rgbwm")] | autoWhiteMode;
if (fromFS) {
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode);
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed, skipFirst, AWmode, freqkHz);
mem += BusManager::memUsage(bc);
if (mem <= MAX_LED_MEMORY) if (busses.add(bc) == -1) break; // finalization will be done in WLED::beginStrip()
} else {
@ -735,6 +736,7 @@ void serializeConfig() {
ins["type"] = bus->getType() & 0x7F;
ins["ref"] = bus->isOffRefreshRequired();
ins[F("rgbwm")] = bus->getAutoWhiteMode();
ins[F("freq")] = bus->getFrequency();
}
JsonArray hw_com = hw.createNestedArray(F("com"));

View File

@ -215,6 +215,8 @@
#define TYPE_GS8608 23 //same driver as WS2812, but will require signal 2x per second (else displays test pattern)
#define TYPE_WS2811_400KHZ 24 //half-speed WS2812 protocol, used by very old WS2811 units
#define TYPE_TM1829 25
#define TYPE_UCS8903 26
#define TYPE_UCS8904 29
#define TYPE_SK6812_RGBW 30
#define TYPE_TM1814 31
//"Analog" types (PWM) (32-47)

View File

@ -1,47 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content='width=device-width' name='viewport'>
<meta name="theme-color" content="#222222">
<title>Not found</title>
<style>
body {
font-family: Verdana, Helvetica, sans-serif;
text-align: center;
background-color: #222;
margin: 0;
color: #fff;
}
<head>
<meta charset="utf-8">
<meta content='width=device-width' name='viewport'>
<meta name="theme-color" content="#222222">
<title>Not found</title>
<style>
body {
font-family: Verdana, Helvetica, sans-serif;
text-align: center;
background-color: #222;
margin: 0;
color: #fff;
}
img {
width: 400px;
max-width: 50%;
image-rendering: pixelated;
image-rendering: crisp-edges;
margin: 25px 0 -10px 0;
}
button {
outline: none;
cursor: pointer;
padding: 8px;
margin: 10px;
width: 230px;
text-transform: uppercase;
font-family: helvetica;
font-size: 19px;
background-color: #333;
color: white;
border: 0px solid white;
border-radius: 25px;
}
</style>
</head>
<body>
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAbUExURQAAAAB81gCU/zKq/////9bW1oCAgGhoaAAAAGPLX8AAAAAJdFJOU///////////AFNPeBIAAAAJcEhZcwAADsAAAA7AAWrWiQkAAACdSURBVDhPxc9bDoUgEANQebP/FUuHMjBGY/B+3EYR7RH0qC/ZBc6HwCljgHO+xZIVSI2sYgHaG7EBWh8jWoxTrCBFdDJ+BD4lbIHxAcz8APAVLTsrZE4eQD5qzt3cAFTYokC4YCN9Gybgu4yAQtBFLQXHuHABA7JMeOEC/E0W5uy9gv4vo5QHK2i7yq2C8UABM4HmL+CSTXCTF1DrCX6+Gp9zB5dsAAAAAElFTkSuQmCC">
<h1>404 Not Found</h1>
<b>Akemi does not know where you are headed...</b><br><br>
<button onclick="window.location.href='/sliders'">Back to controls</button>
</body>
img {
width: 400px;
max-width: 50%;
image-rendering: pixelated;
image-rendering: crisp-edges;
margin: 25px 0 -10px 0;
}
button {
outline: none;
cursor: pointer;
padding: 8px;
margin: 10px;
width: 230px;
text-transform: uppercase;
font-family: helvetica;
font-size: 19px;
background-color: #333;
color: white;
border: 0px solid white;
border-radius: 25px;
}
</style>
</head>
<body>
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAbUExURQAAAAB81gCU/zKq/////9bW1oCAgGhoaAAAAGPLX8AAAAAJdFJOU///////////AFNPeBIAAAAJcEhZcwAADsAAAA7AAWrWiQkAAACdSURBVDhPxc9bDoUgEANQebP/FUuHMjBGY/B+3EYR7RH0qC/ZBc6HwCljgHO+xZIVSI2sYgHaG7EBWh8jWoxTrCBFdDJ+BD4lbIHxAcz8APAVLTsrZE4eQD5qzt3cAFTYokC4YCN9Gybgu4yAQtBFLQXHuHABA7JMeOEC/E0W5uy9gv4vo5QHK2i7yq2C8UABM4HmL+CSTXCTF1DrCX6+Gp9zB5dsAAAAAElFTkSuQmCC">
<h1>404 Not Found</h1>
<b>Akemi does not know where you are headed...</b><br><br>
<button onclick="window.location.href='/sliders'">Back to controls</button>
</body>
</html>

View File

@ -318,9 +318,6 @@ button {
height: 100%;
overscroll-behavior: none;
padding: 0 4px;
}
#Effects {
-webkit-overflow-scrolling: touch;
}
@ -432,11 +429,11 @@ button {
position: relative;
opacity: 1;
transition: opacity 0.5s linear, height 0.5s, transform 0.5s;
overflow: hidden;
}
.filter {
z-index: 1;
overflow: hidden;
}
/* Tooltip text */

View File

@ -125,19 +125,19 @@
let len = parseInt(d.getElementsByName("LC"+n)[0].value);
len += parseInt(d.getElementsByName("SL"+n)[0].value); // skipped LEDs are allocated too
if (t < 32) {
if (t==26 || t==29) len *= 2; // 16 bit LEDs
if (maxM < 10000 && d.getElementsByName("L0"+n)[0].value == 3) { //8266 DMA uses 5x the mem
if (t > 29) return len*20; //RGBW
if (t > 28) return len*20; //RGBW
return len*15;
} else if (maxM >= 10000) //ESP32 RMT uses double buffer?
{
if (t > 29) return len*8; //RGBW
if (t > 28) return len*8; //RGBW
return len*6;
}
if (t > 29) return len*4; //RGBW
if (t > 28) return len*4; //RGBW
return len*3;
}
if (t > 31 && t < 48) return 5;
if (t == 44 || t == 45) return len*4; //RGBW
return len*3;
}
@ -184,15 +184,16 @@
if (t > 31 && t < 48) d.getElementsByName("LC"+n)[0].value = 1; // for sanity change analog count just to 1 LED
}
gId("rf"+n).onclick = (t == 31) ? (()=>{return false}) : (()=>{}); // prevent change for TM1814
gRGBW |= isRGBW = ((t > 17 && t < 22) || t == 30 || t == 31 || (t > 40 && t < 46 && t != 43) || t == 88); // RGBW checkbox, TYPE_xxxx values from const.h
gRGBW |= isRGBW = ((t > 17 && t < 22) || (t > 28 && t < 32) || (t > 40 && t < 46 && t != 43) || t == 88); // RGBW checkbox, TYPE_xxxx values from const.h
gId("co"+n).style.display = ((t >= 80 && t < 96) || (t >= 40 && t < 48)) ? "none":"inline"; // hide color order for PWM
gId("dig"+n+"w").style.display = (t == 30 || t == 31) ? "inline":"none"; // show swap channels dropdown
if (!(t == 30 || t == 31)) d.getElementsByName("WO"+n)[0].value = 0; // reset swapping
gId("dig"+n+"w").style.display = (t > 28 && t < 32) ? "inline":"none"; // show swap channels dropdown
if (!(t > 28 && t < 32)) d.getElementsByName("WO"+n)[0].value = 0; // reset swapping
gId("dig"+n+"c").style.display = (t >= 40 && t < 48) ? "none":"inline"; // hide count for analog
gId("dig"+n+"r").style.display = (t >= 80 && t < 96) ? "none":"inline"; // hide reversed for virtual
gId("dig"+n+"s").style.display = ((t >= 80 && t < 96) || (t >= 40 && t < 48)) ? "none":"inline"; // hide skip 1st for virtual & analog
gId("dig"+n+"f").style.display = ((t >= 16 && t < 32) || (t >= 50 && t < 64)) ? "inline":"none"; // hide refresh
gId("dig"+n+"a").style.display = (isRGBW && t != 40) ? "inline":"none"; // auto calculate white
gId("dig"+n+"l").style.display = (t > 48 && t < 64) ? "inline":"none"; // bus clock speed
gId("rev"+n).innerHTML = (t >= 40 && t < 48) ? "Inverted output":"Reversed (rotated 180°)"; // change reverse text for analog
gId("psd"+n).innerHTML = (t >= 40 && t < 48) ? "Index:":"Start:"; // change analog start description
}
@ -330,6 +331,8 @@ ${i+1}:
<option value="31">TM1814</option>\
<option value="24">400kHz</option>\
<option value="25">TM1829</option>\
<option value="26">UCS8903</option>\
<option value="29">UCS8904 RGBW</option>\
<option value="50">WS2801</option>\
<option value="51">APA102</option>\
<option value="52">LPD8806</option>\
@ -358,6 +361,7 @@ ${i+1}:
<option value="5">GBR</option>
</select></div>
<div id="dig${i}w" style="display:none">Swap: <select name="WO${i}"><option value="0">None</option><option value="1">W & B</option><option value="2">W & G</option><option value="3">W & R</option></select></div>
<div id="dig${i}l" style="display:none">Clock: <select name="SP${i}"><option value="0">Slowest</option><option value="1">Slow</option><option value="2">Normal</option><option value="3">Fast</option><option value="4">Fastest</option></select></div>
<div>
<span id="psd${i}">Start:</span> <input type="number" name="LS${i}" id="ls${i}" class="l starts" min="0" max="8191" value="${lastEnd(i)}" oninput="startsDirty[${i}]=true;UI();" required />&nbsp;
<div id="dig${i}c" style="display:inline">Length: <input type="number" name="LC${i}" class="l" min="1" max="${maxPB}" value="1" required oninput="UI()" /></div><br>

View File

@ -1,63 +1,63 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content='width=device-width' name='viewport'>
<meta name="theme-color" content="#222222">
<title>Welcome!</title>
<style>
body {
font-family: Verdana, Helvetica, sans-serif;
text-align: center;
background-color: #222;
margin: 0;
color: #fff;
}
button {
outline: none;
cursor: pointer;
padding: 8px;
margin: 10px;
width: 230px;
text-transform: uppercase;
font-family: helvetica;
font-size: 19px;
background-color: #333;
color: white;
border: 0px solid white;
border-radius: 25px;
}
<head>
<meta charset="utf-8">
<meta content='width=device-width' name='viewport'>
<meta name="theme-color" content="#222222">
<title>Welcome!</title>
<style>
body {
font-family: Verdana, Helvetica, sans-serif;
text-align: center;
background-color: #222;
margin: 0;
color: #fff;
}
button {
outline: none;
cursor: pointer;
padding: 8px;
margin: 10px;
width: 230px;
text-transform: uppercase;
font-family: helvetica;
font-size: 19px;
background-color: #333;
color: white;
border: 0px solid white;
border-radius: 25px;
}
img {
width: 950px;
max-width: 82%;
image-rendering: pixelated;
image-rendering: crisp-edges;
margin: 4vh 0 0 0;
animation: fi 1s;
}
@keyframes fi {
from { opacity: 0; }
to { opacity: 1; }
}
.main {
animation: fi 1.5s .7s both;
}
</style>
</head>
<body>
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAAfCAMAAADazLOuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABLUExURQAAAAB81gCU/zKq///mo7sWMN8bO+ZIYtZaAP9rAP+HMsCiG+TAIOnMS0KqNU7KPnLUZOrq6v///4CAgGhoaL+/v6CgoExMTAAAAAlm4O8AAAAZdFJOU////////////////////////////////wABNAq3AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACN0lEQVRIS73VjVLCMBAEYIr8CYKkrdj3f1J37zaXFCpTO+piaDgbPq9px9VQ0qyrvKj4q6m0Zr1h+M7xF1zRmnWzqV9/0d2jttGotO1uv9dUObwej5oqp7fzWVPl8n69aprzoOUUbbvdIbV3OLwitXc6vSG1d7m8I3feSEN0j2CeNbOY4MxigjOLCc4sZsTV2l1cCyy4wIILLLjAxtykltq2rbTU+qi01N5rXNO2leaFORoija2l5MM5a02ac9Ya16Sk5tgaPrUpjZub0BL6YqSxKwbH77XUUmSkJXSl8QtaMuyJhq5maL5nTKVpZC13VmtMpTFT2g4vJjTuGfMzzXftiUZnhdtgb1xofvypRon5TjNnxYN9zJo6K5ruSIzQtGuVZn0x91rKvdHBvm39E7SyZ4y06Gz8BDBFKzsXmhcwyfsGZ9VpbhoiCinaxPNmGWmWWrNU2jB0q6HvOhN1JUtCixQtp2g51ZVUXIPS2RMAD++T2nY/DrDjOMDO4wC7jmNYj3d73nrXug8Yt9uNB8xNU1cKNXWlUFNXCjV1pZhGTE83m2vWfYf/NGj4Bg1zu5JD3/MnH5ZWfLOksbmGWGjgXMN5/C2GXYGFFW9Nmtle6Xut0Gm+JsayCj8z0nhjGvYJzVf4aSzmNYsr+u7Q2JIdoX3YOQjOslmsW1jJ3120nE9gfo79hTaNdcsqVR610lvO47pllae9ReZ805zKo2a3iaY5c75pTmVCA6dJ5H7N0sr/asPwBehb7ifEhusRAAAAAElFTkSuQmCC">
<div class="main">
<h1>Welcome to WLED!</h1>
<h3>Thank you for installing my application!</h3>
<b>Next steps:</b><br><br>
Connect the module to your local WiFi here!<br>
<button onclick="window.location.href='/settings/wifi'">WiFi settings</button><br>
<i>Just trying this out in AP mode?</i><br>
<button onclick="window.location.href='/sliders'">To the controls!</button><br>
</div>
</body>
img {
width: 950px;
max-width: 82%;
image-rendering: pixelated;
image-rendering: crisp-edges;
margin: 4vh 0 0 0;
animation: fi 1s;
}
@keyframes fi {
from { opacity: 0; }
to { opacity: 1; }
}
.main {
animation: fi 1.5s .7s both;
}
</style>
</head>
<body>
<img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG0AAAAfCAMAAADazLOuAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABLUExURQAAAAB81gCU/zKq///mo7sWMN8bO+ZIYtZaAP9rAP+HMsCiG+TAIOnMS0KqNU7KPnLUZOrq6v///4CAgGhoaL+/v6CgoExMTAAAAAlm4O8AAAAZdFJOU////////////////////////////////wABNAq3AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACN0lEQVRIS73VjVLCMBAEYIr8CYKkrdj3f1J37zaXFCpTO+piaDgbPq9px9VQ0qyrvKj4q6m0Zr1h+M7xF1zRmnWzqV9/0d2jttGotO1uv9dUObwej5oqp7fzWVPl8n69aprzoOUUbbvdIbV3OLwitXc6vSG1d7m8I3feSEN0j2CeNbOY4MxigjOLCc4sZsTV2l1cCyy4wIILLLjAxtykltq2rbTU+qi01N5rXNO2leaFORoija2l5MM5a02ac9Ya16Sk5tgaPrUpjZub0BL6YqSxKwbH77XUUmSkJXSl8QtaMuyJhq5maL5nTKVpZC13VmtMpTFT2g4vJjTuGfMzzXftiUZnhdtgb1xofvypRon5TjNnxYN9zJo6K5ruSIzQtGuVZn0x91rKvdHBvm39E7SyZ4y06Gz8BDBFKzsXmhcwyfsGZ9VpbhoiCinaxPNmGWmWWrNU2jB0q6HvOhN1JUtCixQtp2g51ZVUXIPS2RMAD++T2nY/DrDjOMDO4wC7jmNYj3d73nrXug8Yt9uNB8xNU1cKNXWlUFNXCjV1pZhGTE83m2vWfYf/NGj4Bg1zu5JD3/MnH5ZWfLOksbmGWGjgXMN5/C2GXYGFFW9Nmtle6Xut0Gm+JsayCj8z0nhjGvYJzVf4aSzmNYsr+u7Q2JIdoX3YOQjOslmsW1jJ3120nE9gfo79hTaNdcsqVR610lvO47pllae9ReZ805zKo2a3iaY5c75pTmVCA6dJ5H7N0sr/asPwBehb7ifEhusRAAAAAElFTkSuQmCC">
<div class="main">
<h1>Welcome to WLED!</h1>
<h3>Thank you for installing my application!</h3>
<b>Next steps:</b><br><br>
Connect the module to your local WiFi here!<br>
<button onclick="window.location.href='/settings/wifi'">WiFi settings</button><br>
<i>Just trying this out in AP mode?</i><br>
<button onclick="window.location.href='/sliders'">To the controls!</button><br>
</div>
</body>
</html>

View File

@ -173,14 +173,30 @@ void handleE131Packet(e131_packet_t* p, IPAddress clientIP, byte protocol){
break;
case DMX_MODE_PRESET: // 2 channel: [Dimmer,Preset]
if (uni != e131Universe || availDMXLen < 2) return;
applyPreset(e131_data[dataOffset+1], CALL_MODE_NOTIFICATION);
if (bri != e131_data[dataOffset]) {
bri = e131_data[dataOffset];
strip.setBrightness(bri, true);
{
if (uni != e131Universe || availDMXLen < 2) return;
// limit max. selectable preset to 250, even though DMX max. val is 255
uint8_t dmxValPreset = (e131_data[dataOffset+1] > 250 ? 250 : e131_data[dataOffset+1]);
// only apply preset if value changed
if (dmxValPreset != 0 && dmxValPreset != currentPreset &&
// only apply preset if not in playlist, or playlist changed
(currentPlaylist < 0 || dmxValPreset != currentPlaylist)) {
presetCycCurr = dmxValPreset;
unloadPlaylist(); // applying a preset unloads the playlist
applyPreset(dmxValPreset, CALL_MODE_NOTIFICATION);
}
// only change brightness if value changed
if (bri != e131_data[dataOffset]) {
bri = e131_data[dataOffset];
strip.setBrightness(scaledBri(bri), false);
stateUpdated(CALL_MODE_WS_SEND);
}
return;
break;
}
return;
break;
case DMX_MODE_EFFECT: // 15 channels [bri,effectCurrent,effectSpeed,effectIntensity,effectPalette,effectOption,R,G,B,R2,G2,B2,R3,G3,B3]
case DMX_MODE_EFFECT_W: // 18 channels, same as above but with extra +3 white channels [..,W,W2,W3]

View File

@ -7,246 +7,303 @@
*/
// Autogenerated from wled00/data/cpal/cpal.htm, do not edit!!
const uint16_t PAGE_cpal_L = 3831;
const uint16_t PAGE_cpal_L = 4750;
const uint8_t PAGE_cpal[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xbd, 0x5a, 0x7b, 0x73, 0xdb, 0x36,
0xb6, 0xff, 0xdf, 0x9f, 0x02, 0xa1, 0x77, 0x53, 0xb2, 0xa6, 0x28, 0x52, 0x12, 0xf5, 0x34, 0xbd,
0xd3, 0x3a, 0xee, 0x75, 0x76, 0xe2, 0x26, 0xd9, 0xe4, 0xba, 0xe9, 0xcd, 0x64, 0xa6, 0xb4, 0x08,
0x49, 0x6c, 0x28, 0x52, 0x17, 0x84, 0xfc, 0x88, 0xab, 0xef, 0xbe, 0xbf, 0x03, 0x90, 0x12, 0xa9,
0x87, 0x93, 0x76, 0xe7, 0xde, 0x36, 0x23, 0x82, 0xc0, 0x79, 0xbf, 0x70, 0x08, 0x98, 0x9d, 0x3e,
0x7b, 0xf1, 0xfa, 0xfc, 0xfd, 0xaf, 0x6f, 0x2e, 0xd8, 0x4c, 0xce, 0x93, 0x33, 0x76, 0x5a, 0x3e,
0x78, 0x18, 0xe1, 0x31, 0xe7, 0x32, 0xc4, 0x8a, 0x5c, 0x34, 0xf8, 0xff, 0x2e, 0xe3, 0xdb, 0xc0,
0x38, 0x0f, 0xc7, 0x33, 0xde, 0x38, 0xcf, 0x52, 0x29, 0xb2, 0xc4, 0x60, 0x47, 0x63, 0x8c, 0x78,
0x2a, 0x03, 0x23, 0xcd, 0x1a, 0x63, 0x5a, 0xb3, 0x19, 0x46, 0xb9, 0xcc, 0x04, 0x46, 0xf3, 0x65,
0x2e, 0x1b, 0x82, 0xdf, 0x86, 0x49, 0x1c, 0x85, 0x92, 0x1b, 0xfb, 0x08, 0xbe, 0x11, 0xe1, 0x74,
0x1e, 0xee, 0xa3, 0xb4, 0x17, 0xfc, 0xe2, 0x7e, 0x11, 0x0b, 0x9e, 0x1b, 0x6c, 0x0d, 0xee, 0x12,
0x9c, 0x8c, 0x65, 0xc2, 0xcf, 0x8e, 0x7e, 0x79, 0x75, 0xf1, 0x82, 0x9d, 0x83, 0x6b, 0x36, 0x67,
0x6f, 0xc2, 0x84, 0x4b, 0xc9, 0xd9, 0x45, 0x14, 0x43, 0x9a, 0xd3, 0xa6, 0x06, 0x61, 0xa7, 0xf9,
0x58, 0xc4, 0x0b, 0xc9, 0xe4, 0xc3, 0x82, 0x07, 0x86, 0xe4, 0xf7, 0xb2, 0xf9, 0x7b, 0x78, 0x1b,
0xea, 0x59, 0xe3, 0xec, 0x68, 0xb2, 0x4c, 0xc7, 0x32, 0xce, 0x52, 0x36, 0x7d, 0x19, 0x99, 0xdc,
0x7a, 0x14, 0x5c, 0x2e, 0x45, 0xca, 0x22, 0x67, 0xca, 0xe5, 0x45, 0xc2, 0xe7, 0xe0, 0xf9, 0xe3,
0x83, 0x5a, 0x5a, 0xad, 0x41, 0xc7, 0x17, 0x35, 0xc8, 0xb1, 0xe0, 0xd0, 0xb6, 0x00, 0x26, 0xc0,
0xdb, 0x50, 0xb0, 0x28, 0x88, 0xb2, 0xf1, 0x92, 0x66, 0x8e, 0x4e, 0x9b, 0x9a, 0x1b, 0x09, 0x23,
0x1f, 0x48, 0xee, 0x9b, 0x2c, 0x7a, 0x78, 0x9c, 0x40, 0xa3, 0xc6, 0x24, 0x9c, 0xc7, 0xc9, 0xc3,
0xf0, 0x07, 0x11, 0x87, 0x89, 0x9d, 0x87, 0x69, 0xde, 0xc8, 0xb9, 0x88, 0x27, 0xa3, 0x9b, 0x70,
0xfc, 0x79, 0x2a, 0xb2, 0x65, 0x1a, 0x35, 0xc6, 0x59, 0x92, 0x89, 0xe1, 0xb1, 0xe7, 0x79, 0x23,
0x85, 0x92, 0xc7, 0x5f, 0xf8, 0xd0, 0xeb, 0x2e, 0xee, 0x47, 0xc5, 0x4a, 0x14, 0x45, 0xa3, 0x79,
0x28, 0xa6, 0x71, 0x3a, 0x74, 0x99, 0xe7, 0x62, 0xe1, 0x49, 0xd2, 0x49, 0x9c, 0xf2, 0xc6, 0x8c,
0xc7, 0xd3, 0x99, 0x1c, 0x3a, 0xfe, 0xea, 0x78, 0x11, 0x0a, 0x48, 0xd9, 0x20, 0x03, 0x87, 0x58,
0x12, 0x8f, 0x8b, 0x2c, 0x8f, 0x49, 0xcf, 0xa1, 0xe0, 0x49, 0x28, 0xe3, 0x5b, 0x3e, 0xba, 0x8b,
0x23, 0x39, 0x1b, 0x7a, 0xae, 0xfb, 0xf7, 0x51, 0x81, 0xd8, 0x02, 0x9b, 0xd5, 0xf1, 0x4d, 0x26,
0x61, 0xfa, 0xf3, 0x5d, 0xcc, 0xf0, 0x26, 0xcf, 0x92, 0xa5, 0xe4, 0x85, 0x5c, 0x0d, 0x99, 0x2d,
0x86, 0xbe, 0x42, 0x99, 0x8a, 0x30, 0x8a, 0x89, 0xdf, 0x4d, 0x76, 0xff, 0xb8, 0x4b, 0x97, 0xc6,
0x2b, 0x47, 0x29, 0xd6, 0x00, 0xee, 0xe7, 0xbd, 0x44, 0x0b, 0xd8, 0x36, 0xa9, 0xaa, 0x49, 0xf4,
0x30, 0xba, 0xc9, 0x44, 0xc4, 0x45, 0x83, 0xe8, 0x2f, 0xf3, 0x61, 0x9b, 0x66, 0xb6, 0x8d, 0x98,
0xc7, 0xc9, 0x2d, 0x17, 0x05, 0xe4, 0xb0, 0xb5, 0xb8, 0x67, 0xa0, 0x18, 0x47, 0x4c, 0x4c, 0x6f,
0x42, 0xb3, 0xdb, 0xb7, 0xf5, 0x3f, 0xc7, 0xb7, 0x46, 0x5a, 0xe0, 0xbf, 0x8f, 0xa4, 0x80, 0xe1,
0x26, 0x99, 0x98, 0x0f, 0xd5, 0x08, 0xf6, 0xe0, 0xbf, 0x9a, 0x0d, 0xac, 0x58, 0xa3, 0x2f, 0x8d,
0x38, 0x8d, 0xf8, 0xfd, 0xb0, 0x55, 0xca, 0xbb, 0x88, 0xc7, 0x90, 0xf7, 0xab, 0x62, 0xf7, 0xfe,
0x6f, 0xa5, 0xf6, 0x48, 0xec, 0x8a, 0x6c, 0x11, 0x47, 0x5e, 0xf0, 0xaf, 0x4a, 0xe5, 0xaf, 0xa5,
0xf2, 0xbf, 0x4d, 0xaa, 0xe3, 0xc9, 0x64, 0x52, 0xca, 0xd4, 0x5e, 0xcb, 0x74, 0x3c, 0xb8, 0x69,
0xf5, 0x5b, 0x7d, 0x25, 0x49, 0xab, 0x55, 0x97, 0xa4, 0x6a, 0xa5, 0xc3, 0x82, 0x78, 0x6b, 0x41,
0xbc, 0xb5, 0x20, 0x6a, 0xb8, 0xa3, 0x9c, 0x57, 0x8a, 0x59, 0xc9, 0x90, 0xbd, 0x79, 0xb3, 0x72,
0x6e, 0x96, 0x08, 0xd4, 0x74, 0x9c, 0x84, 0x79, 0xfe, 0xb8, 0x08, 0xa3, 0x28, 0x4e, 0xa7, 0x43,
0xd7, 0x56, 0xff, 0xaf, 0x53, 0xa7, 0x78, 0x85, 0xa9, 0x65, 0x3c, 0x0e, 0x93, 0x06, 0xaa, 0xd8,
0x34, 0x1d, 0xea, 0x10, 0x3f, 0x40, 0x77, 0x3b, 0x01, 0x58, 0xbe, 0x08, 0xd3, 0xc7, 0x28, 0xce,
0x17, 0x49, 0xf8, 0x30, 0x8c, 0x53, 0x95, 0x6a, 0x93, 0x84, 0xdf, 0x8f, 0x14, 0xb1, 0x46, 0x2c,
0xf9, 0x3c, 0x1f, 0x8e, 0x11, 0xfe, 0xf0, 0x67, 0xc5, 0x8c, 0x4f, 0xe6, 0x6b, 0x25, 0xe9, 0xe1,
0xfb, 0x6d, 0xf9, 0xe6, 0x71, 0x14, 0x25, 0x7c, 0x75, 0x1c, 0xa7, 0x93, 0x6c, 0xcd, 0xd9, 0x30,
0x46, 0x54, 0xe9, 0x0a, 0x90, 0xff, 0x8c, 0xdf, 0x6e, 0x35, 0xa8, 0xe4, 0x34, 0xd2, 0x15, 0x20,
0xd5, 0x8a, 0xe2, 0xad, 0xa8, 0xde, 0xa9, 0x32, 0xc7, 0x4e, 0x9b, 0xc5, 0xb6, 0x42, 0xf5, 0x0e,
0x8f, 0x28, 0xbe, 0x65, 0x71, 0x14, 0x18, 0x77, 0x22, 0x5c, 0x18, 0x4c, 0x01, 0x05, 0xc6, 0x3c,
0xbc, 0x6f, 0x68, 0x7f, 0xf7, 0x89, 0x98, 0x51, 0xc0, 0x1d, 0x15, 0xcb, 0xa5, 0x4a, 0xca, 0x8a,
0xbf, 0xa3, 0xd4, 0xc7, 0x93, 0x87, 0x46, 0xb1, 0x19, 0x14, 0x9a, 0x11, 0xca, 0xcc, 0xdb, 0x8f,
0xb1, 0x6b, 0x77, 0x82, 0xce, 0x6f, 0xa7, 0x6b, 0x70, 0xcd, 0xbb, 0x4d, 0xf5, 0xb4, 0xac, 0x2b,
0x34, 0x2e, 0x94, 0x14, 0x6a, 0x06, 0x13, 0x06, 0xbb, 0x8d, 0xf9, 0xdd, 0x8f, 0xd9, 0x3d, 0x76,
0x20, 0xe6, 0xb2, 0x76, 0x0b, 0xff, 0x8c, 0xb3, 0xd3, 0x45, 0x28, 0x67, 0xec, 0x68, 0x12, 0x27,
0x49, 0x60, 0x1c, 0xbb, 0x6e, 0x1b, 0xd6, 0x35, 0x50, 0xfb, 0x8d, 0xab, 0x2e, 0x6b, 0xb5, 0x66,
0xfd, 0xdb, 0xce, 0x65, 0xf7, 0xcb, 0x95, 0xd7, 0x61, 0x5e, 0x67, 0xd6, 0xb9, 0xed, 0xcf, 0x1a,
0x1d, 0xbc, 0xf5, 0x51, 0xa4, 0xd7, 0x6f, 0xad, 0x16, 0xeb, 0x12, 0xdc, 0xac, 0xd1, 0xff, 0x62,
0x34, 0xcf, 0x60, 0xbb, 0xdb, 0xe9, 0xd9, 0x11, 0x44, 0x44, 0x24, 0x29, 0x63, 0x91, 0x09, 0x8d,
0xb3, 0x7d, 0x3b, 0xdd, 0x39, 0xed, 0x3b, 0xb4, 0xd5, 0x11, 0xac, 0xb2, 0xb6, 0x47, 0xbf, 0xb0,
0x5e, 0x69, 0x43, 0xc2, 0xdf, 0x2e, 0xef, 0x46, 0xc5, 0x11, 0xd5, 0x62, 0x0c, 0x65, 0x0a, 0xd4,
0x2a, 0x85, 0x3f, 0xe7, 0x85, 0x92, 0xee, 0x56, 0x5a, 0x28, 0x93, 0x93, 0x3e, 0x4a, 0xa0, 0x38,
0x7a, 0x87, 0x31, 0xcd, 0x25, 0xe1, 0x0d, 0x4f, 0x18, 0xaa, 0x2b, 0x49, 0x99, 0xbc, 0x84, 0x9a,
0x85, 0x6a, 0xc7, 0x43, 0x48, 0xa1, 0x56, 0x01, 0x15, 0xa7, 0x8b, 0xa5, 0x64, 0x5a, 0x15, 0x02,
0x62, 0x47, 0x7a, 0x2f, 0x4f, 0x97, 0xf3, 0x1b, 0xd0, 0x66, 0xf3, 0x38, 0xa5, 0xae, 0x80, 0x21,
0x90, 0x02, 0x63, 0x60, 0xac, 0x65, 0xde, 0xbf, 0x85, 0xee, 0x16, 0xaf, 0x34, 0x4b, 0xb9, 0x0e,
0xfa, 0xbb, 0xa2, 0x40, 0xbb, 0xee, 0x9e, 0xf4, 0xd1, 0x71, 0xd2, 0xa1, 0x10, 0x65, 0x47, 0x68,
0x71, 0x96, 0xbc, 0xe8, 0x45, 0x4a, 0xf3, 0xaf, 0x3d, 0x96, 0xf3, 0x54, 0xab, 0xc8, 0xa8, 0xe4,
0xa0, 0xdc, 0x41, 0xe7, 0x14, 0x39, 0x84, 0xbd, 0xe3, 0xbf, 0x17, 0x49, 0x16, 0x46, 0xa6, 0x45,
0xc6, 0x2e, 0xbd, 0x46, 0xd6, 0x3e, 0xaa, 0x59, 0xfd, 0xaf, 0x19, 0x9d, 0x2a, 0x00, 0x1a, 0x1a,
0x76, 0x4e, 0x2c, 0xc1, 0x9a, 0xc9, 0x19, 0x67, 0xa5, 0x87, 0x99, 0xcc, 0x18, 0xea, 0x1e, 0x4b,
0xf9, 0x1d, 0x53, 0x26, 0x60, 0x39, 0xca, 0x35, 0x17, 0x4e, 0x01, 0x4e, 0xb0, 0x6a, 0x9e, 0x47,
0x0c, 0xc1, 0xc0, 0x60, 0xfa, 0xec, 0x4e, 0xcd, 0x6a, 0x38, 0xc2, 0x1f, 0xcf, 0xc2, 0x74, 0x5a,
0x80, 0x55, 0xf1, 0xea, 0x38, 0xa8, 0xcd, 0x28, 0x4f, 0x88, 0x4b, 0x66, 0x86, 0x69, 0x44, 0x7d,
0xdb, 0x24, 0x16, 0x73, 0x8b, 0x08, 0xe8, 0xad, 0xc8, 0x61, 0xef, 0xf0, 0x1c, 0x4b, 0xb6, 0x28,
0xe2, 0x58, 0x3b, 0xb2, 0x26, 0x49, 0x92, 0x2d, 0x23, 0x16, 0x8f, 0x49, 0x89, 0x8c, 0x2d, 0x95,
0xd1, 0x1c, 0x76, 0x74, 0x7a, 0x23, 0xce, 0x90, 0x04, 0x82, 0x02, 0x3a, 0x79, 0x00, 0x27, 0xb6,
0xcc, 0xf9, 0x76, 0x56, 0xbc, 0x7c, 0x91, 0x33, 0x84, 0x3c, 0x72, 0x14, 0xa8, 0x1b, 0xa7, 0x8c,
0xc1, 0x4d, 0x22, 0xc8, 0x1b, 0x5e, 0x61, 0xf9, 0x23, 0x87, 0xfd, 0x9c, 0x49, 0xfe, 0xcc, 0x56,
0x18, 0xa7, 0xcb, 0x33, 0xea, 0x5e, 0x4f, 0x9b, 0x4b, 0x58, 0xf0, 0x86, 0x2b, 0xda, 0x69, 0x4c,
0x26, 0x5e, 0x2e, 0x24, 0xf4, 0xcb, 0xd1, 0x8f, 0xf2, 0x31, 0x67, 0x13, 0x01, 0x56, 0x2e, 0x53,
0x9a, 0x85, 0x69, 0x9a, 0x49, 0xc6, 0xef, 0xc7, 0x3c, 0xe2, 0x6c, 0xe0, 0xb0, 0xf7, 0xb3, 0x38,
0x2f, 0x94, 0x61, 0x77, 0xa8, 0x08, 0xf0, 0x01, 0xa4, 0x04, 0xb1, 0xe5, 0x82, 0xda, 0xe1, 0x88,
0x7c, 0xa2, 0xf2, 0x58, 0xf0, 0x9b, 0x0c, 0x98, 0x26, 0x6c, 0xa4, 0xda, 0x5c, 0x48, 0x9e, 0x4a,
0x8b, 0x14, 0xfc, 0x8b, 0x41, 0xb0, 0x95, 0xb9, 0x3a, 0xa4, 0x4e, 0x9b, 0x45, 0xd9, 0xfd, 0x4a,
0x07, 0x4c, 0xdd, 0x6a, 0x19, 0x26, 0x54, 0xdf, 0xa8, 0x11, 0xae, 0x57, 0x06, 0xcb, 0x26, 0xeb,
0x8d, 0x83, 0x86, 0x67, 0x2f, 0xee, 0xcf, 0xb3, 0x24, 0x78, 0x5c, 0xd9, 0xb2, 0x78, 0x0a, 0x78,
0x32, 0xa8, 0xa0, 0x53, 0xdf, 0xfc, 0x23, 0x25, 0x1d, 0xb6, 0x58, 0x38, 0x14, 0x93, 0xff, 0x02,
0x84, 0x69, 0xd9, 0x25, 0xcc, 0x2b, 0x9e, 0x4e, 0xe5, 0x2c, 0x20, 0x3c, 0x47, 0xe5, 0x94, 0x3d,
0x7f, 0x3d, 0x99, 0xe4, 0xc1, 0x15, 0x2a, 0xa9, 0xa3, 0xd2, 0xd5, 0xac, 0x83, 0x36, 0x5b, 0x7e,
0xb7, 0xd9, 0xb2, 0x1a, 0xfe, 0x68, 0xdd, 0x80, 0x03, 0xf9, 0xf5, 0xc4, 0xa4, 0x16, 0xfc, 0xff,
0x8d, 0xb9, 0x0d, 0x9b, 0xa3, 0x51, 0xe1, 0x4e, 0x92, 0x4d, 0x4d, 0x85, 0x54, 0xfd, 0x20, 0x48,
0xe2, 0xcf, 0xaf, 0xd3, 0xff, 0x2a, 0x30, 0xf5, 0xc7, 0xc1, 0x3c, 0xbb, 0xe5, 0xef, 0x45, 0x98,
0xcf, 0x10, 0x27, 0x98, 0xb1, 0x91, 0x7d, 0xe7, 0x66, 0x85, 0x0f, 0x77, 0x32, 0x10, 0xe1, 0xf2,
0x43, 0xb3, 0xce, 0xf1, 0x7b, 0x70, 0xb4, 0x2a, 0xb4, 0x15, 0x1e, 0x28, 0x22, 0xba, 0x99, 0x24,
0x17, 0x88, 0xe0, 0x19, 0x95, 0xb1, 0x34, 0x97, 0x2c, 0xab, 0x29, 0x8f, 0x08, 0x15, 0x0f, 0x3a,
0xb7, 0x32, 0xf1, 0x43, 0x92, 0x98, 0x46, 0xad, 0x91, 0x36, 0xac, 0x51, 0x3c, 0x31, 0x33, 0x07,
0xf5, 0xf6, 0x02, 0xdf, 0x5b, 0xa6, 0x29, 0xed, 0xcc, 0x0a, 0xce, 0x1e, 0x25, 0x59, 0xed, 0x07,
0x29, 0x45, 0x8c, 0x2e, 0x89, 0x9b, 0x06, 0x62, 0x35, 0x6c, 0x48, 0xb1, 0xe4, 0xd8, 0xf9, 0x0d,
0x2b, 0x08, 0xf8, 0xf3, 0xe7, 0x26, 0x78, 0xba, 0xd6, 0xca, 0xb2, 0x33, 0x27, 0x51, 0x42, 0x9e,
0x79, 0xbd, 0x72, 0xd6, 0x16, 0x96, 0xfe, 0x12, 0x22, 0xea, 0xfc, 0xcc, 0x7d, 0xfe, 0x9c, 0x9f,
0xb6, 0x7c, 0xdf, 0x02, 0x1b, 0x93, 0x42, 0x2b, 0x0d, 0xbc, 0x51, 0x7a, 0x1a, 0x78, 0xdd, 0xe7,
0xcf, 0xe5, 0x29, 0x86, 0x27, 0x27, 0x96, 0x8a, 0x30, 0x25, 0xda, 0x95, 0x96, 0xec, 0x24, 0xb5,
0xfe, 0xf8, 0xc3, 0x94, 0x41, 0x6a, 0x8d, 0x78, 0x82, 0x94, 0x96, 0x01, 0x2f, 0x34, 0x0c, 0xb1,
0xad, 0x1a, 0x27, 0xa6, 0xd7, 0xed, 0xf5, 0x7a, 0x2d, 0xcf, 0xff, 0x5e, 0x1b, 0x10, 0xe9, 0x97,
0xcd, 0x4d, 0xeb, 0xf4, 0xd4, 0xb5, 0x1c, 0x99, 0xbd, 0x83, 0xe8, 0xe9, 0x14, 0x30, 0x96, 0x83,
0xde, 0xee, 0x9d, 0x0c, 0x85, 0x34, 0xbb, 0x36, 0x8a, 0xb3, 0x65, 0xc7, 0x01, 0xbe, 0xd5, 0x0c,
0xca, 0x77, 0xd2, 0xde, 0x51, 0x0d, 0xe0, 0xcf, 0xe1, 0x1c, 0x79, 0x50, 0xb3, 0x8c, 0x1d, 0x3b,
0xaa, 0x46, 0x54, 0x45, 0x92, 0x1b, 0xca, 0xa0, 0xe3, 0xe4, 0x87, 0x6d, 0x64, 0xf3, 0x27, 0x00,
0x40, 0xd3, 0xb0, 0xc3, 0x03, 0x00, 0x3a, 0x02, 0x0c, 0x1d, 0x84, 0x04, 0x03, 0x67, 0x5f, 0xdc,
0x52, 0x28, 0xc4, 0x39, 0x12, 0x9c, 0x0b, 0x98, 0x89, 0x8a, 0xa2, 0x61, 0xa3, 0xc4, 0x2d, 0x7e,
0x5a, 0x0a, 0x14, 0x47, 0xf1, 0x46, 0x64, 0x0b, 0x45, 0x8f, 0x0a, 0x04, 0xfc, 0x31, 0x91, 0x4f,
0x87, 0xef, 0xf7, 0xdc, 0x3a, 0x51, 0x0c, 0x4e, 0x0c, 0xec, 0x5d, 0x85, 0x5d, 0x13, 0x65, 0x18,
0xb5, 0xb5, 0xc2, 0x32, 0x89, 0xa3, 0x8b, 0x83, 0x32, 0x80, 0x61, 0x27, 0x8e, 0xde, 0xdf, 0x42,
0x8c, 0x76, 0x4c, 0xa6, 0xfb, 0x77, 0x02, 0x5a, 0x9b, 0xec, 0x8d, 0x9e, 0xaa, 0x9b, 0x2c, 0xd9,
0xa3, 0x8c, 0xe6, 0x67, 0xeb, 0x7a, 0x58, 0xa6, 0xcb, 0x7e, 0xd0, 0x42, 0xef, 0xf1, 0xe2, 0x3c,
0xf9, 0x6c, 0x15, 0x42, 0xe7, 0x55, 0x6f, 0xe6, 0x87, 0x44, 0x5b, 0x3b, 0x35, 0xdf, 0x96, 0x70,
0xaf, 0x6b, 0xf3, 0x27, 0x98, 0x67, 0x09, 0x71, 0x07, 0x48, 0xc5, 0xd6, 0x55, 0xc3, 0x43, 0xf2,
0x03, 0x2b, 0x85, 0xc4, 0x51, 0x55, 0x62, 0x49, 0xc9, 0x21, 0x29, 0x39, 0x90, 0x3b, 0x51, 0x55,
0xfc, 0xda, 0x37, 0x9a, 0x61, 0x47, 0x4a, 0x70, 0x3d, 0xb9, 0x57, 0xe6, 0xe8, 0xb0, 0xcc, 0x1c,
0x19, 0xad, 0x31, 0xcf, 0x49, 0x71, 0x3a, 0x8e, 0x20, 0xf8, 0x03, 0x62, 0x6e, 0xe2, 0x68, 0xd3,
0x2d, 0x29, 0xbc, 0xa0, 0x88, 0x81, 0xb5, 0xee, 0x87, 0xd6, 0xab, 0x05, 0x28, 0x5c, 0x2c, 0xd0,
0xfa, 0x9c, 0xcf, 0xe2, 0x24, 0x32, 0x13, 0xeb, 0xe0, 0x52, 0x7c, 0x78, 0x09, 0x49, 0xe0, 0x3e,
0x0b, 0xe4, 0xf3, 0xe7, 0x30, 0x92, 0x7a, 0x1e, 0x02, 0x8c, 0x2c, 0xbb, 0x6a, 0xce, 0x79, 0xf8,
0x99, 0x5f, 0xf1, 0x17, 0x22, 0x9c, 0x9a, 0x54, 0x5c, 0x28, 0x9d, 0x2d, 0xf8, 0x8d, 0xcb, 0xf7,
0x59, 0x96, 0xc8, 0x78, 0xa1, 0xad, 0x58, 0x5d, 0xab, 0xc7, 0xa0, 0x59, 0x29, 0xb8, 0xdb, 0x2b,
0x8f, 0xda, 0x95, 0xfc, 0x4f, 0xd6, 0xda, 0x9d, 0x9d, 0x92, 0x57, 0x2b, 0xaf, 0xa0, 0xca, 0xbb,
0x2e, 0xe2, 0x74, 0xbe, 0xf4, 0x51, 0x7c, 0x82, 0x64, 0x8e, 0xe0, 0xd8, 0xee, 0xc7, 0xbc, 0x5e,
0x1f, 0xed, 0x5a, 0x9e, 0x59, 0x96, 0xb6, 0xfd, 0xe8, 0xcf, 0xe1, 0x15, 0x73, 0xc0, 0xde, 0xef,
0xd1, 0xcc, 0x56, 0xb4, 0x9e, 0x5e, 0x7c, 0xa2, 0xc8, 0x65, 0x65, 0x9a, 0xa6, 0x81, 0x82, 0x7d,
0x6a, 0x57, 0xb1, 0xc3, 0xaf, 0xd4, 0xac, 0xb4, 0x30, 0xe0, 0xc7, 0xf0, 0x13, 0x78, 0x93, 0x09,
0x3f, 0xa6, 0x18, 0xad, 0x36, 0xa1, 0xa3, 0x93, 0x21, 0x30, 0xe8, 0xe3, 0x33, 0x14, 0x8d, 0x72,
0xda, 0x44, 0xd7, 0xa7, 0x3e, 0xda, 0x0c, 0xfb, 0xf5, 0xcd, 0xef, 0xb4, 0xcf, 0x63, 0x52, 0xc4,
0x3c, 0x37, 0x15, 0x3d, 0x6b, 0xe3, 0x84, 0x8f, 0xdc, 0x96, 0x9f, 0xc8, 0x0d, 0x75, 0x8a, 0x27,
0xc1, 0x6f, 0x36, 0xfb, 0xdb, 0xa3, 0x5c, 0xe1, 0x87, 0xaf, 0x16, 0xf7, 0xbf, 0xed, 0xf0, 0x3c,
0x09, 0x0c, 0xcb, 0xa8, 0x85, 0xf0, 0xb6, 0xcd, 0x82, 0x3a, 0xc2, 0x26, 0xb6, 0xb6, 0xca, 0x38,
0xed, 0xeb, 0xdc, 0xa1, 0x49, 0x7a, 0x0b, 0xa7, 0x21, 0x01, 0x55, 0x63, 0x51, 0x57, 0xa0, 0xfd,
0x0d, 0xc5, 0x1e, 0x44, 0x5b, 0x45, 0x84, 0x93, 0x8b, 0x71, 0x71, 0x1a, 0x59, 0x8b, 0x8c, 0x75,
0x50, 0x50, 0x0c, 0xa8, 0x72, 0x51, 0x63, 0xb5, 0x38, 0xc0, 0xe9, 0x56, 0xd5, 0xe8, 0x7d, 0xdc,
0xaa, 0x2d, 0x51, 0xf5, 0x7c, 0xb4, 0x92, 0x8d, 0xa0, 0x47, 0x4d, 0x80, 0x0c, 0x5c, 0xf4, 0x2d,
0xdf, 0xd2, 0xa9, 0x65, 0x81, 0x70, 0x94, 0xff, 0xec, 0x14, 0x23, 0x55, 0x64, 0xc3, 0x20, 0x6b,
0xa4, 0x27, 0xde, 0xa6, 0xfd, 0x8b, 0x4d, 0x61, 0x3d, 0xa2, 0xfb, 0x10, 0x7f, 0xfc, 0x71, 0x87,
0xcf, 0x8d, 0xec, 0xce, 0xd1, 0x42, 0x3a, 0x0b, 0xa1, 0x06, 0x2f, 0xf8, 0x24, 0x5c, 0x26, 0x44,
0x4d, 0x36, 0x04, 0x69, 0x8a, 0xb9, 0x0f, 0xb6, 0x0c, 0x36, 0xe3, 0x79, 0x86, 0x2f, 0x87, 0x37,
0x59, 0xfe, 0x72, 0xdd, 0xb4, 0x05, 0xb2, 0x61, 0x82, 0x09, 0x50, 0x10, 0xa3, 0x58, 0xa9, 0xc6,
0xe7, 0x2e, 0x74, 0x33, 0x54, 0x6d, 0x9a, 0x9d, 0x25, 0xd1, 0xfb, 0x02, 0x9e, 0x3f, 0x1d, 0xf0,
0x05, 0x59, 0x55, 0xb3, 0xf4, 0x50, 0x57, 0xae, 0x0d, 0x05, 0xd4, 0x3b, 0x3d, 0xc0, 0xee, 0x50,
0x82, 0x74, 0x3b, 0xff, 0x90, 0xf8, 0xaa, 0x78, 0xad, 0xfa, 0x84, 0xc0, 0x1d, 0x96, 0x54, 0xbc,
0x41, 0xab, 0xba, 0xd0, 0x1b, 0x56, 0x5e, 0xda, 0xca, 0x57, 0xfb, 0x7a, 0x83, 0x50, 0xa5, 0x56,
0x41, 0xa3, 0xda, 0x14, 0x14, 0x71, 0xf3, 0x97, 0xca, 0x88, 0x62, 0x52, 0xe5, 0xf8, 0x55, 0x62,
0xb5, 0x8d, 0xed, 0x3f, 0xa0, 0xb3, 0x55, 0x13, 0x0f, 0x91, 0xe1, 0x4f, 0xf6, 0x6e, 0xa5, 0x35,
0x76, 0x37, 0x0b, 0xbe, 0xbb, 0x49, 0x54, 0x62, 0x3c, 0xc1, 0xc6, 0x10, 0x39, 0x59, 0xaa, 0x62,
0x63, 0xb9, 0x08, 0xd2, 0x65, 0x92, 0xd8, 0xeb, 0x09, 0xca, 0x20, 0x35, 0xb5, 0xe2, 0xe5, 0x14,
0xc2, 0x34, 0x0d, 0x4a, 0xf4, 0xc3, 0x79, 0x66, 0xf2, 0x80, 0x7f, 0x3d, 0xac, 0xa1, 0x61, 0x19,
0xca, 0x55, 0x21, 0xb6, 0x25, 0x88, 0x57, 0x95, 0xd2, 0xb3, 0xab, 0xdf, 0xe3, 0xb6, 0x69, 0xd4,
0x9d, 0x89, 0x61, 0xff, 0x86, 0xca, 0xf7, 0x64, 0x34, 0xaf, 0xd8, 0x90, 0x3d, 0x01, 0x43, 0xdb,
0x81, 0xb5, 0xfa, 0xad, 0x62, 0xad, 0x7a, 0x47, 0x52, 0x94, 0x04, 0x6a, 0x8d, 0xf0, 0xa5, 0x4a,
0x9d, 0x11, 0xa2, 0xf7, 0x45, 0x25, 0x2a, 0x82, 0x6a, 0x0d, 0xb3, 0x69, 0xf5, 0x7c, 0xe3, 0x79,
0xb5, 0x5d, 0x6e, 0x63, 0xd4, 0xc2, 0x44, 0x73, 0x2b, 0x23, 0x04, 0xb1, 0xb1, 0x21, 0x51, 0x8d,
0xe1, 0x3f, 0x4b, 0x68, 0x1d, 0x6a, 0xdb, 0xe4, 0xbe, 0x95, 0xd0, 0x81, 0xc8, 0xc5, 0x37, 0x74,
0x1a, 0x71, 0xa1, 0xd3, 0xf7, 0x43, 0xe0, 0xb9, 0xc5, 0xc4, 0x87, 0x9a, 0x19, 0x0e, 0x55, 0x4c,
0xe7, 0xbe, 0x51, 0xc3, 0x2f, 0x90, 0x7f, 0xfd, 0x36, 0xe4, 0x87, 0x13, 0xaf, 0x6d, 0x4b, 0xd5,
0x6f, 0x4a, 0x8a, 0x44, 0x83, 0x5e, 0x52, 0x34, 0x94, 0x97, 0xef, 0xaf, 0x5e, 0x05, 0xdf, 0xa9,
0x93, 0xd2, 0xda, 0xc1, 0x67, 0xab, 0x83, 0x7f, 0x06, 0xbb, 0x9f, 0x27, 0x69, 0x1e, 0x18, 0x74,
0x55, 0x37, 0x6c, 0x36, 0xef, 0xee, 0xee, 0x9c, 0xbb, 0xb6, 0x93, 0x89, 0x69, 0xb3, 0xe5, 0xba,
0x2e, 0x9d, 0x61, 0x1a, 0x4c, 0x7d, 0x5f, 0x07, 0x46, 0x5b, 0x9d, 0x98, 0xe9, 0xa3, 0xd5, 0xe2,
0xad, 0x38, 0x36, 0x2d, 0x4e, 0x38, 0xe8, 0xf0, 0x74, 0x78, 0xdc, 0xef, 0x03, 0xd1, 0x1d, 0x61,
0x52, 0x64, 0x9f, 0xf9, 0x90, 0x61, 0x82, 0xfe, 0x2b, 0x27, 0x8a, 0x23, 0x62, 0xd6, 0xa0, 0x23,
0xe9, 0x62, 0x2a, 0x82, 0xbc, 0xa1, 0x10, 0xe1, 0xc3, 0x90, 0xb9, 0x8e, 0x67, 0xb3, 0xfe, 0x48,
0x1f, 0xbd, 0x0e, 0xec, 0xf6, 0x75, 0xe7, 0xb2, 0x73, 0xdd, 0xbd, 0xf4, 0xaf, 0xbd, 0xc1, 0x0f,
0x2d, 0xbb, 0x05, 0xb9, 0x5d, 0xdb, 0x65, 0x3d, 0xbb, 0xe5, 0x5d, 0x7a, 0xbd, 0xca, 0x8c, 0x37,
0xb0, 0xbd, 0x01, 0x00, 0x5b, 0x2e, 0x30, 0x3c, 0xff, 0xba, 0x7d, 0x39, 0xb8, 0xea, 0xd9, 0x5d,
0x00, 0x01, 0xf3, 0xb2, 0x77, 0xdd, 0x05, 0xb1, 0xfe, 0xb5, 0xd7, 0xbb, 0xf4, 0xbc, 0xeb, 0x3e,
0xd6, 0x60, 0x2c, 0xfd, 0xea, 0xe3, 0xd5, 0x6b, 0xff, 0xcf, 0xfa, 0xc4, 0xf6, 0x3b, 0xd8, 0x4d,
0xd7, 0x9c, 0xf2, 0xbc, 0x3c, 0x30, 0xca, 0x9b, 0x0d, 0x63, 0xbd, 0xa6, 0x8a, 0x53, 0xe1, 0x5c,
0x5d, 0x78, 0xcb, 0x15, 0xec, 0xad, 0xc5, 0xc2, 0xaf, 0x7a, 0x21, 0x72, 0xe8, 0xf4, 0xa6, 0xd6,
0xf3, 0xa2, 0x3a, 0xc8, 0xa7, 0x1b, 0x7f, 0xe9, 0xe8, 0xd3, 0xde, 0x9f, 0xb3, 0x88, 0x3b, 0xba,
0xbe, 0x6c, 0x50, 0xb7, 0xe3, 0xf3, 0x10, 0xe8, 0x16, 0xdc, 0x81, 0xe4, 0x79, 0x0a, 0x7d, 0x07,
0xd8, 0xda, 0xce, 0xe1, 0xaf, 0x62, 0x1f, 0xe0, 0xfd, 0x8d, 0x5c, 0xf7, 0xb4, 0xf7, 0xfb, 0x3b,
0x98, 0x27, 0x3e, 0xa4, 0xea, 0xe5, 0x79, 0x2f, 0xfa, 0xaa, 0x72, 0x20, 0xb5, 0xd5, 0x9d, 0x3d,
0xaa, 0x6c, 0xd2, 0x67, 0x69, 0x3a, 0xb1, 0x88, 0x82, 0x0c, 0x05, 0x12, 0x91, 0x36, 0x7a, 0xcc,
0x50, 0x23, 0xa0, 0x1e, 0xa6, 0x7a, 0x1e, 0x54, 0x8d, 0x16, 0x49, 0x52, 0x3d, 0xf9, 0x4d, 0xc2,
0x56, 0xdb, 0xba, 0xd9, 0xe7, 0x5f, 0xaa, 0xdf, 0x30, 0x24, 0x90, 0xba, 0x7f, 0xa1, 0x5d, 0x44,
0xbd, 0xa9, 0x0b, 0x06, 0x6b, 0x54, 0x9e, 0x47, 0xfd, 0x42, 0x89, 0x76, 0xda, 0x75, 0xdd, 0x7f,
0x94, 0xb1, 0x59, 0x1c, 0x41, 0xd2, 0x4d, 0x7d, 0xca, 0x8d, 0xe1, 0xce, 0xb4, 0xbe, 0xe7, 0x32,
0x2a, 0x3c, 0xc3, 0x64, 0xfc, 0xcf, 0x77, 0xaf, 0x7f, 0x36, 0xf5, 0xa9, 0x15, 0x0f, 0xbe, 0x7b,
0x34, 0x8a, 0xc3, 0x5e, 0x63, 0xf8, 0xf1, 0xbb, 0x51, 0x71, 0x73, 0xbe, 0xd5, 0x9f, 0xcb, 0xad,
0xf6, 0x1c, 0x1f, 0x49, 0xaa, 0x3d, 0x57, 0xdf, 0x79, 0x26, 0x47, 0xd7, 0x6d, 0x93, 0x11, 0xd1,
0x9f, 0x53, 0x77, 0x6e, 0xff, 0xed, 0x11, 0x06, 0xcb, 0xf9, 0x4b, 0x78, 0x57, 0x38, 0x39, 0xcc,
0xc0, 0x4d, 0xcf, 0x6e, 0x5b, 0xb6, 0xd7, 0xb5, 0xf6, 0x2e, 0xb6, 0x6d, 0xff, 0xf0, 0xa2, 0x6f,
0xf7, 0xf4, 0x22, 0x75, 0xfb, 0xc4, 0xea, 0xd3, 0x0a, 0x19, 0xb5, 0xd1, 0x68, 0xfb, 0xfc, 0x7e,
0x6d, 0xcf, 0x8d, 0xaa, 0x30, 0xa7, 0xd1, 0x2c, 0xb5, 0x3c, 0x51, 0x96, 0xd5, 0xf7, 0x15, 0xc5,
0xd7, 0xda, 0x89, 0xe1, 0xfc, 0x9e, 0x67, 0xa9, 0x31, 0xd2, 0xc7, 0xd9, 0x0a, 0x09, 0x5f, 0x20,
0xf5, 0x2e, 0xda, 0xf8, 0x29, 0x4e, 0x50, 0xfc, 0x50, 0x17, 0x6c, 0x83, 0x20, 0x68, 0xc8, 0x6b,
0xdf, 0xa6, 0x35, 0xdc, 0x42, 0x0c, 0xbd, 0x01, 0xe9, 0x7b, 0x87, 0xdb, 0xe9, 0x1b, 0x38, 0x53,
0x6c, 0x6d, 0xec, 0x54, 0x63, 0x61, 0xbe, 0x63, 0xdf, 0xf7, 0xb1, 0x4a, 0xdb, 0x6f, 0x16, 0xd0,
0x55, 0xc0, 0x87, 0xab, 0x57, 0x97, 0x28, 0xe1, 0xff, 0xa2, 0xd3, 0xed, 0x9c, 0x5a, 0x6e, 0x9a,
0xfc, 0x31, 0xc9, 0x6e, 0xf0, 0x75, 0xf4, 0xc9, 0x7e, 0xa4, 0x53, 0xa1, 0xa1, 0x81, 0x1a, 0x94,
0xd0, 0x91, 0x3e, 0x04, 0x68, 0x2a, 0x15, 0x56, 0xd6, 0x28, 0xdb, 0x93, 0x38, 0x24, 0x9a, 0x61,
0x9b, 0xe5, 0x97, 0x6d, 0xa9, 0x13, 0xe5, 0x26, 0x82, 0x37, 0x5f, 0x60, 0x8e, 0xbf, 0xe7, 0xf7,
0x50, 0x8d, 0x35, 0x48, 0x45, 0x9a, 0xcf, 0x65, 0x28, 0x97, 0xe8, 0xbe, 0x0e, 0x09, 0xec, 0xfa,
0xdd, 0x1b, 0x37, 0x84, 0xdf, 0x93, 0x0c, 0xa6, 0x7e, 0x87, 0x8f, 0xed, 0x70, 0x5a, 0xe6, 0xc7,
0x4b, 0xc9, 0xe7, 0x08, 0xe6, 0x84, 0x47, 0x6f, 0xc2, 0x84, 0x4e, 0xa9, 0xa9, 0xc5, 0x89, 0xe7,
0x3c, 0x5b, 0x4a, 0x53, 0x49, 0x71, 0x88, 0x28, 0x5d, 0xd2, 0x21, 0x0e, 0x3c, 0xde, 0xde, 0xc5,
0x29, 0x3a, 0x2f, 0x62, 0x47, 0x0a, 0x3b, 0x33, 0xc1, 0x27, 0x70, 0xac, 0xb1, 0xb2, 0x5b, 0x00,
0x57, 0x47, 0xa0, 0xbb, 0x9a, 0x73, 0x21, 0xe8, 0xdc, 0x8c, 0x6f, 0x69, 0x6e, 0x5c, 0xd0, 0xbc,
0xf6, 0x61, 0xdd, 0xcd, 0xec, 0x9d, 0xd2, 0x7b, 0xf8, 0xad, 0x66, 0x80, 0x11, 0x7c, 0x77, 0xfc,
0xd7, 0x54, 0x54, 0x32, 0x67, 0xd8, 0x46, 0x4c, 0xe3, 0xcd, 0xeb, 0x77, 0xef, 0xb1, 0xda, 0xd4,
0x61, 0x54, 0x44, 0x42, 0xa8, 0x9c, 0xfe, 0x53, 0x26, 0xe6, 0x2f, 0xd0, 0xc0, 0x95, 0xc9, 0x19,
0x16, 0x5b, 0x8f, 0x6e, 0xeb, 0x0c, 0x3b, 0xa5, 0x50, 0xcd, 0x1c, 0x8a, 0x31, 0x33, 0xb4, 0xec,
0x67, 0xde, 0x2a, 0xcc, 0x1f, 0xd2, 0x31, 0xdb, 0xfc, 0xfd, 0x0c, 0x97, 0x2f, 0xd3, 0x49, 0x86,
0xdc, 0x88, 0x27, 0xe6, 0x2c, 0x97, 0xc1, 0xc6, 0x84, 0x19, 0x42, 0x0b, 0x33, 0xe5, 0xd9, 0xb1,
0x6b, 0x49, 0xf1, 0xb0, 0xce, 0xa0, 0xf0, 0x2e, 0x8c, 0x25, 0x9b, 0x70, 0x89, 0xa4, 0x2f, 0xfb,
0x09, 0xe3, 0x04, 0xe0, 0x27, 0x86, 0x8a, 0xb6, 0xa6, 0xba, 0xd7, 0xa2, 0xf4, 0xd2, 0x90, 0x5c,
0xa5, 0x91, 0x69, 0x8d, 0xf4, 0x9d, 0x84, 0x74, 0xd4, 0x13, 0xbd, 0x8d, 0xfe, 0x60, 0x28, 0x2f,
0x7a, 0xac, 0x4a, 0x1b, 0xa3, 0x20, 0x1a, 0x5e, 0xdd, 0x05, 0x6a, 0x92, 0x1c, 0xa0, 0x06, 0xd6,
0x0a, 0xc2, 0x42, 0x02, 0x6e, 0xad, 0x3d, 0xa8, 0x9c, 0x4a, 0xdf, 0xb5, 0xea, 0x48, 0xba, 0x3e,
0x6b, 0x14, 0x97, 0x3f, 0x71, 0x84, 0x38, 0x88, 0x27, 0x0f, 0x8c, 0x74, 0x84, 0xc1, 0xd7, 0x46,
0xb0, 0x8b, 0x38, 0x3a, 0x94, 0x25, 0x54, 0x96, 0x9f, 0x00, 0x42, 0xba, 0xc4, 0x5f, 0x78, 0x09,
0x56, 0x3b, 0x04, 0x3b, 0x78, 0x58, 0x59, 0xbb, 0x83, 0xd0, 0x47, 0x01, 0x9b, 0xab, 0x48, 0x6b,
0xa7, 0xab, 0x53, 0xc7, 0x8f, 0x81, 0x81, 0x61, 0x83, 0x2e, 0xda, 0xd6, 0xf7, 0xf1, 0xfb, 0xef,
0xc3, 0x8d, 0x7d, 0x5d, 0xe0, 0x19, 0xd3, 0x8d, 0x1c, 0xba, 0xc7, 0xb2, 0xf6, 0xb0, 0xe2, 0x2a,
0x7c, 0x73, 0x0f, 0xee, 0xf8, 0xac, 0xe5, 0xbe, 0xed, 0x38, 0xad, 0x16, 0x9e, 0xac, 0xe5, 0x74,
0x3d, 0xe6, 0xf5, 0x9d, 0x4e, 0x9b, 0xe1, 0xd9, 0x75, 0xfa, 0x3e, 0x3d, 0x3b, 0x8e, 0xdf, 0xa7,
0x27, 0x56, 0xdb, 0x00, 0xf1, 0x7a, 0xcc, 0xf3, 0x1c, 0x8f, 0xb5, 0x9d, 0xb6, 0xcf, 0x06, 0x8e,
0xdf, 0x63, 0xbe, 0xd3, 0xa2, 0x91, 0xe7, 0x63, 0xd4, 0xef, 0x33, 0x85, 0xd7, 0x73, 0x7a, 0xf4,
0x0a, 0x4a, 0x03, 0x42, 0xeb, 0x00, 0x9d, 0x7e, 0x3a, 0xce, 0x40, 0xbd, 0x74, 0x9d, 0x41, 0x17,
0x80, 0x2e, 0x86, 0x03, 0xd6, 0x77, 0xdc, 0x1e, 0x3d, 0x3d, 0x0f, 0x42, 0x38, 0xbd, 0x36, 0xd1,
0x87, 0x3c, 0x9e, 0xd3, 0xef, 0x12, 0x57, 0x88, 0x88, 0xa9, 0xb6, 0xd3, 0xeb, 0xab, 0x81, 0x5f,
0x4c, 0xf4, 0x9c, 0x76, 0x9f, 0x80, 0xba, 0x03, 0x12, 0x19, 0xbf, 0xc0, 0xa5, 0x19, 0x97, 0x5e,
0x49, 0x2d, 0xb4, 0x80, 0x6f, 0x81, 0xee, 0xe9, 0x39, 0xcf, 0xf1, 0x01, 0x38, 0x70, 0x3a, 0x1e,
0xf1, 0x01, 0x48, 0xbf, 0xad, 0x07, 0xd7, 0x80, 0xe9, 0xfb, 0xaf, 0xb0, 0x42, 0xe2, 0x75, 0x5e,
0x41, 0xd7, 0xf6, 0x2b, 0x48, 0x3b, 0x78, 0xe5, 0x75, 0xd5, 0xb0, 0xe3, 0x74, 0xf5, 0x8a, 0xd7,
0x66, 0x0a, 0xf6, 0xda, 0x43, 0x7b, 0x09, 0x1e, 0x6f, 0x41, 0xce, 0x87, 0x89, 0x88, 0x81, 0xd3,
0xea, 0x91, 0x48, 0xf8, 0x6d, 0x29, 0xd3, 0x61, 0x9e, 0x06, 0x4a, 0x58, 0x65, 0xc3, 0x8e, 0x5f,
0x42, 0xb5, 0x95, 0x8a, 0x1a, 0xb5, 0xad, 0x85, 0xf5, 0xda, 0xaa, 0xa9, 0xf5, 0xde, 0xc2, 0xb8,
0x7d, 0x32, 0x11, 0x21, 0x76, 0x60, 0xc4, 0x8e, 0x62, 0xed, 0xc2, 0xa8, 0x64, 0xc0, 0x2e, 0x8c,
0x89, 0xc5, 0x2e, 0x60, 0xb0, 0xa0, 0x56, 0x0b, 0x78, 0xf2, 0xc9, 0x25, 0xb8, 0xbe, 0xf5, 0x1d,
0xd7, 0x27, 0xbd, 0x80, 0xa4, 0xa4, 0xc5, 0xaf, 0x32, 0x1e, 0x66, 0xdb, 0xca, 0x95, 0x4c, 0x11,
0x1f, 0xf8, 0x05, 0x04, 0x79, 0xcf, 0x55, 0x3a, 0x50, 0x2c, 0x40, 0xb1, 0xc1, 0x75, 0xcb, 0xbd,
0x02, 0x2f, 0xea, 0x9f, 0x59, 0x53, 0xdd, 0xa0, 0xab, 0x0e, 0x5a, 0xdd, 0x74, 0xb9, 0xc5, 0x4d,
0x19, 0x5d, 0x21, 0xed, 0x74, 0x71, 0xd5, 0x3f, 0xa5, 0x6b, 0xaa, 0xbf, 0x5c, 0xfc, 0x37, 0x9b,
0x83, 0xcc, 0x23, 0xd1, 0x28, 0x00, 0x00
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xbd, 0x3b, 0x61, 0x77, 0xdb, 0x38,
0x8e, 0xdf, 0xfb, 0x2b, 0x58, 0xb5, 0x93, 0x4a, 0x13, 0x59, 0x96, 0xe4, 0xd8, 0x4e, 0x6c, 0x2b,
0xf3, 0x3a, 0x69, 0xf7, 0xd2, 0x7b, 0xc9, 0xb4, 0x6f, 0x9b, 0xcb, 0x4c, 0x2f, 0x97, 0x7d, 0x61,
0x2c, 0xda, 0xd6, 0x54, 0x16, 0xbd, 0x14, 0xed, 0x24, 0x75, 0xfc, 0xdf, 0x0f, 0x20, 0x25, 0x59,
0x92, 0xed, 0xa4, 0xbd, 0xb9, 0xdd, 0x99, 0xbe, 0x9a, 0x22, 0x41, 0x10, 0x00, 0x01, 0x10, 0x04,
0x58, 0x32, 0x78, 0xf9, 0xee, 0xe3, 0xc9, 0xc5, 0x97, 0x4f, 0xef, 0xc9, 0x44, 0x4e, 0xe3, 0x63,
0x32, 0xc8, 0x7f, 0x18, 0x0d, 0xe1, 0x67, 0xca, 0x24, 0x85, 0x11, 0x39, 0x6b, 0xb0, 0x7f, 0xce,
0xa3, 0x45, 0x60, 0x9c, 0xd0, 0xe1, 0x84, 0x35, 0x4e, 0x78, 0x22, 0x05, 0x8f, 0x0d, 0xf2, 0x62,
0x08, 0x2d, 0x96, 0xc8, 0xc0, 0x48, 0x78, 0x63, 0x88, 0x63, 0x36, 0x81, 0x56, 0x2a, 0xb9, 0x80,
0xd6, 0x74, 0x9e, 0xca, 0x86, 0x60, 0x0b, 0x1a, 0x47, 0x21, 0x95, 0xcc, 0xd8, 0x86, 0xf0, 0x93,
0xa0, 0xe3, 0x29, 0xdd, 0x86, 0x69, 0x2b, 0xf8, 0xfb, 0xfb, 0x59, 0x24, 0x58, 0x6a, 0x90, 0x02,
0xdc, 0x45, 0x38, 0x19, 0xc9, 0x98, 0x1d, 0xbf, 0xf8, 0xfd, 0xec, 0xfd, 0x3b, 0x72, 0x02, 0xab,
0xf2, 0x29, 0xf9, 0x44, 0x63, 0x26, 0x25, 0x23, 0xef, 0xc3, 0x08, 0xa8, 0x19, 0x34, 0x35, 0x08,
0x19, 0xa4, 0x43, 0x11, 0xcd, 0x24, 0x91, 0x0f, 0x33, 0x16, 0x18, 0x92, 0xdd, 0xcb, 0xe6, 0x9f,
0x74, 0x41, 0x75, 0xaf, 0x71, 0xfc, 0x62, 0x34, 0x4f, 0x86, 0x32, 0xe2, 0x09, 0x19, 0x7f, 0x08,
0x4d, 0x66, 0x2d, 0x05, 0x93, 0x73, 0x91, 0x90, 0xd0, 0x19, 0x33, 0xf9, 0x3e, 0x66, 0x53, 0x58,
0xf3, 0xd7, 0x07, 0x35, 0xb4, 0x2a, 0x40, 0x87, 0xef, 0x2b, 0x90, 0x43, 0xc1, 0x80, 0xdb, 0x0c,
0x18, 0x01, 0x17, 0x54, 0x90, 0x30, 0x08, 0xf9, 0x70, 0x8e, 0x3d, 0x2f, 0x06, 0x4d, 0xbd, 0x1a,
0x12, 0x23, 0x1f, 0x90, 0xee, 0x5b, 0x1e, 0x3e, 0x2c, 0x47, 0xc0, 0x51, 0x63, 0x44, 0xa7, 0x51,
0xfc, 0xd0, 0x7b, 0x2b, 0x22, 0x1a, 0xdb, 0x29, 0x4d, 0xd2, 0x46, 0xca, 0x44, 0x34, 0xea, 0xdf,
0xd2, 0xe1, 0xd7, 0xb1, 0xe0, 0xf3, 0x24, 0x6c, 0x0c, 0x79, 0xcc, 0x45, 0xef, 0x95, 0xe7, 0x79,
0x7d, 0x35, 0x25, 0x8d, 0xbe, 0xb1, 0x9e, 0xd7, 0x99, 0xdd, 0xf7, 0xb3, 0x91, 0x30, 0x0c, 0xfb,
0x53, 0x2a, 0xc6, 0x51, 0xd2, 0x73, 0x89, 0xe7, 0xc2, 0xc0, 0x93, 0xa8, 0xe3, 0x28, 0x61, 0x8d,
0x09, 0x8b, 0xc6, 0x13, 0xd9, 0x73, 0xda, 0xab, 0x57, 0x33, 0x2a, 0x80, 0xca, 0x06, 0x0a, 0x98,
0xc2, 0x90, 0x58, 0xce, 0x78, 0x1a, 0x21, 0x9f, 0x3d, 0xc1, 0x62, 0x2a, 0xa3, 0x05, 0xeb, 0xdf,
0x45, 0xa1, 0x9c, 0xf4, 0x3c, 0xd7, 0xfd, 0xa9, 0x9f, 0x4d, 0xf4, 0x61, 0x99, 0xd5, 0xab, 0x5b,
0x2e, 0x41, 0xf4, 0x27, 0x9b, 0x33, 0xe9, 0x6d, 0xca, 0xe3, 0xb9, 0x64, 0x19, 0x5d, 0x0d, 0xc9,
0x67, 0xbd, 0xb6, 0x9a, 0x32, 0x16, 0x34, 0x8c, 0x70, 0xbd, 0x5b, 0x7e, 0xbf, 0xdc, 0xc4, 0x8b,
0xed, 0x95, 0xa3, 0x18, 0x6b, 0xc0, 0xdc, 0xaf, 0x5b, 0x91, 0x66, 0xb0, 0x2d, 0x64, 0x55, 0xa3,
0xe8, 0x42, 0xeb, 0x96, 0x8b, 0x90, 0x89, 0x06, 0xe2, 0x9f, 0xa7, 0xbd, 0x16, 0xf6, 0xd4, 0x85,
0x98, 0x46, 0xf1, 0x82, 0x89, 0x0c, 0xb2, 0xe7, 0xcf, 0xee, 0x09, 0x60, 0x8c, 0x42, 0x22, 0xc6,
0xb7, 0xd4, 0xec, 0x1c, 0xda, 0xfa, 0x8f, 0xd3, 0xb6, 0xfa, 0x9a, 0xe0, 0x9f, 0xfa, 0x52, 0x80,
0xe0, 0x46, 0x5c, 0x4c, 0x7b, 0xaa, 0x05, 0xf2, 0x60, 0x5f, 0xcc, 0x06, 0x8c, 0x58, 0xfd, 0x6f,
0x8d, 0x28, 0x09, 0xd9, 0x7d, 0xcf, 0xcf, 0xe9, 0x9d, 0x45, 0x43, 0xa0, 0xf7, 0x59, 0xb2, 0xbb,
0xff, 0x5a, 0xaa, 0x3d, 0x24, 0xbb, 0x44, 0x5b, 0xc8, 0xc0, 0x2e, 0xd8, 0xb3, 0x54, 0xb5, 0x0b,
0xaa, 0xda, 0xdf, 0x47, 0xd5, 0xab, 0xd1, 0x68, 0x94, 0xd3, 0xd4, 0x2a, 0x68, 0x7a, 0x75, 0x74,
0xeb, 0x1f, 0xfa, 0x87, 0x8a, 0x12, 0xdf, 0xaf, 0x52, 0x52, 0x96, 0xd2, 0x6e, 0x42, 0xbc, 0x82,
0x10, 0xaf, 0x20, 0x44, 0x35, 0x37, 0x98, 0xf3, 0x72, 0x32, 0x4b, 0x16, 0xb2, 0xd5, 0x6e, 0x56,
0xce, 0xed, 0x1c, 0x14, 0x35, 0x19, 0xc6, 0x34, 0x4d, 0x97, 0x33, 0x1a, 0x86, 0x51, 0x32, 0xee,
0xb9, 0xb6, 0xfa, 0xbf, 0x30, 0x9d, 0xec, 0x13, 0x44, 0x2d, 0xa3, 0x21, 0x8d, 0x1b, 0xe0, 0xc5,
0xc6, 0x49, 0x4f, 0xab, 0xf8, 0x0e, 0xbc, 0x75, 0x03, 0x20, 0xe9, 0x8c, 0x26, 0xcb, 0x30, 0x4a,
0x67, 0x31, 0x7d, 0xe8, 0x45, 0x89, 0x32, 0xb5, 0x51, 0xcc, 0xee, 0xfb, 0x0a, 0x59, 0x23, 0x92,
0x6c, 0x9a, 0xf6, 0x86, 0xa0, 0xfe, 0xb0, 0x9f, 0x25, 0x31, 0x3e, 0x69, 0xaf, 0x25, 0xa3, 0x87,
0xbd, 0xaf, 0xd3, 0x37, 0x8d, 0xc2, 0x30, 0x66, 0xab, 0x57, 0x51, 0x32, 0xe2, 0xc5, 0xca, 0x86,
0xd1, 0x47, 0x4f, 0x97, 0x81, 0xfc, 0xb5, 0xf5, 0x36, 0xbd, 0x41, 0xc9, 0xa6, 0x95, 0xb7, 0x29,
0x3b, 0x14, 0x90, 0xf5, 0x9d, 0xa0, 0xb3, 0xcc, 0xb2, 0x0f, 0x5d, 0x1c, 0x2f, 0x7c, 0x13, 0x9d,
0x4b, 0xbe, 0x72, 0x66, 0xda, 0x51, 0x2f, 0xcb, 0x9e, 0x24, 0xef, 0xfc, 0x8f, 0xcc, 0x3b, 0xa4,
0x4b, 0x94, 0x1a, 0xec, 0x70, 0x09, 0x68, 0x53, 0x29, 0x8b, 0x69, 0xe9, 0x39, 0x88, 0x7f, 0x59,
0xf3, 0x35, 0x25, 0xaf, 0xa5, 0x00, 0x2f, 0xf8, 0x2c, 0x5f, 0x73, 0x14, 0x69, 0x7f, 0x07, 0x2b,
0xfd, 0x2b, 0x05, 0x55, 0x13, 0x0c, 0xd0, 0x90, 0xf3, 0xf7, 0x49, 0xf9, 0xdc, 0x62, 0xbf, 0x76,
0xa9, 0xc8, 0x16, 0x72, 0xeb, 0xc2, 0xff, 0xf7, 0x91, 0xaf, 0x6d, 0x28, 0x7d, 0x17, 0x2d, 0xb6,
0x6a, 0x78, 0x46, 0x58, 0xcc, 0x46, 0x15, 0x67, 0xa2, 0x76, 0x37, 0x65, 0x49, 0xf8, 0x19, 0x4d,
0x63, 0x38, 0x17, 0x29, 0x10, 0x37, 0xe3, 0x11, 0x92, 0xba, 0x72, 0x18, 0x1c, 0xd6, 0xdb, 0x06,
0xf0, 0xcc, 0x54, 0x47, 0x25, 0x19, 0x34, 0xb3, 0xd0, 0x04, 0xcf, 0x4c, 0xf8, 0x09, 0xa3, 0x05,
0x89, 0xc2, 0xc0, 0x40, 0x2d, 0x83, 0xa8, 0x00, 0x2d, 0x3a, 0xfb, 0xc8, 0x06, 0x5f, 0xa8, 0x89,
0x81, 0x51, 0x91, 0xed, 0x9f, 0x10, 0x23, 0x44, 0xa3, 0x87, 0x5c, 0x8a, 0x99, 0xa8, 0x70, 0xca,
0xc4, 0xdb, 0x3e, 0x63, 0x73, 0x37, 0x10, 0x3a, 0x5d, 0x8c, 0x0b, 0x70, 0xcd, 0x60, 0x0b, 0x0f,
0xe2, 0xfc, 0x40, 0xea, 0x14, 0xda, 0xde, 0x10, 0xaa, 0x07, 0x3a, 0x0c, 0xb2, 0x88, 0xd8, 0xdd,
0xaf, 0xfc, 0x1e, 0x42, 0x17, 0xe2, 0x92, 0x96, 0x0f, 0x7f, 0x8c, 0xe3, 0xc1, 0x8c, 0xca, 0x09,
0x79, 0x31, 0x8a, 0xe2, 0x38, 0x30, 0x5e, 0xb9, 0x6e, 0x0b, 0xb6, 0xcb, 0x80, 0xa0, 0xc1, 0x38,
0xef, 0x10, 0xdf, 0x9f, 0x1c, 0x2e, 0x0e, 0x4e, 0x3b, 0xdf, 0xce, 0xbd, 0x03, 0xe2, 0x1d, 0x4c,
0x0e, 0x16, 0x87, 0x93, 0xc6, 0x01, 0x7c, 0x1d, 0xc2, 0xe9, 0x5e, 0x7c, 0xf9, 0x3e, 0xe9, 0x20,
0xdc, 0xa4, 0x71, 0xf8, 0xcd, 0x68, 0x1e, 0x83, 0xc0, 0x16, 0xe3, 0xe3, 0x17, 0x40, 0x22, 0x88,
0x53, 0x49, 0x08, 0xe5, 0x66, 0x1c, 0x3f, 0x15, 0x22, 0x21, 0xa8, 0x92, 0xb0, 0x87, 0x7f, 0x83,
0xf0, 0x72, 0x11, 0xe2, 0xf4, 0x7a, 0x58, 0x60, 0x94, 0x84, 0x5f, 0x3e, 0xc4, 0x81, 0x97, 0x6c,
0x6a, 0x19, 0xc3, 0x8f, 0x6d, 0x42, 0x8e, 0x37, 0x37, 0x67, 0x0c, 0x0f, 0xf5, 0xce, 0x96, 0x0d,
0xbc, 0x06, 0x09, 0xf6, 0x5c, 0x28, 0x40, 0xf6, 0x09, 0xfc, 0x9f, 0xcc, 0x05, 0xd2, 0x1d, 0x3f,
0x90, 0x28, 0x21, 0xf3, 0x94, 0x91, 0xa1, 0xe6, 0x3d, 0x47, 0x44, 0x6a, 0xd4, 0xfe, 0x75, 0xa2,
0xd1, 0xf3, 0xaa, 0x95, 0x63, 0x38, 0xd9, 0x08, 0x84, 0x87, 0x72, 0xc2, 0x48, 0x2e, 0x21, 0xc2,
0x94, 0xac, 0x89, 0xe4, 0x04, 0x8e, 0x1d, 0x92, 0xb0, 0x3b, 0xa2, 0xec, 0x93, 0xa4, 0x70, 0x5a,
0x32, 0x61, 0x23, 0xb0, 0x9e, 0xa1, 0xba, 0x59, 0x48, 0x40, 0xa4, 0xe4, 0x96, 0xc5, 0xfc, 0x4e,
0xf5, 0x6a, 0x30, 0x9c, 0x3e, 0x9c, 0xd0, 0x64, 0xcc, 0x48, 0x24, 0x53, 0x0d, 0xea, 0x64, 0x0b,
0x22, 0x54, 0x75, 0x1e, 0x9c, 0x8e, 0x70, 0x40, 0xe0, 0xaa, 0x26, 0x4d, 0x42, 0x8c, 0x9c, 0x47,
0x91, 0x98, 0x5a, 0x88, 0x44, 0x07, 0x03, 0x0e, 0xf9, 0x98, 0x0c, 0x19, 0x19, 0x45, 0x49, 0x94,
0x4e, 0x58, 0x68, 0x83, 0x14, 0x73, 0x4c, 0x54, 0x08, 0xc4, 0x30, 0x44, 0x36, 0x38, 0x99, 0xcf,
0x62, 0x4e, 0x43, 0x40, 0x08, 0x6d, 0x1c, 0x0d, 0x59, 0x1a, 0xe1, 0x5a, 0x69, 0xcc, 0xa5, 0x43,
0x2e, 0xb8, 0xe2, 0x8e, 0xb0, 0xfb, 0x08, 0x64, 0x94, 0x8c, 0x73, 0x19, 0x97, 0xf1, 0xcd, 0x58,
0x32, 0x8c, 0x62, 0x85, 0xd0, 0x21, 0x2f, 0xb6, 0x08, 0xfd, 0xc7, 0x65, 0xae, 0xb4, 0x33, 0x95,
0xe0, 0xa3, 0x86, 0x9f, 0x0a, 0x7d, 0x79, 0x46, 0x5d, 0x10, 0x7c, 0xa7, 0xca, 0xbc, 0x5d, 0xd0,
0x28, 0xa6, 0xb7, 0x31, 0x48, 0x5b, 0x61, 0x7d, 0x4e, 0x57, 0xd4, 0xcf, 0xa0, 0x99, 0x39, 0xa4,
0xec, 0x7e, 0xf1, 0x62, 0xd7, 0x05, 0x03, 0x2f, 0x03, 0xb9, 0x36, 0xa0, 0x17, 0xc0, 0x7b, 0x46,
0xd5, 0x80, 0x2c, 0x7b, 0x08, 0x2b, 0x0e, 0x83, 0x86, 0x67, 0xcf, 0xee, 0x4f, 0x78, 0x1c, 0x2c,
0x57, 0xb6, 0xcc, 0x7e, 0x05, 0x1b, 0xca, 0xa0, 0x34, 0x1d, 0xaf, 0x25, 0xbf, 0x62, 0x18, 0x02,
0xf2, 0x86, 0xfd, 0x87, 0xce, 0xbf, 0x03, 0x84, 0x69, 0xd9, 0x39, 0xcc, 0x19, 0x4b, 0xc6, 0x72,
0x12, 0xe0, 0x3c, 0x47, 0x79, 0x28, 0x7b, 0xfa, 0x71, 0x34, 0x4a, 0x83, 0x73, 0xf0, 0x37, 0x8e,
0x0a, 0x60, 0xcc, 0x2a, 0x68, 0xd3, 0x6f, 0x77, 0x9a, 0xbe, 0xd5, 0x68, 0xdb, 0x19, 0xdb, 0x6f,
0x85, 0xa0, 0x0f, 0xc1, 0xd5, 0xb5, 0x0d, 0x0e, 0xe5, 0x33, 0x5d, 0xb0, 0xe0, 0x8d, 0x72, 0x7b,
0x15, 0xaf, 0xe7, 0xb7, 0xd7, 0x5e, 0x0f, 0xdb, 0x35, 0x27, 0xe7, 0x1f, 0xc0, 0x9f, 0xdc, 0xc9,
0x29, 0x1f, 0x87, 0xc7, 0x91, 0x72, 0x6f, 0xbe, 0x6f, 0x7b, 0xfe, 0x5b, 0xcf, 0xb5, 0x3d, 0x04,
0x84, 0x1f, 0xe2, 0xf9, 0xb6, 0x5f, 0xed, 0xd9, 0x0a, 0x52, 0x85, 0x40, 0x90, 0xf3, 0x2e, 0xfc,
0x75, 0x06, 0x63, 0x5e, 0xf7, 0xd2, 0x3b, 0x38, 0xf5, 0x3a, 0x97, 0x9e, 0x7b, 0xea, 0xf9, 0x97,
0xdd, 0x33, 0x1c, 0xf8, 0xef, 0xc2, 0x29, 0xbe, 0x41, 0x4e, 0xd0, 0xe7, 0xfd, 0xff, 0x72, 0x82,
0x44, 0x9d, 0x74, 0x9c, 0x83, 0xae, 0xed, 0x03, 0xc5, 0xd8, 0x50, 0x84, 0x9f, 0x20, 0x3d, 0x4e,
0xbb, 0x45, 0xf4, 0x90, 0xaf, 0xf9, 0x3b, 0x51, 0x7d, 0xf8, 0xe9, 0xe7, 0xe3, 0xbe, 0x86, 0xce,
0xa6, 0x66, 0xe3, 0x0a, 0xfa, 0xdc, 0x6b, 0x3b, 0x9e, 0xdd, 0x75, 0xdc, 0xee, 0x09, 0xb4, 0xfc,
0x03, 0xd5, 0x24, 0xd0, 0x6c, 0x1d, 0x42, 0xd3, 0xf3, 0xb1, 0xd9, 0x86, 0x96, 0xdf, 0x3a, 0xf3,
0x3a, 0x4e, 0xb7, 0x6b, 0x1f, 0x3a, 0x6d, 0x58, 0x00, 0x7e, 0xba, 0x30, 0xd6, 0xb5, 0x8f, 0x14,
0xb8, 0x1a, 0x39, 0x72, 0xfc, 0xc3, 0x33, 0x00, 0x87, 0xa6, 0xe7, 0xaa, 0x76, 0x0b, 0x80, 0x00,
0x12, 0xe7, 0x1e, 0x60, 0x13, 0xd1, 0x9c, 0x40, 0xf3, 0xd0, 0xcf, 0x70, 0x1f, 0x38, 0x47, 0x9d,
0x62, 0x45, 0x4d, 0xc6, 0x39, 0xcc, 0xf2, 0x5a, 0x30, 0xeb, 0xd0, 0x43, 0x64, 0xde, 0x11, 0x22,
0x3b, 0xec, 0x9e, 0x1d, 0x61, 0x2f, 0x2c, 0x74, 0xd4, 0x3a, 0x45, 0xb0, 0x4b, 0x44, 0xd3, 0x3d,
0x5b, 0x03, 0x97, 0xf6, 0xa0, 0x5f, 0xdc, 0x9e, 0x41, 0x35, 0x3f, 0x8e, 0x4c, 0xbc, 0x3f, 0xff,
0xdb, 0x54, 0xbb, 0x74, 0x75, 0x8f, 0xa3, 0xaf, 0x1f, 0x93, 0x3c, 0x0c, 0xd3, 0xd7, 0xf8, 0x29,
0x5f, 0xb0, 0x0b, 0x41, 0xd3, 0xc9, 0x90, 0x26, 0xd0, 0x63, 0x83, 0xa3, 0x3e, 0x31, 0x4b, 0x48,
0x99, 0xc3, 0x61, 0x19, 0x26, 0xff, 0x68, 0x56, 0xd1, 0xff, 0x0c, 0xe8, 0xad, 0x52, 0x5a, 0x40,
0xcd, 0x63, 0xb6, 0x0c, 0x0c, 0xc3, 0x5a, 0x82, 0x29, 0x11, 0x81, 0x26, 0xcd, 0x83, 0x97, 0x1e,
0xc4, 0x64, 0x49, 0x2a, 0x09, 0xad, 0xb0, 0xfb, 0xcf, 0x39, 0x13, 0x0f, 0x9f, 0xc1, 0x21, 0x0f,
0xc1, 0x55, 0xbf, 0x8d, 0x63, 0xd3, 0xa8, 0xdc, 0x7b, 0x0d, 0xab, 0x1f, 0x8d, 0x4c, 0xea, 0xc0,
0xe5, 0xf3, 0x3d, 0x1d, 0x4e, 0x4c, 0x53, 0xda, 0xc2, 0x0a, 0x8e, 0x97, 0x12, 0xe5, 0xf4, 0x56,
0x4a, 0x11, 0x41, 0x40, 0xc6, 0x4c, 0x23, 0xa4, 0x92, 0x36, 0xa4, 0x98, 0x33, 0x08, 0xe0, 0x0c,
0x2b, 0x08, 0xd8, 0xde, 0x9e, 0x09, 0x6b, 0xba, 0xd6, 0x0a, 0x38, 0x71, 0x62, 0x45, 0xe9, 0xb1,
0xd7, 0xcd, 0x7b, 0x6d, 0x6e, 0xe9, 0xc4, 0x05, 0x62, 0x67, 0xc7, 0xee, 0xde, 0x1e, 0x1b, 0xf8,
0xed, 0xb6, 0x05, 0xcb, 0x98, 0xe8, 0xaa, 0x92, 0xc0, 0xeb, 0x27, 0x83, 0xc0, 0xeb, 0xec, 0xed,
0x89, 0x01, 0x34, 0xf7, 0xf7, 0x2d, 0xe5, 0xb1, 0x14, 0x69, 0xe7, 0x9a, 0xb2, 0xfd, 0xc4, 0x7a,
0x7c, 0x34, 0x45, 0x90, 0x58, 0x7d, 0x16, 0xc3, 0x11, 0x2b, 0x02, 0xd6, 0x37, 0x8c, 0x20, 0x90,
0xb0, 0x08, 0x70, 0xff, 0xca, 0xd8, 0x37, 0xbd, 0x4e, 0xb7, 0xdb, 0xf5, 0xbd, 0xf6, 0xcf, 0x5a,
0x8e, 0x70, 0x0e, 0xf1, 0xa9, 0x69, 0x0d, 0x06, 0xae, 0xe5, 0x48, 0xfe, 0x19, 0x88, 0x4f, 0xc6,
0x00, 0x63, 0x41, 0x4c, 0x1c, 0x7e, 0x96, 0x54, 0x48, 0xb3, 0x63, 0x1b, 0xae, 0x61, 0x59, 0x99,
0xa4, 0xe2, 0x60, 0xf8, 0xde, 0x34, 0x30, 0x3e, 0x01, 0x31, 0xc4, 0x8e, 0x72, 0xd9, 0xbf, 0xd1,
0x29, 0x58, 0x6d, 0x45, 0x44, 0x76, 0xec, 0xa0, 0x77, 0xaf, 0xd0, 0x26, 0xd6, 0x0b, 0x58, 0x30,
0x9e, 0xee, 0x16, 0x96, 0xcd, 0x9e, 0x00, 0x00, 0x9c, 0x86, 0x2d, 0x77, 0x00, 0x68, 0x7d, 0x30,
0xb4, 0xfe, 0x21, 0x0c, 0x6c, 0xfd, 0xfb, 0x05, 0x2a, 0x06, 0x9c, 0x84, 0x0c, 0x82, 0x25, 0x90,
0x17, 0x1e, 0x81, 0x86, 0x0d, 0xb1, 0xc7, 0xec, 0x6f, 0x73, 0x01, 0x47, 0xa1, 0xf8, 0x24, 0xf8,
0x4c, 0xe1, 0x43, 0xf7, 0xe3, 0x60, 0x9c, 0xfc, 0xb4, 0xe6, 0xfe, 0xcc, 0xac, 0x7d, 0xb5, 0xc0,
0xbe, 0x01, 0x6e, 0x29, 0x13, 0x4c, 0xa4, 0x04, 0x13, 0x25, 0xb3, 0xb9, 0x44, 0x05, 0x71, 0xf4,
0xa9, 0xa3, 0x04, 0x60, 0xd8, 0x91, 0xb3, 0xa0, 0xf1, 0x9c, 0x05, 0x12, 0x5a, 0x1b, 0x22, 0xd3,
0xf7, 0x6e, 0x04, 0x2a, 0x44, 0xf6, 0x49, 0x77, 0x55, 0x45, 0x16, 0x6d, 0x61, 0x46, 0xaf, 0x67,
0xcf, 0x67, 0x98, 0xd6, 0xcb, 0x8d, 0x67, 0x3b, 0x68, 0xc6, 0xf7, 0x70, 0x76, 0x12, 0x7f, 0xcd,
0x77, 0x33, 0x2d, 0xef, 0x66, 0xba, 0x8b, 0xb4, 0x62, 0x53, 0xd3, 0x3a, 0x85, 0x5b, 0xb7, 0x36,
0x7d, 0x62, 0x71, 0x1e, 0xe3, 0xea, 0x00, 0x52, 0x92, 0x75, 0x59, 0xf0, 0x40, 0xf9, 0x8e, 0x91,
0x8c, 0xe2, 0xb0, 0x4c, 0xb1, 0x40, 0x2b, 0x11, 0x68, 0x25, 0xa0, 0xdf, 0x61, 0x99, 0xfc, 0x4a,
0x6e, 0xc5, 0xb0, 0x43, 0x45, 0xb8, 0xee, 0xdc, 0x4a, 0x73, 0xb8, 0x9b, 0x66, 0x06, 0xa6, 0xad,
0x67, 0x9e, 0x20, 0xe3, 0x98, 0x46, 0x44, 0xf8, 0x1d, 0x64, 0xae, 0xf5, 0x68, 0x9d, 0x98, 0x50,
0xf3, 0x82, 0x4c, 0x07, 0x0a, 0xde, 0x77, 0x8d, 0x97, 0x3d, 0x11, 0x9d, 0x41, 0x98, 0x16, 0x9e,
0x4c, 0xa2, 0x38, 0x34, 0x23, 0x6b, 0xe7, 0x50, 0xbc, 0x7b, 0x08, 0x8c, 0xc0, 0x7d, 0x19, 0x88,
0xbd, 0x3d, 0x10, 0x92, 0xfa, 0xdd, 0x05, 0x18, 0x5a, 0x76, 0x59, 0x9c, 0x53, 0xfa, 0x95, 0x9d,
0xb3, 0x77, 0x82, 0x8e, 0x4d, 0xf4, 0x32, 0x68, 0xce, 0x16, 0xec, 0x1b, 0x93, 0x17, 0x9c, 0xc7,
0x32, 0x9a, 0x69, 0x29, 0x96, 0xc7, 0xaa, 0x3a, 0x68, 0x96, 0xdc, 0x6f, 0x7d, 0x64, 0xa9, 0xb7,
0x92, 0xfd, 0xa0, 0xd3, 0xdd, 0x08, 0xc1, 0xd8, 0x86, 0x0b, 0xd6, 0x88, 0xb9, 0x0a, 0xe5, 0xd8,
0x95, 0xb8, 0x06, 0xca, 0x1c, 0xc1, 0x20, 0x7e, 0x1d, 0xb2, 0xaa, 0xa3, 0xb4, 0x2b, 0x76, 0x66,
0x59, 0x5a, 0xf6, 0xfd, 0x1f, 0x9b, 0x97, 0xf5, 0xc1, 0xec, 0xed, 0x3b, 0xca, 0x6d, 0x85, 0xeb,
0xe9, 0xc1, 0x27, 0x9c, 0x1c, 0xb7, 0x8a, 0xe3, 0x49, 0xc1, 0x3e, 0x75, 0xbc, 0xd8, 0xc9, 0x33,
0x3e, 0x8b, 0x66, 0x02, 0xbc, 0x4a, 0xae, 0x61, 0x6d, 0x14, 0xe1, 0x15, 0x85, 0xd6, 0x6a, 0xad,
0x3a, 0xda, 0x18, 0x02, 0x03, 0x33, 0x07, 0x54, 0x34, 0xf2, 0x6e, 0x13, 0xae, 0x18, 0xea, 0xce,
0x6c, 0xd8, 0x1f, 0x6f, 0xff, 0xc4, 0x23, 0x1e, 0x3a, 0x45, 0xc4, 0x52, 0x53, 0xe1, 0xb3, 0xd6,
0x9b, 0x70, 0x05, 0x47, 0xec, 0x35, 0x6e, 0x43, 0x15, 0xe3, 0x7e, 0x70, 0x63, 0x93, 0xd7, 0x4b,
0xb9, 0x82, 0xbf, 0xd8, 0x6a, 0x76, 0x7f, 0xb3, 0xb1, 0xe6, 0x7e, 0x60, 0x58, 0x46, 0x45, 0x85,
0xeb, 0x32, 0x0b, 0xaa, 0x13, 0xd6, 0xba, 0x55, 0x73, 0xe3, 0x18, 0x37, 0x30, 0x07, 0x3b, 0xf1,
0x8b, 0x8e, 0x29, 0x02, 0x95, 0x75, 0x51, 0x7b, 0xa0, 0xed, 0xe1, 0xc5, 0x96, 0x89, 0xb6, 0xd2,
0x08, 0x27, 0x15, 0xc3, 0xac, 0x8a, 0x50, 0xd1, 0x8c, 0x42, 0x29, 0x50, 0x07, 0x94, 0xbb, 0xa8,
0x2c, 0x35, 0xdb, 0xb1, 0xd2, 0x42, 0xf9, 0xe8, 0x27, 0xc9, 0x2c, 0x99, 0x1f, 0x20, 0xc0, 0xe3,
0x5f, 0x06, 0xae, 0x2d, 0xbe, 0x2b, 0x2a, 0xe3, 0x81, 0x70, 0xd4, 0x86, 0xd9, 0x14, 0x5a, 0xca,
0xab, 0x26, 0x01, 0x6f, 0xd0, 0x7d, 0x6f, 0x1d, 0xea, 0xc5, 0xa6, 0xb0, 0x96, 0x10, 0x28, 0x88,
0xc7, 0xc7, 0x3b, 0xb8, 0x95, 0xf2, 0x3b, 0x47, 0x53, 0xe5, 0xcc, 0x84, 0x6a, 0xbc, 0x63, 0x23,
0x3a, 0x8f, 0x11, 0x9b, 0x6c, 0x08, 0x64, 0x0d, 0xfa, 0xfe, 0x80, 0x00, 0x6a, 0xdd, 0x9e, 0x72,
0xb8, 0xc3, 0x7f, 0xe2, 0xe9, 0x87, 0x22, 0x66, 0x0b, 0x64, 0xc3, 0x84, 0x45, 0x60, 0x0a, 0x28,
0x25, 0x8c, 0x94, 0x15, 0x72, 0x13, 0xba, 0x99, 0xa8, 0x28, 0xcd, 0xe6, 0x71, 0x78, 0x91, 0xc1,
0xb3, 0xa7, 0x35, 0x3c, 0x43, 0x8b, 0x4e, 0x2a, 0x6b, 0x6a, 0x57, 0xb5, 0xc6, 0xf0, 0x32, 0xc8,
0x06, 0x30, 0xdc, 0xc9, 0x40, 0x3a, 0x07, 0xbf, 0xc8, 0x49, 0x94, 0x7e, 0x54, 0x81, 0x41, 0xe0,
0xf6, 0x72, 0x2c, 0xde, 0x91, 0x5f, 0x1e, 0xe8, 0xf6, 0x4a, 0x1f, 0x2d, 0xb5, 0x39, 0xdb, 0x82,
0x81, 0x44, 0xd9, 0x52, 0x86, 0xa3, 0x1c, 0x05, 0x64, 0x8a, 0xf2, 0x7f, 0xf2, 0x1b, 0x6a, 0x91,
0xf2, 0x8a, 0xcf, 0x22, 0xab, 0x9c, 0x64, 0x7f, 0x01, 0x4f, 0xcd, 0x09, 0xee, 0x42, 0xc3, 0x9e,
0x0c, 0xd6, 0x72, 0x69, 0x6c, 0x9e, 0x0e, 0x6c, 0xf3, 0x54, 0x28, 0xe9, 0x78, 0x04, 0x27, 0x41,
0xe8, 0xf0, 0x44, 0xe9, 0xc6, 0x7c, 0x16, 0x24, 0xf3, 0x38, 0xb6, 0x8b, 0x0e, 0x34, 0x19, 0xd5,
0xb5, 0x62, 0x79, 0x17, 0xa8, 0x69, 0x12, 0xe4, 0xd3, 0x77, 0x1b, 0x96, 0xc9, 0x02, 0xf6, 0xbc,
0x5a, 0x03, 0x87, 0xb9, 0x2a, 0x97, 0x89, 0x88, 0x6a, 0x14, 0xc4, 0xab, 0x92, 0xaf, 0xd9, 0xe4,
0x6f, 0x59, 0x17, 0x8d, 0x2a, 0x6e, 0x1a, 0xf6, 0x0d, 0xb8, 0xba, 0x27, 0xb5, 0x79, 0x45, 0x7a,
0xe4, 0x09, 0x18, 0xf4, 0xff, 0xd6, 0xea, 0xa6, 0x24, 0xad, 0x6a, 0x08, 0x92, 0xb9, 0x04, 0x8c,
0x85, 0xc2, 0x68, 0x01, 0x87, 0x23, 0x6a, 0xef, 0xbb, 0x92, 0x56, 0x04, 0x65, 0xa7, 0x65, 0xe3,
0xe8, 0xc9, 0x7a, 0xe7, 0xd5, 0xf9, 0x58, 0x9f, 0x51, 0x51, 0x13, 0xbd, 0x5a, 0xae, 0x21, 0xa0,
0x1b, 0x6b, 0x14, 0x65, 0x1d, 0xfe, 0x51, 0x44, 0x85, 0xaa, 0xd5, 0xd1, 0x7d, 0x2f, 0xa2, 0x1d,
0x9a, 0x6b, 0x0b, 0x88, 0x63, 0x98, 0xd0, 0xe6, 0xfb, 0x47, 0xe0, 0xb9, 0x59, 0xc7, 0x1f, 0x15,
0x31, 0xec, 0xf2, 0x98, 0xce, 0x7d, 0xa3, 0x32, 0x3f, 0x9b, 0xfc, 0xe5, 0xfb, 0x26, 0x3f, 0xec,
0xc3, 0x9d, 0x5a, 0xaa, 0x00, 0x53, 0xa2, 0x26, 0x1a, 0xf8, 0x91, 0x40, 0x04, 0x79, 0x7a, 0x71,
0x7e, 0x96, 0x25, 0x36, 0xb6, 0x64, 0x2e, 0xc8, 0xfd, 0x34, 0x4e, 0xd2, 0xc0, 0xc0, 0x9a, 0x7a,
0xaf, 0xd9, 0xbc, 0xbb, 0xbb, 0x73, 0xee, 0x5a, 0x0e, 0x17, 0xe3, 0xa6, 0xef, 0xba, 0x2e, 0x5e,
0xcd, 0x0d, 0xa2, 0xee, 0xd2, 0x81, 0x81, 0xe5, 0x54, 0x83, 0xe8, 0x54, 0x48, 0xf6, 0x95, 0xe5,
0x3d, 0xb2, 0x84, 0x09, 0xa6, 0x3f, 0x7a, 0xaf, 0x0e, 0x0f, 0x61, 0xa2, 0xdb, 0x87, 0x4e, 0xc1,
0xbf, 0xb2, 0x1e, 0x81, 0x0e, 0xfc, 0x2f, 0xef, 0x68, 0xe8, 0xb4, 0x0a, 0x69, 0x60, 0x4d, 0x21,
0xeb, 0x0a, 0x81, 0x5e, 0x8a, 0x59, 0xa5, 0x1e, 0x71, 0x1d, 0xcf, 0x26, 0x87, 0x7d, 0x9d, 0xea,
0x3e, 0xb2, 0x5b, 0x97, 0x07, 0xa7, 0x07, 0x97, 0x9d, 0xd3, 0xf6, 0xa5, 0x77, 0xf4, 0xd6, 0xb7,
0x7d, 0x95, 0xde, 0x71, 0x49, 0xd7, 0xf6, 0xbd, 0x53, 0xaf, 0x5b, 0xea, 0xc1, 0x94, 0xc3, 0x11,
0x00, 0xfa, 0x2e, 0xcc, 0xf0, 0xda, 0x97, 0xad, 0xd3, 0xa3, 0xf3, 0xae, 0xdd, 0x39, 0xc5, 0xd4,
0xcf, 0xd1, 0x69, 0xf7, 0xb2, 0x03, 0xc8, 0x0e, 0x2f, 0xbd, 0xee, 0xa9, 0xe7, 0x5d, 0x1e, 0xc2,
0x18, 0x26, 0x20, 0xd4, 0x67, 0x1b, 0x3e, 0xbd, 0x56, 0x39, 0x19, 0x24, 0x33, 0x9f, 0x93, 0x17,
0x3c, 0x02, 0x23, 0x2f, 0x41, 0x1a, 0xc5, 0x98, 0x72, 0x4e, 0xd9, 0xe6, 0x6a, 0xc7, 0x9b, 0x8f,
0xc0, 0x61, 0x9a, 0x0d, 0x7c, 0xd1, 0x03, 0xa1, 0x83, 0x89, 0xc0, 0x4a, 0x90, 0x0b, 0xde, 0x41,
0x3e, 0x1d, 0xe9, 0x4b, 0x47, 0xa7, 0xd7, 0x7f, 0xe3, 0x21, 0x73, 0xb4, 0x7f, 0x59, 0x4f, 0xad,
0xeb, 0xe7, 0x2e, 0xd0, 0x1a, 0xdc, 0x0e, 0xe3, 0x79, 0x6a, 0xfa, 0x06, 0xb0, 0x55, 0xb7, 0xe1,
0x67, 0x67, 0xef, 0x58, 0xfb, 0x3b, 0x57, 0xdd, 0x12, 0xcf, 0x6f, 0x0f, 0x90, 0x9e, 0xb8, 0x39,
0x55, 0xdd, 0xf3, 0x33, 0x11, 0xcf, 0x46, 0x38, 0xb6, 0x54, 0xd6, 0xa4, 0xb3, 0xb2, 0xda, 0xb0,
0x10, 0x83, 0xa4, 0x02, 0x0c, 0x11, 0x0f, 0x7a, 0xe8, 0xc1, 0x40, 0x40, 0xfd, 0x98, 0xea, 0x77,
0x27, 0x6b, 0x38, 0x88, 0x94, 0xea, 0xce, 0xef, 0x22, 0xb6, 0x1c, 0xc7, 0x4d, 0xbe, 0xfe, 0x5e,
0xbe, 0xb4, 0x20, 0x41, 0xaa, 0xae, 0x85, 0xa7, 0x88, 0xfa, 0x52, 0x05, 0x1d, 0xab, 0x9f, 0xa7,
0xa3, 0x7e, 0x47, 0x43, 0x1b, 0x74, 0x5c, 0xf7, 0x97, 0x5c, 0x37, 0xb3, 0x24, 0x3a, 0x3e, 0xa9,
0x49, 0x98, 0xd1, 0xdb, 0xe8, 0xd6, 0xe5, 0x3a, 0xa3, 0xb4, 0x26, 0x8d, 0x87, 0xff, 0xf9, 0xf9,
0xe3, 0x6f, 0xa6, 0xce, 0x57, 0xb1, 0xe0, 0xcd, 0x32, 0x4f, 0xa1, 0x1b, 0xbd, 0xab, 0x37, 0xfd,
0xec, 0x89, 0x4b, 0x2d, 0x20, 0x97, 0xb5, 0x78, 0x1c, 0x6e, 0x45, 0x2a, 0x1e, 0x97, 0x18, 0x33,
0x99, 0x0c, 0xc2, 0x6c, 0x1b, 0x85, 0x08, 0x01, 0x39, 0x86, 0xe3, 0xf6, 0xeb, 0x25, 0x08, 0x2c,
0x65, 0x1f, 0x60, 0x77, 0x85, 0x93, 0x82, 0x18, 0x98, 0xe9, 0xd9, 0x2d, 0xcb, 0xf6, 0x3a, 0xd6,
0xd6, 0xc1, 0x96, 0xdd, 0xde, 0x3d, 0xd8, 0xb6, 0xbb, 0x7a, 0x10, 0xc3, 0x7b, 0x5c, 0xea, 0x7a,
0x05, 0x16, 0x55, 0x3a, 0xed, 0x13, 0xb0, 0x69, 0x50, 0xa8, 0xff, 0x52, 0x95, 0x0b, 0xdc, 0x5f,
0x5d, 0xc3, 0x50, 0x5c, 0xae, 0xd9, 0xb5, 0x6f, 0x9a, 0x19, 0x9f, 0x78, 0x59, 0x70, 0xfe, 0x4c,
0x79, 0x72, 0x53, 0xb9, 0x4a, 0x16, 0x73, 0xe0, 0xb2, 0xa1, 0x8f, 0x41, 0x11, 0x60, 0xf1, 0xe6,
0x8f, 0xf3, 0xb3, 0x53, 0x70, 0xa5, 0x7f, 0x67, 0x70, 0x91, 0x4c, 0x25, 0x04, 0xc1, 0xd8, 0xf9,
0x6b, 0xcc, 0x6f, 0xe1, 0x5a, 0x72, 0x6d, 0x2f, 0x31, 0x1d, 0xd3, 0x33, 0xc0, 0x17, 0xc4, 0x58,
0x81, 0x01, 0x54, 0x4d, 0x44, 0x6d, 0xac, 0xac, 0xbe, 0xd8, 0xa2, 0xc0, 0xb8, 0x88, 0x61, 0x9b,
0xf9, 0x95, 0x92, 0xa3, 0xe3, 0xe1, 0x63, 0x65, 0x23, 0xa0, 0x44, 0xe9, 0x0c, 0xfa, 0xd8, 0x05,
0xbb, 0x97, 0xb6, 0x41, 0x1a, 0xc4, 0x50, 0x26, 0xe6, 0x60, 0x89, 0x62, 0x8e, 0x39, 0x27, 0x0e,
0xdc, 0x7c, 0x86, 0x4b, 0x2c, 0x1d, 0xe7, 0x6a, 0xf8, 0x41, 0xb2, 0x29, 0xe8, 0x4c, 0xcc, 0xc2,
0x4f, 0x34, 0xc6, 0xb2, 0x42, 0x16, 0x9c, 0x20, 0x28, 0xd2, 0xe2, 0x4c, 0x04, 0x1b, 0x05, 0x46,
0x13, 0xc8, 0xb1, 0xb7, 0x91, 0xc3, 0x84, 0xc0, 0x2c, 0x12, 0xab, 0x91, 0x63, 0xbc, 0xc7, 0xfe,
0x1e, 0x51, 0xf9, 0xb2, 0xca, 0x00, 0xf9, 0xac, 0x88, 0xe9, 0xd5, 0x69, 0xc3, 0x08, 0x26, 0x9a,
0x32, 0x3e, 0x97, 0xa6, 0x62, 0x6e, 0x65, 0x7b, 0xac, 0x65, 0xa9, 0x55, 0x39, 0x78, 0x49, 0xd3,
0xf8, 0xf4, 0xf1, 0xf3, 0x05, 0x28, 0x49, 0x53, 0xcb, 0x19, 0x74, 0x1a, 0x05, 0x4c, 0x95, 0x2c,
0xff, 0xc6, 0xc5, 0xf4, 0x1d, 0xc4, 0x27, 0xb9, 0xee, 0xd1, 0xcc, 0xb3, 0xea, 0xa8, 0x05, 0x6e,
0xab, 0x98, 0x94, 0x13, 0xaa, 0xa2, 0x6c, 0x52, 0xcb, 0x7e, 0xe9, 0xad, 0x68, 0xfa, 0x90, 0x0c,
0xc9, 0xfa, 0x1d, 0x17, 0x93, 0x1f, 0x92, 0x11, 0x07, 0x95, 0x8e, 0x46, 0xe6, 0x24, 0x95, 0xc1,
0x9a, 0x7d, 0x0e, 0x3b, 0x06, 0x3d, 0x79, 0x52, 0xd4, 0xb5, 0xa4, 0x78, 0x28, 0x0c, 0x8e, 0xde,
0xd1, 0x48, 0x92, 0x11, 0x93, 0xa0, 0xd3, 0xf9, 0x71, 0x69, 0xec, 0x03, 0xf8, 0xbe, 0xa1, 0x36,
0xb1, 0xa9, 0xea, 0x7c, 0x68, 0x8c, 0x1a, 0x92, 0x29, 0xad, 0x31, 0xad, 0xbe, 0x9a, 0x92, 0x57,
0xa2, 0x4c, 0x53, 0xd7, 0x72, 0xa4, 0xa3, 0x7e, 0xe1, 0x24, 0x97, 0x56, 0xc3, 0xb3, 0x56, 0x40,
0x02, 0xe0, 0x65, 0x56, 0x21, 0x59, 0x25, 0x6c, 0xcc, 0xf2, 0xa8, 0x0c, 0x6a, 0xb5, 0xd7, 0x00,
0xd7, 0x90, 0x70, 0x49, 0xa2, 0x10, 0xf6, 0x27, 0x1a, 0x3d, 0x10, 0xa4, 0x1c, 0x02, 0xb5, 0x1a,
0xa7, 0xd5, 0x85, 0x01, 0x77, 0xb9, 0x80, 0x93, 0x31, 0x19, 0xb8, 0x7d, 0xcc, 0xec, 0xa2, 0x75,
0xc3, 0xb5, 0xa4, 0x2f, 0x07, 0x01, 0xeb, 0xcb, 0xfd, 0xfd, 0xb5, 0x9f, 0xb9, 0xc9, 0x58, 0x7d,
0xbd, 0x04, 0x56, 0x57, 0x6b, 0xab, 0x90, 0x99, 0x55, 0xf4, 0xd7, 0x32, 0x92, 0x15, 0x19, 0x81,
0x32, 0x88, 0xac, 0x43, 0xe6, 0xa2, 0xa8, 0x10, 0x30, 0x9b, 0xa7, 0x13, 0xb8, 0xff, 0x65, 0xac,
0xcb, 0x3a, 0xeb, 0x37, 0x4a, 0xad, 0x34, 0x32, 0x2c, 0x1e, 0xa2, 0xb5, 0x91, 0x91, 0xe0, 0x53,
0x75, 0x7f, 0xef, 0x91, 0x1b, 0xd8, 0xe8, 0xd5, 0x6a, 0x0b, 0x4b, 0x03, 0x0f, 0xdc, 0xcc, 0xe6,
0x4a, 0x39, 0xf7, 0xbd, 0x2b, 0xd7, 0xee, 0xe6, 0x7f, 0xe0, 0xe6, 0x56, 0x7c, 0x5c, 0xaf, 0xf2,
0x44, 0x87, 0x0c, 0x70, 0x31, 0x47, 0x39, 0x17, 0xb3, 0x62, 0x48, 0xa8, 0x3c, 0x35, 0x2b, 0x52,
0x69, 0x78, 0xa0, 0x1e, 0xc5, 0x98, 0x09, 0x0d, 0x4b, 0xcb, 0x70, 0x82, 0x2b, 0x0d, 0x63, 0xc7,
0xfe, 0x41, 0xdb, 0xca, 0x52, 0x77, 0xd8, 0x0b, 0x7e, 0x00, 0x97, 0x91, 0x51, 0x32, 0x67, 0x2b,
0x3d, 0x41, 0x04, 0x59, 0x3f, 0x6e, 0x03, 0x66, 0xe1, 0xfb, 0x65, 0x64, 0x7c, 0x44, 0x84, 0x42,
0xf5, 0x52, 0x73, 0x13, 0xa5, 0xea, 0x17, 0x04, 0xfc, 0xf8, 0x78, 0xf0, 0x32, 0x08, 0x58, 0xc6,
0xb7, 0xb5, 0x54, 0xa5, 0x84, 0x5b, 0xc1, 0xe8, 0xd7, 0xd5, 0x1a, 0x81, 0x44, 0x04, 0xcc, 0x82,
0xf9, 0x46, 0x32, 0x9f, 0xde, 0x42, 0xa0, 0x0a, 0xc7, 0x16, 0xb8, 0x21, 0xe8, 0x95, 0x8f, 0x8f,
0x72, 0xe0, 0xc2, 0x5f, 0xc7, 0x20, 0x87, 0xc7, 0xc7, 0x97, 0xbf, 0xa9, 0x71, 0x58, 0x00, 0x3c,
0x2a, 0x1b, 0x83, 0xc9, 0x4b, 0xab, 0x82, 0x74, 0x85, 0x44, 0xf0, 0x67, 0x98, 0x81, 0xdb, 0xfe,
0x95, 0xc8, 0x48, 0x6a, 0x78, 0xd7, 0x28, 0x1d, 0x95, 0xf4, 0x0b, 0xe8, 0x95, 0x7b, 0xbd, 0xd6,
0xab, 0x2b, 0xc7, 0x71, 0xe8, 0x75, 0x9f, 0x41, 0x67, 0x80, 0xbb, 0x20, 0xf4, 0x2e, 0x81, 0xc2,
0xaf, 0x72, 0x90, 0xfa, 0xb1, 0x02, 0x12, 0x75, 0xa6, 0x74, 0xb6, 0xce, 0xf0, 0x98, 0x4b, 0x58,
0x1f, 0x8e, 0xb1, 0x51, 0x4c, 0x55, 0x64, 0xb0, 0x4d, 0xc1, 0x60, 0x99, 0xdc, 0x88, 0x60, 0x4c,
0x48, 0xd3, 0xb8, 0xc0, 0x62, 0x3a, 0x3e, 0x28, 0x45, 0xc1, 0x14, 0xa5, 0x5c, 0x38, 0xb3, 0xc9,
0x34, 0x4a, 0xd3, 0x68, 0xac, 0x95, 0xec, 0x81, 0xcf, 0x05, 0xb9, 0x15, 0xfc, 0x2e, 0x05, 0x89,
0x90, 0x2f, 0x7c, 0x4e, 0xd2, 0x09, 0x9f, 0xc7, 0x21, 0x99, 0x09, 0x7e, 0x4b, 0x6f, 0xe3, 0x07,
0x92, 0x39, 0xa0, 0xac, 0xf4, 0x3d, 0xa5, 0xb0, 0xe9, 0x10, 0x51, 0xc0, 0x32, 0x49, 0x48, 0x70,
0x23, 0x41, 0xf1, 0x55, 0x75, 0x1c, 0x26, 0xcc, 0x98, 0x80, 0x09, 0x23, 0xac, 0xf3, 0x63, 0xcd,
0x3b, 0x5f, 0x53, 0x53, 0x81, 0x89, 0x2d, 0x90, 0x36, 0xb8, 0x58, 0x38, 0x97, 0xc8, 0x2d, 0x03,
0x30, 0x96, 0x21, 0x47, 0xbd, 0x9f, 0x30, 0xc1, 0x1c, 0x70, 0x86, 0xe7, 0x48, 0x1c, 0x7c, 0xab,
0x49, 0x61, 0x81, 0xe4, 0x25, 0x78, 0xc7, 0x7c, 0x72, 0x66, 0xeb, 0xef, 0xa2, 0x45, 0x5a, 0x8e,
0x69, 0xb6, 0x0e, 0x17, 0x1b, 0x91, 0x3f, 0x43, 0xad, 0x3f, 0x68, 0x5d, 0x3f, 0xb6, 0x40, 0x9f,
0xb6, 0x13, 0xaa, 0x56, 0x68, 0x47, 0xa3, 0xd7, 0xd2, 0x47, 0x29, 0xc2, 0xad, 0x7f, 0x88, 0xb1,
0x0f, 0xc4, 0x43, 0x10, 0x10, 0x44, 0xb1, 0xc4, 0xdb, 0x6a, 0x70, 0xac, 0x72, 0x01, 0x53, 0x65,
0xf6, 0xcd, 0x7f, 0x64, 0xcb, 0xfc, 0x4f, 0xf8, 0xba, 0x09, 0x1b, 0x58, 0xd3, 0x5b, 0x61, 0xd5,
0xc3, 0xdf, 0xc2, 0x5d, 0x09, 0x70, 0x57, 0x62, 0xb0, 0xc5, 0xfe, 0xfb, 0x62, 0xed, 0xbf, 0x78,
0x50, 0x06, 0xb8, 0x12, 0xd7, 0x36, 0x5d, 0xb3, 0x52, 0x7d, 0x97, 0x9b, 0xdd, 0x60, 0xa9, 0x53,
0x7a, 0x68, 0x62, 0xec, 0x0b, 0x9b, 0xea, 0x84, 0x3e, 0x1e, 0x83, 0x78, 0x26, 0x16, 0x72, 0x31,
0x72, 0x6f, 0x91, 0xe4, 0x8a, 0xfa, 0x95, 0x3d, 0xa4, 0x26, 0xb7, 0x40, 0xa3, 0x01, 0x0b, 0x9e,
0x46, 0x70, 0xce, 0x61, 0xf6, 0x58, 0x5d, 0x6d, 0xb4, 0x4b, 0x49, 0x55, 0xde, 0x10, 0x5c, 0xb6,
0xc9, 0xaf, 0x92, 0xeb, 0x75, 0x35, 0xeb, 0x69, 0x9a, 0xe2, 0x32, 0x4d, 0x79, 0x28, 0x0c, 0xb4,
0x15, 0x35, 0x9f, 0xa7, 0xa7, 0xeb, 0x8a, 0xce, 0xfa, 0x79, 0x16, 0x72, 0x15, 0xd5, 0xb9, 0x2a,
0x0d, 0xaf, 0xcb, 0x32, 0xbb, 0xf0, 0x16, 0xa5, 0x1a, 0xf5, 0x76, 0x22, 0x7b, 0xbc, 0x85, 0x68,
0x53, 0x07, 0x5f, 0x51, 0x42, 0x24, 0xbb, 0x4e, 0x90, 0x80, 0xeb, 0xaa, 0xc6, 0x5c, 0xe0, 0xf2,
0xb1, 0xfa, 0xb0, 0x2d, 0x5f, 0x61, 0x7c, 0x66, 0xf8, 0x20, 0x45, 0x3f, 0xd1, 0x29, 0x3d, 0x8d,
0xc1, 0xf7, 0x24, 0x04, 0xf0, 0x63, 0xc9, 0x66, 0x7d, 0xa9, 0xcd, 0xde, 0x1f, 0xd8, 0x69, 0x9d,
0x97, 0x82, 0x22, 0xab, 0x28, 0xd7, 0x3c, 0xc3, 0x89, 0xae, 0xcc, 0xe4, 0xaf, 0xcd, 0x90, 0x93,
0x70, 0x1b, 0x27, 0x48, 0x3f, 0x04, 0x20, 0xf8, 0x56, 0x40, 0xb1, 0x11, 0xee, 0x48, 0xbb, 0x9c,
0xf0, 0xd9, 0x83, 0x26, 0xfa, 0xf5, 0x52, 0xac, 0x72, 0x5b, 0x45, 0x4e, 0x34, 0x4f, 0x37, 0x78,
0x0d, 0xa8, 0x30, 0x82, 0x28, 0xed, 0xb0, 0xce, 0x48, 0x41, 0x10, 0xd6, 0x73, 0xb6, 0xab, 0x61,
0xf1, 0x22, 0x12, 0xf5, 0x04, 0xcc, 0x62, 0x18, 0x18, 0x46, 0x61, 0x23, 0x0c, 0x6c, 0x84, 0x0d,
0x50, 0xd5, 0x72, 0xdb, 0x80, 0x90, 0xd8, 0xb7, 0x8a, 0xf3, 0x1a, 0x47, 0xd0, 0x85, 0xe3, 0xe1,
0xa0, 0x55, 0x13, 0xab, 0xb4, 0xfa, 0x70, 0xd0, 0x63, 0xfb, 0xde, 0xb5, 0x35, 0x84, 0x48, 0xfd,
0xd5, 0xeb, 0x65, 0xd1, 0x81, 0x19, 0x74, 0xd9, 0x04, 0xa7, 0xfd, 0xb3, 0xe7, 0xba, 0xab, 0x9f,
0x6c, 0x72, 0xa3, 0xca, 0xbc, 0x4b, 0x84, 0x53, 0x6f, 0x8e, 0xcb, 0xb0, 0x98, 0x73, 0xcf, 0xbe,
0xfc, 0xca, 0x57, 0x0b, 0xbf, 0x3c, 0x6b, 0x03, 0x17, 0x46, 0xed, 0x3e, 0x1c, 0x02, 0xc1, 0x30,
0x0b, 0xe9, 0x5d, 0xbb, 0xe1, 0x6f, 0xab, 0x67, 0x7d, 0x98, 0x82, 0xb7, 0x0d, 0x6e, 0x76, 0xd5,
0x09, 0x70, 0xa9, 0xe1, 0xca, 0xba, 0xc9, 0x0d, 0x58, 0x57, 0xe4, 0x36, 0xde, 0x58, 0x82, 0xd2,
0xe5, 0x06, 0x1d, 0x04, 0xc9, 0x2f, 0x51, 0xad, 0x6c, 0xd5, 0xcb, 0x4b, 0x6c, 0xfa, 0xd9, 0xde,
0x19, 0xde, 0xfb, 0x0d, 0xf5, 0x0e, 0xc4, 0x16, 0x2f, 0x03, 0x15, 0xc3, 0xed, 0xed, 0x45, 0xf5,
0x12, 0x16, 0xad, 0xd7, 0xc5, 0x68, 0xbd, 0x86, 0x56, 0x59, 0x94, 0x55, 0x46, 0xa9, 0x05, 0x47,
0x5a, 0xb5, 0xa3, 0x94, 0xfd, 0x2b, 0xab, 0x20, 0x84, 0x74, 0x85, 0x5e, 0x6f, 0x14, 0xae, 0xde,
0xa8, 0xa2, 0xec, 0x55, 0x14, 0xfe, 0xa3, 0x5a, 0xcd, 0xbd, 0x7e, 0xb3, 0xbe, 0x9b, 0x61, 0x28,
0xcf, 0x76, 0xdd, 0x57, 0x75, 0x85, 0x71, 0x37, 0x7e, 0x34, 0x9d, 0x12, 0xfa, 0x2c, 0x27, 0x76,
0x6d, 0x93, 0xda, 0x40, 0x25, 0xdb, 0x5c, 0x19, 0xae, 0x24, 0xd3, 0x7e, 0x88, 0xae, 0xbe, 0x0e,
0x58, 0x4b, 0x61, 0xda, 0xb8, 0x74, 0x64, 0x19, 0xfb, 0xcc, 0xda, 0x96, 0xd2, 0xcc, 0x7d, 0xb1,
0x61, 0x59, 0x35, 0x13, 0x91, 0xdb, 0xec, 0x03, 0xc2, 0xb2, 0x22, 0x28, 0xdb, 0x6a, 0x22, 0x52,
0xdb, 0x07, 0x57, 0x4f, 0x1a, 0xf4, 0x87, 0xb6, 0x04, 0x1e, 0x80, 0x1d, 0x5c, 0xf0, 0x53, 0x76,
0x6f, 0xea, 0x6e, 0x5b, 0x2a, 0xfd, 0x57, 0x3f, 0xad, 0x6b, 0x4b, 0xeb, 0xb8, 0x7a, 0x0f, 0x22,
0x6c, 0x5e, 0x5c, 0xc4, 0xd2, 0xa1, 0xe0, 0x20, 0x59, 0xd7, 0x76, 0xcb, 0x3b, 0x5e, 0xa0, 0x82,
0xa8, 0xc7, 0x16, 0xeb, 0x93, 0xcd, 0x64, 0x83, 0x81, 0xd7, 0x81, 0x08, 0x6e, 0x70, 0xf8, 0x28,
0xaa, 0xcf, 0x26, 0xb2, 0xcb, 0x11, 0x92, 0x65, 0xb8, 0x06, 0x66, 0x2f, 0xc1, 0xe9, 0x99, 0x9d,
0x06, 0xcf, 0x43, 0xc5, 0x7d, 0xbe, 0x2a, 0xee, 0x41, 0xf9, 0xea, 0xbb, 0xee, 0x9f, 0x98, 0x78,
0x78, 0x02, 0x08, 0x2e, 0xa2, 0xd1, 0x37, 0x96, 0x83, 0x55, 0xea, 0xba, 0x3b, 0xeb, 0xef, 0x95,
0x47, 0x36, 0xd9, 0x83, 0x1a, 0x37, 0xfb, 0xc5, 0xc7, 0x26, 0x1b, 0x59, 0x9f, 0xf2, 0xbf, 0x91,
0x69, 0xaa, 0x7f, 0x92, 0xf4, 0xbf, 0xe4, 0x09, 0x6e, 0xa3, 0xaa, 0x34, 0x00, 0x00
};

View File

@ -271,479 +271,483 @@ const uint8_t PAGE_settings_wifi[] PROGMEM = {
// Autogenerated from wled00/data/settings_leds.htm, do not edit!!
const uint16_t PAGE_settings_leds_length = 7521;
const uint16_t PAGE_settings_leds_length = 7593;
const uint8_t PAGE_settings_leds[] PROGMEM = {
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0x6b, 0x77, 0xda, 0xc8,
0x92, 0xdf, 0xf9, 0x15, 0x6d, 0xcd, 0x8c, 0x23, 0x5d, 0x04, 0x48, 0x3c, 0x32, 0x04, 0x10, 0x5e,
0xe3, 0x3c, 0xc6, 0x77, 0xec, 0xb1, 0x0f, 0x78, 0x92, 0x7b, 0x4f, 0x26, 0x27, 0x11, 0x52, 0x03,
0x8a, 0x85, 0xc4, 0x95, 0x84, 0x1f, 0x6b, 0xb3, 0xbf, 0x69, 0x7f, 0xc3, 0xfe, 0xb2, 0xad, 0xea,
0x6e, 0xbd, 0x40, 0x02, 0x67, 0xcf, 0xfd, 0xb4, 0x73, 0xce, 0xc4, 0x20, 0x55, 0x57, 0x57, 0x57,
0xd7, 0xbb, 0xab, 0x19, 0x1c, 0xbd, 0xbd, 0x3a, 0xbb, 0xf9, 0xe7, 0xf5, 0x3b, 0xb2, 0x88, 0x96,
0xee, 0x70, 0x80, 0xff, 0x12, 0xd7, 0xf4, 0xe6, 0x86, 0x44, 0x3d, 0x09, 0xbe, 0x53, 0xd3, 0x1e,
0x0e, 0x96, 0x34, 0x32, 0x89, 0xb5, 0x30, 0x83, 0x90, 0x46, 0x86, 0xb4, 0x8e, 0x66, 0xb5, 0xae,
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x13, 0xdd, 0x3c, 0xdb, 0x76, 0xe2, 0x48,
0x92, 0xef, 0x7c, 0x45, 0x5a, 0xdd, 0xed, 0x92, 0x1a, 0x19, 0x24, 0x2e, 0x6e, 0x0c, 0x08, 0xaf,
0xa1, 0x2e, 0xed, 0x19, 0xbb, 0xed, 0x03, 0xae, 0xaa, 0x99, 0x53, 0x5d, 0xa7, 0x4b, 0x48, 0x09,
0xa8, 0x2c, 0x24, 0x46, 0x12, 0xbe, 0xac, 0xed, 0xfd, 0xa6, 0xfd, 0x86, 0xfd, 0xb2, 0x8d, 0xc8,
0x4c, 0xdd, 0x40, 0x02, 0xd7, 0x9e, 0x79, 0xda, 0x3e, 0xa7, 0xcb, 0x20, 0x45, 0x46, 0x46, 0x46,
0xc6, 0x3d, 0x23, 0xe9, 0x1f, 0xbc, 0xbd, 0x1a, 0xdd, 0xfc, 0xf3, 0xfa, 0x1d, 0x59, 0x44, 0x4b,
0x77, 0xd0, 0xc7, 0x7f, 0x89, 0x6b, 0x7a, 0x73, 0x43, 0xa2, 0x9e, 0x04, 0xdf, 0xa9, 0x69, 0x0f,
0xfa, 0x4b, 0x1a, 0x99, 0xc4, 0x5a, 0x98, 0x41, 0x48, 0x23, 0x43, 0x5a, 0x47, 0xb3, 0xa3, 0x8e,
0x24, 0x9e, 0x56, 0x3c, 0x73, 0x49, 0x0d, 0xe9, 0xce, 0xa1, 0xf7, 0x2b, 0x3f, 0x88, 0x24, 0x62,
0xf9, 0x5e, 0x44, 0x3d, 0x00, 0xbb, 0x77, 0xec, 0x68, 0x61, 0x74, 0x34, 0x2d, 0x01, 0xdd, 0x7a,
0x65, 0xd3, 0x3b, 0xc7, 0xa2, 0x35, 0xf6, 0x45, 0x75, 0x3c, 0x27, 0x72, 0x4c, 0xb7, 0x16, 0x5a,
0xa6, 0x4b, 0x0d, 0x5d, 0x5d, 0x9a, 0x0f, 0xce, 0x72, 0xbd, 0x4c, 0xbe, 0xaf, 0x43, 0x1a, 0xb0,
0x2f, 0xe6, 0x14, 0xbe, 0x7b, 0xbe, 0xb4, 0x33, 0xf3, 0x70, 0x10, 0x39, 0x91, 0x4b, 0x87, 0x17,
0xef, 0xde, 0x92, 0x09, 0x8d, 0x22, 0xc7, 0x9b, 0x87, 0x83, 0x06, 0x7f, 0x36, 0x08, 0xad, 0xc0,
0x59, 0x45, 0xc3, 0xca, 0x9d, 0x19, 0x10, 0xdb, 0xb0, 0x7d, 0x6b, 0xbd, 0x04, 0x4a, 0x54, 0xd7,
0x5c, 0x05, 0xf4, 0xce, 0xe8, 0x74, 0x70, 0xbe, 0x11, 0x9f, 0xf6, 0xa3, 0xa1, 0xe1, 0x9f, 0x4b,
0xa3, 0x4d, 0x5b, 0xf8, 0xe1, 0x7a, 0x64, 0xb4, 0xb5, 0x37, 0xaf, 0xf1, 0xe3, 0x85, 0xa1, 0xb7,
0x5a, 0xec, 0xe1, 0xc5, 0xf4, 0x5f, 0x6b, 0x3f, 0x32, 0xb4, 0xbe, 0x5d, 0x5f, 0x2f, 0xbf, 0xae,
0x8c, 0xcf, 0x5f, 0x54, 0xbb, 0x1e, 0x84, 0x77, 0xb6, 0xf8, 0xe4, 0x7f, 0x9d, 0xaf, 0x1c, 0x9f,
0x7f, 0x01, 0x70, 0xfe, 0xad, 0xf5, 0xa6, 0x8f, 0xf3, 0xbb, 0xbe, 0xe5, 0xac, 0xd4, 0xc8, 0x59,
0x52, 0x7f, 0x1d, 0xa9, 0xd6, 0x3a, 0x8c, 0xfc, 0xe5, 0x24, 0x32, 0x83, 0x28, 0x34, 0x8e, 0x74,
0x35, 0x64, 0x9f, 0xde, 0x3a, 0x41, 0xf4, 0x88, 0xc3, 0x61, 0xf0, 0xd9, 0xd5, 0xd5, 0x1d, 0x0d,
0x02, 0xc7, 0xa6, 0xa1, 0xd1, 0x51, 0x61, 0x34, 0x80, 0xf5, 0x67, 0x6b, 0xcf, 0x8a, 0x1c, 0xdf,
0x23, 0xbf, 0xc9, 0xca, 0xd3, 0xbd, 0xe3, 0xd9, 0xfe, 0x7d, 0xdd, 0x5f, 0x51, 0x4f, 0x96, 0x16,
0x51, 0xb4, 0x0a, 0x7b, 0x8d, 0xc6, 0xad, 0xe7, 0xd7, 0xef, 0x5d, 0x6a, 0xd7, 0xe7, 0xb4, 0x31,
0xa3, 0x66, 0xb4, 0x0e, 0x68, 0xd8, 0x08, 0x05, 0x63, 0x1a, 0x3f, 0xc1, 0x9b, 0x5a, 0xfc, 0x4d,
0x52, 0x36, 0x09, 0xbe, 0xd1, 0x36, 0xbe, 0x64, 0x8c, 0xa4, 0x4a, 0x5f, 0x43, 0xea, 0xce, 0xb2,
0xd0, 0xf3, 0x73, 0x5b, 0xa6, 0xca, 0x53, 0x40, 0x01, 0xbd, 0x47, 0x70, 0xae, 0xe8, 0x9d, 0x4b,
0x91, 0xb7, 0xa3, 0x47, 0xf6, 0x2a, 0x05, 0xf5, 0x67, 0x33, 0x04, 0xcd, 0xc2, 0x84, 0xa3, 0xc7,
0x3f, 0x60, 0x13, 0xe1, 0xf1, 0x67, 0xed, 0x4b, 0xfd, 0xce, 0x74, 0xd7, 0xd4, 0xa8, 0xe9, 0xe9,
0x10, 0xd7, 0x37, 0xed, 0xbf, 0x4f, 0x64, 0xaa, 0x7a, 0xc6, 0x91, 0xa6, 0x3c, 0xb9, 0x34, 0x22,
0x91, 0x61, 0xd7, 0xad, 0x00, 0x96, 0x43, 0x05, 0x0e, 0x59, 0xe2, 0x7b, 0x2b, 0x29, 0xfd, 0xa8,
0x0e, 0xa4, 0x9e, 0x46, 0x51, 0xe0, 0x4c, 0xd7, 0x11, 0x85, 0x17, 0x81, 0x25, 0xa9, 0x54, 0x51,
0xb7, 0x9f, 0x47, 0x8f, 0x2b, 0x0a, 0x8b, 0x89, 0xe8, 0x43, 0xd4, 0xf8, 0x6e, 0xde, 0x99, 0x31,
0x82, 0x1d, 0x40, 0x33, 0x7c, 0xf4, 0x00, 0x85, 0xa7, 0xc0, 0x2e, 0x4e, 0x7d, 0xfb, 0xb1, 0x6e,
0xae, 0x80, 0x25, 0xf6, 0xd9, 0xc2, 0x71, 0x6d, 0x39, 0x42, 0x78, 0xd3, 0xb6, 0xdf, 0xdd, 0x01,
0x15, 0x17, 0x4e, 0x08, 0xa2, 0x4d, 0x03, 0x59, 0x42, 0x9a, 0x25, 0x55, 0x56, 0x8c, 0xe1, 0xd3,
0x07, 0x1a, 0x7d, 0x94, 0x15, 0xd5, 0x5a, 0x50, 0xeb, 0x76, 0xe2, 0xc0, 0x27, 0xc4, 0x3e, 0xba,
0x80, 0x0f, 0x35, 0xdd, 0x30, 0xb8, 0xe4, 0xc0, 0xc2, 0x8f, 0x8f, 0xf9, 0xc7, 0x7a, 0xb8, 0x70,
0x66, 0x91, 0xac, 0x6c, 0x8a, 0x11, 0x83, 0x08, 0xf8, 0x01, 0xac, 0x07, 0x10, 0x83, 0x22, 0x85,
0xbe, 0x4b, 0xeb, 0xae, 0x3f, 0x97, 0xa5, 0x77, 0xf8, 0x9c, 0x08, 0x6e, 0xc1, 0x3e, 0x91, 0x99,
0xe3, 0x52, 0xb6, 0x6e, 0xd0, 0x9c, 0x00, 0xf8, 0x73, 0x21, 0x9e, 0xfb, 0x33, 0x54, 0xce, 0x99,
0x33, 0x5f, 0x07, 0x26, 0x63, 0x2f, 0x5f, 0x37, 0x99, 0x99, 0x0e, 0x8a, 0xc9, 0x5f, 0xde, 0xb9,
0x67, 0xf9, 0xcb, 0x15, 0x70, 0x99, 0x92, 0x95, 0x39, 0xa7, 0xc4, 0x36, 0x23, 0xf3, 0x08, 0x76,
0x3b, 0xb3, 0x89, 0xe1, 0xc2, 0xbf, 0xbf, 0xf1, 0xcd, 0x30, 0xe2, 0x9b, 0xa2, 0x2b, 0x4f, 0x28,
0xd1, 0x91, 0x81, 0x72, 0x20, 0x45, 0xf8, 0x82, 0xed, 0x83, 0xe3, 0x01, 0xc9, 0xbf, 0xdd, 0x5c,
0x5e, 0x18, 0x14, 0xd6, 0x62, 0xb9, 0x66, 0x18, 0xe2, 0x46, 0x1b, 0xde, 0x89, 0x58, 0x46, 0x4f,
0x42, 0x4c, 0x92, 0x6a, 0xb9, 0xd4, 0x0c, 0x6e, 0xb8, 0x2a, 0xc8, 0x42, 0x25, 0xd8, 0x3e, 0x44,
0x8f, 0xb0, 0x3e, 0xd3, 0x73, 0x96, 0x8c, 0x54, 0x43, 0xf2, 0x7c, 0x0f, 0x16, 0x25, 0x20, 0x0c,
0x60, 0x64, 0x3c, 0x48, 0x8e, 0x69, 0x03, 0xb9, 0xcd, 0x4e, 0x95, 0xf9, 0x5c, 0x0f, 0xe8, 0xca,
0x35, 0x2d, 0x94, 0x08, 0x36, 0xa9, 0x84, 0x6b, 0x52, 0x9b, 0x6f, 0x34, 0x2d, 0xb3, 0xb2, 0xe9,
0x85, 0xb3, 0x74, 0xa2, 0x10, 0xd7, 0xa5, 0x46, 0xaa, 0xa9, 0x3a, 0xca, 0x13, 0xb3, 0x09, 0x94,
0xdb, 0x04, 0x8f, 0xdb, 0x04, 0x53, 0x58, 0x84, 0x88, 0x9b, 0x03, 0x27, 0x1d, 0xbf, 0x72, 0xbc,
0xf0, 0xea, 0x77, 0x99, 0x33, 0x84, 0x1a, 0x5b, 0x62, 0x7e, 0x63, 0xce, 0x99, 0xa4, 0x4b, 0x8e,
0xb7, 0x5a, 0x23, 0x8f, 0x66, 0x7e, 0x20, 0x3b, 0x60, 0x3f, 0x9c, 0x01, 0x6c, 0x23, 0xf5, 0xe6,
0xd1, 0xa2, 0xef, 0x54, 0xab, 0x7c, 0xb4, 0x67, 0xd0, 0xcf, 0xce, 0x97, 0x3a, 0xda, 0xb7, 0x7a,
0xb8, 0x9e, 0x86, 0x20, 0x8f, 0xde, 0x5c, 0xd6, 0xd4, 0xa6, 0xd2, 0x77, 0x66, 0xb0, 0x9f, 0x9a,
0x64, 0x18, 0xde, 0xf3, 0xb3, 0x74, 0xa1, 0xc7, 0x1f, 0x9a, 0xf1, 0x87, 0x16, 0x7e, 0x88, 0x37,
0xa5, 0x08, 0x0b, 0xc7, 0xb1, 0x42, 0x53, 0x7e, 0x0e, 0xca, 0x53, 0xa4, 0x8d, 0xd2, 0xc5, 0x8d,
0x54, 0x8d, 0x52, 0x95, 0x54, 0x75, 0x4d, 0x19, 0x1a, 0x5d, 0x4d, 0x41, 0xfb, 0xed, 0x78, 0x6b,
0xba, 0x01, 0x0c, 0x2f, 0x20, 0x03, 0x3f, 0xb4, 0xc5, 0x87, 0xf1, 0x85, 0xf8, 0x30, 0xba, 0x11,
0x1f, 0xce, 0xc7, 0x8c, 0xd4, 0xe3, 0x63, 0x49, 0x3a, 0xe2, 0x94, 0xb2, 0xc9, 0xe0, 0x7b, 0x4d,
0xcf, 0x3d, 0xe1, 0xab, 0x31, 0xc1, 0x18, 0x32, 0xa6, 0xdd, 0x02, 0xd3, 0x6e, 0x07, 0xdc, 0xd8,
0xc6, 0x9c, 0xbb, 0x05, 0xce, 0x99, 0xf5, 0xd5, 0x3a, 0x5c, 0xc8, 0xfc, 0xc5, 0xe7, 0xdb, 0x2f,
0x4a, 0x0e, 0x9a, 0xe9, 0x57, 0x11, 0x34, 0xd3, 0x41, 0x84, 0x86, 0x35, 0x99, 0xf5, 0xd0, 0x87,
0xf5, 0x7b, 0xc6, 0xd0, 0x33, 0x8c, 0x84, 0x45, 0x29, 0x25, 0xc8, 0x08, 0x45, 0x11, 0xb6, 0x8e,
0x2b, 0xd7, 0xb7, 0x89, 0x1f, 0x04, 0x8f, 0x2a, 0xdb, 0x7d, 0xf2, 0xf3, 0xd3, 0xdf, 0x27, 0x57,
0x7f, 0xd4, 0x39, 0xa7, 0x9d, 0xd9, 0xa3, 0x6c, 0x2a, 0x1b, 0x62, 0x99, 0xde, 0xab, 0x88, 0x4c,
0x29, 0x01, 0x0f, 0x66, 0xd7, 0xbf, 0x29, 0x6a, 0x8a, 0xcf, 0x90, 0x24, 0xfe, 0x6d, 0x06, 0xfe,
0x28, 0x04, 0xb3, 0x00, 0x76, 0x1d, 0x37, 0x18, 0x58, 0x73, 0x64, 0x78, 0xc0, 0x09, 0x60, 0x16,
0xfb, 0x90, 0x38, 0x94, 0x7f, 0x37, 0x81, 0x09, 0x62, 0x20, 0xd4, 0x0c, 0x28, 0x61, 0xd2, 0x09,
0xb6, 0xc4, 0x7d, 0x3c, 0x4c, 0x29, 0xb2, 0xf7, 0xbb, 0xe1, 0x54, 0xf5, 0xfe, 0xf7, 0x54, 0x86,
0xbf, 0xc7, 0x32, 0xec, 0xc3, 0x0e, 0x7e, 0x3f, 0x20, 0xc3, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c,
0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0xbe,
0xf2, 0xc4, 0x50, 0xc1, 0x47, 0xc3, 0xcf, 0x4d, 0xa2, 0x2b, 0x9c, 0x08, 0xb7, 0x90, 0x88, 0x97,
0xaa, 0x80, 0x7b, 0x40, 0x05, 0xb8, 0xe0, 0x7e, 0x4f, 0x04, 0x37, 0xc3, 0xae, 0xcc, 0xf3, 0xad,
0xed, 0xb8, 0x76, 0x3c, 0x66, 0x85, 0x5d, 0xc7, 0x42, 0xa9, 0x88, 0xee, 0x29, 0xf5, 0x60, 0x5f,
0x12, 0x55, 0xdd, 0x34, 0xf0, 0x8b, 0x20, 0x7a, 0x73, 0xc4, 0x76, 0xe1, 0x7b, 0x6e, 0x17, 0xbe,
0x67, 0x77, 0x61, 0x03, 0xff, 0xf1, 0x09, 0x8e, 0xb4, 0xd4, 0x16, 0x45, 0xc1, 0xe3, 0x64, 0x3d,
0x05, 0x73, 0x86, 0x0e, 0x17, 0x28, 0xb5, 0xeb, 0x93, 0x59, 0x1d, 0xad, 0x79, 0x06, 0x4f, 0x1d,
0x23, 0x1f, 0x58, 0xf2, 0x5b, 0x3a, 0x33, 0xd7, 0x6e, 0x84, 0xd8, 0x62, 0x13, 0x16, 0x93, 0x0c,
0x4c, 0x8b, 0xfc, 0xd5, 0x75, 0xe0, 0x83, 0x37, 0x30, 0xb9, 0x89, 0x15, 0x22, 0xca, 0xa2, 0x9f,
0xa1, 0x0e, 0x06, 0x54, 0x18, 0x2c, 0xe9, 0xc6, 0xf7, 0xc9, 0xd2, 0xf4, 0x1e, 0x09, 0x84, 0x5f,
0x21, 0x01, 0xd9, 0x20, 0x4b, 0x4a, 0x22, 0x9f, 0x2c, 0x4c, 0xcf, 0x76, 0xe9, 0x91, 0xd4, 0x47,
0xf3, 0x39, 0xd0, 0x69, 0xfb, 0xf8, 0x58, 0xf6, 0xaa, 0x86, 0xf4, 0x97, 0xf7, 0x57, 0x70, 0x06,
0x6e, 0x0c, 0xa2, 0x9a, 0x00, 0x54, 0x03, 0xfd, 0x93, 0xe9, 0x91, 0x77, 0x93, 0xeb, 0x56, 0xb3,
0x2e, 0xc5, 0xae, 0xcb, 0x53, 0x36, 0x8c, 0x74, 0xe6, 0x41, 0x3f, 0x9a, 0xae, 0x63, 0x3b, 0xd1,
0xa3, 0xac, 0xa0, 0x42, 0xc0, 0xd3, 0x90, 0x2f, 0x31, 0x63, 0xc3, 0xa9, 0xc7, 0xdc, 0xab, 0x30,
0xc1, 0xcc, 0x27, 0x61, 0xb8, 0x28, 0x29, 0x1c, 0x03, 0xb5, 0xfb, 0x6c, 0xe0, 0xc5, 0xa9, 0xe0,
0x03, 0x3d, 0xe1, 0x01, 0x60, 0x4f, 0x53, 0x63, 0x60, 0x80, 0xe5, 0xbe, 0xc7, 0x76, 0x42, 0x70,
0x1a, 0x8f, 0x00, 0x03, 0x36, 0xdb, 0x75, 0xc0, 0xfb, 0xf4, 0x84, 0x13, 0x62, 0xa0, 0xab, 0x70,
0xdd, 0x7c, 0x01, 0x6c, 0x6e, 0xbe, 0xa1, 0x76, 0x7c, 0x1c, 0x87, 0x00, 0x59, 0xa2, 0x2f, 0x4e,
0x33, 0x6e, 0x83, 0xc1, 0x43, 0x98, 0xc5, 0x87, 0x6c, 0x13, 0xcc, 0x27, 0xbf, 0x38, 0x85, 0x19,
0x77, 0x66, 0xef, 0x68, 0x46, 0x01, 0x05, 0x7f, 0x9e, 0x67, 0x27, 0x8b, 0xa7, 0x7f, 0x0a, 0xef,
0x9d, 0xc8, 0x5a, 0xc8, 0x05, 0x3c, 0x82, 0x50, 0x4b, 0xdd, 0x26, 0x03, 0x70, 0xab, 0x19, 0x85,
0xc9, 0x90, 0x04, 0x9a, 0x66, 0x99, 0x21, 0x25, 0x5a, 0xaf, 0x10, 0x95, 0xae, 0x8a, 0x3d, 0xe9,
0x4f, 0x21, 0x68, 0xbb, 0xed, 0x33, 0xd8, 0x96, 0xd6, 0xdb, 0x99, 0xa0, 0xa5, 0xe5, 0x20, 0x3a,
0x05, 0x10, 0x9d, 0x2c, 0x44, 0xa7, 0x00, 0xa2, 0x93, 0x83, 0x68, 0x16, 0x81, 0x34, 0x13, 0x18,
0x9b, 0xcb, 0x7d, 0x6f, 0x0f, 0x43, 0x63, 0x56, 0x6e, 0x18, 0xcc, 0x52, 0x07, 0x80, 0x34, 0xb0,
0x41, 0x79, 0x56, 0x0b, 0x6d, 0xc7, 0x04, 0x22, 0x64, 0xb4, 0x1c, 0xbb, 0x21, 0x1c, 0x97, 0x58,
0x08, 0x63, 0x62, 0xfd, 0x54, 0xb6, 0xb6, 0x07, 0xb0, 0x5d, 0xd2, 0x25, 0xc6, 0x20, 0x71, 0xb4,
0x7b, 0xc0, 0x4c, 0x9d, 0x49, 0x55, 0x2f, 0x35, 0x53, 0x4a, 0x5f, 0x68, 0x6e, 0x54, 0x3d, 0x30,
0x70, 0x72, 0x91, 0x1f, 0xa8, 0xd2, 0x41, 0xab, 0x79, 0x92, 0xea, 0x68, 0xcb, 0x30, 0x8a, 0x27,
0xd4, 0x72, 0xe3, 0x4e, 0xe8, 0xb0, 0xf9, 0xe6, 0xa4, 0xa9, 0xfd, 0x2d, 0xea, 0xe9, 0x1d, 0xf8,
0x07, 0x11, 0x0c, 0x0d, 0xc0, 0xc0, 0x5f, 0x74, 0xe1, 0xd1, 0x6b, 0xf8, 0x9f, 0x7d, 0x69, 0xc3,
0x87, 0x16, 0xfb, 0xd2, 0xd2, 0xc1, 0x58, 0x0e, 0xda, 0xdd, 0x93, 0x4e, 0xaf, 0xdd, 0x06, 0x99,
0x7d, 0x7e, 0x6e, 0x77, 0x50, 0x74, 0x05, 0x44, 0xca, 0x0e, 0x60, 0x0e, 0x65, 0x41, 0x26, 0xf2,
0x02, 0xc3, 0x4d, 0x35, 0xc2, 0x7f, 0x4c, 0x70, 0xea, 0x5c, 0xda, 0x96, 0xab, 0x7b, 0x33, 0xf0,
0xc0, 0x78, 0xec, 0xec, 0x1d, 0xdb, 0xf9, 0xcb, 0x58, 0xf1, 0x7e, 0x6d, 0x6a, 0xda, 0x8e, 0x66,
0x80, 0x2c, 0x18, 0x46, 0x4e, 0x98, 0x85, 0x39, 0x30, 0xf4, 0x66, 0x6f, 0x47, 0x71, 0x65, 0xf1,
0x2e, 0x2f, 0xfd, 0x7d, 0xee, 0xeb, 0xca, 0xa2, 0x3d, 0x10, 0x3c, 0x6a, 0xe5, 0xc3, 0x3d, 0x3f,
0x1b, 0xee, 0x31, 0xff, 0xc5, 0x9c, 0x5a, 0x49, 0xc0, 0x17, 0xfb, 0x31, 0xbf, 0x30, 0x94, 0x53,
0xc3, 0x74, 0x9b, 0xfd, 0x5c, 0x14, 0xc0, 0xf9, 0xb3, 0xd2, 0x6c, 0x74, 0x63, 0x19, 0xa9, 0x0d,
0xd1, 0x8b, 0x81, 0x15, 0x1a, 0xbc, 0x79, 0x7d, 0x22, 0x9d, 0x5f, 0x13, 0x90, 0x51, 0x48, 0x0b,
0xc3, 0x9e, 0xd4, 0x0b, 0x87, 0xed, 0x37, 0x27, 0xd2, 0x5b, 0x70, 0x12, 0xe4, 0xc3, 0xf5, 0xf9,
0x15, 0x7f, 0xa2, 0x9f, 0x48, 0xf8, 0x05, 0xdf, 0x4b, 0xfc, 0xa9, 0xb0, 0x7e, 0xfa, 0x2e, 0xe2,
0xf6, 0x1b, 0xc4, 0xfb, 0xba, 0x7d, 0x22, 0x9d, 0xb9, 0xb7, 0x31, 0x0e, 0x49, 0x62, 0x1c, 0x0a,
0x4a, 0xa4, 0x49, 0x17, 0x5e, 0x96, 0xf1, 0xc7, 0xac, 0x1a, 0x42, 0xfe, 0x43, 0xd5, 0x55, 0xd4,
0xb9, 0xa1, 0xf7, 0xe7, 0x83, 0x4e, 0x7f, 0x8e, 0x21, 0x85, 0x5c, 0x86, 0x41, 0xaa, 0xce, 0x39,
0x0a, 0xf0, 0x0a, 0x72, 0x66, 0x75, 0xc7, 0xc7, 0xf3, 0x41, 0xfb, 0xf9, 0x99, 0x93, 0x05, 0xd9,
0xd6, 0x9c, 0x7d, 0xd6, 0xf1, 0x65, 0x07, 0x40, 0xe6, 0xd5, 0xb6, 0x36, 0x08, 0x4f, 0xe4, 0xa0,
0x44, 0xe5, 0xd5, 0x00, 0x92, 0x86, 0x7f, 0xad, 0x9d, 0x80, 0xd9, 0x43, 0xa5, 0xb7, 0x0b, 0xc8,
0x65, 0x28, 0x0b, 0xa6, 0xc3, 0xb7, 0xd8, 0xbf, 0x2a, 0xca, 0x06, 0x22, 0x02, 0x6e, 0x5e, 0x83,
0x19, 0xe3, 0x55, 0x6c, 0x13, 0x0b, 0x9e, 0x3d, 0x3f, 0xb7, 0x80, 0xc4, 0x50, 0x0d, 0x99, 0x6a,
0x84, 0xa0, 0x1a, 0x30, 0xb6, 0x54, 0xe1, 0x33, 0x71, 0x89, 0x01, 0x91, 0x8e, 0x9a, 0x45, 0xe8,
0x7b, 0x16, 0x44, 0x16, 0xb7, 0x06, 0xc3, 0x77, 0x82, 0x59, 0xe8, 0x91, 0xde, 0x63, 0xc9, 0xe8,
0x46, 0x8d, 0x9e, 0x0d, 0x0f, 0xf6, 0x49, 0xff, 0x15, 0xa7, 0x68, 0x36, 0x61, 0x52, 0x70, 0x18,
0xa1, 0x98, 0x9b, 0xb1, 0x87, 0xf1, 0xae, 0x0d, 0xbc, 0x6b, 0xb7, 0x8e, 0xf0, 0x51, 0xb7, 0x8b,
0x54, 0x31, 0xfc, 0x96, 0xcf, 0xf0, 0xe7, 0x99, 0x90, 0xe1, 0x37, 0x8e, 0x37, 0x04, 0x82, 0xee,
0x09, 0xe7, 0x4e, 0x2f, 0xe1, 0x26, 0x43, 0x61, 0x3b, 0x73, 0xc0, 0x51, 0x95, 0xee, 0x77, 0x94,
0x35, 0x4b, 0xc8, 0x8e, 0x9a, 0xb6, 0x34, 0xa0, 0x05, 0x2c, 0x92, 0xce, 0xfe, 0x14, 0xb3, 0xe5,
0xd3, 0x55, 0x9e, 0x2d, 0x9a, 0x92, 0x9f, 0xd2, 0x92, 0x0a, 0x48, 0x7f, 0x19, 0xb5, 0x81, 0xb4,
0x67, 0xd5, 0xfb, 0x87, 0x86, 0xd2, 0xbf, 0x87, 0x61, 0xb3, 0x22, 0x3c, 0xfa, 0x6b, 0x1c, 0xda,
0x6a, 0x32, 0x3c, 0x1d, 0x2d, 0xd6, 0xbd, 0xa2, 0x58, 0x25, 0xc6, 0x63, 0xee, 0xe0, 0x81, 0xdc,
0xa2, 0x8d, 0xec, 0x2d, 0x1e, 0x07, 0xe6, 0x6e, 0xd7, 0x7c, 0xa4, 0x24, 0x9f, 0x7b, 0x77, 0x10,
0xa4, 0x51, 0x9b, 0x40, 0x1a, 0x8e, 0x49, 0x6d, 0x4f, 0x1a, 0x43, 0x44, 0x09, 0xe6, 0xc8, 0x26,
0x72, 0xe0, 0x47, 0x26, 0xbe, 0xd2, 0xbb, 0xda, 0xff, 0xfc, 0xb7, 0x92, 0xc4, 0x4c, 0xf6, 0x7e,
0x7c, 0x36, 0x7d, 0x40, 0x9b, 0xc1, 0x8a, 0x61, 0x3d, 0xe1, 0x76, 0xef, 0x77, 0xf7, 0x2e, 0xda,
0x21, 0x37, 0x7a, 0x7e, 0xe6, 0x61, 0xc9, 0xe9, 0xa7, 0x3a, 0xb7, 0xb9, 0xd4, 0x66, 0xe8, 0x0c,
0x11, 0xcb, 0x9c, 0x8d, 0x33, 0x31, 0x09, 0xb7, 0xda, 0xab, 0x43, 0x39, 0xba, 0xba, 0xc6, 0x4a,
0x20, 0xfc, 0x7f, 0x07, 0x86, 0x3b, 0x35, 0xe0, 0xab, 0x9d, 0x7c, 0xdd, 0x32, 0x56, 0x65, 0xf9,
0xba, 0x5b, 0xf8, 0x2a, 0x4e, 0x82, 0xce, 0x20, 0x83, 0xb0, 0x44, 0x16, 0x83, 0x09, 0x91, 0x15,
0x27, 0x44, 0x96, 0x72, 0x40, 0xfb, 0xc1, 0xd1, 0x1a, 0xac, 0x12, 0xd1, 0x2f, 0x18, 0x1c, 0x67,
0x53, 0x56, 0x9c, 0x4d, 0xf1, 0x39, 0xe4, 0xd0, 0xf8, 0xa1, 0xa4, 0x47, 0xe1, 0x29, 0xcf, 0x13,
0x5b, 0x01, 0x4e, 0x08, 0x0e, 0x53, 0xe5, 0x5f, 0x1c, 0x0f, 0xd8, 0xc2, 0x3e, 0xf2, 0x9d, 0xb1,
0x7c, 0xd7, 0x0f, 0x0c, 0xe9, 0xa7, 0xd9, 0x6c, 0x26, 0xf5, 0x93, 0x1c, 0x29, 0x19, 0x98, 0xd6,
0x40, 0xd3, 0xf1, 0x35, 0x3d, 0x53, 0x46, 0xd8, 0x47, 0x7b, 0x9c, 0x09, 0x5a, 0x71, 0x26, 0x68,
0xc5, 0x99, 0xa0, 0x15, 0x67, 0x82, 0x96, 0x28, 0x23, 0xac, 0x76, 0xca, 0x08, 0xab, 0xad, 0x32,
0xc2, 0xfc, 0x50, 0x19, 0x61, 0xfe, 0x43, 0x65, 0x84, 0xf9, 0x4e, 0x19, 0x81, 0x67, 0xc5, 0x1a,
0xe4, 0xc4, 0xab, 0x6c, 0x4e, 0x0c, 0x4b, 0x75, 0x8e, 0x8c, 0xef, 0x9c, 0x88, 0x19, 0x90, 0x75,
0x28, 0x37, 0x9e, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5,
0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0x65, 0x72, 0xe3, 0x59, 0x61, 0x6e, 0xfc, 0x58,
0x48, 0xc4, 0x4b, 0x73, 0xe3, 0xc7, 0x7d, 0xb9, 0x31, 0xdf, 0x8a, 0xef, 0x3b, 0x5b, 0x91, 0x3e,
0x11, 0x7c, 0x4b, 0xe6, 0x49, 0xdf, 0xb1, 0x12, 0xc6, 0x66, 0x33, 0xe7, 0x95, 0x0e, 0x6a, 0x0c,
0x69, 0xa6, 0xd2, 0xb1, 0xca, 0x57, 0x3a, 0x4e, 0x76, 0x25, 0x10, 0x1c, 0xb1, 0xd4, 0xdb, 0x79,
0xbc, 0x55, 0x3f, 0x39, 0x80, 0x55, 0xf2, 0x03, 0xd3, 0x9b, 0xa3, 0x71, 0x61, 0xf2, 0xbc, 0xe1,
0xf5, 0x18, 0x2b, 0xae, 0xc7, 0xe0, 0x07, 0xe0, 0xfa, 0x11, 0x8a, 0x9f, 0x7c, 0x40, 0xc4, 0x21,
0x0a, 0x70, 0x43, 0xca, 0xf8, 0x7d, 0x51, 0x36, 0x61, 0x3f, 0x7b, 0x02, 0x00, 0xb6, 0x30, 0xad,
0xff, 0x7f, 0x76, 0xbf, 0xc0, 0x14, 0xcc, 0x0a, 0xba, 0x21, 0xb3, 0x9c, 0xdc, 0xbb, 0xad, 0x85,
0x77, 0x13, 0x0f, 0xc1, 0x2c, 0x62, 0xda, 0x05, 0x96, 0x2d, 0x8b, 0x49, 0xbd, 0x00, 0x67, 0x29,
0xfb, 0xe9, 0xac, 0x3b, 0x78, 0x14, 0xa5, 0x7a, 0x31, 0x5c, 0x03, 0xd4, 0xda, 0xf0, 0xab, 0x17,
0x8a, 0x7a, 0x31, 0xbc, 0x83, 0x2f, 0x77, 0x06, 0x7c, 0xfc, 0x71, 0x53, 0x31, 0x40, 0xbf, 0x26,
0x2f, 0xab, 0x30, 0x1a, 0xb7, 0x8f, 0xcd, 0x85, 0x96, 0x1b, 0x8b, 0xec, 0x67, 0xe2, 0xdc, 0x67,
0x2d, 0xdc, 0xc0, 0xce, 0x73, 0xc3, 0x58, 0x9e, 0x48, 0xc0, 0x6f, 0x59, 0xaa, 0x2e, 0xab, 0x12,
0x59, 0x2d, 0x1e, 0x43, 0xc7, 0x32, 0xdd, 0xd8, 0x6f, 0x2c, 0xb5, 0x5c, 0xe6, 0x65, 0xaa, 0xfc,
0xf0, 0xc5, 0x6c, 0x60, 0xba, 0xf1, 0x37, 0x5d, 0x13, 0xd9, 0xbb, 0x3d, 0x35, 0x53, 0x67, 0x3d,
0x35, 0xad, 0xdb, 0x79, 0xe0, 0xaf, 0x3d, 0xdb, 0xf8, 0x86, 0xae, 0xc2, 0x0c, 0x6a, 0xf3, 0xc0,
0xb4, 0x1d, 0x3c, 0x31, 0x78, 0xa3, 0xd9, 0x74, 0xae, 0x92, 0x9f, 0x9f, 0x78, 0x19, 0xe3, 0xb5,
0x76, 0xc2, 0x3f, 0xbc, 0x81, 0x1c, 0x81, 0x09, 0x50, 0x46, 0x02, 0x2c, 0xcb, 0x92, 0x36, 0x44,
0x8b, 0x81, 0x37, 0xbf, 0xa8, 0xe4, 0xa7, 0x76, 0xbb, 0x9d, 0x7e, 0x27, 0x30, 0xff, 0x2f, 0xca,
0x37, 0xb1, 0x23, 0xd4, 0x2e, 0x4b, 0x48, 0xee, 0x86, 0x97, 0x66, 0xb4, 0x40, 0xb9, 0x90, 0x99,
0xe1, 0x56, 0xbb, 0x9a, 0xa6, 0x3c, 0x3f, 0xf3, 0x99, 0xbb, 0x5a, 0xb1, 0x07, 0x2e, 0xc0, 0xc7,
0x25, 0x3a, 0xc6, 0x66, 0x3e, 0x14, 0x60, 0xd3, 0xb5, 0xed, 0x85, 0x70, 0x6c, 0xf7, 0x90, 0xf8,
0x86, 0xbe, 0x97, 0x63, 0x66, 0x3a, 0x7f, 0x57, 0xfb, 0x05, 0x8f, 0x08, 0x00, 0x5d, 0x1d, 0x8b,
0x38, 0x64, 0x49, 0x97, 0x7e, 0xf0, 0x28, 0x55, 0xd3, 0x62, 0xcf, 0xc9, 0x37, 0x22, 0x0f, 0xa6,
0xc3, 0x77, 0xe3, 0xf1, 0xd5, 0xb8, 0x47, 0xfe, 0x64, 0x45, 0x1b, 0x1f, 0x3c, 0x3e, 0x30, 0x03,
0x77, 0x62, 0x33, 0x3a, 0x1a, 0x34, 0xa6, 0x43, 0xe5, 0x1b, 0x44, 0xfd, 0x4a, 0x0f, 0xf0, 0x69,
0xbc, 0x18, 0xb4, 0x02, 0x08, 0x11, 0x22, 0x30, 0xc7, 0x7b, 0x6e, 0x30, 0xda, 0x2d, 0xea, 0xb8,
0xb2, 0x0c, 0x68, 0xab, 0xcb, 0xbf, 0xf1, 0xdc, 0x4a, 0x69, 0x74, 0x60, 0x15, 0x8d, 0x66, 0xff,
0xdc, 0x38, 0x1f, 0x76, 0x4e, 0x52, 0xa8, 0x73, 0xa5, 0x77, 0xde, 0xf7, 0x0d, 0x91, 0x4c, 0x2c,
0x58, 0xbc, 0xb8, 0x9d, 0xda, 0xab, 0x23, 0x23, 0x9b, 0xd0, 0xa5, 0x15, 0x94, 0xf3, 0x81, 0x5e,
0xd7, 0x9a, 0xc7, 0xc7, 0x47, 0x0b, 0xf8, 0x7f, 0x74, 0x02, 0x68, 0xde, 0x4d, 0xae, 0x49, 0xe7,
0x23, 0x96, 0x44, 0xc9, 0xbd, 0x13, 0x2d, 0x88, 0x7e, 0x4a, 0xfe, 0x9c, 0x8c, 0x48, 0xb8, 0x5e,
0xad, 0xdc, 0x47, 0xa9, 0x27, 0xfb, 0x55, 0x63, 0x71, 0x22, 0xe9, 0xcd, 0x8f, 0x44, 0xea, 0x8d,
0x4e, 0xa4, 0x4f, 0x93, 0x66, 0x57, 0xef, 0x10, 0xfe, 0x5d, 0x82, 0x81, 0x92, 0x0a, 0x10, 0xe7,
0xf8, 0x8f, 0x74, 0x2a, 0x46, 0x61, 0x4d, 0xcf, 0x63, 0x61, 0x07, 0x16, 0xbd, 0x70, 0xd9, 0x12,
0x8f, 0x32, 0xa6, 0xe5, 0x8b, 0xd5, 0xf9, 0x6a, 0xd5, 0x89, 0x21, 0xc9, 0xac, 0x60, 0xe6, 0x87,
0x11, 0xa1, 0xb3, 0x19, 0xa0, 0x09, 0x55, 0xf2, 0x5f, 0x52, 0x7f, 0x52, 0x35, 0xa6, 0xc6, 0x34,
0xc7, 0x89, 0xa9, 0xd2, 0x9b, 0xaa, 0x13, 0x36, 0xb1, 0x13, 0x12, 0xea, 0xf9, 0xeb, 0xf9, 0x42,
0x19, 0x4c, 0x83, 0x61, 0x5a, 0x96, 0xca, 0x6d, 0xaf, 0x9f, 0xab, 0x56, 0xa5, 0xcf, 0x47, 0xa8,
0x6f, 0x13, 0xfe, 0xf2, 0x3b, 0x97, 0x89, 0xbc, 0xb8, 0x76, 0x05, 0x27, 0xcf, 0x6f, 0x44, 0x6a,
0x2c, 0xc5, 0x92, 0x99, 0x39, 0x9e, 0x33, 0xc3, 0xe8, 0x9d, 0x67, 0x8b, 0x22, 0x23, 0x1d, 0xe8,
0x71, 0xe1, 0x50, 0xeb, 0xdf, 0x1d, 0xb2, 0x1f, 0x13, 0x10, 0x2c, 0x0a, 0x06, 0x32, 0x63, 0x43,
0xaa, 0x87, 0x6b, 0x1d, 0xdb, 0x43, 0xfa, 0xbc, 0xfa, 0x78, 0xd8, 0x56, 0xed, 0x0c, 0x14, 0x94,
0x7a, 0x2c, 0xe3, 0xf2, 0x78, 0xc6, 0x05, 0x89, 0xbf, 0xa2, 0x3a, 0xe1, 0x1f, 0xe6, 0x1f, 0xf2,
0x9d, 0x72, 0xa2, 0xf5, 0xee, 0xd2, 0xa5, 0x42, 0x9e, 0x8c, 0x9b, 0x9a, 0x1c, 0x45, 0xf2, 0x03,
0x96, 0xad, 0xe9, 0xce, 0xe2, 0x03, 0x27, 0x08, 0x21, 0x27, 0x37, 0x58, 0xc5, 0x34, 0xa2, 0x24,
0x58, 0x9c, 0xc9, 0x47, 0x32, 0xe4, 0x37, 0xe0, 0xfc, 0xcc, 0x21, 0x86, 0x6e, 0xa3, 0x2a, 0x9e,
0x2b, 0x3d, 0x3f, 0xd7, 0xf8, 0x43, 0x90, 0x68, 0x53, 0x78, 0x66, 0x87, 0xa7, 0x88, 0x4b, 0x58,
0x30, 0xf3, 0xc6, 0x08, 0x10, 0x17, 0xd5, 0xbf, 0x0d, 0x6c, 0xe7, 0x8e, 0xb0, 0x93, 0x2d, 0x83,
0x4d, 0x32, 0xfc, 0xcb, 0x1b, 0x2c, 0x82, 0xf8, 0x49, 0xb8, 0x74, 0xf1, 0xc9, 0xcf, 0x4f, 0x66,
0x55, 0xdf, 0xf4, 0xe0, 0x15, 0x0f, 0x86, 0x09, 0x3f, 0x2a, 0xbf, 0xb8, 0x81, 0x17, 0x1b, 0x89,
0x40, 0x92, 0xb8, 0x40, 0xb3, 0x60, 0x48, 0x7f, 0x9e, 0xcb, 0x51, 0x00, 0xec, 0x90, 0x86, 0xf0,
0x86, 0x93, 0x85, 0x1b, 0xfd, 0x6a, 0xe0, 0xaf, 0xd8, 0xb2, 0x45, 0x3a, 0xdb, 0x6c, 0x4a, 0x24,
0x0e, 0xab, 0x87, 0x4c, 0x1d, 0x1e, 0x06, 0x0d, 0x0e, 0x32, 0xdc, 0x02, 0x6d, 0x69, 0xd2, 0x70,
0xf2, 0xfb, 0xeb, 0xae, 0xde, 0x24, 0xe3, 0x0f, 0xa3, 0x4f, 0xa5, 0x60, 0xba, 0x34, 0xbc, 0xb9,
0xd4, 0xbb, 0x7a, 0xbb, 0x0c, 0xa2, 0xd9, 0x96, 0x20, 0x21, 0xd5, 0x6e, 0x7f, 0xfb, 0xcf, 0x52,
0x88, 0x0e, 0xc7, 0xd1, 0x7c, 0x53, 0x06, 0xd1, 0x01, 0x62, 0x90, 0x5c, 0x4d, 0x2f, 0x85, 0x00,
0x3a, 0x4e, 0xaf, 0x4f, 0x75, 0xad, 0x59, 0x0a, 0xd1, 0x94, 0x86, 0x17, 0xd7, 0x6f, 0xbb, 0x5d,
0xed, 0x75, 0x29, 0x48, 0x9b, 0x81, 0xbc, 0xee, 0x6a, 0xad, 0x52, 0x90, 0x96, 0x34, 0xbc, 0x7e,
0xd3, 0xd5, 0x4b, 0x01, 0xf4, 0x37, 0x9c, 0x54, 0x5d, 0x27, 0x9f, 0x16, 0x4e, 0x44, 0xcb, 0xe0,
0xda, 0xb0, 0xa4, 0x2b, 0xaf, 0x71, 0x35, 0x9b, 0x95, 0x42, 0xc0, 0x92, 0xae, 0x3f, 0x5d, 0x1e,
0x40, 0xd3, 0xe4, 0x40, 0x67, 0x67, 0x37, 0xa5, 0x20, 0x2d, 0x0e, 0x02, 0xdb, 0x58, 0x0a, 0xd2,
0x4e, 0x40, 0x4a, 0x77, 0xba, 0xdd, 0x49, 0x60, 0xaa, 0xd9, 0xd9, 0xfe, 0x7a, 0x68, 0x59, 0x47,
0xb5, 0xda, 0x16, 0xf0, 0xeb, 0x14, 0xf8, 0x6d, 0x06, 0xba, 0x56, 0x03, 0x70, 0xfa, 0x6a, 0x03,
0x12, 0x9d, 0x1f, 0xd0, 0x05, 0x76, 0xbc, 0x7d, 0x7b, 0x8d, 0x03, 0x88, 0xec, 0xd1, 0xe8, 0xde,
0x0f, 0x6e, 0x95, 0x74, 0x0e, 0xaf, 0x70, 0x96, 0x2e, 0x70, 0xe8, 0x9d, 0x5e, 0x6f, 0xe9, 0xc5,
0xc3, 0xf8, 0x64, 0xbb, 0x53, 0x01, 0xcb, 0x4e, 0x83, 0xa8, 0xf6, 0x07, 0x8d, 0x4a, 0xa7, 0xdb,
0x1e, 0xd2, 0x4d, 0xa8, 0xfb, 0x54, 0x0c, 0xdf, 0xe0, 0x6a, 0x35, 0x44, 0x13, 0x0e, 0x5f, 0x51,
0xb9, 0x1d, 0xdb, 0x90, 0x2c, 0x9f, 0x6b, 0x2a, 0xb3, 0xc9, 0x86, 0x24, 0x8c, 0x72, 0x4f, 0x84,
0x08, 0xc3, 0x33, 0x8c, 0x01, 0xc8, 0x55, 0x60, 0xd3, 0x60, 0x47, 0xc9, 0xcf, 0xae, 0xd8, 0xd0,
0x5d, 0x62, 0x80, 0x53, 0x1f, 0xc6, 0xa3, 0x72, 0x62, 0x81, 0x29, 0xd9, 0xad, 0xde, 0x79, 0x0f,
0xcb, 0x1f, 0x8d, 0x3f, 0x94, 0xbf, 0x07, 0x71, 0x19, 0x8f, 0xf6, 0xbc, 0x07, 0x59, 0x19, 0x7d,
0x18, 0x97, 0xbf, 0x07, 0x39, 0xf9, 0x30, 0x1a, 0x17, 0x32, 0xa7, 0x01, 0x7c, 0xc9, 0xb2, 0xc7,
0x76, 0xe6, 0xb8, 0xc8, 0xfb, 0x1d, 0x06, 0x31, 0x07, 0x35, 0x9c, 0xdc, 0x9b, 0xab, 0x1e, 0xc9,
0xb3, 0xe5, 0x93, 0x60, 0xcb, 0x2e, 0x53, 0xfe, 0x80, 0x31, 0xa5, 0x5a, 0x09, 0x4a, 0x49, 0x8e,
0x49, 0xa9, 0x02, 0x34, 0xf9, 0xfb, 0x0f, 0xa5, 0x66, 0x8e, 0xbf, 0x4f, 0x57, 0x55, 0xb8, 0x26,
0xfc, 0x13, 0xae, 0x4c, 0x8f, 0xad, 0x6d, 0x15, 0xda, 0x9c, 0x52, 0x5e, 0x05, 0x81, 0x01, 0xf0,
0x66, 0x48, 0x06, 0xfc, 0x68, 0x16, 0x5b, 0x57, 0x0c, 0xc9, 0x5b, 0x2f, 0xa7, 0x34, 0x90, 0x62,
0xb3, 0x3e, 0xe1, 0xc2, 0x82, 0xa3, 0xdd, 0x90, 0x7f, 0x16, 0xfe, 0xc0, 0x25, 0x3c, 0x9d, 0x90,
0x08, 0xe6, 0x23, 0xb0, 0x5a, 0x0c, 0xef, 0x50, 0x01, 0xde, 0xe8, 0x52, 0x4c, 0xe3, 0xcf, 0x4f,
0xb1, 0x1f, 0x37, 0x15, 0xe6, 0x1c, 0xd8, 0x4c, 0xe0, 0x4b, 0x32, 0x89, 0x08, 0x22, 0xfd, 0x62,
0xa0, 0xab, 0xe8, 0xe3, 0x81, 0x45, 0x5f, 0x22, 0x71, 0xd9, 0x93, 0x34, 0x86, 0xc7, 0xde, 0x34,
0x5c, 0xf5, 0x77, 0xb7, 0xc7, 0x2a, 0x95, 0xdf, 0x0b, 0xe6, 0x13, 0x7b, 0x7b, 0x17, 0x75, 0x96,
0x5f, 0x88, 0x58, 0x81, 0x2e, 0x56, 0xc0, 0x22, 0xce, 0xeb, 0xd1, 0x46, 0x4a, 0x77, 0x2a, 0x25,
0x29, 0x59, 0x02, 0xd2, 0x2a, 0x01, 0x85, 0x9c, 0xd9, 0x42, 0xc7, 0x1a, 0x3b, 0x1c, 0xd7, 0x04,
0xc7, 0x59, 0xcd, 0xfa, 0x25, 0x0c, 0xd7, 0x38, 0x6d, 0xc9, 0x84, 0xb1, 0xf7, 0xdd, 0x72, 0xad,
0x8a, 0xd4, 0xc8, 0x4f, 0xa4, 0x8b, 0x89, 0xc4, 0x1c, 0xfb, 0xa6, 0xd0, 0x73, 0xcb, 0x3f, 0x88,
0xb9, 0xf9, 0x72, 0xcc, 0xcd, 0x1f, 0xc3, 0xdc, 0x7a, 0x39, 0xe6, 0xd6, 0x8f, 0x61, 0x6e, 0xbf,
0x1c, 0x73, 0xfb, 0x25, 0x98, 0xb7, 0xc4, 0x2f, 0x28, 0x15, 0x3f, 0x14, 0x84, 0x94, 0x0e, 0x88,
0xc5, 0x39, 0x1d, 0x71, 0xf5, 0x52, 0xd0, 0xb3, 0x25, 0x9e, 0xac, 0x7c, 0x38, 0xf5, 0x1f, 0x62,
0x9a, 0xce, 0x3e, 0xc6, 0xd4, 0x17, 0x1b, 0xa7, 0x70, 0xef, 0xf4, 0x93, 0x5b, 0x67, 0x45, 0x66,
0x4e, 0x00, 0x11, 0x3f, 0xc6, 0x95, 0x7b, 0x55, 0x61, 0x72, 0xc1, 0x57, 0x9f, 0x53, 0x61, 0xc8,
0x75, 0xa4, 0xd4, 0x88, 0x6d, 0x89, 0x7c, 0x29, 0x51, 0xb3, 0xbd, 0x44, 0x41, 0x50, 0x41, 0xc6,
0x74, 0x16, 0xd0, 0x30, 0xd5, 0x4d, 0xc6, 0xa1, 0x19, 0x27, 0xa0, 0x98, 0x11, 0xe3, 0xf7, 0xfb,
0x19, 0x61, 0xee, 0x9d, 0xf3, 0x74, 0x1d, 0xf9, 0x35, 0xc8, 0xf5, 0xad, 0xb5, 0x6b, 0x46, 0x94,
0xdc, 0x63, 0xd0, 0x82, 0xad, 0xa6, 0x90, 0xa9, 0xb8, 0x64, 0x16, 0xf8, 0x4b, 0x74, 0x9e, 0x3d,
0xbe, 0x63, 0x59, 0x7b, 0x7e, 0xfa, 0xa9, 0xc8, 0x9e, 0x6b, 0xfb, 0xac, 0xb9, 0x3e, 0x1c, 0x05,
0xce, 0x7c, 0x11, 0xd1, 0xa0, 0x04, 0xa0, 0x39, 0x3c, 0xb5, 0x2c, 0x6c, 0x8e, 0x2b, 0xc3, 0xd0,
0x1a, 0xbe, 0x5d, 0x9b, 0x6e, 0xc9, 0xcb, 0x36, 0xa4, 0xe4, 0x0f, 0xbb, 0x86, 0x9e, 0x5b, 0xc7,
0x84, 0x39, 0xec, 0xef, 0xb7, 0xbe, 0x03, 0xb9, 0x58, 0x48, 0x83, 0xe8, 0xd4, 0xfe, 0x6e, 0x5a,
0x90, 0x3d, 0x60, 0x52, 0x26, 0x4b, 0x53, 0x0a, 0x79, 0x20, 0xa5, 0x9e, 0x0d, 0x19, 0xa6, 0xb2,
0x11, 0x99, 0x81, 0x1c, 0x7d, 0xae, 0xd5, 0xcc, 0x2f, 0xf5, 0x00, 0xf2, 0xf1, 0x3b, 0x8a, 0xcd,
0x83, 0x35, 0x53, 0x14, 0x80, 0xaa, 0x3b, 0x69, 0x9b, 0x39, 0x48, 0x52, 0x8b, 0x9a, 0x5e, 0x5c,
0x53, 0xa8, 0xed, 0x0e, 0x1a, 0xee, 0x96, 0x1f, 0xbc, 0xe7, 0x67, 0x76, 0x34, 0x9d, 0x4b, 0x81,
0xce, 0xae, 0x2e, 0x65, 0x60, 0x32, 0xe4, 0x40, 0x78, 0x12, 0xab, 0xc5, 0x9d, 0x59, 0xe5, 0x69,
0x90, 0xe5, 0x2f, 0xbf, 0xc2, 0xc3, 0xe0, 0x11, 0xe6, 0xcc, 0x26, 0x42, 0x90, 0x6b, 0x60, 0xa9,
0x4d, 0xa4, 0x3b, 0xb9, 0xa4, 0x26, 0x1d, 0xb2, 0x2f, 0xb5, 0x21, 0xdc, 0x3b, 0xee, 0x53, 0x9b,
0x7f, 0x64, 0xdc, 0xe2, 0xc3, 0x8b, 0xdc, 0xe2, 0xeb, 0x4e, 0xa7, 0xd5, 0xc9, 0xf8, 0x45, 0xba,
0xd9, 0x52, 0xac, 0x8c, 0xdf, 0x33, 0x24, 0x29, 0x71, 0x7c, 0x2f, 0x70, 0x67, 0xff, 0x38, 0xcb,
0x10, 0x63, 0xed, 0x75, 0x6d, 0xdb, 0x54, 0x78, 0x9b, 0xdc, 0xac, 0xdb, 0xaa, 0x2e, 0x14, 0xee,
0x87, 0x22, 0x45, 0x46, 0x85, 0x08, 0x31, 0x05, 0x7d, 0xff, 0xff, 0xa2, 0xc6, 0x58, 0xd9, 0x98,
0xed, 0x10, 0x6a, 0x27, 0x8e, 0x32, 0xb9, 0x84, 0x39, 0x34, 0x64, 0x35, 0x91, 0xbd, 0x7a, 0xe8,
0x08, 0x55, 0x7b, 0xf0, 0xa5, 0xaa, 0x19, 0x17, 0x60, 0x23, 0x75, 0x1a, 0x79, 0xa8, 0x0c, 0x20,
0x8b, 0xa2, 0x85, 0x23, 0xd5, 0x13, 0xd0, 0x53, 0x7c, 0x55, 0xd2, 0x08, 0x5a, 0xac, 0x1c, 0xa0,
0x51, 0x49, 0x0b, 0x9d, 0x76, 0x64, 0xe0, 0xb9, 0x9c, 0x4c, 0x3f, 0x7b, 0x35, 0x3d, 0xa3, 0xf6,
0x62, 0x4a, 0x78, 0xc8, 0xa7, 0x54, 0xb2, 0x53, 0x86, 0x34, 0x62, 0xca, 0xa9, 0x3c, 0xa1, 0xc5,
0xd8, 0x6a, 0x1a, 0xa7, 0xfc, 0x58, 0x02, 0x9b, 0x28, 0x28, 0x96, 0xf8, 0x5e, 0x44, 0x92, 0x42,
0x93, 0xa9, 0xfb, 0x62, 0xea, 0x5c, 0xbb, 0x2c, 0x7f, 0x04, 0x13, 0x26, 0x3c, 0x05, 0x03, 0xb1,
0xdb, 0x11, 0x35, 0xc8, 0xd3, 0x52, 0x6c, 0x92, 0x70, 0x34, 0x4c, 0xb6, 0x3b, 0x7a, 0xd7, 0x30,
0xe5, 0xec, 0xd1, 0x28, 0xf2, 0x78, 0xbf, 0x6e, 0x6c, 0x89, 0x18, 0x36, 0x20, 0x2d, 0xcc, 0x16,
0xbb, 0x54, 0xc7, 0xc0, 0xca, 0x7d, 0x75, 0xc2, 0x8e, 0x38, 0xea, 0xe8, 0x54, 0xce, 0x16, 0x66,
0x70, 0xe6, 0xdb, 0x54, 0xc6, 0xaa, 0x95, 0x76, 0xd2, 0xee, 0xf6, 0x3a, 0x1d, 0xa5, 0x0a, 0x7c,
0x32, 0xab, 0xc6, 0xb7, 0xd1, 0x3a, 0x8a, 0x7c, 0xd6, 0x94, 0xb7, 0xe1, 0x6d, 0x0c, 0xfb, 0x14,
0xfb, 0xe7, 0x27, 0x67, 0xb3, 0x13, 0x8e, 0xc4, 0xaa, 0xfd, 0x10, 0xe6, 0xf5, 0x78, 0xf8, 0x4d,
0xc5, 0x09, 0x84, 0x4b, 0xc8, 0xf9, 0xb3, 0x9f, 0x9f, 0xa4, 0xd1, 0xbb, 0x17, 0xd1, 0x98, 0xa0,
0xd9, 0xd1, 0x54, 0x20, 0x59, 0x33, 0xf0, 0x74, 0x34, 0xae, 0xd5, 0x60, 0xff, 0xc5, 0x66, 0xf8,
0x56, 0x9c, 0x0f, 0x24, 0x4a, 0x52, 0x38, 0xbc, 0x89, 0xc3, 0x9b, 0x05, 0xc3, 0xaf, 0xd7, 0xe1,
0x62, 0xca, 0x58, 0xb2, 0x1f, 0x41, 0x0b, 0x11, 0xb4, 0x4a, 0x10, 0x10, 0x47, 0x1c, 0x16, 0xef,
0xc7, 0xd1, 0x46, 0x1c, 0xed, 0x02, 0x1c, 0x13, 0xd6, 0xae, 0xb6, 0x7f, 0x70, 0x07, 0x07, 0x77,
0x8a, 0x08, 0x38, 0x1f, 0x93, 0x90, 0x7a, 0xa1, 0x1f, 0xec, 0x47, 0xf0, 0x1a, 0x11, 0xbc, 0x2e,
0x40, 0x70, 0xe3, 0xaf, 0x0f, 0x4d, 0xfe, 0x2b, 0x8e, 0xfd, 0xb5, 0x60, 0xec, 0xa9, 0x67, 0xba,
0xfe, 0x7c, 0xff, 0xe0, 0x2e, 0x0e, 0xee, 0x96, 0x0e, 0x2e, 0x61, 0x9e, 0x94, 0x98, 0x3a, 0x89,
0x23, 0x65, 0x21, 0xad, 0x70, 0x04, 0x10, 0xc7, 0xc0, 0x7a, 0x7b, 0x64, 0xe5, 0x3b, 0x1e, 0x44,
0x3c, 0x7d, 0x26, 0xa3, 0xac, 0x35, 0x44, 0xc2, 0x8b, 0x18, 0xaf, 0x50, 0x6e, 0x5f, 0x29, 0xb1,
0x0f, 0x3b, 0xfe, 0xe9, 0xa1, 0xf9, 0xab, 0xde, 0xe9, 0xc7, 0xa1, 0x38, 0x98, 0x4c, 0x71, 0xa2,
0xb1, 0xad, 0x4c, 0x86, 0x99, 0x69, 0x33, 0x9d, 0xbb, 0x13, 0x07, 0x4d, 0x80, 0x9c, 0xbb, 0xc4,
0x42, 0x95, 0xe7, 0x67, 0x39, 0x7f, 0x8d, 0x65, 0xbb, 0xcf, 0x2d, 0xb9, 0x12, 0xf1, 0x84, 0x86,
0x89, 0x1b, 0xca, 0x23, 0x1d, 0xe3, 0x8a, 0x3e, 0xb8, 0xb3, 0xfd, 0x55, 0xd5, 0xd8, 0x4e, 0x7a,
0x78, 0xfc, 0xbe, 0x7b, 0xba, 0xc5, 0x0c, 0xa4, 0xf2, 0x03, 0x25, 0x65, 0x2f, 0x5f, 0x19, 0x3e,
0x2a, 0x38, 0x31, 0xf3, 0x62, 0x7c, 0x68, 0x96, 0xb1, 0x3f, 0x32, 0x9b, 0x1b, 0x7b, 0x5f, 0xb0,
0x22, 0x2c, 0x8e, 0xbc, 0x42, 0x4d, 0x02, 0x20, 0x6d, 0x17, 0x09, 0x1e, 0x61, 0x95, 0xe3, 0xd0,
0x18, 0x0e, 0xce, 0xf1, 0xd0, 0xc9, 0x34, 0x50, 0x52, 0x35, 0x66, 0x72, 0xca, 0xbc, 0xf5, 0x0a,
0x6f, 0x7a, 0xbc, 0x77, 0x5c, 0xbc, 0x38, 0x23, 0xfa, 0x6f, 0x3d, 0x7a, 0x4f, 0xfe, 0x71, 0x79,
0xf1, 0x5b, 0x14, 0xad, 0xc6, 0x10, 0x2b, 0xd0, 0x30, 0xea, 0x7b, 0xe5, 0x97, 0x53, 0x32, 0x57,
0x26, 0xd2, 0x0b, 0x1d, 0xd1, 0xc2, 0x09, 0xc1, 0xe4, 0x87, 0x2b, 0x1f, 0x3c, 0xe2, 0x0d, 0x7d,
0x88, 0x54, 0xf6, 0x04, 0xc8, 0x8c, 0xd6, 0xac, 0x4f, 0x03, 0x16, 0xa9, 0x80, 0xa7, 0x2a, 0xbf,
0x9a, 0x92, 0xe2, 0xa5, 0x59, 0xc4, 0xd8, 0x46, 0x6c, 0x5a, 0xb7, 0xea, 0x51, 0x8c, 0x80, 0xdf,
0x2b, 0xba, 0xbe, 0x82, 0xdd, 0x54, 0xa5, 0x06, 0x5f, 0x8e, 0x38, 0x2e, 0x89, 0xd8, 0x4a, 0xde,
0xfb, 0xc1, 0x12, 0x3b, 0xd1, 0x92, 0x76, 0x46, 0x71, 0xf1, 0x46, 0x96, 0xb0, 0x89, 0x59, 0x74,
0xd5, 0xb2, 0x7e, 0x66, 0xbc, 0xeb, 0x12, 0x02, 0xfb, 0xf0, 0xba, 0x8b, 0x57, 0x0f, 0x11, 0x26,
0x52, 0xd4, 0x82, 0x7e, 0xe7, 0xa3, 0xad, 0x6b, 0x45, 0x67, 0xb3, 0x79, 0xc2, 0x3d, 0x35, 0xea,
0x4b, 0xf1, 0x4b, 0x09, 0xb4, 0x10, 0xcc, 0x3c, 0x78, 0x49, 0x71, 0x09, 0x0a, 0xf9, 0x3c, 0xa6,
0x26, 0x04, 0x50, 0x27, 0xb0, 0x12, 0x36, 0xdf, 0x09, 0x4d, 0xe6, 0x3d, 0x91, 0xd1, 0x73, 0x27,
0x54, 0xc8, 0x82, 0xfe, 0x64, 0x0c, 0x76, 0x64, 0xe1, 0x74, 0x46, 0x96, 0x35, 0xbc, 0x9b, 0x91,
0xd6, 0x41, 0x00, 0x40, 0x28, 0x91, 0xe7, 0x6b, 0x37, 0x12, 0xcb, 0x67, 0x0d, 0xfa, 0x4c, 0x78,
0x64, 0x8f, 0x55, 0xff, 0xa3, 0xfa, 0xe2, 0x9e, 0x9d, 0xaf, 0xe0, 0x07, 0x90, 0x7d, 0x3b, 0xd5,
0x19, 0xec, 0x83, 0x34, 0xc1, 0x37, 0x80, 0xd7, 0xaa, 0x2a, 0xf1, 0x09, 0x05, 0x48, 0x73, 0x3f,
0x06, 0xc5, 0xe0, 0xa6, 0x0e, 0xd0, 0xef, 0x4c, 0x6b, 0x21, 0x0b, 0x4f, 0x69, 0x0c, 0x9f, 0x62,
0x50, 0x9d, 0xc7, 0x05, 0x29, 0x2a, 0x5a, 0x5f, 0x39, 0x5e, 0xac, 0x5f, 0x88, 0xb4, 0x48, 0x6b,
0xbe, 0xb1, 0x74, 0x14, 0xfd, 0xd9, 0xb7, 0x4c, 0xc7, 0x15, 0x1b, 0xfa, 0xd9, 0xfc, 0xd2, 0x2f,
0x3d, 0x82, 0xf1, 0x72, 0xd0, 0xc8, 0x64, 0xb5, 0xf4, 0x68, 0x28, 0x0f, 0xcb, 0x34, 0x45, 0x7d,
0x49, 0x03, 0x2c, 0x8f, 0xa2, 0x8a, 0x41, 0xcf, 0xae, 0xb6, 0x41, 0x7d, 0x0c, 0x8b, 0xd5, 0x97,
0xf4, 0xc7, 0x22, 0x11, 0x90, 0xb1, 0x17, 0xc3, 0x8e, 0xdf, 0xc7, 0xb0, 0x89, 0xd6, 0xc2, 0x9e,
0xce, 0x4a, 0xa8, 0xf8, 0x58, 0x04, 0x7c, 0xb7, 0x51, 0x36, 0xf1, 0x16, 0x43, 0x30, 0x04, 0x26,
0x22, 0x09, 0xe9, 0xf0, 0x36, 0x14, 0x7f, 0x9a, 0xec, 0x24, 0xe5, 0x7b, 0xc8, 0xe2, 0x2f, 0xc1,
0x1c, 0xbe, 0x6e, 0xb1, 0x24, 0xa6, 0x66, 0x6c, 0x14, 0x58, 0xef, 0x38, 0xc9, 0x8a, 0xbf, 0xf7,
0x4f, 0x83, 0xc0, 0x7c, 0xac, 0x3b, 0x21, 0xfb, 0x2b, 0xb3, 0x44, 0x54, 0x89, 0x5b, 0x15, 0x77,
0xac, 0xbd, 0x04, 0xb1, 0xa9, 0x53, 0x2e, 0x46, 0x18, 0x80, 0xe1, 0xb4, 0xb8, 0xf7, 0xa8, 0x84,
0x6c, 0x5b, 0xf1, 0x72, 0x55, 0xe1, 0xda, 0x6f, 0x6e, 0xa4, 0x0c, 0x4b, 0x9d, 0x7a, 0x14, 0x6d,
0x18, 0x55, 0x4e, 0x50, 0xd6, 0xd7, 0x77, 0x3e, 0xce, 0x8e, 0x10, 0xc0, 0x38, 0x5b, 0xf1, 0x04,
0xe7, 0x37, 0x45, 0xe0, 0x8c, 0x26, 0xce, 0x8f, 0x80, 0x42, 0x58, 0x59, 0x36, 0xd9, 0xf8, 0x62,
0x67, 0x34, 0x83, 0x2f, 0x9f, 0x6f, 0x7c, 0x29, 0xe5, 0xb6, 0x32, 0x33, 0x06, 0x5c, 0x76, 0x9c,
0x19, 0xa8, 0xa8, 0xe2, 0xa6, 0x7d, 0x1a, 0xa2, 0x51, 0x05, 0xad, 0x56, 0x7a, 0xe2, 0x62, 0xde,
0xb5, 0x4b, 0xb1, 0x51, 0x5d, 0xc4, 0x81, 0x26, 0x41, 0xdd, 0x67, 0xb7, 0xf7, 0x78, 0x65, 0xe8,
0x48, 0x4a, 0x20, 0x6f, 0xc0, 0x12, 0x93, 0x69, 0xe0, 0xdf, 0x43, 0xae, 0x42, 0x6c, 0x9f, 0x86,
0x78, 0xa7, 0x08, 0x4f, 0x9e, 0xfd, 0x00, 0xc2, 0xd2, 0x05, 0x25, 0xdf, 0x98, 0x09, 0xfa, 0x46,
0x56, 0x01, 0x18, 0x57, 0xf0, 0x28, 0x18, 0xe6, 0x33, 0x4c, 0x2c, 0x72, 0x0d, 0xf1, 0x4a, 0x05,
0x4d, 0x9b, 0x53, 0x53, 0xb4, 0x94, 0x43, 0x9d, 0x5e, 0x9f, 0x13, 0x27, 0x8b, 0x94, 0x55, 0x51,
0x49, 0x94, 0x9d, 0xf6, 0x11, 0x4c, 0x55, 0xf6, 0xea, 0xe7, 0x04, 0xbc, 0x87, 0x84, 0xa3, 0x7b,
0x60, 0x33, 0x85, 0xb1, 0x74, 0x7d, 0x8b, 0x5d, 0x14, 0xa9, 0x03, 0x1d, 0x91, 0x6f, 0xf9, 0x2e,
0xf6, 0x4d, 0xe3, 0x85, 0x55, 0x4d, 0x95, 0xd9, 0xb5, 0x57, 0x03, 0x21, 0xdc, 0x49, 0xe4, 0x07,
0xe6, 0x9c, 0x22, 0x4b, 0xcf, 0x23, 0xba, 0x44, 0xbf, 0x64, 0x9d, 0xaf, 0x20, 0xe7, 0x80, 0xc0,
0x81, 0x83, 0xc1, 0xf8, 0xe5, 0x0a, 0x28, 0x44, 0x4b, 0x4a, 0x2e, 0x21, 0x0a, 0xae, 0x13, 0xc1,
0x2d, 0x8a, 0xe1, 0x0c, 0xf9, 0x84, 0x1d, 0x0a, 0xe7, 0xd7, 0xc0, 0x22, 0x35, 0x87, 0x31, 0xcc,
0x63, 0x54, 0x19, 0x36, 0x45, 0x41, 0x28, 0x76, 0x95, 0x14, 0xd1, 0x9f, 0xb0, 0x2b, 0xb2, 0xbd,
0x46, 0x43, 0xaa, 0xb2, 0xd7, 0xd8, 0xae, 0x50, 0x4d, 0xaf, 0xb9, 0x36, 0xc2, 0xfa, 0xf7, 0xf0,
0x64, 0x65, 0x34, 0xd1, 0x69, 0x28, 0x9b, 0x0a, 0xc4, 0x44, 0xfc, 0xf2, 0xf0, 0x80, 0x85, 0x56,
0xc3, 0xff, 0x70, 0x96, 0x8c, 0xed, 0xeb, 0xc0, 0x05, 0x67, 0xcd, 0x7b, 0x32, 0x42, 0x3c, 0xee,
0x07, 0x40, 0x06, 0x30, 0x68, 0xf0, 0x5b, 0xd3, 0x78, 0x63, 0x94, 0x08, 0xf3, 0x2f, 0x4d, 0x58,
0x59, 0x0e, 0x94, 0x68, 0x59, 0x61, 0xe9, 0x37, 0x7e, 0xfa, 0x1a, 0x26, 0x25, 0xbe, 0x19, 0x24,
0xff, 0x34, 0x5a, 0xf8, 0x58, 0x17, 0xf5, 0x43, 0xbc, 0xcc, 0x9c, 0x29, 0x89, 0x44, 0x3e, 0xb0,
0xe3, 0x3e, 0xff, 0x6c, 0x41, 0xdd, 0xd5, 0x48, 0x1a, 0x56, 0x06, 0x3c, 0x34, 0x17, 0xb9, 0x09,
0xff, 0x92, 0x89, 0xf5, 0x7e, 0xc3, 0x69, 0x4f, 0x06, 0x0d, 0xfe, 0x22, 0x29, 0x84, 0x17, 0x8d,
0xa9, 0x24, 0x83, 0x46, 0x38, 0x68, 0x04, 0x2e, 0x3b, 0x1d, 0x97, 0x1b, 0x21, 0xae, 0x31, 0x0c,
0x27, 0xe6, 0x1d, 0x4d, 0x41, 0x16, 0x71, 0x9a, 0x3d, 0x58, 0x34, 0x87, 0x15, 0xdc, 0x9f, 0x63,
0x73, 0xb9, 0xea, 0x93, 0xdf, 0xcc, 0x00, 0x9b, 0x58, 0x50, 0xce, 0xa3, 0xf5, 0x0a, 0x98, 0xd3,
0x84, 0x78, 0x3a, 0x32, 0xdd, 0xb8, 0xf0, 0x99, 0x14, 0x62, 0x5d, 0x8b, 0x91, 0x2a, 0xca, 0xef,
0x69, 0x9d, 0xd8, 0xc2, 0x65, 0xa6, 0x81, 0xe9, 0xc0, 0x19, 0x8e, 0x29, 0x98, 0x43, 0xd0, 0x44,
0x1b, 0xc4, 0x74, 0xe5, 0xdf, 0x83, 0x3c, 0x88, 0x2e, 0x0c, 0x6c, 0xa3, 0x98, 0xf2, 0x22, 0x5f,
0x18, 0xf1, 0x62, 0x62, 0x6f, 0xd0, 0x70, 0xf8, 0xb8, 0xa9, 0x28, 0xfa, 0x56, 0xf8, 0x31, 0xcb,
0x3a, 0x9d, 0x0d, 0xdb, 0x56, 0xf2, 0x45, 0x61, 0xd6, 0x30, 0x21, 0x4a, 0x07, 0xc9, 0xcc, 0x95,
0x77, 0x1e, 0x26, 0x52, 0xc4, 0x5c, 0x43, 0xb0, 0x0b, 0x72, 0x6e, 0x89, 0xb9, 0x3c, 0x1a, 0x86,
0xc4, 0xc5, 0xeb, 0xa3, 0x34, 0x38, 0x50, 0x35, 0x3e, 0x1d, 0x51, 0xc1, 0x6a, 0x91, 0x2f, 0x8a,
0xeb, 0x31, 0xbc, 0x32, 0xc4, 0x6e, 0xcf, 0xf0, 0x59, 0xe3, 0x22, 0x2a, 0x5e, 0x49, 0xc2, 0xc2,
0x22, 0x5e, 0x86, 0x27, 0x67, 0xeb, 0x20, 0x00, 0xf9, 0x4f, 0xe6, 0x10, 0x57, 0xe0, 0x2f, 0x4f,
0xa5, 0xad, 0xdc, 0x74, 0xab, 0xb4, 0xd4, 0xec, 0xa4, 0x25, 0x2e, 0x4d, 0xdb, 0x29, 0x17, 0x27,
0xe5, 0xa5, 0x61, 0x85, 0x2c, 0x4f, 0xf3, 0xd3, 0xa7, 0x37, 0x2c, 0x92, 0xcc, 0x02, 0x4b, 0x4a,
0x3d, 0xde, 0x58, 0xd4, 0xcf, 0x1f, 0xbc, 0x55, 0x8e, 0x7f, 0x7a, 0xd3, 0xed, 0x76, 0xfb, 0xe4,
0x9f, 0xfe, 0x3a, 0xc8, 0xef, 0x0c, 0x48, 0xf0, 0x1d, 0x16, 0x00, 0xc8, 0x02, 0x38, 0x46, 0x2c,
0xbe, 0x90, 0x3a, 0xe3, 0xea, 0x8d, 0x4f, 0x40, 0xa5, 0xe0, 0x3d, 0x65, 0xa6, 0x2c, 0x34, 0x67,
0x94, 0x1b, 0xb0, 0x47, 0xc4, 0xc2, 0xa4, 0x46, 0x45, 0xc0, 0x15, 0x37, 0x00, 0xeb, 0x10, 0xe1,
0x40, 0x50, 0x89, 0x85, 0xfc, 0x0a, 0xd9, 0xbb, 0xca, 0x12, 0x42, 0x28, 0x07, 0x20, 0xc4, 0xac,
0x8e, 0xf7, 0x9d, 0x8a, 0x7b, 0xb9, 0x98, 0x00, 0x85, 0xc4, 0xf4, 0x6c, 0xb0, 0xb0, 0x33, 0x18,
0x7c, 0x94, 0x16, 0x84, 0x40, 0x94, 0x2a, 0xa7, 0xf1, 0x66, 0x9a, 0x2e, 0x90, 0xc9, 0x76, 0x31,
0xcc, 0xee, 0x6b, 0xe4, 0x63, 0xb1, 0xf0, 0x11, 0x58, 0xea, 0x87, 0xec, 0x46, 0x1b, 0xd2, 0xc8,
0xc0, 0x38, 0xf5, 0xbf, 0x53, 0xba, 0x22, 0x66, 0x44, 0x8e, 0x21, 0x84, 0xd3, 0x4f, 0x89, 0x33,
0xe3, 0x14, 0x60, 0x6f, 0x14, 0xeb, 0x7e, 0xb2, 0x81, 0xb1, 0x56, 0x84, 0xb2, 0x89, 0xc5, 0x6c,
0x1c, 0x9c, 0xb6, 0x1f, 0x31, 0x52, 0x2a, 0xe7, 0x6c, 0xa5, 0xec, 0xfe, 0x65, 0x72, 0x11, 0x0e,
0x3c, 0x05, 0x0d, 0x20, 0xf9, 0xcb, 0x31, 0x51, 0x15, 0xc6, 0x0f, 0x29, 0xc4, 0x2b, 0xdc, 0xde,
0x9c, 0x93, 0x20, 0x0b, 0xb9, 0x20, 0x20, 0xf4, 0x78, 0x61, 0x1a, 0xb4, 0x62, 0x1d, 0x82, 0x35,
0x8c, 0x95, 0x4b, 0x48, 0xc3, 0x0a, 0x6d, 0xc8, 0xda, 0xbb, 0xf5, 0xfc, 0x7b, 0x4f, 0x48, 0xb5,
0x92, 0x2a, 0x47, 0xc0, 0x75, 0xf6, 0xce, 0x77, 0x23, 0xbc, 0xfb, 0x2d, 0x5f, 0x62, 0x1f, 0x98,
0xd8, 0x27, 0xa6, 0x57, 0x26, 0x41, 0xe2, 0x80, 0xc3, 0x00, 0xa6, 0x14, 0x54, 0xe4, 0x59, 0xcf,
0xd5, 0x96, 0x6c, 0xe3, 0xcd, 0xb6, 0x9d, 0x33, 0x57, 0x3c, 0xb9, 0x88, 0xd3, 0x5c, 0x23, 0x4d,
0x78, 0x87, 0xc0, 0x13, 0x71, 0x29, 0x8b, 0xc8, 0x9d, 0xce, 0xf2, 0x54, 0xa9, 0x94, 0x1e, 0xab,
0x76, 0x18, 0x34, 0x9d, 0xcd, 0x1c, 0x0b, 0x3b, 0xfa, 0x88, 0xdc, 0x42, 0xf8, 0x7d, 0x3d, 0x29,
0x15, 0x6c, 0xdf, 0x92, 0x5b, 0xda, 0x1e, 0x30, 0x3c, 0x52, 0x19, 0x8a, 0x66, 0x2f, 0x59, 0x6f,
0xee, 0x81, 0xc4, 0xbe, 0x92, 0xca, 0x19, 0xcb, 0x79, 0x0b, 0x4e, 0x76, 0x73, 0x86, 0x84, 0xdf,
0x2c, 0x2b, 0x3e, 0xa7, 0x16, 0x28, 0x78, 0xcb, 0x5d, 0xcc, 0x6a, 0xec, 0x96, 0x03, 0x0e, 0x27,
0x3a, 0x1e, 0x33, 0x77, 0x5b, 0xc5, 0x77, 0x4f, 0x83, 0x98, 0x5d, 0x73, 0xcd, 0x72, 0xed, 0x8e,
0x95, 0x3b, 0x3e, 0x6f, 0x4b, 0x85, 0x37, 0xe6, 0xbb, 0x93, 0x11, 0x45, 0x2f, 0x5c, 0xc3, 0x1f,
0x73, 0xea, 0x03, 0x11, 0x4c, 0x13, 0x71, 0x7e, 0x54, 0x4b, 0x14, 0xeb, 0x7a, 0x22, 0x38, 0xc2,
0xe4, 0xb7, 0x86, 0x95, 0x1d, 0x43, 0xdf, 0x4a, 0xed, 0x08, 0x36, 0x33, 0xb1, 0x5f, 0xe6, 0xe0,
0x8d, 0x80, 0x61, 0x2f, 0x1e, 0x97, 0xaf, 0xef, 0xc7, 0x7e, 0xa6, 0x92, 0x77, 0x4d, 0x88, 0xa1,
0x9a, 0xf1, 0x6a, 0x49, 0x02, 0x83, 0x1e, 0x5a, 0x1a, 0x56, 0x13, 0x27, 0x44, 0x4a, 0x5c, 0x1b,
0x22, 0xa8, 0x15, 0x20, 0xa8, 0x09, 0x0c, 0xb5, 0x8c, 0xa7, 0x0b, 0x18, 0x9d, 0x97, 0xac, 0xfb,
0x91, 0xfc, 0x99, 0xd5, 0x23, 0xb6, 0x10, 0xd8, 0x7a, 0x2d, 0x76, 0x47, 0xa4, 0x91, 0x7d, 0xa3,
0x67, 0xdc, 0xd7, 0x28, 0x67, 0x45, 0x59, 0x67, 0x2a, 0xa9, 0x14, 0xd6, 0xe8, 0x6b, 0x53, 0x08,
0x42, 0x6e, 0xfb, 0xec, 0x57, 0x50, 0x7a, 0xba, 0xa6, 0xad, 0x1e, 0xfa, 0x0b, 0x8a, 0xd6, 0x07,
0xbe, 0xc0, 0xe7, 0x29, 0x8b, 0xe8, 0x6b, 0xd8, 0xba, 0xba, 0x0e, 0x7b, 0x4d, 0x78, 0x14, 0x9f,
0xb4, 0x55, 0x72, 0x53, 0x64, 0x3a, 0x45, 0x7f, 0xd0, 0x50, 0x83, 0x24, 0xc1, 0x6c, 0x24, 0x58,
0xc3, 0x32, 0x3c, 0x6e, 0xed, 0xa6, 0x8e, 0xeb, 0xa0, 0x09, 0x0e, 0x88, 0x6b, 0xce, 0x21, 0x30,
0x0c, 0xd7, 0x34, 0x64, 0xa6, 0xe6, 0x4f, 0x30, 0x81, 0x2e, 0xb3, 0x8a, 0xa0, 0xe2, 0x24, 0xe3,
0x4e, 0xe3, 0xd6, 0xd2, 0x61, 0x41, 0xd7, 0x67, 0xcc, 0x13, 0x34, 0x22, 0x68, 0xff, 0xa6, 0xe8,
0x9b, 0xe9, 0x03, 0x00, 0x80, 0xee, 0x5a, 0x39, 0x7b, 0x0c, 0xe2, 0x50, 0xc9, 0xca, 0xc3, 0xa5,
0x79, 0x4b, 0xd1, 0xf0, 0xd0, 0xf9, 0x32, 0x36, 0x43, 0x14, 0x92, 0x10, 0x81, 0xf8, 0x80, 0xaf,
0xbd, 0x9c, 0x48, 0x9c, 0x49, 0x42, 0xcd, 0xa6, 0xeb, 0x90, 0x9f, 0xfb, 0xc0, 0x3a, 0x6d, 0xc7,
0xa2, 0x61, 0xe9, 0xf8, 0x8c, 0x0d, 0xe3, 0xe5, 0x17, 0x56, 0x09, 0x11, 0x51, 0xbe, 0xf0, 0xd5,
0xa1, 0xc3, 0x3d, 0x35, 0xb2, 0x64, 0xee, 0xfa, 0x53, 0x1e, 0xd0, 0xc0, 0x24, 0xb3, 0x59, 0x26,
0x0a, 0xa8, 0x14, 0x93, 0x76, 0xf1, 0x56, 0xb8, 0xf9, 0x6d, 0xf9, 0x4f, 0x1b, 0x80, 0x60, 0xef,
0xbe, 0xb2, 0xbd, 0xff, 0xba, 0x34, 0x57, 0x2b, 0xdc, 0x57, 0xb0, 0x17, 0xe9, 0x69, 0x0e, 0x89,
0x4b, 0xea, 0xbd, 0xcc, 0x98, 0xf4, 0x5c, 0x63, 0xf8, 0xc3, 0xfa, 0x15, 0x57, 0xf0, 0x73, 0x4a,
0xc2, 0x12, 0xd0, 0x97, 0x2a, 0x58, 0x5c, 0xc5, 0x4f, 0x31, 0xc4, 0x47, 0x21, 0xdb, 0x0a, 0x56,
0x42, 0x1c, 0x2e, 0x84, 0x61, 0x62, 0x69, 0xa8, 0x80, 0x12, 0xd5, 0x6b, 0xc2, 0xca, 0x98, 0xcc,
0x23, 0xae, 0x5d, 0xb7, 0xb6, 0x5e, 0x35, 0x20, 0xdf, 0xf0, 0x0e, 0x48, 0xc0, 0xf9, 0xb5, 0x90,
0x00, 0x56, 0xc0, 0x05, 0xe1, 0xc3, 0xa3, 0x6d, 0xdf, 0xb5, 0x4b, 0x2a, 0xfa, 0x69, 0x7b, 0x41,
0xce, 0xb8, 0xea, 0x18, 0x31, 0x71, 0x84, 0x90, 0xc1, 0x92, 0x4a, 0x62, 0x4f, 0x11, 0xf3, 0xf9,
0x78, 0xdf, 0x19, 0x01, 0xc3, 0x53, 0x8b, 0x4f, 0xf6, 0xda, 0xdd, 0x84, 0xb0, 0x71, 0x4e, 0xc8,
0xb6, 0x0f, 0x0d, 0xb6, 0x3c, 0x2b, 0xa4, 0xb5, 0xdb, 0x27, 0x0c, 0x05, 0x7d, 0x4c, 0x95, 0x31,
0x98, 0xac, 0x88, 0x12, 0x7b, 0xbb, 0xdc, 0xbf, 0x7b, 0x62, 0xd7, 0x6c, 0xd7, 0x6e, 0xe9, 0xe3,
0xbe, 0xce, 0x3e, 0x08, 0x7e, 0x2b, 0x02, 0x8a, 0xb5, 0x48, 0x97, 0xb7, 0x09, 0xb6, 0xb0, 0x4d,
0x93, 0x01, 0x4e, 0xe1, 0x7b, 0x69, 0x17, 0x20, 0xe0, 0x6b, 0x1f, 0x9c, 0x15, 0xfc, 0x6f, 0x53,
0x3f, 0x04, 0xf4, 0x1a, 0x50, 0xbd, 0x16, 0x13, 0xb2, 0x1c, 0xa5, 0x18, 0xec, 0x57, 0x69, 0xf8,
0x86, 0x41, 0x05, 0xe5, 0xac, 0xe8, 0x02, 0x2a, 0x96, 0x74, 0x07, 0x8c, 0x75, 0x05, 0xbe, 0xbc,
0xa0, 0xa4, 0x2e, 0x2a, 0xea, 0xa9, 0x98, 0xbf, 0xc2, 0x82, 0x3a, 0x2b, 0x55, 0xbc, 0x02, 0xc3,
0x5a, 0x56, 0x4f, 0x3f, 0x65, 0x61, 0x30, 0x88, 0x0b, 0xdf, 0x47, 0x8c, 0x24, 0x97, 0xa6, 0xe3,
0x25, 0xb6, 0x0d, 0x7f, 0x74, 0xe3, 0x90, 0xd9, 0xb8, 0x9c, 0x5c, 0x6d, 0xa5, 0x07, 0xac, 0x77,
0xbb, 0x38, 0xba, 0x48, 0xaa, 0x09, 0x3d, 0x52, 0xc9, 0x09, 0x27, 0xfb, 0x7d, 0x20, 0x81, 0x91,
0xd5, 0x53, 0x89, 0x69, 0x59, 0x74, 0x05, 0xf1, 0x42, 0x9d, 0xa1, 0x2b, 0xc9, 0x0f, 0x33, 0xaa,
0x9a, 0xe6, 0x8a, 0xaf, 0x32, 0xc5, 0x68, 0xa9, 0xe1, 0x04, 0x1c, 0x03, 0x30, 0xe2, 0x4f, 0xf6,
0xbc, 0x48, 0xeb, 0x4d, 0x52, 0x01, 0x3d, 0x9c, 0x19, 0x85, 0x3f, 0x54, 0xc5, 0x58, 0x3b, 0x33,
0xc1, 0x38, 0xc3, 0xc7, 0x59, 0x00, 0xd1, 0x84, 0xdd, 0x80, 0xc8, 0x87, 0x15, 0x4a, 0x0d, 0xe9,
0x2b, 0xec, 0xb8, 0x77, 0x2b, 0xa1, 0xd2, 0xc1, 0x5b, 0x7f, 0xd0, 0x30, 0x79, 0xe0, 0x3a, 0xc6,
0x92, 0xcb, 0xff, 0x45, 0x0f, 0xc7, 0x17, 0xbb, 0x67, 0x77, 0x95, 0x8c, 0x1e, 0x12, 0x7e, 0xc7,
0x71, 0xbf, 0x95, 0x19, 0x5f, 0x4a, 0x71, 0x66, 0xf9, 0x22, 0x49, 0xc1, 0x3a, 0xd3, 0xab, 0xf2,
0x83, 0x97, 0x1d, 0x27, 0x88, 0xc1, 0x95, 0xf8, 0x95, 0x8e, 0x90, 0x45, 0x55, 0x37, 0x58, 0x13,
0x67, 0x4e, 0x16, 0x8f, 0x41, 0x67, 0x98, 0x12, 0xf0, 0x34, 0x01, 0xac, 0x22, 0xab, 0x1b, 0x1e,
0x92, 0xa3, 0x91, 0x10, 0x23, 0x81, 0x35, 0x93, 0xee, 0x6c, 0x85, 0x9d, 0x67, 0x10, 0x76, 0x56,
0x0a, 0x8d, 0xe4, 0xb2, 0x28, 0x02, 0x4d, 0x23, 0x4d, 0x59, 0xab, 0xc1, 0x13, 0x25, 0x4e, 0x2d,
0x4e, 0x45, 0x0e, 0x88, 0xc4, 0x25, 0xd2, 0x28, 0x68, 0xb9, 0x2e, 0x49, 0x5e, 0x77, 0x67, 0xd0,
0x72, 0x99, 0x2a, 0x84, 0xad, 0x53, 0xdf, 0x87, 0xd8, 0x5f, 0xc3, 0x94, 0x30, 0x8c, 0x63, 0xd8,
0x30, 0x99, 0x14, 0x3d, 0xf3, 0x07, 0x73, 0xb9, 0x34, 0x89, 0xe5, 0x07, 0x81, 0x48, 0x07, 0x31,
0x84, 0xe0, 0x81, 0xd1, 0x01, 0x1e, 0x7d, 0x80, 0x80, 0x95, 0xc8, 0x61, 0x14, 0xf8, 0x90, 0xf4,
0xa0, 0x15, 0x49, 0x4a, 0x0e, 0x6c, 0x82, 0x4a, 0x29, 0xf6, 0x02, 0x66, 0x96, 0xcc, 0x80, 0xf5,
0x1b, 0x22, 0x7b, 0xb0, 0x86, 0x6d, 0xec, 0x29, 0x72, 0x66, 0xa9, 0xb6, 0x76, 0xe5, 0xc3, 0xc7,
0x72, 0x96, 0x55, 0xd8, 0x2f, 0x5d, 0xa1, 0x93, 0xa3, 0x01, 0xf0, 0xac, 0xde, 0xdd, 0xea, 0x2e,
0x69, 0xa1, 0xb5, 0xa0, 0x2b, 0x60, 0x6b, 0x3d, 0xd3, 0x32, 0x99, 0xe6, 0x80, 0xa3, 0x34, 0xf3,
0x05, 0x35, 0x8c, 0x32, 0x7c, 0x12, 0xdb, 0xf5, 0xfe, 0xc0, 0x76, 0xe9, 0xb9, 0x94, 0x24, 0x95,
0x88, 0x5f, 0x50, 0x8c, 0x6f, 0x20, 0x18, 0x0d, 0x1d, 0x64, 0x15, 0x97, 0xe4, 0xb3, 0xc0, 0x0f,
0xc3, 0x99, 0x69, 0xd3, 0x03, 0xac, 0xba, 0x79, 0xcf, 0x05, 0xb6, 0x92, 0x22, 0x20, 0xf8, 0x03,
0x60, 0x5b, 0xc4, 0xdd, 0xbc, 0x2d, 0x21, 0xee, 0xc1, 0xdd, 0x6d, 0xf5, 0xc1, 0x1f, 0x26, 0xac,
0x90, 0x65, 0x88, 0x78, 0x45, 0x61, 0xe7, 0xda, 0x74, 0x69, 0x04, 0x2e, 0x34, 0x4a, 0xc9, 0x3c,
0x40, 0xd8, 0xb5, 0x20, 0x0c, 0x93, 0xa9, 0xb1, 0xe9, 0xd9, 0x10, 0x66, 0x9e, 0x3d, 0x5a, 0x2e,
0xc5, 0xf4, 0x28, 0x41, 0x57, 0x44, 0xe9, 0xf5, 0x61, 0x36, 0x56, 0x12, 0x3e, 0x0e, 0x49, 0xc8,
0x2d, 0x03, 0x70, 0x10, 0x70, 0xd9, 0xc4, 0xc5, 0x4d, 0x62, 0x1c, 0x8c, 0x55, 0xf8, 0xad, 0xf8,
0x51, 0xb7, 0xed, 0x79, 0x2e, 0x0e, 0x29, 0xb0, 0x5e, 0xac, 0xc0, 0xf0, 0x8e, 0x31, 0x3c, 0xc6,
0x7f, 0xc3, 0x4c, 0x70, 0xb9, 0xa5, 0xb8, 0x19, 0x1d, 0x56, 0xe3, 0x4a, 0xc1, 0x44, 0x38, 0x09,
0xd6, 0x77, 0xb7, 0xfb, 0xb5, 0x6f, 0x3e, 0x15, 0xc5, 0x38, 0x9f, 0x4c, 0x27, 0x62, 0xa5, 0x1c,
0xb0, 0x23, 0x95, 0x3d, 0x01, 0xce, 0x7b, 0x10, 0xa9, 0x3d, 0xa1, 0x0d, 0xbe, 0x26, 0x2c, 0x98,
0x4e, 0x80, 0x2a, 0xbb, 0x61, 0xcd, 0x64, 0xed, 0x05, 0x4e, 0x58, 0x14, 0x15, 0x00, 0xdf, 0xd9,
0xed, 0x0a, 0xfc, 0xc5, 0x23, 0xc8, 0x0f, 0xd1, 0x7f, 0xb3, 0xcd, 0xa8, 0xf0, 0xa7, 0x23, 0x13,
0xdc, 0x94, 0x45, 0x33, 0x86, 0xe1, 0x50, 0x2f, 0xe9, 0xd9, 0xcd, 0x96, 0x5f, 0xbf, 0xc7, 0xa2,
0xe7, 0x07, 0x9e, 0x56, 0xf8, 0x22, 0xd2, 0x67, 0xd6, 0xa5, 0xa8, 0x5f, 0xb2, 0xb0, 0x3d, 0x32,
0x65, 0x5f, 0x25, 0x5b, 0xdf, 0x78, 0x7b, 0x20, 0x3a, 0x3c, 0xdc, 0x10, 0x5f, 0x39, 0xd0, 0x45,
0x89, 0x0c, 0x3e, 0xd0, 0x47, 0x89, 0xdc, 0xc5, 0x4e, 0xca, 0xca, 0x9e, 0x70, 0xb1, 0xb0, 0x99,
0x92, 0x65, 0x73, 0xc9, 0xe2, 0x81, 0x6d, 0x69, 0x8b, 0xe8, 0x56, 0x90, 0xb3, 0xc3, 0xe2, 0x31,
0xe7, 0x30, 0x8e, 0x81, 0xc4, 0x06, 0x94, 0xfb, 0x0e, 0x32, 0x51, 0x17, 0x4c, 0x2e, 0xa4, 0x56,
0xdb, 0xbe, 0xe0, 0xe5, 0x09, 0xc1, 0xd9, 0x28, 0xab, 0x34, 0xbf, 0x64, 0xaa, 0x21, 0xa7, 0xf6,
0x1d, 0x0a, 0x81, 0xcd, 0x04, 0x23, 0xb6, 0x04, 0x99, 0x09, 0x73, 0xdb, 0x75, 0x3d, 0x2a, 0x8c,
0xe8, 0x2f, 0xd8, 0xc5, 0x55, 0x22, 0xdf, 0x07, 0xe6, 0x0a, 0x6b, 0x33, 0x4b, 0xff, 0x0e, 0x06,
0x2b, 0x7b, 0x36, 0x27, 0x1e, 0x61, 0xba, 0xf7, 0xe6, 0x63, 0x48, 0x70, 0xa0, 0x52, 0x2a, 0xe3,
0xcd, 0x14, 0xde, 0xc3, 0xde, 0xe7, 0x2d, 0xf0, 0xdd, 0x3d, 0xab, 0xa0, 0x68, 0x14, 0x78, 0xac,
0xc2, 0x7d, 0x12, 0x16, 0x23, 0xe0, 0x0d, 0xc5, 0x58, 0xb0, 0xa4, 0x2f, 0xe4, 0x73, 0x6c, 0x92,
0xf4, 0x66, 0xc2, 0xe7, 0xf7, 0xe3, 0x2c, 0x9f, 0xdf, 0x5f, 0x4f, 0x76, 0xa3, 0xa4, 0x24, 0x0d,
0x9e, 0xcd, 0xb1, 0xef, 0x11, 0x7f, 0xe8, 0x92, 0x44, 0x74, 0xb9, 0x72, 0xb3, 0x13, 0x17, 0x47,
0xc0, 0x4d, 0xb0, 0x4d, 0x3f, 0x1c, 0x03, 0x27, 0x59, 0x6e, 0xdc, 0x4e, 0x90, 0x74, 0x1d, 0x34,
0x21, 0x3f, 0xab, 0xb0, 0x90, 0xa7, 0x38, 0xeb, 0x1d, 0x1e, 0x38, 0xb4, 0xd9, 0x3d, 0x7f, 0xa9,
0xbc, 0xe4, 0x00, 0xa6, 0x81, 0x67, 0x4a, 0x29, 0x1f, 0xf8, 0xaf, 0x71, 0xc6, 0xb3, 0x36, 0xf0,
0x34, 0x0a, 0x8f, 0xa6, 0xf0, 0x67, 0x7e, 0xff, 0x17, 0xa9, 0x64, 0xc2, 0x8f, 0xf6, 0x57, 0x00,
0x00
0xf9, 0x5e, 0x44, 0x3d, 0x00, 0xbb, 0x77, 0xec, 0x68, 0x61, 0xb4, 0x35, 0x2d, 0x01, 0xdd, 0x78,
0x65, 0xd3, 0x3b, 0xc7, 0xa2, 0x47, 0xec, 0x8b, 0xea, 0x78, 0x4e, 0xe4, 0x98, 0xee, 0x51, 0x68,
0x99, 0x2e, 0x35, 0x74, 0x75, 0x69, 0x3e, 0x38, 0xcb, 0xf5, 0x32, 0xf9, 0xbe, 0x0e, 0x69, 0xc0,
0xbe, 0x98, 0x53, 0xf8, 0xee, 0xf9, 0xd2, 0xd6, 0xcc, 0x83, 0x7e, 0xe4, 0x44, 0x2e, 0x1d, 0x5c,
0xbc, 0x7b, 0x4b, 0x26, 0x34, 0x8a, 0x1c, 0x6f, 0x1e, 0xf6, 0xeb, 0xfc, 0x59, 0x3f, 0xb4, 0x02,
0x67, 0x15, 0x0d, 0x2a, 0x77, 0x66, 0x40, 0x6c, 0xc3, 0xf6, 0xad, 0xf5, 0x12, 0x28, 0x51, 0x5d,
0x73, 0x15, 0xd0, 0x3b, 0xa3, 0xdd, 0xc6, 0xf9, 0x86, 0x7c, 0xda, 0x4f, 0x86, 0x86, 0x7f, 0x2e,
0x8d, 0x16, 0x6d, 0xe2, 0x87, 0xeb, 0xa1, 0xd1, 0xd2, 0x4e, 0x8e, 0xf1, 0xe3, 0x85, 0xa1, 0x37,
0x9b, 0xec, 0xe1, 0xc5, 0xf4, 0x5f, 0x6b, 0x3f, 0x32, 0xb4, 0x9e, 0x5d, 0x5b, 0x2f, 0xff, 0x5a,
0x19, 0x5f, 0xbe, 0xaa, 0x76, 0x2d, 0x08, 0xef, 0x6c, 0xf1, 0xc9, 0xff, 0x6b, 0xbe, 0x72, 0x7c,
0xfe, 0x05, 0xc0, 0xf9, 0xb7, 0xe6, 0x49, 0x0f, 0xe7, 0x77, 0x7d, 0xcb, 0x59, 0xa9, 0x91, 0xb3,
0xa4, 0xfe, 0x3a, 0x52, 0xad, 0x75, 0x18, 0xf9, 0xcb, 0x49, 0x64, 0x06, 0x51, 0x68, 0x1c, 0xe8,
0x6a, 0xc8, 0x3e, 0xbd, 0x75, 0x82, 0xe8, 0x11, 0x87, 0xc3, 0xe0, 0xd1, 0xd5, 0xd5, 0x1d, 0x0d,
0x02, 0xc7, 0xa6, 0xa1, 0xd1, 0x56, 0x61, 0x34, 0x80, 0xf5, 0x66, 0x6b, 0xcf, 0x8a, 0x1c, 0xdf,
0x23, 0xbf, 0xcb, 0xca, 0xd3, 0xbd, 0xe3, 0xd9, 0xfe, 0x7d, 0xcd, 0x5f, 0x51, 0x4f, 0x96, 0x16,
0x51, 0xb4, 0x0a, 0xbb, 0xf5, 0xfa, 0xad, 0xe7, 0xd7, 0xee, 0x5d, 0x6a, 0xd7, 0xe6, 0xb4, 0x3e,
0xa3, 0x66, 0xb4, 0x0e, 0x68, 0x58, 0x0f, 0x05, 0x63, 0xea, 0x3f, 0xc1, 0x9b, 0xa3, 0xf8, 0x9b,
0xa4, 0xbc, 0x24, 0xf8, 0x86, 0x9b, 0xf8, 0x92, 0x31, 0x92, 0x2a, 0xfd, 0x15, 0x52, 0x77, 0x96,
0x85, 0x9e, 0x9f, 0xdb, 0x32, 0x55, 0x9e, 0x02, 0x0a, 0xe8, 0x3d, 0x82, 0x73, 0x45, 0xef, 0x5c,
0x8a, 0xbc, 0x1d, 0x3e, 0xb2, 0x57, 0x29, 0xa8, 0x3f, 0x9b, 0x21, 0x68, 0x16, 0x26, 0x1c, 0x3e,
0xfe, 0x01, 0x9b, 0x08, 0x8f, 0xbf, 0x68, 0x5f, 0x6b, 0x77, 0xa6, 0xbb, 0xa6, 0xc6, 0x91, 0x9e,
0x0e, 0x71, 0x7d, 0xd3, 0xfe, 0xdb, 0x44, 0xa6, 0xaa, 0x67, 0x1c, 0x68, 0xca, 0x93, 0x4b, 0x23,
0x12, 0x19, 0x76, 0xcd, 0x0a, 0x60, 0x39, 0x54, 0xe0, 0x90, 0x25, 0xbe, 0xb7, 0x92, 0xd2, 0x8b,
0x6a, 0x40, 0xea, 0x59, 0x14, 0x05, 0xce, 0x74, 0x1d, 0x51, 0x78, 0x11, 0x58, 0x92, 0x4a, 0x15,
0x75, 0xf3, 0x79, 0xf4, 0xb8, 0xa2, 0xb0, 0x98, 0x88, 0x3e, 0x44, 0xf5, 0xef, 0xe6, 0x9d, 0x19,
0x23, 0xd8, 0x02, 0x34, 0xc3, 0x47, 0x0f, 0x50, 0x78, 0x0a, 0xec, 0xe2, 0xd4, 0xb7, 0x1f, 0x6b,
0xe6, 0x0a, 0x58, 0x62, 0x8f, 0x16, 0x8e, 0x6b, 0xcb, 0x11, 0xc2, 0x9b, 0xb6, 0xfd, 0xee, 0x0e,
0xa8, 0xb8, 0x70, 0x42, 0x10, 0x6d, 0x1a, 0xc8, 0x12, 0xd2, 0x2c, 0xa9, 0xb2, 0x62, 0x0c, 0x9e,
0x3e, 0xd0, 0xe8, 0x93, 0xac, 0xa8, 0xd6, 0x82, 0x5a, 0xb7, 0x13, 0x07, 0x3e, 0x21, 0xf6, 0xe1,
0x05, 0x7c, 0x38, 0xd2, 0x0d, 0x83, 0x4b, 0x0e, 0x2c, 0xfc, 0xf0, 0x90, 0x7f, 0xac, 0x85, 0x0b,
0x67, 0x16, 0xc9, 0xca, 0x4b, 0x31, 0x62, 0x10, 0x01, 0x3f, 0x80, 0xf5, 0x00, 0x62, 0x50, 0xa4,
0xd0, 0x77, 0x69, 0xcd, 0xf5, 0xe7, 0xb2, 0xf4, 0x0e, 0x9f, 0x13, 0xc1, 0x2d, 0xd8, 0x27, 0x32,
0x73, 0x5c, 0xca, 0xd6, 0x0d, 0x9a, 0x13, 0x00, 0x7f, 0x2e, 0xc4, 0x73, 0x7f, 0x86, 0xca, 0x39,
0x73, 0xe6, 0xeb, 0xc0, 0x64, 0xec, 0xe5, 0xeb, 0x26, 0x33, 0xd3, 0x41, 0x31, 0xf9, 0xd3, 0x3b,
0xf7, 0x2c, 0x7f, 0xb9, 0x02, 0x2e, 0x53, 0xb2, 0x32, 0xe7, 0x94, 0xd8, 0x66, 0x64, 0x1e, 0xc0,
0x6e, 0x67, 0x36, 0x31, 0x5c, 0xf8, 0xf7, 0x37, 0xbe, 0x19, 0x46, 0x7c, 0x53, 0x74, 0xe5, 0x09,
0x25, 0x3a, 0x32, 0x50, 0x0e, 0xa4, 0x08, 0x5f, 0xb0, 0x7d, 0x70, 0x3c, 0x20, 0xf9, 0xf7, 0x9b,
0xcb, 0x0b, 0x83, 0xc2, 0x5a, 0x2c, 0xd7, 0x0c, 0x43, 0xdc, 0x68, 0xc3, 0x3b, 0x15, 0xcb, 0xe8,
0x4a, 0x88, 0x49, 0x52, 0x2d, 0x97, 0x9a, 0xc1, 0x0d, 0x57, 0x05, 0x59, 0xa8, 0x04, 0xdb, 0x87,
0xe8, 0x11, 0xd6, 0x67, 0x7a, 0xce, 0x92, 0x91, 0x6a, 0x48, 0x9e, 0xef, 0xc1, 0xa2, 0x04, 0x84,
0x01, 0x8c, 0x8c, 0x07, 0xc9, 0x31, 0x6d, 0x20, 0xb7, 0xd9, 0xa9, 0x32, 0x9f, 0x6b, 0x01, 0x5d,
0xb9, 0xa6, 0x85, 0x12, 0xc1, 0x26, 0x95, 0x70, 0x4d, 0x6a, 0xe3, 0x44, 0xd3, 0x32, 0x2b, 0x9b,
0x5e, 0x38, 0x4b, 0x27, 0x0a, 0x71, 0x5d, 0x6a, 0xa4, 0x3a, 0xaa, 0xa9, 0x3c, 0x31, 0x9b, 0x40,
0xb9, 0x4d, 0xf0, 0xb8, 0x4d, 0x70, 0x84, 0x45, 0x88, 0xb8, 0x39, 0x30, 0xd3, 0xf1, 0x2b, 0xc7,
0x0b, 0xaf, 0xfe, 0x2e, 0x73, 0x86, 0x50, 0x63, 0x43, 0xcc, 0x6f, 0xcc, 0x39, 0x93, 0x74, 0xc9,
0xf1, 0x56, 0x6b, 0xe4, 0xd1, 0xcc, 0x0f, 0x64, 0x07, 0xec, 0x87, 0xd3, 0x87, 0x6d, 0xa4, 0xde,
0x3c, 0x5a, 0xf4, 0x9c, 0x6a, 0x95, 0x8f, 0xf6, 0x0c, 0xfa, 0xc5, 0xf9, 0x5a, 0x43, 0xfb, 0x56,
0x0b, 0xd7, 0xd3, 0x10, 0xe4, 0xd1, 0x9b, 0xcb, 0x9a, 0xda, 0x50, 0x7a, 0xce, 0x0c, 0xf6, 0x53,
0x93, 0x0c, 0xc3, 0x7b, 0x7e, 0x96, 0x2e, 0xf4, 0xf8, 0x43, 0x23, 0xfe, 0xd0, 0xc4, 0x0f, 0xf1,
0xa6, 0x14, 0x61, 0xe1, 0x38, 0x56, 0x68, 0xca, 0xcf, 0x41, 0x79, 0x8a, 0xb4, 0x51, 0xba, 0xb8,
0x91, 0xaa, 0x51, 0xaa, 0x92, 0xaa, 0xae, 0x29, 0x03, 0xa3, 0xa3, 0x29, 0x68, 0xbf, 0x1d, 0x6f,
0x4d, 0x5f, 0x00, 0xc3, 0x2b, 0xc8, 0xc0, 0x0f, 0x2d, 0xf1, 0x61, 0x7c, 0x21, 0x3e, 0x0c, 0x6f,
0xc4, 0x87, 0xf3, 0x31, 0x23, 0xf5, 0xf0, 0x50, 0x92, 0x0e, 0x38, 0xa5, 0x6c, 0x32, 0xf8, 0x7e,
0xa4, 0xe7, 0x9e, 0xf0, 0xd5, 0x98, 0x60, 0x0c, 0x19, 0xd3, 0x6e, 0x81, 0x69, 0xb7, 0x7d, 0x6e,
0x6c, 0x63, 0xce, 0xdd, 0x02, 0xe7, 0xcc, 0xda, 0x6a, 0x1d, 0x2e, 0x64, 0xfe, 0xe2, 0xcb, 0xed,
0x57, 0x25, 0x07, 0xcd, 0xf4, 0xab, 0x08, 0x9a, 0xe9, 0x20, 0x42, 0xc3, 0x9a, 0xcc, 0x5a, 0xe8,
0xc3, 0xfa, 0x3d, 0x63, 0xe0, 0x19, 0x46, 0xc2, 0xa2, 0x94, 0x12, 0x64, 0x84, 0xa2, 0x08, 0x5b,
0xc7, 0x95, 0xeb, 0xdb, 0xc4, 0x0f, 0x82, 0x47, 0x95, 0xed, 0x3e, 0xf9, 0xf9, 0xe9, 0x6f, 0x93,
0xab, 0x3f, 0x6a, 0x9c, 0xd3, 0xce, 0xec, 0x51, 0x36, 0x95, 0x17, 0x62, 0x99, 0xde, 0x9b, 0x88,
0x4c, 0x29, 0x01, 0x0f, 0x66, 0xd7, 0xbe, 0x29, 0x6a, 0x8a, 0xcf, 0x90, 0x24, 0xfe, 0x6d, 0x06,
0xfe, 0x28, 0x04, 0xb3, 0x00, 0x76, 0x1d, 0x37, 0x18, 0x58, 0x73, 0x60, 0x78, 0xc0, 0x09, 0x60,
0x16, 0xfb, 0x90, 0x38, 0x94, 0x7f, 0x37, 0x81, 0x09, 0x62, 0x20, 0xd4, 0x0c, 0x28, 0x61, 0xd2,
0x09, 0xb6, 0xc4, 0x7d, 0xdc, 0x4f, 0x29, 0xb2, 0xf7, 0xbb, 0xe1, 0x54, 0xf5, 0xde, 0xf7, 0x54,
0x86, 0xbf, 0xc7, 0x32, 0xec, 0xc3, 0x0e, 0x7e, 0xdf, 0x23, 0xc3, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c,
0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c, 0x7e, 0x2c, 0x3c,
0xbe, 0xf2, 0xc4, 0x50, 0xc1, 0x47, 0xc3, 0xcf, 0x4d, 0xa2, 0x2b, 0x9c, 0x08, 0xb7, 0x90, 0x88,
0xd7, 0xaa, 0x80, 0xbb, 0x47, 0x05, 0xb8, 0xe0, 0x7e, 0x4f, 0x04, 0x37, 0xc3, 0xae, 0xcc, 0xf3,
0x8d, 0xed, 0xb8, 0x76, 0x3c, 0x66, 0x85, 0x5d, 0xc7, 0x42, 0xa9, 0x88, 0xee, 0x29, 0xf5, 0x60,
0x5f, 0x12, 0x55, 0x7d, 0xa9, 0xe3, 0x17, 0x41, 0xf4, 0xcb, 0x01, 0xdb, 0x85, 0xef, 0xb9, 0x5d,
0xf8, 0x9e, 0xdd, 0x85, 0x17, 0xf8, 0x8f, 0x4f, 0x70, 0xa0, 0xa5, 0xb6, 0x28, 0x0a, 0x1e, 0x27,
0xeb, 0x29, 0x98, 0x33, 0x74, 0xb8, 0x40, 0xa9, 0x5d, 0x9b, 0xcc, 0x6a, 0x68, 0xcd, 0x33, 0x78,
0x6a, 0x18, 0xf9, 0xc0, 0x92, 0xdf, 0xd2, 0x99, 0xb9, 0x76, 0x23, 0xc4, 0x16, 0x9b, 0xb0, 0x98,
0x64, 0x60, 0x5a, 0xe4, 0xaf, 0xae, 0x03, 0x1f, 0xbc, 0x81, 0xc9, 0x4d, 0xac, 0x10, 0x51, 0x16,
0xfd, 0x0c, 0x74, 0x30, 0xa0, 0xc2, 0x60, 0x49, 0x37, 0xbe, 0x4f, 0x96, 0xa6, 0xf7, 0x48, 0x20,
0xfc, 0x0a, 0x09, 0xc8, 0x06, 0x59, 0x52, 0x12, 0xf9, 0x64, 0x61, 0x7a, 0xb6, 0x4b, 0x0f, 0xa4,
0x1e, 0x9a, 0xcf, 0xbe, 0x4e, 0x5b, 0x87, 0x87, 0xb2, 0x57, 0x35, 0xa4, 0x3f, 0xbd, 0x3f, 0x83,
0x11, 0xb8, 0x31, 0x88, 0x6a, 0x02, 0x50, 0x0d, 0xf4, 0x4f, 0xa6, 0x47, 0xde, 0x4d, 0xae, 0x9b,
0x8d, 0x9a, 0x14, 0xbb, 0x2e, 0x4f, 0x79, 0x61, 0xa4, 0x33, 0x0f, 0xfa, 0xc9, 0x74, 0x1d, 0xdb,
0x89, 0x1e, 0x65, 0x05, 0x15, 0x02, 0x9e, 0x86, 0x7c, 0x89, 0x19, 0x1b, 0x4e, 0x3d, 0xe6, 0x5e,
0x85, 0x09, 0x66, 0x3e, 0x09, 0xc3, 0x45, 0x49, 0xe1, 0x18, 0xa8, 0xdd, 0x63, 0x03, 0x2f, 0xce,
0x04, 0x1f, 0xe8, 0x29, 0x0f, 0x00, 0xbb, 0x9a, 0x1a, 0x03, 0x03, 0x2c, 0xf7, 0x3d, 0xb6, 0x13,
0x82, 0xd3, 0x78, 0x04, 0x18, 0xb0, 0xd9, 0xae, 0x03, 0xde, 0xa7, 0x2b, 0x9c, 0x10, 0x03, 0x5d,
0x85, 0xeb, 0xc6, 0x2b, 0x60, 0x73, 0xf3, 0x0d, 0xb4, 0xc3, 0xc3, 0x38, 0x04, 0xc8, 0x12, 0x7d,
0x71, 0x96, 0x71, 0x1b, 0x0c, 0x1e, 0xc2, 0x2c, 0x3e, 0x64, 0x93, 0x60, 0x3e, 0xf9, 0xc5, 0x19,
0xcc, 0xb8, 0x35, 0x7b, 0x5b, 0x33, 0x0a, 0x28, 0xf8, 0x78, 0x9e, 0x9d, 0x2c, 0x9e, 0xfe, 0x29,
0xbc, 0x77, 0x22, 0x6b, 0x21, 0x17, 0xf0, 0x08, 0x42, 0x2d, 0x75, 0x93, 0x0c, 0xc0, 0xad, 0x66,
0x14, 0x26, 0x43, 0x12, 0x68, 0x9a, 0x65, 0x86, 0x94, 0x68, 0xdd, 0x42, 0x54, 0xba, 0x2a, 0xf6,
0xa4, 0x37, 0x85, 0xa0, 0xed, 0xb6, 0xc7, 0x60, 0x9b, 0x5a, 0x77, 0x6b, 0x82, 0xa6, 0x96, 0x83,
0x68, 0x17, 0x40, 0xb4, 0xb3, 0x10, 0xed, 0x02, 0x88, 0x76, 0x0e, 0xa2, 0x51, 0x04, 0xd2, 0x48,
0x60, 0x6c, 0x2e, 0xf7, 0xdd, 0x1d, 0x0c, 0x8d, 0x59, 0xf9, 0xc2, 0x60, 0x96, 0x3a, 0x00, 0xa4,
0x81, 0x0d, 0xca, 0xb3, 0x5a, 0x68, 0x3b, 0x26, 0x10, 0x21, 0xa3, 0xe5, 0xd8, 0x0e, 0xe1, 0xb8,
0xc4, 0x42, 0x18, 0x13, 0xeb, 0xa7, 0xb2, 0xb1, 0x3d, 0x80, 0xed, 0x92, 0x2e, 0x31, 0x06, 0x89,
0xa3, 0xdd, 0x3d, 0x66, 0x6a, 0x24, 0x55, 0xbd, 0xd4, 0x4c, 0x29, 0x3d, 0xa1, 0xb9, 0x51, 0x75,
0xcf, 0xc0, 0xc9, 0x45, 0x7e, 0xa0, 0x4a, 0xfb, 0xcd, 0xc6, 0xa9, 0xdc, 0x38, 0x06, 0x93, 0x76,
0x78, 0xd8, 0x38, 0x81, 0x3f, 0xcf, 0xcf, 0x72, 0xf4, 0xab, 0xd1, 0x50, 0xd4, 0x54, 0x73, 0x9b,
0x86, 0x51, 0x4c, 0x86, 0x96, 0xc3, 0x76, 0x4a, 0x07, 0x8d, 0xce, 0x69, 0x43, 0xfb, 0x35, 0xea,
0xea, 0x6d, 0xf8, 0x07, 0x11, 0x0c, 0x0c, 0xc0, 0xc0, 0x5f, 0x74, 0xe0, 0xd1, 0x31, 0xfc, 0xcf,
0xbe, 0xb4, 0xe0, 0x43, 0xf3, 0xd7, 0x48, 0x81, 0x6f, 0x4d, 0x1d, 0x6c, 0x68, 0xbf, 0xd5, 0x39,
0x6d, 0xe3, 0x93, 0x94, 0x29, 0xc0, 0x22, 0xca, 0x42, 0x4d, 0xe4, 0x08, 0x06, 0x9d, 0x6a, 0x84,
0xff, 0x98, 0xe0, 0xda, 0xb9, 0xcc, 0x2d, 0x57, 0xf7, 0x66, 0xe0, 0x81, 0x09, 0xd9, 0xda, 0x41,
0xb6, 0xff, 0x97, 0xb1, 0xfa, 0xfd, 0xd6, 0xd0, 0xb4, 0x2d, 0xfd, 0x00, 0x89, 0x30, 0x8c, 0x9c,
0x48, 0x0b, 0xa3, 0x60, 0xe8, 0x8d, 0xee, 0x96, 0xfa, 0xca, 0xe2, 0x5d, 0x5e, 0x07, 0x7a, 0xdc,
0xe3, 0x95, 0xc5, 0x7c, 0x20, 0x7e, 0xd4, 0xca, 0x07, 0x7d, 0x7e, 0x36, 0xe8, 0x63, 0x5e, 0x8c,
0xb9, 0xb6, 0x92, 0xb0, 0x2f, 0xf6, 0x66, 0x7e, 0x61, 0x40, 0xa7, 0x86, 0xe9, 0x66, 0xfb, 0xb9,
0x58, 0x80, 0xf3, 0x67, 0xa5, 0xd9, 0xe8, 0xcc, 0x32, 0xb2, 0x1b, 0xa2, 0x2f, 0x03, 0x5b, 0xd4,
0x3f, 0x39, 0x3e, 0x95, 0xce, 0xaf, 0x09, 0x48, 0x2a, 0x24, 0x87, 0x61, 0x57, 0xea, 0x86, 0x83,
0xd6, 0xc9, 0xa9, 0xf4, 0x16, 0x5c, 0x05, 0xf9, 0x70, 0x7d, 0x7e, 0xc5, 0x9f, 0xe8, 0xa7, 0x12,
0x7e, 0xc1, 0xf7, 0x12, 0x7f, 0x2a, 0x6c, 0xa0, 0xbe, 0x8d, 0xb8, 0x75, 0x82, 0x78, 0x8f, 0x5b,
0xa7, 0xd2, 0xc8, 0xbd, 0x8d, 0x71, 0x48, 0x12, 0xe3, 0x50, 0x50, 0x22, 0x3d, 0xba, 0xf0, 0xb5,
0x8c, 0x3f, 0x66, 0xd5, 0x10, 0x5a, 0x10, 0xaa, 0xae, 0xa2, 0xce, 0x0d, 0xbd, 0x37, 0xef, 0xb7,
0x7b, 0x73, 0x0c, 0x2c, 0xe4, 0x32, 0x0c, 0x52, 0x75, 0xce, 0x51, 0x80, 0x6f, 0x90, 0x33, 0xab,
0x3b, 0x3c, 0x9c, 0xf7, 0x5b, 0xcf, 0xcf, 0x9c, 0x2c, 0xc8, 0xb9, 0xe6, 0xec, 0xb3, 0x8e, 0x2f,
0xdb, 0x00, 0x32, 0xaf, 0xb6, 0xb4, 0x7e, 0x78, 0x2a, 0x07, 0x25, 0x8a, 0xaf, 0x06, 0x90, 0x3a,
0xfc, 0x6b, 0xed, 0x04, 0xcc, 0x2a, 0x2a, 0xdd, 0x6d, 0x40, 0x2e, 0x43, 0x59, 0x30, 0x1d, 0xbe,
0xc5, 0x5e, 0x56, 0x51, 0x5e, 0x40, 0x9b, 0xb8, 0x91, 0x0d, 0x66, 0x8c, 0x57, 0xb1, 0x65, 0x2c,
0x78, 0xf6, 0xfc, 0xdc, 0x04, 0x12, 0x43, 0x35, 0x64, 0x9a, 0x10, 0x82, 0x26, 0xc0, 0xd8, 0x52,
0xb5, 0xcf, 0x44, 0x27, 0x06, 0xc4, 0x3b, 0x6a, 0x16, 0xa1, 0xef, 0x59, 0x10, 0x5f, 0xdc, 0x1a,
0x0c, 0xdf, 0x29, 0xe6, 0xa2, 0x07, 0x7a, 0x97, 0xa5, 0xa4, 0x2f, 0x6a, 0xf4, 0x6c, 0x78, 0xb0,
0x4f, 0xfa, 0x6f, 0x38, 0x45, 0xa3, 0x81, 0x0c, 0x69, 0x74, 0xf0, 0x73, 0x93, 0x7d, 0x6e, 0x31,
0xce, 0xb5, 0x80, 0x73, 0xad, 0xe6, 0x81, 0x11, 0x3e, 0x3f, 0x77, 0x3a, 0x48, 0x13, 0xc3, 0x6e,
0xf9, 0x0c, 0x7b, 0x9e, 0x05, 0x19, 0x6e, 0xe3, 0x78, 0x43, 0x20, 0xe8, 0x9c, 0x72, 0xde, 0x74,
0x13, 0x5e, 0x32, 0x14, 0xb6, 0x33, 0x07, 0x1c, 0x55, 0xe9, 0x5e, 0xda, 0xc6, 0x13, 0x93, 0xb1,
0xa5, 0xa2, 0x59, 0x0a, 0x8b, 0x19, 0xf2, 0xf9, 0x2a, 0xcf, 0x10, 0x4d, 0xc9, 0x4f, 0x67, 0x15,
0x4c, 0xf7, 0x4a, 0x4a, 0x03, 0x69, 0xc7, 0x8a, 0x77, 0x0f, 0x0d, 0xa5, 0x7f, 0x0f, 0xb3, 0x66,
0x45, 0x78, 0xf4, 0xe3, 0x74, 0xd3, 0x8c, 0xb6, 0x16, 0x6b, 0x5d, 0x51, 0xac, 0x12, 0xe3, 0x31,
0xb7, 0xf0, 0x40, 0x6e, 0xd1, 0xd2, 0x60, 0x9b, 0x77, 0x8f, 0x73, 0x0b, 0xe6, 0x6f, 0x75, 0x76,
0xcd, 0x08, 0x26, 0x72, 0xdb, 0xe4, 0xa4, 0x8b, 0x3d, 0xf7, 0xee, 0x20, 0xbc, 0xa3, 0x36, 0x81,
0x04, 0x1e, 0xd3, 0xe1, 0xae, 0x34, 0x86, 0x58, 0x14, 0x4c, 0x98, 0x4d, 0xe4, 0xc0, 0x8f, 0x4c,
0x7c, 0xa5, 0x77, 0xb4, 0xff, 0xf9, 0x6f, 0x25, 0x89, 0xb6, 0xec, 0xdd, 0xf8, 0x6c, 0xfa, 0x80,
0x76, 0x86, 0x95, 0xd1, 0xba, 0xc2, 0x61, 0xdf, 0x6f, 0xef, 0x7a, 0xb4, 0x45, 0x6e, 0xc4, 0x44,
0x0a, 0x8c, 0xf9, 0xd9, 0xe7, 0x1a, 0xb7, 0xd3, 0xd4, 0x66, 0xe8, 0x0c, 0x11, 0x05, 0x8d, 0xc6,
0x99, 0x68, 0x86, 0x5b, 0xfa, 0xd5, 0xbe, 0xec, 0x5e, 0x5d, 0x63, 0x0d, 0x11, 0xfe, 0xbf, 0x03,
0x63, 0x9f, 0x1a, 0xfd, 0xd5, 0x56, 0xa6, 0x6f, 0x19, 0xab, 0xb2, 0x4c, 0xdf, 0x2d, 0x7c, 0x15,
0xa7, 0x4f, 0x23, 0xc8, 0x3d, 0x2c, 0x91, 0xff, 0x60, 0x2a, 0x65, 0xc5, 0xa9, 0x94, 0xa5, 0xec,
0xb1, 0x18, 0xe0, 0x8c, 0x0d, 0x56, 0xc3, 0xe8, 0x15, 0x0c, 0x8e, 0xf3, 0x30, 0x2b, 0xce, 0xc3,
0xf8, 0x1c, 0x72, 0x68, 0xfc, 0x50, 0xba, 0xa4, 0xf0, 0x64, 0xe9, 0x89, 0xad, 0x00, 0x27, 0x04,
0x27, 0xab, 0xf2, 0x2f, 0x8e, 0x07, 0x6c, 0x61, 0x1f, 0xf9, 0xce, 0x58, 0xbe, 0xeb, 0x07, 0x86,
0xf4, 0xd3, 0x6c, 0x36, 0x93, 0x7a, 0x49, 0x76, 0x95, 0x0c, 0x4c, 0xab, 0xa7, 0xe9, 0xf8, 0x23,
0x3d, 0x53, 0x80, 0xd8, 0x45, 0x7b, 0x9c, 0x43, 0x5a, 0x71, 0x0e, 0x69, 0xc5, 0x39, 0xa4, 0x15,
0xe7, 0x90, 0x96, 0x28, 0x40, 0xac, 0xb6, 0x0a, 0x10, 0xab, 0x8d, 0x02, 0xc4, 0x7c, 0x5f, 0x01,
0x62, 0xfe, 0x43, 0x05, 0x88, 0xf9, 0x56, 0x01, 0x82, 0xe7, 0xd3, 0x1a, 0x64, 0xd3, 0xab, 0x6c,
0x36, 0x0d, 0x4b, 0x75, 0x0e, 0x8c, 0xef, 0x9c, 0x88, 0x19, 0x90, 0xb5, 0x2f, 0xab, 0x9e, 0xc5,
0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c, 0x99, 0xc5, 0x1c,
0x99, 0xc5, 0x1c, 0x99, 0x65, 0xb2, 0xea, 0x59, 0x61, 0x56, 0xfd, 0x58, 0x48, 0xc4, 0x6b, 0xb3,
0xea, 0xc7, 0x5d, 0x59, 0x35, 0xdf, 0x8a, 0xef, 0x5b, 0x5b, 0x91, 0x3e, 0x11, 0x7c, 0x4b, 0xe6,
0x49, 0xdf, 0xb1, 0xe2, 0xc7, 0xcb, 0xcb, 0x9c, 0xd7, 0x48, 0xa8, 0x31, 0xa0, 0x99, 0x1a, 0xc9,
0x2a, 0x5f, 0x23, 0x39, 0xdd, 0x96, 0x40, 0x70, 0xde, 0x52, 0x77, 0xeb, 0xf1, 0x46, 0xe5, 0x65,
0x0f, 0x56, 0xc9, 0x0f, 0x4c, 0x6f, 0x8e, 0xc6, 0x85, 0xc9, 0xf3, 0x0b, 0xaf, 0xe4, 0x58, 0x71,
0x25, 0x07, 0x3f, 0x00, 0xd7, 0x0f, 0x50, 0xfc, 0xe4, 0x3d, 0x22, 0x0e, 0x91, 0x83, 0x1b, 0x52,
0xc6, 0xef, 0x8b, 0xb2, 0x09, 0x7b, 0xd9, 0xb3, 0x03, 0xb0, 0x85, 0xe9, 0xc9, 0xc1, 0x17, 0xf7,
0x2b, 0x4c, 0xc1, 0xac, 0xa0, 0x1b, 0x32, 0xcb, 0xc9, 0xfd, 0xe2, 0x5a, 0xf8, 0x45, 0xf1, 0x10,
0xcc, 0x22, 0x26, 0x6c, 0x60, 0xd9, 0xb2, 0x98, 0xd4, 0x0b, 0x88, 0x3b, 0x64, 0x3f, 0x9d, 0x75,
0x0b, 0x8f, 0xa2, 0x54, 0x2f, 0x06, 0x6b, 0x80, 0x5a, 0x1b, 0x7e, 0xf5, 0x42, 0x51, 0x2f, 0x06,
0x77, 0xf0, 0xe5, 0xce, 0x80, 0x8f, 0x3f, 0x6e, 0x2a, 0xfa, 0xe8, 0x11, 0xe5, 0x65, 0x15, 0x46,
0xe3, 0xf6, 0xb1, 0xb9, 0xd0, 0x72, 0x63, 0x79, 0x7e, 0x24, 0x4e, 0x8c, 0xd6, 0xc2, 0x0d, 0x6c,
0x3d, 0x37, 0x8c, 0xe5, 0xa9, 0x04, 0xfc, 0x96, 0xa5, 0xea, 0xb2, 0x2a, 0x91, 0xd5, 0xe2, 0x31,
0x74, 0x2c, 0xd3, 0x8d, 0xfd, 0xc6, 0x52, 0xcb, 0xe5, 0x6c, 0xa6, 0xca, 0x8f, 0x6d, 0xcc, 0x3a,
0xa6, 0x24, 0xbf, 0xea, 0x9a, 0xc8, 0xfb, 0xed, 0xa9, 0x99, 0xba, 0xf9, 0xa9, 0x69, 0xdd, 0xce,
0x03, 0x7f, 0xed, 0xd9, 0xc6, 0x37, 0x74, 0x15, 0x66, 0x70, 0x34, 0x0f, 0x4c, 0xdb, 0xc1, 0xb3,
0x86, 0x13, 0xcd, 0xa6, 0x73, 0x95, 0xfc, 0xfc, 0xc4, 0x0b, 0x20, 0xc7, 0xda, 0x29, 0xff, 0x70,
0x02, 0x79, 0x05, 0x13, 0xa0, 0x8c, 0x04, 0x58, 0x96, 0x25, 0xbd, 0x10, 0x2d, 0x06, 0x7e, 0xf9,
0x45, 0x25, 0x3f, 0xb5, 0x5a, 0xad, 0xf4, 0x3b, 0x81, 0xf9, 0x7f, 0x51, 0xbe, 0x89, 0x1d, 0xa1,
0x76, 0x59, 0x12, 0x73, 0x37, 0xb8, 0x34, 0xa3, 0x05, 0xca, 0x85, 0xcc, 0x0c, 0xb7, 0xda, 0xd1,
0x34, 0xe5, 0xf9, 0x99, 0xcf, 0xdc, 0xd1, 0x8a, 0x3d, 0x70, 0x01, 0x3e, 0x2e, 0xd1, 0x31, 0x36,
0xf3, 0xa1, 0x00, 0x9b, 0xae, 0x6d, 0x2e, 0x84, 0x63, 0xbb, 0x87, 0x94, 0x39, 0xf4, 0xbd, 0x1c,
0x33, 0xd3, 0xf9, 0x3b, 0xda, 0x2f, 0x78, 0xb8, 0x00, 0xe8, 0x6a, 0x58, 0xfe, 0x21, 0x4b, 0xba,
0xf4, 0x83, 0x47, 0xa9, 0x9a, 0x96, 0x89, 0x4e, 0xbf, 0x11, 0xb9, 0x3f, 0x1d, 0xbc, 0x1b, 0x8f,
0xaf, 0xc6, 0x5d, 0xf2, 0x91, 0x95, 0x7b, 0x7c, 0xf0, 0xf8, 0xc0, 0x0c, 0xdc, 0x89, 0x97, 0xe1,
0x41, 0xbf, 0x3e, 0x1d, 0x28, 0xdf, 0x20, 0x53, 0x50, 0xba, 0x80, 0x4f, 0xe3, 0x65, 0xa4, 0x15,
0x40, 0x88, 0x10, 0x81, 0x39, 0xde, 0x73, 0x83, 0xd1, 0x6e, 0x51, 0xc7, 0x95, 0x65, 0x40, 0x5b,
0x5d, 0xfe, 0xca, 0xf3, 0x31, 0xa5, 0xde, 0x86, 0x55, 0xd4, 0x1b, 0xbd, 0x73, 0xe3, 0x7c, 0xd0,
0x3e, 0x4d, 0xa1, 0xce, 0x95, 0xee, 0x79, 0xcf, 0x37, 0x44, 0x02, 0xb2, 0x30, 0x9a, 0x9a, 0xb1,
0x55, 0x63, 0x51, 0x87, 0x46, 0x36, 0x09, 0x4c, 0x6b, 0x2f, 0xe7, 0x7d, 0xbd, 0xa6, 0x35, 0x0e,
0x0f, 0x0f, 0x16, 0xf0, 0xff, 0xf0, 0x14, 0xd0, 0xbc, 0x9b, 0x5c, 0x93, 0xf6, 0x27, 0x2c, 0xa6,
0x92, 0x7b, 0x27, 0x5a, 0x10, 0xfd, 0x8c, 0x7c, 0x9c, 0x0c, 0x49, 0xb8, 0x5e, 0xad, 0xdc, 0x47,
0xa9, 0x2b, 0xfb, 0x55, 0x63, 0x71, 0x2a, 0xe9, 0x8d, 0x4f, 0x44, 0xea, 0x0e, 0x4f, 0xa5, 0xcf,
0x93, 0x46, 0x47, 0x6f, 0x13, 0xfe, 0x5d, 0x82, 0x81, 0x92, 0x0a, 0x10, 0xe7, 0xf8, 0x8f, 0x74,
0x26, 0x46, 0x61, 0x35, 0xd0, 0x63, 0x61, 0x07, 0x96, 0xcb, 0x70, 0xd9, 0x12, 0x8f, 0x32, 0xa6,
0xe5, 0x8b, 0xd5, 0xf9, 0x6a, 0xd5, 0x89, 0x21, 0xc9, 0xac, 0xd4, 0xe6, 0x87, 0x11, 0xa1, 0xb3,
0x19, 0xa0, 0x09, 0x55, 0xf2, 0x5f, 0x52, 0x6f, 0x52, 0x35, 0xa6, 0xc6, 0x34, 0xc7, 0x89, 0xa9,
0xd2, 0x9d, 0xaa, 0x13, 0x36, 0xb1, 0x13, 0x12, 0xea, 0xf9, 0xeb, 0xf9, 0x42, 0xe9, 0x4f, 0x83,
0x41, 0x5a, 0xd0, 0xca, 0x6d, 0xaf, 0x9f, 0xab, 0x73, 0xa5, 0xcf, 0x87, 0xa8, 0x6f, 0x13, 0xfe,
0xf2, 0x3b, 0x97, 0x89, 0xbc, 0xb8, 0x76, 0x04, 0x27, 0xcf, 0x6f, 0x44, 0x3a, 0x2d, 0xc5, 0x92,
0x99, 0x39, 0xd8, 0x33, 0xc3, 0xe8, 0x9d, 0x67, 0x8b, 0xf2, 0x24, 0xed, 0xeb, 0x71, 0xc9, 0x51,
0xeb, 0xdd, 0xed, 0xb3, 0x1f, 0x13, 0x10, 0x2c, 0x0a, 0x06, 0x32, 0x63, 0x43, 0xaa, 0xfb, 0xab,
0x24, 0x9b, 0x43, 0x7a, 0xbc, 0x6e, 0xb9, 0xdf, 0x56, 0x6d, 0x0d, 0x14, 0x94, 0x7a, 0x2c, 0x4b,
0xf3, 0x78, 0x96, 0x76, 0x07, 0x29, 0x98, 0xea, 0x84, 0x7f, 0x98, 0x7f, 0xc8, 0x77, 0xca, 0xa9,
0xd6, 0xbd, 0x4b, 0x97, 0x0a, 0xb9, 0x35, 0x6e, 0x6a, 0x72, 0x88, 0xc9, 0x8f, 0x66, 0x36, 0xa6,
0x1b, 0xc5, 0x47, 0x55, 0x10, 0x42, 0x4e, 0x6e, 0x20, 0x80, 0x74, 0x8c, 0x28, 0x09, 0x16, 0x67,
0xf2, 0x81, 0x0c, 0x89, 0x1c, 0x38, 0x3f, 0x67, 0x80, 0xa1, 0xdb, 0xb0, 0x8a, 0x27, 0x52, 0xcf,
0xcf, 0x47, 0xfc, 0x21, 0x48, 0xb4, 0xa3, 0xc4, 0x87, 0x24, 0xdc, 0xea, 0xc1, 0x82, 0x99, 0x37,
0x46, 0x80, 0xb8, 0x1c, 0xff, 0xad, 0x6f, 0x3b, 0x77, 0x84, 0x9d, 0x89, 0x19, 0x6c, 0x92, 0xc1,
0x9f, 0x5e, 0x7f, 0x11, 0xc4, 0x4f, 0xc2, 0xa5, 0x8b, 0x4f, 0x7e, 0x7e, 0x72, 0xaa, 0xfa, 0x4b,
0x17, 0x5e, 0xf1, 0x60, 0x98, 0xf0, 0x43, 0xf6, 0x8b, 0x1b, 0x78, 0xf1, 0x22, 0x11, 0x48, 0x2c,
0x17, 0x68, 0x16, 0x0c, 0xe9, 0xe3, 0xb9, 0x1c, 0x05, 0xc0, 0x0e, 0x69, 0x00, 0x6f, 0x38, 0x59,
0xb8, 0xd1, 0x6f, 0xfa, 0xfe, 0x8a, 0x2d, 0x5b, 0xa4, 0xc0, 0x8d, 0x86, 0x44, 0xe2, 0xb0, 0x7a,
0xc0, 0xd4, 0xe1, 0xa1, 0x5f, 0xe7, 0x20, 0x83, 0x0d, 0xd0, 0xa6, 0x26, 0x0d, 0x26, 0x7f, 0x3f,
0xee, 0xe8, 0x0d, 0x32, 0xfe, 0x30, 0xfc, 0x5c, 0x0a, 0xa6, 0x4b, 0x83, 0x9b, 0x4b, 0xbd, 0xa3,
0xb7, 0xca, 0x20, 0x1a, 0x2d, 0x09, 0xd2, 0x58, 0xed, 0xf6, 0xf7, 0xff, 0x2c, 0x85, 0x68, 0x73,
0x1c, 0x8d, 0x93, 0x52, 0x88, 0x63, 0x69, 0xf0, 0x71, 0x34, 0xe9, 0x9c, 0x68, 0xcd, 0x52, 0x90,
0x93, 0x18, 0xa4, 0xb5, 0x93, 0xe0, 0x36, 0xac, 0x0b, 0x57, 0xae, 0xe9, 0xa5, 0x10, 0xb0, 0xa4,
0xb3, 0xeb, 0x33, 0x5d, 0x6b, 0x94, 0x42, 0x34, 0xa4, 0xc1, 0xc5, 0xf5, 0xdb, 0x4e, 0x47, 0x3b,
0x2e, 0x05, 0x69, 0x31, 0x90, 0xe3, 0x4e, 0x39, 0xc5, 0xed, 0xa6, 0x34, 0xb8, 0x3e, 0xe9, 0xe8,
0xa5, 0x00, 0xfa, 0x09, 0x27, 0x55, 0xd7, 0xc9, 0xe7, 0x85, 0x13, 0xd1, 0x32, 0xb8, 0x16, 0x2c,
0xe9, 0xca, 0xab, 0x5f, 0xcd, 0x66, 0xa5, 0x10, 0xb0, 0xa4, 0xeb, 0xcf, 0x97, 0x7b, 0xd0, 0x34,
0x38, 0xd0, 0x68, 0x74, 0x53, 0x0a, 0xd2, 0xe4, 0x20, 0xc0, 0xe0, 0x52, 0x90, 0x56, 0x02, 0x52,
0xba, 0x07, 0xad, 0x76, 0x02, 0x53, 0xcd, 0xce, 0xf6, 0xe7, 0x43, 0xd3, 0x3a, 0x38, 0x3a, 0xda,
0x00, 0x3e, 0x4e, 0x81, 0xdf, 0x66, 0xa0, 0x8f, 0x8e, 0x00, 0x9c, 0xbe, 0x79, 0x01, 0xe5, 0xc8,
0x0f, 0xe8, 0x00, 0x3b, 0xde, 0xbe, 0xbd, 0xc6, 0x01, 0x44, 0xf6, 0x68, 0x74, 0xef, 0x07, 0xb7,
0x4a, 0x3a, 0x87, 0x57, 0x38, 0x4b, 0x07, 0x38, 0xf4, 0x4e, 0xaf, 0x35, 0xf5, 0xe2, 0x61, 0x7c,
0xb2, 0xed, 0xa9, 0x80, 0x65, 0x67, 0x41, 0x74, 0xf4, 0x07, 0x8d, 0x4a, 0xa7, 0xdb, 0x1c, 0xd2,
0x49, 0xa8, 0xfb, 0x5c, 0x0c, 0x5f, 0xe7, 0x1a, 0x3a, 0x40, 0x6f, 0x00, 0x5f, 0xd1, 0x4e, 0x38,
0xb6, 0x21, 0x59, 0x3e, 0x57, 0x7a, 0x66, 0xde, 0x0d, 0x49, 0xd8, 0xf7, 0xae, 0x88, 0x36, 0x06,
0x23, 0x0c, 0x27, 0xc8, 0x55, 0x60, 0xd3, 0x60, 0xcb, 0x5e, 0x8c, 0xae, 0xd8, 0xd0, 0x6d, 0x62,
0x80, 0x53, 0x1f, 0xc6, 0xc3, 0x72, 0x62, 0x81, 0x29, 0xd9, 0xad, 0xde, 0x7a, 0x0f, 0xcb, 0x1f,
0x8e, 0x3f, 0x94, 0xbf, 0x07, 0x71, 0x19, 0x0f, 0x77, 0xbc, 0x07, 0x59, 0x19, 0x7e, 0x18, 0x97,
0xbf, 0x07, 0x39, 0xf9, 0x30, 0x1c, 0x17, 0x32, 0xa7, 0x0e, 0x7c, 0xc9, 0xb2, 0xc7, 0x76, 0xe6,
0xb8, 0xc8, 0xfb, 0x2d, 0x06, 0x31, 0x5f, 0x37, 0x98, 0xdc, 0x9b, 0xab, 0x2e, 0xc9, 0xb3, 0xe5,
0xb3, 0x60, 0xcb, 0x36, 0x53, 0xfe, 0x80, 0x31, 0xa5, 0x5a, 0x09, 0x4a, 0x49, 0x0e, 0x49, 0xa9,
0x02, 0x34, 0xf8, 0xfb, 0x0f, 0xa5, 0x16, 0x93, 0xbf, 0x4f, 0x57, 0xb5, 0x77, 0x4d, 0x6e, 0xc9,
0x9a, 0x46, 0xae, 0x6f, 0xdd, 0x6e, 0x2e, 0x6a, 0x72, 0x5d, 0xb6, 0xa8, 0x89, 0xeb, 0xdf, 0xd3,
0x30, 0xda, 0xb1, 0x2e, 0x84, 0xd8, 0xb1, 0xac, 0x3f, 0xfc, 0x60, 0x69, 0xba, 0x3b, 0xd6, 0xf5,
0xde, 0x2c, 0x47, 0xdf, 0xe2, 0xaf, 0x73, 0x04, 0x14, 0x2d, 0x1c, 0xff, 0x84, 0x2b, 0xd3, 0x63,
0x0c, 0x58, 0x85, 0x36, 0x5f, 0x0d, 0xaf, 0x24, 0xc1, 0x00, 0x78, 0x33, 0x20, 0x7d, 0x7e, 0x30,
0x8e, 0x8d, 0x43, 0x86, 0xe4, 0xad, 0x97, 0x53, 0x1a, 0x48, 0xb1, 0x6b, 0x9c, 0x70, 0x2d, 0xc1,
0xd1, 0x6e, 0xc8, 0x3f, 0x0b, 0x9f, 0xea, 0x12, 0x9e, 0x92, 0x49, 0x04, 0x73, 0x3a, 0xe0, 0x08,
0x86, 0xc8, 0xa8, 0xf9, 0x27, 0xba, 0x14, 0x53, 0xf9, 0xf3, 0x53, 0x1c, 0x0b, 0x39, 0x0a, 0x73,
0xb0, 0x6c, 0x26, 0xf0, 0xc7, 0x99, 0x64, 0x0e, 0x91, 0x7e, 0x35, 0xd0, 0xdd, 0xf6, 0xf0, 0xb8,
0xa8, 0x27, 0x91, 0xb8, 0xdc, 0x4c, 0xea, 0x83, 0x43, 0x6f, 0x1a, 0xae, 0x7a, 0xdb, 0x7b, 0x68,
0x95, 0x2a, 0xee, 0x05, 0x8b, 0x2b, 0xba, 0x3b, 0x17, 0x35, 0xca, 0x2f, 0x44, 0xac, 0x40, 0x17,
0x2b, 0x60, 0x51, 0xfb, 0xf5, 0xf0, 0x45, 0x4a, 0xb7, 0x32, 0x25, 0x29, 0x59, 0x02, 0xd2, 0x2a,
0x01, 0x85, 0x9c, 0xd9, 0xc2, 0xb8, 0xd4, 0xb7, 0x38, 0xae, 0x09, 0x8e, 0xb3, 0xb3, 0x82, 0xd7,
0x30, 0x5c, 0xe3, 0xb4, 0x25, 0x13, 0xc6, 0x11, 0xcc, 0x46, 0x78, 0xa2, 0x48, 0xf5, 0xfc, 0x44,
0xba, 0x98, 0x48, 0xcc, 0xb1, 0x6b, 0x0a, 0x3d, 0xb7, 0xfc, 0xbd, 0x98, 0x1b, 0xaf, 0xc7, 0xdc,
0xf8, 0x31, 0xcc, 0xcd, 0xd7, 0x63, 0x6e, 0xfe, 0x18, 0xe6, 0xd6, 0xeb, 0x31, 0xb7, 0x5e, 0x83,
0x79, 0x43, 0xfc, 0x82, 0x52, 0xf1, 0x43, 0x41, 0x48, 0xe9, 0x80, 0x7c, 0x86, 0xd3, 0x11, 0x57,
0x80, 0x05, 0x3d, 0x1b, 0xe2, 0xc9, 0x4a, 0xb0, 0x53, 0xff, 0x21, 0xa6, 0x69, 0xf4, 0x29, 0xa6,
0xbe, 0xd8, 0x82, 0x85, 0x3b, 0xa7, 0x9f, 0xdc, 0x3a, 0x2b, 0x32, 0x73, 0x02, 0xc8, 0x9a, 0x30,
0x36, 0xdf, 0xa9, 0x0a, 0x93, 0x0b, 0xbe, 0xfa, 0x9c, 0x0a, 0x43, 0xbe, 0x28, 0xa5, 0x86, 0x6e,
0x43, 0xe4, 0x4b, 0x89, 0x9a, 0xed, 0x24, 0x0a, 0xa2, 0x29, 0x32, 0xa6, 0xb3, 0x80, 0x86, 0xa9,
0x6e, 0x32, 0x0e, 0xcd, 0x38, 0x01, 0xc5, 0x8c, 0x18, 0xbf, 0xdf, 0xcd, 0x08, 0x73, 0xe7, 0x9c,
0x67, 0xeb, 0xc8, 0x3f, 0xb2, 0x4c, 0xd7, 0x5a, 0xbb, 0x66, 0x44, 0xc9, 0x3d, 0x46, 0x6b, 0xd8,
0xe8, 0x0b, 0xd9, 0x9e, 0x4b, 0x66, 0x81, 0xbf, 0xc4, 0xa8, 0xa1, 0xcb, 0x77, 0x2c, 0x6b, 0xf3,
0xcf, 0x3e, 0x17, 0xd9, 0x7c, 0x6d, 0x97, 0x1b, 0xd3, 0x07, 0xc3, 0xc0, 0x99, 0x2f, 0x22, 0x1a,
0x94, 0x00, 0x34, 0x06, 0x67, 0x96, 0x85, 0xad, 0x89, 0x65, 0x18, 0x9a, 0x83, 0xb7, 0xeb, 0x52,
0x6f, 0xd0, 0x1a, 0x5c, 0x9a, 0x0f, 0xdb, 0x86, 0x9e, 0x5b, 0xc7, 0x84, 0x39, 0xec, 0xef, 0xb7,
0x9e, 0x09, 0xf9, 0x6c, 0x48, 0x83, 0xe8, 0xcc, 0xfe, 0x6e, 0x5a, 0x90, 0x81, 0x61, 0x62, 0x2b,
0x4b, 0x53, 0x0a, 0xb9, 0x34, 0xa5, 0x9e, 0x0d, 0x59, 0xba, 0xf2, 0x22, 0xb2, 0x2b, 0x39, 0xfa,
0x72, 0x74, 0xe4, 0x7c, 0xad, 0x05, 0x74, 0xe9, 0xdf, 0x51, 0x6c, 0xdd, 0x3c, 0x72, 0x44, 0x11,
0xad, 0xba, 0x95, 0xfa, 0x3a, 0xfd, 0x24, 0x3d, 0x3b, 0xd2, 0x8b, 0xeb, 0x32, 0x47, 0xdb, 0x83,
0x06, 0xdb, 0x25, 0x1c, 0xef, 0xf9, 0x99, 0x35, 0x06, 0xe4, 0xd2, 0xc8, 0xd1, 0xd5, 0xa5, 0x0c,
0x4c, 0x86, 0x3c, 0x12, 0x4f, 0xc0, 0x45, 0x2a, 0xe9, 0xec, 0x48, 0x25, 0x2d, 0x7f, 0xf9, 0x17,
0x3c, 0x0c, 0x1e, 0x61, 0xce, 0x6c, 0x32, 0x09, 0xf9, 0x1a, 0x96, 0x2b, 0x45, 0xca, 0x98, 0x4b,
0x0c, 0xd3, 0x21, 0xbb, 0xd2, 0x43, 0xc2, 0xbd, 0xe3, 0x2e, 0xb5, 0xf9, 0x47, 0xc6, 0x2d, 0x3e,
0xbc, 0xca, 0x2d, 0x1e, 0xb7, 0xdb, 0xcd, 0x76, 0xc6, 0x2f, 0xd2, 0x97, 0x0d, 0xc5, 0xca, 0xf8,
0x3d, 0x43, 0x92, 0x12, 0xc7, 0xf7, 0x0a, 0x77, 0xf6, 0x8f, 0x51, 0x86, 0x18, 0x6b, 0xa7, 0x6b,
0xdb, 0xa4, 0xc2, 0x7b, 0xc9, 0xcd, 0xba, 0xa9, 0xea, 0x42, 0xe1, 0x7e, 0x28, 0x44, 0x66, 0x54,
0x88, 0xd8, 0x5a, 0xd0, 0xf7, 0xff, 0x2f, 0x5c, 0x8e, 0x95, 0x8d, 0xd9, 0x0e, 0xa1, 0x76, 0xe2,
0x10, 0x99, 0x4b, 0x98, 0x43, 0x43, 0x56, 0x57, 0xda, 0xa9, 0x87, 0xa6, 0x50, 0xb5, 0x07, 0x5f,
0xaa, 0x3a, 0x71, 0x11, 0x3b, 0x52, 0xa7, 0x91, 0x87, 0xca, 0x00, 0xb2, 0x28, 0x1a, 0x68, 0x52,
0x3d, 0x01, 0x3d, 0xc5, 0x57, 0x25, 0x6d, 0xb8, 0xc5, 0xca, 0x01, 0x1a, 0x95, 0x34, 0x30, 0x6a,
0x07, 0x06, 0x9e, 0x8a, 0xca, 0xf4, 0x8b, 0x77, 0xa4, 0x67, 0xd4, 0x5e, 0x4c, 0x09, 0x0f, 0xf9,
0x94, 0x4a, 0x76, 0xca, 0x90, 0x46, 0x4c, 0x39, 0x95, 0x27, 0xb4, 0x18, 0x1b, 0x2d, 0xfb, 0x94,
0x1f, 0xed, 0x60, 0xf3, 0x0a, 0xc5, 0x32, 0xe9, 0xab, 0x48, 0x52, 0x68, 0x32, 0x75, 0x4f, 0x4c,
0x9d, 0x6b, 0x56, 0xe6, 0x8f, 0x60, 0xc2, 0x84, 0xa7, 0x60, 0x20, 0xb6, 0xfb, 0xd1, 0xfa, 0x79,
0x5a, 0x8a, 0x4d, 0x12, 0x8e, 0x86, 0xc9, 0xb6, 0x47, 0x6f, 0x1b, 0xa6, 0x9c, 0x3d, 0x1a, 0x46,
0x1e, 0xef, 0x96, 0x8e, 0x2d, 0x11, 0xc3, 0x06, 0xa4, 0x85, 0xd9, 0x82, 0xa1, 0x6a, 0x1a, 0x78,
0xfa, 0x51, 0x9d, 0xb0, 0x63, 0xa2, 0x1a, 0x3a, 0x95, 0xd1, 0xc2, 0x0c, 0x46, 0xbe, 0x4d, 0x65,
0xac, 0xfc, 0x69, 0xa7, 0xad, 0x4e, 0xb7, 0xdd, 0x56, 0xaa, 0xc0, 0x27, 0xa7, 0x6a, 0x7c, 0x1b,
0xae, 0xa3, 0xc8, 0x67, 0x2d, 0x91, 0x2f, 0xbc, 0x7d, 0x64, 0x97, 0x62, 0xff, 0xfc, 0x64, 0xbe,
0x6c, 0x85, 0x23, 0xb1, 0x6a, 0x3f, 0x84, 0x79, 0x3d, 0x1e, 0x7c, 0x53, 0x71, 0x02, 0xe1, 0x12,
0x72, 0xfe, 0xec, 0xe7, 0x27, 0x69, 0xf8, 0xee, 0x55, 0x34, 0x26, 0x68, 0xb6, 0x34, 0x15, 0x48,
0xd6, 0x0c, 0x3c, 0x61, 0x8e, 0xeb, 0x5d, 0xd8, 0xf7, 0xf2, 0x32, 0x78, 0x2b, 0xce, 0x58, 0x12,
0x25, 0x29, 0x1c, 0xde, 0xc0, 0xe1, 0x8d, 0x82, 0xe1, 0xd7, 0xeb, 0x70, 0x31, 0x65, 0x2c, 0xd9,
0x8d, 0xa0, 0x89, 0x08, 0x9a, 0x25, 0x08, 0x88, 0x23, 0x0e, 0xdc, 0x77, 0xe3, 0x68, 0x21, 0x8e,
0x56, 0x01, 0x8e, 0x09, 0x6b, 0x16, 0xdc, 0x3d, 0xb8, 0x8d, 0x83, 0xdb, 0x45, 0x04, 0x9c, 0x8f,
0x49, 0x48, 0xbd, 0xd0, 0x0f, 0x76, 0x23, 0x38, 0x46, 0x04, 0xc7, 0x05, 0x08, 0x6e, 0xfc, 0xf5,
0xbe, 0xc9, 0x7f, 0xc3, 0xb1, 0xbf, 0x15, 0x8c, 0x3d, 0xf3, 0x4c, 0xd7, 0x9f, 0xef, 0x1e, 0xdc,
0xc1, 0xc1, 0x9d, 0xd2, 0xc1, 0x25, 0xcc, 0x93, 0x12, 0x53, 0x27, 0x71, 0xa4, 0x2c, 0xa4, 0x15,
0x8e, 0x00, 0xe2, 0x18, 0x58, 0x6f, 0x97, 0xac, 0x7c, 0xc7, 0x83, 0x88, 0xa7, 0xc7, 0x64, 0x94,
0xb5, 0xe4, 0x48, 0x78, 0x0d, 0xe6, 0x0d, 0xca, 0xed, 0x1b, 0x25, 0xf6, 0x61, 0x87, 0x3f, 0x3d,
0x34, 0x7e, 0xd3, 0xdb, 0xbd, 0x38, 0x14, 0x07, 0x93, 0x29, 0x4e, 0x85, 0x36, 0x95, 0xc9, 0x70,
0x32, 0x4d, 0xbe, 0x73, 0x77, 0xe2, 0xa0, 0x09, 0x90, 0x73, 0x57, 0x88, 0xa8, 0xf2, 0xfc, 0x2c,
0xe7, 0x2f, 0x11, 0x6d, 0x76, 0x19, 0x26, 0x17, 0x52, 0x9e, 0xd0, 0x30, 0x71, 0x43, 0x79, 0xa0,
0x63, 0x5c, 0xd1, 0x03, 0x77, 0xb6, 0xbb, 0x32, 0x1d, 0xdb, 0x49, 0x0f, 0x5b, 0x18, 0xb6, 0x4f,
0x08, 0x99, 0x81, 0x54, 0x7e, 0xa0, 0x2c, 0xef, 0xe5, 0xab, 0xeb, 0x07, 0x05, 0xa7, 0x8e, 0x5e,
0x8c, 0x0f, 0xcd, 0x32, 0x76, 0xa7, 0x66, 0x73, 0x63, 0xef, 0x2b, 0x56, 0xd5, 0xc5, 0xb1, 0x61,
0xa8, 0x49, 0x00, 0xa4, 0x6d, 0x23, 0xc1, 0x63, 0xc0, 0x72, 0x1c, 0x1a, 0xc3, 0xc1, 0x39, 0x1e,
0x3a, 0x99, 0xf6, 0x55, 0xaa, 0xc6, 0x4c, 0x4e, 0x99, 0xb7, 0x5e, 0xe1, 0x3d, 0x9b, 0xf7, 0x8e,
0x8b, 0xd7, 0x96, 0x44, 0xf7, 0xb3, 0x47, 0xef, 0xc9, 0x3f, 0x2e, 0x2f, 0x7e, 0x8f, 0xa2, 0xd5,
0x18, 0x62, 0x05, 0x1a, 0x46, 0x3d, 0xaf, 0xfc, 0x6a, 0x50, 0xe6, 0xc2, 0x4a, 0x7a, 0x9d, 0x26,
0x5a, 0x38, 0x21, 0x98, 0xfc, 0x70, 0xe5, 0x83, 0x47, 0xbc, 0xa1, 0x0f, 0x91, 0xca, 0x9e, 0x00,
0x99, 0xd1, 0x9a, 0xf5, 0xba, 0xc0, 0x22, 0x15, 0xf0, 0x54, 0xe5, 0x17, 0x83, 0x52, 0xbc, 0x34,
0x8b, 0x18, 0x9b, 0xb8, 0x4d, 0xeb, 0x56, 0x3d, 0x88, 0x11, 0xf0, 0x5b, 0x5d, 0xd7, 0x57, 0xb0,
0x9b, 0xaa, 0x54, 0xe7, 0xcb, 0x11, 0x47, 0x4e, 0x11, 0x5b, 0xc9, 0x7b, 0x3f, 0x58, 0x62, 0x07,
0x60, 0xd2, 0x4c, 0x2a, 0xae, 0x3d, 0xc9, 0x12, 0xb6, 0x90, 0x8b, 0x9e, 0x66, 0xd6, 0x4d, 0x8e,
0x37, 0x8d, 0x42, 0x60, 0x1f, 0x5e, 0x36, 0xf2, 0x6a, 0x21, 0xc2, 0x44, 0x8a, 0x5a, 0xd0, 0x6d,
0x7e, 0xb0, 0x71, 0xa9, 0x6b, 0x34, 0x9b, 0x27, 0xdc, 0x53, 0xa3, 0x9e, 0x14, 0xbf, 0x94, 0x40,
0x0b, 0xc1, 0xcc, 0x83, 0x97, 0x14, 0x57, 0xd0, 0x90, 0xcf, 0x63, 0x6a, 0x42, 0x00, 0x75, 0x0a,
0x2b, 0x61, 0xf3, 0x9d, 0xd2, 0x64, 0xde, 0x53, 0x19, 0x3d, 0x77, 0x42, 0x85, 0x2c, 0xe8, 0x4f,
0xc6, 0x60, 0x27, 0x1c, 0x4e, 0x67, 0x64, 0x59, 0xc3, 0xbb, 0x48, 0x69, 0x0d, 0x04, 0x00, 0x84,
0x12, 0x79, 0xbe, 0x76, 0x23, 0xb1, 0x7c, 0x76, 0x3d, 0x82, 0x09, 0x8f, 0xec, 0xb1, 0x13, 0x94,
0xa8, 0xb6, 0xb8, 0x67, 0x67, 0x54, 0xf8, 0x01, 0x64, 0xdf, 0x4e, 0x75, 0x86, 0xf7, 0xf4, 0xe8,
0x1a, 0xeb, 0xe6, 0x89, 0x4f, 0x79, 0x40, 0x9a, 0x7b, 0x31, 0x28, 0x06, 0x37, 0x35, 0x80, 0x7e,
0x67, 0x5a, 0x0b, 0x59, 0x78, 0x4a, 0x63, 0xf0, 0x14, 0x83, 0xea, 0x3c, 0x2e, 0x48, 0x51, 0xd1,
0xda, 0xca, 0xf1, 0xb2, 0x2d, 0x42, 0x45, 0x5a, 0xf3, 0x8d, 0xa5, 0xa3, 0xe8, 0xcf, 0xbe, 0x65,
0xfa, 0xdd, 0xd8, 0xd0, 0x2f, 0xce, 0xd7, 0x5e, 0xe9, 0x31, 0x96, 0x97, 0x83, 0x46, 0x26, 0xab,
0xa5, 0xc7, 0x6b, 0x79, 0x58, 0xa6, 0x29, 0xea, 0x6b, 0xda, 0x8f, 0x79, 0x14, 0x55, 0x0c, 0x3a,
0xba, 0xda, 0x04, 0xf5, 0x31, 0x2c, 0x56, 0x5f, 0xd3, 0x9d, 0x8c, 0x44, 0x40, 0xc6, 0x5e, 0x0c,
0x3b, 0x7e, 0x1f, 0xc3, 0x26, 0x5a, 0x0b, 0x7b, 0x3a, 0x2b, 0xa1, 0xe2, 0x53, 0x11, 0xf0, 0xdd,
0x8b, 0xf2, 0x12, 0x6f, 0x31, 0x04, 0x43, 0x60, 0x22, 0x92, 0x90, 0x0e, 0xef, 0xa2, 0xf1, 0xa7,
0xc9, 0x4e, 0x52, 0xbe, 0x87, 0x2c, 0xfe, 0x12, 0xcc, 0xe1, 0xeb, 0x16, 0x4b, 0x62, 0x6a, 0xc6,
0x46, 0x81, 0xf5, 0x8e, 0x93, 0xac, 0xf8, 0x7b, 0xef, 0x2c, 0x08, 0xcc, 0xc7, 0x9a, 0x13, 0xb2,
0xbf, 0x32, 0x4b, 0x44, 0x95, 0xb8, 0x45, 0x74, 0xcb, 0xda, 0x4b, 0x78, 0x13, 0xa2, 0x5c, 0x8c,
0x30, 0x00, 0xc3, 0x69, 0x71, 0xef, 0x51, 0x09, 0xd9, 0xb6, 0xe2, 0xd5, 0xb6, 0xc2, 0xb5, 0xdf,
0xdc, 0x48, 0x19, 0x96, 0x9a, 0xb5, 0x28, 0x7a, 0x61, 0x54, 0x39, 0x41, 0x59, 0x9b, 0xe9, 0xf9,
0x38, 0x3b, 0x42, 0x00, 0xe3, 0x6c, 0xc5, 0x13, 0x9c, 0xdf, 0x14, 0x81, 0x33, 0x9a, 0x38, 0x3f,
0x02, 0x0a, 0x61, 0x65, 0xd9, 0x64, 0xe3, 0x8b, 0xad, 0xd1, 0x0c, 0xbe, 0x7c, 0xbe, 0xf1, 0xa5,
0x94, 0xdb, 0xca, 0xcc, 0x18, 0x70, 0xd9, 0x71, 0x66, 0xa0, 0xa2, 0x8a, 0x9b, 0xf6, 0x59, 0x88,
0x46, 0x15, 0xb4, 0x5a, 0xe9, 0x8a, 0x6b, 0x91, 0xd7, 0x2e, 0xc5, 0x6b, 0x02, 0x22, 0x0e, 0x34,
0x09, 0xea, 0x3e, 0xbb, 0x3b, 0xc9, 0x2b, 0x43, 0x07, 0x52, 0x02, 0x79, 0x03, 0x96, 0x98, 0x4c,
0x03, 0xff, 0x1e, 0x72, 0x15, 0x62, 0xfb, 0x34, 0xc4, 0x1b, 0x5d, 0x78, 0x7a, 0xef, 0x07, 0x10,
0x96, 0x2e, 0x28, 0xf9, 0xc6, 0x4c, 0xd0, 0x37, 0xb2, 0x0a, 0xc0, 0xb8, 0x82, 0x47, 0xc1, 0x30,
0x9f, 0x61, 0x62, 0x91, 0x6b, 0x88, 0x17, 0x5a, 0x68, 0xda, 0x14, 0x9c, 0xa2, 0xa5, 0x1c, 0xea,
0xec, 0xfa, 0x9c, 0x38, 0x59, 0xa4, 0xac, 0x8a, 0x4a, 0xa2, 0xec, 0xb4, 0x8f, 0x60, 0xaa, 0xb2,
0x17, 0x6f, 0x27, 0xe0, 0x3d, 0x24, 0x1c, 0xdd, 0x05, 0x9b, 0x29, 0x8c, 0xa5, 0xeb, 0x5b, 0xec,
0x9a, 0x4e, 0x0d, 0xe8, 0x88, 0x7c, 0xcb, 0x77, 0xb1, 0x5f, 0x1d, 0xaf, 0x0b, 0x6b, 0xaa, 0xcc,
0x2e, 0x1d, 0x1b, 0x08, 0xe1, 0x4e, 0x22, 0x3f, 0x30, 0xe7, 0x14, 0x59, 0x7a, 0x1e, 0xd1, 0x25,
0xfa, 0x25, 0xeb, 0x7c, 0x05, 0x39, 0x07, 0x04, 0x0e, 0x1c, 0x0c, 0xc6, 0x2f, 0x57, 0x40, 0x21,
0x5a, 0x52, 0x72, 0x09, 0x51, 0x70, 0x8d, 0x08, 0x6e, 0x51, 0x0c, 0x67, 0xc8, 0x67, 0xec, 0xf2,
0x38, 0xbf, 0x06, 0x16, 0xa9, 0x39, 0x8c, 0x61, 0x1e, 0xa3, 0xca, 0xb0, 0x29, 0x0a, 0x42, 0xb1,
0x8b, 0xbc, 0x88, 0xfe, 0x94, 0x5d, 0x50, 0xee, 0xd6, 0xeb, 0x52, 0x95, 0xbd, 0xc6, 0x96, 0x8f,
0x6a, 0x7a, 0xc9, 0xb8, 0x1e, 0xd6, 0xbe, 0x87, 0xa7, 0x2b, 0xa3, 0x81, 0x4e, 0x43, 0x79, 0xa9,
0x40, 0x4c, 0xc4, 0xaf, 0x6e, 0xf7, 0x59, 0x68, 0x35, 0xf8, 0x0f, 0x67, 0xc9, 0xd8, 0xbe, 0x0e,
0x5c, 0x70, 0xd6, 0xbc, 0xaf, 0x25, 0xc4, 0x96, 0x09, 0x00, 0x64, 0x00, 0xfd, 0x3a, 0xbf, 0xb3,
0x8e, 0xf7, 0x75, 0x89, 0x30, 0xff, 0xd2, 0x84, 0x95, 0xe5, 0x40, 0x89, 0x96, 0x15, 0x96, 0x7e,
0xe3, 0xa7, 0xbf, 0xc2, 0xa4, 0xc4, 0x37, 0x83, 0xe4, 0x9f, 0x46, 0x0b, 0x1f, 0xeb, 0xa2, 0x7e,
0x88, 0x57, 0xc9, 0x33, 0x25, 0x91, 0xc8, 0x07, 0x76, 0xdc, 0xe7, 0x9f, 0x2d, 0xa8, 0xbb, 0x1a,
0x4a, 0x83, 0x4a, 0x9f, 0x87, 0xe6, 0x22, 0x37, 0xe1, 0x5f, 0x32, 0xb1, 0xde, 0xef, 0x38, 0xed,
0x69, 0xbf, 0xce, 0x5f, 0x24, 0x85, 0xf0, 0xa2, 0x31, 0x95, 0x64, 0xd0, 0x10, 0x07, 0x0d, 0xc1,
0x65, 0xa7, 0xe3, 0x72, 0x23, 0xc4, 0x25, 0x92, 0xc1, 0xc4, 0xbc, 0xa3, 0x29, 0xc8, 0x22, 0x4e,
0xb3, 0xfb, 0x8b, 0xc6, 0xa0, 0x82, 0xfb, 0x73, 0x68, 0x2e, 0x57, 0x3d, 0xf2, 0xbb, 0x19, 0x60,
0x23, 0x10, 0xca, 0x79, 0xb4, 0x5e, 0x01, 0x73, 0x1a, 0x10, 0x4f, 0x47, 0xa6, 0x1b, 0x17, 0x3e,
0x93, 0x42, 0xac, 0x6b, 0x31, 0x52, 0x45, 0xf9, 0x3d, 0xad, 0x13, 0x5b, 0xb8, 0xcc, 0x34, 0x30,
0xed, 0x3b, 0x83, 0x31, 0x05, 0x73, 0x08, 0x9a, 0x68, 0x83, 0x98, 0xae, 0xfc, 0x7b, 0x90, 0x07,
0xd1, 0xc9, 0x82, 0xad, 0x28, 0x53, 0x5e, 0xe4, 0x0b, 0x23, 0x5e, 0x4c, 0xec, 0xf6, 0xeb, 0x0e,
0x1f, 0x37, 0x15, 0x45, 0xdf, 0x0a, 0x3f, 0x66, 0x59, 0xa7, 0xb3, 0x61, 0xeb, 0x4f, 0xbe, 0x28,
0xcc, 0x9a, 0x4e, 0x44, 0xe9, 0x20, 0x99, 0xb9, 0xf2, 0xce, 0xc3, 0x44, 0x8a, 0x98, 0x6b, 0x08,
0x76, 0x41, 0xce, 0x2d, 0x31, 0x97, 0x47, 0xc3, 0x90, 0xb8, 0x78, 0x79, 0x97, 0x06, 0x7b, 0xaa,
0xc6, 0x67, 0x43, 0x2a, 0x58, 0x2d, 0xf2, 0x45, 0x71, 0x39, 0x89, 0x57, 0x86, 0xd8, 0xdd, 0x25,
0x3e, 0x6b, 0x5c, 0x44, 0xc5, 0x0b, 0x61, 0x58, 0x58, 0xc4, 0x9f, 0x22, 0x20, 0xa3, 0x75, 0x10,
0x80, 0xfc, 0x27, 0x73, 0x88, 0x1f, 0x20, 0xb8, 0x3c, 0x93, 0x36, 0x72, 0xd3, 0x8d, 0xd2, 0x52,
0xa3, 0x9d, 0x96, 0xb8, 0x34, 0x6d, 0xab, 0x5c, 0x9c, 0x94, 0x97, 0x06, 0x15, 0xb2, 0x3c, 0xcb,
0x4f, 0x9f, 0xde, 0x6c, 0x49, 0x32, 0x0b, 0x2c, 0x29, 0x75, 0x79, 0x73, 0x56, 0x2f, 0x7f, 0x3a,
0x57, 0x39, 0xfc, 0xe9, 0xa4, 0xd3, 0xe9, 0xf4, 0xc8, 0x3f, 0xfd, 0x75, 0x90, 0xdf, 0x19, 0x90,
0xe0, 0x3b, 0x2c, 0x00, 0x90, 0x05, 0x70, 0x8c, 0x58, 0x7c, 0x21, 0x35, 0xc6, 0xd5, 0x1b, 0x9f,
0x80, 0x4a, 0xc1, 0x7b, 0xca, 0x4c, 0x59, 0x68, 0xce, 0x28, 0x37, 0x60, 0x8f, 0x88, 0x85, 0x49,
0x8d, 0x8a, 0x80, 0x2b, 0x6e, 0x00, 0xd6, 0x21, 0xc2, 0x81, 0xa0, 0x12, 0x0b, 0xf9, 0x15, 0xb2,
0x77, 0x95, 0x25, 0x84, 0x50, 0x0e, 0x40, 0x88, 0x59, 0x1d, 0xef, 0x3b, 0x15, 0xb7, 0xa2, 0x31,
0x01, 0x0a, 0x89, 0xe9, 0xd9, 0x60, 0x61, 0x67, 0x30, 0xf8, 0x20, 0x2d, 0x08, 0x81, 0x28, 0x55,
0xce, 0xe2, 0xcd, 0x34, 0x5d, 0x20, 0x93, 0xed, 0x62, 0x98, 0xdd, 0xd7, 0xc8, 0xc7, 0x62, 0xe1,
0x23, 0xb0, 0xd4, 0x0f, 0xd9, 0x7d, 0x42, 0xa4, 0x91, 0x81, 0x71, 0xea, 0xff, 0x4e, 0xe9, 0x8a,
0x98, 0x11, 0x39, 0x84, 0x10, 0x4e, 0x3f, 0x23, 0xce, 0x8c, 0x53, 0x80, 0xfd, 0x65, 0xac, 0x83,
0xcc, 0x06, 0xc6, 0x5a, 0x11, 0xca, 0x26, 0x16, 0xb3, 0x71, 0x70, 0xda, 0xc2, 0xc5, 0x48, 0xa9,
0x9c, 0xb3, 0x95, 0xb2, 0xdb, 0xaf, 0xc9, 0x35, 0x44, 0xf0, 0x14, 0x34, 0x80, 0xe4, 0x2f, 0xc7,
0x44, 0x55, 0x18, 0x3f, 0xa4, 0x10, 0x2f, 0xd0, 0x7b, 0x73, 0x4e, 0x82, 0x2c, 0xe4, 0x82, 0x80,
0xd0, 0xe3, 0x75, 0x75, 0xd0, 0x8a, 0x75, 0x08, 0xd6, 0x30, 0x56, 0x2e, 0x21, 0x0d, 0x2b, 0xb4,
0x21, 0x6b, 0xef, 0xd6, 0xf3, 0xef, 0x3d, 0x21, 0xd5, 0x4a, 0xaa, 0x1c, 0x01, 0xd7, 0xd9, 0x3b,
0xdf, 0x8d, 0xf0, 0xe6, 0xbd, 0x7c, 0x89, 0xbd, 0x74, 0x62, 0x9f, 0x98, 0x5e, 0x99, 0x04, 0x89,
0x03, 0x0e, 0x03, 0x98, 0x52, 0x50, 0x91, 0x67, 0x7d, 0x6b, 0x1b, 0xb2, 0x8d, 0xf7, 0x0a, 0xb7,
0xce, 0x65, 0xf1, 0xe4, 0x22, 0x4e, 0x73, 0x8d, 0x34, 0xe1, 0x1d, 0x00, 0x4f, 0xc4, 0x95, 0x38,
0x22, 0xb7, 0xdb, 0xcb, 0x33, 0xa5, 0x52, 0x7a, 0xee, 0xda, 0x66, 0xd0, 0x74, 0x36, 0x73, 0x2c,
0xec, 0x8a, 0x24, 0x72, 0x13, 0xe1, 0x77, 0xf5, 0xf5, 0x54, 0xb0, 0x05, 0x4e, 0x6e, 0x6a, 0x3b,
0xc0, 0xf0, 0x48, 0x65, 0x20, 0x1a, 0xe6, 0x64, 0xbd, 0xb1, 0x03, 0x12, 0x1b, 0x6a, 0x2a, 0x23,
0x96, 0xf3, 0x16, 0x9c, 0xec, 0xe6, 0x0c, 0x09, 0xbf, 0xd7, 0x57, 0x7c, 0x98, 0x2d, 0x50, 0xf0,
0xb6, 0xc5, 0x98, 0xd5, 0xd8, 0x71, 0x08, 0x1c, 0x4e, 0x74, 0x3c, 0x66, 0xee, 0xa6, 0x8a, 0x6f,
0x9f, 0x06, 0x31, 0xbb, 0xe6, 0x9a, 0xe5, 0xda, 0x1d, 0x2b, 0x77, 0x7c, 0xde, 0x96, 0x0a, 0x6f,
0xcc, 0x77, 0x27, 0x23, 0x8a, 0x5e, 0xb8, 0x86, 0x3f, 0xe6, 0xd4, 0x07, 0x22, 0x98, 0x26, 0xe2,
0xfc, 0xa8, 0x96, 0x28, 0xd6, 0xb5, 0x44, 0x70, 0x84, 0xc9, 0x6f, 0x0e, 0x2a, 0x5b, 0x86, 0xbe,
0x99, 0xda, 0x11, 0x6c, 0x08, 0x63, 0xbf, 0x8b, 0xc2, 0x9b, 0x29, 0xc3, 0x6e, 0x3c, 0x2e, 0x5f,
0xdf, 0x8f, 0xfd, 0x4c, 0x25, 0xef, 0x9a, 0x10, 0x43, 0x35, 0xe3, 0xd5, 0x92, 0x04, 0x06, 0x3d,
0xb4, 0x34, 0xa8, 0x26, 0x4e, 0x88, 0x94, 0xb8, 0x36, 0x44, 0x70, 0x54, 0x80, 0xe0, 0x48, 0x60,
0x38, 0xca, 0x78, 0xba, 0x80, 0xd1, 0x79, 0xc9, 0x3a, 0x48, 0xc9, 0xc7, 0xac, 0x1e, 0xb1, 0x85,
0xc0, 0xd6, 0x6b, 0xb1, 0x3b, 0x22, 0xf5, 0xec, 0x1b, 0x3d, 0xe3, 0xbe, 0x86, 0x39, 0x2b, 0xca,
0xba, 0x7b, 0x49, 0xa5, 0xb0, 0x46, 0x7f, 0x34, 0xc5, 0x96, 0x86, 0x1e, 0xfb, 0x0d, 0x9a, 0xae,
0xae, 0x69, 0xab, 0x87, 0xde, 0x82, 0xa2, 0xf5, 0x81, 0x2f, 0xf0, 0x79, 0xca, 0x22, 0xfa, 0x23,
0x6c, 0xff, 0x5d, 0x87, 0xdd, 0x06, 0x3c, 0x8a, 0x4f, 0xda, 0x2a, 0xb9, 0x29, 0x32, 0xdd, 0xb6,
0x3f, 0x68, 0xa8, 0x41, 0x92, 0x60, 0x36, 0x12, 0xac, 0x61, 0x19, 0x1e, 0xb7, 0x76, 0x53, 0xc7,
0x75, 0xd0, 0x04, 0x07, 0xc4, 0x35, 0xe7, 0x10, 0x18, 0x86, 0x6b, 0x1a, 0x32, 0x53, 0xf3, 0x11,
0x4c, 0xa0, 0xcb, 0xac, 0x22, 0xa8, 0x38, 0xc9, 0xb8, 0xd3, 0xb8, 0x3d, 0x77, 0x50, 0xd0, 0x39,
0x1b, 0xf3, 0x04, 0x8d, 0x08, 0xda, 0xbf, 0x29, 0xfa, 0x66, 0xfa, 0x00, 0x00, 0xa0, 0xbb, 0x56,
0xce, 0x1e, 0x83, 0x38, 0x54, 0xb2, 0xf2, 0x70, 0x69, 0xde, 0x52, 0x34, 0x3c, 0x74, 0xbe, 0x8c,
0xcd, 0x10, 0x85, 0x24, 0x44, 0x20, 0xde, 0xe3, 0x6b, 0x2f, 0x27, 0x12, 0x67, 0x92, 0x50, 0xb3,
0xe9, 0x3a, 0xe4, 0xe7, 0x3e, 0xb0, 0x4e, 0xdb, 0xb1, 0x68, 0x58, 0x3a, 0x3e, 0x63, 0xc3, 0x78,
0xf9, 0x85, 0x55, 0x42, 0x44, 0x94, 0x2f, 0x7c, 0x75, 0xe8, 0x70, 0x4f, 0x8d, 0x2c, 0x99, 0xbb,
0xfe, 0x94, 0x07, 0x34, 0x30, 0xc9, 0x6c, 0x96, 0x89, 0x02, 0x2a, 0xc5, 0xa4, 0x5d, 0xbc, 0x15,
0x6e, 0x7e, 0x53, 0xfe, 0xd3, 0xce, 0x27, 0xd8, 0xbb, 0xbf, 0xd8, 0xde, 0xff, 0xb5, 0x34, 0x57,
0x2b, 0xdc, 0x57, 0xb0, 0x17, 0xe9, 0x69, 0x0e, 0x89, 0x4b, 0xea, 0xdd, 0xcc, 0x98, 0xf4, 0x5c,
0x63, 0xf0, 0xc3, 0xfa, 0x15, 0x57, 0xf0, 0x73, 0x4a, 0xc2, 0x12, 0xd0, 0xd7, 0x2a, 0x58, 0x5c,
0xc5, 0x4f, 0x31, 0xc4, 0x47, 0x21, 0x9b, 0x0a, 0x56, 0x42, 0x1c, 0x2e, 0x84, 0x61, 0x62, 0x69,
0xa8, 0x80, 0x12, 0xd5, 0x6b, 0xc2, 0xca, 0x98, 0xcc, 0x23, 0xae, 0x5d, 0xf7, 0x68, 0xbd, 0xaa,
0x43, 0xbe, 0xe1, 0xed, 0x91, 0x80, 0xf3, 0x6b, 0x21, 0x01, 0xac, 0x80, 0x0b, 0xc2, 0x87, 0x47,
0xdb, 0xbe, 0x6b, 0x97, 0x54, 0xf4, 0xd3, 0xf6, 0x82, 0x9c, 0x71, 0xd5, 0x31, 0x62, 0xe2, 0x08,
0x21, 0x83, 0x25, 0x95, 0xc4, 0x9e, 0x22, 0xe6, 0xf3, 0xf1, 0xae, 0x33, 0x02, 0x86, 0xe7, 0x28,
0x3e, 0xd9, 0x6b, 0x75, 0x12, 0xc2, 0xc6, 0x39, 0x21, 0xdb, 0x3c, 0x34, 0xd8, 0xf0, 0xac, 0x90,
0xd6, 0x6e, 0x9e, 0x30, 0x14, 0xf4, 0x3a, 0x55, 0xc6, 0x60, 0xb2, 0x22, 0x4a, 0xec, 0xcd, 0x72,
0xff, 0xf6, 0x89, 0x5d, 0xa3, 0x75, 0x74, 0x4b, 0x1f, 0x77, 0xb5, 0x34, 0x42, 0xf0, 0x5b, 0x11,
0x50, 0xac, 0xcd, 0xbc, 0xbc, 0x3f, 0xb2, 0x89, 0xad, 0xae, 0x0c, 0x70, 0x0a, 0xdf, 0x77, 0xb4,
0x42, 0x55, 0x5a, 0x7b, 0x67, 0x05, 0xff, 0xdb, 0xd0, 0xf7, 0x01, 0x1d, 0x03, 0xaa, 0x63, 0x31,
0x21, 0xcb, 0x51, 0x8a, 0xc1, 0x7e, 0x93, 0x06, 0x27, 0x0c, 0x2a, 0x28, 0x67, 0x45, 0x07, 0x50,
0xb1, 0xa4, 0x3b, 0x60, 0xac, 0x2b, 0xf0, 0xe5, 0x05, 0x25, 0x75, 0x51, 0x51, 0x4f, 0xc5, 0xfc,
0x0d, 0x16, 0xd4, 0x59, 0xa9, 0xe2, 0x0d, 0x18, 0xd6, 0xb2, 0x7a, 0xfa, 0x19, 0x0b, 0x83, 0x41,
0x5c, 0xf8, 0x3e, 0x62, 0x24, 0xb9, 0x34, 0x1d, 0x2f, 0xb1, 0x6d, 0xf8, 0x93, 0x27, 0xfb, 0xcc,
0xc6, 0xe5, 0xe4, 0x6a, 0x23, 0x3d, 0x60, 0xfd, 0xef, 0xc5, 0xd1, 0x45, 0x52, 0x4d, 0xe8, 0x92,
0x4a, 0x4e, 0x38, 0xd9, 0xaf, 0x33, 0x09, 0x8c, 0xac, 0x9e, 0x4a, 0x4c, 0xcb, 0xa2, 0x2b, 0x88,
0x17, 0x6a, 0x0c, 0x5d, 0x49, 0x7e, 0x98, 0x51, 0xd5, 0x34, 0x57, 0x7c, 0x93, 0x29, 0x46, 0x4b,
0x75, 0x27, 0xe0, 0x18, 0x80, 0x11, 0x1f, 0xd9, 0xf3, 0x22, 0xad, 0x37, 0x49, 0x05, 0xf4, 0x70,
0x66, 0x14, 0xfe, 0x4c, 0x18, 0x63, 0xed, 0xcc, 0x04, 0xe3, 0x0c, 0x1f, 0x67, 0x01, 0x44, 0x13,
0x76, 0x1d, 0x22, 0x1f, 0x56, 0x28, 0x35, 0xa4, 0xbf, 0x60, 0xc7, 0xbd, 0x5b, 0x09, 0x95, 0x0e,
0xde, 0xfa, 0xfd, 0xba, 0xc9, 0x03, 0xd7, 0x31, 0x96, 0x5c, 0xfe, 0x2f, 0x7a, 0x38, 0xbe, 0xd8,
0x3e, 0xbb, 0xab, 0x64, 0xf4, 0x90, 0xf0, 0x7b, 0xa2, 0xbb, 0xad, 0xcc, 0xf8, 0x52, 0x8a, 0x33,
0xcb, 0x57, 0x49, 0x0a, 0xd6, 0x99, 0xde, 0x94, 0x1f, 0xbc, 0x6c, 0x39, 0x41, 0x0c, 0xae, 0xc4,
0x6f, 0xa4, 0x84, 0x2c, 0xaa, 0xba, 0xc1, 0x9a, 0x38, 0x73, 0xb2, 0x78, 0x0c, 0x3a, 0xc3, 0x94,
0x80, 0xa7, 0x09, 0x60, 0x15, 0x59, 0xdd, 0x70, 0x9f, 0x1c, 0x0d, 0x85, 0x18, 0x09, 0xac, 0x99,
0x74, 0x67, 0x23, 0xec, 0x1c, 0x41, 0xd8, 0x59, 0x29, 0x34, 0x92, 0xcb, 0xa2, 0x08, 0x34, 0x8d,
0x34, 0x65, 0xed, 0x08, 0x9e, 0x28, 0x71, 0x6a, 0x71, 0x26, 0x72, 0x40, 0x24, 0x2e, 0x91, 0x46,
0x41, 0xcb, 0x75, 0x49, 0xf2, 0xba, 0x3d, 0x83, 0x96, 0xcb, 0x54, 0x21, 0x6c, 0x9d, 0xfa, 0x3e,
0xc4, 0xfe, 0x1a, 0xa6, 0x84, 0x61, 0x1c, 0xc3, 0x86, 0xc9, 0xa4, 0xe8, 0x99, 0x3f, 0x98, 0xcb,
0xa5, 0x49, 0x2c, 0x3f, 0x08, 0x44, 0x3a, 0x88, 0x21, 0x04, 0x0f, 0x8c, 0xf6, 0xf0, 0xe8, 0x03,
0x04, 0xac, 0x44, 0x0e, 0xa3, 0xc0, 0x87, 0xa4, 0x07, 0xad, 0x48, 0x52, 0x72, 0x60, 0x13, 0x54,
0x4a, 0xb1, 0x17, 0x30, 0xb3, 0x64, 0x06, 0xac, 0xdf, 0x10, 0xd9, 0x83, 0x35, 0x6c, 0x62, 0x4f,
0x91, 0x33, 0x4b, 0xb5, 0xb1, 0x2b, 0x1f, 0x3e, 0x95, 0xb3, 0xac, 0xc2, 0x7e, 0x67, 0x0c, 0x9d,
0x1c, 0x0d, 0x80, 0x67, 0xb5, 0xce, 0x46, 0x77, 0x49, 0x13, 0xad, 0x05, 0x5d, 0x01, 0x5b, 0x6b,
0x99, 0x96, 0xc9, 0x34, 0x07, 0x1c, 0xa6, 0x99, 0x2f, 0xa8, 0x61, 0x94, 0xe1, 0x93, 0xd8, 0xae,
0xf7, 0x7b, 0xb6, 0x4b, 0xcf, 0xa5, 0x24, 0xa9, 0x44, 0xfc, 0x82, 0x62, 0x7c, 0x03, 0xc1, 0x68,
0xe8, 0x20, 0xab, 0xb8, 0x24, 0x8f, 0x02, 0x3f, 0x0c, 0x67, 0xa6, 0x4d, 0xf7, 0xb0, 0xea, 0xe6,
0x3d, 0x17, 0xd8, 0x4a, 0x8a, 0x80, 0xe0, 0xcf, 0xaf, 0x6d, 0x10, 0x77, 0xf3, 0xb6, 0x84, 0xb8,
0x07, 0x77, 0xbb, 0xd5, 0x07, 0x7f, 0x16, 0xb2, 0x42, 0x96, 0x21, 0xe2, 0x15, 0x85, 0x9d, 0x6b,
0xd3, 0xa5, 0x11, 0xb8, 0xd0, 0x28, 0x25, 0x73, 0x0f, 0x61, 0xd7, 0x82, 0x30, 0x4c, 0xa6, 0xc6,
0xa6, 0x67, 0x43, 0x98, 0x39, 0x7a, 0xb4, 0x5c, 0x8a, 0xe9, 0x51, 0x82, 0xae, 0x88, 0xd2, 0xeb,
0xfd, 0x6c, 0xac, 0x24, 0x7c, 0x1c, 0x90, 0x90, 0x5b, 0x06, 0xe0, 0x20, 0xe0, 0xb2, 0x89, 0x8b,
0x9b, 0xc4, 0x38, 0x18, 0xab, 0xf0, 0x5b, 0xf1, 0x93, 0x7a, 0x9b, 0xf3, 0x5c, 0xec, 0x53, 0x60,
0xbd, 0x58, 0x81, 0xe1, 0x1d, 0x63, 0x78, 0x8c, 0xff, 0x86, 0x99, 0xe0, 0x72, 0x4b, 0x71, 0x33,
0xdc, 0xaf, 0xc6, 0x95, 0x82, 0x89, 0x70, 0x12, 0xac, 0xef, 0x6e, 0xf6, 0x74, 0xdf, 0x7c, 0x2e,
0x8a, 0x71, 0x3e, 0x9b, 0x4e, 0xc4, 0x4a, 0x39, 0x60, 0x47, 0x2a, 0x3b, 0x02, 0x9c, 0xf7, 0x20,
0x52, 0x3b, 0x42, 0x1b, 0x7c, 0x4d, 0x58, 0x30, 0x9d, 0x00, 0x55, 0xb6, 0xc3, 0x9a, 0xc9, 0xda,
0x0b, 0x9c, 0xb0, 0x28, 0x2a, 0x00, 0xbe, 0xb3, 0x6b, 0x25, 0xf8, 0x7b, 0x53, 0x90, 0x1f, 0xa2,
0xff, 0x66, 0x9b, 0x51, 0xe1, 0x4f, 0x87, 0x26, 0xb8, 0x29, 0x8b, 0x66, 0x0c, 0xc3, 0xbe, 0x5e,
0xd2, 0xd1, 0xcd, 0x86, 0x5f, 0xbf, 0xc7, 0xa2, 0xe7, 0x07, 0x9e, 0x56, 0xf8, 0x22, 0xd2, 0x67,
0xd6, 0xa5, 0xa8, 0x5f, 0xb2, 0xb0, 0x3d, 0x32, 0x65, 0x5f, 0x25, 0x5b, 0xdf, 0x78, 0xbb, 0x27,
0x3a, 0xdc, 0x7f, 0x13, 0xa0, 0xb2, 0xa7, 0x8b, 0x12, 0x19, 0xbc, 0xa7, 0x8f, 0x12, 0xb9, 0x8b,
0x9d, 0x94, 0x95, 0x1d, 0xe1, 0x62, 0x61, 0x33, 0x25, 0xcb, 0xe6, 0x92, 0xc5, 0x03, 0xdb, 0xd2,
0x16, 0xd1, 0x8d, 0x20, 0x67, 0x8b, 0xc5, 0x63, 0xce, 0x61, 0x1c, 0x03, 0x89, 0x0d, 0x28, 0xf7,
0x1d, 0x64, 0xa2, 0x2e, 0x98, 0x5c, 0x48, 0xad, 0x36, 0x7d, 0xc1, 0xeb, 0x13, 0x82, 0xd1, 0x30,
0xab, 0x34, 0xbf, 0x64, 0xaa, 0x21, 0x67, 0xf6, 0x1d, 0x0a, 0x81, 0xcd, 0x04, 0x23, 0xb6, 0x04,
0x99, 0x09, 0x73, 0xdb, 0x75, 0x3d, 0x2c, 0x8c, 0xe8, 0x2f, 0xd8, 0xe5, 0x5f, 0x22, 0xdf, 0x07,
0xe6, 0x0a, 0x6b, 0x33, 0x4b, 0xff, 0x0e, 0x06, 0x2b, 0x3b, 0x36, 0x27, 0x1e, 0x61, 0xba, 0xf7,
0xe6, 0x63, 0x48, 0x70, 0xa0, 0x52, 0x2a, 0xe3, 0x8d, 0x14, 0xde, 0xc3, 0xde, 0xe7, 0x0d, 0xf0,
0xed, 0x3d, 0xab, 0xa0, 0x68, 0x14, 0x78, 0xac, 0xc2, 0x7d, 0x12, 0x16, 0x23, 0xe0, 0x0d, 0xc5,
0x58, 0xb0, 0xa4, 0xaf, 0xe4, 0x73, 0x6c, 0x92, 0xf4, 0x46, 0xc2, 0xe7, 0xf7, 0xe3, 0x2c, 0x9f,
0xdf, 0x5f, 0x4f, 0xb6, 0xa3, 0xa4, 0x24, 0x0d, 0x9e, 0xcd, 0xb1, 0xef, 0x11, 0x7f, 0x66, 0x94,
0x44, 0x74, 0xb9, 0x72, 0xb3, 0x13, 0x17, 0x47, 0xc0, 0x0d, 0xb0, 0x4d, 0x3f, 0x1c, 0x03, 0x27,
0x59, 0x6e, 0xdc, 0x4e, 0x90, 0x74, 0x1d, 0x34, 0x20, 0x3f, 0xab, 0xb0, 0x90, 0xa7, 0x38, 0xeb,
0x1d, 0xec, 0x39, 0xb4, 0xd9, 0x3e, 0x7f, 0xa9, 0xbc, 0xe6, 0x00, 0xa6, 0x8e, 0x67, 0x4a, 0x29,
0x1f, 0xf8, 0x6f, 0xa1, 0xc6, 0xb3, 0xd6, 0xf1, 0x34, 0x0a, 0x8f, 0xa6, 0xf0, 0x47, 0x96, 0xff,
0x17, 0x92, 0xaf, 0x38, 0x4b, 0x74, 0x59, 0x00, 0x00
};

File diff suppressed because it is too large Load Diff

View File

@ -338,7 +338,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId)
if (presetsModifiedTime == 0) presetsModifiedTime = timein;
}
doReboot = root[F("rb")] | doReboot;
if (root[F("psave")].isNull()) doReboot = root[F("rb")] | doReboot;
// do not allow changing main segment while in realtime mode (may get odd results else)
if (!realtimeMode) strip.setMainSegmentId(root[F("mainseg")] | strip.getMainSegmentId()); // must be before realtimeLock() if "live"

View File

@ -99,6 +99,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //refresh required
char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode
char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //channel swap
char sp[4] = "SP"; sp[2] = 48+s; sp[3] = 0; //bus clock speed (DotStar & PWM)
if (!request->hasArg(lp)) {
DEBUG_PRINT(F("No data for "));
DEBUG_PRINTLN(s);
@ -120,11 +121,33 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
break; // no parameter
}
awmode = request->arg(aw).toInt();
uint16_t freqHz = request->arg(sp).toInt();
if (type > TYPE_ONOFF && type < 49) {
switch (freqHz) {
case 0 : freqHz = WLED_PWM_FREQ/3; break;
case 1 : freqHz = WLED_PWM_FREQ/2; break;
default:
case 2 : freqHz = WLED_PWM_FREQ; break;
case 3 : freqHz = WLED_PWM_FREQ*2; break;
case 4 : freqHz = WLED_PWM_FREQ*3; break;
}
} else if (type > 48 && type < 64) {
switch (freqHz) {
default:
case 0 : freqHz = 1000; break;
case 1 : freqHz = 2000; break;
case 2 : freqHz = 5000; break;
case 3 : freqHz = 10000; break;
case 4 : freqHz = 20000; break;
}
} else {
freqHz = 0;
}
channelSwap = (type == TYPE_SK6812_RGBW || type == TYPE_TM1814) ? request->arg(wo).toInt() : 0;
// actual finalization is done in WLED::loop() (removing old busses and adding new)
// this may happen even before this loop is finished so we do "doInitBusses" after the loop
if (busConfigs[s] != nullptr) delete busConfigs[s];
busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode);
busConfigs[s] = new BusConfig(type, pins, start, length, colorOrder | (channelSwap<<4), request->hasArg(cv), skip, awmode, freqHz);
busesChanged = true;
}
//doInitBusses = busesChanged; // we will do that below to ensure all input data is processed

View File

@ -771,7 +771,7 @@ uint8_t realtimeBroadcast(uint8_t type, IPAddress client, uint16_t length, uint8
// write the colors, the write write(const uint8_t *buffer, size_t size)
// function is just a loop internally too
for (size_t i = 0; i < packetSize; i += 3) {
for (size_t i = 0; i < packetSize; i += (isRGBW?4:3)) {
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // R
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // G
ddpUdp.write(scale8(buffer[bufferOffset++], bri)); // B

View File

@ -505,6 +505,9 @@ void WLED::initAP(bool resetAP)
DEBUG_PRINTLN(apSSID);
WiFi.softAPConfig(IPAddress(4, 3, 2, 1), IPAddress(4, 3, 2, 1), IPAddress(255, 255, 255, 0));
WiFi.softAP(apSSID, apPass, apChannel, apHide);
#if defined(LOLIN_WIFI_FIX) && (defined(ARDUINO_ARCH_ESP32C3) || defined(ARDUINO_ARCH_ESP32S2))
WiFi.setTxPower(WIFI_POWER_8_5dBm);
#endif
if (!apActive) // start captive portal if AP active
{
@ -662,8 +665,10 @@ void WLED::initConnection()
#endif
WiFi.begin(clientSSID, clientPass);
#ifdef ARDUINO_ARCH_ESP32
#if defined(LOLIN_WIFI_FIX) && (defined(ARDUINO_ARCH_ESP32C3) || defined(ARDUINO_ARCH_ESP32S2))
WiFi.setTxPower(WIFI_POWER_8_5dBm);
#endif
WiFi.setSleep(!noWifiSleep);
WiFi.setHostname(hostname);
#else

View File

@ -8,7 +8,7 @@
*/
// version code in format yymmddb (b = daily build)
#define VERSION 2304090
#define VERSION 2304280
//uncomment this if you have a "my_config.h" file you'd like to use
//#define WLED_USE_MY_CONFIG

View File

@ -222,7 +222,7 @@ void initServer()
}
}
request->send(200, "application/json", F("{\"success\":true}"));
});
}, JSON_BUFFER_SIZE);
server.addHandler(handler);
server.on("/version", HTTP_GET, [](AsyncWebServerRequest *request){

View File

@ -398,6 +398,7 @@ void getSettingsJS(byte subPage, char* dest)
char rf[4] = "RF"; rf[2] = 48+s; rf[3] = 0; //off refresh
char aw[4] = "AW"; aw[2] = 48+s; aw[3] = 0; //auto white mode
char wo[4] = "WO"; wo[2] = 48+s; wo[3] = 0; //swap channels
char sp[4] = "SP"; sp[2] = 48+s; sp[3] = 0; //bus clock speed
oappend(SET_F("addLEDs(1);"));
uint8_t pins[5];
uint8_t nPins = bus->getPins(pins);
@ -414,6 +415,27 @@ void getSettingsJS(byte subPage, char* dest)
sappend('c',rf,bus->isOffRefreshRequired());
sappend('v',aw,bus->getAutoWhiteMode());
sappend('v',wo,bus->getColorOrder() >> 4);
uint16_t speed = bus->getFrequency();
if (bus->getType() > TYPE_ONOFF && bus->getType() < 48) {
switch (speed) {
case WLED_PWM_FREQ/3 : speed = 0; break;
case WLED_PWM_FREQ/2 : speed = 1; break;
default:
case WLED_PWM_FREQ : speed = 2; break;
case WLED_PWM_FREQ*2 : speed = 3; break;
case WLED_PWM_FREQ*3 : speed = 4; break;
}
} else {
switch (speed) {
case 1000 : speed = 0; break;
case 2000 : speed = 1; break;
default:
case 5000 : speed = 2; break;
case 10000 : speed = 3; break;
case 20000 : speed = 4; break;
}
}
sappend('v',sp,speed);
}
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
sappend('v',SET_F("LA"),strip.milliampsPerLed);