From 354dd9c38d9c0298b36ef3fdcbccaedcda5caa61 Mon Sep 17 00:00:00 2001 From: pictures2333 Date: Sun, 28 Dec 2025 03:04:27 +0800 Subject: [PATCH] feat(mesh): (broken) transfer message via mesh network --- main/CMakeLists.txt | 7 +- main/main.cpp | 224 +++++--- main/main.h | 27 +- main/main_epd.example.cpp | 167 ------ main/mesh_main.c | 11 +- main/mesh_msg.c | 186 +++++++ main/mesh_netif.h | 18 + main/note.txt | 4 +- main/processor.c | 68 +++ main/sha256/sha256.c | 24 + main/{tcphelper.h => sha256/sha256.h} | 7 +- main/tcphelper.c | 264 ---------- tcp_client.py | 76 --- tcp_client_image.py | 708 -------------------------- 14 files changed, 481 insertions(+), 1310 deletions(-) delete mode 100644 main/main_epd.example.cpp create mode 100644 main/mesh_msg.c create mode 100644 main/processor.c create mode 100644 main/sha256/sha256.c rename main/{tcphelper.h => sha256/sha256.h} (50%) delete mode 100644 main/tcphelper.c delete mode 100644 tcp_client.py delete mode 100644 tcp_client_image.py diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 1600a50..4370099 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -2,10 +2,11 @@ file(GLOB_RECURSE MY_LIB_SOURCES "ESP32epdx/src/*.cpp" "ESP32epdx/src/GUI/*.cpp" "pubsubclient/src/*.cpp", - "mpack/src/mpack/*.c" + "mpack/src/mpack/*.c", + "sha256/*.c" ) idf_component_register( - SRCS "main.cpp" "EPD.cpp" "mesh_main.c" "mesh_netif.c" "tcphelper.c" ${MY_LIB_SOURCES} - INCLUDE_DIRS "" "ESP32epdx/src" "ESP32epdx/src/GUI" "mpack/src/mpack" + SRCS "processor.c" "main.cpp" "EPD.cpp" "mesh_main.c" "mesh_netif.c" "mesh_msg.c" ${MY_LIB_SOURCES} + INCLUDE_DIRS "" "ESP32epdx/src" "ESP32epdx/src/GUI" "mpack/src/mpack" "sha256" ) diff --git a/main/main.cpp b/main/main.cpp index 3610c96..9b54c2c 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -8,9 +8,11 @@ #include "ESP32epdx.h" #include "EPD.h" #include "mesh_netif.h" -#include "tcphelper.h" +#include "esp_mesh.h" #include "main.h" +#include "sha256.h" + std::mutex epd_mtx; /* @@ -20,71 +22,25 @@ EPD: RES = 22 ; DC = 23 ; CS = 1 ; BUSY = 0 uint8_t *image_buf = nullptr; -typedef struct request_t { - // command : update_image, push_image, ping - char *command; +#if CONFIG_MESH_ROOT == 0 +extern "C" void req_release(request_t *req) { + free(req->command); + req->command = 0; + free(req->data); + req->data = 0; - // arguments for update_image - uint64_t index; - char *data; - size_t data_len; -} request_t; + free(req); - -extern "C" request_t* parse_data(char *buf, size_t len) { - // variables - char *command = NULL; - uint64_t index = 0; - char *data = NULL; - size_t data_len = 0; - - // init reader - mpack_reader_t reader; - mpack_reader_init_data(&reader, buf, len); - - size_t count = mpack_expect_map_max(&reader, 100); - if (mpack_reader_error(&reader) != mpack_ok) { - return NULL; - } - - // read data - for (size_t i = 0; i < count; i++) { - char *key = mpack_expect_cstr_alloc(&reader, 100); - - if (strcmp(key, "command") == 0) { - command = mpack_expect_cstr_alloc(&reader, 32); - } else if (strcmp(key, "index") == 0) { - index = mpack_expect_u64(&reader); - } else if (strcmp(key, "data") == 0) { - data = mpack_expect_bin_alloc(&reader, CONFIG_IMAGE_BUF_SLICE_SIZE, &data_len); - } else { - mpack_discard(&reader); - } - - free(key); - } - - // finish - mpack_done_map(&reader); - if (mpack_reader_destroy(&reader) != mpack_ok) { - return NULL; - } - - // return - request_t *result = (request_t *)malloc(sizeof(request_t)); - if (!result) { - return NULL; - } - memset(result, 0, sizeof(request_t)); - result->command = command; - result->index = index; - result->data = data; - result->data_len = data_len; - - return result; + return; } extern "C" int command_update_image(uint64_t index, char *buf, size_t len) { + // check + if (!buf) { + return -2; + } + + // main if (!epd_mtx.try_lock()) { return -3; // locked } @@ -106,6 +62,11 @@ extern "C" int command_update_image(uint64_t index, char *buf, size_t len) { } extern "C" int command_push_image() { +#if DEBUG == 1 + printf("sha256 of image_buf: "); + show_sha256((char *)image_buf, CONFIG_IMAGE_BUF_SIZE); +#endif + if (epd_mtx.try_lock()) { EPD_HW_Init_Fast(); EPD_Display((unsigned char *)(image_buf)); @@ -118,30 +79,139 @@ extern "C" int command_push_image() { } } -extern "C" int tcp_client_callback(char *buf, size_t len) { - request_t *req = parse_data(buf, len); +extern "C" int mesh_client_callback(char *buf, size_t len) { + request_t *req = client_parse_data(buf, len); if (!req) { // error -> invalid data return -2; } + int ret = 0; + // execute command if (strcmp(req->command, "ping") == 0) { - return 0; + goto mesh_client_callback_ret; } else if (strcmp(req->command, "update_image") == 0) { - return command_update_image(req->index, req->data, req->data_len); + ret = command_update_image(req->index, req->data, req->data_len); + goto mesh_client_callback_ret; } else if (strcmp(req->command, "push_image") == 0) { - return command_push_image(); + ret = command_push_image(); + goto mesh_client_callback_ret; } else { - return -2; + ret = -2; + goto mesh_client_callback_ret; } + +mesh_client_callback_ret: + req_release(req); + return ret; } +#else // root -> 送測試資料 +#define PAYLOAD_SIZE 1024 +#include "IMAGE.h" +void mesh_server_send_test_data() { + /* + mpack_writer_t *writer = (mpack_writer_t *)malloc(sizeof(mpack_writer_t)); + char *payload = (char *)malloc(PAYLOAD_SIZE); + if (!writer || !payload) { + printf("failed to allocate memory\n"); + return; + } + + const unsigned char *image_start = &gImage_1[0]; + const unsigned char *image_end = image_start + sizeof(gImage_1); + + printf("sha256 of gImage_1: "); + show_sha256((char *)image_start, sizeof(gImage_1)); + + uint32_t counter = 0; + for (const unsigned char *image = image_start; image < image_end; image += 950) { + vTaskDelay(2000 / portTICK_PERIOD_MS); + + memset(writer, 0, sizeof(mpack_writer_t)); + memset(payload, 0, PAYLOAD_SIZE); + + mpack_writer_init(writer, payload, PAYLOAD_SIZE); + mpack_start_map(writer, 3); + + mpack_write_cstr(writer,"command"); + mpack_write_cstr(writer,"update_image"); + mpack_write_cstr(writer,"index"); + printf("index -> %d\n", image - image_start); + mpack_write_u64(writer, image - image_start); + + //mpack_write_cstr(writer,"data"); + //size_t count = 950; + //if (image + 950 > image_end) + // count = image_end - image; + //mpack_start_bin(writer, count); + //mpack_write_bin(writer, (const char *)image, count); + //mpack_finish_bin(writer); + + char testdata[64]; + memset(testdata, 0, sizeof(testdata)); + snprintf(testdata, sizeof(testdata), "Hello, World! -> %lu", counter++); + mpack_start_bin(writer, sizeof(testdata)); + mpack_write_bin(writer, testdata, sizeof(testdata)); + mpack_finish_bin(writer); + + mpack_finish_map(writer); + + if (mpack_writer_destroy(writer) != mpack_ok) { + printf("error!\n"); + continue; + } + + //fwrite("payload: ", 1, 9, stdout); + //fwrite(payload, 1, PAYLOAD_SIZE, stdout); + //fwrite("\n", 1, 1, stdout); + + esp_err_t err = esp_mesh_boardcast_to_nodes((uint8_t *)payload, PAYLOAD_SIZE); + printf("mesh_server_send_test_data result -> %d\n", err); + } + + + vTaskDelay(1500 / portTICK_PERIOD_MS); + + memset(writer, 0, sizeof(mpack_writer_t)); + memset(payload, 0, PAYLOAD_SIZE); + + mpack_writer_init(writer, payload, PAYLOAD_SIZE); + mpack_start_map(writer, 1); + mpack_write_cstr(writer,"command"); + mpack_write_cstr(writer,"push_image"); + mpack_finish_map(writer); + + if (mpack_writer_destroy(writer) != mpack_ok) { + printf("error!\n"); + } else { + esp_err_t err = esp_mesh_boardcast_to_nodes((uint8_t *)payload, PAYLOAD_SIZE); + printf("mesh_server_send_test_data result -> %d\n", err); + } + + free(writer); + free(payload); + */ + + char payload[64] = {0}; + + for (int i = 0; i < 6; i++) { + memset(payload, 0, sizeof(payload)); + snprintf(payload, sizeof(payload), "Hello, World! -> %d", i); + esp_err_t err = esp_mesh_boardcast_to_nodes((uint8_t *)payload, sizeof(payload)); + printf("[i=%d] result -> %d\n", i, err); + vTaskDelay(1000 / portTICK_PERIOD_MS); + } + + return; +} +#endif extern "C" void app_main() { initArduino(); @@ -164,18 +234,26 @@ extern "C" void app_main() { // Initialize EPD EPD_Pin_Init(6, 2, 7, 16, 22, 23, 1, 0); - + + // start mesh network mesh_main(); - - // tcp client - tcp_client_initialize(); + xTaskCreate(esp_mesh_p2p_rx_main, "MPRX", 3072, NULL, 5, NULL); // Arduino-like setup() // Arduino-like loop() + int32_t counter = 6; while (true) - { - vTaskDelay(500); + { +#if CONFIG_MESH_ROOT == 1 + printf("counter -> %ld\n", counter); + if (counter == 0) + mesh_server_send_test_data(); + if (counter >= 0) + counter--; +#endif + printf("Am I root? -> %d\n", esp_mesh_is_root()); + vTaskDelay(5 * 1000 / portTICK_PERIOD_MS); } // WARNING: if program reaches end of function app_main() the MCU will restart. diff --git a/main/main.h b/main/main.h index 583ac84..bef53d1 100644 --- a/main/main.h +++ b/main/main.h @@ -1,6 +1,4 @@ -#ifndef MAIN_H -#define MAIN_H - +#pragma once #include /******************************************************* @@ -22,10 +20,9 @@ static const uint8_t MESH_ID[6] = { 0x77, 0x77, 0x77, 0x77, 0x77, 0x76 }; #define CONFIG_MESH_AP_CONNECTIONS 6 // number of nodes #define CONFIG_MESH_NON_MESH_AP_CONNECTIONS 0 // number of non-node devices -#define CONFIG_TCP_DEBUG 0 -#define CONFIG_TCP_SERVER_PORT "3030" -#define CONFIG_TCP_RXBUFFER_SIZE 4096 // tcp raw data max size -#define CONFIG_IMAGE_BUF_SLICE_SIZE 2048 // map["data"] max size +#define DEBUG 1 +#define CONFIG_MESH_ROOT 1 +#define CONFIG_IMAGE_BUF_SLICE_SIZE 950 // map["data"] max size #define CONFIG_IMAGE_BUF_SIZE 5624 /******************************************************* @@ -36,10 +33,20 @@ static const uint8_t MESH_ID[6] = { 0x77, 0x77, 0x77, 0x77, 0x77, 0x76 }; extern "C" { #endif -int tcp_client_callback(char *buf, size_t len); +typedef struct request_t { + // command : update_image, push_image, ping + char *command; + + // arguments for update_image + uint64_t index; + char *data; + size_t data_len; +} request_t; + +request_t *client_parse_data(char *buf, size_t len); + +int mesh_client_callback(char *buf, size_t len); #ifdef __cplusplus } -#endif - #endif \ No newline at end of file diff --git a/main/main_epd.example.cpp b/main/main_epd.example.cpp deleted file mode 100644 index 82c5833..0000000 --- a/main/main_epd.example.cpp +++ /dev/null @@ -1,167 +0,0 @@ -#include //E-paper SPI etc -//EPD -#include"EPD.h" //E-paper driver -#include"IMAGE.h" //E-paper image data - -/* -SPI: SCK = 6 ; MISO = 2 ; MOSI = 7 ; SS = 16 -EPD: RES = 22 ; DC = 23 ; CS = 1 ; BUSY = 0 -*/ - -unsigned char ImageBW[EPD_ARRAY]; //Define canvas space -void setup() -{ - Serial.begin(115200); - EPD_Pin_Init(6, 2, 7, 16, - 22, 23, 1, 0); -} - -//Tips// -/* -1.Flickering is normal when EPD is performing a full screen update to clear ghosting from the previous image so to ensure better clarity and legibility for the new image. -2.There will be no flicker when EPD performs a partial update. -3.Please make sue that EPD enters sleep mode when update is completed and always leave the sleep mode command. Otherwise, this may result in a reduced lifespan of EPD. -4.Please refrain from inserting EPD to the FPC socket or unplugging it when the MCU is being powered to prevent potential damage.) -5.Re-initialization is required for every full screen update. -6.When porting the program, set the BUSY pin to input mode and other pins to output mode. -*/ -void loop() { - unsigned char i; - - #if 0 //Full screen update, fast update, and partial update demostration. - EPD_HW_Init(); //Full screen update initialization. - EPD_WhiteScreen_White(); //Clear screen function. - EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen. - delay(2000); //Delay for 2s. - /************Full display(2s)*******************/ - EPD_HW_Init(); //Full screen update initialization. - EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update. - EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen. - delay(2000); //Delay for 2s. - /************Fast update mode(1.5s)*******************/ - EPD_HW_Init_Fast(); //Fast update initialization. - EPD_WhiteScreen_ALL_Fast(gImage_2); //To display the second image using fast update. - EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen. - delay(2000); //Delay for 2s. - - /************4 Gray update mode*******************/ - #if 1 //To enable this feature, please change 0 to 1 - EPD_HW_Init_4G(); //4 Gray update initialization. - EPD_WhiteScreen_ALL_4G(gImage_4G1); //To display one image using fast update. - EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen. - delay(2000); //Delay for 2s. - #endif - - #if 1 //Partial update demostration. - //Partial update demo support displaying a clock at 5 locations with 00:00. If you need to perform partial update more than 5 locations, please use the feature of using partial update at the full screen demo. - //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates. - //////////////////////Partial update time demo///////////////////////////////////// - EPD_HW_Init(); //Electronic paper initialization. - EPD_SetRAMValue_BaseMap(gImage_basemap); //Please do not delete the background color function, otherwise it will cause unstable display during partial update. - for(i=0;i<6;i++) - EPD_Dis_Part_Time(48,92+32*0,Num[i], //x-A,y-A,DATA-A - 48,92+32*1,Num[0], //x-B,y-B,DATA-B - 48,92+32*2,gImage_numdot, //x-C,y-C,DATA-C - 48,92+32*3,Num[0], //x-D,y-D,DATA-D - 48,92+32*4,Num[1],32,64); //x-E,y-E,DATA-E,Resolution 32*64 - - EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen. - delay(2000); //Delay for 2s. - #endif - - #if 1 //Demo of using partial update to update the full screen, to enable this feature, please change 0 to 1. - //After 5 partial updates, implement a full screen update to clear the ghosting caused by partial updates. - //////////////////////Partial update time demo///////////////////////////////////// - EPD_HW_Init(); //E-paper initialization - EPD_SetRAMValue_BaseMap(gImage_p1); //Please do not delete the background color function, otherwise it will cause an unstable display during partial update. - EPD_Dis_PartAll(gImage_p1); //Image 1 - EPD_Dis_PartAll(gImage_p2); //Image 2 - EPD_Dis_PartAll(gImage_p3); //Image 3 - EPD_Dis_PartAll(gImage_p4); //Image 4 - EPD_Dis_PartAll(gImage_p5); //Image 5 - EPD_DeepSleep();//Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen. - delay(2000); //Delay for 2s. - - #endif - #if 1 //Demonstration of full screen update with 180-degree rotation, to enable this feature, please change 0 to 1. - /************Full display(2s)*******************/ - EPD_HW_Init_180(); //Full screen update initialization. - EPD_WhiteScreen_ALL(gImage_1); //To Display one image using full screen update. - EPD_DeepSleep(); //Enter the sleep mode and please do not delete it, otherwise it will reduce the lifespan of the screen. - delay(2000);//Delay for 2s. - #endif -#endif - - -#if 0 //GUI demostration. -///////////////////////////GUI/////////////////////////////////////////////////////////////////////////////////// - //Data initialization settings - Paint_NewImage(ImageBW, EPD_WIDTH, EPD_HEIGHT, 270, WHITE); //Set screen size and display orientation - /**************Drawing**********************/ - Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location - Paint_Clear(WHITE); - //Point. - Paint_DrawPoint(5, 10, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); //point 1x1. - Paint_DrawPoint(5, 25, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); //point 2x2. - Paint_DrawPoint(5, 40, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); //point 3x3. - Paint_DrawPoint(5, 55, BLACK, DOT_PIXEL_4X4, DOT_STYLE_DFT); //point 4x4. - //Line. - Paint_DrawLine(20, 5, 50, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 1. - Paint_DrawLine(50, 5, 20, 35, BLACK, LINE_STYLE_SOLID, DOT_PIXEL_1X1); //1x1line 2. - //Rectangle. - Paint_DrawRectangle(20, 5, 50, 35, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow rectangle 1. - Paint_DrawRectangle(70, 5, 100, 35, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //Hollow rectangle 2. - //Circle. - Paint_DrawCircle(30, 50, 10, BLACK, DRAW_FILL_EMPTY, DOT_PIXEL_1X1); //Hollow circle. - Paint_DrawCircle(80, 50, 10, BLACK, DRAW_FILL_FULL, DOT_PIXEL_1X1); //solid circle. - EPD_HW_Init_GUI(); //EPD init GUI - EPD_Display(ImageBW);//display image - EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!! - delay(2000); //2s - - /***********String&Number***************************/ - Paint_SelectImage(ImageBW);//Set the virtual canvas data storage location - Paint_Clear(WHITE); - Paint_DrawString_EN(0, 0, "Good Display", &Font8, BLACK, WHITE); //Font8 - Paint_DrawString_EN(0, 10, "Good Display", &Font12, BLACK, WHITE); //Font12 - Paint_DrawString_EN(0, 25, "Good Display", &Font16, BLACK, WHITE); //Font16 - Paint_DrawString_EN(0, 45, "Good Display", &Font20, BLACK, WHITE); //Font20 - Paint_DrawNum(0, 70, 123456789, &Font8, BLACK, WHITE); //Font8 - Paint_DrawNum(0, 80, 123456789, &Font12, BLACK, WHITE); //Font12 - Paint_DrawNum(0, 95, 123456789, &Font16, BLACK, WHITE); //Font16 - Paint_DrawNum(0, 115, 123456789, &Font20, BLACK, WHITE); //Font20 - EPD_HW_Init_GUI(); //EPD init GUI - EPD_Display(ImageBW); //display image - EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!! - delay(2000); //2s -#endif - ////Clear - //EPD_HW_Init(); //EPD init - //EPD_WhiteScreen_White();//EPD Clear - //EPD_DeepSleep();//EPD_DeepSleep,Sleep instruction is necessary, please do not delete!!! - //delay(2000); //2s - - Serial.printf("Init\n"); - EPD_HW_Init_Fast(); - //EPD_WhiteScreen_White(); - //EPD_WhiteScreen_ALL_Fast(gImage_1); - Serial.printf("Display Image 1\n"); - EPD_Display((unsigned char *)gImage_1); - EPD_DeepSleep(); - - delay(2000); - - EPD_HW_Init_Fast(); - //EPD_WhiteScreen_White(); - //EPD_WhiteScreen_ALL_Fast(gImage_2); - Serial.printf("Display Image 2\n"); - EPD_Display((unsigned char *)gImage_2); - EPD_DeepSleep(); - - while (1) - { - Serial.println("fin"); - delay(1000); - } - //while(1); // The program stops here -} \ No newline at end of file diff --git a/main/mesh_main.c b/main/mesh_main.c index 84a47e7..a1bcce5 100644 --- a/main/mesh_main.c +++ b/main/mesh_main.c @@ -19,7 +19,7 @@ #include "freertos/semphr.h" #include "main.h" -#include "tcphelper.h" +//#include "tcphelper.h" /******************************************************* * Macros @@ -35,7 +35,7 @@ /******************************************************* * Constants *******************************************************/ -static const char *MESH_TAG = "mesh_main"; +const char *MESH_TAG = "mesh_main"; /******************************************************* * Variable Definitions @@ -306,9 +306,6 @@ void ip_event_handler(void *arg, esp_event_base_t event_base, ESP_ERROR_CHECK(esp_netif_get_dns_info(netif, ESP_NETIF_DNS_MAIN, &dns)); mesh_netif_start_root_ap(esp_mesh_is_root(), dns.ip.u_addr.ip4.addr); //#endif - - // tcp client - start_tcp_client(); } @@ -352,8 +349,12 @@ void mesh_main(void) cfg.channel = CONFIG_MESH_CHANNEL; cfg.router.ssid_len = strlen(CONFIG_MESH_ROUTER_SSID); memcpy((uint8_t *) &cfg.router.ssid, CONFIG_MESH_ROUTER_SSID, cfg.router.ssid_len); + #if CONFIG_MESH_ROOT == 0 + memset((uint8_t *)&cfg.router.password, 0, 64); + #else memcpy((uint8_t *) &cfg.router.password, CONFIG_MESH_ROUTER_PASSWD, strlen(CONFIG_MESH_ROUTER_PASSWD)); + #endif /* mesh softAP */ ESP_ERROR_CHECK(esp_mesh_set_ap_authmode(CONFIG_MESH_AP_AUTHMODE)); diff --git a/main/mesh_msg.c b/main/mesh_msg.c new file mode 100644 index 0000000..ba99347 --- /dev/null +++ b/main/mesh_msg.c @@ -0,0 +1,186 @@ +/* Mesh Internal Communication Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ +#include +#include +#include "esp_wifi.h" +#include "esp_mac.h" +#include "esp_event.h" +#include "esp_log.h" +#include "esp_mesh.h" +#include "esp_mesh_internal.h" +#include "nvs_flash.h" + +#include "mesh_netif.h" +#include "main.h" + +/******************************************************* + * Macros + *******************************************************/ + +/******************************************************* + * Constants + *******************************************************/ +#define RX_SIZE (1500) +#define TX_SIZE (1460) + +/******************************************************* + * Variable Definitions + *******************************************************/ +static uint8_t tx_buf[TX_SIZE] = { 0, }; +static uint8_t rx_buf[RX_SIZE] = { 0, }; +static bool is_running = true; +static bool is_mesh_connected = false; +static mesh_addr_t mesh_parent_addr; +static int mesh_layer = -1; +static esp_netif_t *netif_sta = NULL; + +//mesh_light_ctl_t light_on = { +// .cmd = MESH_CONTROL_CMD, +// .on = 1, +// .token_id = MESH_TOKEN_ID, +// .token_value = MESH_TOKEN_VALUE, +//}; +// +//mesh_light_ctl_t light_off = { +// .cmd = MESH_CONTROL_CMD, +// .on = 0, +// .token_id = MESH_TOKEN_ID, +// .token_value = MESH_TOKEN_VALUE, +//}; + +/******************************************************* + * Function Declarations + *******************************************************/ + +/******************************************************* + * Function Definitions + *******************************************************/ +#if CONFIG_MESH_ROOT == 1 +esp_err_t esp_mesh_boardcast_to_nodes(uint8_t *payload, uint16_t payload_len) +{ + int i; + esp_err_t err; + mesh_addr_t route_table[CONFIG_MESH_ROUTE_TABLE_SIZE]; + int route_table_size = 0; + mesh_data_t data; + data.data = payload; + data.size = payload_len; + data.proto = MESH_PROTO_BIN; + data.tos = MESH_TOS_P2P; + + esp_mesh_get_routing_table((mesh_addr_t *) &route_table, + CONFIG_MESH_ROUTE_TABLE_SIZE * 6, &route_table_size); + + printf("route table size -> %d\n", route_table_size); + for (i = 0; i < route_table_size; i++) { + err = esp_mesh_send(&route_table[i], &data, MESH_DATA_P2P, NULL, 0); + if (err) { + ESP_LOGE(MESH_TAG, + "[ROOT-2-UNICAST][L:%d]parent:"MACSTR" to "MACSTR", heap:%" PRId32 "[err:0x%x, proto:%d, tos:%d]", + mesh_layer, MAC2STR(mesh_parent_addr.addr), + MAC2STR(route_table[i].addr), esp_get_minimum_free_heap_size(), + err, data.proto, data.tos); + return err; + } + } + return ESP_OK; +} +#else +esp_err_t esp_mesh_send_to_root(uint8_t *payload, uint16_t payload_len) +{ + esp_err_t err; + mesh_data_t data; + data.data = payload; + data.size = payload_len; + data.proto = MESH_PROTO_BIN; + data.tos = MESH_TOS_P2P; + + err = esp_mesh_send(NULL, &data, MESH_DATA_P2P, NULL, 0); + if (err) { + //ESP_LOGE(MESH_TAG, + // "[ROOT-2-UNICAST][L:%d]parent:"MACSTR" to "MACSTR", heap:%" PRId32 "[err:0x%x, proto:%d, tos:%d]", + // mesh_layer, MAC2STR(mesh_parent_addr.addr), + // MAC2STR(route_table[i].addr), esp_get_minimum_free_heap_size(), + // err, data.proto, data.tos); + ESP_LOGE(MESH_TAG, "Error while sending message to root, heap:%" PRId32 "[err:0x%x, proto:%d, tos:%d]", + esp_get_minimum_free_heap_size(), err, + data.proto, data.tos); + return err; + } + + return ESP_OK; +} +#endif + +void esp_mesh_p2p_rx_main(void *arg) +{ + esp_err_t err; + mesh_addr_t from; + mesh_data_t data; + int flag = 0; + data.data = rx_buf; + data.size = RX_SIZE; + is_running = true; + + while (is_running) { + data.size = RX_SIZE; + memset(rx_buf, 0, sizeof(rx_buf)); + err = esp_mesh_recv(&from, &data, portMAX_DELAY, &flag, NULL, 0); + if (err != ESP_OK || !data.size) { + ESP_LOGE(MESH_TAG, "err:0x%x, size:%d", err, data.size); + continue; + } + //if (data.size > sizeof(packet_t)) { + // ESP_LOGE(MESH_TAG, "err:data.size > sizeof(packet_t), size:%d", data.size); + // continue; + //} + // extract data and process + //packet_t *packet = calloc(1, sizeof(packet_t)); + //if (!packet) { + // ESP_LOGE(MESH_TAG, "failed to allocate memory"); + // continue; + //} + //memcpy(packet, data.data, data.size); +#if CONFIG_MESH_ROOT == 1 + printf("[root] received:%s\n", data.data); +#else + printf("recvived aaa\n"); + printf("[root] received:%s\n", data.data); + char result_str[128] = {0}; + int result = mesh_client_callback((char *)data.data, data.size); + switch (result) { + case 0: + strcpy(result_str, "ok\n"); + break; + case -2: + strcpy(result_str, "invalid request\n"); + break; + case -3: + strcpy(result_str, "locked\n"); + break; + default: + strcpy(result_str, "unknown error\n"); + break; + } + printf("returned -> %s\n", result_str); + esp_mesh_send_to_root((uint8_t *)result_str, strlen(result_str)+1); +#endif + //free(packet); + //packet = NULL; + + // log + ESP_LOGW(MESH_TAG, + "[#RX][L:%d] parent:"MACSTR", receive from "MACSTR", size:%d, heap:%" PRId32 ", flag:%d[err:0x%x, proto:%d, tos:%d]", + mesh_layer, + MAC2STR(mesh_parent_addr.addr), MAC2STR(from.addr), + data.size, esp_get_minimum_free_heap_size(), flag, err, data.proto, + data.tos); + } + vTaskDelete(NULL); +} \ No newline at end of file diff --git a/main/mesh_netif.h b/main/mesh_netif.h index aee06a7..e9d684a 100644 --- a/main/mesh_netif.h +++ b/main/mesh_netif.h @@ -13,6 +13,10 @@ #include "esp_mesh.h" #include "esp_mac.h" +#include "main.h" + +extern const char *MESH_TAG; + /******************************************************* * Macros *******************************************************/ @@ -90,6 +94,20 @@ uint8_t* mesh_netif_get_station_mac(void); // mesh main function void mesh_main(void); +// mesh_msg.c +void esp_mesh_p2p_rx_main(void *arg); + +#if CONFIG_MESH_ROOT == 1 +esp_err_t esp_mesh_boardcast_to_nodes(uint8_t *payload, uint16_t payload_len); +#else + +#endif + +typedef struct packet_t { + uint32_t packet_id; + uint8_t data[1024]; +} packet_t; + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/main/note.txt b/main/note.txt index f6385e0..c1742b2 100644 --- a/main/note.txt +++ b/main/note.txt @@ -1 +1,3 @@ -must enable "use external log wrapper" \ No newline at end of file +must enable "use external log wrapper" + +我是寫 client 的,所以我這裡的「模擬 master」採用直接 unicast 的方式 \ No newline at end of file diff --git a/main/processor.c b/main/processor.c new file mode 100644 index 0000000..996618d --- /dev/null +++ b/main/processor.c @@ -0,0 +1,68 @@ +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + +#include +#include + +#include "mpack/src/mpack/mpack.h" + +#include "main.h" + +request_t *client_parse_data(char *buf, size_t len) { + mpack_reader_t reader; + + // initialize + mpack_reader_init_data(&reader, buf, len); + if (mpack_reader_error(&reader) != mpack_ok) { + goto parse_data_finish; + } + + size_t count = mpack_expect_map_max(&reader, 100); + if (mpack_reader_error(&reader) != mpack_ok) { + goto parse_data_finish; + } + + // variables + char *command = NULL; + uint64_t index = 0; + char *data = NULL; + size_t data_len = 0; + + // read data + for (size_t i = 0; i < count; i++) { + char key[32] = {0}; + mpack_expect_cstr(&reader, key, sizeof(key)); + if (mpack_reader_error(&reader) != mpack_ok) { + goto parse_data_finish; + } + + if (strcmp(key, "command") == 0) { + command = mpack_expect_cstr_alloc(&reader, 32); + } else if (strcmp(key, "index") == 0) { + index = mpack_expect_u64(&reader); + } else if (strcmp(key, "data") == 0) { + mpack_expect_bin(&reader); + data = mpack_expect_bin_alloc(&reader, CONFIG_IMAGE_BUF_SLICE_SIZE, &data_len); + } else { + mpack_discard(&reader); + } + } + +parse_data_finish: + if (mpack_reader_destroy(&reader) != mpack_ok) + return NULL; + + if (!command) + return NULL; + + request_t *req = malloc(sizeof(request_t)); + if (!req) + return NULL; + memset(req, 0, sizeof(request_t)); + + req->command = command; + req->index = index; + req->data = data; + req->data_len = data_len; + + return req; +} \ No newline at end of file diff --git a/main/sha256/sha256.c b/main/sha256/sha256.c new file mode 100644 index 0000000..0042864 --- /dev/null +++ b/main/sha256/sha256.c @@ -0,0 +1,24 @@ +#include +#include + +#include + +void show_sha256(char *buf, size_t len) { + uint8_t output[32]; + memset(output, 0, sizeof(output)); + + mbedtls_md_context_t ctx; + mbedtls_md_init(&ctx); + mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 0); + mbedtls_md_starts(&ctx); + mbedtls_md_update(&ctx, (const unsigned char *)buf, len); + mbedtls_md_finish(&ctx, output); + mbedtls_md_free(&ctx); + + for (int i = 0; i < sizeof(output); i++) { + printf("%02x", output[i]); + } + printf("\n"); + + return; +} \ No newline at end of file diff --git a/main/tcphelper.h b/main/sha256/sha256.h similarity index 50% rename from main/tcphelper.h rename to main/sha256/sha256.h index e5455a4..ce46faf 100644 --- a/main/tcphelper.h +++ b/main/sha256/sha256.h @@ -1,12 +1,13 @@ #pragma once +#include +#include + #ifdef __cplusplus extern "C" { #endif -// functions -void tcp_client_initialize(void); -void start_tcp_client(void); +void show_sha256(char *buf, size_t len); #ifdef __cplusplus } diff --git a/main/tcphelper.c b/main/tcphelper.c deleted file mode 100644 index 3d7c130..0000000 --- a/main/tcphelper.c +++ /dev/null @@ -1,264 +0,0 @@ -/* BSD non-blocking socket example - - This example code is in the Public Domain (or CC0 licensed, at your option.) - - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ -#include -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "sys/socket.h" -#include "netdb.h" -#include "errno.h" -#include "esp_system.h" -#include "esp_event.h" -#include "esp_log.h" -#include "nvs_flash.h" -#include "esp_wifi.h" - -#include "main.h" -#include "mesh_netif.h" - -/** - * @brief Indicates that the file descriptor represents an invalid (uninitialized or closed) socket - * - * Used in the TCP server structure `sock[]` which holds list of active clients we serve. - */ -#define INVALID_SOCK (-1) - -/** - * @brief Time in ms to yield to all tasks when a non-blocking socket would block - * - * Non-blocking socket operations are typically executed in a separate task validating - * the socket status. Whenever the socket returns `EAGAIN` (idle status, i.e. would block) - * we have to yield to all tasks to prevent lower priority tasks from starving. - */ -#define YIELD_TO_ALL_MS 50 - -/** - * @brief Utility to log socket errors - * - * @param[in] tag Logging tag - * @param[in] sock Socket number - * @param[in] err Socket errno - * @param[in] message Message to print - */ -static void log_socket_error(const char *tag, const int sock, const int err, const char *message) -{ - ESP_LOGE(tag, "[sock=%d]: %s\n" - "error=%d: %s", sock, message, err, strerror(err)); -} - -/** - * @brief Tries to receive data from specified sockets in a non-blocking way, - * i.e. returns immediately if no data. - * - * @param[in] tag Logging tag - * @param[in] sock Socket for reception - * @param[out] data Data pointer to write the received data - * @param[in] max_len Maximum size of the allocated space for receiving data - * @return - * >0 : Size of received data - * =0 : No data available - * -1 : Error occurred during socket read operation - * -2 : Socket is not connected, to distinguish between an actual socket error and active disconnection - */ -static int try_receive(const char *tag, const int sock, char * data, size_t max_len) -{ - int len = recv(sock, data, max_len, 0); - if (len < 0) { - if (errno == EINPROGRESS || errno == EAGAIN || errno == EWOULDBLOCK) { - return 0; // Not an error - } - if (errno == ENOTCONN) { - ESP_LOGW(tag, "[sock=%d]: Connection closed", sock); - return -2; // Socket has been disconnected - } - log_socket_error(tag, sock, errno, "Error occurred during receiving"); - return -1; - } - - return len; -} - -/** - * @brief Sends the specified data to the socket. This function blocks until all bytes got sent. - * - * @param[in] tag Logging tag - * @param[in] sock Socket to write data - * @param[in] data Data to be written - * @param[in] len Length of the data - * @return - * >0 : Size the written data - * -1 : Error occurred during socket write operation - */ -static int socket_send(const char *tag, const int sock, const char * data, const size_t len) -{ - int to_write = len; - while (to_write > 0) { - int written = send(sock, data + (len - to_write), to_write, 0); - if (written < 0 && errno != EINPROGRESS && errno != EAGAIN && errno != EWOULDBLOCK) { - log_socket_error(tag, sock, errno, "Error occurred during sending"); - return -1; - } - to_write -= written; - } - return len; -} - -// variables -static const char *TAG = "nonblocking-socket-client"; - -SemaphoreHandle_t lock = NULL; -TaskHandle_t *task_handle = NULL; - -// tcp client -void tcp_client_initialize() { - lock = xSemaphoreCreateMutex(); - - return; -} - -static void tcp_client_task(void *pvParameters) -{ - static char rx_buffer[CONFIG_TCP_RXBUFFER_SIZE]; - int sock = INVALID_SOCK; - - struct addrinfo hints = { .ai_socktype = SOCK_STREAM }; - struct addrinfo *address_info; - - int res = getaddrinfo(s_current_gateway_ip, CONFIG_TCP_SERVER_PORT, &hints, &address_info); - if (res != 0 || address_info == NULL) { - ESP_LOGE(TAG, "couldn't get hostname for `%s` " - "getaddrinfo() returns %d, addrinfo=%p", s_current_gateway_ip, res, address_info); - goto error; - } - - // Creating client's socket - sock = socket(address_info->ai_family, address_info->ai_socktype, address_info->ai_protocol); - if (sock < 0) { - log_socket_error(TAG, sock, errno, "Unable to create socket"); - goto error; - } - ESP_LOGI(TAG, "Socket created, connecting to %s:%s", s_current_gateway_ip, CONFIG_TCP_SERVER_PORT); - - // Marking the socket as non-blocking - int flags = fcntl(sock, F_GETFL); - if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) { - log_socket_error(TAG, sock, errno, "Unable to set socket non blocking"); - } - - if (connect(sock, address_info->ai_addr, address_info->ai_addrlen) != 0) { - if (errno == EINPROGRESS) { - ESP_LOGD(TAG, "connection in progress"); - fd_set fdset; - FD_ZERO(&fdset); - FD_SET(sock, &fdset); - - // Connection in progress -> have to wait until the connecting socket is marked as writable, i.e. connection completes - res = select(sock+1, NULL, &fdset, NULL, NULL); - if (res < 0) { - log_socket_error(TAG, sock, errno, "Error during connection: select for socket to be writable"); - goto error; - } else if (res == 0) { - log_socket_error(TAG, sock, errno, "Connection timeout: select for socket to be writable"); - goto error; - } else { - int sockerr; - socklen_t len = (socklen_t)sizeof(int); - - if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (void*)(&sockerr), &len) < 0) { - log_socket_error(TAG, sock, errno, "Error when getting socket error using getsockopt()"); - goto error; - } - if (sockerr) { - log_socket_error(TAG, sock, sockerr, "Connection error"); - goto error; - } - } - } else { - log_socket_error(TAG, sock, errno, "Socket is unable to connect"); - goto error; - } - } - - ESP_LOGI(TAG, "Connected to %s:%s", s_current_gateway_ip, CONFIG_TCP_SERVER_PORT); - // Keep receiving message - do { - // receive - int len = 0; - memset(rx_buffer, 0, sizeof(rx_buffer)); - do { - len = try_receive(TAG, sock, rx_buffer, sizeof(rx_buffer)); - if (len < 0) { - ESP_LOGE(TAG, "Error occurred during try_receive"); - goto error; - } - vTaskDelay(pdMS_TO_TICKS(YIELD_TO_ALL_MS)); - } while (len == 0); - ESP_LOGI(TAG, "Received message (len=%d)", len); - - // execute command - char tx_buffer[128] = {0}; - int result = tcp_client_callback(rx_buffer, len); - switch (result) { - case 0: - strcpy(tx_buffer, "ok\n"); - break; - case -2: - strcpy(tx_buffer, "invalid request\n"); - break; - case -3: - strcpy(tx_buffer, "locked\n"); - break; - default: - strcpy(tx_buffer, "unknown error\n"); - break; - } - - // send result - len = socket_send(TAG, sock, tx_buffer, strlen(tx_buffer)); - if (len < 0) { - ESP_LOGE(TAG, "Error occurred during socket_send"); - goto error; - } - ESP_LOGI(TAG, "Written: %.*s", len, tx_buffer); - } while (true); - -error: - if (sock != INVALID_SOCK) { - close(sock); - } - free(address_info); - - free(task_handle); - task_handle = NULL; - vTaskDelete(NULL); -} - -void start_tcp_client(void) { - if (xSemaphoreTake(lock, 1000 / portTICK_PERIOD_MS) == false) - { - return; - } - - // stop old task - if (task_handle) { - ESP_LOGI(TAG, "Detected old task, deleting..."); - - vTaskDelete(*task_handle); - free(task_handle); - task_handle = NULL; - } - - // new task - task_handle = malloc(sizeof(TaskHandle_t)); - memset(task_handle, 0, sizeof(TaskHandle_t)); - - xTaskCreate(tcp_client_task, "tcp_client", 4096, NULL, 5, task_handle); - - xSemaphoreGive(lock); - return; -} \ No newline at end of file diff --git a/tcp_client.py b/tcp_client.py deleted file mode 100644 index 1d285c2..0000000 --- a/tcp_client.py +++ /dev/null @@ -1,76 +0,0 @@ -from typing import Dict, Any -import socket - -import msgpack - -import tcp_client_image - -SERVER_ADDRESS = ('172.16.0.249', 8888) - -def send_request(data:Dict[str, Any]): - client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - client_socket.connect(SERVER_ADDRESS) - - try: - message:bytes = msgpack.packb(data) - - client_socket.sendall(message) - - rx = client_socket.recv(1024) - if data: - print(f"Received message: {rx.decode('utf-8').strip()}") - else: - print("Connection closed") - return - except ConnectionResetError: - print("Connection reset") - finally: - client_socket.close() - print("Connection closed") - -def image(): - image = b"" - try: - choice = int(input("image > ")) - if choice == 1: - image = tcp_client_image.image1 - elif choice == 2: - image = tcp_client_image.image2 - else: - raise ValueError - except: - print("invalid choice") - return - - chunk_size = 2048 - for i in range(0, len(image), chunk_size): - data = { - "command": "update_image", - "index": i, - "data": bytes(image[i:i+chunk_size]) - } - send_request(data) - - send_request({"command":"push_image"}) - -def main(): - while True: - print("Command:") - print("(1) update + push image") - print("(2) ping") - print("(3) invalid request") - print("(4) exit") - - choice:int = int(input("> ")) - data = {} - if choice == 1: - image() - elif choice == 2: - send_request({"command":"ping"}) - elif choice == 3: - send_request({"command":"invalid_command"}) - else: - break - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/tcp_client_image.py b/tcp_client_image.py deleted file mode 100644 index f446c54..0000000 --- a/tcp_client_image.py +++ /dev/null @@ -1,708 +0,0 @@ -image1 = [ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, - 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x07, 0x80, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x00, 0x7f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, - 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x3f, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, - 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xfc, 0x00, 0x0f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, - 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x07, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, 0x00, 0x07, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe, - 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3f, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, - 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, - 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0x80, 0x03, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, - 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, - 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, - 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, - 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, - 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, - 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, - 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x01, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x80, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, - 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x03, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, - 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x07, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, - 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, - 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x07, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, - 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x0f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, - 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, - 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x3f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x1f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x7f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, - 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x01, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x01, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfc, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, - 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x80, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, - 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xe0, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, - 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, - 0xfc, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, - 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xf8, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xfc, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, - 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, - 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x80, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x01, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xc0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff -] - -image2 = [ #0X01,0X01,0X28,0X01,0X98,0X00, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XF8,0X0F,0XF3,0XFF,0X01,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XFB,0XBF,0XF3,0XFF,0X6F,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFB,0XBF,0XF3,0XFF,0X6F,0XFF,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFB,0XBF,0XF3,0XFF,0X6F,0XFF,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFB,0XBF,0XF3,0XFF, -0X67,0XFF,0X3F,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFC, -0X7F,0XF3,0XFF,0X99,0XFF,0X3F,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XDF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XF9,0XCF,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XAF,0XF3,0XFF,0XE3,0XFF,0X3F,0XFF, -0XF9,0XCF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XAF,0XF3,0XFF,0XD5, -0XFF,0X3F,0XFF,0XF9,0X87,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XAF, -0XF3,0XFF,0XD5,0XFF,0X3F,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0X9F,0XFF,0X0F,0XF3,0XFF,0XD5,0XFF,0X3F,0XFF,0XFC,0X30,0X7F,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XE5,0XFF,0X3F,0XFF,0XFE,0X78,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0X0F,0XF3,0XFF,0XED,0XFF, -0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XFF,0XF3, -0XFF,0XD5,0XFF,0X3F,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0X9F, -0XFE,0XFF,0XF3,0XFF,0XD5,0XFF,0X3F,0XFF,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00, -0X01,0XFF,0X9F,0XFE,0XFF,0XF3,0XFF,0XDB,0XFF,0X3F,0XFF,0XF8,0X00,0X3F,0XFF,0XFF, -0XFF,0XF0,0X00,0X01,0XFF,0X9F,0XFC,0X1F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0X9F,0XFE,0XEF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0X9F,0XFE,0XFF,0XF3,0XFF, -0XE3,0XFF,0X3F,0XFF,0XFF,0XFC,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0X9F,0XFF, -0XFF,0XF3,0XFF,0XDD,0XFF,0X3F,0XFF,0XFF,0X38,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE1, -0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XDD,0XFF,0X3F,0XFF,0XFF,0X38,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XE1,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XDD,0XFF,0X3F,0XFF,0XFF,0X33,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XE1,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XDD,0XFF,0X3F,0XFF, -0XFF,0X33,0X3F,0XFF,0XFF,0XFC,0X00,0X01,0XE1,0XFF,0X9F,0XF8,0X0F,0XF3,0XFF,0XE3, -0XFF,0X3F,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFC,0X00,0X01,0XE1,0XFF,0X9F,0XFD,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X80,0X3F,0XFF,0XFF,0XFC,0X00,0X01,0XE1,0XFF, -0X9F,0XFE,0XFF,0XF3,0XFF,0X01,0XFF,0X3F,0XFF,0XFF,0XC0,0X3F,0XFF,0XFF,0XFC,0X00, -0X01,0XE1,0XFF,0X9F,0XFF,0X7F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFC,0X1F,0XF1,0XE1,0XFF,0X9F,0XFF,0XBF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XF1,0XE1,0XFF,0X9F,0XFF,0XDF,0XF3,0XFF,0XC3,0XFF, -0X3F,0XFF,0XFF,0XE1,0XFF,0XFF,0XFF,0XFC,0X1F,0XF1,0XE1,0XFF,0X9F,0XF8,0X0F,0XF3, -0XFF,0XFD,0XFF,0X3F,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFC,0X1F,0XF1,0XE1,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFD,0XFF,0X3F,0XFF,0XFF,0X80,0X3F,0XFF,0XFF,0XFC,0X1F,0XF1, -0XE1,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFD,0XFF,0X3F,0XFF,0XFF,0X1E,0X3F,0XFF,0XFF, -0XFC,0X1F,0XF1,0XFF,0XFF,0X9F,0XFE,0X1F,0XF3,0XFF,0XC1,0XFF,0X3F,0XFF,0XFF,0X3F, -0X3F,0XFF,0XFF,0XFC,0X1F,0XF1,0XFF,0XFF,0X9F,0XFF,0XEF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFC,0X1F,0XF1,0XFF,0XFF,0X9F,0XFF,0XEF,0XF3,0XFF, -0XDF,0XFF,0X3F,0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFC,0X1F,0XF1,0XFF,0XFF,0X9F,0XFF, -0XEF,0XF3,0XFF,0X83,0XFF,0X3F,0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFF,0XF0,0XFF,0XE1, -0XFF,0X9F,0XFE,0X0F,0XF3,0XFF,0XDD,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XF0,0XFF,0XE1,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XDF,0XFF,0X3F,0XFF,0XF0,0X00,0X3F, -0XFF,0XFF,0XFF,0XF0,0XFF,0XE1,0XFF,0X9F,0XFE,0X0F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF, -0XF0,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0XFF,0XE1,0XFF,0X9F,0XFE,0XFF,0XF3,0XFF,0X41, -0XFF,0X3F,0XFF,0XF0,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0XFF,0XE1,0XFF,0X9F,0XFE,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XC1,0XFF,0XFF,0XFF,0XFF,0XF0,0XFF,0XE1,0XFF, -0X9F,0XFE,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XF0, -0XFF,0XE1,0XFF,0X9F,0XFF,0X0F,0XF3,0XFF,0XE3,0XFF,0X3F,0XFF,0XFF,0X08,0X3F,0XFF, -0XFF,0XFF,0XF0,0XFF,0XE1,0XFF,0X9F,0XFE,0XFF,0XF3,0XFF,0XDD,0XFF,0X3F,0XFF,0XFF, -0X3E,0X3F,0XFF,0XFF,0XFF,0XF0,0XFF,0XE1,0XFF,0X9F,0XFE,0XFF,0XF3,0XFF,0XDD,0XFF, -0X3F,0XFF,0XFF,0X7F,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0X9F,0XFE,0XFF,0XF3, -0XFF,0XDD,0XFF,0X3F,0XFF,0XFF,0XFF,0XBF,0XFF,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0X9F, -0XFF,0X0F,0XF3,0XFF,0XDD,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00, -0X01,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XE3,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XF0,0X00,0X01,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XF8,0X0F,0XF3,0XFF,0XC1,0XFF,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XEF,0XF3,0XFF, -0XDF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE, -0XEF,0XF3,0XFF,0XDF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0X9F,0XFE,0XEF,0XF3,0XFF,0XDF,0XFF,0X3F,0XFF,0XFF,0XFC,0X7F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XEF,0XF3,0XFF,0XE1,0XFF,0X3F,0XFF,0XFF,0X38,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0X1F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF, -0XFF,0X38,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFF,0XFF,0X33,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X33,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0X9F,0XFF,0X1F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0X9F,0XFE,0XAF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X80,0X3F,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XAF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF, -0XC0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XAF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0X2F,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XFE,0X0F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X3F,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X00, -0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00, -0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X00,0X3F,0XFF,0X00,0X00, -0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X00,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF, -0XFF,0XC0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XE0,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X80,0X7F,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF, -0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFF,0XFF,0X1E,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XF0,0X00,0X3F,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XF0,0X00, -0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFF,0XF0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XF9,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XF8,0X1F,0XFF,0XFF,0X00,0X00,0X00, -0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XF8,0X01,0XFF,0XFF, -0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XE7,0XF9,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFE, -0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XCF,0XF1,0XF3,0XFE,0X7F,0X9F, -0X3F,0XFF,0XFF,0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XCF,0XE1,0XF3, -0XFC,0XFF,0X1F,0X3F,0XFF,0XFF,0XC0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XCF,0X89,0XF3,0XFC,0XFE,0X1F,0X3F,0XFF,0XFC,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XCF,0X19,0XF3,0XFC,0XF8,0X9F,0X3F,0XFF,0XF8,0X0F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XE0,0X39,0XF3,0XFC,0XF1,0X9F,0X3F,0XFF,0XF8,0X07, -0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF0,0XF9,0XF3,0XFE,0X03,0X9F,0X3F, -0XFF,0XF8,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF, -0X0F,0X9F,0X3F,0XFF,0XFF,0XC0,0X3F,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XF0,0X3F,0XFF,0X00,0X00,0X00,0X00,0X07, -0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFE,0X00,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XF9,0XF3,0XFF,0X87,0XFF,0X3F,0XFF,0XF8,0X01,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X1B,0X9F,0XFF,0XF1,0XF3,0XFE,0X03,0X9F,0X3F,0XFF, -0XF8,0X1F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X04,0X19,0X9F,0XFF,0XFF,0XF3,0XFC,0XF1, -0X9F,0X3F,0XFF,0XF9,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X04,0X3D,0X9F,0XFF,0XFF, -0XF3,0XFC,0XF9,0X9F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XBD, -0X9F,0XFE,0X0F,0XF3,0XFC,0XFB,0X3F,0X3F,0XFF,0XF0,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFD,0XBD,0X9F,0XF8,0X03,0XF3,0XFC,0X72,0X3F,0X3F,0XFF,0XF0,0X00,0X3F,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFD,0X99,0X9F,0XF6,0X71,0XF3,0XFE,0X00,0X7F,0X3F,0XFF,0XF0, -0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X05,0XC3,0X9F,0XE4,0XF9,0XF3,0XFF,0X81,0XFF, -0X3F,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XC7,0X9F,0XEC,0XF9,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F, -0XCC,0X79,0XF3,0XFF,0XE0,0XFF,0X3F,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X00,0X00,0X00, -0X07,0XFF,0X9F,0XCE,0X03,0XF3,0XFF,0X80,0X3F,0X3F,0XFF,0XFF,0X00,0X3F,0XFF,0X00, -0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0X0F,0XF3,0XFF,0X67,0X1F,0X3F,0XFF,0XFF,0X00, -0X3F,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFE,0X4F,0X9F,0X3F, -0XFF,0XFF,0XC0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFE, -0XCF,0X9F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF, -0XFF,0XF3,0XFC,0XC7,0X9F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE, -0X23,0X9F,0XFF,0XFF,0XF3,0XFC,0XE0,0X3F,0X3F,0XFF,0XF9,0X00,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFC,0X21,0X9F,0XFF,0XFF,0XF3,0XFF,0XF0,0XFF,0X3F,0XFF,0XF9,0X00,0X3F, -0XFF,0X00,0X00,0X00,0X00,0X05,0XDD,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF, -0XF9,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X05,0XDD,0X9F,0XFF,0XFF,0XF3,0XFF,0XBF, -0XDF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XDD,0X9F,0XC8,0X01, -0XF3,0XFF,0X9F,0X1F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XDD, -0X9F,0XC8,0X01,0XF3,0XFF,0XC6,0X3F,0X3F,0XFF,0XFF,0X3F,0XFF,0XFF,0X00,0X00,0X00, -0X00,0X04,0X21,0X9F,0XFF,0XFF,0XF3,0XFF,0XE0,0XFF,0X3F,0XFF,0XFC,0X00,0X7F,0XFF, -0X00,0X00,0X00,0X00,0X06,0X23,0X9F,0XFF,0XFF,0XF3,0XFF,0XF0,0XFF,0X3F,0XFF,0XFC, -0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF8,0X01,0XF3,0XFF,0XC6,0X3F, -0X3F,0XFF,0XFC,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF8,0X01,0XF3, -0XFF,0X9F,0X1F,0X3F,0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XFD,0XFF,0XF3,0XFF,0XBF,0XDF,0X3F,0XFF,0XFF,0X3F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XF9,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XF9,0XFF,0XF3,0XFE,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF9,0XFF,0XF3,0XFE,0X7F,0XFF,0X3F, -0XFF,0XFF,0XE0,0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0X07,0X9F,0XF8,0X01,0XF3,0XFE, -0XFF,0XFF,0X3F,0XFF,0XFF,0X80,0X7F,0XFF,0X00,0X00,0X00,0X00,0X06,0X03,0X9F,0XFE, -0X01,0XF3,0XFC,0X00,0X1F,0X3F,0XFF,0XFF,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X04, -0X99,0X9F,0XFF,0XFF,0XF3,0XFC,0X00,0X1F,0X3F,0XFF,0XFF,0X33,0X3F,0XFF,0X00,0X00, -0X00,0X00,0X05,0XBD,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0X33,0X3F, -0XFF,0X00,0X00,0X00,0X00,0X05,0XBD,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF, -0XFF,0X03,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0X9D,0X9F,0XFF,0X0F,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFF,0XFF,0X83,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XC3,0X9F,0XFC,0X03, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XC3, -0X9F,0XFC,0XF1,0XF3,0XFF,0XC7,0X9F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0X9F,0XF9,0XF9,0XF3,0XFC,0X07,0X9F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, -0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF9,0XF9,0XF3,0XFC,0XE7,0X9F,0X3F,0XFF,0XFF, -0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF9,0XF9,0XF3,0XFC,0XE7,0X9F, -0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XF9,0XF9,0XF3, -0XFC,0XF3,0X1F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFC,0XF0,0X3F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0X80,0X01,0XF3,0XFC,0XF8,0X7F,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFE,0X23,0X9F,0X80,0X01,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00, -0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X21,0X9F,0XFD,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X05,0XDD,0X9F,0XF9,0XFF,0XF3,0XFE, -0X7F,0X9F,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X05,0XDD,0X9F,0XF9, -0XFF,0XF3,0XFC,0XFF,0X1F,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD, -0XDD,0X9F,0XF9,0XFF,0XF3,0XFC,0XFE,0X1F,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFD,0XDD,0X9F,0XF8,0X01,0XF3,0XFC,0XF8,0X9F,0X3F,0XFE,0X00,0X00,0X03, -0XFF,0X00,0X00,0X00,0X00,0X04,0X21,0X9F,0XFE,0X01,0XF3,0XFC,0XF1,0X9F,0X3F,0XFE, -0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X06,0X23,0X9F,0XFF,0XFF,0XF3,0XFE,0X03, -0X9F,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF, -0XF3,0XFF,0X0F,0X9F,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00, -0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XC0,0X01,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0XF8,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFF,0X9F, -0XC0,0X01,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X03,0XFE,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFD,0XFF,0X9F,0XCE,0X79,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07,0X07,0X03,0XFF,0X00, -0X00,0X00,0X00,0X05,0XF1,0X9F,0XCE,0X79,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X06,0X03, -0X83,0XFF,0X00,0X00,0X00,0X00,0X05,0XC1,0X9F,0XCE,0X79,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X05,0X0F,0X9F,0XCE,0X79,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X04,0X3F,0X9F,0XCF, -0XF9,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X31,0X83,0XFF,0X00,0X00,0X00,0X00,0X04, -0XFF,0X9F,0XFF,0X9F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X31,0X83,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFD,0XFF,0X9F,0XFF,0X9F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X3F,0X83, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0X9F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X08,0X3F,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0X9F,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0X9F, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0XF8,0X03,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X03,0XFE,0X03,0XFF, -0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XC0,0X01,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07, -0X07,0X03,0XFF,0X00,0X00,0X00,0X00,0X06,0XFB,0X9F,0XC0,0X01,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X0C,0X01,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XF9,0X9F,0XCF,0X3F,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFD,0X9F, -0XCF,0X3F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00,0X00,0X00, -0X05,0XBD,0X9F,0XCF,0X3F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0X00, -0X00,0X00,0X00,0X05,0XBD,0X9F,0XCE,0X7F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07,0X07, -0X03,0XFF,0X00,0X00,0X00,0X00,0X05,0X99,0X9F,0XE0,0X7F,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X03,0XFE,0X03,0XFF,0X00,0X00,0X00,0X00,0X04,0X03,0X9F,0XF0,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X00,0XF8,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X47,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07, -0XFF,0X9F,0XFF,0XE3,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0XF8,0X03,0XFF,0X00,0X00, -0X00,0X00,0X07,0XFF,0X9F,0XF9,0XC1,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X03,0XFE,0X03, -0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF9,0XD9,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X07,0X07,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF9,0X99,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XF9,0X9B, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0X9F,0XFC,0X01,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X07,0X9F,0XFE,0X01,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFE,0X03,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07, -0X07,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XF9,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X03,0XFE,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFD,0X9F,0XF8,0X00,0X13, -0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0XF8,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XFD,0X9F, -0XF8,0X00,0X13,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFC,0XF9,0X9F,0XFC,0XFB,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00, -0X00,0X00,0X00,0X06,0X03,0X9F,0XF9,0XF9,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0F,0XFF, -0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0X07,0X9F,0XF9,0XF9,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X0F,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XF9,0XF9,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XF8, -0XF1,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X07, -0XFF,0X9F,0XFC,0X03,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0X9F,0XFE,0X0F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X0E,0X03,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X07,0X07,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X23,0X9F,0XFF,0X07, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X03,0XFE,0X03,0XFF,0X00,0X00,0X00,0X00,0X04,0X21, -0X9F,0XFC,0X03,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0XF8,0X03,0XFF,0X00,0X00,0X00, -0X00,0X05,0XDD,0X9F,0XF9,0X99,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF, -0X00,0X00,0X00,0X00,0X05,0XDD,0X9F,0XF9,0X99,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00, -0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X05,0XDD,0X9F,0XF9,0X99,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XDD,0X9F,0XFC,0X19,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X21,0X9F, -0XFE,0X1F,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00, -0X06,0X23,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0F,0XFF,0X83,0XFF,0X00, -0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0F,0XFF, -0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF8,0X01,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XF8,0X01,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFC, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X07, -0XFF,0X9F,0XF9,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X01,0X83,0XFF,0X00,0X00, -0X00,0X00,0X07,0XFF,0X9F,0XF9,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0E,0X03,0X03, -0XFF,0X00,0X00,0X00,0X00,0X07,0XE7,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X07,0X07,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC7,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X03,0XFE,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0X97,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0XF8,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0X37, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00, -0X00,0X06,0X77,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF, -0X00,0X00,0X00,0X00,0X04,0X01,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0F, -0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X01,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X0F,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0X9F,0XFF,0XFF,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00, -0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X03,0X81,0X83,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07,0XC1, -0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X0C,0X61,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X0C,0X61,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X31,0X83,0XFF,0X00,0X00,0X00,0X00,0X06, -0X23,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X3F,0X03,0XFF,0X00,0X00, -0X00,0X00,0X04,0X21,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X0E,0X03, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XDD,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XDD,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFD,0XDD,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0F,0XFF,0X83,0XFF,0X00,0X00,0X00,0X00,0X05,0XDD, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0F,0XFF,0X83,0XFF,0X00,0X00,0X00, -0X00,0X04,0X21,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X30,0X03,0XFF, -0X00,0X00,0X00,0X00,0X06,0X23,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C, -0X30,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X0C,0X30,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X60,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X03,0XC0,0X03,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00, -0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X0F,0XFF,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X0F,0XFF,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0X3F,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X06, -0X7F,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X01,0X83,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFE,0X7F,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X01,0X83, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X01,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X00,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X04,0X01,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X00,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X0F,0X83,0XFF,0X00,0X00,0X00, -0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X7E,0X03,0XFF, -0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07, -0XFC,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X0F,0X0C,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFE,0X0E,0X0C,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07,0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X7F,0X03,0XFF,0X00, -0X00,0X00,0X00,0X06,0XFD,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X0F, -0X83,0XFF,0X00,0X00,0X00,0X00,0X04,0XF9,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X00,0X01,0X83,0XFF,0X00,0X00,0X00,0X00,0X05,0XF1,0X9F,0XFF,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X05,0XE5,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X08,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X05, -0XCD,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0C,0X00,0X03,0XFF,0X00,0X00, -0X00,0X00,0X05,0X8D,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0F,0X00,0X03, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X1D,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X03,0XC0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X3D,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X00,0X7F,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X7F,0X83,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X01,0XC0,0X03,0XFF,0X00,0X00,0X00, -0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X07,0X80,0X03,0XFF, -0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X0E, -0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFE,0X08,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00, -0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00, -0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00, -0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF, -0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07, -0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00, -0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03, -0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFE, -0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF, -0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF, -0XF3,0XFF,0XFF,0XFF,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF, -0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X07,0XFF,0X9F,0XFF,0XFF,0XF3, -0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F, -0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F,0XFF,0XFF,0XFF, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF,0XFF,0XFF,0X3F, -0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X9F,0XFF,0XFF,0XF3,0XFF, -0XFF,0XFF,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF] \ No newline at end of file