summaryrefslogtreecommitdiff
path: root/arduino/ESP32CameraWebServer
diff options
context:
space:
mode:
Diffstat (limited to 'arduino/ESP32CameraWebServer')
-rw-r--r--arduino/ESP32CameraWebServer/CameraWebServer.ino165
-rw-r--r--arduino/ESP32CameraWebServer/app_httpd.cpp1287
-rw-r--r--arduino/ESP32CameraWebServer/camera_index.h1570
-rw-r--r--arduino/ESP32CameraWebServer/camera_pins.h273
-rw-r--r--arduino/ESP32CameraWebServer/index_ov2640.html1160
5 files changed, 4455 insertions, 0 deletions
diff --git a/arduino/ESP32CameraWebServer/CameraWebServer.ino b/arduino/ESP32CameraWebServer/CameraWebServer.ino
new file mode 100644
index 0000000..ef589d9
--- /dev/null
+++ b/arduino/ESP32CameraWebServer/CameraWebServer.ino
@@ -0,0 +1,165 @@
+#include "esp_camera.h"
+#include <WiFi.h>
+
+//
+// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
+// Ensure ESP32 Wrover Module or other board with PSRAM is selected
+// Partial images will be transmitted if image exceeds buffer size
+//
+// You must select partition scheme from the board menu that has at least 3MB APP space.
+// Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15
+// seconds to process single frame. Face Detection is ENABLED if PSRAM is enabled as well
+
+// ===================
+// Select camera model
+// ===================
+//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
+//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
+//#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
+//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
+//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
+//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
+//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
+//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
+#define CAMERA_MODEL_AI_THINKER // Has PSRAM
+//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
+// ** Espressif Internal Boards **
+//#define CAMERA_MODEL_ESP32_CAM_BOARD
+//#define CAMERA_MODEL_ESP32S2_CAM_BOARD
+//#define CAMERA_MODEL_ESP32S3_CAM_LCD
+
+#include "camera_pins.h"
+
+// ===========================
+// Enter your WiFi credentials
+// ===========================
+#include "wifi_password.h"
+
+volatile float disconnected_since = 0;
+
+void startCameraServer();
+
+void onWiFiDisconnect(WiFiEvent_t event, WiFiEventInfo_t info) {
+ disconnected_since = millis();
+ WiFi.reconnect();
+}
+
+void onWiFiConnect(WiFiEvent_t event, WiFiEventInfo_t info) {
+ disconnected_since = 0;
+}
+
+void setup() {
+ Serial.begin(115200);
+ //Serial.setDebugOutput(true);
+ Serial.println();
+
+ camera_config_t config;
+ config.ledc_channel = LEDC_CHANNEL_0;
+ config.ledc_timer = LEDC_TIMER_0;
+ config.pin_d0 = Y2_GPIO_NUM;
+ config.pin_d1 = Y3_GPIO_NUM;
+ config.pin_d2 = Y4_GPIO_NUM;
+ config.pin_d3 = Y5_GPIO_NUM;
+ config.pin_d4 = Y6_GPIO_NUM;
+ config.pin_d5 = Y7_GPIO_NUM;
+ config.pin_d6 = Y8_GPIO_NUM;
+ config.pin_d7 = Y9_GPIO_NUM;
+ config.pin_xclk = XCLK_GPIO_NUM;
+ config.pin_pclk = PCLK_GPIO_NUM;
+ config.pin_vsync = VSYNC_GPIO_NUM;
+ config.pin_href = HREF_GPIO_NUM;
+ config.pin_sscb_sda = SIOD_GPIO_NUM;
+ config.pin_sscb_scl = SIOC_GPIO_NUM;
+ config.pin_pwdn = PWDN_GPIO_NUM;
+ config.pin_reset = RESET_GPIO_NUM;
+ config.xclk_freq_hz = 20000000;
+ config.frame_size = FRAMESIZE_UXGA;
+ config.pixel_format = PIXFORMAT_JPEG; // for streaming
+ //config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
+ config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
+ config.fb_location = CAMERA_FB_IN_PSRAM;
+ config.jpeg_quality = 12;
+ config.fb_count = 1;
+
+ // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
+ // for larger pre-allocated frame buffer.
+ if(config.pixel_format == PIXFORMAT_JPEG){
+ if(psramFound()){
+ config.jpeg_quality = 10;
+ config.fb_count = 2;
+ config.grab_mode = CAMERA_GRAB_LATEST;
+ } else {
+ // Limit the frame size when PSRAM is not available
+ config.frame_size = FRAMESIZE_SVGA;
+ config.fb_location = CAMERA_FB_IN_DRAM;
+ }
+ } else {
+ // Best option for face detection/recognition
+ config.frame_size = FRAMESIZE_240X240;
+#if CONFIG_IDF_TARGET_ESP32S3
+ config.fb_count = 2;
+#endif
+ }
+
+#if defined(CAMERA_MODEL_ESP_EYE)
+ pinMode(13, INPUT_PULLUP);
+ pinMode(14, INPUT_PULLUP);
+#endif
+
+ // camera init
+ esp_err_t err = esp_camera_init(&config);
+ if (err != ESP_OK) {
+ Serial.printf("Camera init failed with error 0x%x", err);
+ return;
+ }
+
+ sensor_t * s = esp_camera_sensor_get();
+ // initial sensors are flipped vertically and colors are a bit saturated
+ if (s->id.PID == OV3660_PID) {
+ s->set_vflip(s, 1); // flip it back
+ s->set_brightness(s, 1); // up the brightness just a bit
+ s->set_saturation(s, -2); // lower the saturation
+ }
+ // drop down frame size for higher initial frame rate
+ if(config.pixel_format == PIXFORMAT_JPEG){
+ s->set_framesize(s, FRAMESIZE_QVGA);
+ }
+
+#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
+ s->set_vflip(s, 1);
+ s->set_hmirror(s, 1);
+#endif
+
+#if defined(CAMERA_MODEL_ESP32S3_EYE)
+ s->set_vflip(s, 1);
+#endif
+
+ WiFi.onEvent(onWiFiDisconnect, ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
+ WiFi.onEvent(onWiFiConnect, ARDUINO_EVENT_WIFI_STA_CONNECTED);
+
+ WiFi.begin(ssid, password);
+ WiFi.setSleep(false);
+
+ while (WiFi.status() != WL_CONNECTED) {
+ delay(500);
+ Serial.print(".");
+ }
+ Serial.println("");
+ Serial.println("WiFi connected");
+
+ startCameraServer();
+
+ Serial.print("Camera Ready! Use 'http://");
+ Serial.print(WiFi.localIP());
+ Serial.println("' to connect");
+}
+
+void loop() {
+ if (disconnected_since != 0 && (millis() - disconnected_since) > 60000) {
+ ESP.restart();
+ return;
+ }
+
+ // Do nothing. Everything is done in another task by the web server
+ delay(10000);
+}
diff --git a/arduino/ESP32CameraWebServer/app_httpd.cpp b/arduino/ESP32CameraWebServer/app_httpd.cpp
new file mode 100644
index 0000000..e397c70
--- /dev/null
+++ b/arduino/ESP32CameraWebServer/app_httpd.cpp
@@ -0,0 +1,1287 @@
+// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#include <Arduino.h>
+
+#include "esp_http_server.h"
+#include "esp_timer.h"
+#include "esp_camera.h"
+#include "img_converters.h"
+#include "fb_gfx.h"
+#include "driver/ledc.h"
+#include "sdkconfig.h"
+#include "camera_index.h"
+
+#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG)
+#include "esp32-hal-log.h"
+#define TAG ""
+#else
+#include "esp_log.h"
+static const char *TAG = "camera_httpd";
+#endif
+
+// Face Detection will not work on boards without (or with disabled) PSRAM
+#ifdef BOARD_HAS_PSRAM
+#define CONFIG_ESP_FACE_DETECT_ENABLED 1
+// Face Recognition takes upward from 15 seconds per frame on chips other than ESP32S3
+// Makes no sense to have it enabled for them
+#if CONFIG_IDF_TARGET_ESP32S3
+#define CONFIG_ESP_FACE_RECOGNITION_ENABLED 1
+#else
+#define CONFIG_ESP_FACE_RECOGNITION_ENABLED 0
+#endif
+#else
+#define CONFIG_ESP_FACE_DETECT_ENABLED 0
+#define CONFIG_ESP_FACE_RECOGNITION_ENABLED 0
+#endif
+
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+
+#include <vector>
+#include "human_face_detect_msr01.hpp"
+#include "human_face_detect_mnp01.hpp"
+
+#define TWO_STAGE 1 /*<! 1: detect by two-stage which is more accurate but slower(with keypoints). */
+ /*<! 0: detect by one-stage which is less accurate but faster(without keypoints). */
+
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+#include "face_recognition_tool.hpp"
+#include "face_recognition_112_v1_s16.hpp"
+#include "face_recognition_112_v1_s8.hpp"
+
+#define QUANT_TYPE 0 //if set to 1 => very large firmware, very slow, reboots when streaming...
+
+#define FACE_ID_SAVE_NUMBER 7
+#endif
+
+#define FACE_COLOR_WHITE 0x00FFFFFF
+#define FACE_COLOR_BLACK 0x00000000
+#define FACE_COLOR_RED 0x000000FF
+#define FACE_COLOR_GREEN 0x0000FF00
+#define FACE_COLOR_BLUE 0x00FF0000
+#define FACE_COLOR_YELLOW (FACE_COLOR_RED | FACE_COLOR_GREEN)
+#define FACE_COLOR_CYAN (FACE_COLOR_BLUE | FACE_COLOR_GREEN)
+#define FACE_COLOR_PURPLE (FACE_COLOR_BLUE | FACE_COLOR_RED)
+#endif
+
+#ifdef CONFIG_LED_ILLUMINATOR_ENABLED
+int led_duty = 0;
+bool isStreaming = false;
+#ifdef CONFIG_LED_LEDC_LOW_SPEED_MODE
+#define CONFIG_LED_LEDC_SPEED_MODE LEDC_LOW_SPEED_MODE
+#else
+#define CONFIG_LED_LEDC_SPEED_MODE LEDC_HIGH_SPEED_MODE
+#endif
+#endif
+
+typedef struct
+{
+ httpd_req_t *req;
+ size_t len;
+} jpg_chunking_t;
+
+#define PART_BOUNDARY "123456789000000000000987654321"
+static const char *_STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
+static const char *_STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
+static const char *_STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\nX-Timestamp: %d.%06d\r\n\r\n";
+
+httpd_handle_t stream_httpd = NULL;
+httpd_handle_t camera_httpd = NULL;
+
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+
+static int8_t detection_enabled = 0;
+
+// #if TWO_STAGE
+// static HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F);
+// static HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5);
+// #else
+// static HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F);
+// #endif
+
+static int8_t flash_enabled = 0;
+
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+static int8_t recognition_enabled = 0;
+static int8_t is_enrolling = 0;
+
+#if QUANT_TYPE
+ // S16 model
+ FaceRecognition112V1S16 recognizer;
+#else
+ // S8 model
+ FaceRecognition112V1S8 recognizer;
+#endif
+#endif
+
+#endif
+
+typedef struct
+{
+ size_t size; //number of values used for filtering
+ size_t index; //current value index
+ size_t count; //value count
+ int sum;
+ int *values; //array to be filled with values
+} ra_filter_t;
+
+static ra_filter_t ra_filter;
+
+static ra_filter_t *ra_filter_init(ra_filter_t *filter, size_t sample_size)
+{
+ memset(filter, 0, sizeof(ra_filter_t));
+
+ filter->values = (int *)malloc(sample_size * sizeof(int));
+ if (!filter->values)
+ {
+ return NULL;
+ }
+ memset(filter->values, 0, sample_size * sizeof(int));
+
+ filter->size = sample_size;
+ return filter;
+}
+
+static int ra_filter_run(ra_filter_t *filter, int value)
+{
+ if (!filter->values)
+ {
+ return value;
+ }
+ filter->sum -= filter->values[filter->index];
+ filter->values[filter->index] = value;
+ filter->sum += filter->values[filter->index];
+ filter->index++;
+ filter->index = filter->index % filter->size;
+ if (filter->count < filter->size)
+ {
+ filter->count++;
+ }
+ return filter->sum / filter->count;
+}
+
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+static void rgb_print(fb_data_t *fb, uint32_t color, const char *str)
+{
+ fb_gfx_print(fb, (fb->width - (strlen(str) * 14)) / 2, 10, color, str);
+}
+
+static int rgb_printf(fb_data_t *fb, uint32_t color, const char *format, ...)
+{
+ char loc_buf[64];
+ char *temp = loc_buf;
+ int len;
+ va_list arg;
+ va_list copy;
+ va_start(arg, format);
+ va_copy(copy, arg);
+ len = vsnprintf(loc_buf, sizeof(loc_buf), format, arg);
+ va_end(copy);
+ if (len >= sizeof(loc_buf))
+ {
+ temp = (char *)malloc(len + 1);
+ if (temp == NULL)
+ {
+ return 0;
+ }
+ }
+ vsnprintf(temp, len + 1, format, arg);
+ va_end(arg);
+ rgb_print(fb, color, temp);
+ if (len > 64)
+ {
+ free(temp);
+ }
+ return len;
+}
+#endif
+static void draw_face_boxes(fb_data_t *fb, std::list<dl::detect::result_t> *results, int face_id)
+{
+ int x, y, w, h;
+ uint32_t color = FACE_COLOR_YELLOW;
+ if (face_id < 0)
+ {
+ color = FACE_COLOR_RED;
+ }
+ else if (face_id > 0)
+ {
+ color = FACE_COLOR_GREEN;
+ }
+ if(fb->bytes_per_pixel == 2){
+ //color = ((color >> 8) & 0xF800) | ((color >> 3) & 0x07E0) | (color & 0x001F);
+ color = ((color >> 16) & 0x001F) | ((color >> 3) & 0x07E0) | ((color << 8) & 0xF800);
+ }
+ int i = 0;
+ for (std::list<dl::detect::result_t>::iterator prediction = results->begin(); prediction != results->end(); prediction++, i++)
+ {
+ // rectangle box
+ x = (int)prediction->box[0];
+ y = (int)prediction->box[1];
+ w = (int)prediction->box[2] - x + 1;
+ h = (int)prediction->box[3] - y + 1;
+ if((x + w) > fb->width){
+ w = fb->width - x;
+ }
+ if((y + h) > fb->height){
+ h = fb->height - y;
+ }
+ fb_gfx_drawFastHLine(fb, x, y, w, color);
+ fb_gfx_drawFastHLine(fb, x, y + h - 1, w, color);
+ fb_gfx_drawFastVLine(fb, x, y, h, color);
+ fb_gfx_drawFastVLine(fb, x + w - 1, y, h, color);
+#if TWO_STAGE
+ // landmarks (left eye, mouth left, nose, right eye, mouth right)
+ int x0, y0, j;
+ for (j = 0; j < 10; j+=2) {
+ x0 = (int)prediction->keypoint[j];
+ y0 = (int)prediction->keypoint[j+1];
+ fb_gfx_fillRect(fb, x0, y0, 3, 3, color);
+ }
+#endif
+ }
+}
+
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+static int run_face_recognition(fb_data_t *fb, std::list<dl::detect::result_t> *results)
+{
+ std::vector<int> landmarks = results->front().keypoint;
+ int id = -1;
+
+ Tensor<uint8_t> tensor;
+ tensor.set_element((uint8_t *)fb->data).set_shape({fb->height, fb->width, 3}).set_auto_free(false);
+
+ int enrolled_count = recognizer.get_enrolled_id_num();
+
+ if (enrolled_count < FACE_ID_SAVE_NUMBER && is_enrolling){
+ id = recognizer.enroll_id(tensor, landmarks, "", true);
+ ESP_LOGI(TAG, "Enrolled ID: %d", id);
+ rgb_printf(fb, FACE_COLOR_CYAN, "ID[%u]", id);
+ }
+
+ face_info_t recognize = recognizer.recognize(tensor, landmarks);
+ if(recognize.id >= 0){
+ rgb_printf(fb, FACE_COLOR_GREEN, "ID[%u]: %.2f", recognize.id, recognize.similarity);
+ } else {
+ rgb_print(fb, FACE_COLOR_RED, "Intruder Alert!");
+ }
+ return recognize.id;
+}
+#endif
+#endif
+
+#ifdef CONFIG_LED_ILLUMINATOR_ENABLED
+void enable_led(bool en)
+{ // Turn LED On or Off
+ int duty = en ? led_duty : 0;
+ if (en && isStreaming && (led_duty > CONFIG_LED_MAX_INTENSITY))
+ {
+ duty = CONFIG_LED_MAX_INTENSITY;
+ }
+ ledc_set_duty(CONFIG_LED_LEDC_SPEED_MODE, CONFIG_LED_LEDC_CHANNEL, duty);
+ ledc_update_duty(CONFIG_LED_LEDC_SPEED_MODE, CONFIG_LED_LEDC_CHANNEL);
+ ESP_LOGI(TAG, "Set LED intensity to %d", duty);
+}
+#endif
+
+static esp_err_t bmp_handler(httpd_req_t *req)
+{
+ camera_fb_t *fb = NULL;
+ esp_err_t res = ESP_OK;
+ uint64_t fr_start = esp_timer_get_time();
+ fb = esp_camera_fb_get();
+ if (!fb)
+ {
+ ESP_LOGE(TAG, "Camera capture failed");
+ httpd_resp_send_500(req);
+ return ESP_FAIL;
+ }
+
+ httpd_resp_set_type(req, "image/x-windows-bmp");
+ httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.bmp");
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+
+ char ts[32];
+ snprintf(ts, 32, "%ld.%06ld", fb->timestamp.tv_sec, fb->timestamp.tv_usec);
+ httpd_resp_set_hdr(req, "X-Timestamp", (const char *)ts);
+
+
+ uint8_t * buf = NULL;
+ size_t buf_len = 0;
+ bool converted = frame2bmp(fb, &buf, &buf_len);
+ esp_camera_fb_return(fb);
+ if(!converted){
+ ESP_LOGE(TAG, "BMP Conversion failed");
+ httpd_resp_send_500(req);
+ return ESP_FAIL;
+ }
+ res = httpd_resp_send(req, (const char *)buf, buf_len);
+ free(buf);
+ uint64_t fr_end = esp_timer_get_time();
+ ESP_LOGI(TAG, "BMP: %llums, %uB", (uint64_t)((fr_end - fr_start) / 1000), buf_len);
+ return res;
+}
+
+static size_t jpg_encode_stream(void *arg, size_t index, const void *data, size_t len)
+{
+ jpg_chunking_t *j = (jpg_chunking_t *)arg;
+ if (!index)
+ {
+ j->len = 0;
+ }
+ if (httpd_resp_send_chunk(j->req, (const char *)data, len) != ESP_OK)
+ {
+ return 0;
+ }
+ j->len += len;
+ return len;
+}
+
+static esp_err_t capture_handler(httpd_req_t *req)
+{
+ camera_fb_t *fb = NULL;
+ esp_err_t res = ESP_OK;
+ int64_t fr_start = esp_timer_get_time();
+
+#ifdef CONFIG_LED_ILLUMINATOR_ENABLED
+ enable_led(true);
+ vTaskDelay(150 / portTICK_PERIOD_MS); // The LED needs to be turned on ~150ms before the call to esp_camera_fb_get()
+ fb = esp_camera_fb_get(); // or it won't be visible in the frame. A better way to do this is needed.
+ enable_led(false);
+#else
+ fb = esp_camera_fb_get();
+#endif
+
+ if (!fb)
+ {
+ ESP_LOGE(TAG, "Camera capture failed");
+ httpd_resp_send_500(req);
+ return ESP_FAIL;
+ }
+
+ httpd_resp_set_type(req, "image/jpeg");
+ httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.jpg");
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+
+ char ts[32];
+ snprintf(ts, 32, "%ld.%06ld", fb->timestamp.tv_sec, fb->timestamp.tv_usec);
+ httpd_resp_set_hdr(req, "X-Timestamp", (const char *)ts);
+
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ size_t out_len, out_width, out_height;
+ uint8_t *out_buf;
+ bool s;
+ bool detected = false;
+ int face_id = 0;
+ if (!detection_enabled || fb->width > 400)
+ {
+#endif
+ size_t fb_len = 0;
+ if (fb->format == PIXFORMAT_JPEG)
+ {
+ fb_len = fb->len;
+ res = httpd_resp_send(req, (const char *)fb->buf, fb->len);
+ }
+ else
+ {
+ jpg_chunking_t jchunk = {req, 0};
+ res = frame2jpg_cb(fb, 80, jpg_encode_stream, &jchunk) ? ESP_OK : ESP_FAIL;
+ httpd_resp_send_chunk(req, NULL, 0);
+ fb_len = jchunk.len;
+ }
+ esp_camera_fb_return(fb);
+ int64_t fr_end = esp_timer_get_time();
+ ESP_LOGI(TAG, "JPG: %uB %ums", (uint32_t)(fb_len), (uint32_t)((fr_end - fr_start) / 1000));
+ return res;
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ }
+
+ jpg_chunking_t jchunk = {req, 0};
+
+ if (fb->format == PIXFORMAT_RGB565
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ && !recognition_enabled
+#endif
+ ){
+#if TWO_STAGE
+ HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F);
+ HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5);
+ std::list<dl::detect::result_t> &candidates = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3});
+ std::list<dl::detect::result_t> &results = s2.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}, candidates);
+#else
+ HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F);
+ std::list<dl::detect::result_t> &results = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3});
+#endif
+ if (results.size() > 0) {
+ fb_data_t rfb;
+ rfb.width = fb->width;
+ rfb.height = fb->height;
+ rfb.data = fb->buf;
+ rfb.bytes_per_pixel = 2;
+ rfb.format = FB_RGB565;
+ detected = true;
+ draw_face_boxes(&rfb, &results, face_id);
+ }
+ s = fmt2jpg_cb(fb->buf, fb->len, fb->width, fb->height, PIXFORMAT_RGB565, 90, jpg_encode_stream, &jchunk);
+ esp_camera_fb_return(fb);
+ } else
+ {
+ out_len = fb->width * fb->height * 3;
+ out_width = fb->width;
+ out_height = fb->height;
+ out_buf = (uint8_t*)malloc(out_len);
+ if (!out_buf) {
+ ESP_LOGE(TAG, "out_buf malloc failed");
+ httpd_resp_send_500(req);
+ return ESP_FAIL;
+ }
+ s = fmt2rgb888(fb->buf, fb->len, fb->format, out_buf);
+ esp_camera_fb_return(fb);
+ if (!s) {
+ free(out_buf);
+ ESP_LOGE(TAG, "to rgb888 failed");
+ httpd_resp_send_500(req);
+ return ESP_FAIL;
+ }
+
+ fb_data_t rfb;
+ rfb.width = out_width;
+ rfb.height = out_height;
+ rfb.data = out_buf;
+ rfb.bytes_per_pixel = 3;
+ rfb.format = FB_BGR888;
+
+#if TWO_STAGE
+ HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F);
+ HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5);
+ std::list<dl::detect::result_t> &candidates = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3});
+ std::list<dl::detect::result_t> &results = s2.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}, candidates);
+#else
+ HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F);
+ std::list<dl::detect::result_t> &results = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3});
+#endif
+
+ if (results.size() > 0) {
+ detected = true;
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ if (recognition_enabled) {
+ face_id = run_face_recognition(&rfb, &results);
+ }
+#endif
+ draw_face_boxes(&rfb, &results, face_id);
+ }
+
+ s = fmt2jpg_cb(out_buf, out_len, out_width, out_height, PIXFORMAT_RGB888, 90, jpg_encode_stream, &jchunk);
+ free(out_buf);
+ }
+
+ if (!s) {
+ ESP_LOGE(TAG, "JPEG compression failed");
+ httpd_resp_send_500(req);
+ return ESP_FAIL;
+ }
+
+ int64_t fr_end = esp_timer_get_time();
+ ESP_LOGI(TAG, "FACE: %uB %ums %s%d", (uint32_t)(jchunk.len), (uint32_t)((fr_end - fr_start) / 1000), detected ? "DETECTED " : "", face_id);
+ return res;
+#endif
+}
+
+static esp_err_t stream_handler(httpd_req_t *req)
+{
+ camera_fb_t *fb = NULL;
+ struct timeval _timestamp;
+ esp_err_t res = ESP_OK;
+ size_t _jpg_buf_len = 0;
+ uint8_t *_jpg_buf = NULL;
+ char *part_buf[128];
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ bool detected = false;
+ int face_id = 0;
+ int64_t fr_start = 0;
+ int64_t fr_ready = 0;
+ int64_t fr_face = 0;
+ int64_t fr_recognize = 0;
+ int64_t fr_encode = 0;
+
+ size_t out_len = 0, out_width = 0, out_height = 0;
+ uint8_t *out_buf = NULL;
+ bool s = false;
+#if TWO_STAGE
+ HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F);
+ HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5);
+#else
+ HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F);
+#endif
+#endif
+
+ static int64_t last_frame = 0;
+ if (!last_frame)
+ {
+ last_frame = esp_timer_get_time();
+ }
+
+ res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
+ if (res != ESP_OK)
+ {
+ return res;
+ }
+
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ httpd_resp_set_hdr(req, "X-Framerate", "60");
+
+#ifdef CONFIG_LED_ILLUMINATOR_ENABLED
+ enable_led(true);
+ isStreaming = true;
+#endif
+
+ while (true)
+ {
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ detected = false;
+ face_id = 0;
+#endif
+
+ fb = esp_camera_fb_get();
+ if (!fb)
+ {
+ ESP_LOGE(TAG, "Camera capture failed");
+ res = ESP_FAIL;
+ }
+ else
+ {
+ _timestamp.tv_sec = fb->timestamp.tv_sec;
+ _timestamp.tv_usec = fb->timestamp.tv_usec;
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ fr_start = esp_timer_get_time();
+ fr_ready = fr_start;
+ fr_face = fr_start;
+ fr_encode = fr_start;
+ fr_recognize = fr_start;
+ if (!detection_enabled || fb->width > 400)
+ {
+#endif
+ if (fb->format != PIXFORMAT_JPEG)
+ {
+ bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
+ esp_camera_fb_return(fb);
+ fb = NULL;
+ if (!jpeg_converted)
+ {
+ ESP_LOGE(TAG, "JPEG compression failed");
+ res = ESP_FAIL;
+ }
+ }
+ else
+ {
+ _jpg_buf_len = fb->len;
+ _jpg_buf = fb->buf;
+ }
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ }
+ else
+ {
+ if (fb->format == PIXFORMAT_RGB565
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ && !recognition_enabled
+#endif
+ ){
+ fr_ready = esp_timer_get_time();
+#if TWO_STAGE
+ std::list<dl::detect::result_t> &candidates = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3});
+ std::list<dl::detect::result_t> &results = s2.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}, candidates);
+#else
+ std::list<dl::detect::result_t> &results = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3});
+#endif
+ fr_face = esp_timer_get_time();
+ fr_recognize = fr_face;
+ if (results.size() > 0) {
+ fb_data_t rfb;
+ rfb.width = fb->width;
+ rfb.height = fb->height;
+ rfb.data = fb->buf;
+ rfb.bytes_per_pixel = 2;
+ rfb.format = FB_RGB565;
+ detected = true;
+ draw_face_boxes(&rfb, &results, face_id);
+ }
+ s = fmt2jpg(fb->buf, fb->len, fb->width, fb->height, PIXFORMAT_RGB565, 80, &_jpg_buf, &_jpg_buf_len);
+ esp_camera_fb_return(fb);
+ fb = NULL;
+ if (!s) {
+ ESP_LOGE(TAG, "fmt2jpg failed");
+ res = ESP_FAIL;
+ }
+ fr_encode = esp_timer_get_time();
+ } else
+ {
+ out_len = fb->width * fb->height * 3;
+ out_width = fb->width;
+ out_height = fb->height;
+ out_buf = (uint8_t*)malloc(out_len);
+ if (!out_buf) {
+ ESP_LOGE(TAG, "out_buf malloc failed");
+ res = ESP_FAIL;
+ } else {
+ s = fmt2rgb888(fb->buf, fb->len, fb->format, out_buf);
+ esp_camera_fb_return(fb);
+ fb = NULL;
+ if (!s) {
+ free(out_buf);
+ ESP_LOGE(TAG, "to rgb888 failed");
+ res = ESP_FAIL;
+ } else {
+ fr_ready = esp_timer_get_time();
+
+ fb_data_t rfb;
+ rfb.width = out_width;
+ rfb.height = out_height;
+ rfb.data = out_buf;
+ rfb.bytes_per_pixel = 3;
+ rfb.format = FB_BGR888;
+
+#if TWO_STAGE
+ std::list<dl::detect::result_t> &candidates = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3});
+ std::list<dl::detect::result_t> &results = s2.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}, candidates);
+#else
+ std::list<dl::detect::result_t> &results = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3});
+#endif
+
+ fr_face = esp_timer_get_time();
+ fr_recognize = fr_face;
+
+ if (results.size() > 0) {
+ detected = true;
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ if (recognition_enabled) {
+ face_id = run_face_recognition(&rfb, &results);
+ fr_recognize = esp_timer_get_time();
+ }
+#endif
+ draw_face_boxes(&rfb, &results, face_id);
+ }
+ s = fmt2jpg(out_buf, out_len, out_width, out_height, PIXFORMAT_RGB888, 90, &_jpg_buf, &_jpg_buf_len);
+ free(out_buf);
+ if (!s) {
+ ESP_LOGE(TAG, "fmt2jpg failed");
+ res = ESP_FAIL;
+ }
+ fr_encode = esp_timer_get_time();
+ }
+ }
+ }
+ }
+#endif
+ }
+ if (res == ESP_OK)
+ {
+ res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
+ }
+ if (res == ESP_OK)
+ {
+ size_t hlen = snprintf((char *)part_buf, 128, _STREAM_PART, _jpg_buf_len, _timestamp.tv_sec, _timestamp.tv_usec);
+ res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
+ }
+ if (res == ESP_OK)
+ {
+ res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
+ }
+ if (fb)
+ {
+ esp_camera_fb_return(fb);
+ fb = NULL;
+ _jpg_buf = NULL;
+ }
+ else if (_jpg_buf)
+ {
+ free(_jpg_buf);
+ _jpg_buf = NULL;
+ }
+ if (res != ESP_OK)
+ {
+ ESP_LOGE(TAG, "send frame failed failed");
+ break;
+ }
+ int64_t fr_end = esp_timer_get_time();
+
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ int64_t ready_time = (fr_ready - fr_start) / 1000;
+ int64_t face_time = (fr_face - fr_ready) / 1000;
+ int64_t recognize_time = (fr_recognize - fr_face) / 1000;
+ int64_t encode_time = (fr_encode - fr_recognize) / 1000;
+ int64_t process_time = (fr_encode - fr_start) / 1000;
+#endif
+
+ int64_t frame_time = fr_end - last_frame;
+ last_frame = fr_end;
+ frame_time /= 1000;
+ uint32_t avg_frame_time = ra_filter_run(&ra_filter, frame_time);
+ ESP_LOGI(TAG, "MJPG: %uB %ums (%.1ffps), AVG: %ums (%.1ffps)"
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ ", %u+%u+%u+%u=%u %s%d"
+#endif
+ ,
+ (uint32_t)(_jpg_buf_len),
+ (uint32_t)frame_time, 1000.0 / (uint32_t)frame_time,
+ avg_frame_time, 1000.0 / avg_frame_time
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ ,
+ (uint32_t)ready_time, (uint32_t)face_time, (uint32_t)recognize_time, (uint32_t)encode_time, (uint32_t)process_time,
+ (detected) ? "DETECTED " : "", face_id
+#endif
+ );
+ }
+
+#ifdef CONFIG_LED_ILLUMINATOR_ENABLED
+ isStreaming = false;
+ enable_led(false);
+#endif
+
+ last_frame = 0;
+ return res;
+}
+
+static esp_err_t parse_get(httpd_req_t *req, char **obuf)
+{
+ char *buf = NULL;
+ size_t buf_len = 0;
+
+ buf_len = httpd_req_get_url_query_len(req) + 1;
+ if (buf_len > 1) {
+ buf = (char *)malloc(buf_len);
+ if (!buf) {
+ httpd_resp_send_500(req);
+ return ESP_FAIL;
+ }
+ if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) {
+ *obuf = buf;
+ return ESP_OK;
+ }
+ free(buf);
+ }
+ httpd_resp_send_404(req);
+ return ESP_FAIL;
+}
+
+static esp_err_t cmd_handler(httpd_req_t *req)
+{
+ char *buf = NULL;
+ char variable[32];
+ char value[32];
+
+ if (parse_get(req, &buf) != ESP_OK) {
+ return ESP_FAIL;
+ }
+ if (httpd_query_key_value(buf, "var", variable, sizeof(variable)) != ESP_OK ||
+ httpd_query_key_value(buf, "val", value, sizeof(value)) != ESP_OK) {
+ free(buf);
+ httpd_resp_send_404(req);
+ return ESP_FAIL;
+ }
+ free(buf);
+
+ int val = atoi(value);
+ ESP_LOGI(TAG, "%s = %d", variable, val);
+ sensor_t *s = esp_camera_sensor_get();
+ int res = 0;
+
+ if (!strcmp(variable, "framesize")) {
+ if (s->pixformat == PIXFORMAT_JPEG) {
+ res = s->set_framesize(s, (framesize_t)val);
+ }
+ }
+ else if (!strcmp(variable, "quality"))
+ res = s->set_quality(s, val);
+ else if (!strcmp(variable, "contrast"))
+ res = s->set_contrast(s, val);
+ else if (!strcmp(variable, "brightness"))
+ res = s->set_brightness(s, val);
+ else if (!strcmp(variable, "saturation"))
+ res = s->set_saturation(s, val);
+ else if (!strcmp(variable, "gainceiling"))
+ res = s->set_gainceiling(s, (gainceiling_t)val);
+ else if (!strcmp(variable, "colorbar"))
+ res = s->set_colorbar(s, val);
+ else if (!strcmp(variable, "awb"))
+ res = s->set_whitebal(s, val);
+ else if (!strcmp(variable, "agc"))
+ res = s->set_gain_ctrl(s, val);
+ else if (!strcmp(variable, "aec"))
+ res = s->set_exposure_ctrl(s, val);
+ else if (!strcmp(variable, "hmirror"))
+ res = s->set_hmirror(s, val);
+ else if (!strcmp(variable, "vflip"))
+ res = s->set_vflip(s, val);
+ else if (!strcmp(variable, "awb_gain"))
+ res = s->set_awb_gain(s, val);
+ else if (!strcmp(variable, "agc_gain"))
+ res = s->set_agc_gain(s, val);
+ else if (!strcmp(variable, "aec_value"))
+ res = s->set_aec_value(s, val);
+ else if (!strcmp(variable, "aec2"))
+ res = s->set_aec2(s, val);
+ else if (!strcmp(variable, "dcw"))
+ res = s->set_dcw(s, val);
+ else if (!strcmp(variable, "bpc"))
+ res = s->set_bpc(s, val);
+ else if (!strcmp(variable, "wpc"))
+ res = s->set_wpc(s, val);
+ else if (!strcmp(variable, "raw_gma"))
+ res = s->set_raw_gma(s, val);
+ else if (!strcmp(variable, "lenc"))
+ res = s->set_lenc(s, val);
+ else if (!strcmp(variable, "special_effect"))
+ res = s->set_special_effect(s, val);
+ else if (!strcmp(variable, "wb_mode"))
+ res = s->set_wb_mode(s, val);
+ else if (!strcmp(variable, "ae_level"))
+ res = s->set_ae_level(s, val);
+#ifdef CONFIG_LED_ILLUMINATOR_ENABLED
+ else if (!strcmp(variable, "led_intensity")) {
+ led_duty = val;
+ if (isStreaming)
+ enable_led(true);
+ }
+#endif
+
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ else if (!strcmp(variable, "face_detect")) {
+ detection_enabled = val;
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ if (!detection_enabled) {
+ recognition_enabled = 0;
+ }
+#endif
+ }
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ else if (!strcmp(variable, "face_enroll")){
+ is_enrolling = !is_enrolling;
+ ESP_LOGI(TAG, "Enrolling: %s", is_enrolling?"true":"false");
+ }
+ else if (!strcmp(variable, "face_recognize")) {
+ recognition_enabled = val;
+ if (recognition_enabled) {
+ detection_enabled = val;
+ }
+ }
+#endif
+#endif
+ else if(!strcmp(variable, "flash") ) {
+ pinMode(4, OUTPUT);
+ digitalWrite(4, atoi(value));
+ flash_enabled = atoi(value);
+ }
+ else {
+ ESP_LOGI(TAG, "Unknown command: %s", variable);
+ res = -1;
+ }
+
+ if (res < 0) {
+ return httpd_resp_send_500(req);
+ }
+
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, NULL, 0);
+}
+
+static int print_reg(char * p, sensor_t * s, uint16_t reg, uint32_t mask){
+ return sprintf(p, "\"0x%x\":%u,", reg, s->get_reg(s, reg, mask));
+}
+
+static esp_err_t status_handler(httpd_req_t *req)
+{
+ static char json_response[1024];
+
+ sensor_t *s = esp_camera_sensor_get();
+ char *p = json_response;
+ *p++ = '{';
+
+ if(s->id.PID == OV5640_PID || s->id.PID == OV3660_PID){
+ for(int reg = 0x3400; reg < 0x3406; reg+=2){
+ p+=print_reg(p, s, reg, 0xFFF);//12 bit
+ }
+ p+=print_reg(p, s, 0x3406, 0xFF);
+
+ p+=print_reg(p, s, 0x3500, 0xFFFF0);//16 bit
+ p+=print_reg(p, s, 0x3503, 0xFF);
+ p+=print_reg(p, s, 0x350a, 0x3FF);//10 bit
+ p+=print_reg(p, s, 0x350c, 0xFFFF);//16 bit
+
+ for(int reg = 0x5480; reg <= 0x5490; reg++){
+ p+=print_reg(p, s, reg, 0xFF);
+ }
+
+ for(int reg = 0x5380; reg <= 0x538b; reg++){
+ p+=print_reg(p, s, reg, 0xFF);
+ }
+
+ for(int reg = 0x5580; reg < 0x558a; reg++){
+ p+=print_reg(p, s, reg, 0xFF);
+ }
+ p+=print_reg(p, s, 0x558a, 0x1FF);//9 bit
+ } else if(s->id.PID == OV2640_PID){
+ p+=print_reg(p, s, 0xd3, 0xFF);
+ p+=print_reg(p, s, 0x111, 0xFF);
+ p+=print_reg(p, s, 0x132, 0xFF);
+ }
+
+ p += sprintf(p, "\"xclk\":%u,", s->xclk_freq_hz / 1000000);
+ p += sprintf(p, "\"pixformat\":%u,", s->pixformat);
+ p += sprintf(p, "\"framesize\":%u,", s->status.framesize);
+ p += sprintf(p, "\"quality\":%u,", s->status.quality);
+ p += sprintf(p, "\"brightness\":%d,", s->status.brightness);
+ p += sprintf(p, "\"contrast\":%d,", s->status.contrast);
+ p += sprintf(p, "\"saturation\":%d,", s->status.saturation);
+ p += sprintf(p, "\"sharpness\":%d,", s->status.sharpness);
+ p += sprintf(p, "\"special_effect\":%u,", s->status.special_effect);
+ p += sprintf(p, "\"wb_mode\":%u,", s->status.wb_mode);
+ p += sprintf(p, "\"awb\":%u,", s->status.awb);
+ p += sprintf(p, "\"awb_gain\":%u,", s->status.awb_gain);
+ p += sprintf(p, "\"aec\":%u,", s->status.aec);
+ p += sprintf(p, "\"aec2\":%u,", s->status.aec2);
+ p += sprintf(p, "\"ae_level\":%d,", s->status.ae_level);
+ p += sprintf(p, "\"aec_value\":%u,", s->status.aec_value);
+ p += sprintf(p, "\"agc\":%u,", s->status.agc);
+ p += sprintf(p, "\"agc_gain\":%u,", s->status.agc_gain);
+ p += sprintf(p, "\"gainceiling\":%u,", s->status.gainceiling);
+ p += sprintf(p, "\"bpc\":%u,", s->status.bpc);
+ p += sprintf(p, "\"wpc\":%u,", s->status.wpc);
+ p += sprintf(p, "\"raw_gma\":%u,", s->status.raw_gma);
+ p += sprintf(p, "\"lenc\":%u,", s->status.lenc);
+ p += sprintf(p, "\"hmirror\":%u,", s->status.hmirror);
+ p += sprintf(p, "\"vflip\":%u,", s->status.vflip);
+ p += sprintf(p, "\"dcw\":%u,", s->status.dcw);
+ p += sprintf(p, "\"colorbar\":%u", s->status.colorbar);
+#ifdef CONFIG_LED_ILLUMINATOR_ENABLED
+ p += sprintf(p, ",\"led_intensity\":%u", led_duty);
+#else
+ p += sprintf(p, ",\"led_intensity\":%d", -1);
+#endif
+#if CONFIG_ESP_FACE_DETECT_ENABLED
+ p += sprintf(p, ",\"face_detect\":%u", detection_enabled);
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ p += sprintf(p, ",\"face_enroll\":%u,", is_enrolling);
+ p += sprintf(p, ",\"face_recognize\":%u", recognition_enabled);
+#endif
+#endif
+ p += sprintf(p, ",\"flash\":%u", flash_enabled);
+ *p++ = '}';
+ *p++ = 0;
+ httpd_resp_set_type(req, "application/json");
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, json_response, strlen(json_response));
+}
+
+static esp_err_t xclk_handler(httpd_req_t *req)
+{
+ char *buf = NULL;
+ char _xclk[32];
+
+ if (parse_get(req, &buf) != ESP_OK) {
+ return ESP_FAIL;
+ }
+ if (httpd_query_key_value(buf, "xclk", _xclk, sizeof(_xclk)) != ESP_OK) {
+ free(buf);
+ httpd_resp_send_404(req);
+ return ESP_FAIL;
+ }
+ free(buf);
+
+ int xclk = atoi(_xclk);
+ ESP_LOGI(TAG, "Set XCLK: %d MHz", xclk);
+
+ sensor_t *s = esp_camera_sensor_get();
+ int res = s->set_xclk(s, LEDC_TIMER_0, xclk);
+ if (res) {
+ return httpd_resp_send_500(req);
+ }
+
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, NULL, 0);
+}
+
+static esp_err_t reg_handler(httpd_req_t *req)
+{
+ char *buf = NULL;
+ char _reg[32];
+ char _mask[32];
+ char _val[32];
+
+ if (parse_get(req, &buf) != ESP_OK) {
+ return ESP_FAIL;
+ }
+ if (httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK ||
+ httpd_query_key_value(buf, "mask", _mask, sizeof(_mask)) != ESP_OK ||
+ httpd_query_key_value(buf, "val", _val, sizeof(_val)) != ESP_OK) {
+ free(buf);
+ httpd_resp_send_404(req);
+ return ESP_FAIL;
+ }
+ free(buf);
+
+ int reg = atoi(_reg);
+ int mask = atoi(_mask);
+ int val = atoi(_val);
+ ESP_LOGI(TAG, "Set Register: reg: 0x%02x, mask: 0x%02x, value: 0x%02x", reg, mask, val);
+
+ sensor_t *s = esp_camera_sensor_get();
+ int res = s->set_reg(s, reg, mask, val);
+ if (res) {
+ return httpd_resp_send_500(req);
+ }
+
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, NULL, 0);
+}
+
+static esp_err_t greg_handler(httpd_req_t *req)
+{
+ char *buf = NULL;
+ char _reg[32];
+ char _mask[32];
+
+ if (parse_get(req, &buf) != ESP_OK) {
+ return ESP_FAIL;
+ }
+ if (httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK ||
+ httpd_query_key_value(buf, "mask", _mask, sizeof(_mask)) != ESP_OK) {
+ free(buf);
+ httpd_resp_send_404(req);
+ return ESP_FAIL;
+ }
+ free(buf);
+
+ int reg = atoi(_reg);
+ int mask = atoi(_mask);
+ sensor_t *s = esp_camera_sensor_get();
+ int res = s->get_reg(s, reg, mask);
+ if (res < 0) {
+ return httpd_resp_send_500(req);
+ }
+ ESP_LOGI(TAG, "Get Register: reg: 0x%02x, mask: 0x%02x, value: 0x%02x", reg, mask, res);
+
+ char buffer[20];
+ const char * val = itoa(res, buffer, 10);
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, val, strlen(val));
+}
+
+static int parse_get_var(char *buf, const char * key, int def)
+{
+ char _int[16];
+ if(httpd_query_key_value(buf, key, _int, sizeof(_int)) != ESP_OK){
+ return def;
+ }
+ return atoi(_int);
+}
+
+static esp_err_t pll_handler(httpd_req_t *req)
+{
+ char *buf = NULL;
+
+ if (parse_get(req, &buf) != ESP_OK) {
+ return ESP_FAIL;
+ }
+
+ int bypass = parse_get_var(buf, "bypass", 0);
+ int mul = parse_get_var(buf, "mul", 0);
+ int sys = parse_get_var(buf, "sys", 0);
+ int root = parse_get_var(buf, "root", 0);
+ int pre = parse_get_var(buf, "pre", 0);
+ int seld5 = parse_get_var(buf, "seld5", 0);
+ int pclken = parse_get_var(buf, "pclken", 0);
+ int pclk = parse_get_var(buf, "pclk", 0);
+ free(buf);
+
+ ESP_LOGI(TAG, "Set Pll: bypass: %d, mul: %d, sys: %d, root: %d, pre: %d, seld5: %d, pclken: %d, pclk: %d", bypass, mul, sys, root, pre, seld5, pclken, pclk);
+ sensor_t *s = esp_camera_sensor_get();
+ int res = s->set_pll(s, bypass, mul, sys, root, pre, seld5, pclken, pclk);
+ if (res) {
+ return httpd_resp_send_500(req);
+ }
+
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, NULL, 0);
+}
+
+static esp_err_t win_handler(httpd_req_t *req)
+{
+ char *buf = NULL;
+
+ if (parse_get(req, &buf) != ESP_OK) {
+ return ESP_FAIL;
+ }
+
+ int startX = parse_get_var(buf, "sx", 0);
+ int startY = parse_get_var(buf, "sy", 0);
+ int endX = parse_get_var(buf, "ex", 0);
+ int endY = parse_get_var(buf, "ey", 0);
+ int offsetX = parse_get_var(buf, "offx", 0);
+ int offsetY = parse_get_var(buf, "offy", 0);
+ int totalX = parse_get_var(buf, "tx", 0);
+ int totalY = parse_get_var(buf, "ty", 0);
+ int outputX = parse_get_var(buf, "ox", 0);
+ int outputY = parse_get_var(buf, "oy", 0);
+ bool scale = parse_get_var(buf, "scale", 0) == 1;
+ bool binning = parse_get_var(buf, "binning", 0) == 1;
+ free(buf);
+
+ ESP_LOGI(TAG, "Set Window: Start: %d %d, End: %d %d, Offset: %d %d, Total: %d %d, Output: %d %d, Scale: %u, Binning: %u", startX, startY, endX, endY, offsetX, offsetY, totalX, totalY, outputX, outputY, scale, binning);
+ sensor_t *s = esp_camera_sensor_get();
+ int res = s->set_res_raw(s, startX, startY, endX, endY, offsetX, offsetY, totalX, totalY, outputX, outputY, scale, binning);
+ if (res) {
+ return httpd_resp_send_500(req);
+ }
+
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, NULL, 0);
+}
+
+static esp_err_t uptime_handler(httpd_req_t *req)
+{
+ char buf[64];
+ sprintf(buf, "{\"seconds\":%ld}", (long)(millis()/1000));
+ httpd_resp_set_type(req, "application/json");
+ httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
+ return httpd_resp_send(req, buf, strlen(buf));
+}
+
+static esp_err_t index_handler(httpd_req_t *req)
+{
+ httpd_resp_set_type(req, "text/html");
+ httpd_resp_set_hdr(req, "Content-Encoding", "gzip");
+ sensor_t *s = esp_camera_sensor_get();
+ if (s != NULL) {
+ if (s->id.PID == OV3660_PID) {
+ return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len);
+ } else if (s->id.PID == OV5640_PID) {
+ return httpd_resp_send(req, (const char *)index_ov5640_html_gz, index_ov5640_html_gz_len);
+ } else {
+ return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len);
+ }
+ } else {
+ ESP_LOGE(TAG, "Camera sensor not found");
+ return httpd_resp_send_500(req);
+ }
+}
+
+void startCameraServer()
+{
+ httpd_config_t config = HTTPD_DEFAULT_CONFIG();
+ config.max_uri_handlers = 16;
+
+ httpd_uri_t index_uri = {
+ .uri = "/",
+ .method = HTTP_GET,
+ .handler = index_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t status_uri = {
+ .uri = "/status",
+ .method = HTTP_GET,
+ .handler = status_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t cmd_uri = {
+ .uri = "/control",
+ .method = HTTP_GET,
+ .handler = cmd_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t capture_uri = {
+ .uri = "/capture",
+ .method = HTTP_GET,
+ .handler = capture_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t stream_uri = {
+ .uri = "/stream",
+ .method = HTTP_GET,
+ .handler = stream_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t bmp_uri = {
+ .uri = "/bmp",
+ .method = HTTP_GET,
+ .handler = bmp_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t xclk_uri = {
+ .uri = "/xclk",
+ .method = HTTP_GET,
+ .handler = xclk_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t reg_uri = {
+ .uri = "/reg",
+ .method = HTTP_GET,
+ .handler = reg_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t greg_uri = {
+ .uri = "/greg",
+ .method = HTTP_GET,
+ .handler = greg_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t pll_uri = {
+ .uri = "/pll",
+ .method = HTTP_GET,
+ .handler = pll_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t win_uri = {
+ .uri = "/resolution",
+ .method = HTTP_GET,
+ .handler = win_handler,
+ .user_ctx = NULL};
+
+ httpd_uri_t uptime_uri = {
+ .uri = "/uptime",
+ .method = HTTP_GET,
+ .handler = uptime_handler,
+ .user_ctx = NULL};
+
+ ra_filter_init(&ra_filter, 20);
+
+#if CONFIG_ESP_FACE_RECOGNITION_ENABLED
+ recognizer.set_partition(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "fr");
+
+ // load ids from flash partition
+ recognizer.set_ids_from_flash();
+#endif
+ ESP_LOGI(TAG, "Starting web server on port: '%d'", config.server_port);
+ if (httpd_start(&camera_httpd, &config) == ESP_OK)
+ {
+ httpd_register_uri_handler(camera_httpd, &index_uri);
+ httpd_register_uri_handler(camera_httpd, &cmd_uri);
+ httpd_register_uri_handler(camera_httpd, &status_uri);
+ httpd_register_uri_handler(camera_httpd, &capture_uri);
+ httpd_register_uri_handler(camera_httpd, &bmp_uri);
+
+ httpd_register_uri_handler(camera_httpd, &xclk_uri);
+ httpd_register_uri_handler(camera_httpd, &reg_uri);
+ httpd_register_uri_handler(camera_httpd, &greg_uri);
+ httpd_register_uri_handler(camera_httpd, &pll_uri);
+ httpd_register_uri_handler(camera_httpd, &win_uri);
+ httpd_register_uri_handler(camera_httpd, &uptime_uri);
+ }
+
+ config.server_port += 1;
+ config.ctrl_port += 1;
+ ESP_LOGI(TAG, "Starting stream server on port: '%d'", config.server_port);
+ if (httpd_start(&stream_httpd, &config) == ESP_OK)
+ {
+ httpd_register_uri_handler(stream_httpd, &stream_uri);
+ }
+}
diff --git a/arduino/ESP32CameraWebServer/camera_index.h b/arduino/ESP32CameraWebServer/camera_index.h
new file mode 100644
index 0000000..5ca12e9
--- /dev/null
+++ b/arduino/ESP32CameraWebServer/camera_index.h
@@ -0,0 +1,1570 @@
+
+
+//File: index_ov2640.html.gz, Size: 6787
+#define index_ov2640_html_gz_len 6787
+const uint8_t index_ov2640_html_gz[] = {
+0x1F, 0x8B, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xED, 0x3D, 0x6B, 0x73, 0xDB, 0x46,
+0x92, 0xDF, 0xFD, 0x2B, 0x60, 0x24, 0x6B, 0x92, 0x25, 0x92, 0x22, 0x29, 0x4A, 0x96, 0x15, 0x89,
+0x3E, 0x5B, 0x96, 0x1F, 0xB5, 0x76, 0xE2, 0xB5, 0x12, 0xC7, 0x5B, 0xA9, 0x2D, 0x07, 0x24, 0x86,
+0x24, 0x62, 0x10, 0xE0, 0x02, 0xA0, 0x48, 0x26, 0xA5, 0xDF, 0x71, 0x3F, 0xE8, 0xFE, 0xD8, 0x75,
+0xCF, 0x03, 0x18, 0x00, 0x83, 0x17, 0x29, 0x91, 0x5E, 0xDF, 0xD1, 0xA9, 0x08, 0x8F, 0xE9, 0x9E,
+0x7E, 0x77, 0xCF, 0x0C, 0x06, 0x38, 0x7F, 0x68, 0xBA, 0xA3, 0x60, 0x3D, 0x27, 0xDA, 0x34, 0x98,
+0xD9, 0x83, 0x07, 0xE7, 0xEC, 0x8F, 0x06, 0xBF, 0xF3, 0x29, 0x31, 0x4C, 0x76, 0x48, 0x4F, 0x67,
+0x24, 0x30, 0xB4, 0xD1, 0xD4, 0xF0, 0x7C, 0x12, 0x5C, 0xE8, 0x8B, 0x60, 0xDC, 0x3A, 0xD5, 0x93,
+0xB7, 0x1D, 0x63, 0x46, 0x2E, 0xF4, 0x1B, 0x8B, 0x2C, 0xE7, 0xAE, 0x17, 0xE8, 0xDA, 0xC8, 0x75,
+0x02, 0xE2, 0x40, 0xF3, 0xA5, 0x65, 0x06, 0xD3, 0x0B, 0x93, 0xDC, 0x58, 0x23, 0xD2, 0xA2, 0x27,
+0x4D, 0xCB, 0xB1, 0x02, 0xCB, 0xB0, 0x5B, 0xFE, 0xC8, 0xB0, 0xC9, 0x45, 0x57, 0xC6, 0x15, 0x58,
+0x81, 0x4D, 0x06, 0x57, 0xD7, 0xEF, 0x8F, 0x7A, 0xDA, 0x4F, 0x1F, 0x7B, 0xFD, 0x93, 0xCE, 0xF9,
+0x21, 0xBB, 0x16, 0xB5, 0xF1, 0x83, 0xB5, 0x7C, 0x8E, 0xBF, 0xA1, 0x6B, 0xAE, 0xB5, 0xBF, 0x62,
+0x97, 0xF0, 0x37, 0x06, 0x22, 0x5A, 0x63, 0x63, 0x66, 0xD9, 0xEB, 0x33, 0xED, 0x99, 0x07, 0x7D,
+0x36, 0x5F, 0x13, 0xFB, 0x86, 0x04, 0xD6, 0xC8, 0x68, 0xFA, 0x86, 0xE3, 0xB7, 0x7C, 0xE2, 0x59,
+0xE3, 0x1F, 0x52, 0x80, 0x43, 0x63, 0xF4, 0x65, 0xE2, 0xB9, 0x0B, 0xC7, 0x3C, 0xD3, 0xBE, 0xEB,
+0x9E, 0xE2, 0xBF, 0x74, 0xA3, 0x91, 0x6B, 0xBB, 0x1E, 0xDC, 0xBF, 0x7A, 0x89, 0xFF, 0xD2, 0xF7,
+0x69, 0xEF, 0xBE, 0xF5, 0x27, 0x39, 0xD3, 0xBA, 0x27, 0xF3, 0x55, 0xEC, 0xFE, 0xED, 0x83, 0xD8,
+0xE9, 0xB4, 0x97, 0x45, 0x3D, 0x87, 0x3F, 0xCD, 0x87, 0xF7, 0xC9, 0x28, 0xB0, 0x5C, 0xA7, 0x3D,
+0x33, 0x2C, 0x47, 0x81, 0xC9, 0xB4, 0xFC, 0xB9, 0x6D, 0x80, 0x0C, 0xC6, 0x36, 0xC9, 0xC5, 0xF3,
+0xDD, 0x8C, 0x38, 0x8B, 0x66, 0x01, 0x36, 0x44, 0xD2, 0x32, 0x2D, 0x8F, 0xB5, 0x3A, 0x43, 0x39,
+0x2C, 0x66, 0x4E, 0x21, 0xDA, 0x3C, 0xBA, 0x1C, 0xD7, 0x21, 0x0A, 0x01, 0x62, 0x47, 0x4B, 0xCF,
+0x98, 0x63, 0x03, 0xFC, 0x9B, 0x6E, 0x32, 0xB3, 0x1C, 0x66, 0x54, 0x67, 0xDA, 0x51, 0xBF, 0x33,
+0x5F, 0x15, 0xA8, 0xF2, 0xE8, 0x04, 0xFF, 0xA5, 0x1B, 0xCD, 0x0D, 0xD3, 0xB4, 0x9C, 0xC9, 0x99,
+0x76, 0xAA, 0x44, 0xE1, 0x7A, 0x26, 0xF1, 0x5A, 0x9E, 0x61, 0x5A, 0x0B, 0xFF, 0x4C, 0xEB, 0xAB,
+0xDA, 0xCC, 0x0C, 0x6F, 0x02, 0xB4, 0x04, 0x2E, 0x10, 0xDB, 0xEA, 0x2A, 0x29, 0xE1, 0x4D, 0x3C,
+0x6B, 0x32, 0x0D, 0x40, 0xA5, 0xA9, 0x36, 0x49, 0xA1, 0x71, 0x17, 0x2A, 0xD2, 0x67, 0xAE, 0xDC,
+0xD4, 0x52, 0x33, 0x6C, 0x6B, 0xE2, 0xB4, 0xAC, 0x80, 0xCC, 0x80, 0x1D, 0x3F, 0xF0, 0x48, 0x30,
+0x9A, 0xE6, 0x91, 0x32, 0xB6, 0x26, 0x0B, 0x8F, 0x28, 0x08, 0x09, 0xE5, 0x96, 0xC3, 0x30, 0xDC,
+0x4C, 0xDF, 0x6A, 0x2D, 0xC9, 0xF0, 0x8B, 0x15, 0xB4, 0xB8, 0x4C, 0x86, 0x64, 0xEC, 0x7A, 0x44,
+0xD9, 0x52, 0xB4, 0xB0, 0xDD, 0xD1, 0x97, 0x96, 0x1F, 0x18, 0x5E, 0x50, 0x06, 0xA1, 0x31, 0x0E,
+0x88, 0x57, 0x8C, 0x8F, 0xA0, 0x55, 0x14, 0x63, 0xCB, 0xEE, 0x96, 0x37, 0xB0, 0x1C, 0xDB, 0x72,
+0x48, 0x79, 0xF2, 0xB2, 0xFA, 0x8D, 0xA3, 0x63, 0xAD, 0x4A, 0x28, 0xC6, 0x9A, 0x4D, 0xF2, 0xAC,
+0x84, 0xF2, 0x9A, 0xEE, 0x8C, 0xFB, 0x4D, 0xB7, 0xD3, 0xF9, 0x5B, 0xFA, 0xE6, 0x94, 0x30, 0x33,
+0x35, 0x16, 0x81, 0xBB, 0xBD, 0x47, 0xA4, 0xDC, 0x2A, 0xC1, 0xC7, 0x7F, 0xCD, 0x88, 0x69, 0x19,
+0x5A, 0x5D, 0x72, 0xE7, 0xD3, 0x0E, 0xD8, 0x54, 0x43, 0x33, 0x1C, 0x53, 0xAB, 0xBB, 0x9E, 0x05,
+0x8E, 0x60, 0xD0, 0x70, 0x63, 0xC3, 0x15, 0x48, 0x1C, 0x73, 0xD2, 0x50, 0xB0, 0x9C, 0xE3, 0x33,
+0xB2, 0x44, 0xD4, 0x6E, 0x83, 0xBF, 0x12, 0x21, 0x07, 0x7F, 0x85, 0x0E, 0xA4, 0xE0, 0x91, 0xA2,
+0xCF, 0xD3, 0x97, 0x4C, 0x61, 0x96, 0xCE, 0xF0, 0x37, 0x33, 0x56, 0xAD, 0x5C, 0xDD, 0x89, 0x46,
+0x42, 0x87, 0x90, 0x66, 0x47, 0x75, 0x68, 0x7A, 0x33, 0xD5, 0x5A, 0x1A, 0x46, 0xC9, 0x86, 0x1A,
+0x86, 0x23, 0x55, 0xAB, 0x1C, 0x7F, 0xB2, 0x51, 0x54, 0x60, 0x57, 0xCD, 0x6A, 0x14, 0x3B, 0xD8,
+0x3F, 0x95, 0x0D, 0x31, 0x4E, 0x32, 0xA3, 0x08, 0xFE, 0xCA, 0x47, 0x92, 0x08, 0x59, 0x61, 0x34,
+0x51, 0x20, 0xCE, 0x8E, 0x28, 0x29, 0xBC, 0x59, 0xDE, 0xAD, 0xC0, 0x9A, 0x4F, 0x42, 0xD9, 0xE8,
+0xA2, 0x40, 0x9C, 0x47, 0x43, 0x61, 0x94, 0xC1, 0xDF, 0x6D, 0x89, 0x7A, 0xE3, 0xBB, 0xE1, 0x22,
+0x08, 0x5C, 0xC7, 0xDF, 0x2A, 0x45, 0x65, 0xF9, 0xD9, 0x1F, 0x0B, 0x3F, 0xB0, 0xC6, 0xEB, 0x16,
+0x77, 0x69, 0xF0, 0xB3, 0xB9, 0x01, 0x25, 0xE4, 0x90, 0x04, 0x4B, 0x42, 0xF2, 0xCB, 0x0D, 0xC7,
+0xB8, 0x81, 0xB8, 0x33, 0x99, 0xD8, 0x2A, 0xDB, 0x1B, 0x2D, 0x3C, 0x1F, 0xEB, 0xB6, 0xB9, 0x6B,
+0x01, 0x62, 0x2F, 0xDD, 0x71, 0xDC, 0x07, 0x4B, 0x76, 0xD4, 0x1A, 0x0D, 0x15, 0x7D, 0xB9, 0x8B,
+0x00, 0x65, 0xAC, 0xD4, 0x84, 0x0B, 0xEC, 0x58, 0xC1, 0x5A, 0x79, 0x8F, 0x7B, 0xA2, 0xE2, 0x8E,
+0x70, 0xC1, 0xDC, 0xB4, 0x10, 0xA7, 0xEB, 0x6C, 0x34, 0x25, 0xA3, 0x2F, 0xC4, 0x3C, 0x28, 0x2C,
+0xC3, 0x8A, 0xCA, 0xC3, 0xB6, 0xE5, 0xCC, 0x17, 0x41, 0x0B, 0xCB, 0xA9, 0xF9, 0xBD, 0xE8, 0x9C,
+0x1A, 0xA4, 0x60, 0xB1, 0xD7, 0xCB, 0x2B, 0x2A, 0x8E, 0xE7, 0xAB, 0x7C, 0x21, 0xC8, 0xC4, 0x0E,
+0x6C, 0x63, 0x48, 0xEC, 0x3C, 0x92, 0xB9, 0x33, 0x64, 0x84, 0x5D, 0x1E, 0xAB, 0xB2, 0x6B, 0x37,
+0x4A, 0x59, 0x94, 0xBC, 0xFA, 0x8F, 0xFF, 0x56, 0x5A, 0x8E, 0xF4, 0xB8, 0x19, 0xBB, 0xE4, 0x13,
+0x1B, 0x1C, 0x2C, 0xAB, 0xF4, 0x86, 0x36, 0x4B, 0xA0, 0x21, 0xB7, 0x03, 0xCF, 0x70, 0x26, 0x04,
+0x62, 0xC1, 0xAA, 0x29, 0x0E, 0xF3, 0x07, 0x06, 0xA5, 0xD8, 0xC7, 0x50, 0x7D, 0x9C, 0x3F, 0x10,
+0x61, 0x01, 0xA1, 0xA9, 0xB5, 0xD9, 0xC1, 0x06, 0x55, 0x89, 0xA4, 0xDF, 0x5C, 0x42, 0xBA, 0x4A,
+0xEB, 0x60, 0x85, 0x89, 0xD2, 0x73, 0xE2, 0xB6, 0xA5, 0x2C, 0xF4, 0x0B, 0x43, 0x83, 0x18, 0xF2,
+0x8D, 0xC7, 0x45, 0x83, 0xC6, 0xF1, 0xF8, 0xA8, 0x73, 0xD4, 0x2F, 0xAC, 0x9C, 0x94, 0x5C, 0x26,
+0x06, 0x8E, 0x8A, 0xD0, 0x11, 0x86, 0x95, 0x5C, 0x23, 0xF0, 0x8D, 0x1B, 0x65, 0xD1, 0xEE, 0xFA,
+0x16, 0x1B, 0xB9, 0x19, 0x43, 0x1F, 0xC6, 0x6E, 0x81, 0x62, 0xE8, 0xC5, 0x0D, 0xBD, 0xA7, 0xA4,
+0x8F, 0x96, 0x74, 0x4A, 0x17, 0x10, 0xE2, 0x55, 0x93, 0x1D, 0xD3, 0x80, 0xBA, 0x89, 0xA4, 0x60,
+0x65, 0x51, 0x19, 0x90, 0x55, 0xD0, 0x32, 0xC9, 0xC8, 0xF5, 0x58, 0x35, 0x98, 0x31, 0x72, 0x4C,
+0x28, 0xB2, 0xD8, 0x62, 0xCF, 0xA6, 0xEE, 0x0D, 0xF1, 0x14, 0xC2, 0x4A, 0x28, 0xB5, 0xFF, 0xA4,
+0x6F, 0x96, 0xC0, 0x66, 0x40, 0x7A, 0x54, 0xCA, 0x3E, 0x8E, 0xAE, 0xD7, 0x1D, 0xF5, 0x72, 0xFD,
+0x98, 0xA1, 0x6B, 0x83, 0xCF, 0x18, 0x43, 0x9B, 0x98, 0x39, 0xD9, 0xCC, 0x24, 0x63, 0x63, 0x61,
+0x07, 0x05, 0x56, 0x69, 0x74, 0xF0, 0x5F, 0x5E, 0x8F, 0x34, 0x0C, 0xFD, 0x86, 0xF3, 0x42, 0x17,
+0x34, 0x70, 0xFC, 0x4B, 0xD1, 0xA7, 0x28, 0x35, 0x8C, 0xF9, 0x9C, 0x18, 0xD0, 0x6A, 0x44, 0xB2,
+0xF4, 0x50, 0x6A, 0x88, 0xA1, 0x8E, 0xF3, 0xA5, 0xC6, 0xED, 0x85, 0x0E, 0x1B, 0x16, 0x8F, 0x95,
+0x78, 0x3E, 0x1B, 0xBB, 0xA3, 0x85, 0xAA, 0xAA, 0x29, 0xE7, 0x78, 0x69, 0x7C, 0x67, 0x42, 0x64,
+0xBE, 0x6D, 0x51, 0xF7, 0x5F, 0x38, 0x0E, 0x6A, 0xB4, 0x15, 0x78, 0xC0, 0xA6, 0xA2, 0xA3, 0x72,
+0x82, 0xDB, 0x28, 0x86, 0xC5, 0x04, 0x9B, 0x35, 0x77, 0x95, 0x08, 0x53, 0x8A, 0x70, 0x1A, 0x46,
+0x5A, 0x0D, 0x62, 0x88, 0x65, 0x0A, 0x54, 0xDB, 0xC9, 0x25, 0x98, 0x2E, 0x66, 0xAA, 0x3A, 0x4A,
+0x74, 0xD6, 0x85, 0xA4, 0xCF, 0xBA, 0xF3, 0x26, 0x43, 0xA3, 0xDE, 0x69, 0x76, 0x9A, 0x47, 0xF0,
+0x3F, 0xC5, 0x78, 0x26, 0xDF, 0xB8, 0xB8, 0x78, 0x33, 0x2C, 0x2F, 0x11, 0xA2, 0x8B, 0xA7, 0x95,
+0xB2, 0x82, 0x7D, 0xA1, 0x2E, 0xCA, 0x7B, 0x52, 0x7C, 0x7E, 0xA9, 0xDB, 0x2E, 0xC8, 0xC3, 0x19,
+0x26, 0x5D, 0xDD, 0x10, 0x15, 0xD6, 0x52, 0x55, 0xC5, 0x33, 0xF7, 0xCF, 0x16, 0x2B, 0x42, 0xFE,
+0xCF, 0x5B, 0xBB, 0x24, 0x8A, 0x6F, 0xDA, 0xD2, 0x2B, 0xCB, 0xC5, 0xDF, 0xB7, 0x6D, 0x74, 0xB2,
+0xB5, 0xDE, 0xE2, 0x55, 0x1F, 0x50, 0xE8, 0xC0, 0x18, 0xD4, 0x83, 0xC1, 0x68, 0x66, 0x65, 0x28,
+0xB5, 0xD9, 0x40, 0x06, 0x63, 0xCB, 0xB6, 0x5B, 0xB6, 0xBB, 0x2C, 0xAE, 0x44, 0xF2, 0x2D, 0x39,
+0x65, 0xA7, 0xC5, 0x26, 0xBF, 0x29, 0xB5, 0x0B, 0x88, 0x5C, 0xFF, 0x11, 0xD4, 0x7E, 0xDB, 0x0E,
+0x97, 0xEB, 0x1A, 0x9B, 0x25, 0x8A, 0x0D, 0xEC, 0x71, 0xBB, 0x8E, 0x4A, 0x99, 0x12, 0xAB, 0x04,
+0xF3, 0x87, 0x3D, 0x4B, 0x2B, 0x18, 0x4D, 0x37, 0x18, 0x7A, 0x46, 0x03, 0x23, 0x8F, 0xD8, 0x06,
+0x56, 0xF0, 0x1B, 0xCD, 0x50, 0x14, 0x0E, 0xDF, 0x64, 0xF0, 0x32, 0x9C, 0x50, 0xD1, 0x7D, 0x3D,
+0xB3, 0x4B, 0x6D, 0x56, 0x3B, 0x64, 0xC7, 0x6A, 0xB5, 0x59, 0x17, 0x94, 0xFB, 0x71, 0xCF, 0x50,
+0x37, 0xAA, 0x10, 0xD1, 0x45, 0xD0, 0x9E, 0x78, 0x64, 0x5D, 0x82, 0x99, 0x26, 0xFF, 0x7B, 0xC6,
+0xE6, 0x8F, 0x37, 0x9F, 0x2A, 0xA1, 0x09, 0x80, 0x5B, 0x51, 0xBB, 0xEF, 0x97, 0xE8, 0x3A, 0xBB,
+0xCB, 0x32, 0xF6, 0x18, 0xCE, 0x8E, 0xEA, 0x7A, 0x89, 0x70, 0x93, 0x93, 0x42, 0xD5, 0xA6, 0x2A,
+0xB2, 0xAF, 0x7A, 0x3C, 0x4F, 0xC6, 0x41, 0xC6, 0xE2, 0x0F, 0xAD, 0x53, 0x8F, 0xF2, 0xA3, 0x5B,
+0x4B, 0x9A, 0x4D, 0x29, 0x8C, 0x1C, 0xE1, 0x24, 0x66, 0xB6, 0xF5, 0x29, 0x31, 0x63, 0xF4, 0xAC,
+0x8C, 0x3C, 0x5B, 0x25, 0xA2, 0x7C, 0xA6, 0x6A, 0x86, 0x36, 0x33, 0x9E, 0xF2, 0x41, 0x3D, 0xE4,
+0x53, 0xBD, 0x77, 0xA2, 0x5C, 0x5B, 0xC9, 0x69, 0x9C, 0x47, 0x5A, 0xE6, 0x2C, 0x60, 0x3A, 0x65,
+0x65, 0x0E, 0x90, 0xE5, 0x58, 0xA4, 0x54, 0x54, 0xBE, 0x57, 0xE6, 0x45, 0x98, 0xF4, 0x4C, 0x56,
+0xAE, 0xB1, 0x5B, 0x33, 0x03, 0xCA, 0x5E, 0x34, 0x57, 0x03, 0x30, 0xAA, 0xF4, 0x57, 0xC6, 0xDC,
+0xA5, 0x39, 0xD6, 0xEE, 0x49, 0xA7, 0xA0, 0xCB, 0x91, 0xED, 0xFA, 0x5B, 0x4E, 0x80, 0x65, 0xCF,
+0x7F, 0x29, 0xEF, 0x94, 0x4A, 0xDD, 0xB9, 0x3E, 0x95, 0xEF, 0x8E, 0x09, 0x99, 0x77, 0x3B, 0xCA,
+0x48, 0x9B, 0x3B, 0x4B, 0x49, 0x67, 0xD0, 0xE8, 0xFA, 0xE5, 0x99, 0x36, 0x22, 0xEA, 0x30, 0x1A,
+0x9F, 0xA8, 0x2B, 0x33, 0x55, 0x9A, 0xAB, 0x87, 0xA9, 0x65, 0x9A, 0x24, 0x77, 0x2E, 0x18, 0xC7,
+0xBC, 0x25, 0x8B, 0x07, 0xA4, 0x5F, 0x35, 0x29, 0x75, 0x2F, 0x4E, 0x91, 0xFB, 0x58, 0x43, 0xF7,
+0xBE, 0x3D, 0x86, 0x27, 0x9A, 0xAC, 0x99, 0xF4, 0x78, 0x29, 0x92, 0x4B, 0xAA, 0xD2, 0xB9, 0xC3,
+0xB9, 0x56, 0x14, 0x19, 0xC8, 0x01, 0x5B, 0xA5, 0xA3, 0x79, 0x82, 0x2A, 0xBA, 0x90, 0xD2, 0xE6,
+0x6B, 0x4B, 0x7C, 0x19, 0xB0, 0x95, 0xB5, 0xBA, 0x72, 0x87, 0x4B, 0x6D, 0xD4, 0x02, 0x92, 0xFD,
+0x66, 0x8A, 0x66, 0x4F, 0x95, 0x51, 0x0E, 0x91, 0x61, 0x8A, 0x11, 0x0F, 0x57, 0xC5, 0x5B, 0x6D,
+0xEA, 0x1C, 0xE7, 0x87, 0xD2, 0xD3, 0x70, 0xE7, 0x87, 0xD1, 0x83, 0x7B, 0xE7, 0xF8, 0x48, 0x9C,
+0xFC, 0xD0, 0x1C, 0xEF, 0x67, 0x64, 0x1B, 0xBE, 0x7F, 0xA1, 0xE3, 0xA3, 0x5D, 0x7A, 0xFC, 0x19,
+0xBA, 0x73, 0xD3, 0xBA, 0xD1, 0x2C, 0xF3, 0x42, 0xB7, 0xDD, 0x89, 0x9B, 0xB8, 0x47, 0xEF, 0x33,
+0x2D, 0x43, 0x1E, 0xBB, 0xD0, 0x63, 0xEB, 0x8B, 0x3A, 0x85, 0x8A, 0x2E, 0xE9, 0x83, 0x47, 0xDF,
+0x3D, 0x79, 0xFC, 0xF8, 0xE4, 0x87, 0x47, 0xCE, 0xD0, 0x9F, 0xF3, 0xFF, 0xFF, 0xCC, 0x96, 0x63,
+0x7F, 0xFA, 0xD8, 0x3B, 0xE9, 0xC3, 0x70, 0x8F, 0x04, 0x01, 0x98, 0x9E, 0x7F, 0x7E, 0x48, 0x91,
+0x26, 0x08, 0x39, 0x04, 0x4A, 0x32, 0x68, 0xE3, 0xE5, 0x8E, 0x8A, 0x3C, 0xD1, 0xC4, 0x87, 0x0C,
+0x3E, 0x34, 0x3C, 0x45, 0x13, 0xDA, 0x8C, 0x15, 0xD3, 0x34, 0x94, 0xE8, 0x54, 0x27, 0x43, 0x77,
+0x95, 0xE4, 0x80, 0x32, 0xC5, 0x15, 0xC6, 0x5B, 0x11, 0x33, 0x0B, 0x21, 0x80, 0x51, 0x70, 0x5C,
+0x5C, 0x85, 0x36, 0xCA, 0x46, 0x31, 0x15, 0x60, 0xE3, 0xD5, 0xC8, 0xFE, 0x22, 0x74, 0xAF, 0x0B,
+0xA5, 0x38, 0x6E, 0xC0, 0x42, 0x65, 0x46, 0x57, 0x31, 0x56, 0x39, 0x8C, 0xB4, 0x6C, 0xC8, 0xB8,
+0x00, 0xD1, 0xB6, 0x28, 0x76, 0x76, 0x2D, 0x1F, 0x13, 0xC5, 0x26, 0xE9, 0x55, 0x00, 0xEB, 0x83,
+0x4F, 0x97, 0x6F, 0xFF, 0xAE, 0xBD, 0x7B, 0xFD, 0xA7, 0x52, 0x43, 0x45, 0x44, 0x61, 0x8C, 0x2E,
+0xD1, 0x33, 0x05, 0x63, 0xFA, 0x10, 0x32, 0xD1, 0xB9, 0x66, 0x28, 0x06, 0xCC, 0xF6, 0x36, 0x71,
+0x26, 0xC1, 0xF4, 0x42, 0xEF, 0xEA, 0xF8, 0x48, 0x8B, 0x38, 0xEB, 0xE9, 0x1A, 0xC6, 0x6F, 0x7A,
+0x70, 0x63, 0xD8, 0x0B, 0x3C, 0xEA, 0x94, 0xE1, 0x35, 0x6D, 0x5A, 0xCA, 0x66, 0x3C, 0xB0, 0x84,
+0x32, 0x96, 0x02, 0x71, 0x5C, 0xCA, 0xFA, 0xE0, 0x9A, 0x04, 0xE7, 0x87, 0xEC, 0x56, 0x81, 0xD6,
+0xF2, 0xFB, 0x06, 0x4F, 0x66, 0xE6, 0x90, 0x67, 0x42, 0x79, 0x8A, 0x1F, 0x7B, 0xC6, 0x8C, 0xA0,
+0x54, 0x4A, 0x69, 0x5E, 0xD6, 0x7A, 0x08, 0xA9, 0x0F, 0x3E, 0x10, 0x5A, 0x10, 0x01, 0x19, 0xA5,
+0x14, 0x7F, 0xCE, 0x6B, 0xD4, 0x58, 0xFF, 0xA1, 0x3D, 0xF3, 0x35, 0xA9, 0x96, 0xC1, 0xCC, 0xBC,
+0x84, 0xDC, 0x1F, 0xB6, 0x5A, 0x5A, 0xEF, 0xDD, 0x7B, 0xAD, 0xD5, 0x2A, 0xD1, 0xD8, 0x9D, 0x53,
+0x77, 0xE2, 0xFA, 0xEF, 0x1E, 0xE9, 0x83, 0x5F, 0x3E, 0xBD, 0x7A, 0x56, 0x87, 0xBA, 0xB0, 0xB3,
+0xEA, 0xF6, 0x3A, 0x9D, 0xC6, 0xF9, 0x21, 0x6B, 0x52, 0x1D, 0x57, 0x0F, 0xF4, 0x4A, 0x71, 0xF5,
+0x4E, 0x01, 0x57, 0xA7, 0xD7, 0xDF, 0x02, 0x57, 0x57, 0x1F, 0xBC, 0x7E, 0xC1, 0x30, 0x3D, 0xEE,
+0x6D, 0x43, 0x14, 0x18, 0x38, 0xA5, 0x09, 0xC8, 0x59, 0x3D, 0x3E, 0x39, 0xDD, 0x1C, 0xD3, 0x13,
+0xE0, 0xEE, 0x23, 0x60, 0x3A, 0x05, 0x41, 0x9D, 0x6C, 0x23, 0xA7, 0x53, 0x7D, 0x80, 0x78, 0x20,
+0xA2, 0xAF, 0xFA, 0xA7, 0x5B, 0xE0, 0x79, 0x0C, 0x22, 0x42, 0x44, 0x80, 0x64, 0x75, 0xB4, 0x8D,
+0x8C, 0x4E, 0xF4, 0xC1, 0xE5, 0x9B, 0x97, 0xF5, 0x3E, 0x30, 0xD6, 0x7B, 0x72, 0xB2, 0x39, 0x9E,
+0x63, 0x7D, 0xF0, 0x0F, 0x24, 0x08, 0x88, 0x59, 0xF5, 0xFA, 0x5B, 0x10, 0xD4, 0xD7, 0x07, 0x00,
+0x8F, 0x38, 0x36, 0x46, 0x01, 0x76, 0xFD, 0x9A, 0x12, 0x83, 0x88, 0xBA, 0x8F, 0xB7, 0xE0, 0x0A,
+0xAC, 0xFA, 0x1F, 0x28, 0x1E, 0x40, 0xB2, 0xEA, 0xF6, 0xB7, 0xB1, 0x69, 0x40, 0x44, 0x49, 0x02,
+0x5F, 0x43, 0x57, 0xDB, 0x1C, 0x13, 0xD8, 0xF4, 0x93, 0x93, 0xD5, 0x93, 0x93, 0x72, 0x08, 0x30,
+0x46, 0x62, 0xBC, 0xC9, 0x8B, 0xA2, 0xF9, 0x41, 0x36, 0x2F, 0x80, 0xFE, 0x7B, 0x01, 0xC3, 0xA2,
+0x60, 0x5D, 0x39, 0x7C, 0x72, 0x38, 0x90, 0x09, 0x3B, 0x28, 0x17, 0x39, 0x25, 0x4A, 0xC2, 0x27,
+0x74, 0xF4, 0x41, 0xBF, 0x44, 0x86, 0x8A, 0x95, 0x30, 0x14, 0x36, 0x46, 0x3F, 0x4D, 0x9B, 0x68,
+0x79, 0x98, 0x30, 0xC1, 0x25, 0x8E, 0x74, 0x29, 0x82, 0x6C, 0x14, 0x9A, 0x15, 0xB4, 0x1A, 0x2B,
+0x7D, 0x70, 0x72, 0x54, 0x98, 0xD2, 0x36, 0x57, 0xC6, 0x90, 0x0E, 0xC0, 0x1D, 0xE2, 0xFB, 0x95,
+0xF5, 0x11, 0x81, 0xEA, 0x83, 0xE7, 0xE1, 0xF1, 0x36, 0x5A, 0x69, 0xF5, 0xB6, 0x50, 0x8B, 0x44,
+0x0E, 0xD3, 0x4C, 0xAB, 0xC7, 0x55, 0x13, 0x15, 0x2F, 0x77, 0xAB, 0x98, 0x22, 0x6A, 0xB7, 0xD1,
+0x0B, 0x16, 0xE0, 0x9E, 0xE1, 0x07, 0x95, 0xB5, 0x22, 0x00, 0x21, 0x42, 0xF3, 0xA3, 0xBD, 0x69,
+0x24, 0x24, 0xE5, 0x1B, 0xD0, 0x87, 0x6F, 0x04, 0x0B, 0xF6, 0x2C, 0x54, 0x65, 0x8D, 0x44, 0xA0,
+0x50, 0x0F, 0x84, 0xC7, 0x7B, 0xD3, 0x8A, 0x44, 0xCE, 0xB7, 0xA0, 0x97, 0x39, 0x19, 0x59, 0x86,
+0xFD, 0x99, 0x8C, 0xC7, 0x90, 0xB0, 0xAA, 0xEB, 0x26, 0x06, 0x0E, 0xFA, 0x61, 0xE7, 0xDA, 0x15,
+0x3D, 0xAF, 0x5C, 0x9B, 0x27, 0xD0, 0x6D, 0x5E, 0xA0, 0x27, 0xB3, 0x37, 0x9F, 0xA4, 0x26, 0x74,
+0x48, 0xC4, 0x8E, 0xF4, 0xC1, 0x8F, 0x6E, 0x48, 0xE7, 0xE6, 0x05, 0xC6, 0x8F, 0x64, 0x42, 0xE7,
+0x80, 0xB7, 0xA9, 0x76, 0x5E, 0x79, 0xC6, 0x9A, 0x6E, 0x32, 0xDC, 0xA6, 0xF8, 0xFA, 0x40, 0x4C,
+0xED, 0x67, 0xCB, 0xD9, 0x9C, 0x99, 0x3E, 0x12, 0x42, 0x88, 0xB3, 0x1D, 0x16, 0x28, 0x49, 0x9F,
+0xC3, 0xC1, 0x76, 0x48, 0x4E, 0x70, 0xBC, 0x3A, 0xB7, 0x8C, 0xAF, 0xA1, 0xDC, 0x32, 0x96, 0xC3,
+0xCA, 0x6E, 0x01, 0x30, 0xFA, 0xE0, 0xD9, 0xAF, 0xCF, 0x2B, 0x07, 0x29, 0xB6, 0x92, 0x5A, 0xC6,
+0xC2, 0xA3, 0xF9, 0x08, 0xEC, 0x2C, 0x35, 0x51, 0xA4, 0xF6, 0x9C, 0xB2, 0x93, 0x45, 0x0A, 0xBE,
+0x04, 0x81, 0x74, 0xE1, 0x49, 0x97, 0xD8, 0x2C, 0xC7, 0xE3, 0xFD, 0x45, 0x30, 0x20, 0xE2, 0xF3,
+0xC4, 0xB0, 0xAA, 0xE7, 0x15, 0x01, 0x48, 0x35, 0xA5, 0xBD, 0x82, 0xA3, 0x5D, 0xA9, 0x8B, 0x75,
+0xBB, 0x37, 0x9D, 0x71, 0xAE, 0xF7, 0xAD, 0x38, 0x20, 0x64, 0xE6, 0x9A, 0xD5, 0xA7, 0x81, 0x38,
+0x9C, 0x3E, 0x00, 0xAD, 0xBD, 0x83, 0x83, 0xCA, 0x59, 0x46, 0x20, 0xB8, 0xE7, 0xF4, 0xF2, 0x6C,
+0x11, 0xB8, 0xDB, 0x64, 0x96, 0xEB, 0x85, 0xE3, 0xAC, 0xB7, 0x49, 0x2B, 0x97, 0xB6, 0xBB, 0x30,
+0x37, 0xC7, 0x00, 0x39, 0xE5, 0xA7, 0xF1, 0xD8, 0x1A, 0x6D, 0x9E, 0x95, 0x20, 0xA3, 0xBC, 0x76,
+0x67, 0x25, 0xE1, 0xEF, 0x39, 0x8A, 0x93, 0x51, 0xF5, 0x00, 0x41, 0x46, 0xA0, 0xC5, 0xAB, 0x4B,
+0xED, 0xFA, 0xEA, 0xC7, 0xEB, 0x9F, 0x3E, 0xEC, 0x26, 0x3A, 0x40, 0x9F, 0x7B, 0x0A, 0x0C, 0xC8,
+0xED, 0xBE, 0x63, 0x02, 0x10, 0xD1, 0xDB, 0x44, 0x4F, 0x3D, 0xA6, 0xA8, 0x17, 0xD7, 0xEF, 0x77,
+0xA5, 0xA5, 0xDE, 0xFE, 0xD4, 0xD4, 0xFB, 0x1A, 0xF4, 0xF4, 0xD9, 0x26, 0x37, 0xC4, 0xDE, 0x40,
+0x57, 0x0C, 0x10, 0xF5, 0xA5, 0xBD, 0xC5, 0xA3, 0xBD, 0x0D, 0xE4, 0x42, 0x52, 0xBE, 0x81, 0x61,
+0x1C, 0x58, 0xC5, 0x67, 0x4A, 0xF4, 0x26, 0xCE, 0xC3, 0x20, 0xF5, 0xC1, 0xD5, 0x6A, 0xEE, 0xFA,
+0x0B, 0xAF, 0x64, 0x42, 0x55, 0x6B, 0xA4, 0xB3, 0x95, 0x42, 0x04, 0x29, 0x4C, 0x23, 0x1D, 0xAE,
+0x10, 0x5C, 0x24, 0x91, 0xD6, 0xCF, 0xFA, 0x77, 0xAA, 0x15, 0x44, 0x7E, 0x9F, 0x8A, 0x99, 0x6C,
+0x90, 0x77, 0x26, 0x98, 0x77, 0x5E, 0x5D, 0xEE, 0x26, 0x94, 0x4D, 0xF6, 0x96, 0x70, 0x26, 0x7B,
+0x4D, 0x38, 0x1A, 0x5F, 0xC3, 0x16, 0x52, 0xD8, 0x70, 0x10, 0xC1, 0x01, 0x61, 0xEC, 0xBC, 0xC9,
+0x00, 0x42, 0xF2, 0x9C, 0xEE, 0x6A, 0x1B, 0xD7, 0x11, 0x64, 0xC4, 0x3D, 0xE7, 0x28, 0xF2, 0x9B,
+0xE3, 0x3B, 0xF5, 0x9A, 0xA3, 0x42, 0x6A, 0xB7, 0x71, 0x1A, 0xE4, 0x64, 0x44, 0x2C, 0x1B, 0xB7,
+0x32, 0x57, 0x55, 0x88, 0x04, 0xCB, 0x74, 0xA2, 0x5D, 0xB2, 0xB3, 0x6D, 0x74, 0xD3, 0xDB, 0x46,
+0x37, 0x32, 0x45, 0x71, 0xF5, 0x9C, 0xDC, 0x53, 0xA6, 0xE9, 0xF6, 0x4E, 0xEF, 0x53, 0x3D, 0xC3,
+0x79, 0xF5, 0x98, 0x06, 0x30, 0xFA, 0xE0, 0xF9, 0xFB, 0xDD, 0xC4, 0x34, 0xEC, 0xAC, 0x64, 0x4C,
+0xDB, 0x2A, 0x82, 0x51, 0xA6, 0xF6, 0x5D, 0x8A, 0x2D, 0x37, 0xD0, 0xC6, 0x12, 0x09, 0xFF, 0x75,
+0x47, 0xDA, 0x58, 0x96, 0xD7, 0xC6, 0x1D, 0x67, 0x98, 0xE5, 0xD7, 0xA0, 0x1F, 0xCF, 0x58, 0x7E,
+0x9E, 0xCC, 0x8C, 0xCA, 0x3A, 0xE2, 0x70, 0xFA, 0xE0, 0x83, 0xB1, 0xD4, 0x5E, 0xBD, 0x7B, 0xB6,
+0x13, 0x5D, 0x89, 0x4E, 0xF7, 0xA3, 0xAF, 0x90, 0xE5, 0x7D, 0xEB, 0xCC, 0x26, 0x4E, 0x75, 0xA7,
+0x42, 0x20, 0x7D, 0xF0, 0x96, 0x38, 0xBE, 0x76, 0xE9, 0x7A, 0xFC, 0xB5, 0x73, 0x3B, 0xD1, 0x1A,
+0xED, 0x79, 0x3F, 0x2A, 0x63, 0x4C, 0xEF, 0x5B, 0x5F, 0xD3, 0x99, 0xE5, 0x79, 0xAE, 0x57, 0x59,
+0x65, 0x1C, 0x4E, 0x1F, 0xBC, 0x6E, 0xBD, 0xA3, 0x47, 0x3B, 0x51, 0x97, 0xE8, 0x75, 0x3F, 0x1A,
+0x0B, 0x79, 0xDE, 0xB7, 0xD2, 0x6E, 0xC6, 0xB6, 0x35, 0xAF, 0xAC, 0x32, 0x0A, 0xA5, 0x0F, 0x3E,
+0xB6, 0x5E, 0xC2, 0xDF, 0x9D, 0xA8, 0x8B, 0xF5, 0xB8, 0x1F, 0x65, 0x71, 0x6E, 0xF7, 0xAD, 0x2A,
+0x73, 0xB4, 0xAC, 0xAC, 0x28, 0x80, 0xD1, 0x07, 0x2F, 0x2E, 0x7F, 0xD5, 0xEA, 0x2F, 0xDC, 0xA5,
+0x83, 0x0F, 0x5C, 0x6A, 0x57, 0x3F, 0x36, 0x76, 0xA2, 0x31, 0xEC, 0x7A, 0x3F, 0xFA, 0xA2, 0x4C,
+0xEF, 0x5B, 0x5B, 0x74, 0x5F, 0xCD, 0xD0, 0xA8, 0x1E, 0x0E, 0x05, 0x20, 0x3E, 0xFB, 0x02, 0x47,
+0xDA, 0x73, 0x63, 0x37, 0x01, 0x31, 0xEC, 0x77, 0x17, 0x45, 0x7B, 0xC4, 0xE4, 0xBE, 0xF5, 0x64,
+0x13, 0xB3, 0x84, 0x8A, 0xE2, 0x25, 0x86, 0xF9, 0x19, 0xB7, 0xA8, 0xE0, 0xD6, 0xCD, 0x35, 0xD4,
+0x1A, 0x57, 0x2F, 0xB4, 0x37, 0xE2, 0xB4, 0x04, 0x37, 0x1B, 0xCF, 0xD9, 0x65, 0x0D, 0x6D, 0xE3,
+0xF4, 0xC4, 0x07, 0xB7, 0xBD, 0xE3, 0xE3, 0xED, 0x86, 0xB7, 0x59, 0xD3, 0xA8, 0xC7, 0xC7, 0xF7,
+0xA8, 0x93, 0xB1, 0x31, 0x22, 0x9F, 0x4D, 0x12, 0x6C, 0xF2, 0x30, 0x8C, 0x04, 0xAB, 0x0F, 0x5E,
+0xC2, 0x89, 0xF6, 0x82, 0x9E, 0xEC, 0xAA, 0x0C, 0x94, 0xFB, 0xDF, 0x85, 0x27, 0xC5, 0xF8, 0xDD,
+0xB7, 0x33, 0x51, 0x62, 0xA0, 0xE8, 0x76, 0x27, 0xCE, 0x46, 0x7B, 0x0B, 0x62, 0xE0, 0x5C, 0x7D,
+0x1F, 0xD8, 0xF9, 0x6E, 0x15, 0x18, 0x11, 0xB1, 0x33, 0x1D, 0x4A, 0x7C, 0xEF, 0x5D, 0x8D, 0x70,
+0x7D, 0x5A, 0x5D, 0x7B, 0x08, 0x05, 0x4A, 0xC3, 0x3F, 0xBB, 0xD1, 0x14, 0xED, 0x70, 0x27, 0x0A,
+0x62, 0xAC, 0xDD, 0xA1, 0x5E, 0xB2, 0xEF, 0xCB, 0x3B, 0xBF, 0xF8, 0x2B, 0x53, 0x8B, 0x94, 0xC0,
+0x77, 0x20, 0xD1, 0x79, 0x4E, 0x12, 0xB4, 0xFC, 0xC0, 0xB2, 0x6D, 0x7D, 0xF0, 0x8A, 0x04, 0xDA,
+0x35, 0x1E, 0x96, 0xDC, 0x72, 0x24, 0x61, 0x11, 0xFB, 0x0D, 0x03, 0x8F, 0x18, 0x33, 0x7D, 0x70,
+0x8D, 0x2F, 0x93, 0x05, 0x5C, 0x78, 0x56, 0x1D, 0x19, 0xB5, 0x6E, 0xE2, 0x78, 0x2E, 0x10, 0x15,
+0x2A, 0x87, 0xBF, 0xA4, 0x4E, 0xD7, 0xC4, 0x91, 0x74, 0x6D, 0x70, 0x45, 0x1B, 0x6B, 0xE8, 0xFE,
+0xC5, 0xDD, 0x95, 0xDE, 0x0B, 0x45, 0x37, 0x3F, 0xE2, 0x6E, 0xC6, 0xF8, 0xAB, 0xA6, 0x41, 0xAD,
+0x6C, 0x6B, 0xF3, 0xE0, 0xDC, 0x9F, 0x1B, 0x8E, 0x68, 0x46, 0xF7, 0xFD, 0x2E, 0xF9, 0x46, 0xCE,
+0xA1, 0x6B, 0x9B, 0xD0, 0xF0, 0x99, 0x79, 0x83, 0xAF, 0xDD, 0x32, 0xB5, 0xEB, 0x70, 0x4B, 0x22,
+0x82, 0x80, 0x5D, 0x08, 0x0C, 0x05, 0xBA, 0x9F, 0x7A, 0x02, 0x3D, 0xDB, 0x3C, 0x8A, 0x2F, 0x2A,
+0xCA, 0x51, 0x6E, 0xC6, 0x2E, 0x4A, 0x8F, 0x4C, 0x42, 0x41, 0xAA, 0x36, 0xD7, 0x2A, 0xF7, 0x54,
+0x7E, 0x20, 0x13, 0xCB, 0x07, 0x1A, 0x35, 0x30, 0x8B, 0x43, 0xBA, 0x0F, 0x8D, 0xD9, 0x72, 0xB9,
+0x3D, 0x8E, 0x72, 0x97, 0x7C, 0x87, 0xB6, 0x72, 0xE7, 0x6A, 0xA5, 0x52, 0x3E, 0xB9, 0xCF, 0x34,
+0x8E, 0xB1, 0xC8, 0xE8, 0x1F, 0xB6, 0x5A, 0xD3, 0x3E, 0xEE, 0xA8, 0xD3, 0x04, 0x6B, 0xE7, 0x87,
+0xD3, 0x7E, 0xD1, 0x66, 0xB0, 0xC2, 0xED, 0x90, 0xC0, 0xE9, 0xC6, 0xBB, 0x21, 0x51, 0x4A, 0x03,
+0xA0, 0xA6, 0xA9, 0xBD, 0x33, 0xFC, 0x2F, 0x4D, 0xED, 0x23, 0x16, 0x5E, 0x3B, 0xDC, 0x14, 0x89,
+0xB4, 0x1B, 0xA6, 0xE9, 0x65, 0x6E, 0x8C, 0xEC, 0xC7, 0x36, 0x46, 0x9E, 0x88, 0x8D, 0x91, 0xD2,
+0x12, 0xC8, 0xAA, 0xDB, 0xED, 0x96, 0xE1, 0xBC, 0xE4, 0xDE, 0xC8, 0x3B, 0x61, 0x69, 0x06, 0xC2,
+0x2C, 0xC9, 0x52, 0x5F, 0xB0, 0xD4, 0x97, 0x58, 0x3A, 0xBD, 0xCB, 0xDD, 0x9E, 0x77, 0xC2, 0x11,
+0x5F, 0x60, 0xFF, 0x4A, 0x58, 0x2A, 0xB5, 0x81, 0x95, 0xDA, 0xF6, 0x5D, 0xED, 0x5F, 0xA5, 0x4D,
+0x92, 0xC1, 0xF0, 0x38, 0x37, 0x16, 0x52, 0x10, 0xE6, 0xF3, 0xAF, 0xEE, 0xD2, 0xE7, 0x27, 0x5B,
+0xF8, 0xFC, 0x24, 0xE5, 0xF3, 0x3B, 0x74, 0x76, 0x41, 0xF8, 0x37, 0xE6, 0xF0, 0x82, 0xAD, 0x0A,
+0x4E, 0xAF, 0x64, 0x6B, 0xB7, 0x1E, 0x12, 0x5A, 0xC2, 0xAB, 0xBB, 0xF4, 0x90, 0x0C, 0xBB, 0xDD,
+0xC8, 0x48, 0x79, 0xCC, 0x19, 0xEC, 0x26, 0x27, 0xD1, 0x4A, 0x4A, 0x56, 0x27, 0xEF, 0x1D, 0x77,
+0x80, 0x1E, 0xF5, 0x79, 0xD9, 0x74, 0x17, 0xEA, 0x29, 0xBF, 0x51, 0x3E, 0xB3, 0xC9, 0xDD, 0x14,
+0x65, 0xF8, 0xAA, 0x8A, 0xB9, 0x54, 0xE1, 0x96, 0x2E, 0xCC, 0x2E, 0xDF, 0xFE, 0xBD, 0x5A, 0x2D,
+0x96, 0xEC, 0x69, 0x77, 0xF5, 0xD8, 0x66, 0xD6, 0x2A, 0x0B, 0x8C, 0xD3, 0x0E, 0x11, 0x07, 0x5F,
+0x19, 0xD1, 0xFB, 0x14, 0x72, 0xAE, 0x18, 0x0A, 0x4A, 0x41, 0x21, 0x04, 0xCB, 0x1A, 0xEC, 0xD1,
+0x40, 0xC8, 0x27, 0x93, 0xE1, 0x58, 0xC4, 0x35, 0xCD, 0x1D, 0x8F, 0xE9, 0x77, 0xC8, 0x1E, 0x63,
+0xC0, 0xF0, 0xBF, 0xE0, 0xF5, 0x4E, 0x37, 0x24, 0x49, 0x35, 0xD4, 0x8B, 0x28, 0x0C, 0x69, 0xA3,
+0x26, 0x56, 0x34, 0x6E, 0xAB, 0x2A, 0x82, 0x23, 0x26, 0x82, 0x17, 0x6F, 0x3E, 0xAA, 0x64, 0xC0,
+0x7C, 0xAD, 0x93, 0x16, 0xC1, 0xD1, 0xE6, 0x2F, 0xBD, 0xE8, 0x96, 0x96, 0x56, 0x27, 0x92, 0xD6,
+0xD1, 0x38, 0xDA, 0xBB, 0xBB, 0x4D, 0xC8, 0x52, 0x48, 0xE0, 0x98, 0x3D, 0x9D, 0xAF, 0xBD, 0x97,
+0x3D, 0xA0, 0x94, 0x1D, 0x1C, 0x57, 0xB1, 0x03, 0xF3, 0x68, 0x0B, 0x33, 0x38, 0xCE, 0x30, 0x83,
+0xBB, 0x92, 0x41, 0x5F, 0x1F, 0xBC, 0xDF, 0xC4, 0x0C, 0xFA, 0x25, 0xCD, 0xE0, 0x48, 0x98, 0x41,
+0xB4, 0xB1, 0xBB, 0x5F, 0x56, 0x58, 0x92, 0x15, 0x3C, 0x1E, 0xE3, 0xF3, 0x4C, 0x8F, 0xCB, 0x79,
+0xC2, 0xEE, 0x62, 0xEE, 0xD2, 0x72, 0xAA, 0xC7, 0xDB, 0x5F, 0x2D, 0xC7, 0x74, 0x97, 0xD5, 0x42,
+0xAE, 0xDC, 0xD1, 0xD7, 0x1E, 0x6E, 0xAB, 0x8D, 0x5A, 0x71, 0x66, 0xA7, 0xB5, 0xC2, 0xCA, 0xDE,
+0xF1, 0x5D, 0x4F, 0x4B, 0xBF, 0xD2, 0x25, 0xB6, 0x33, 0x54, 0xB4, 0x2E, 0x57, 0x04, 0xA4, 0xF7,
+0xC2, 0xBC, 0x79, 0xA9, 0x6D, 0xF0, 0xBE, 0x0D, 0x05, 0xB2, 0x2E, 0x7B, 0x2B, 0x89, 0xB6, 0xC1,
+0x6B, 0x49, 0x14, 0xD8, 0x32, 0xF6, 0x0E, 0xE1, 0x1B, 0x62, 0xB4, 0xCD, 0x5E, 0x11, 0x53, 0xB8,
+0x8D, 0x86, 0xB5, 0xDA, 0x3C, 0xA5, 0x84, 0xE3, 0x32, 0xE6, 0xAD, 0x50, 0x63, 0x95, 0x7B, 0xF7,
+0x01, 0xC5, 0x29, 0x19, 0x00, 0x07, 0x5F, 0xD1, 0x6D, 0x46, 0x3E, 0x29, 0xB7, 0x5B, 0x38, 0x49,
+0x58, 0x85, 0xCA, 0xF0, 0xD3, 0x99, 0x14, 0xCC, 0xC2, 0xCE, 0x2B, 0x06, 0xB3, 0xA8, 0xCE, 0x07,
+0x63, 0xDA, 0xFB, 0xE0, 0xE5, 0x9F, 0x0A, 0x96, 0xD6, 0x9B, 0xB3, 0x74, 0x74, 0x57, 0x2C, 0x6D,
+0x91, 0xAA, 0x42, 0xEB, 0x0A, 0xDC, 0xC0, 0xB0, 0x37, 0x36, 0x2E, 0x06, 0x0D, 0xB6, 0xC5, 0x62,
+0xAE, 0x76, 0x0D, 0xAC, 0xEE, 0xD4, 0xC0, 0x04, 0x01, 0xE5, 0x94, 0xD1, 0x4F, 0x2B, 0xE3, 0xF4,
+0x6B, 0xB3, 0x2F, 0xC6, 0x51, 0x59, 0xF3, 0x52, 0x70, 0x74, 0xF2, 0x35, 0x99, 0x97, 0xBB, 0x08,
+0xF0, 0xEA, 0xC6, 0xC1, 0x8B, 0x81, 0x63, 0xF0, 0xA2, 0x47, 0xBB, 0x37, 0xB0, 0x90, 0x82, 0x8D,
+0xF5, 0x71, 0x74, 0xA7, 0xEF, 0xA2, 0xBB, 0x8B, 0x08, 0xC6, 0x58, 0xDA, 0xC2, 0xC4, 0x7A, 0xFD,
+0x1D, 0x9A, 0x98, 0xB4, 0xD0, 0xC4, 0xF3, 0x20, 0x2F, 0x60, 0x74, 0xBE, 0x36, 0x10, 0x15, 0x34,
+0x55, 0x56, 0x92, 0xD4, 0x59, 0xF9, 0xFC, 0x10, 0x8A, 0xC2, 0x34, 0x82, 0x0C, 0x3A, 0xCF, 0xD9,
+0x27, 0x2D, 0xD5, 0x1D, 0x46, 0xAF, 0xA0, 0xA4, 0xCB, 0x6A, 0xD1, 0xCB, 0x8E, 0xC3, 0x42, 0x33,
+0xF9, 0x12, 0xE4, 0xC2, 0xD7, 0x3D, 0x9E, 0x1B, 0xFC, 0xDD, 0x28, 0x37, 0x84, 0xAF, 0x01, 0x6A,
+0x53, 0x8F, 0x8C, 0x2F, 0xF4, 0xEF, 0x42, 0x9C, 0x5C, 0x5A, 0xD8, 0x44, 0xD7, 0x20, 0x24, 0x3B,
+0xB6, 0x6B, 0x60, 0xB1, 0x6A, 0xCC, 0x03, 0xA0, 0xB4, 0xFD, 0xC7, 0x1C, 0x27, 0x79, 0x0D, 0x7C,
+0x91, 0x86, 0x51, 0x6E, 0xED, 0x98, 0xBE, 0x36, 0x99, 0x3F, 0xF1, 0x84, 0x87, 0xE1, 0x9A, 0xE1,
+0xFF, 0xFC, 0x77, 0xD1, 0xD4, 0x0C, 0x7E, 0xD8, 0x34, 0x12, 0x00, 0x98, 0x91, 0x37, 0xBA, 0xD0,
+0x81, 0x52, 0xCF, 0xF5, 0xA1, 0x14, 0xB5, 0x26, 0x56, 0x86, 0xAA, 0xB2, 0xA4, 0x7D, 0xA8, 0x12,
+0x77, 0xA2, 0xB1, 0x62, 0x6C, 0x72, 0xEE, 0x8F, 0x3C, 0x6B, 0x0E, 0xA5, 0x9A, 0xE9, 0x8E, 0x16,
+0x33, 0xE2, 0x04, 0x6D, 0xC3, 0x34, 0xAF, 0x6E, 0xE0, 0xE0, 0x2D, 0xCE, 0x30, 0x83, 0xE4, 0xEB,
+0xB5, 0x17, 0x3F, 0xBD, 0xBB, 0x64, 0x2F, 0x13, 0x7D, 0x0B, 0xF2, 0x22, 0x66, 0xAD, 0xA9, 0x8D,
+0x17, 0x0E, 0xAB, 0xDE, 0xEB, 0x04, 0xDB, 0xB2, 0x0F, 0xCC, 0xDE, 0x18, 0x9E, 0x36, 0x34, 0x7C,
+0xF2, 0xDA, 0xF5, 0x03, 0xED, 0x42, 0x0B, 0x31, 0xDA, 0xEE, 0x88, 0xBE, 0xAC, 0xA6, 0xCD, 0xF8,
+0xE2, 0x2D, 0x19, 0xE3, 0xBF, 0x78, 0x36, 0x34, 0x0D, 0xA1, 0x0E, 0xB4, 0xDA, 0xD9, 0x69, 0xB7,
+0x86, 0xF6, 0x17, 0x76, 0x31, 0xC6, 0x4F, 0xC6, 0x42, 0xBB, 0xFA, 0xC2, 0xB3, 0x9B, 0xDA, 0x68,
+0xD8, 0x60, 0x2F, 0x80, 0xA5, 0x97, 0xF1, 0x9A, 0x78, 0x33, 0x78, 0x3B, 0x98, 0x12, 0xA7, 0x1E,
+0x51, 0x06, 0xCE, 0x30, 0x77, 0x1D, 0x3F, 0xF6, 0xF5, 0x5B, 0x6B, 0x1C, 0x5D, 0x6F, 0x43, 0x41,
+0x1F, 0x2C, 0x7C, 0xED, 0xE1, 0xC5, 0x85, 0x86, 0x05, 0x6E, 0xEC, 0xC5, 0xB2, 0xA3, 0x61, 0xB2,
+0x5D, 0x53, 0x4B, 0x5C, 0xF8, 0x19, 0x42, 0x83, 0xF4, 0x0A, 0xF3, 0x5B, 0x8D, 0xD8, 0x89, 0x77,
+0x68, 0x87, 0x00, 0x18, 0x45, 0xEA, 0x8D, 0x38, 0x81, 0x75, 0xD3, 0x08, 0x8C, 0x46, 0xFC, 0x65,
+0xB6, 0xD0, 0x2B, 0x50, 0xD2, 0xD4, 0xE8, 0x2D, 0xF9, 0xCD, 0xBA, 0xB7, 0x8D, 0x36, 0xC8, 0x10,
+0xF8, 0x0D, 0xA1, 0x89, 0xE7, 0x25, 0x3F, 0xEB, 0x0B, 0xD0, 0xAD, 0x6E, 0x53, 0xC3, 0x3B, 0x71,
+0x58, 0x89, 0xC8, 0x07, 0xE2, 0x9A, 0x10, 0x5A, 0x3E, 0x5A, 0x05, 0x4A, 0x86, 0xEE, 0x36, 0xA6,
+0x22, 0x88, 0x3D, 0x1F, 0xC8, 0x04, 0x24, 0x36, 0x69, 0xF2, 0x01, 0x74, 0x93, 0x8E, 0x9E, 0x9B,
+0x2C, 0x28, 0x4A, 0x5A, 0x3B, 0x3C, 0x04, 0x97, 0x86, 0xA0, 0x44, 0xC0, 0x2A, 0x26, 0xF5, 0x1A,
+0x5F, 0xC0, 0x04, 0x8B, 0xAA, 0x75, 0x56, 0xB5, 0x03, 0x40, 0xD0, 0x0E, 0xDC, 0xEB, 0xC0, 0xB3,
+0x9C, 0x09, 0x0C, 0x3D, 0x1A, 0x11, 0x36, 0x7A, 0x1B, 0x51, 0x26, 0xEE, 0xD3, 0xEB, 0xB4, 0x93,
+0xE4, 0x8D, 0x3A, 0xBF, 0x7E, 0x50, 0x6B, 0xD4, 0x38, 0xF1, 0xF4, 0x1C, 0xCC, 0xAD, 0xCE, 0x0E,
+0x1E, 0x51, 0x1A, 0x1B, 0xDA, 0xF9, 0x39, 0xEF, 0x86, 0xB5, 0xC2, 0x8B, 0xD0, 0x88, 0xFE, 0x49,
+0xDC, 0x0A, 0x4D, 0xF1, 0xF7, 0xEF, 0xFF, 0x12, 0x36, 0x7B, 0x7B, 0x08, 0x54, 0x3F, 0xC5, 0x19,
+0x84, 0xEF, 0xFF, 0x82, 0xFF, 0xDF, 0x3E, 0xA2, 0xD3, 0x06, 0xDF, 0xFF, 0x85, 0x7F, 0x6E, 0x1F,
+0x41, 0x4F, 0x70, 0x4C, 0xFB, 0xBB, 0xFD, 0x9D, 0xCA, 0x21, 0x2D, 0xBD, 0x49, 0xA6, 0xF4, 0x42,
+0xB1, 0x55, 0xA6, 0x69, 0x92, 0x43, 0xD4, 0xEF, 0x91, 0xFF, 0xD6, 0x47, 0xAE, 0x09, 0xEA, 0x09,
+0xC0, 0x92, 0x85, 0xD2, 0x6D, 0x50, 0x89, 0x10, 0x54, 0xF8, 0x76, 0x67, 0x6B, 0x4C, 0x5B, 0x6A,
+0xDC, 0x55, 0x22, 0x03, 0x11, 0x2D, 0xE7, 0x86, 0xE7, 0x93, 0x37, 0x4E, 0x50, 0x0F, 0x62, 0x4E,
+0x91, 0x21, 0xF1, 0xC1, 0x20, 0xC6, 0x02, 0xFE, 0x00, 0x0E, 0xDA, 0xD5, 0xB8, 0xD2, 0x42, 0x63,
+0x7B, 0x10, 0xDA, 0x61, 0x44, 0x29, 0xBB, 0x99, 0x61, 0x87, 0x9F, 0x46, 0xF6, 0x97, 0x3A, 0xBE,
+0x6F, 0x36, 0x19, 0x2A, 0x52, 0x22, 0xC2, 0x46, 0x4F, 0xF1, 0x7F, 0x20, 0x17, 0xFC, 0x93, 0xA9,
+0x1F, 0xC0, 0xCA, 0x4A, 0xF8, 0x3A, 0x9D, 0x02, 0xF8, 0xBC, 0x6A, 0x6A, 0xEC, 0x60, 0x0D, 0x9E,
+0xE1, 0x98, 0x78, 0x8E, 0x7F, 0xD6, 0x42, 0x7B, 0x78, 0x81, 0x1F, 0xC1, 0x35, 0x5A, 0xB3, 0xE2,
+0x25, 0x76, 0x80, 0xAD, 0x68, 0x8D, 0x41, 0x5B, 0xB1, 0x23, 0xB8, 0x86, 0xEF, 0x5E, 0x02, 0xDB,
+0x6D, 0x6A, 0x43, 0xCB, 0x71, 0xE8, 0x41, 0x01, 0xF5, 0x51, 0xAA, 0x7F, 0xEA, 0xAF, 0x80, 0x03,
+0x4E, 0xDA, 0xED, 0x23, 0x7F, 0x1D, 0x9E, 0xAD, 0x6F, 0x1F, 0x11, 0xBC, 0x47, 0x89, 0x84, 0xE3,
+0x35, 0x3F, 0x86, 0xEB, 0x40, 0x1F, 0xDE, 0x11, 0x04, 0xD3, 0x0B, 0xEB, 0xE8, 0x02, 0xB4, 0x08,
+0xF0, 0x3E, 0x27, 0x1E, 0xCE, 0xD6, 0xE1, 0x19, 0x42, 0x53, 0x58, 0xCE, 0x06, 0x9C, 0xAE, 0xA3,
+0x53, 0xB8, 0x4B, 0xDF, 0x23, 0x85, 0x44, 0x30, 0x9E, 0x6E, 0x1F, 0x71, 0x9E, 0xE0, 0x12, 0x3F,
+0x4A, 0x8A, 0x1A, 0x63, 0x42, 0xC0, 0xA3, 0xC8, 0x73, 0x96, 0xA4, 0xA5, 0xFC, 0x01, 0xFE, 0x71,
+0x65, 0x13, 0x3C, 0x7C, 0xBE, 0x7E, 0x63, 0xD6, 0x6B, 0x7C, 0x41, 0xB6, 0x86, 0x31, 0x4C, 0x86,
+0x69, 0xBB, 0xCE, 0xC8, 0xB6, 0x46, 0xE8, 0x28, 0xF5, 0x86, 0x76, 0x31, 0xE0, 0x71, 0x0C, 0x0D,
+0x1A, 0x9A, 0xCB, 0x46, 0x9A, 0x89, 0x5A, 0x2C, 0x29, 0xD6, 0x1A, 0x6D, 0x6A, 0x87, 0xDC, 0xD6,
+0x10, 0x05, 0x77, 0xC1, 0x72, 0x38, 0xB0, 0xB1, 0x02, 0x47, 0xCA, 0x5B, 0x72, 0x91, 0xD0, 0xD6,
+0x12, 0x16, 0x8A, 0x46, 0x0E, 0xB5, 0x9D, 0x44, 0x94, 0xCD, 0xF1, 0x6A, 0xE1, 0xC0, 0x0F, 0x93,
+0x0E, 0x0C, 0xAA, 0xF2, 0x82, 0x7A, 0xED, 0x0A, 0x37, 0x64, 0xFC, 0x56, 0x3B, 0xC0, 0x46, 0x07,
+0xB5, 0x7F, 0x9D, 0x69, 0xB5, 0x03, 0xD9, 0x93, 0x6F, 0x93, 0x2E, 0xC7, 0x34, 0x36, 0x29, 0xA9,
+0xB1, 0x89, 0xA4, 0xB1, 0xC9, 0xDD, 0x6A, 0x4C, 0x5E, 0x08, 0xDE, 0x46, 0x6B, 0xF2, 0xCA, 0x6B,
+0x8E, 0xE6, 0x0A, 0xE1, 0xB9, 0xD2, 0xB8, 0xB6, 0x26, 0x2A, 0x6D, 0x6D, 0xA2, 0x26, 0x96, 0xE2,
+0xC0, 0x7B, 0x88, 0xF7, 0xFA, 0xE7, 0x77, 0x6F, 0x31, 0x54, 0xAA, 0x55, 0x16, 0x6A, 0x2C, 0x59,
+0x8E, 0x28, 0x30, 0x60, 0xEE, 0x8C, 0x05, 0xEE, 0x58, 0x0E, 0x3D, 0xA8, 0x69, 0x75, 0x8A, 0x12,
+0x33, 0x68, 0x81, 0x21, 0xF0, 0xC0, 0x5B, 0xCE, 0x77, 0x31, 0xD8, 0x0A, 0xE7, 0x8D, 0xA0, 0x72,
+0x6C, 0x01, 0x01, 0x4A, 0x29, 0x91, 0x61, 0x4E, 0x39, 0x8C, 0x94, 0x13, 0x76, 0xEE, 0x22, 0xD4,
+0x5F, 0xFD, 0xB2, 0x41, 0x4D, 0xC4, 0xF4, 0x28, 0xB6, 0xF9, 0x85, 0xD2, 0xE1, 0x91, 0xBF, 0x94,
+0x80, 0xF8, 0x1C, 0xB6, 0xC2, 0xC0, 0x45, 0x26, 0x28, 0x85, 0x46, 0x4C, 0x5D, 0x66, 0xE3, 0x59,
+0x57, 0xC1, 0xB3, 0x56, 0xE0, 0xE1, 0x99, 0xA7, 0x14, 0x1A, 0x3E, 0xD1, 0x95, 0x89, 0xA5, 0x1C,
+0x31, 0x7C, 0x72, 0x49, 0xC5, 0x13, 0xCF, 0x74, 0xE5, 0x78, 0xE2, 0x93, 0x22, 0xD9, 0x78, 0x4A,
+0xCA, 0x86, 0xCF, 0x44, 0x28, 0xEC, 0x39, 0x59, 0x8D, 0x74, 0xC4, 0x7F, 0x9B, 0xD7, 0x1F, 0x63,
+0x03, 0xA2, 0x45, 0xF4, 0x67, 0x2F, 0x5E, 0x32, 0xF9, 0x28, 0xAA, 0x45, 0x62, 0x2B, 0xB3, 0x01,
+0xB1, 0xDB, 0x46, 0x00, 0xF1, 0x09, 0xC6, 0xF1, 0xC4, 0x6F, 0x63, 0x85, 0x1B, 0x8A, 0x31, 0x75,
+0xAB, 0xED, 0x00, 0x01, 0x14, 0x61, 0xE3, 0xAC, 0x93, 0x34, 0xCF, 0x14, 0x2E, 0x76, 0x39, 0x0B,
+0x1D, 0xBB, 0x9B, 0x81, 0x91, 0x67, 0x98, 0x38, 0x04, 0x5E, 0xCC, 0xC2, 0x46, 0x47, 0x31, 0x12,
+0xAE, 0xDE, 0xF1, 0x71, 0x3A, 0xCF, 0xF0, 0x0E, 0xF8, 0x67, 0xED, 0x10, 0x03, 0xCE, 0x47, 0x45,
+0x43, 0xB3, 0x11, 0x14, 0x82, 0x5A, 0x4D, 0x2C, 0xD9, 0xD5, 0xCE, 0x52, 0x15, 0x37, 0x40, 0xF0,
+0x45, 0x38, 0xED, 0x29, 0xA3, 0x31, 0xF6, 0xB1, 0x96, 0x21, 0x0C, 0xBE, 0xC3, 0x6F, 0xB2, 0x31,
+0x64, 0x74, 0x83, 0x4B, 0x88, 0x89, 0x5D, 0xC3, 0x81, 0x6B, 0xE2, 0x12, 0x5B, 0xDB, 0x69, 0xB9,
+0x0E, 0x51, 0xF7, 0x1A, 0xAB, 0xDF, 0x79, 0x47, 0xFC, 0x8C, 0x3F, 0x94, 0x1E, 0x81, 0x79, 0x24,
+0x58, 0x78, 0x0E, 0xAF, 0xE7, 0xD3, 0xF5, 0x8D, 0x72, 0x28, 0xB9, 0x43, 0xDB, 0x3C, 0x3C, 0xD4,
+0x9E, 0x05, 0x81, 0x01, 0x0A, 0xC0, 0x75, 0xCA, 0x29, 0xCA, 0x47, 0x33, 0xF8, 0xA4, 0x84, 0xEB,
+0xA1, 0x51, 0xB2, 0x87, 0x8A, 0x09, 0xF3, 0x5B, 0xFC, 0x84, 0x9D, 0x70, 0x67, 0x8A, 0xAA, 0xFD,
+0xEF, 0x05, 0xF1, 0xD6, 0xD7, 0x54, 0x60, 0xAE, 0xF7, 0xCC, 0xB6, 0xEB, 0xB5, 0x76, 0xB4, 0xEC,
+0x5C, 0x63, 0x63, 0xF0, 0x36, 0xA0, 0xBA, 0x82, 0x3E, 0x40, 0xC7, 0x91, 0xCD, 0x33, 0x6E, 0x42,
+0xBD, 0xC3, 0xB8, 0xEB, 0x82, 0x2B, 0x23, 0x39, 0xE8, 0x87, 0x16, 0xAE, 0xF3, 0x85, 0xAC, 0x17,
+0x73, 0x10, 0x7F, 0x34, 0x8C, 0x4F, 0x4C, 0x2C, 0x70, 0xE9, 0x90, 0x36, 0xB4, 0xBC, 0xE4, 0x03,
+0xB9, 0xEE, 0x91, 0xA2, 0x51, 0xA4, 0x02, 0x6A, 0x9D, 0xE8, 0x89, 0xE9, 0x2F, 0xFC, 0xDC, 0x3E,
+0x50, 0x9F, 0x29, 0xA6, 0x40, 0x38, 0x81, 0x5C, 0x78, 0x22, 0x79, 0x25, 0x7A, 0x48, 0x4C, 0x4F,
+0xDC, 0x36, 0x1E, 0x44, 0x91, 0x61, 0x31, 0x37, 0x8D, 0x80, 0xC4, 0x83, 0x43, 0x68, 0x0B, 0xE2,
+0xE6, 0xCC, 0x0D, 0x48, 0x22, 0x62, 0x58, 0xB8, 0x69, 0xC6, 0xB0, 0x3F, 0x46, 0xD6, 0x78, 0xAF,
+0xEE, 0xAF, 0xF0, 0xF1, 0x0A, 0xFE, 0x9F, 0x9A, 0x83, 0x28, 0x37, 0x6E, 0x4E, 0x59, 0x48, 0x18,
+0x0F, 0x22, 0x2B, 0x91, 0xE5, 0x10, 0x0B, 0x0B, 0xFC, 0xBE, 0xE8, 0xE9, 0xE1, 0x43, 0x7A, 0xF4,
+0x20, 0x54, 0x9A, 0x88, 0x1E, 0x17, 0x5A, 0x74, 0x23, 0xA1, 0xE0, 0x34, 0xEE, 0x04, 0x0E, 0x81,
+0x5C, 0xC2, 0xC0, 0x7C, 0x2B, 0x54, 0xEF, 0x1C, 0xAA, 0x4D, 0xB4, 0x85, 0xFF, 0x8F, 0xFA, 0x5F,
+0x51, 0xD4, 0xBF, 0xBF, 0x10, 0x9F, 0x63, 0xDB, 0x09, 0x0F, 0x60, 0x70, 0xEA, 0x69, 0xC1, 0x83,
+0x1A, 0x54, 0x3B, 0xCA, 0x79, 0x3F, 0x1E, 0xBA, 0x23, 0xFB, 0x9A, 0x5A, 0x26, 0x23, 0x3A, 0xB2,
+0x2C, 0x94, 0x11, 0x4E, 0xDF, 0xE3, 0x04, 0x37, 0xCE, 0x76, 0xD7, 0x6B, 0x6C, 0x6D, 0x81, 0xC6,
+0xE3, 0xDB, 0xA8, 0x24, 0x99, 0xBA, 0xCB, 0x3C, 0x48, 0x0F, 0xA2, 0xCE, 0x0D, 0x49, 0x00, 0x87,
+0xD0, 0x7C, 0x3B, 0x4F, 0x61, 0xD7, 0x62, 0xDB, 0x0F, 0x4F, 0x06, 0xD0, 0x40, 0x5C, 0x01, 0xD0,
+0xC0, 0xA3, 0x5E, 0x23, 0xA1, 0x25, 0x4E, 0x11, 0x56, 0x41, 0x56, 0x2E, 0x62, 0x5A, 0xE6, 0xC5,
+0x31, 0xB3, 0x50, 0x5A, 0x21, 0xC8, 0xCA, 0x97, 0x01, 0x22, 0x7E, 0x7A, 0xA1, 0x39, 0x0B, 0xDB,
+0x06, 0x1B, 0x44, 0x16, 0xC0, 0x06, 0xE5, 0xBB, 0xCA, 0x10, 0xFD, 0x9F, 0x1B, 0xCF, 0x42, 0xCA,
+0x63, 0x12, 0x78, 0xF4, 0x28, 0x8E, 0x0D, 0x17, 0x19, 0x58, 0x19, 0x1F, 0xF6, 0xC6, 0xDA, 0x5F,
+0xBA, 0xCE, 0xD8, 0x9A, 0x44, 0x79, 0x96, 0x93, 0x04, 0xC9, 0xFA, 0x61, 0x4C, 0xF0, 0x52, 0x8D,
+0x03, 0x84, 0x58, 0x26, 0x15, 0x10, 0x7D, 0x63, 0x6A, 0x6A, 0x36, 0xF6, 0x29, 0xB5, 0xFA, 0x3A,
+0xE1, 0xEF, 0x52, 0x6C, 0x80, 0xFC, 0xD1, 0x98, 0xA3, 0x0B, 0xA2, 0xDE, 0x09, 0xBB, 0x92, 0x31,
+0x4E, 0x62, 0x18, 0x91, 0xB1, 0x04, 0xDD, 0xF8, 0xA3, 0xF8, 0xF0, 0xAD, 0x62, 0xFC, 0xCD, 0x66,
+0xF2, 0xD7, 0x59, 0x69, 0xE7, 0x80, 0x06, 0xDF, 0x7C, 0x26, 0xA5, 0xF6, 0x74, 0x6D, 0x40, 0x1B,
+0x66, 0x20, 0xA1, 0x1D, 0xA4, 0x91, 0xE4, 0x52, 0x2E, 0x5E, 0x2B, 0xAD, 0x10, 0x08, 0x45, 0xB7,
+0x1C, 0xA2, 0x28, 0x68, 0xAF, 0x70, 0x98, 0x87, 0x2A, 0xB1, 0x25, 0x55, 0x81, 0x90, 0x39, 0x62,
+0x9D, 0x6D, 0xEC, 0x63, 0x43, 0x74, 0x44, 0xCE, 0x7D, 0x2C, 0x7E, 0x3D, 0xB3, 0x27, 0x2D, 0xB1,
+0x7B, 0x3D, 0xD5, 0xCF, 0x40, 0x6B, 0x75, 0x05, 0xF5, 0xD0, 0xF4, 0x15, 0x3E, 0x25, 0x10, 0xF2,
+0x10, 0x5E, 0x88, 0x97, 0xAF, 0xC2, 0xAD, 0xC3, 0xE9, 0x6B, 0xD9, 0xCE, 0x58, 0x92, 0x8D, 0x32,
+0x6C, 0x64, 0xC8, 0x77, 0x94, 0x73, 0xBA, 0x9A, 0xFC, 0xE1, 0x47, 0x39, 0x33, 0x6C, 0x99, 0x6E,
+0x72, 0x70, 0xB2, 0x65, 0xDD, 0x24, 0xD2, 0xC5, 0x70, 0x66, 0x05, 0x0A, 0x84, 0xB5, 0x6E, 0xAD,
+0x4A, 0xE6, 0x92, 0xBD, 0x9C, 0x45, 0x4A, 0x5A, 0xD4, 0x03, 0xA2, 0xD8, 0x74, 0x3C, 0xFD, 0x50,
+0x8A, 0x6B, 0x3F, 0xBD, 0x31, 0x3C, 0x9C, 0x64, 0x47, 0x05, 0x27, 0x16, 0x7F, 0x18, 0x0A, 0xB6,
+0x6A, 0x49, 0x51, 0xC4, 0xD7, 0x2D, 0xC5, 0x5A, 0x61, 0x7C, 0x0C, 0x20, 0x2F, 0x96, 0xFD, 0xEE,
+0x11, 0x80, 0xF3, 0x71, 0x52, 0x43, 0xFB, 0xFE, 0x2F, 0x8A, 0xE2, 0x56, 0x1B, 0x43, 0x94, 0xF1,
+0xA7, 0xC4, 0xA4, 0x4B, 0x12, 0x01, 0x7E, 0x2B, 0x15, 0x17, 0x7C, 0x62, 0xEB, 0x94, 0xB7, 0xBF,
+0x87, 0x16, 0x12, 0x26, 0xA9, 0xC2, 0x61, 0x0A, 0x5D, 0xCE, 0xCE, 0x1F, 0xA1, 0xB0, 0xC2, 0x5E,
+0x31, 0x29, 0x85, 0x3F, 0x16, 0x81, 0xEC, 0x36, 0x54, 0x43, 0xD0, 0xCD, 0x8F, 0x50, 0xF7, 0x24,
+0xCC, 0xB4, 0xC1, 0x07, 0x58, 0xA0, 0x01, 0x53, 0x84, 0x4A, 0xA6, 0x23, 0x1C, 0x46, 0x31, 0x31,
+0xC5, 0x24, 0xCC, 0x98, 0xE1, 0xBC, 0x14, 0xAF, 0xF5, 0xF2, 0xFA, 0x21, 0x94, 0xC5, 0x1F, 0x3E,
+0x0C, 0x8B, 0x1A, 0x0F, 0x42, 0x31, 0xA4, 0x71, 0x60, 0x07, 0x12, 0x82, 0x98, 0x88, 0xB2, 0xC4,
+0x14, 0xDF, 0x66, 0x5D, 0x8B, 0x22, 0x55, 0xE6, 0xA8, 0x4E, 0x93, 0x33, 0x2D, 0x4D, 0xB3, 0xB4,
+0xDF, 0xDF, 0xA8, 0xC9, 0xFC, 0x8B, 0xCF, 0xC0, 0x48, 0x11, 0xAF, 0x51, 0x85, 0x9C, 0xD4, 0xE0,
+0xB2, 0x80, 0x94, 0x3B, 0x2C, 0xB3, 0xC5, 0x0F, 0xC2, 0x1B, 0xC5, 0x07, 0xC5, 0x6C, 0x6A, 0x78,
+0x29, 0xD7, 0x82, 0x21, 0x83, 0xB1, 0xB3, 0xF8, 0x68, 0x4F, 0x12, 0x8F, 0xB2, 0x0E, 0xCC, 0x14,
+0x17, 0xB3, 0x2E, 0xE6, 0xAE, 0x37, 0x16, 0x59, 0xE6, 0x4E, 0xBC, 0xD2, 0xE7, 0x10, 0xA8, 0xBC,
+0x22, 0x80, 0xCB, 0xF0, 0xB9, 0x93, 0x42, 0xC8, 0xE8, 0x19, 0x15, 0x09, 0x07, 0x7D, 0x00, 0xA5,
+0xDC, 0xBA, 0x08, 0x6D, 0x1A, 0x03, 0x45, 0xAC, 0xC5, 0xB0, 0xB1, 0x5D, 0xEA, 0x12, 0xBC, 0x9C,
+0x7A, 0xF2, 0xE0, 0xA5, 0x8D, 0xE9, 0x12, 0x34, 0xF5, 0xFB, 0x62, 0x60, 0xF9, 0x69, 0x17, 0x99,
+0x76, 0xE3, 0xA6, 0x04, 0x70, 0xF4, 0x88, 0x8E, 0x04, 0x2A, 0xB2, 0x59, 0x1E, 0x60, 0xF8, 0xB6,
+0x9A, 0x9A, 0xA4, 0x5F, 0x3F, 0x70, 0xE7, 0x6C, 0x73, 0x7E, 0x22, 0x0C, 0x2D, 0xE9, 0x2C, 0x69,
+0x1B, 0xEF, 0xD7, 0x79, 0x71, 0x25, 0xCB, 0x36, 0xBE, 0x14, 0x22, 0x6F, 0xF2, 0xAF, 0xC5, 0x2B,
+0x63, 0x3A, 0xCD, 0xAA, 0xEC, 0x01, 0x2D, 0xA5, 0xED, 0x7B, 0x23, 0x96, 0x0C, 0xC2, 0x07, 0x5A,
+0x30, 0x56, 0xE1, 0xE1, 0xEF, 0xAC, 0x4F, 0x4C, 0xDE, 0x31, 0x9B, 0x6A, 0x14, 0xD2, 0xE2, 0xCE,
+0x93, 0xA4, 0x44, 0x53, 0x51, 0xCC, 0xBF, 0x7D, 0xCC, 0x02, 0xFC, 0x05, 0x09, 0x0F, 0x34, 0xD9,
+0xDE, 0x32, 0x82, 0x72, 0x24, 0x26, 0x1E, 0x05, 0xE3, 0xC4, 0x4B, 0x99, 0x8C, 0x3D, 0x0D, 0xF5,
+0xF4, 0xF3, 0x68, 0x08, 0xC9, 0xEB, 0x05, 0x38, 0x1F, 0x78, 0xFB, 0xB2, 0xDE, 0xB8, 0xCD, 0x63,
+0x87, 0x89, 0x2B, 0xB2, 0x9D, 0xB2, 0x44, 0xD0, 0x34, 0xA1, 0xC6, 0x16, 0x93, 0x8F, 0x1A, 0x9D,
+0xEC, 0x30, 0x57, 0x8E, 0x18, 0xDC, 0x64, 0x09, 0xF6, 0x22, 0x2D, 0x5A, 0x56, 0xDF, 0xC6, 0x10,
+0x44, 0x09, 0x20, 0x45, 0x6C, 0xA2, 0x84, 0x95, 0xEC, 0x42, 0x34, 0x10, 0xB4, 0xCB, 0x3E, 0x98,
+0x41, 0x7B, 0xBC, 0xFA, 0x4F, 0x94, 0x8B, 0x4C, 0x00, 0xA1, 0x33, 0x65, 0xA0, 0xC0, 0xA7, 0xA8,
+0x46, 0x86, 0x73, 0x63, 0xF8, 0xB2, 0xD3, 0x8C, 0x80, 0xA0, 0x80, 0x70, 0xBF, 0xA9, 0xEB, 0xAC,
+0x81, 0xCE, 0x1D, 0x80, 0x9D, 0xB5, 0xE9, 0xB6, 0x13, 0x1C, 0xC7, 0xA0, 0x0D, 0xD0, 0x93, 0xD8,
+0x6D, 0xF6, 0x05, 0x6F, 0x71, 0x9F, 0x9D, 0xB1, 0x06, 0x61, 0x2F, 0xF8, 0xCD, 0xEC, 0xB6, 0x31,
+0x9F, 0x13, 0xC7, 0xBC, 0x9C, 0x5A, 0xB6, 0x59, 0x67, 0xA0, 0xE1, 0x83, 0x36, 0x9E, 0x46, 0xBF,
+0x3F, 0x4D, 0x1F, 0xEA, 0xE0, 0x58, 0xC1, 0x9B, 0x2F, 0xD9, 0xB5, 0x7A, 0xAD, 0x67, 0x8A, 0x67,
+0x72, 0x78, 0xB3, 0xB6, 0xE9, 0x19, 0xCB, 0x37, 0xF8, 0xCC, 0x1F, 0x35, 0x87, 0x66, 0xA7, 0xD9,
+0xE1, 0x0D, 0x02, 0x28, 0xB6, 0x84, 0xC8, 0x11, 0x2F, 0x3E, 0x1B, 0xF5, 0xCB, 0x87, 0xB7, 0x11,
+0xDE, 0xC0, 0x7D, 0xC1, 0x2E, 0xD5, 0x6B, 0xF4, 0xA1, 0xC1, 0xC3, 0x3F, 0xE6, 0xB8, 0xD4, 0x2C,
+0xD2, 0x8C, 0x24, 0x46, 0x7C, 0x1E, 0x10, 0x45, 0xC5, 0x9A, 0xFF, 0x20, 0x23, 0x85, 0xCB, 0x0E,
+0xE4, 0x09, 0x34, 0xF7, 0xBA, 0x0A, 0x54, 0x3C, 0x2D, 0x88, 0xE0, 0xC8, 0xC9, 0x4B, 0x18, 0xDE,
+0xFE, 0x93, 0x18, 0x1E, 0xE8, 0xE3, 0x40, 0xAB, 0xEB, 0x1D, 0xFD, 0xA0, 0x4E, 0xAF, 0xBF, 0x03,
+0x76, 0xA6, 0xF5, 0xC6, 0x41, 0xB7, 0xD1, 0x68, 0xFB, 0xA0, 0x33, 0x52, 0x6F, 0xF5, 0x44, 0x13,
+0xF8, 0x43, 0xDB, 0xB0, 0x4E, 0xB2, 0xEF, 0xBF, 0x76, 0x17, 0x9E, 0x9F, 0xD7, 0xE0, 0x9D, 0xE5,
+0x60, 0x26, 0xCE, 0x6B, 0x72, 0x0D, 0x83, 0x17, 0xC7, 0x4C, 0x35, 0xD1, 0xE9, 0x43, 0x8E, 0x62,
+0xA4, 0x49, 0x9F, 0xFD, 0x82, 0x92, 0x5F, 0x2A, 0xF6, 0x79, 0xBD, 0x49, 0x70, 0xA6, 0xBC, 0x2E,
+0xD6, 0xAE, 0x6E, 0x65, 0xE3, 0x88, 0x2A, 0x3A, 0x3E, 0xD7, 0x90, 0xD2, 0x7F, 0x22, 0x60, 0xF1,
+0x1A, 0x29, 0x35, 0x87, 0x5E, 0xA6, 0x0C, 0x55, 0xD6, 0x57, 0xB9, 0xF5, 0x68, 0x7C, 0xA2, 0x39,
+0x39, 0xC6, 0x8E, 0xD7, 0x9E, 0x97, 0x0B, 0xF0, 0xF1, 0x99, 0x88, 0xA8, 0xEC, 0x1A, 0x0E, 0x38,
+0xC3, 0xD0, 0x0F, 0x03, 0xD0, 0xBC, 0x7C, 0x04, 0xB7, 0xA5, 0x0C, 0xC6, 0x47, 0xAB, 0x05, 0x00,
+0xD2, 0x3B, 0xDE, 0x25, 0x58, 0x69, 0x14, 0x9C, 0x5B, 0x2F, 0x24, 0xDF, 0x4A, 0x4E, 0x51, 0x00,
+0xD6, 0x34, 0xE7, 0x8A, 0x28, 0x03, 0xED, 0x1A, 0x61, 0xD0, 0x43, 0x20, 0x3E, 0x6C, 0x93, 0x42,
+0x5E, 0xC6, 0xB0, 0x3E, 0x3D, 0xA4, 0x4F, 0xC4, 0xC2, 0xAC, 0xA1, 0x7C, 0x7A, 0x18, 0x7F, 0x2B,
+0x19, 0x88, 0xF8, 0xDA, 0x43, 0x24, 0x42, 0x92, 0x2F, 0x6F, 0x22, 0xCB, 0x5B, 0x4C, 0x67, 0x14,
+0x40, 0xC8, 0x1F, 0xA5, 0x60, 0xE2, 0x22, 0x25, 0xC5, 0x45, 0xB8, 0xB8, 0x10, 0x20, 0x1A, 0xE1,
+0x16, 0xCF, 0xAD, 0x84, 0xF6, 0xFF, 0xEB, 0xF3, 0x88, 0xB3, 0xE5, 0x30, 0x97, 0x4E, 0x3E, 0x77,
+0x21, 0xB1, 0x97, 0x0F, 0x10, 0xFB, 0x72, 0x15, 0x63, 0x6B, 0x39, 0x2C, 0xC7, 0x96, 0x98, 0xFB,
+0x40, 0x80, 0x88, 0x2D, 0xF5, 0x0C, 0x89, 0x60, 0x25, 0x7C, 0x8B, 0x9C, 0x66, 0x38, 0xA6, 0x16,
+0x7E, 0xBF, 0x3C, 0x24, 0x96, 0xBD, 0x82, 0xAD, 0xB0, 0xDC, 0x64, 0xCD, 0x24, 0x26, 0xC3, 0x39,
+0x96, 0x42, 0xD0, 0xB0, 0xA5, 0x04, 0x1D, 0xD2, 0x91, 0x0B, 0x2D, 0x1A, 0xB1, 0xA2, 0x31, 0x3C,
+0x2D, 0x25, 0xAC, 0xB0, 0x75, 0xE4, 0x38, 0x11, 0x02, 0x31, 0x47, 0x73, 0x9C, 0x9C, 0xD3, 0x63,
+0x83, 0x17, 0xC6, 0x6C, 0x62, 0x88, 0x22, 0x37, 0x08, 0x59, 0x8A, 0xB5, 0x09, 0x1D, 0x84, 0xC1,
+0x67, 0x91, 0x59, 0x48, 0x0A, 0x5B, 0xF3, 0xD4, 0xDF, 0xDB, 0x04, 0xE7, 0x43, 0xF8, 0x3E, 0x46,
+0xDC, 0x83, 0xE8, 0x7A, 0x9A, 0xED, 0x2E, 0x09, 0xAE, 0x5F, 0x8A, 0xC7, 0x4D, 0xB4, 0x21, 0x81,
+0x98, 0x4A, 0xD8, 0xAC, 0x16, 0xC6, 0xA0, 0x60, 0x6A, 0xF9, 0x30, 0x08, 0xC7, 0xEF, 0x8C, 0x92,
+0x87, 0x7A, 0x98, 0x10, 0x0B, 0xD9, 0x4B, 0xCF, 0xF6, 0xC7, 0xC4, 0xC9, 0x60, 0x22, 0x59, 0x3E,
+0xE4, 0x3C, 0xA6, 0x02, 0x51, 0xDE, 0x3C, 0x5A, 0x05, 0x11, 0x86, 0xB7, 0xBF, 0x5A, 0x29, 0xAA,
+0x19, 0x28, 0x14, 0x64, 0x08, 0x16, 0xC9, 0x32, 0xE2, 0x35, 0x25, 0x4D, 0xD5, 0x64, 0x65, 0x8E,
+0x46, 0x71, 0xCE, 0x5E, 0x19, 0xE5, 0xB3, 0xB5, 0xC2, 0x24, 0xCE, 0x12, 0x2B, 0xFB, 0x9D, 0x1F,
+0x8A, 0x9D, 0x05, 0xEC, 0x0C, 0x0B, 0xC6, 0xC1, 0x83, 0xF3, 0xC3, 0x69, 0x30, 0xB3, 0x07, 0x0F,
+0xFE, 0x17, 0x8F, 0xA0, 0x18, 0x01, 0x53, 0xAD, 0x00, 0x00
+};
+
+
+//File: index_ov3660.html.gz, Size: 8887
+#define index_ov3660_html_gz_len 8887
+const uint8_t index_ov3660_html_gz[] = {
+ 0x1F, 0x8B, 0x08, 0x08, 0xA3, 0xFA, 0x69, 0x5E, 0x00, 0x03, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x5F,
+ 0x6F, 0x76, 0x33, 0x36, 0x36, 0x30, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0x00, 0xED, 0x3D, 0x69, 0x73,
+ 0xDB, 0x46, 0xB2, 0xDF, 0xFD, 0x2B, 0x60, 0x24, 0x6B, 0x51, 0x65, 0x91, 0xE2, 0xAD, 0x23, 0x12,
+ 0xFD, 0x6C, 0x59, 0xB1, 0x53, 0x1B, 0x67, 0xBD, 0x71, 0xE2, 0x24, 0xB5, 0xB5, 0xE5, 0x80, 0xC4,
+ 0x90, 0x44, 0x0C, 0x02, 0x5C, 0x00, 0xD4, 0x91, 0x94, 0x7E, 0xC7, 0xFB, 0x41, 0xEF, 0x8F, 0xBD,
+ 0xEE, 0x39, 0x70, 0x71, 0x00, 0x0C, 0x00, 0x11, 0x52, 0xF2, 0x1E, 0x5D, 0x65, 0xE1, 0x98, 0xEE,
+ 0xE9, 0x7B, 0x7A, 0x7A, 0x06, 0xC0, 0xD9, 0x53, 0xD3, 0x9D, 0x05, 0xB7, 0x6B, 0xA2, 0x2D, 0x83,
+ 0x95, 0x3D, 0x79, 0x72, 0xC6, 0xFE, 0x68, 0xF0, 0x3B, 0x5B, 0x12, 0xC3, 0x64, 0x87, 0xF4, 0x74,
+ 0x45, 0x02, 0x43, 0x9B, 0x2D, 0x0D, 0xCF, 0x27, 0xC1, 0xB9, 0xBE, 0x09, 0xE6, 0xED, 0x63, 0x3D,
+ 0x7D, 0xDB, 0x31, 0x56, 0xE4, 0x5C, 0xBF, 0xB2, 0xC8, 0xF5, 0xDA, 0xF5, 0x02, 0x5D, 0x9B, 0xB9,
+ 0x4E, 0x40, 0x1C, 0x68, 0x7E, 0x6D, 0x99, 0xC1, 0xF2, 0xDC, 0x24, 0x57, 0xD6, 0x8C, 0xB4, 0xE9,
+ 0xC9, 0x81, 0xE5, 0x58, 0x81, 0x65, 0xD8, 0x6D, 0x7F, 0x66, 0xD8, 0xE4, 0xBC, 0x17, 0xC7, 0x15,
+ 0x58, 0x81, 0x4D, 0x26, 0x97, 0x1F, 0xDE, 0x0F, 0xFA, 0xDA, 0x3F, 0x3E, 0x0E, 0xC6, 0xE3, 0xEE,
+ 0xD9, 0x21, 0xBB, 0x16, 0xB5, 0xF1, 0x83, 0xDB, 0xF8, 0x39, 0xFE, 0xA6, 0xAE, 0x79, 0xAB, 0xFD,
+ 0x91, 0xB8, 0x84, 0xBF, 0x39, 0x10, 0xD1, 0x9E, 0x1B, 0x2B, 0xCB, 0xBE, 0x3D, 0xD5, 0x5E, 0x7A,
+ 0xD0, 0xE7, 0xC1, 0x5B, 0x62, 0x5F, 0x91, 0xC0, 0x9A, 0x19, 0x07, 0xBE, 0xE1, 0xF8, 0x6D, 0x9F,
+ 0x78, 0xD6, 0xFC, 0xAB, 0x2D, 0xC0, 0xA9, 0x31, 0xFB, 0xBC, 0xF0, 0xDC, 0x8D, 0x63, 0x9E, 0x6A,
+ 0x5F, 0xF4, 0x8E, 0xF1, 0xDF, 0x76, 0xA3, 0x99, 0x6B, 0xBB, 0x1E, 0xDC, 0xBF, 0xFC, 0x1A, 0xFF,
+ 0x6D, 0xDF, 0xA7, 0xBD, 0xFB, 0xD6, 0xEF, 0xE4, 0x54, 0xEB, 0x8D, 0xD7, 0x37, 0x89, 0xFB, 0x77,
+ 0x4F, 0x12, 0xA7, 0xCB, 0x7E, 0x16, 0xF5, 0x1C, 0xFE, 0x38, 0x1F, 0xDE, 0x27, 0xB3, 0xC0, 0x72,
+ 0x9D, 0xCE, 0xCA, 0xB0, 0x1C, 0x09, 0x26, 0xD3, 0xF2, 0xD7, 0xB6, 0x01, 0x32, 0x98, 0xDB, 0x24,
+ 0x17, 0xCF, 0x17, 0x2B, 0xE2, 0x6C, 0x0E, 0x0A, 0xB0, 0x21, 0x92, 0xB6, 0x69, 0x79, 0xAC, 0xD5,
+ 0x29, 0xCA, 0x61, 0xB3, 0x72, 0x0A, 0xD1, 0xE6, 0xD1, 0xE5, 0xB8, 0x0E, 0x91, 0x08, 0x10, 0x3B,
+ 0xBA, 0xF6, 0x8C, 0x35, 0x36, 0xC0, 0xBF, 0xDB, 0x4D, 0x56, 0x96, 0xC3, 0x8C, 0xEA, 0x54, 0x1B,
+ 0x0C, 0xBB, 0xEB, 0x9B, 0x02, 0x55, 0x0E, 0xC6, 0xF8, 0x6F, 0xBB, 0xD1, 0xDA, 0x30, 0x4D, 0xCB,
+ 0x59, 0x9C, 0x6A, 0xC7, 0x52, 0x14, 0xAE, 0x67, 0x12, 0xAF, 0xED, 0x19, 0xA6, 0xB5, 0xF1, 0x4F,
+ 0xB5, 0xA1, 0xAC, 0xCD, 0xCA, 0xF0, 0x16, 0x40, 0x4B, 0xE0, 0x02, 0xB1, 0xED, 0x9E, 0x94, 0x12,
+ 0xDE, 0xC4, 0xB3, 0x16, 0xCB, 0x00, 0x54, 0xBA, 0xD5, 0x26, 0x2D, 0x34, 0xEE, 0x42, 0x45, 0xFA,
+ 0xCC, 0x95, 0x9B, 0x5C, 0x6A, 0x86, 0x6D, 0x2D, 0x9C, 0xB6, 0x15, 0x90, 0x15, 0xB0, 0xE3, 0x07,
+ 0x1E, 0x09, 0x66, 0xCB, 0x3C, 0x52, 0xE6, 0xD6, 0x62, 0xE3, 0x11, 0x09, 0x21, 0xA1, 0xDC, 0x72,
+ 0x18, 0x86, 0x9B, 0xDB, 0xB7, 0xDA, 0xD7, 0x64, 0xFA, 0xD9, 0x0A, 0xDA, 0x5C, 0x26, 0x53, 0x32,
+ 0x77, 0x3D, 0x22, 0x6D, 0x29, 0x5A, 0xD8, 0xEE, 0xEC, 0x73, 0xDB, 0x0F, 0x0C, 0x2F, 0x50, 0x41,
+ 0x68, 0xCC, 0x03, 0xE2, 0x15, 0xE3, 0x23, 0x68, 0x15, 0xC5, 0xD8, 0xB2, 0xBB, 0xE5, 0x0D, 0x2C,
+ 0xC7, 0xB6, 0x1C, 0xA2, 0x4E, 0x5E, 0x56, 0xBF, 0x49, 0x74, 0xAC, 0x95, 0x82, 0x62, 0xAC, 0xD5,
+ 0x22, 0xCF, 0x4A, 0x28, 0xAF, 0xDB, 0x9D, 0x71, 0xBF, 0xE9, 0x75, 0xBB, 0x7F, 0xDB, 0xBE, 0xB9,
+ 0x24, 0xCC, 0x4C, 0x8D, 0x4D, 0xE0, 0xD6, 0xF7, 0x88, 0x2D, 0xB7, 0x4A, 0xF1, 0xF1, 0x5F, 0x2B,
+ 0x62, 0x5A, 0x86, 0xD6, 0x8A, 0xB9, 0xF3, 0x71, 0x17, 0x6C, 0x6A, 0x5F, 0x33, 0x1C, 0x53, 0x6B,
+ 0xB9, 0x9E, 0x05, 0x8E, 0x60, 0xD0, 0x70, 0x63, 0xC3, 0x15, 0x18, 0x38, 0xD6, 0x64, 0x5F, 0xC2,
+ 0x72, 0x8E, 0xCF, 0xC4, 0x25, 0x22, 0x77, 0x1B, 0xFC, 0x29, 0x84, 0x1C, 0xFC, 0x15, 0x3A, 0x90,
+ 0x84, 0x47, 0x8A, 0x3E, 0x4F, 0x5F, 0x71, 0x0A, 0xB3, 0x74, 0x86, 0xBF, 0x95, 0x71, 0xD3, 0xCE,
+ 0xD5, 0x9D, 0x68, 0x24, 0x74, 0x08, 0xC3, 0xEC, 0xAC, 0x05, 0x4D, 0xAF, 0x96, 0x5A, 0x5B, 0xC3,
+ 0x28, 0xB9, 0x2F, 0x87, 0xE1, 0x48, 0xE5, 0x2A, 0xC7, 0x5F, 0xDC, 0x28, 0x4A, 0xB0, 0x2B, 0x67,
+ 0x35, 0x8A, 0x1D, 0xEC, 0x9F, 0xCC, 0x86, 0x18, 0x27, 0x99, 0x51, 0x04, 0x7F, 0xEA, 0x91, 0x24,
+ 0x42, 0x56, 0x18, 0x4D, 0x24, 0x88, 0xB3, 0x23, 0xCA, 0x16, 0xDE, 0x2C, 0xEF, 0x96, 0x60, 0xCD,
+ 0x27, 0x41, 0x35, 0xBA, 0x48, 0x10, 0xE7, 0xD1, 0x50, 0x18, 0x65, 0xF0, 0x77, 0xA7, 0x90, 0x6F,
+ 0x7C, 0x31, 0xDD, 0x04, 0x81, 0xEB, 0xF8, 0xB5, 0x86, 0xA8, 0x2C, 0x3F, 0xFB, 0x6D, 0xE3, 0x07,
+ 0xD6, 0xFC, 0xB6, 0xCD, 0x5D, 0x1A, 0xFC, 0x6C, 0x6D, 0x40, 0x0A, 0x39, 0x25, 0xC1, 0x35, 0x21,
+ 0xF9, 0xE9, 0x86, 0x63, 0x5C, 0x41, 0xDC, 0x59, 0x2C, 0x6C, 0x99, 0xED, 0xCD, 0x36, 0x9E, 0x8F,
+ 0x79, 0xDB, 0xDA, 0xB5, 0x00, 0xB1, 0xB7, 0xDD, 0x71, 0xD2, 0x07, 0x15, 0x3B, 0x6A, 0xCF, 0xA6,
+ 0x92, 0xBE, 0xDC, 0x4D, 0x80, 0x32, 0x96, 0x6A, 0xC2, 0x05, 0x76, 0xAC, 0xE0, 0x56, 0x7A, 0x8F,
+ 0x7B, 0xA2, 0xE4, 0x8E, 0x70, 0xC1, 0xDC, 0x61, 0x21, 0x49, 0xD7, 0xE9, 0x6C, 0x49, 0x66, 0x9F,
+ 0x89, 0xF9, 0xBC, 0x30, 0x0D, 0x2B, 0x4A, 0x0F, 0x3B, 0x96, 0xB3, 0xDE, 0x04, 0x6D, 0x4C, 0xA7,
+ 0xD6, 0x3B, 0xD1, 0x39, 0x35, 0x48, 0xC1, 0x62, 0xBF, 0x9F, 0x97, 0x54, 0x8C, 0xD6, 0x37, 0xF9,
+ 0x42, 0x88, 0x13, 0x3B, 0xB1, 0x8D, 0x29, 0xB1, 0xF3, 0x48, 0xE6, 0xCE, 0x90, 0x11, 0x76, 0x79,
+ 0xAC, 0xCA, 0xCE, 0xDD, 0x28, 0x65, 0xD1, 0xE0, 0x35, 0x3C, 0xFA, 0x9B, 0xB2, 0x1C, 0xE9, 0xF1,
+ 0x41, 0xE2, 0x92, 0x4F, 0x6C, 0x70, 0xB0, 0xAC, 0xD4, 0x1B, 0xDA, 0x5C, 0x03, 0x0D, 0xB9, 0x1D,
+ 0x78, 0x86, 0xB3, 0x20, 0x10, 0x0B, 0x6E, 0x0E, 0xC4, 0x61, 0xFE, 0xC4, 0x40, 0x89, 0x7D, 0x0C,
+ 0xD5, 0xA3, 0xFC, 0x89, 0x08, 0x0B, 0x08, 0x07, 0x5A, 0x87, 0x1D, 0x54, 0xC8, 0x4A, 0x62, 0xFA,
+ 0xCD, 0x25, 0xA4, 0x27, 0xB5, 0x0E, 0x96, 0x98, 0x48, 0x3D, 0x27, 0x69, 0x5B, 0xD2, 0x44, 0xBF,
+ 0x30, 0x34, 0x88, 0x29, 0xDF, 0x7C, 0x5E, 0x34, 0x69, 0x9C, 0xCF, 0x07, 0xDD, 0xC1, 0xB0, 0x30,
+ 0x73, 0x92, 0x72, 0x99, 0x9A, 0x38, 0x4A, 0x42, 0x47, 0x18, 0x56, 0x72, 0x8D, 0xC0, 0x37, 0xAE,
+ 0xA4, 0x49, 0xBB, 0xEB, 0x5B, 0x6C, 0xE6, 0x66, 0x4C, 0x7D, 0x98, 0xBB, 0x05, 0x92, 0xA9, 0x17,
+ 0x37, 0xF4, 0xBE, 0x94, 0x3E, 0x9A, 0xD2, 0x49, 0x5D, 0x40, 0x88, 0x57, 0x4E, 0x76, 0x42, 0x03,
+ 0xF2, 0x26, 0x31, 0x05, 0x4B, 0x93, 0xCA, 0x80, 0xDC, 0x04, 0x6D, 0x93, 0xCC, 0x5C, 0x8F, 0x65,
+ 0x83, 0x19, 0x33, 0xC7, 0x94, 0x22, 0x8B, 0x2D, 0xF6, 0x74, 0xE9, 0x5E, 0x11, 0x4F, 0x22, 0xAC,
+ 0x94, 0x52, 0x87, 0x27, 0x43, 0x53, 0x01, 0x9B, 0x01, 0xC3, 0xA3, 0x54, 0xF6, 0x49, 0x74, 0xFD,
+ 0xDE, 0xAC, 0x9F, 0xEB, 0xC7, 0x0C, 0x5D, 0x07, 0x7C, 0xC6, 0x98, 0xDA, 0xC4, 0xCC, 0x19, 0xCD,
+ 0x4C, 0x32, 0x37, 0x36, 0x76, 0x50, 0x60, 0x95, 0x46, 0x17, 0xFF, 0xE5, 0xF5, 0x48, 0xC3, 0xD0,
+ 0xBF, 0xB0, 0x2E, 0x74, 0x4E, 0x03, 0xC7, 0xBF, 0x25, 0x7D, 0x8A, 0x54, 0xC3, 0x58, 0xAF, 0x89,
+ 0x01, 0xAD, 0x66, 0x24, 0x4B, 0x0F, 0x4A, 0x53, 0x0C, 0x79, 0x9C, 0x57, 0x9A, 0xB7, 0x17, 0x3A,
+ 0x6C, 0x98, 0x3C, 0x96, 0xE2, 0xF9, 0x74, 0xEE, 0xCE, 0x36, 0xB2, 0xAC, 0x46, 0xCD, 0xF1, 0xB6,
+ 0xF1, 0x9D, 0x0A, 0x91, 0xF9, 0xB6, 0x45, 0xDD, 0x7F, 0xE3, 0x38, 0xA8, 0xD1, 0x76, 0xE0, 0x01,
+ 0x9B, 0x92, 0x8E, 0xD4, 0x04, 0x57, 0x29, 0x86, 0x25, 0x04, 0x9B, 0x55, 0xBB, 0x4A, 0x85, 0x29,
+ 0x49, 0x38, 0x0D, 0x23, 0xAD, 0x06, 0x31, 0xC4, 0x32, 0x05, 0xAA, 0x7A, 0x72, 0x09, 0x96, 0x9B,
+ 0x95, 0x2C, 0x8F, 0x12, 0x9D, 0xF5, 0x60, 0xD0, 0x67, 0xDD, 0x79, 0x8B, 0xA9, 0xD1, 0xEA, 0x1E,
+ 0x74, 0x0F, 0x06, 0xF0, 0x9F, 0x64, 0x3E, 0x93, 0x6F, 0x5C, 0x5C, 0xBC, 0x19, 0x96, 0x97, 0x0A,
+ 0xD1, 0xC5, 0x65, 0xA5, 0xAC, 0x60, 0x5F, 0xA8, 0x0B, 0x75, 0x4F, 0x4A, 0xD6, 0x97, 0x7A, 0x9D,
+ 0x82, 0x71, 0x38, 0xC3, 0xA4, 0xCB, 0x1B, 0xA2, 0xC4, 0x5A, 0xCA, 0xAA, 0x78, 0xE5, 0xFE, 0xDE,
+ 0x66, 0x49, 0xC8, 0xFF, 0x79, 0x6B, 0x8F, 0x89, 0xE2, 0x2F, 0x6D, 0xE9, 0xA5, 0xE5, 0xE2, 0x3F,
+ 0xB4, 0x6D, 0x74, 0xB3, 0xB5, 0xDE, 0xE6, 0x59, 0x1F, 0x50, 0xE8, 0xC0, 0x1C, 0xD4, 0x83, 0xC9,
+ 0x68, 0x66, 0x66, 0x18, 0x6B, 0x53, 0x41, 0x06, 0x73, 0xCB, 0xB6, 0xDB, 0xB6, 0x7B, 0x5D, 0x9C,
+ 0x89, 0xE4, 0x5B, 0xF2, 0x96, 0x9D, 0x16, 0x9B, 0x7C, 0x55, 0x6A, 0x37, 0x10, 0xB9, 0xFE, 0x14,
+ 0xD4, 0xFE, 0xB5, 0x1D, 0x2E, 0xD7, 0x35, 0xAA, 0x0D, 0x14, 0x15, 0xEC, 0xB1, 0x5E, 0x47, 0x4A,
+ 0xA6, 0xC4, 0x32, 0xC1, 0xFC, 0x69, 0xCF, 0xB5, 0x15, 0xCC, 0x96, 0x15, 0xA6, 0x9E, 0xD1, 0xC4,
+ 0xC8, 0x23, 0xB6, 0x81, 0x19, 0x7C, 0xA5, 0x0A, 0x45, 0xE1, 0xF4, 0x2D, 0x0E, 0xAE, 0xC2, 0x09,
+ 0x15, 0xDD, 0xE3, 0xA9, 0x2E, 0x75, 0x58, 0xEE, 0x90, 0x1D, 0xAB, 0xE5, 0x66, 0x5D, 0x90, 0xEE,
+ 0x27, 0x3D, 0x43, 0xDE, 0xA8, 0x44, 0x44, 0x17, 0x41, 0x7B, 0xE1, 0x91, 0x5B, 0x05, 0x66, 0x0E,
+ 0xF8, 0xDF, 0x53, 0x56, 0x3F, 0xAE, 0x5E, 0x2A, 0xA1, 0x03, 0x00, 0xB7, 0xA2, 0xCE, 0xD0, 0x57,
+ 0xE8, 0x3A, 0xBB, 0x4B, 0x15, 0x7B, 0x0C, 0xAB, 0xA3, 0xBA, 0xAE, 0x10, 0x6E, 0x72, 0x86, 0x50,
+ 0xB9, 0xA9, 0x8A, 0xD1, 0x57, 0x3E, 0x9F, 0x27, 0xF3, 0x20, 0x63, 0xF1, 0x87, 0xE6, 0xA9, 0x83,
+ 0xFC, 0xE8, 0xD6, 0x8E, 0x55, 0x53, 0x0A, 0x23, 0x47, 0x58, 0xC4, 0xCC, 0xB6, 0x3E, 0x29, 0x66,
+ 0x8C, 0x9E, 0xA5, 0x91, 0x67, 0xAB, 0x44, 0xA4, 0xCF, 0x54, 0xCD, 0xD0, 0x66, 0xC5, 0x87, 0x7C,
+ 0x50, 0x0F, 0xF9, 0xB9, 0xD5, 0x1F, 0x4B, 0xD7, 0x56, 0x72, 0x1A, 0xE7, 0x91, 0x96, 0x59, 0x05,
+ 0xDC, 0x1E, 0xB2, 0x32, 0x27, 0xC8, 0xF1, 0x58, 0x24, 0x55, 0x54, 0xBE, 0x57, 0xE6, 0x45, 0x98,
+ 0xED, 0x4A, 0x56, 0xAE, 0xB1, 0x5B, 0x2B, 0x03, 0xD2, 0x5E, 0x34, 0x57, 0x03, 0x30, 0xCA, 0xF4,
+ 0xA7, 0x62, 0xEE, 0xB1, 0x1A, 0x6B, 0x6F, 0xDC, 0x2D, 0xE8, 0x72, 0x66, 0xBB, 0x7E, 0xCD, 0x02,
+ 0x58, 0x76, 0xFD, 0x4B, 0x7A, 0x47, 0x69, 0xE8, 0xCE, 0xF5, 0xA9, 0x7C, 0x77, 0x4C, 0xC9, 0xBC,
+ 0xD7, 0x95, 0x46, 0xDA, 0xDC, 0x2A, 0x25, 0xAD, 0xA0, 0xD1, 0xF5, 0xCB, 0x53, 0x6D, 0x46, 0xE4,
+ 0x61, 0x34, 0x59, 0xA8, 0x53, 0x29, 0x95, 0xE6, 0xEA, 0x61, 0x69, 0x99, 0x26, 0xC9, 0xAD, 0x05,
+ 0xE3, 0x9C, 0x57, 0x31, 0x79, 0x40, 0xFA, 0x65, 0x45, 0xA9, 0x9D, 0x38, 0x45, 0xEE, 0xB6, 0x86,
+ 0xDE, 0xAE, 0x3D, 0x86, 0x0F, 0x34, 0x59, 0x95, 0xF4, 0x64, 0x2A, 0x92, 0x4B, 0xAA, 0xD4, 0xB9,
+ 0xC3, 0x5A, 0x2B, 0x8A, 0x0C, 0xE4, 0x80, 0xAD, 0xB6, 0xA3, 0x79, 0x8A, 0x2A, 0xBA, 0x90, 0xD2,
+ 0xE1, 0x6B, 0x4B, 0x7C, 0x19, 0xB0, 0x9D, 0xB5, 0xBA, 0x72, 0x8F, 0x4B, 0x6D, 0xD4, 0x02, 0xD2,
+ 0xFD, 0x66, 0x8A, 0xE6, 0x81, 0x32, 0xA3, 0x1C, 0x22, 0xC3, 0x21, 0x46, 0x6C, 0xAE, 0x4A, 0xB6,
+ 0x2A, 0xEB, 0x1C, 0xE1, 0xF9, 0xD9, 0x61, 0x6C, 0x3B, 0xDC, 0xD9, 0x61, 0xB4, 0x73, 0xEF, 0x0C,
+ 0xF7, 0xC4, 0xC5, 0x77, 0xCD, 0xF1, 0x8E, 0x66, 0xB6, 0xE1, 0xFB, 0xE7, 0x3A, 0xEE, 0xED, 0xD2,
+ 0x93, 0x9B, 0xE8, 0xCE, 0x4C, 0xEB, 0x4A, 0xB3, 0xCC, 0x73, 0xDD, 0x76, 0x17, 0x6E, 0xEA, 0x1E,
+ 0xBD, 0xCF, 0xD4, 0x0C, 0x03, 0xD9, 0xB9, 0x9E, 0x58, 0x60, 0xD4, 0x29, 0x54, 0x74, 0x49, 0x9F,
+ 0x3C, 0xFB, 0xE2, 0xE4, 0xE8, 0x68, 0xFC, 0xD5, 0x33, 0x67, 0xEA, 0xAF, 0xF9, 0xFF, 0x3F, 0xB0,
+ 0xF5, 0x58, 0xB6, 0xA9, 0x0F, 0xC6, 0xB6, 0x20, 0x00, 0xDB, 0xF3, 0xCF, 0x0E, 0x29, 0xD2, 0x14,
+ 0x21, 0x87, 0x40, 0x49, 0x06, 0x6D, 0x3C, 0xDF, 0x91, 0x91, 0x27, 0x9A, 0xF8, 0x30, 0x84, 0x4F,
+ 0x0D, 0x4F, 0xD2, 0x84, 0x36, 0x63, 0xD9, 0x34, 0x8D, 0x25, 0x3A, 0x55, 0xCA, 0xD4, 0xBD, 0x49,
+ 0x73, 0x40, 0x99, 0xE2, 0x1A, 0xE3, 0xAD, 0x88, 0x99, 0x85, 0x10, 0xC0, 0x28, 0x38, 0xAE, 0xAE,
+ 0x42, 0x1B, 0x69, 0xA3, 0x84, 0x0A, 0xB0, 0xF1, 0xCD, 0xCC, 0xFE, 0x2C, 0x94, 0xAF, 0x0B, 0xA5,
+ 0x38, 0x6E, 0xC0, 0x62, 0x65, 0x46, 0x57, 0x09, 0x56, 0x39, 0x4C, 0x6C, 0xDD, 0x90, 0x71, 0x01,
+ 0xA2, 0x6D, 0x53, 0xEC, 0xEC, 0x5A, 0x3E, 0x26, 0x8A, 0x2D, 0xA6, 0x57, 0x01, 0xAC, 0x4F, 0x7E,
+ 0xBE, 0xF8, 0xF6, 0xEF, 0xDA, 0xBB, 0xB7, 0xBF, 0x4B, 0x35, 0x54, 0x44, 0x14, 0x06, 0x69, 0x85,
+ 0x9E, 0x29, 0x18, 0xD3, 0x87, 0x90, 0x89, 0xCE, 0x35, 0x43, 0x31, 0xE0, 0x70, 0x6F, 0x13, 0x67,
+ 0x11, 0x2C, 0xCF, 0xF5, 0x9E, 0x8E, 0x7B, 0x5A, 0xC4, 0x59, 0x5F, 0xD7, 0x30, 0x80, 0xD3, 0x83,
+ 0x2B, 0xC3, 0xDE, 0xE0, 0x51, 0x57, 0x85, 0xD7, 0x6D, 0xD3, 0x92, 0x36, 0xE3, 0x91, 0x25, 0x94,
+ 0x71, 0x2C, 0x12, 0x27, 0xA5, 0xAC, 0x4F, 0x3E, 0x90, 0xE0, 0xEC, 0x90, 0xDD, 0x2A, 0xD0, 0x5A,
+ 0x7E, 0xDF, 0xE0, 0xC9, 0xCC, 0x1C, 0xF2, 0x4C, 0x28, 0x4F, 0xF1, 0x73, 0xCF, 0x58, 0x11, 0x94,
+ 0x8A, 0x92, 0xE6, 0xE3, 0x5A, 0x0F, 0x21, 0xF5, 0xC9, 0xF7, 0x84, 0x66, 0x44, 0x40, 0x86, 0x92,
+ 0xE2, 0xCF, 0x78, 0x92, 0x9A, 0xE8, 0x3F, 0xB4, 0x67, 0xBE, 0x28, 0xD5, 0x36, 0x98, 0x99, 0x2B,
+ 0xC8, 0xFD, 0x69, 0xBB, 0xAD, 0x0D, 0xDE, 0xBD, 0xD7, 0xDA, 0x6D, 0x85, 0xC6, 0xEE, 0x9A, 0xBA,
+ 0x13, 0xD7, 0x7F, 0xEF, 0x48, 0x9F, 0xFC, 0xF3, 0xE7, 0x37, 0x2F, 0x5B, 0xFD, 0xEE, 0xF0, 0xF8,
+ 0xA6, 0x37, 0x1A, 0x0F, 0xF7, 0xCF, 0x0E, 0x59, 0x93, 0xF2, 0xB8, 0xC6, 0xFA, 0xE4, 0x3D, 0x12,
+ 0xD2, 0x3A, 0x1E, 0x0F, 0xEB, 0xE2, 0x1A, 0x21, 0xAE, 0xB7, 0xAF, 0x5B, 0x47, 0xFD, 0xEE, 0x4D,
+ 0xAF, 0x7F, 0xDC, 0xAD, 0x81, 0x6A, 0xA8, 0x4F, 0xBE, 0x06, 0x4C, 0xBD, 0x13, 0x44, 0xD5, 0x2D,
+ 0x87, 0x0A, 0x45, 0xDB, 0xAF, 0x28, 0xDA, 0x81, 0x3E, 0xF9, 0x11, 0x45, 0x0B, 0x39, 0x37, 0xF2,
+ 0xD0, 0xAD, 0xC3, 0x43, 0x1F, 0x5C, 0x86, 0xE2, 0x02, 0x51, 0x00, 0x13, 0xFD, 0x3A, 0xA2, 0xED,
+ 0xE9, 0x13, 0x14, 0x07, 0x62, 0x02, 0xE9, 0xD6, 0x40, 0x04, 0xB1, 0x83, 0xD2, 0x04, 0xE4, 0xDC,
+ 0x1C, 0x8D, 0x8F, 0xAB, 0x63, 0x3A, 0x01, 0xEE, 0x3E, 0x02, 0xA6, 0x63, 0x10, 0xD4, 0xB8, 0x8E,
+ 0x9C, 0x8E, 0xF5, 0x09, 0xE2, 0x19, 0x0F, 0xBB, 0x37, 0xC3, 0x3A, 0x36, 0x03, 0x5E, 0xF1, 0x16,
+ 0x11, 0x01, 0x92, 0x9B, 0x41, 0x1D, 0x19, 0x81, 0x4B, 0x5C, 0x7C, 0xF3, 0x75, 0x6B, 0x08, 0x8C,
+ 0xF5, 0x4F, 0xC6, 0xD5, 0xF1, 0x80, 0x3B, 0xFC, 0x13, 0x09, 0x02, 0x62, 0x6E, 0xFA, 0xC3, 0x1A,
+ 0x04, 0x81, 0x33, 0x00, 0x3C, 0xE2, 0xA8, 0x8C, 0x02, 0xEC, 0xFA, 0x2D, 0x25, 0x06, 0x11, 0xF5,
+ 0x8E, 0x6A, 0x70, 0x05, 0x56, 0xFD, 0x4F, 0x14, 0x0F, 0x20, 0xB9, 0xE9, 0x0D, 0xEB, 0xD8, 0x34,
+ 0x20, 0xA2, 0x24, 0x81, 0xAF, 0xA1, 0xAB, 0x55, 0xC7, 0x04, 0x36, 0x7D, 0x32, 0xBE, 0x39, 0x19,
+ 0xAB, 0x21, 0xC0, 0xE1, 0x07, 0x43, 0x79, 0xDE, 0x00, 0x95, 0x3F, 0x7E, 0xE5, 0x8D, 0x4D, 0xFF,
+ 0xD9, 0xC0, 0x94, 0x33, 0xB8, 0x2D, 0x3D, 0x32, 0x71, 0x38, 0x90, 0x09, 0x3B, 0x50, 0x1B, 0x94,
+ 0x62, 0x94, 0x84, 0xBB, 0x9F, 0xF4, 0xC9, 0x50, 0x61, 0xF0, 0x4F, 0x64, 0x87, 0x14, 0x36, 0x41,
+ 0x3F, 0xCD, 0x48, 0xD0, 0xF2, 0x30, 0x17, 0x01, 0x97, 0x18, 0xE8, 0xB1, 0x08, 0x52, 0x69, 0xD4,
+ 0x93, 0xD0, 0x6A, 0xDC, 0xE8, 0x93, 0xF1, 0xA0, 0x30, 0x5B, 0xA8, 0xAE, 0x8C, 0x29, 0x2D, 0x6E,
+ 0x38, 0xC4, 0xF7, 0x4B, 0xEB, 0x23, 0x02, 0xD5, 0x27, 0xAF, 0xC2, 0xE3, 0x3A, 0x5A, 0x69, 0x17,
+ 0x71, 0x4A, 0x61, 0x33, 0xD4, 0x12, 0x23, 0x87, 0x69, 0xA6, 0x3D, 0xE0, 0xAA, 0x89, 0x34, 0x73,
+ 0xBF, 0x8A, 0xD9, 0xA5, 0x5E, 0x70, 0x6E, 0xE3, 0x19, 0x7E, 0x50, 0x5A, 0x2B, 0x02, 0x10, 0x22,
+ 0x34, 0x3F, 0x7A, 0x30, 0x8D, 0x84, 0xA4, 0xFC, 0x05, 0xF4, 0xE1, 0x1B, 0xC1, 0x86, 0xED, 0x33,
+ 0x2B, 0xAD, 0x91, 0x08, 0x14, 0xF2, 0x81, 0xF0, 0xB8, 0x96, 0x56, 0xEA, 0x84, 0xAF, 0x18, 0x39,
+ 0x5C, 0x2F, 0x22, 0x84, 0x0D, 0x77, 0xA4, 0x97, 0x22, 0x6A, 0x6B, 0xE9, 0x65, 0x69, 0x78, 0xEB,
+ 0x4A, 0xE1, 0x2B, 0x84, 0x04, 0xAD, 0x88, 0xC3, 0x07, 0x73, 0x95, 0x88, 0x98, 0xBF, 0x80, 0xAF,
+ 0x98, 0xC4, 0x71, 0x2D, 0xBF, 0xFC, 0xD4, 0x93, 0xC3, 0xE9, 0x93, 0xD7, 0xA4, 0xFD, 0x1D, 0x1E,
+ 0xD5, 0x51, 0xC7, 0xCB, 0x4D, 0xE0, 0xD6, 0x50, 0x88, 0xA0, 0x85, 0xA9, 0xA3, 0xCB, 0xB5, 0x71,
+ 0xBC, 0x23, 0x6D, 0x1C, 0xEF, 0x50, 0x1B, 0x06, 0xF9, 0x64, 0x93, 0x2B, 0x62, 0x97, 0x56, 0x87,
+ 0x00, 0xD4, 0x27, 0x97, 0x37, 0x6B, 0xD7, 0xC7, 0xA7, 0x77, 0xBE, 0xC5, 0xF3, 0x5A, 0x4E, 0x32,
+ 0xAA, 0xA1, 0x93, 0x90, 0x20, 0xEE, 0x23, 0x23, 0xAE, 0x95, 0xD1, 0x8E, 0xB4, 0x52, 0x44, 0x6B,
+ 0x1D, 0xAD, 0x2C, 0x0C, 0xCB, 0x99, 0x11, 0xCB, 0xC6, 0x27, 0x09, 0xCA, 0x2A, 0x26, 0x06, 0xAB,
+ 0x4F, 0xDE, 0x44, 0x27, 0x75, 0x14, 0xD3, 0xAD, 0xA1, 0x97, 0x38, 0x3D, 0x49, 0x7F, 0x19, 0xC1,
+ 0xAC, 0x7C, 0x47, 0xBA, 0xE9, 0xF5, 0x76, 0x39, 0xAA, 0xAC, 0xC9, 0xCC, 0x32, 0xEC, 0x4F, 0x64,
+ 0x3E, 0x87, 0x69, 0x50, 0xF9, 0xA1, 0x25, 0x01, 0x0E, 0xE3, 0x0B, 0x3B, 0xD7, 0x2E, 0xE9, 0x79,
+ 0xE9, 0x62, 0x5A, 0x0A, 0x5D, 0xF5, 0x8A, 0x5A, 0x7A, 0x4E, 0xC8, 0x97, 0x95, 0x09, 0xAD, 0x61,
+ 0xB2, 0x23, 0x7D, 0xF2, 0x9D, 0x1B, 0xD2, 0x59, 0x7D, 0xDA, 0xFA, 0x1D, 0x59, 0xD0, 0x55, 0xDB,
+ 0x3A, 0x73, 0xE8, 0x37, 0x9E, 0x71, 0x4B, 0x5F, 0x0B, 0x50, 0x67, 0x4A, 0xFF, 0x3D, 0x31, 0xB5,
+ 0x1F, 0x2C, 0xA7, 0x3A, 0x33, 0x43, 0x24, 0x84, 0x10, 0xA7, 0x1E, 0x96, 0x11, 0x4C, 0x91, 0xE0,
+ 0xA0, 0x1E, 0x92, 0x31, 0x16, 0x98, 0xD7, 0x96, 0xF1, 0x18, 0x26, 0xF1, 0xC6, 0xF5, 0xB4, 0xFC,
+ 0x80, 0x72, 0x3D, 0x85, 0x71, 0xF9, 0xA7, 0x57, 0xDA, 0x25, 0xDD, 0x67, 0x5C, 0x3A, 0x5C, 0xB1,
+ 0x2D, 0x50, 0x2A, 0x86, 0x1E, 0xAD, 0x23, 0x60, 0x9F, 0x5B, 0x0B, 0x3C, 0x72, 0x07, 0x52, 0x5D,
+ 0xE4, 0x91, 0xB0, 0x27, 0x08, 0xA4, 0x3B, 0x46, 0xF4, 0x18, 0xB7, 0x6A, 0x3C, 0xEE, 0x30, 0x15,
+ 0x9B, 0x5D, 0x97, 0x4F, 0xC3, 0x66, 0xD7, 0xA0, 0x26, 0xF3, 0x0A, 0xB7, 0xA0, 0x9B, 0x1A, 0xE8,
+ 0xAB, 0x11, 0x45, 0x61, 0xAF, 0x0F, 0xA3, 0x28, 0xCA, 0xEF, 0x43, 0x2B, 0x0A, 0xAC, 0xE5, 0x13,
+ 0x8E, 0xA3, 0x55, 0x9C, 0x8A, 0x02, 0xEA, 0x93, 0x77, 0x86, 0xB3, 0x81, 0x41, 0xA6, 0x29, 0x85,
+ 0x85, 0x1D, 0x3F, 0x98, 0x7B, 0x71, 0xBE, 0x1F, 0x5A, 0x75, 0x40, 0xC8, 0xCA, 0x35, 0xCB, 0x4F,
+ 0x77, 0x38, 0x1C, 0x0B, 0x89, 0xEF, 0xE0, 0xA8, 0x74, 0x62, 0x20, 0x30, 0xEC, 0x38, 0x23, 0x60,
+ 0x53, 0xA9, 0xEA, 0xC9, 0xC0, 0x87, 0x8D, 0xE3, 0xDC, 0xD6, 0xC9, 0x04, 0x2E, 0x6C, 0x77, 0x63,
+ 0x56, 0xC7, 0x00, 0x69, 0xC0, 0x3F, 0xE6, 0x73, 0x6B, 0x56, 0x3D, 0x91, 0x80, 0x24, 0xE0, 0xAD,
+ 0xBB, 0x52, 0x84, 0xDF, 0xF1, 0xC0, 0x4B, 0x66, 0x15, 0x66, 0x72, 0x33, 0xD0, 0xE2, 0xE5, 0x45,
+ 0xA3, 0x03, 0x2F, 0xF4, 0xF9, 0x40, 0x91, 0x01, 0xB9, 0x7D, 0xE8, 0xA0, 0x00, 0x44, 0x7C, 0xA2,
+ 0xC6, 0x53, 0x45, 0x59, 0x0C, 0x32, 0x8C, 0xE8, 0x62, 0xFA, 0xFD, 0x50, 0xF3, 0xBB, 0x88, 0xA2,
+ 0xE4, 0xEC, 0xAE, 0x37, 0x1A, 0x8C, 0xC3, 0xE9, 0xDD, 0xA0, 0x7F, 0xBF, 0x13, 0x3C, 0x44, 0xBE,
+ 0x5B, 0xFD, 0xF4, 0xAB, 0xA8, 0x06, 0xA2, 0xD1, 0x77, 0xB8, 0xCE, 0x50, 0x22, 0x60, 0xD7, 0x77,
+ 0xA4, 0xFE, 0xC3, 0x79, 0x52, 0xFF, 0x11, 0xB8, 0xD2, 0xA2, 0x42, 0xC4, 0x5B, 0x60, 0xC4, 0x7B,
+ 0x73, 0xD1, 0x8C, 0x86, 0x16, 0x0F, 0x16, 0xEA, 0x16, 0x0F, 0x1A, 0xEA, 0x34, 0xBE, 0x43, 0x4D,
+ 0x48, 0xA1, 0x62, 0x06, 0xCB, 0x01, 0x59, 0x2D, 0xAB, 0x4E, 0x90, 0xEB, 0xDD, 0xD4, 0x89, 0x72,
+ 0x82, 0x8C, 0x64, 0x90, 0x1B, 0x47, 0xAB, 0x22, 0xA3, 0xFB, 0x5D, 0xD6, 0x1D, 0x16, 0x51, 0x5B,
+ 0xC7, 0x69, 0x3C, 0xE3, 0xFA, 0xD3, 0x62, 0x65, 0x94, 0x56, 0x06, 0x87, 0x03, 0x5D, 0xBC, 0x7B,
+ 0xD9, 0x64, 0xBA, 0x20, 0xFA, 0x7D, 0x18, 0x3F, 0x0A, 0xB9, 0x7E, 0xE8, 0x58, 0x67, 0x13, 0xA7,
+ 0x7C, 0xB0, 0x43, 0x20, 0x7D, 0xF2, 0x2D, 0x71, 0x7C, 0xED, 0xC2, 0xF5, 0xF8, 0xBB, 0x18, 0x1B,
+ 0xD1, 0x1A, 0xED, 0xF9, 0x61, 0x54, 0xC6, 0x98, 0x7E, 0x68, 0x7D, 0x2D, 0x57, 0x96, 0xE7, 0xB9,
+ 0x5E, 0x69, 0x95, 0x71, 0x38, 0x98, 0x56, 0xB4, 0xDF, 0xD1, 0xA3, 0x46, 0xD4, 0x25, 0x7A, 0x7D,
+ 0x18, 0x8D, 0x85, 0x3C, 0x3F, 0xB4, 0xD2, 0xAE, 0xE6, 0xB6, 0xB5, 0x2E, 0xAD, 0x32, 0x0A, 0xA5,
+ 0x4F, 0x3E, 0xB6, 0xBF, 0x86, 0xBF, 0x8D, 0xA8, 0x8B, 0xF5, 0xF8, 0x30, 0xCA, 0xE2, 0xDC, 0x3E,
+ 0xB4, 0xAA, 0xA6, 0xEB, 0xF2, 0xE1, 0x10, 0x60, 0xF4, 0xC9, 0xAB, 0xF7, 0xCD, 0xE4, 0x7E, 0xD8,
+ 0x99, 0xA2, 0x86, 0x6A, 0xE9, 0x83, 0x32, 0xF5, 0xD0, 0xDA, 0xB8, 0xAE, 0xA0, 0x8D, 0x6B, 0x24,
+ 0xFC, 0xA7, 0x86, 0xB4, 0x71, 0xAD, 0xAE, 0x8D, 0x7B, 0xF6, 0x97, 0xEB, 0xC7, 0xA0, 0x1F, 0xFA,
+ 0xB0, 0xDF, 0xD4, 0x28, 0x3F, 0x1C, 0x09, 0x40, 0xDC, 0x34, 0x06, 0x47, 0xDA, 0x2B, 0xA3, 0x99,
+ 0x01, 0x29, 0xEC, 0xB7, 0x09, 0x17, 0x8A, 0x98, 0x7C, 0x68, 0x3D, 0xD9, 0xC4, 0xAC, 0x90, 0xE4,
+ 0x99, 0x9F, 0xF0, 0xC9, 0x39, 0x7C, 0xA2, 0xFC, 0x16, 0xB2, 0xBD, 0xCB, 0xD7, 0xDA, 0x37, 0xE2,
+ 0xF4, 0xA1, 0x0A, 0x43, 0x49, 0x9A, 0x92, 0xF3, 0xA6, 0xFE, 0x68, 0x57, 0xDB, 0x32, 0x00, 0xF3,
+ 0x0E, 0x75, 0x33, 0x37, 0x66, 0xE4, 0x93, 0x49, 0x82, 0x2A, 0xEB, 0xFE, 0x31, 0x58, 0x7D, 0xF2,
+ 0x35, 0x9C, 0x68, 0xAF, 0xE9, 0x49, 0x53, 0xE9, 0x78, 0xBC, 0xFF, 0x26, 0x3C, 0x2A, 0xC1, 0xEF,
+ 0x43, 0x3B, 0x15, 0x25, 0x06, 0x26, 0x3F, 0xEE, 0xC2, 0xA9, 0xF4, 0xDC, 0x53, 0x02, 0x9C, 0xAB,
+ 0xEF, 0x7B, 0x76, 0xDE, 0xAC, 0x02, 0x23, 0x22, 0x1A, 0xD3, 0x61, 0x8C, 0xEF, 0x26, 0xD4, 0x18,
+ 0x7F, 0xF8, 0x91, 0xBF, 0x36, 0xB8, 0x48, 0x53, 0xFC, 0x21, 0x3C, 0xBA, 0xDD, 0x88, 0x04, 0x6D,
+ 0x3F, 0xB0, 0x6C, 0x5B, 0x9F, 0xBC, 0x21, 0x81, 0xF6, 0x01, 0x0F, 0x15, 0x9F, 0xBA, 0x8B, 0x61,
+ 0x11, 0xCF, 0xDC, 0x06, 0x1E, 0x31, 0x56, 0xFA, 0xE4, 0x03, 0xBE, 0x50, 0x19, 0x70, 0xE1, 0x59,
+ 0x79, 0x64, 0x54, 0x88, 0xC4, 0xF1, 0x5C, 0x20, 0x2A, 0x54, 0x12, 0x7F, 0x51, 0xA3, 0xAE, 0x89,
+ 0xA3, 0xD8, 0xB5, 0xC9, 0x25, 0x6D, 0xAC, 0xA1, 0x95, 0x15, 0x77, 0x17, 0x7F, 0x1C, 0x30, 0xDF,
+ 0x39, 0xE8, 0x03, 0xC0, 0xF8, 0x44, 0x6F, 0xF2, 0x7D, 0xEB, 0xA0, 0x56, 0xF6, 0x7C, 0xFF, 0xE4,
+ 0xCC, 0x5F, 0x1B, 0x8E, 0x68, 0x46, 0x1F, 0x7E, 0xBF, 0xE6, 0x4F, 0x33, 0x4F, 0x5D, 0xDB, 0xFC,
+ 0x2A, 0xB6, 0xF0, 0xFF, 0x21, 0x7C, 0x2C, 0x17, 0x41, 0xC0, 0x2E, 0x04, 0x86, 0x02, 0xE5, 0x2E,
+ 0x3D, 0x81, 0x9E, 0x3D, 0x41, 0x8D, 0x6F, 0xEB, 0xCA, 0xD1, 0x6E, 0xC6, 0x93, 0xC4, 0x1E, 0x59,
+ 0x84, 0x92, 0x94, 0x3D, 0x61, 0x2E, 0x7D, 0xAE, 0xF8, 0x7B, 0xB2, 0xB0, 0x7C, 0xA0, 0x51, 0x03,
+ 0xBB, 0x38, 0xA4, 0xCF, 0x62, 0x32, 0x5B, 0x56, 0x7B, 0xCE, 0x37, 0xDE, 0x25, 0x7F, 0x4D, 0x81,
+ 0xF4, 0xF1, 0xED, 0x52, 0xA9, 0x63, 0xFA, 0x59, 0xEB, 0x24, 0xC6, 0x22, 0xAB, 0x7F, 0xDA, 0x6E,
+ 0x2F, 0x87, 0xF8, 0x54, 0xA9, 0x26, 0x58, 0x3B, 0x3B, 0x5C, 0x0E, 0x8B, 0x9E, 0xDA, 0x2B, 0x7C,
+ 0x24, 0x18, 0x38, 0xAD, 0xFC, 0x44, 0x30, 0x4A, 0x69, 0x02, 0xD4, 0x1C, 0x68, 0xEF, 0x0C, 0xFF,
+ 0xF3, 0x81, 0xF6, 0x11, 0x87, 0xF8, 0x06, 0x1F, 0x0C, 0x46, 0xDA, 0x0D, 0xD3, 0xF4, 0x32, 0x1F,
+ 0x0E, 0x1E, 0x26, 0x1E, 0x0E, 0x1E, 0x8B, 0x87, 0x83, 0xA3, 0x95, 0xAA, 0xEE, 0xCD, 0xA0, 0xDB,
+ 0x3D, 0x56, 0x61, 0x5D, 0xF1, 0x01, 0xE1, 0x7B, 0xE1, 0x69, 0x05, 0xD2, 0x54, 0xE4, 0x69, 0x28,
+ 0x78, 0x8A, 0x6D, 0xD8, 0xBF, 0x99, 0xCF, 0x1F, 0x1B, 0x47, 0x7C, 0xC9, 0xB0, 0x3A, 0x4B, 0xDD,
+ 0x7E, 0xD3, 0x4F, 0x71, 0x53, 0xE3, 0xBE, 0xAF, 0x87, 0xB8, 0x69, 0x93, 0x74, 0x34, 0x1C, 0xE5,
+ 0x06, 0x43, 0x0A, 0xC2, 0x9C, 0xFE, 0xCD, 0x7D, 0x3A, 0xFD, 0xA2, 0x86, 0xD3, 0x2F, 0xB6, 0x9C,
+ 0xBE, 0x41, 0x6F, 0x17, 0x84, 0xFF, 0xD5, 0x3C, 0x5E, 0xF0, 0x55, 0xC2, 0xEB, 0xA5, 0x7C, 0x75,
+ 0xBB, 0xF7, 0xEA, 0xF7, 0x85, 0x4E, 0x12, 0x1A, 0xC3, 0x9B, 0xFB, 0x74, 0x92, 0x0C, 0xD3, 0xAD,
+ 0x64, 0xA7, 0x3C, 0xEC, 0x4C, 0x9A, 0x19, 0x97, 0x68, 0x36, 0x15, 0x57, 0x28, 0xEF, 0x1D, 0x1F,
+ 0xD7, 0x1D, 0x0C, 0x79, 0xEA, 0x74, 0x1F, 0xEA, 0x51, 0x7F, 0x61, 0x44, 0x66, 0x93, 0xFB, 0x49,
+ 0xCC, 0xD6, 0xB1, 0x14, 0x57, 0x39, 0x31, 0x7B, 0xFF, 0xED, 0xB7, 0xE5, 0x72, 0xB1, 0x78, 0x2F,
+ 0x8F, 0x24, 0x17, 0xCB, 0x2D, 0x53, 0xDF, 0xAE, 0xE1, 0x06, 0x52, 0x5D, 0xC9, 0x74, 0x23, 0x70,
+ 0x7D, 0xF2, 0x8A, 0x1E, 0x6B, 0x31, 0x89, 0x95, 0x32, 0x5E, 0xE5, 0x59, 0x27, 0x05, 0x8C, 0xD5,
+ 0xB1, 0x23, 0x12, 0xD2, 0xBA, 0x51, 0xC4, 0x95, 0x53, 0xBB, 0x8E, 0xB1, 0xA7, 0xCE, 0x54, 0x6D,
+ 0x9F, 0xA0, 0x4D, 0x8A, 0x52, 0xE1, 0xD5, 0xC6, 0xAE, 0xAC, 0x36, 0x0E, 0xAB, 0x4F, 0xDE, 0xC1,
+ 0x64, 0xDC, 0x5A, 0xDB, 0x16, 0xCC, 0x3C, 0x5A, 0x5D, 0xAD, 0xAD, 0x0D, 0x7A, 0xFB, 0x0D, 0x8E,
+ 0x91, 0x82, 0x8C, 0x92, 0x6F, 0xCB, 0xE9, 0x45, 0x0F, 0xB3, 0x0D, 0xEE, 0xE9, 0x75, 0x39, 0x75,
+ 0x15, 0xE2, 0xB9, 0x6E, 0x50, 0x59, 0x1B, 0x02, 0x18, 0x12, 0x15, 0x38, 0xD2, 0x22, 0x9D, 0xA8,
+ 0xAB, 0x22, 0xB6, 0xB5, 0x36, 0xC2, 0xA6, 0xA6, 0x0E, 0xA5, 0x8D, 0xB4, 0xB8, 0x3F, 0x45, 0x75,
+ 0x07, 0xAA, 0x04, 0x6B, 0x4F, 0x9F, 0xF4, 0x4B, 0x60, 0x28, 0xDE, 0x87, 0xCA, 0x5A, 0xD5, 0x77,
+ 0x22, 0xFF, 0xB6, 0x7A, 0xEC, 0xE3, 0xB0, 0x90, 0x76, 0xDF, 0x42, 0xAA, 0xBB, 0xD2, 0x5E, 0x43,
+ 0x5F, 0xD4, 0x89, 0x7A, 0xA3, 0x26, 0x9D, 0x48, 0x90, 0x51, 0xDD, 0x89, 0x7A, 0x8F, 0xC3, 0x87,
+ 0x50, 0x1F, 0x6B, 0x8F, 0x54, 0xD6, 0x07, 0x87, 0xD5, 0x27, 0xEF, 0x3D, 0x82, 0xCA, 0xA8, 0xE4,
+ 0x3D, 0x21, 0x92, 0x6A, 0xCE, 0x73, 0x0F, 0x8E, 0xD2, 0xEB, 0x8C, 0xEA, 0xE1, 0xE8, 0x97, 0x73,
+ 0x36, 0x09, 0x86, 0x81, 0x3C, 0x08, 0x0C, 0x1E, 0xA7, 0x0B, 0x13, 0xDB, 0x1C, 0x55, 0x77, 0x62,
+ 0x01, 0x8D, 0xB3, 0x67, 0x38, 0xAC, 0x6C, 0x38, 0x31, 0x44, 0x8F, 0x2A, 0xEE, 0xD6, 0xC4, 0x70,
+ 0x1F, 0xC6, 0x34, 0xE9, 0x97, 0x32, 0xE9, 0x66, 0x4C, 0x67, 0x8D, 0x2F, 0x17, 0x24, 0x6A, 0x7B,
+ 0x3E, 0x29, 0xB2, 0x78, 0xA4, 0x61, 0xB0, 0x10, 0x69, 0xE8, 0xEB, 0x05, 0xE9, 0x5E, 0xF7, 0x46,
+ 0x73, 0x5E, 0x41, 0xC0, 0xF6, 0x32, 0x4B, 0xF9, 0xAD, 0x01, 0x31, 0xE6, 0x64, 0x29, 0x70, 0xC8,
+ 0xEB, 0x63, 0xCB, 0x7F, 0x29, 0x61, 0x95, 0xC7, 0x0A, 0x0E, 0xCC, 0x55, 0x18, 0x0E, 0xDD, 0xCD,
+ 0xE6, 0xBF, 0x21, 0x15, 0x35, 0xC6, 0xEE, 0x06, 0x13, 0xE0, 0xD8, 0xB2, 0x11, 0x55, 0x00, 0x0B,
+ 0x9A, 0x01, 0x9B, 0xF1, 0x95, 0x58, 0x09, 0xCA, 0x6C, 0x72, 0x3F, 0xF3, 0xFC, 0x6B, 0xCB, 0x29,
+ 0x3F, 0xCF, 0xFF, 0xC9, 0x72, 0x4C, 0xF7, 0xBA, 0xDC, 0x54, 0x3F, 0xDE, 0xD1, 0x9F, 0x60, 0xAA,
+ 0x4F, 0x07, 0x4B, 0x5C, 0x2C, 0x6C, 0x7B, 0x44, 0xED, 0xA5, 0x33, 0x69, 0x21, 0x33, 0xE8, 0x1B,
+ 0x5C, 0x6A, 0x03, 0x14, 0xBE, 0x46, 0x97, 0x1E, 0x77, 0xED, 0x2F, 0x3F, 0x9F, 0xC6, 0x93, 0x5D,
+ 0x4E, 0x81, 0x9A, 0xC3, 0x0C, 0x25, 0x85, 0xC7, 0x07, 0xAF, 0xA5, 0xFE, 0xB2, 0xCD, 0xCF, 0xED,
+ 0x83, 0xF3, 0x73, 0x1F, 0x01, 0x99, 0x38, 0x66, 0x65, 0xCB, 0x42, 0xD8, 0xC8, 0xAE, 0x2E, 0x1D,
+ 0xB3, 0x51, 0xAB, 0x62, 0xBD, 0x57, 0xD6, 0x41, 0xBF, 0x7B, 0x74, 0xF2, 0xB8, 0xCC, 0x0A, 0x19,
+ 0xAA, 0x61, 0x54, 0xBD, 0xD1, 0xF0, 0xE8, 0xF1, 0xD8, 0x95, 0x3B, 0x9F, 0xB3, 0x15, 0xAE, 0x6A,
+ 0xA6, 0xC5, 0xC1, 0x6F, 0xE8, 0xA3, 0xB4, 0x3E, 0x69, 0x36, 0x5E, 0x85, 0x9D, 0xAB, 0xE9, 0x62,
+ 0x20, 0xD1, 0xC5, 0xF8, 0x71, 0x99, 0x16, 0xE7, 0x48, 0xD5, 0xBA, 0x24, 0x1C, 0xDD, 0x13, 0x43,
+ 0xF7, 0x61, 0x5A, 0x81, 0x1B, 0x18, 0x76, 0x65, 0xCB, 0x62, 0xD0, 0x60, 0x58, 0x3F, 0xE0, 0x81,
+ 0xF6, 0x01, 0xF8, 0x6C, 0xD4, 0xB8, 0x44, 0xFF, 0xD5, 0x03, 0xD7, 0xA0, 0xFB, 0xC8, 0xC6, 0x43,
+ 0xC6, 0x52, 0xAD, 0xD0, 0x35, 0x1E, 0x3E, 0x1E, 0xFB, 0x72, 0x37, 0x01, 0x5E, 0xAD, 0x1C, 0xBA,
+ 0x18, 0x38, 0x86, 0x2E, 0x7A, 0xD4, 0xBC, 0x89, 0x85, 0x14, 0xD4, 0x18, 0x1C, 0x87, 0x0F, 0xBF,
+ 0x7E, 0xFD, 0x8B, 0x84, 0xA7, 0x5A, 0x46, 0x36, 0x78, 0x2C, 0x41, 0x6C, 0x66, 0x28, 0xBF, 0x88,
+ 0x8D, 0x22, 0x8B, 0x67, 0xF3, 0x0C, 0x16, 0xE6, 0x70, 0xEC, 0xA0, 0xD1, 0x0A, 0x86, 0xE8, 0xFC,
+ 0xDE, 0x97, 0xEC, 0x42, 0xAE, 0x1E, 0x53, 0xBD, 0x62, 0x6A, 0x39, 0x4E, 0x55, 0x35, 0x71, 0x58,
+ 0x7D, 0xF2, 0x8A, 0x1D, 0x34, 0xBB, 0xB8, 0xCA, 0x3B, 0xBF, 0xFF, 0x95, 0x55, 0xC1, 0x55, 0xD3,
+ 0x6A, 0x4A, 0x15, 0x31, 0xBC, 0xF0, 0x4B, 0x11, 0x3A, 0xDF, 0xAD, 0x18, 0x7D, 0x39, 0xE2, 0xF1,
+ 0x94, 0x34, 0x16, 0xC6, 0x0A, 0x9F, 0x30, 0x2E, 0x5B, 0xD4, 0x78, 0x83, 0x60, 0xE5, 0x6A, 0x1A,
+ 0xC9, 0x9E, 0x1E, 0x77, 0x55, 0x63, 0x92, 0x7C, 0xB5, 0x24, 0x10, 0xDE, 0x9E, 0x5A, 0x86, 0x8F,
+ 0x4F, 0xE3, 0xC3, 0xB1, 0xF6, 0x0A, 0x8E, 0xB5, 0xF7, 0xF6, 0x26, 0x7C, 0x37, 0xAE, 0xCC, 0x21,
+ 0xE2, 0x3B, 0x9B, 0x22, 0x0C, 0x59, 0xDB, 0xD7, 0xE9, 0x86, 0x2E, 0xFE, 0x14, 0x16, 0x1C, 0xE3,
+ 0x3E, 0xA6, 0xD1, 0xF0, 0xB8, 0xAB, 0x6B, 0x2C, 0x2B, 0xE6, 0xCF, 0x90, 0xF8, 0x9F, 0xE9, 0x06,
+ 0xA7, 0x5E, 0x48, 0xA0, 0xCC, 0x01, 0xE2, 0xF4, 0x86, 0x04, 0x52, 0xFB, 0xAD, 0xB3, 0xEF, 0x68,
+ 0x5B, 0x22, 0x3D, 0x21, 0x8E, 0xAE, 0xD4, 0x10, 0x12, 0x2F, 0xC3, 0x64, 0xED, 0x55, 0x9E, 0x86,
+ 0x91, 0x0B, 0xA2, 0x27, 0x15, 0x04, 0xEE, 0xF3, 0xBA, 0x5F, 0x9E, 0xFA, 0x82, 0xA7, 0x9E, 0x1A,
+ 0x4F, 0xFD, 0x1A, 0x3C, 0xF5, 0x1B, 0xE2, 0x69, 0x20, 0x78, 0xEA, 0xAB, 0xF1, 0x34, 0xA8, 0xC1,
+ 0xD3, 0xA0, 0x21, 0x9E, 0x86, 0x82, 0xA7, 0x81, 0x1A, 0x4F, 0xC3, 0x1A, 0x3C, 0x0D, 0x1B, 0xE2,
+ 0x69, 0x24, 0x78, 0x1A, 0xAA, 0xF1, 0x34, 0xAA, 0xC1, 0xD3, 0xA8, 0x21, 0x9E, 0xC6, 0x82, 0xA7,
+ 0x91, 0x1A, 0x4F, 0xE3, 0x1A, 0x3C, 0x8D, 0x1B, 0xE2, 0xE9, 0x48, 0xF0, 0x34, 0x56, 0xE3, 0xE9,
+ 0xA8, 0x06, 0x4F, 0x47, 0x0D, 0xF1, 0x74, 0x2C, 0x78, 0x3A, 0x52, 0xE3, 0xE9, 0xB8, 0x06, 0x4F,
+ 0xC7, 0x0D, 0xF1, 0x74, 0x22, 0x78, 0x3A, 0x56, 0xE3, 0xE9, 0xA4, 0x06, 0x4F, 0x27, 0x0D, 0xF1,
+ 0x84, 0x8B, 0x72, 0x8C, 0xA9, 0x13, 0xC5, 0x41, 0xB7, 0x5B, 0x83, 0x2B, 0xA3, 0x29, 0xAE, 0xC2,
+ 0x54, 0xA2, 0xA7, 0x9A, 0x4B, 0xD4, 0x49, 0x26, 0xA6, 0x4D, 0xB1, 0x15, 0x65, 0x13, 0x8A, 0xE9,
+ 0x44, 0xAF, 0x4E, 0x3E, 0x31, 0x6B, 0x8A, 0xAD, 0x30, 0xA1, 0xE8, 0x29, 0x66, 0x14, 0xBD, 0x3A,
+ 0x29, 0x85, 0xD9, 0x14, 0x5B, 0x61, 0x4E, 0xD1, 0x53, 0x4C, 0x2A, 0x7A, 0x75, 0xB2, 0x0A, 0xD2,
+ 0x14, 0x5B, 0x61, 0x5A, 0xD1, 0x53, 0xCC, 0x2B, 0x7A, 0x75, 0x12, 0x8B, 0x79, 0x53, 0x6C, 0x85,
+ 0x99, 0x45, 0x4F, 0x31, 0xB5, 0xE8, 0xD5, 0xC8, 0x2D, 0x4E, 0xE4, 0x13, 0xB1, 0x7B, 0x65, 0x8B,
+ 0x04, 0x7C, 0x8A, 0x1C, 0x4D, 0xDA, 0x94, 0x1E, 0x3D, 0xE1, 0x40, 0xF8, 0x6C, 0x14, 0x13, 0xC8,
+ 0x85, 0xEB, 0xCC, 0xAD, 0x45, 0x58, 0x64, 0x78, 0x34, 0x4F, 0x49, 0xF8, 0xB1, 0xB7, 0xF2, 0x2A,
+ 0x17, 0x1A, 0x3E, 0xBC, 0xBE, 0x2C, 0x57, 0x66, 0x88, 0xF7, 0xF2, 0x27, 0x2A, 0x32, 0x00, 0xD9,
+ 0xFD, 0xF8, 0x27, 0x02, 0x94, 0xEA, 0x0A, 0x14, 0xA8, 0x4C, 0x45, 0x61, 0x14, 0xAF, 0x28, 0x8C,
+ 0x95, 0x2B, 0x0A, 0x8C, 0xB8, 0xDD, 0xD4, 0x12, 0x00, 0xF7, 0x80, 0x7D, 0xD7, 0x40, 0x9D, 0xE9,
+ 0x41, 0x75, 0xA6, 0x47, 0x65, 0x98, 0x1E, 0x54, 0x61, 0xBA, 0xC2, 0xD3, 0x8D, 0x8A, 0x72, 0x02,
+ 0x7A, 0xBF, 0xB6, 0x6E, 0x88, 0xA9, 0xFD, 0xA2, 0x2E, 0xAA, 0x5E, 0x75, 0x51, 0x1D, 0x95, 0x11,
+ 0x55, 0x6F, 0x87, 0xF6, 0x31, 0x12, 0x7C, 0xFF, 0xA8, 0xCE, 0xF7, 0xA8, 0x3A, 0xDF, 0x83, 0x32,
+ 0x7C, 0x8F, 0x76, 0xC8, 0xF7, 0x50, 0xF0, 0xFD, 0x51, 0x9D, 0xEF, 0x61, 0x75, 0xBE, 0x87, 0x65,
+ 0xF8, 0x1E, 0xEE, 0x90, 0xEF, 0x3E, 0x04, 0x9B, 0x1F, 0x3F, 0x6A, 0x3F, 0x2C, 0x3D, 0xE2, 0x2F,
+ 0x8B, 0x2B, 0x71, 0x0C, 0xA2, 0xEA, 0xD8, 0x3E, 0x6A, 0x60, 0xEE, 0x86, 0x14, 0x0E, 0xE2, 0x3C,
+ 0x15, 0xE6, 0xCD, 0x0C, 0x42, 0xE5, 0xC3, 0x41, 0x72, 0x9E, 0xE4, 0x33, 0xB7, 0x9E, 0x2A, 0x53,
+ 0xBB, 0x8B, 0x61, 0xC7, 0xFA, 0xE4, 0xED, 0xA6, 0xC4, 0xF8, 0x76, 0x5C, 0xDD, 0x9E, 0xD5, 0x2B,
+ 0xE6, 0x8C, 0xAE, 0x9D, 0xD9, 0xF3, 0x09, 0xE5, 0x19, 0xF2, 0x32, 0x5F, 0x41, 0xED, 0xD5, 0xAB,
+ 0x10, 0xA3, 0x06, 0xAA, 0xE4, 0x18, 0xE9, 0x8F, 0x18, 0x3B, 0x3F, 0x22, 0x43, 0x1A, 0x64, 0x2C,
+ 0x25, 0x06, 0xA3, 0xA3, 0x92, 0xDA, 0x3C, 0xAE, 0x18, 0x9D, 0x90, 0xC6, 0x9D, 0xA9, 0x13, 0xA7,
+ 0x1E, 0x28, 0x80, 0x8F, 0x15, 0x04, 0x30, 0xAE, 0x2E, 0x80, 0x52, 0x99, 0x0B, 0xD2, 0xB8, 0x3B,
+ 0x01, 0x74, 0x99, 0x00, 0x3E, 0x44, 0x6F, 0xA6, 0xCE, 0x31, 0xE8, 0x1A, 0x15, 0xA8, 0x51, 0x03,
+ 0x6B, 0x24, 0x18, 0x69, 0x7B, 0xC2, 0xA2, 0x81, 0xA3, 0x72, 0x0A, 0xED, 0x97, 0xCD, 0xAF, 0xE4,
+ 0xC5, 0x4F, 0x85, 0xFC, 0x7B, 0x97, 0x09, 0x56, 0xBF, 0x2B, 0x2C, 0xBA, 0xBC, 0x00, 0xBA, 0xD5,
+ 0x05, 0xD0, 0x2B, 0x25, 0x80, 0xEE, 0xE3, 0x4A, 0xC6, 0xC7, 0xDB, 0x1F, 0x13, 0x2E, 0x96, 0x56,
+ 0x59, 0xF7, 0x8F, 0x8D, 0x66, 0xFD, 0x32, 0xC2, 0xDA, 0xA9, 0xF7, 0x0F, 0x22, 0xCE, 0xB5, 0x5F,
+ 0xB4, 0xE4, 0xD6, 0xD7, 0xBC, 0x38, 0x50, 0xBD, 0x08, 0x38, 0x6A, 0x60, 0xBD, 0x0A, 0x29, 0x3C,
+ 0x91, 0x70, 0x56, 0x32, 0xC0, 0x9F, 0x54, 0x77, 0x87, 0x52, 0x1A, 0x46, 0x5A, 0x77, 0xA7, 0xE2,
+ 0x51, 0x42, 0x10, 0xEC, 0x43, 0xE6, 0x2A, 0x2A, 0xAE, 0x5E, 0x39, 0x1C, 0x35, 0xB0, 0xD4, 0x85,
+ 0x14, 0x1E, 0x4B, 0x38, 0x2B, 0xA9, 0xE2, 0xB2, 0x29, 0xE9, 0x71, 0xC5, 0xA9, 0x65, 0x6F, 0x97,
+ 0x39, 0x29, 0x56, 0xBB, 0x63, 0x82, 0x88, 0x7F, 0x65, 0x22, 0x4F, 0xC1, 0xD5, 0x2B, 0xDE, 0xA3,
+ 0x9A, 0xEB, 0xB3, 0xBB, 0x8B, 0xE4, 0x47, 0xB2, 0x4F, 0x90, 0x17, 0xDB, 0x41, 0xD9, 0x5C, 0xB6,
+ 0x5B, 0x71, 0xE0, 0xDB, 0x69, 0x2A, 0x0B, 0xBD, 0x43, 0xD6, 0xB3, 0xCD, 0x7D, 0x8E, 0x09, 0x54,
+ 0x5F, 0x79, 0x1B, 0x35, 0xB0, 0x3D, 0x04, 0x29, 0xEC, 0xEB, 0x93, 0x8F, 0x25, 0x99, 0xAA, 0x53,
+ 0x3F, 0xA8, 0xBC, 0x3F, 0xA4, 0xB9, 0xD2, 0xFB, 0x6C, 0x75, 0x53, 0xBE, 0xF4, 0x7E, 0xF1, 0xEE,
+ 0xE7, 0x72, 0xA5, 0xF7, 0x78, 0x2F, 0xCD, 0x95, 0xDE, 0xAB, 0xD9, 0x4C, 0xA9, 0x8D, 0xB2, 0xC0,
+ 0x18, 0xBE, 0x3F, 0x62, 0x66, 0xF9, 0xB4, 0x4B, 0x10, 0x8C, 0xF6, 0x5E, 0x9C, 0x86, 0x22, 0x8A,
+ 0x3D, 0xB1, 0x9F, 0x6C, 0x9F, 0x67, 0x3D, 0x83, 0x9C, 0xB0, 0xA0, 0xB6, 0x11, 0x76, 0xFB, 0x75,
+ 0x28, 0x9D, 0x31, 0xFF, 0x10, 0x57, 0x8D, 0x47, 0xEB, 0xB3, 0x5E, 0x1A, 0xD0, 0x39, 0x2A, 0x89,
+ 0x7B, 0xE7, 0x8F, 0xDC, 0x4F, 0x52, 0x8A, 0xEA, 0x51, 0xFD, 0xF4, 0xF0, 0x5C, 0xB9, 0x4E, 0x4E,
+ 0xC1, 0xCA, 0x44, 0xF3, 0x41, 0xBC, 0xD4, 0xA2, 0x1E, 0xCD, 0x19, 0x79, 0xBB, 0x89, 0xE6, 0x88,
+ 0x3B, 0xC1, 0x7B, 0x89, 0xAC, 0x86, 0xC1, 0x96, 0x13, 0x80, 0x7C, 0x13, 0x85, 0x82, 0x00, 0xB2,
+ 0x24, 0x70, 0x2F, 0x22, 0xE8, 0x53, 0x09, 0xF4, 0x53, 0xDA, 0xCF, 0x08, 0xFC, 0xB4, 0x7D, 0xD5,
+ 0xB8, 0x3F, 0x68, 0xA0, 0x36, 0x81, 0xE2, 0x4A, 0x70, 0x54, 0x52, 0xA7, 0xE5, 0x16, 0x07, 0x13,
+ 0x3A, 0x2D, 0x67, 0xD4, 0x3B, 0x5B, 0x1D, 0x04, 0xE4, 0x03, 0x2A, 0x80, 0x81, 0xB2, 0x4A, 0xAB,
+ 0x4F, 0x33, 0x07, 0x0D, 0xE4, 0x27, 0x28, 0xAD, 0x04, 0x47, 0x25, 0x55, 0x5A, 0x6E, 0xE9, 0x33,
+ 0xA1, 0x52, 0xF5, 0xF9, 0x25, 0x27, 0x72, 0x67, 0x2A, 0x1D, 0x52, 0x01, 0x0C, 0x95, 0x55, 0x5A,
+ 0x7D, 0xD6, 0x31, 0x68, 0x60, 0xF7, 0x2E, 0x4A, 0x2B, 0xC1, 0x51, 0x49, 0x95, 0x96, 0x5B, 0xB2,
+ 0x4B, 0xA8, 0x54, 0x7D, 0x3E, 0xC9, 0x89, 0xDC, 0x99, 0x4A, 0x47, 0x54, 0x00, 0x23, 0x65, 0x95,
+ 0x56, 0xAF, 0x14, 0x0C, 0x1A, 0x28, 0x06, 0xA1, 0xB4, 0x12, 0x1C, 0x95, 0x54, 0x69, 0xB9, 0xD5,
+ 0xE7, 0x84, 0x4A, 0xD5, 0xD7, 0x39, 0x38, 0x91, 0x3B, 0x53, 0xE9, 0x98, 0x0A, 0x60, 0xAC, 0xAC,
+ 0xD2, 0xEA, 0xFB, 0xAB, 0x06, 0x0D, 0xEC, 0xDD, 0x46, 0x69, 0x25, 0x38, 0x2A, 0xA9, 0xD2, 0x72,
+ 0xA5, 0xDB, 0x84, 0x4A, 0xD5, 0x57, 0x6E, 0x38, 0x91, 0x3B, 0x53, 0xE9, 0x11, 0x15, 0xC0, 0x91,
+ 0xB2, 0x4A, 0xAB, 0x6F, 0x5D, 0x1F, 0x34, 0x50, 0xCF, 0x43, 0x69, 0x25, 0x38, 0x2A, 0xA9, 0xD2,
+ 0x72, 0x15, 0x9C, 0x84, 0x4A, 0xD5, 0xF7, 0x4E, 0x71, 0x22, 0x77, 0xA6, 0xD2, 0x63, 0x2A, 0x80,
+ 0x63, 0x65, 0x95, 0x56, 0xDF, 0xB9, 0x3F, 0x68, 0x60, 0xE7, 0x3E, 0x4A, 0x2B, 0xC1, 0x51, 0x49,
+ 0x95, 0x96, 0xAB, 0xCD, 0x26, 0x54, 0xAA, 0xBE, 0xDD, 0x89, 0x13, 0xB9, 0x33, 0x95, 0x9E, 0x50,
+ 0x01, 0x9C, 0x28, 0xAB, 0xB4, 0xFA, 0x96, 0x81, 0x41, 0x03, 0x9B, 0x5F, 0x50, 0x5A, 0xDD, 0x38,
+ 0x47, 0x25, 0x55, 0x5A, 0x6E, 0x81, 0x71, 0x90, 0xB1, 0xF5, 0x45, 0x41, 0xA5, 0x59, 0x0B, 0x8C,
+ 0x8F, 0xA0, 0x7E, 0x67, 0x5C, 0x4F, 0x2B, 0x7C, 0xFA, 0xE5, 0xE5, 0x4F, 0xAF, 0xB2, 0x0B, 0xFB,
+ 0x99, 0x55, 0xBC, 0x44, 0x5F, 0x8F, 0xBD, 0x8C, 0x17, 0x97, 0x17, 0x12, 0x0E, 0x5A, 0x66, 0x2F,
+ 0x4D, 0xD4, 0xB6, 0x98, 0xCF, 0xB7, 0x34, 0x06, 0x5C, 0xC2, 0xD2, 0x06, 0xC3, 0xAE, 0x3C, 0x69,
+ 0x29, 0xB0, 0x34, 0x4E, 0xE5, 0x6E, 0x82, 0x07, 0x22, 0x87, 0xB9, 0x38, 0xF2, 0xFE, 0xBD, 0xD2,
+ 0x9A, 0x0E, 0x03, 0x48, 0x86, 0x8F, 0x61, 0xF7, 0x44, 0x31, 0x7E, 0x80, 0x0C, 0xB2, 0x36, 0xC6,
+ 0xDF, 0x63, 0x00, 0x41, 0x1A, 0x07, 0x8C, 0xA9, 0x37, 0xCA, 0x4C, 0xA5, 0xAB, 0x00, 0xA5, 0x98,
+ 0xCA, 0xAA, 0xEC, 0xDC, 0x33, 0x53, 0x43, 0xC6, 0x54, 0x8E, 0x93, 0xA6, 0x98, 0x4A, 0xCF, 0x83,
+ 0x4B, 0x31, 0x95, 0x35, 0x11, 0x8E, 0x98, 0x7A, 0x0C, 0x81, 0x8E, 0xCC, 0x8C, 0xC5, 0xAC, 0x42,
+ 0xA8, 0xBB, 0xBC, 0x38, 0x7C, 0xF9, 0xE6, 0x42, 0xA3, 0x4B, 0x9A, 0xAE, 0x5D, 0x32, 0xE2, 0x25,
+ 0x3B, 0xFD, 0x53, 0xC5, 0x3C, 0x4A, 0x7A, 0x2C, 0xEA, 0xBD, 0xB9, 0x50, 0x0D, 0x78, 0x1C, 0xB2,
+ 0x4C, 0xC8, 0x1B, 0x75, 0x07, 0x55, 0x2A, 0x84, 0x21, 0x91, 0x3B, 0x0A, 0x7A, 0x14, 0x7D, 0x3F,
+ 0x92, 0xC1, 0x65, 0x39, 0x19, 0x94, 0xAA, 0x92, 0x26, 0x65, 0x50, 0x22, 0xEC, 0x0B, 0x22, 0x77,
+ 0x29, 0x03, 0x8C, 0x92, 0x97, 0x17, 0xDA, 0xFB, 0xBF, 0x6B, 0x97, 0x37, 0x6B, 0xD7, 0xDF, 0x78,
+ 0xA4, 0x30, 0xAA, 0x70, 0xB8, 0x64, 0x5C, 0x19, 0x8F, 0x46, 0x03, 0xD5, 0xC0, 0x32, 0xCA, 0x1E,
+ 0x02, 0xE6, 0xDD, 0x7B, 0x8C, 0x97, 0x94, 0xD0, 0x61, 0xC8, 0xE0, 0xF7, 0x04, 0x34, 0xAD, 0x14,
+ 0x37, 0x39, 0x60, 0x92, 0xC3, 0x5E, 0x17, 0xB7, 0x57, 0x2B, 0x32, 0x28, 0xCF, 0x28, 0x07, 0xF7,
+ 0x3A, 0x1C, 0x50, 0x2A, 0x47, 0x21, 0x7B, 0x1F, 0x7F, 0xF8, 0xA0, 0xC6, 0x58, 0xBA, 0x8E, 0x56,
+ 0x4E, 0x75, 0x59, 0x8F, 0x8C, 0xDE, 0xD3, 0xA0, 0x20, 0xBD, 0x71, 0x76, 0x08, 0xA1, 0x77, 0x1B,
+ 0x26, 0x43, 0x92, 0x67, 0x73, 0x6B, 0x01, 0x76, 0x2C, 0xEF, 0x83, 0x8A, 0x96, 0xBD, 0xEC, 0x14,
+ 0xBF, 0x51, 0xD9, 0x9E, 0x41, 0xF4, 0x07, 0x93, 0x40, 0xA7, 0x13, 0x02, 0x5F, 0x19, 0x0B, 0x12,
+ 0x5D, 0xD7, 0x58, 0x6C, 0xCF, 0x8B, 0xD9, 0x06, 0x43, 0x68, 0x5C, 0x11, 0xFE, 0x41, 0x4D, 0x6D,
+ 0xE9, 0x91, 0xF9, 0xB9, 0xFE, 0x45, 0x88, 0x93, 0x3F, 0x95, 0x87, 0x4D, 0x74, 0xCD, 0x74, 0xAF,
+ 0x1D, 0xDB, 0x35, 0x70, 0x3C, 0x30, 0xD6, 0x01, 0x50, 0xDA, 0xF9, 0x6D, 0x8D, 0x2F, 0xBE, 0x32,
+ 0xF0, 0x21, 0x2E, 0x23, 0xA7, 0x9F, 0x98, 0x55, 0xCC, 0x6C, 0xD7, 0x17, 0xB3, 0x39, 0x3C, 0x0C,
+ 0x3F, 0xC0, 0xF9, 0x3F, 0xFF, 0x5D, 0xB4, 0x83, 0xC0, 0x5A, 0x2D, 0x62, 0x02, 0xD0, 0x35, 0xDF,
+ 0x9B, 0x9D, 0xEB, 0x40, 0xA9, 0xE7, 0xFA, 0xBE, 0xEB, 0x59, 0x0B, 0x2B, 0x43, 0x3B, 0x59, 0xD2,
+ 0x3E, 0x94, 0x89, 0x3B, 0xD5, 0x58, 0xA2, 0xF8, 0x33, 0x7F, 0xE6, 0x59, 0xEB, 0x60, 0xF2, 0xC4,
+ 0x74, 0x67, 0x9B, 0x15, 0x71, 0x82, 0x8E, 0x61, 0x9A, 0x97, 0x57, 0x70, 0xF0, 0x2D, 0x7E, 0xAC,
+ 0x0D, 0x24, 0xDF, 0xDA, 0x7B, 0xFD, 0x8F, 0x77, 0x38, 0x3A, 0xE3, 0x35, 0x90, 0x17, 0x31, 0xF7,
+ 0x0E, 0xB4, 0xF9, 0xC6, 0x61, 0x03, 0x64, 0x8B, 0x60, 0xDB, 0x7D, 0xED, 0x0F, 0xC0, 0x78, 0x65,
+ 0x78, 0xDA, 0xD4, 0xF0, 0xC9, 0x5B, 0xD7, 0x0F, 0xB4, 0x73, 0x2D, 0xC4, 0x68, 0xBB, 0x33, 0xBA,
+ 0x9D, 0xA3, 0xC3, 0xF8, 0xE2, 0x2D, 0x19, 0xE3, 0x3F, 0x7A, 0x36, 0x34, 0x0D, 0xA1, 0x9E, 0x6B,
+ 0x7B, 0xA7, 0xC7, 0xBD, 0x3D, 0xB4, 0xDD, 0xB0, 0x8B, 0x39, 0x81, 0xE8, 0x0F, 0xED, 0x5A, 0x1B,
+ 0xCF, 0x3E, 0xD0, 0x66, 0xD3, 0xFD, 0x3F, 0x28, 0xF5, 0xF4, 0x32, 0x5E, 0xDB, 0xE7, 0xCC, 0x74,
+ 0x82, 0x25, 0x71, 0x5A, 0x11, 0x65, 0x1E, 0xF1, 0xD7, 0xAE, 0xE3, 0x13, 0x46, 0x1C, 0xFB, 0x59,
+ 0xF3, 0xE8, 0x7A, 0xC7, 0x0F, 0x8C, 0x60, 0xE3, 0x6B, 0x4F, 0xCF, 0xCF, 0xB5, 0x7E, 0xB7, 0x1B,
+ 0x6F, 0xA6, 0x41, 0x37, 0xE9, 0x76, 0x07, 0x5A, 0xEA, 0xC2, 0x0F, 0xE4, 0x26, 0xD8, 0xFF, 0x2A,
+ 0x84, 0xB9, 0xD3, 0x88, 0xED, 0x93, 0x04, 0x92, 0x10, 0x00, 0x5F, 0x27, 0xD7, 0xDA, 0x4F, 0x12,
+ 0xD8, 0x32, 0x8D, 0xC0, 0xD8, 0xFF, 0x23, 0xA1, 0x2F, 0xE8, 0x15, 0x28, 0x39, 0xD0, 0xE8, 0xAD,
+ 0xAF, 0x62, 0xB7, 0xEE, 0xF6, 0x3B, 0x20, 0x43, 0xE0, 0x37, 0x84, 0x26, 0x9E, 0x97, 0xA4, 0x98,
+ 0x42, 0xB7, 0x7B, 0x07, 0x1A, 0xDE, 0x49, 0xC2, 0xC6, 0x88, 0x7C, 0x22, 0xAE, 0x09, 0xA1, 0xE5,
+ 0xA3, 0x95, 0xA0, 0x64, 0xE8, 0xEE, 0x12, 0x2A, 0x82, 0x38, 0xF4, 0x3D, 0x59, 0x80, 0xC4, 0x16,
+ 0x07, 0x3C, 0x2C, 0x1D, 0xD0, 0x98, 0x74, 0xC0, 0xC2, 0x59, 0x4C, 0x6B, 0xE0, 0xD0, 0xBE, 0x6B,
+ 0x13, 0xB0, 0x89, 0x45, 0x6B, 0x8F, 0x7F, 0x0A, 0x14, 0xEC, 0x69, 0xAF, 0x7B, 0xB3, 0xF7, 0x1C,
+ 0xC0, 0x3B, 0x81, 0xFB, 0x21, 0xF0, 0x2C, 0x67, 0xD1, 0xEA, 0x8D, 0xF7, 0x23, 0x5C, 0xF4, 0x36,
+ 0x22, 0x4C, 0xDD, 0xA7, 0xD7, 0x69, 0x17, 0xE9, 0x1B, 0x2D, 0x7E, 0xFD, 0xF9, 0xDE, 0xFE, 0x1E,
+ 0x27, 0x9D, 0x9E, 0x83, 0xB1, 0xB5, 0xD8, 0xC1, 0x33, 0x4A, 0xE1, 0xBE, 0x76, 0x76, 0xC6, 0xBB,
+ 0x61, 0xAD, 0xF0, 0x22, 0x34, 0xA2, 0x7F, 0x52, 0xB7, 0x42, 0x43, 0xFC, 0xF5, 0xCB, 0x3F, 0x84,
+ 0xC5, 0xDE, 0x1D, 0x02, 0xD5, 0x2F, 0x30, 0x2E, 0x7F, 0xF9, 0x07, 0xFC, 0x7F, 0xF7, 0x8C, 0x86,
+ 0xE2, 0x2F, 0xFF, 0xC0, 0x3F, 0x77, 0xCF, 0xA0, 0x27, 0x38, 0xA6, 0xFD, 0xDD, 0xFD, 0x4A, 0xA5,
+ 0xB0, 0x2D, 0xBB, 0x45, 0xA6, 0xEC, 0x42, 0xA1, 0x95, 0xA6, 0x69, 0x91, 0x43, 0xD4, 0xAF, 0x91,
+ 0xF7, 0xB6, 0x66, 0xAE, 0x09, 0xCA, 0x09, 0xC0, 0x8E, 0x85, 0xCA, 0x6D, 0x50, 0x89, 0x10, 0x54,
+ 0x57, 0xA8, 0xDC, 0x9A, 0xD3, 0x96, 0x1A, 0x77, 0x94, 0xC8, 0x3C, 0x44, 0xCB, 0xB5, 0xE1, 0xF9,
+ 0xE4, 0x1B, 0x27, 0x68, 0x05, 0x09, 0x97, 0xC8, 0x90, 0xF8, 0x64, 0x92, 0x60, 0x01, 0x7F, 0x00,
+ 0x07, 0xED, 0xF6, 0xB8, 0xD2, 0x42, 0x53, 0x7B, 0x12, 0x5A, 0x61, 0x44, 0x29, 0xBB, 0x99, 0x61,
+ 0x85, 0x3F, 0xCF, 0xEC, 0xCF, 0xAD, 0x1B, 0xF8, 0x2F, 0x1D, 0x28, 0xB6, 0x44, 0x84, 0x8D, 0x5E,
+ 0xE0, 0x7F, 0x20, 0x17, 0xFC, 0x93, 0xA9, 0x1F, 0xC0, 0xFA, 0xDE, 0xB6, 0x5B, 0xEC, 0xB3, 0x5F,
+ 0xA0, 0x9A, 0x0D, 0x04, 0x21, 0xFF, 0x16, 0xC3, 0x81, 0xEB, 0x06, 0x9F, 0x0E, 0xB4, 0xB5, 0x07,
+ 0x84, 0xD1, 0x2F, 0x7D, 0xC0, 0x31, 0x20, 0x22, 0x0E, 0xFB, 0x5B, 0x48, 0xC1, 0xDA, 0xB6, 0x5F,
+ 0x30, 0xAC, 0x40, 0x02, 0x3B, 0x00, 0x4D, 0x6D, 0xD0, 0x62, 0xE0, 0xFF, 0xBB, 0x67, 0xD0, 0x09,
+ 0x1C, 0xC2, 0xFF, 0x77, 0xCF, 0xB0, 0x2B, 0xD4, 0x25, 0xF6, 0x78, 0xF7, 0x0C, 0x7A, 0x84, 0x13,
+ 0xF8, 0x1F, 0xDA, 0x60, 0xBF, 0xD8, 0x0A, 0xFF, 0xC2, 0x1D, 0xDA, 0x3F, 0xDE, 0xA4, 0x07, 0xEC,
+ 0x02, 0x3F, 0xCD, 0x63, 0x90, 0xBD, 0xE9, 0xBE, 0x45, 0xDF, 0x3C, 0xFE, 0xE9, 0x06, 0xD8, 0xA1,
+ 0x07, 0xB7, 0xE0, 0xF8, 0x8E, 0x89, 0xE7, 0xF8, 0xE7, 0x56, 0x98, 0x27, 0x5E, 0xE0, 0x47, 0x70,
+ 0x8D, 0xBE, 0x9D, 0x15, 0x2F, 0xB1, 0x03, 0x6C, 0x45, 0xDF, 0xA5, 0x49, 0x5B, 0xB1, 0x23, 0xB8,
+ 0xC6, 0xDF, 0xC0, 0x78, 0xA0, 0xF1, 0x77, 0xFC, 0x15, 0x0A, 0x27, 0x7A, 0x07, 0xDF, 0x0B, 0xFF,
+ 0x06, 0x19, 0x64, 0xA4, 0xA1, 0x54, 0xC2, 0xB3, 0xDB, 0xBB, 0x67, 0x04, 0xEF, 0x51, 0x22, 0xE1,
+ 0xF8, 0x96, 0x1F, 0xC3, 0x75, 0xA0, 0x0F, 0xEF, 0x08, 0x82, 0xE9, 0x85, 0xDB, 0xE8, 0x02, 0xB4,
+ 0x08, 0xF0, 0x3E, 0x27, 0x1E, 0xCE, 0x6E, 0xC3, 0x33, 0x84, 0xA6, 0xB0, 0x9C, 0x0D, 0x38, 0xBD,
+ 0x8D, 0x4E, 0xE1, 0x2E, 0xF2, 0x82, 0x0A, 0xE0, 0x3C, 0xDD, 0x3D, 0xE3, 0x3C, 0xA1, 0x16, 0xD9,
+ 0x51, 0x5A, 0xD4, 0x18, 0xF4, 0x02, 0x1E, 0x24, 0x5F, 0xB1, 0x1C, 0x24, 0x36, 0x3C, 0x42, 0x00,
+ 0xB8, 0xB4, 0x09, 0x1E, 0xBE, 0xBA, 0xFD, 0xC6, 0x6C, 0xED, 0xF1, 0x4F, 0xB7, 0xEE, 0x61, 0x88,
+ 0x8E, 0xC3, 0x74, 0x5C, 0x67, 0x66, 0x5B, 0x33, 0x8C, 0x04, 0xAD, 0x7D, 0xED, 0x7C, 0xC2, 0xC3,
+ 0x34, 0x7A, 0x2C, 0x34, 0x8F, 0x7B, 0x61, 0x26, 0x6A, 0x8F, 0x7F, 0x7C, 0x74, 0x6F, 0xBF, 0x43,
+ 0x1D, 0x8D, 0x3B, 0x13, 0xA2, 0xE0, 0x31, 0x46, 0x0D, 0x07, 0x36, 0x96, 0xE0, 0xD8, 0x0A, 0x07,
+ 0xB9, 0x48, 0x68, 0xEB, 0x18, 0x16, 0x8A, 0x26, 0x3E, 0x92, 0x74, 0x53, 0x83, 0x48, 0x4E, 0xD8,
+ 0x12, 0x11, 0xEA, 0x69, 0x3A, 0x42, 0x81, 0xAA, 0xBC, 0xA0, 0xB5, 0x77, 0xE9, 0x79, 0xAE, 0xF7,
+ 0xAF, 0xBD, 0xE7, 0xD8, 0xE8, 0xF9, 0xDE, 0xBF, 0x4F, 0xB5, 0xBD, 0xE7, 0xF1, 0x50, 0x75, 0x97,
+ 0x8E, 0x29, 0x4C, 0x63, 0x0B, 0x45, 0x8D, 0x2D, 0x62, 0x1A, 0x5B, 0xDC, 0xAF, 0xC6, 0xE2, 0x9F,
+ 0x8C, 0xAD, 0xA3, 0xB5, 0xF8, 0x27, 0x5A, 0x73, 0x34, 0x57, 0x08, 0xCF, 0x95, 0xC6, 0xB5, 0xB5,
+ 0x90, 0x69, 0xAB, 0x8A, 0x9A, 0xD8, 0x18, 0x0E, 0xDE, 0x43, 0xBC, 0xB7, 0x3F, 0xBC, 0xFB, 0x16,
+ 0xC7, 0x02, 0xB9, 0xCA, 0x42, 0x8D, 0xA5, 0xB3, 0x2D, 0x09, 0x06, 0x4C, 0x0E, 0x12, 0x23, 0x53,
+ 0x22, 0x49, 0x78, 0xBE, 0xA7, 0xB5, 0x28, 0x4A, 0x4C, 0x11, 0x0A, 0x0C, 0x81, 0x8F, 0x2C, 0x6A,
+ 0xBE, 0x8B, 0xA3, 0x89, 0x70, 0xDE, 0x08, 0x2A, 0xC7, 0x16, 0x10, 0x40, 0x49, 0x89, 0x0C, 0xF3,
+ 0x96, 0xC3, 0xC4, 0x06, 0xBD, 0xC6, 0x5D, 0x84, 0xFA, 0xAB, 0xAF, 0x1A, 0xD4, 0x44, 0x4C, 0x8F,
+ 0x62, 0x9B, 0x5F, 0x28, 0x1D, 0x1E, 0xF9, 0x95, 0x04, 0xC4, 0x3F, 0x05, 0x22, 0x31, 0x70, 0x3E,
+ 0x62, 0x94, 0xC0, 0x72, 0x2B, 0xC1, 0x42, 0x47, 0x1A, 0x25, 0x1C, 0xF4, 0xF3, 0x11, 0x19, 0x18,
+ 0xD4, 0xA8, 0xA0, 0xDF, 0x6B, 0x90, 0x60, 0x10, 0x63, 0x9A, 0x12, 0x12, 0xF1, 0xAD, 0x81, 0x6C,
+ 0x3C, 0x6A, 0xC4, 0x88, 0x37, 0xFC, 0x4B, 0xF0, 0xF0, 0x31, 0x54, 0x09, 0x0D, 0x7F, 0x3B, 0x7D,
+ 0x26, 0x16, 0x35, 0x62, 0xF8, 0x0B, 0xE1, 0x65, 0x3C, 0xF1, 0x31, 0x5B, 0x8D, 0x27, 0xFE, 0x1E,
+ 0xF3, 0x6C, 0x3C, 0x8A, 0xB2, 0xE1, 0xEF, 0x0E, 0x97, 0x59, 0x1D, 0x4B, 0x11, 0x72, 0x1D, 0x83,
+ 0x35, 0x01, 0x60, 0x5E, 0x96, 0x7E, 0xD1, 0x3B, 0xED, 0x46, 0x18, 0x78, 0x46, 0x91, 0x87, 0x81,
+ 0x37, 0x49, 0x63, 0x10, 0xD1, 0xE1, 0x01, 0x72, 0xBB, 0x87, 0x88, 0x42, 0x90, 0xA3, 0xAB, 0x45,
+ 0x21, 0x48, 0xBB, 0x45, 0xF8, 0x09, 0x61, 0x32, 0xC2, 0x0F, 0x2D, 0x68, 0xB0, 0x2F, 0x18, 0xE7,
+ 0xC9, 0x3F, 0xFC, 0x20, 0xB0, 0x4C, 0x89, 0x88, 0x03, 0xD2, 0x79, 0x25, 0x4B, 0xE2, 0xDF, 0xBE,
+ 0x4D, 0x19, 0x12, 0x2D, 0x96, 0xDC, 0xFA, 0x6A, 0xA1, 0xEB, 0xD6, 0xCF, 0xC0, 0x40, 0xE7, 0x0E,
+ 0x6A, 0xB9, 0x19, 0xFF, 0x58, 0xAC, 0x04, 0x09, 0xCC, 0x39, 0x94, 0x50, 0xF0, 0x2F, 0x66, 0xCA,
+ 0x18, 0xA1, 0x1F, 0x54, 0x54, 0x62, 0x45, 0x7C, 0x3C, 0x51, 0x46, 0x07, 0x9D, 0xDE, 0xE4, 0x29,
+ 0x85, 0x7F, 0xA2, 0x2E, 0x4B, 0x23, 0x6B, 0xD5, 0x21, 0x57, 0x7C, 0x8E, 0x4D, 0x32, 0xEC, 0x56,
+ 0x9C, 0x15, 0x3E, 0xCC, 0x10, 0xBD, 0xF8, 0x28, 0xE6, 0xE2, 0xC4, 0x96, 0xA6, 0xA2, 0xC4, 0xEE,
+ 0x18, 0x01, 0x24, 0x47, 0xD3, 0x4D, 0x40, 0xFC, 0x0E, 0xD6, 0x0F, 0x42, 0xE1, 0x6C, 0xDD, 0xEA,
+ 0x38, 0x40, 0x00, 0x45, 0xB8, 0x1F, 0x8F, 0x55, 0x2C, 0x70, 0x6C, 0xE1, 0x62, 0x97, 0xB3, 0xD0,
+ 0xB1, 0xBB, 0x19, 0x18, 0x79, 0x7A, 0x9B, 0x84, 0xC0, 0x8B, 0x59, 0xD8, 0x68, 0x8D, 0x28, 0x86,
+ 0xAB, 0x3F, 0x1A, 0x6D, 0x27, 0xB9, 0xBC, 0x03, 0xB6, 0xAC, 0x84, 0x02, 0xE9, 0x60, 0x89, 0x3E,
+ 0x2A, 0x7B, 0xCD, 0x60, 0x16, 0xAA, 0xED, 0x89, 0x35, 0xA5, 0xBD, 0xD3, 0xAD, 0x7A, 0x06, 0x40,
+ 0x70, 0xAB, 0xD2, 0x5E, 0x30, 0x1A, 0x4F, 0xA3, 0x62, 0x89, 0xA6, 0x4D, 0x3D, 0x62, 0x7C, 0xFE,
+ 0x2A, 0x81, 0x8C, 0x56, 0xFF, 0x43, 0x4C, 0xEC, 0x1A, 0x16, 0x05, 0x53, 0x97, 0xD8, 0x13, 0x37,
+ 0x6D, 0xD7, 0x21, 0xF2, 0x5E, 0x13, 0xD5, 0x11, 0xDE, 0x11, 0x3F, 0x33, 0xC9, 0xDC, 0xD8, 0xD8,
+ 0x41, 0x04, 0xE6, 0x91, 0x60, 0xE3, 0x39, 0xBC, 0x5A, 0xB2, 0x3D, 0xB9, 0x92, 0x96, 0xE9, 0x1A,
+ 0xB4, 0xCD, 0xC3, 0x43, 0xED, 0x65, 0x10, 0x18, 0xA0, 0x00, 0x5C, 0x66, 0x5D, 0xA2, 0x7C, 0x34,
+ 0x83, 0x17, 0x7C, 0x5D, 0x0F, 0x8D, 0x12, 0xEB, 0xCF, 0x1E, 0x70, 0x4D, 0xBD, 0xD1, 0x07, 0x10,
+ 0xE1, 0xA4, 0x14, 0x55, 0xE7, 0x3F, 0x1B, 0xE2, 0xDD, 0x7E, 0xA0, 0x02, 0x73, 0xBD, 0x97, 0xE0,
+ 0x8B, 0x7B, 0x9D, 0x68, 0xA9, 0x64, 0x8F, 0xD5, 0x37, 0x3B, 0x80, 0xEA, 0x12, 0xFA, 0x00, 0x1D,
+ 0x47, 0x36, 0xCF, 0xB8, 0x09, 0xF5, 0xAE, 0x9D, 0x9F, 0x9F, 0x73, 0x65, 0xA4, 0x0B, 0xAA, 0xD0,
+ 0xC2, 0x75, 0x3E, 0x93, 0xDB, 0xCD, 0x1A, 0xC4, 0x1F, 0x95, 0x48, 0x53, 0x45, 0x5B, 0x2E, 0x1D,
+ 0xD2, 0x81, 0x96, 0x17, 0xBC, 0x4C, 0xD6, 0x1B, 0x48, 0x1A, 0x45, 0x2A, 0xA0, 0xD6, 0x89, 0x9E,
+ 0xF8, 0xD5, 0x56, 0xA3, 0xBB, 0x27, 0xF2, 0x33, 0x49, 0x79, 0x99, 0x13, 0xC8, 0x85, 0x27, 0x86,
+ 0xAE, 0x54, 0x0F, 0x4F, 0x92, 0xA8, 0xEE, 0xF6, 0x9F, 0x44, 0x91, 0x61, 0xB3, 0x36, 0x8D, 0x80,
+ 0x24, 0x83, 0x43, 0x68, 0x0B, 0xE2, 0xE6, 0xCA, 0x0D, 0x48, 0x2A, 0x62, 0x58, 0x8E, 0x15, 0x58,
+ 0x86, 0xFD, 0x31, 0xB2, 0xC6, 0x9D, 0xBA, 0xBF, 0xC4, 0xC7, 0x4B, 0xF8, 0xFF, 0x56, 0x85, 0x57,
+ 0xAD, 0x2A, 0xB9, 0x65, 0x21, 0x61, 0x3C, 0x88, 0xAC, 0x24, 0x2E, 0x87, 0x44, 0x58, 0xE0, 0xF7,
+ 0x45, 0x4F, 0x4F, 0x9F, 0xD2, 0xA3, 0x27, 0xA1, 0xD2, 0x44, 0xF4, 0x38, 0xD7, 0xA2, 0x1B, 0x29,
+ 0x05, 0x6F, 0xE3, 0x4E, 0xE1, 0x10, 0xC8, 0x63, 0x18, 0x98, 0x6F, 0x85, 0xEA, 0x5D, 0xC3, 0x54,
+ 0x17, 0x6D, 0xE1, 0xFF, 0xA3, 0xFE, 0x23, 0x8A, 0xFA, 0xBB, 0x0B, 0xF1, 0x39, 0xB6, 0x9D, 0xF2,
+ 0x00, 0x06, 0x27, 0x5F, 0x74, 0x79, 0xBE, 0x77, 0xA0, 0xC9, 0x57, 0x55, 0x52, 0x69, 0xC5, 0xD2,
+ 0x32, 0x19, 0xC9, 0x91, 0x5D, 0xA1, 0x84, 0x70, 0x61, 0x14, 0x97, 0x0E, 0x71, 0x1D, 0xB1, 0xB5,
+ 0xC7, 0x56, 0x6D, 0x69, 0x34, 0xBE, 0x8B, 0x12, 0x92, 0xA5, 0x7B, 0x9D, 0x07, 0xE9, 0x41, 0xCC,
+ 0xB9, 0x22, 0x29, 0xE0, 0x10, 0xDA, 0xB4, 0x7C, 0x63, 0x6A, 0x17, 0x77, 0xCD, 0xDB, 0x99, 0x7C,
+ 0x28, 0x80, 0x06, 0xE2, 0x0A, 0x80, 0x06, 0x1E, 0xF5, 0x99, 0x18, 0x5A, 0xE2, 0x14, 0x61, 0x15,
+ 0x64, 0xE5, 0x22, 0x9E, 0x1B, 0xE0, 0xC4, 0x49, 0xCC, 0x2C, 0x90, 0x96, 0x08, 0xB1, 0xF1, 0xCB,
+ 0x00, 0x91, 0x3C, 0x3D, 0xD7, 0x9C, 0x8D, 0x6D, 0x83, 0x05, 0x22, 0x0B, 0x60, 0x81, 0xF1, 0xBB,
+ 0xD2, 0x00, 0xFD, 0xE7, 0x8D, 0x66, 0x21, 0xE5, 0x09, 0x09, 0x3C, 0x7B, 0x96, 0xC4, 0x86, 0xCB,
+ 0xB7, 0x2C, 0x35, 0x0F, 0x7B, 0x63, 0xED, 0xD9, 0xDB, 0x74, 0xA3, 0x51, 0x96, 0x93, 0x04, 0x43,
+ 0xF5, 0xD3, 0x84, 0xE0, 0x63, 0x19, 0x0E, 0x10, 0x62, 0x99, 0x54, 0x40, 0xB8, 0x49, 0x43, 0xDF,
+ 0x5A, 0xE9, 0x7A, 0x41, 0xAD, 0xBE, 0x45, 0xF8, 0x1E, 0x9D, 0x7D, 0x90, 0x3F, 0x1A, 0x73, 0x74,
+ 0x41, 0x64, 0x3B, 0x61, 0x57, 0x71, 0x8C, 0x8B, 0x04, 0x46, 0x64, 0x2C, 0x45, 0x37, 0xFE, 0x68,
+ 0x07, 0xD0, 0x14, 0x77, 0xC8, 0xC4, 0x06, 0xEF, 0xED, 0xD1, 0x9F, 0x76, 0xBC, 0xDD, 0x30, 0x97,
+ 0x82, 0xEB, 0xE9, 0xA7, 0x05, 0x34, 0x97, 0x31, 0x46, 0xD1, 0x5D, 0x4F, 0x91, 0x25, 0x4A, 0x02,
+ 0x1C, 0xE6, 0xA1, 0x9A, 0x1B, 0x33, 0xF2, 0xC9, 0x23, 0x33, 0x77, 0xE1, 0x58, 0xBF, 0x13, 0x19,
+ 0x42, 0xE6, 0x50, 0x2D, 0xE2, 0x78, 0xAE, 0x98, 0x66, 0x23, 0x72, 0xEE, 0x2B, 0xC9, 0xEB, 0x99,
+ 0x3D, 0x69, 0x3A, 0xB8, 0xD5, 0x27, 0x0B, 0x37, 0x1F, 0xF8, 0x56, 0x70, 0xBB, 0xDD, 0xCF, 0x44,
+ 0x6B, 0xF7, 0x04, 0xF5, 0xD0, 0xF4, 0x0D, 0x6E, 0xD0, 0x09, 0x79, 0x08, 0x2F, 0x24, 0x93, 0x50,
+ 0xE1, 0x9E, 0xE1, 0x0A, 0x58, 0xDC, 0x5E, 0xD8, 0x50, 0x19, 0x8D, 0x93, 0x91, 0x41, 0xDE, 0xD3,
+ 0xC8, 0xD1, 0xC3, 0x61, 0x43, 0x1A, 0xDF, 0x6B, 0x0E, 0x1A, 0x39, 0x38, 0xD9, 0xC6, 0x97, 0x34,
+ 0xD2, 0xCD, 0x74, 0x65, 0x05, 0x12, 0x84, 0x7B, 0xBD, 0xBD, 0x32, 0xE3, 0x4F, 0xDC, 0x5B, 0x59,
+ 0xC4, 0xA3, 0xA9, 0x39, 0x20, 0x4A, 0xAC, 0xE8, 0xCD, 0xD8, 0x06, 0xCF, 0x17, 0x30, 0xFD, 0xC6,
+ 0x75, 0x3A, 0x54, 0x70, 0x6A, 0x81, 0x9C, 0xA1, 0x60, 0xFB, 0x3A, 0x28, 0x8A, 0xE4, 0xCE, 0x0E,
+ 0xB1, 0x9B, 0x22, 0x99, 0xC9, 0xC7, 0x37, 0x14, 0xFC, 0xEA, 0x11, 0x80, 0xF3, 0xB1, 0x9A, 0xA8,
+ 0x7D, 0xF9, 0x07, 0x45, 0x71, 0xA7, 0xCD, 0x21, 0x5A, 0xF8, 0x4B, 0x62, 0xD2, 0xCA, 0x57, 0xB0,
+ 0xF1, 0x4F, 0x35, 0x5C, 0x14, 0x4F, 0xEC, 0xE4, 0xB8, 0xFB, 0x35, 0xB4, 0x90, 0x70, 0xB0, 0x29,
+ 0x9C, 0x6C, 0xD0, 0x0D, 0x3F, 0xF9, 0xF3, 0x0C, 0x96, 0x9E, 0x4B, 0x0A, 0x4B, 0xF8, 0x63, 0x91,
+ 0xC4, 0xEE, 0x40, 0x4E, 0x03, 0xDD, 0x7C, 0x07, 0xD9, 0x4B, 0xCA, 0x4C, 0xF7, 0xF9, 0x34, 0x09,
+ 0x34, 0x60, 0x8A, 0x90, 0xC7, 0x74, 0x84, 0x93, 0x21, 0x26, 0xA6, 0x84, 0x84, 0x19, 0x33, 0x9C,
+ 0x97, 0xE2, 0xDD, 0x30, 0x3C, 0x0B, 0x08, 0x65, 0xF1, 0x9B, 0x0F, 0x93, 0x9B, 0xFD, 0x27, 0xA1,
+ 0x18, 0xB6, 0x71, 0x60, 0x07, 0x31, 0x04, 0x09, 0x11, 0x65, 0x89, 0x89, 0x1B, 0x4D, 0x72, 0x5E,
+ 0x96, 0x23, 0x33, 0xF6, 0x8B, 0x8D, 0x99, 0x74, 0xC0, 0xA4, 0x3D, 0xFF, 0x8B, 0x1A, 0xCD, 0xBF,
+ 0x0F, 0xD8, 0x20, 0x1B, 0x8B, 0x79, 0xFB, 0x65, 0x08, 0xDA, 0x9A, 0x24, 0x16, 0x12, 0x73, 0x6F,
+ 0xE9, 0xB2, 0xF8, 0x41, 0x80, 0xA3, 0xF8, 0x20, 0x29, 0xDD, 0x9A, 0x26, 0xC6, 0x73, 0xBA, 0x90,
+ 0x41, 0x89, 0x6C, 0x62, 0x73, 0x3C, 0x21, 0x1E, 0x69, 0x3E, 0x97, 0x29, 0x2E, 0x66, 0x5F, 0xCC,
+ 0x61, 0xAF, 0x2C, 0x72, 0x9D, 0x5B, 0x37, 0xA5, 0x7B, 0xB5, 0xA8, 0xBC, 0x22, 0x80, 0x8B, 0x70,
+ 0x6F, 0x5E, 0x21, 0x64, 0xB4, 0x8F, 0x2F, 0x86, 0x83, 0x6E, 0xD2, 0x53, 0x5B, 0x5C, 0xA5, 0x4D,
+ 0x13, 0xA0, 0x88, 0xB5, 0x18, 0x56, 0xEC, 0xDB, 0x4E, 0x93, 0x1F, 0x1F, 0x7C, 0xF2, 0xE0, 0xE9,
+ 0x28, 0xC7, 0x1A, 0xC7, 0xA0, 0xA9, 0xE7, 0x17, 0x03, 0xC7, 0x77, 0x04, 0xC6, 0x69, 0x37, 0xAE,
+ 0x14, 0x80, 0xA3, 0x6D, 0x8C, 0x31, 0x50, 0x31, 0x9E, 0xE5, 0x01, 0x42, 0x1B, 0xB6, 0x4D, 0x75,
+ 0x2F, 0xA6, 0x5F, 0x3F, 0x70, 0xD7, 0x1F, 0x28, 0x21, 0xA9, 0x40, 0x74, 0x4D, 0x17, 0x07, 0x3A,
+ 0x78, 0xBF, 0xC5, 0xD3, 0xA4, 0xB8, 0x6C, 0x93, 0xEB, 0xA9, 0x1F, 0x70, 0xE5, 0x40, 0x63, 0x78,
+ 0xF6, 0x92, 0x39, 0x2E, 0x5D, 0x54, 0x90, 0xF6, 0x80, 0x96, 0xD2, 0xF1, 0xBD, 0x19, 0x1B, 0x0E,
+ 0xC2, 0x4D, 0x7F, 0x18, 0xAD, 0xF0, 0xF0, 0x57, 0xD6, 0x27, 0x0E, 0xDF, 0x09, 0x9B, 0xDA, 0x2F,
+ 0xA4, 0xC5, 0x5D, 0xA7, 0x49, 0x89, 0x4A, 0x4A, 0xCC, 0xBF, 0x7D, 0x1C, 0x07, 0xD8, 0xD0, 0x87,
+ 0x11, 0x33, 0x66, 0x6F, 0x19, 0x61, 0x39, 0x12, 0x13, 0x8F, 0x83, 0x49, 0xE2, 0x63, 0x63, 0x19,
+ 0xDB, 0x31, 0xFA, 0xE2, 0xD3, 0x6C, 0x0A, 0xC3, 0xD7, 0x6B, 0x70, 0x3E, 0xF0, 0xF6, 0xEB, 0xD6,
+ 0xFE, 0x5D, 0x1E, 0x3B, 0x4C, 0x5C, 0x91, 0xED, 0xA8, 0x12, 0x41, 0x07, 0x0A, 0x39, 0xB6, 0x84,
+ 0x7C, 0xE4, 0xE8, 0xE2, 0x0E, 0x73, 0xE9, 0x88, 0x69, 0x4A, 0x96, 0x60, 0xCF, 0xB7, 0x45, 0xCB,
+ 0x32, 0xD5, 0x04, 0x82, 0x68, 0x08, 0xD8, 0x22, 0x36, 0x95, 0xA8, 0xC6, 0xEC, 0x42, 0x34, 0x10,
+ 0xB4, 0xC7, 0x7D, 0x30, 0x83, 0xF6, 0x64, 0x1E, 0x9F, 0x4A, 0x18, 0x99, 0x00, 0x42, 0x67, 0xCA,
+ 0x59, 0xC2, 0x99, 0x19, 0xCE, 0x95, 0x91, 0x58, 0xC2, 0x99, 0x01, 0x41, 0x01, 0xE1, 0x7E, 0xD3,
+ 0xD2, 0x59, 0x03, 0x9D, 0x3B, 0x00, 0x3B, 0xEB, 0xD0, 0x87, 0x61, 0x70, 0x46, 0x82, 0x36, 0x40,
+ 0x4F, 0x12, 0xB7, 0x97, 0x84, 0xBE, 0x80, 0x90, 0xDF, 0x67, 0x67, 0xAC, 0x41, 0xD8, 0xCB, 0xD4,
+ 0x35, 0x6F, 0x3B, 0xC6, 0x7A, 0x4D, 0x1C, 0xF3, 0x62, 0x69, 0xD9, 0x66, 0x8B, 0x81, 0xC6, 0xD6,
+ 0x31, 0x30, 0x2C, 0x12, 0xBA, 0xF5, 0x8D, 0x63, 0x05, 0x6F, 0xBE, 0x60, 0xD7, 0x5A, 0x7B, 0x7D,
+ 0x53, 0xEC, 0x5C, 0xE4, 0xCD, 0x3A, 0xA6, 0x67, 0x5C, 0x7F, 0x83, 0xFB, 0xA2, 0xA9, 0x39, 0x1C,
+ 0x74, 0x0F, 0xBA, 0xBC, 0x41, 0x00, 0xE9, 0x96, 0x10, 0x39, 0xE2, 0xC5, 0xFD, 0xA3, 0x3F, 0x7E,
+ 0xFF, 0x6D, 0x84, 0x37, 0x70, 0x5F, 0xB3, 0x4B, 0xAD, 0x3D, 0xBA, 0xB1, 0xFA, 0xF0, 0xB7, 0x35,
+ 0xEE, 0x57, 0x11, 0xC3, 0x4C, 0x4C, 0x8C, 0xB8, 0x67, 0x1A, 0x45, 0xC5, 0x9A, 0x7F, 0x15, 0x47,
+ 0x0A, 0x97, 0x1D, 0x18, 0x27, 0xD0, 0xDC, 0x5B, 0x32, 0x50, 0xB1, 0xA3, 0x1A, 0xC1, 0x91, 0x93,
+ 0xAF, 0x61, 0xA2, 0xFA, 0x0B, 0x31, 0x3C, 0xD0, 0xC7, 0x73, 0xAD, 0xA5, 0x77, 0xF5, 0xE7, 0x2D,
+ 0x7A, 0xFD, 0x1D, 0xB0, 0xB3, 0x6C, 0xED, 0x3F, 0xEF, 0xED, 0xEF, 0x77, 0x7C, 0xD0, 0x19, 0x69,
+ 0xB5, 0xFB, 0xA2, 0x09, 0xFC, 0xA1, 0x6D, 0x58, 0x27, 0xD9, 0xF7, 0xDF, 0xBA, 0x1B, 0xCF, 0xCF,
+ 0x6B, 0xF0, 0xCE, 0x72, 0x70, 0x24, 0xCE, 0x6B, 0xF2, 0x01, 0xA6, 0x2F, 0x8E, 0xB9, 0xD5, 0x44,
+ 0xA7, 0x1B, 0xC1, 0xC5, 0x9C, 0x91, 0xEE, 0x8F, 0x85, 0xA4, 0x3F, 0x96, 0xEE, 0xF3, 0x8C, 0x93,
+ 0x60, 0xC5, 0xBB, 0x25, 0x96, 0xA5, 0xEE, 0xE2, 0xC6, 0x11, 0xE5, 0x74, 0xBC, 0x6A, 0xB0, 0xA5,
+ 0xFF, 0x54, 0xC0, 0xE2, 0x59, 0xD2, 0x56, 0x2D, 0x5C, 0x25, 0x11, 0x95, 0x66, 0x58, 0xB9, 0x19,
+ 0x69, 0xB2, 0x60, 0x9C, 0x9E, 0x2D, 0x27, 0xB3, 0xCF, 0x8B, 0x0D, 0xF8, 0xF8, 0x4A, 0x44, 0x54,
+ 0x76, 0x0D, 0xA7, 0x9C, 0x61, 0xE8, 0x87, 0x29, 0x68, 0xDE, 0x78, 0x04, 0xB7, 0x63, 0x23, 0x18,
+ 0x9F, 0xAF, 0x16, 0x00, 0xD0, 0x49, 0x6A, 0x38, 0x8A, 0x69, 0x08, 0xB5, 0x4D, 0xB6, 0x24, 0x44,
+ 0x40, 0xBB, 0xFD, 0x30, 0x62, 0x21, 0x10, 0x9F, 0x75, 0x45, 0xBA, 0xDB, 0x9E, 0x5D, 0xA7, 0x03,
+ 0xD6, 0xD6, 0xAC, 0xFA, 0x2E, 0xA6, 0x2D, 0xF1, 0x70, 0x4E, 0xC4, 0x0F, 0xC9, 0x67, 0x9E, 0xC4,
+ 0x99, 0x17, 0x55, 0x82, 0x02, 0x88, 0x4F, 0x34, 0xC7, 0x8F, 0xB3, 0x4F, 0x14, 0xD9, 0x27, 0x9C,
+ 0x7D, 0x04, 0x88, 0x26, 0x9C, 0xC5, 0x25, 0x8B, 0xD0, 0x18, 0x7F, 0x7A, 0x15, 0x71, 0x76, 0x3D,
+ 0xCD, 0xA5, 0x93, 0x97, 0x12, 0x62, 0xEC, 0xE5, 0x03, 0x40, 0xFB, 0x15, 0xF8, 0x43, 0x9C, 0xAD,
+ 0xEB, 0xA9, 0x1A, 0x5B, 0xA2, 0x14, 0x81, 0x00, 0x11, 0x5B, 0xF2, 0x82, 0x85, 0x60, 0xE5, 0x35,
+ 0x09, 0xF8, 0x23, 0x7C, 0x86, 0x63, 0x6A, 0x73, 0xCF, 0x58, 0x11, 0xFC, 0x62, 0x7B, 0x48, 0xAC,
+ 0x49, 0xEF, 0x17, 0xE6, 0x7E, 0xAC, 0x59, 0x8C, 0xC9, 0xB0, 0xE4, 0x51, 0x08, 0x1A, 0xB6, 0x8C,
+ 0x41, 0x87, 0x74, 0xE4, 0x42, 0x8B, 0x46, 0x2C, 0x83, 0x0B, 0x4F, 0x95, 0x84, 0x15, 0xB6, 0x8E,
+ 0x1C, 0x21, 0x42, 0x20, 0x4A, 0x26, 0xA3, 0x74, 0xA9, 0x8C, 0xCD, 0x24, 0x18, 0xB3, 0xA9, 0xF9,
+ 0x42, 0xBC, 0x41, 0xC8, 0x52, 0xA2, 0x4D, 0xE8, 0x20, 0x0C, 0x3E, 0x8B, 0xCC, 0x42, 0x52, 0xD8,
+ 0x42, 0xA2, 0xFE, 0xDE, 0x26, 0x58, 0x9E, 0xE0, 0x2F, 0x65, 0xBC, 0xF8, 0xE6, 0x6B, 0xCD, 0xF5,
+ 0x34, 0xDB, 0xBD, 0x26, 0xB8, 0x28, 0x28, 0x36, 0x90, 0x69, 0x53, 0x02, 0x01, 0x8E, 0xB0, 0x22,
+ 0x13, 0xEE, 0x8F, 0x09, 0x96, 0x96, 0x0F, 0x73, 0x62, 0x7C, 0x75, 0x28, 0x79, 0xAA, 0x87, 0xA3,
+ 0x53, 0x21, 0x7B, 0xDB, 0x25, 0xF4, 0x84, 0x38, 0x19, 0x4C, 0x24, 0xCB, 0xA7, 0x9C, 0xC7, 0xAD,
+ 0xC0, 0x92, 0x57, 0xD6, 0x2A, 0x21, 0xC2, 0xF0, 0xF6, 0xA3, 0x95, 0xA2, 0x9C, 0x81, 0x42, 0x41,
+ 0x86, 0x60, 0x91, 0x2C, 0x23, 0x5E, 0xB7, 0xA4, 0x29, 0xAB, 0x1D, 0xE6, 0x68, 0x14, 0x4B, 0xE1,
+ 0xD2, 0x68, 0x9E, 0xAD, 0x15, 0x26, 0x71, 0x36, 0xCA, 0xB1, 0xDF, 0xD9, 0xA1, 0x78, 0x14, 0x8A,
+ 0x9D, 0x61, 0xF6, 0x36, 0x79, 0x72, 0x76, 0xB8, 0x0C, 0x56, 0xF6, 0xE4, 0xC9, 0xFF, 0x02, 0x49,
+ 0x60, 0xC8, 0xA8, 0x55, 0x0C, 0x01, 0x00
+};
+
+
+//File: index_ov5640.html.gz, Size: 9124
+#define index_ov5640_html_gz_len 9124
+const uint8_t index_ov5640_html_gz[] = {
+ 0x1F, 0x8B, 0x08, 0x08, 0xD9, 0x6C, 0x6A, 0x5E, 0x00, 0x03, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x5F,
+ 0x6F, 0x76, 0x35, 0x36, 0x34, 0x30, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0x00, 0xED, 0x3D, 0x6B, 0x77,
+ 0xDB, 0xB6, 0x92, 0xDF, 0xF3, 0x2B, 0x18, 0xF5, 0x6E, 0x24, 0x9F, 0x58, 0xB6, 0xA8, 0x97, 0x1F,
+ 0xB1, 0x95, 0x4D, 0x1C, 0x27, 0xE9, 0xB9, 0x4D, 0x6F, 0x1A, 0xA7, 0x69, 0x7B, 0xBA, 0x3D, 0x29,
+ 0x25, 0x41, 0x12, 0x1B, 0x8A, 0xD4, 0x25, 0x29, 0xCB, 0x6E, 0x8E, 0x7F, 0xC7, 0xFE, 0xA0, 0xFD,
+ 0x63, 0x3B, 0x03, 0x80, 0x24, 0x48, 0x81, 0x24, 0x48, 0x4A, 0xB2, 0xDB, 0x5D, 0xE5, 0x9C, 0x98,
+ 0x0F, 0xCC, 0x60, 0xDE, 0x18, 0x0C, 0x40, 0xF2, 0xEC, 0xF1, 0xD8, 0x19, 0xF9, 0xB7, 0x0B, 0xA2,
+ 0xCD, 0xFC, 0xB9, 0x35, 0x78, 0x74, 0xC6, 0xFE, 0x68, 0xF0, 0x3B, 0x9B, 0x11, 0x63, 0xCC, 0x0E,
+ 0xE9, 0xE9, 0x9C, 0xF8, 0x86, 0x36, 0x9A, 0x19, 0xAE, 0x47, 0xFC, 0xF3, 0xDA, 0xD2, 0x9F, 0x34,
+ 0x8F, 0x6B, 0xC9, 0xDB, 0xB6, 0x31, 0x27, 0xE7, 0xB5, 0x6B, 0x93, 0xAC, 0x16, 0x8E, 0xEB, 0xD7,
+ 0xB4, 0x91, 0x63, 0xFB, 0xC4, 0x86, 0xE6, 0x2B, 0x73, 0xEC, 0xCF, 0xCE, 0xC7, 0xE4, 0xDA, 0x1C,
+ 0x91, 0x26, 0x3D, 0xD9, 0x37, 0x6D, 0xD3, 0x37, 0x0D, 0xAB, 0xE9, 0x8D, 0x0C, 0x8B, 0x9C, 0xEB,
+ 0x22, 0x2E, 0xDF, 0xF4, 0x2D, 0x32, 0xB8, 0xBC, 0x7A, 0xDF, 0x69, 0x6B, 0xFF, 0xFA, 0xD4, 0xEB,
+ 0x77, 0x5B, 0x67, 0x87, 0xEC, 0x5A, 0xD4, 0xC6, 0xF3, 0x6F, 0xC5, 0x73, 0xFC, 0x0D, 0x9D, 0xF1,
+ 0xAD, 0xF6, 0x35, 0x76, 0x09, 0x7F, 0x13, 0x20, 0xA2, 0x39, 0x31, 0xE6, 0xA6, 0x75, 0x7B, 0xAA,
+ 0xBD, 0x70, 0xA1, 0xCF, 0xFD, 0xB7, 0xC4, 0xBA, 0x26, 0xBE, 0x39, 0x32, 0xF6, 0x3D, 0xC3, 0xF6,
+ 0x9A, 0x1E, 0x71, 0xCD, 0xC9, 0xB3, 0x35, 0xC0, 0xA1, 0x31, 0xFA, 0x32, 0x75, 0x9D, 0xA5, 0x3D,
+ 0x3E, 0xD5, 0xBE, 0xD1, 0x8F, 0xF1, 0xDF, 0x7A, 0xA3, 0x91, 0x63, 0x39, 0x2E, 0xDC, 0xBF, 0x7C,
+ 0x8D, 0xFF, 0xD6, 0xEF, 0xD3, 0xDE, 0x3D, 0xF3, 0x4F, 0x72, 0xAA, 0xE9, 0xFD, 0xC5, 0x4D, 0xEC,
+ 0xFE, 0xDD, 0xA3, 0xD8, 0xE9, 0xAC, 0x9D, 0x46, 0x3D, 0x87, 0x3F, 0xCE, 0x86, 0xF7, 0xC8, 0xC8,
+ 0x37, 0x1D, 0xFB, 0x60, 0x6E, 0x98, 0xB6, 0x04, 0xD3, 0xD8, 0xF4, 0x16, 0x96, 0x01, 0x32, 0x98,
+ 0x58, 0x24, 0x13, 0xCF, 0x37, 0x73, 0x62, 0x2F, 0xF7, 0x73, 0xB0, 0x21, 0x92, 0xE6, 0xD8, 0x74,
+ 0x59, 0xAB, 0x53, 0x94, 0xC3, 0x72, 0x6E, 0xE7, 0xA2, 0xCD, 0xA2, 0xCB, 0x76, 0x6C, 0x22, 0x11,
+ 0x20, 0x76, 0xB4, 0x72, 0x8D, 0x05, 0x36, 0xC0, 0xBF, 0xEB, 0x4D, 0xE6, 0xA6, 0xCD, 0x8C, 0xEA,
+ 0x54, 0xEB, 0x74, 0x5B, 0x8B, 0x9B, 0x1C, 0x55, 0x76, 0xFA, 0xF8, 0x6F, 0xBD, 0xD1, 0xC2, 0x18,
+ 0x8F, 0x4D, 0x7B, 0x7A, 0xAA, 0x1D, 0x4B, 0x51, 0x38, 0xEE, 0x98, 0xB8, 0x4D, 0xD7, 0x18, 0x9B,
+ 0x4B, 0xEF, 0x54, 0xEB, 0xCA, 0xDA, 0xCC, 0x0D, 0x77, 0x0A, 0xB4, 0xF8, 0x0E, 0x10, 0xDB, 0xD4,
+ 0xA5, 0x94, 0xF0, 0x26, 0xAE, 0x39, 0x9D, 0xF9, 0xA0, 0xD2, 0xB5, 0x36, 0x49, 0xA1, 0x71, 0x17,
+ 0xCA, 0xD3, 0x67, 0xA6, 0xDC, 0xE4, 0x52, 0x33, 0x2C, 0x73, 0x6A, 0x37, 0x4D, 0x9F, 0xCC, 0x81,
+ 0x1D, 0xCF, 0x77, 0x89, 0x3F, 0x9A, 0x65, 0x91, 0x32, 0x31, 0xA7, 0x4B, 0x97, 0x48, 0x08, 0x09,
+ 0xE5, 0x96, 0xC1, 0x30, 0xDC, 0x5C, 0xBF, 0xD5, 0x5C, 0x91, 0xE1, 0x17, 0xD3, 0x6F, 0x72, 0x99,
+ 0x0C, 0xC9, 0xC4, 0x71, 0x89, 0xB4, 0x65, 0xD0, 0xC2, 0x72, 0x46, 0x5F, 0x9A, 0x9E, 0x6F, 0xB8,
+ 0xBE, 0x0A, 0x42, 0x63, 0xE2, 0x13, 0x37, 0x1F, 0x1F, 0x41, 0xAB, 0xC8, 0xC7, 0x96, 0xDE, 0x2D,
+ 0x6F, 0x60, 0xDA, 0x96, 0x69, 0x13, 0x75, 0xF2, 0xD2, 0xFA, 0x8D, 0xA3, 0x63, 0xAD, 0x14, 0x14,
+ 0x63, 0xCE, 0xA7, 0x59, 0x56, 0x42, 0x79, 0x5D, 0xEF, 0x8C, 0xFB, 0x8D, 0xDE, 0x6A, 0xFD, 0xC7,
+ 0xFA, 0xCD, 0x19, 0x61, 0x66, 0x6A, 0x2C, 0x7D, 0xA7, 0xBA, 0x47, 0xAC, 0xB9, 0x55, 0x82, 0x8F,
+ 0xFF, 0x9C, 0x93, 0xB1, 0x69, 0x68, 0x0D, 0xC1, 0x9D, 0x8F, 0x5B, 0x60, 0x53, 0x7B, 0x9A, 0x61,
+ 0x8F, 0xB5, 0x86, 0xE3, 0x9A, 0xE0, 0x08, 0x06, 0x0D, 0x37, 0x16, 0x5C, 0x81, 0x81, 0x63, 0x41,
+ 0xF6, 0x24, 0x2C, 0x67, 0xF8, 0x8C, 0x28, 0x11, 0xB9, 0xDB, 0xE0, 0x4F, 0x21, 0xE4, 0xE0, 0x2F,
+ 0xD7, 0x81, 0x24, 0x3C, 0x52, 0xF4, 0x59, 0xFA, 0x12, 0x29, 0x4C, 0xD3, 0x19, 0xFE, 0xE6, 0xC6,
+ 0x4D, 0x33, 0x53, 0x77, 0x41, 0xA3, 0x40, 0x87, 0x30, 0xCC, 0x8E, 0x1A, 0xD0, 0xF4, 0x7A, 0xA6,
+ 0x35, 0x35, 0x8C, 0x92, 0x7B, 0x72, 0x18, 0x8E, 0x54, 0xAE, 0x72, 0xFC, 0x89, 0x46, 0x51, 0x80,
+ 0x5D, 0x39, 0xAB, 0x51, 0xEC, 0x60, 0xFF, 0x64, 0x36, 0xC4, 0x38, 0x49, 0x8D, 0x22, 0xF8, 0x53,
+ 0x8F, 0x24, 0x11, 0xB2, 0xDC, 0x68, 0x22, 0x41, 0x9C, 0x1E, 0x51, 0xD6, 0xF0, 0xA6, 0x79, 0xB7,
+ 0x04, 0x6B, 0x36, 0x09, 0xAA, 0xD1, 0x45, 0x82, 0x38, 0x8B, 0x86, 0xDC, 0x28, 0x83, 0xBF, 0x3B,
+ 0x85, 0x7C, 0xE3, 0x9B, 0xE1, 0xD2, 0xF7, 0x1D, 0xDB, 0xAB, 0x34, 0x44, 0xA5, 0xF9, 0xD9, 0x1F,
+ 0x4B, 0xCF, 0x37, 0x27, 0xB7, 0x4D, 0xEE, 0xD2, 0xE0, 0x67, 0x0B, 0x03, 0x52, 0xC8, 0x21, 0xF1,
+ 0x57, 0x84, 0x64, 0xA7, 0x1B, 0xB6, 0x71, 0x0D, 0x71, 0x67, 0x3A, 0xB5, 0x64, 0xB6, 0x37, 0x5A,
+ 0xBA, 0x1E, 0xE6, 0x6D, 0x0B, 0xC7, 0x04, 0xC4, 0xEE, 0x7A, 0xC7, 0x71, 0x1F, 0x54, 0xEC, 0xA8,
+ 0x39, 0x1A, 0x4A, 0xFA, 0x72, 0x96, 0x3E, 0xCA, 0x58, 0xAA, 0x09, 0x07, 0xD8, 0x31, 0xFD, 0x5B,
+ 0xE9, 0x3D, 0xEE, 0x89, 0x92, 0x3B, 0x81, 0x0B, 0x66, 0x0E, 0x0B, 0x71, 0xBA, 0x4E, 0x47, 0x33,
+ 0x32, 0xFA, 0x42, 0xC6, 0x4F, 0x73, 0xD3, 0xB0, 0xBC, 0xF4, 0xF0, 0xC0, 0xB4, 0x17, 0x4B, 0xBF,
+ 0x89, 0xE9, 0xD4, 0x62, 0x2B, 0x3A, 0xA7, 0x06, 0x19, 0xB0, 0xD8, 0x6E, 0x67, 0x25, 0x15, 0xBD,
+ 0xC5, 0x4D, 0xB6, 0x10, 0x44, 0x62, 0x07, 0x96, 0x31, 0x24, 0x56, 0x16, 0xC9, 0xDC, 0x19, 0x52,
+ 0xC2, 0x2E, 0x8F, 0x55, 0xE9, 0xB9, 0x1B, 0xA5, 0x2C, 0x1A, 0xBC, 0xBA, 0x47, 0xFF, 0xA1, 0x2C,
+ 0x47, 0x7A, 0xBC, 0x1F, 0xBB, 0xE4, 0x11, 0x0B, 0x1C, 0x2C, 0x71, 0x6D, 0x61, 0xA4, 0x26, 0xE3,
+ 0xD0, 0x62, 0x05, 0x54, 0x65, 0x76, 0xE9, 0x1A, 0xF6, 0x94, 0x40, 0x74, 0xB8, 0xD9, 0x0F, 0x0E,
+ 0xB3, 0xA7, 0x0A, 0x4A, 0x02, 0xC1, 0xE0, 0xDD, 0xCB, 0x9E, 0x9A, 0xB0, 0x10, 0xB1, 0xAF, 0x1D,
+ 0xB0, 0x83, 0x12, 0x79, 0x8A, 0xA0, 0xF1, 0x4C, 0x42, 0x74, 0xA9, 0xBD, 0xB0, 0x54, 0x45, 0xEA,
+ 0x4B, 0x71, 0x6B, 0x93, 0xA6, 0xFE, 0xB9, 0xC1, 0x22, 0x98, 0x04, 0x4E, 0x26, 0x79, 0xD3, 0xC8,
+ 0xC9, 0xA4, 0xD3, 0xEA, 0x74, 0x73, 0x73, 0x29, 0x29, 0x97, 0x89, 0xA9, 0xA4, 0x24, 0x98, 0x84,
+ 0x81, 0x26, 0x5F, 0x17, 0xA7, 0x33, 0xE7, 0x9A, 0xB8, 0x12, 0x45, 0x24, 0xC8, 0xED, 0x9E, 0x74,
+ 0xC7, 0x0A, 0xD8, 0x0C, 0x18, 0x0A, 0xAE, 0x65, 0x81, 0x36, 0x8E, 0xAE, 0xAD, 0x8F, 0xDA, 0x99,
+ 0x16, 0xCA, 0xD0, 0x1D, 0x80, 0x35, 0x18, 0x43, 0x8B, 0x8C, 0x33, 0x22, 0xF7, 0x98, 0x4C, 0x8C,
+ 0xA5, 0xE5, 0xE7, 0xC8, 0xDB, 0x68, 0xE1, 0xBF, 0xAC, 0x1E, 0xA9, 0x7B, 0xFD, 0x8A, 0x35, 0x90,
+ 0x73, 0xEA, 0x12, 0xBF, 0x49, 0xFA, 0x0C, 0x86, 0x55, 0x63, 0xB1, 0x20, 0x06, 0xB4, 0x1A, 0x91,
+ 0xB4, 0xD9, 0xAA, 0x52, 0x3A, 0x2D, 0x8F, 0x69, 0x4A, 0x73, 0xD4, 0x5C, 0x53, 0x0C, 0x13, 0xA5,
+ 0x42, 0x3C, 0x9F, 0x4E, 0x9C, 0xD1, 0x52, 0x36, 0x82, 0xAB, 0x99, 0xD4, 0x3A, 0xBE, 0xD3, 0x40,
+ 0x64, 0x9E, 0x65, 0x52, 0xC3, 0x5E, 0xDA, 0x36, 0x6A, 0xB4, 0xE9, 0xBB, 0xC0, 0xA6, 0xA4, 0x23,
+ 0x35, 0xC1, 0x95, 0xF2, 0xCE, 0x98, 0x60, 0xD3, 0xEA, 0x34, 0x09, 0x07, 0x94, 0x04, 0x8A, 0x30,
+ 0x86, 0x68, 0x9E, 0x03, 0x4C, 0x05, 0xA8, 0xAA, 0xC9, 0xC5, 0x9F, 0x2D, 0xE7, 0xB2, 0x9C, 0x21,
+ 0xE8, 0x4C, 0x87, 0x01, 0x8E, 0x75, 0xE7, 0x4E, 0x87, 0x46, 0xA3, 0xB5, 0xDF, 0xDA, 0xEF, 0xC0,
+ 0x7F, 0x92, 0xDC, 0x3D, 0xDB, 0xB8, 0xB8, 0x78, 0x53, 0x2C, 0x2F, 0x11, 0x7C, 0xF2, 0x4B, 0x28,
+ 0x69, 0x61, 0x2C, 0x57, 0x17, 0xEA, 0x9E, 0x14, 0xAF, 0xA5, 0xE8, 0x07, 0x39, 0x23, 0x4C, 0x8A,
+ 0x49, 0x17, 0x37, 0x44, 0x89, 0xB5, 0x14, 0x55, 0xF1, 0xDC, 0xF9, 0xB3, 0xC9, 0x86, 0xD7, 0xFF,
+ 0xF3, 0xD6, 0x2E, 0x88, 0xE2, 0x6F, 0x6D, 0xE9, 0x85, 0xE5, 0xE2, 0xDD, 0xB7, 0x6D, 0xB4, 0xD2,
+ 0xB5, 0xDE, 0xE4, 0xF9, 0x0C, 0x50, 0x68, 0x43, 0xC6, 0xE9, 0xC2, 0xC4, 0x2B, 0x35, 0xE7, 0x11,
+ 0xDA, 0x94, 0x90, 0xC1, 0xC4, 0xB4, 0xAC, 0xA6, 0xE5, 0xAC, 0xF2, 0x33, 0x91, 0x6C, 0x4B, 0x5E,
+ 0xB3, 0xD3, 0x7C, 0x93, 0x2F, 0x4B, 0xED, 0x12, 0x22, 0xD7, 0x5F, 0x82, 0xDA, 0xBF, 0xB7, 0xC3,
+ 0x65, 0xBA, 0x46, 0xB9, 0x81, 0xA2, 0x84, 0x3D, 0x56, 0xEB, 0x48, 0xC9, 0x94, 0x58, 0x26, 0x98,
+ 0x39, 0xAB, 0xF3, 0x56, 0xA6, 0x3F, 0x9A, 0x95, 0x98, 0x54, 0x2D, 0x1C, 0xCF, 0x64, 0xCB, 0x37,
+ 0x2E, 0xB1, 0x0C, 0xCC, 0xE0, 0x4B, 0xCD, 0xC6, 0x73, 0x27, 0x26, 0x22, 0xB8, 0x0A, 0x27, 0x54,
+ 0x74, 0x0F, 0xA7, 0x92, 0x72, 0xC0, 0x72, 0x87, 0xF4, 0x58, 0x2D, 0x37, 0xEB, 0x9C, 0x74, 0x3F,
+ 0xEE, 0x19, 0xF2, 0x46, 0x05, 0x22, 0x7A, 0x10, 0xB4, 0xA7, 0x2E, 0xB9, 0x55, 0x60, 0x66, 0x9F,
+ 0xFF, 0x3D, 0x65, 0xB5, 0xD2, 0xF2, 0x45, 0x00, 0x3A, 0x00, 0x70, 0x2B, 0x3A, 0xE8, 0x7A, 0x0A,
+ 0x5D, 0xA7, 0x77, 0xA9, 0x62, 0x8F, 0x61, 0x25, 0xB0, 0x56, 0x53, 0x08, 0x37, 0x19, 0x43, 0xA8,
+ 0xDC, 0x54, 0x83, 0xD1, 0x57, 0x7A, 0xD3, 0x22, 0x13, 0x3F, 0x65, 0xA1, 0x83, 0xE6, 0xA9, 0x9D,
+ 0xEC, 0xE8, 0xD6, 0x14, 0xEA, 0x04, 0xB9, 0x91, 0x23, 0x2C, 0xD8, 0xA5, 0x5B, 0x9F, 0x14, 0x33,
+ 0x46, 0xCF, 0xC2, 0xC8, 0xD3, 0x55, 0x12, 0xA4, 0xCF, 0x54, 0xCD, 0xD0, 0x66, 0xCE, 0x87, 0x7C,
+ 0x50, 0x0F, 0xF9, 0xB9, 0xD1, 0xEE, 0x4B, 0xD7, 0x11, 0x32, 0x1A, 0x67, 0x91, 0xC6, 0x2A, 0x5E,
+ 0x4A, 0x43, 0x56, 0xEA, 0x04, 0x59, 0x8C, 0x45, 0x52, 0x45, 0x65, 0x7B, 0x65, 0x56, 0x84, 0x59,
+ 0xAF, 0xD1, 0x64, 0x1A, 0xBB, 0x39, 0x37, 0x20, 0xED, 0x45, 0x73, 0x35, 0x00, 0xA3, 0x4C, 0x7F,
+ 0x2A, 0xE6, 0x2E, 0xD4, 0x13, 0xF5, 0x7E, 0x2B, 0xA7, 0xCB, 0x91, 0xE5, 0x78, 0xD9, 0x7E, 0x65,
+ 0x0C, 0x41, 0x7E, 0x4B, 0x5F, 0xD2, 0x11, 0xAF, 0x6A, 0x4A, 0x2B, 0x4F, 0xD4, 0xB8, 0xA5, 0x77,
+ 0x94, 0x86, 0xEE, 0x4C, 0x9F, 0xCA, 0x76, 0xC7, 0x84, 0xCC, 0xF5, 0x96, 0x34, 0xD2, 0x66, 0xD6,
+ 0xDF, 0x7C, 0x72, 0x03, 0xF3, 0x4D, 0x5C, 0xAB, 0x3B, 0xD5, 0x46, 0x44, 0x1E, 0x46, 0x63, 0x83,
+ 0x9C, 0xAE, 0x52, 0x04, 0xCC, 0xD4, 0xC3, 0xCC, 0x1C, 0x8F, 0x49, 0x66, 0x95, 0x13, 0xE7, 0xBC,
+ 0xD9, 0xA1, 0xD2, 0x90, 0x96, 0xD3, 0x0A, 0x68, 0xB2, 0x9D, 0xAE, 0xCA, 0xCC, 0xE1, 0x2A, 0x25,
+ 0xF4, 0xC5, 0x24, 0x24, 0x6D, 0x22, 0x54, 0x61, 0xE5, 0x21, 0x12, 0x15, 0x31, 0x26, 0x23, 0xC7,
+ 0x65, 0x8B, 0xB8, 0x29, 0x13, 0xFF, 0x72, 0x33, 0x2B, 0x44, 0x2E, 0x2B, 0xDD, 0x6D, 0x25, 0x74,
+ 0x64, 0x6E, 0x74, 0xD0, 0xB7, 0x1D, 0x57, 0xF8, 0x70, 0x9C, 0x56, 0x49, 0x8F, 0x27, 0x6C, 0x99,
+ 0xA4, 0x4A, 0x43, 0x60, 0xA8, 0x46, 0x14, 0x19, 0xC8, 0x01, 0x5B, 0xAD, 0x2B, 0x34, 0x41, 0x15,
+ 0x5D, 0x5A, 0x39, 0xE0, 0xAB, 0x4D, 0x7C, 0x61, 0xB0, 0x99, 0xB6, 0xDE, 0xB2, 0xC1, 0xC5, 0x37,
+ 0x6A, 0x01, 0xC9, 0x7E, 0x53, 0x45, 0x73, 0x4F, 0xF9, 0x63, 0x06, 0x91, 0xE1, 0x40, 0x1C, 0x6C,
+ 0xB7, 0x8A, 0xB7, 0x2A, 0x1B, 0x42, 0xCE, 0x0E, 0x85, 0xFD, 0x71, 0x67, 0x87, 0xD1, 0x56, 0xBE,
+ 0x33, 0xDC, 0x24, 0x27, 0x6E, 0xA3, 0xE3, 0xFD, 0x8C, 0x2C, 0xC3, 0xF3, 0xCE, 0x6B, 0xB8, 0xD9,
+ 0xAB, 0x16, 0xDF, 0x55, 0x77, 0x36, 0x36, 0xAF, 0x35, 0x73, 0x7C, 0x5E, 0xB3, 0x9C, 0xA9, 0x93,
+ 0xB8, 0x47, 0xEF, 0x33, 0x2D, 0xC3, 0x68, 0x7F, 0x5E, 0x8B, 0xAD, 0x38, 0xD6, 0x28, 0x54, 0x74,
+ 0xA9, 0x36, 0x78, 0xF2, 0xCD, 0xC9, 0xD1, 0x51, 0xFF, 0xD9, 0x13, 0x7B, 0xE8, 0x2D, 0xF8, 0xFF,
+ 0x1F, 0xD9, 0x02, 0xAD, 0x47, 0x7C, 0x1F, 0x6C, 0xCE, 0x3B, 0x3B, 0xA4, 0xD8, 0x12, 0x14, 0x1C,
+ 0x02, 0x09, 0x29, 0x44, 0xF1, 0x6C, 0x50, 0x46, 0x57, 0xD0, 0xC4, 0x83, 0x04, 0x67, 0x68, 0xB8,
+ 0x92, 0x26, 0xB4, 0x19, 0x9B, 0x6B, 0xD0, 0x18, 0x52, 0xA3, 0xCA, 0x18, 0x3A, 0x37, 0x49, 0xD2,
+ 0x29, 0x37, 0x5C, 0x53, 0xBC, 0x15, 0x19, 0xA7, 0x21, 0x04, 0x30, 0x0A, 0x8E, 0xEB, 0xAC, 0xD0,
+ 0x46, 0xDA, 0x28, 0x26, 0x7B, 0x6C, 0x7C, 0x33, 0xB2, 0xBE, 0x04, 0x4A, 0xAF, 0x05, 0xDA, 0xB0,
+ 0x1D, 0x9F, 0x8D, 0x24, 0x29, 0x5D, 0xC5, 0x58, 0xE5, 0x30, 0xC2, 0x6A, 0x21, 0xE3, 0x02, 0x44,
+ 0xDB, 0xA4, 0xD8, 0xD9, 0xB5, 0x6C, 0x4C, 0x14, 0x9B, 0xA0, 0xD0, 0x00, 0xB8, 0x36, 0xF8, 0xF9,
+ 0xE2, 0xBB, 0x7F, 0x6A, 0xEF, 0xDE, 0xFE, 0x29, 0xD5, 0x50, 0x1E, 0x51, 0x18, 0x9C, 0x15, 0x7A,
+ 0xA6, 0x60, 0x4C, 0x1F, 0x81, 0x4C, 0x6A, 0x5C, 0x33, 0x14, 0x03, 0x26, 0x43, 0x16, 0xB1, 0xA7,
+ 0xFE, 0xEC, 0xBC, 0xA6, 0xD7, 0x70, 0x77, 0x4B, 0x70, 0xD6, 0xAE, 0x69, 0x18, 0xB8, 0xE9, 0xC1,
+ 0xB5, 0x61, 0x2D, 0xF1, 0xA8, 0xA5, 0xC2, 0xEB, 0xBA, 0x69, 0x49, 0x9B, 0xF1, 0x88, 0x12, 0xCA,
+ 0x58, 0x88, 0xC0, 0x71, 0x29, 0xD7, 0x06, 0x57, 0xC4, 0x3F, 0x3B, 0x64, 0xB7, 0x72, 0xB4, 0x96,
+ 0xDD, 0x37, 0xB8, 0x30, 0x33, 0x87, 0x2C, 0x13, 0xCA, 0x52, 0xFC, 0xC4, 0x35, 0xE6, 0x04, 0xA5,
+ 0xA2, 0xA4, 0x79, 0x51, 0xEB, 0x21, 0x64, 0x6D, 0xF0, 0x81, 0xD0, 0x2C, 0x03, 0xC8, 0x50, 0x52,
+ 0xFC, 0x19, 0x4F, 0xE1, 0x63, 0xFD, 0x87, 0xF6, 0xCC, 0x97, 0xEC, 0x9A, 0x06, 0x33, 0x73, 0x05,
+ 0xB9, 0x3F, 0x6E, 0x36, 0xB5, 0xDE, 0xBB, 0xF7, 0x5A, 0xB3, 0xA9, 0xD0, 0xD8, 0x59, 0x50, 0x77,
+ 0x0A, 0xF4, 0x0F, 0x16, 0xC2, 0xA8, 0x21, 0x54, 0x3F, 0xEC, 0xA8, 0x36, 0xF8, 0xE1, 0xEA, 0xE7,
+ 0x37, 0x2F, 0x1A, 0xED, 0x5E, 0xBF, 0x75, 0xA3, 0x9F, 0xB4, 0x5B, 0x7B, 0x67, 0x87, 0x0C, 0xAE,
+ 0x78, 0x07, 0x60, 0x60, 0xEF, 0xB5, 0xD7, 0x6F, 0x5F, 0x35, 0xF4, 0xD6, 0x71, 0x55, 0x64, 0xFA,
+ 0x49, 0x6D, 0xF0, 0xD3, 0x0F, 0x11, 0x65, 0xFD, 0x56, 0x15, 0x64, 0xC7, 0xC0, 0x26, 0xD0, 0xC5,
+ 0x50, 0x75, 0xBB, 0x85, 0x50, 0xA1, 0xC8, 0x3B, 0xE5, 0x44, 0xAE, 0x1F, 0x41, 0xBF, 0x94, 0x87,
+ 0x56, 0xF7, 0xF8, 0x46, 0xEF, 0xF5, 0xBB, 0x15, 0x78, 0xE8, 0xA3, 0x74, 0x81, 0x90, 0xC6, 0x71,
+ 0xBF, 0x5B, 0x15, 0x57, 0x0F, 0x71, 0x81, 0x40, 0x8E, 0xDA, 0x20, 0x8F, 0xF6, 0x71, 0x15, 0xD1,
+ 0x76, 0x6B, 0x03, 0xAA, 0xF2, 0x13, 0x44, 0xD5, 0x2A, 0x86, 0x0A, 0x45, 0xDB, 0x2E, 0x29, 0xDA,
+ 0x4E, 0x6D, 0xF0, 0x23, 0x8A, 0x16, 0x2D, 0x03, 0x78, 0xA8, 0x64, 0x1E, 0x6D, 0x88, 0x52, 0x14,
+ 0x57, 0x1B, 0xED, 0xB6, 0xD5, 0xAE, 0x22, 0x5A, 0xBD, 0x36, 0x40, 0x71, 0x20, 0xA6, 0xA3, 0x4A,
+ 0x0E, 0x00, 0xDE, 0x44, 0x69, 0x02, 0x72, 0x6E, 0x8E, 0xFA, 0xC7, 0xE5, 0x31, 0x81, 0x27, 0x5D,
+ 0x7D, 0x02, 0x4C, 0xC7, 0x20, 0xA8, 0x4A, 0x6E, 0x04, 0x5E, 0x84, 0x78, 0xFA, 0xDD, 0xD6, 0x4D,
+ 0xB7, 0x8A, 0xCD, 0x80, 0x57, 0xBC, 0x45, 0x44, 0x80, 0xE4, 0xA6, 0x53, 0x45, 0x46, 0xE0, 0x12,
+ 0x17, 0xDF, 0xBE, 0x6E, 0x74, 0x81, 0xB1, 0xF6, 0x49, 0xBF, 0x3C, 0x1E, 0x70, 0x87, 0x1F, 0x90,
+ 0x20, 0x20, 0xE6, 0xA6, 0x5D, 0x2C, 0x3A, 0xC4, 0x11, 0x81, 0x33, 0x00, 0x3C, 0xE2, 0x28, 0x8D,
+ 0x02, 0xEC, 0xFA, 0x2D, 0x25, 0x06, 0x11, 0xE9, 0x47, 0x15, 0xB8, 0x02, 0xAB, 0xFE, 0x01, 0xC5,
+ 0x03, 0x48, 0x30, 0xE8, 0x55, 0x30, 0x45, 0x40, 0x44, 0x49, 0xD2, 0xFB, 0xD4, 0xD5, 0xCA, 0x63,
+ 0x02, 0x9B, 0x3E, 0xE9, 0xDF, 0x9C, 0xF4, 0xD5, 0x10, 0xE0, 0x88, 0x8F, 0xA3, 0x54, 0x56, 0x4E,
+ 0x90, 0x9D, 0x32, 0x64, 0xA5, 0x03, 0xFF, 0x5E, 0x1A, 0x16, 0xCC, 0x6F, 0x0A, 0x27, 0x03, 0x1C,
+ 0x0E, 0x64, 0xC2, 0x0E, 0xD4, 0xF2, 0x00, 0x81, 0x92, 0x70, 0xA3, 0x59, 0x6D, 0xD0, 0x55, 0xC8,
+ 0xB7, 0x62, 0x09, 0x39, 0x85, 0x8D, 0xD1, 0x4F, 0x93, 0x40, 0xB4, 0x3C, 0x4C, 0xFF, 0xC0, 0x25,
+ 0x3A, 0x35, 0x21, 0x82, 0x94, 0x4A, 0x34, 0x24, 0xB4, 0x1A, 0x37, 0xB5, 0x41, 0xBF, 0x93, 0x9B,
+ 0xA0, 0x95, 0x57, 0xC6, 0x90, 0xD6, 0x68, 0x6C, 0xE2, 0x79, 0x85, 0xF5, 0x11, 0x81, 0xD6, 0x06,
+ 0x2F, 0xC3, 0xE3, 0x2A, 0x5A, 0x69, 0xE6, 0x71, 0x4A, 0x61, 0x53, 0xD4, 0x22, 0x90, 0xC3, 0x34,
+ 0xD3, 0xEC, 0x70, 0xD5, 0x44, 0x9A, 0xD9, 0xAC, 0x62, 0xB6, 0xA9, 0x17, 0x9C, 0x4E, 0xBA, 0x86,
+ 0xE7, 0x17, 0xD6, 0x4A, 0x00, 0x08, 0x11, 0x9A, 0x1F, 0xDD, 0x9B, 0x46, 0x42, 0x52, 0xFE, 0x06,
+ 0xFA, 0xF0, 0x0C, 0x7F, 0xC9, 0xAA, 0x85, 0x85, 0x35, 0x12, 0x81, 0x42, 0x3E, 0x10, 0x1E, 0x57,
+ 0xD2, 0x4A, 0x95, 0xF0, 0x25, 0x90, 0xC3, 0xF5, 0x12, 0x84, 0xB0, 0xEE, 0x96, 0xF4, 0x92, 0x47,
+ 0x6D, 0x25, 0xBD, 0xCC, 0x0C, 0x77, 0x51, 0x2A, 0x7C, 0x85, 0x90, 0xA0, 0x95, 0xE0, 0xF0, 0xDE,
+ 0x5C, 0x25, 0x22, 0xE6, 0x6F, 0xE0, 0x2B, 0x63, 0x62, 0x3B, 0xA6, 0x57, 0x7C, 0xB6, 0xCF, 0xE1,
+ 0x6A, 0x83, 0x57, 0xA4, 0xF9, 0x3D, 0x1E, 0x55, 0x51, 0xC7, 0x8B, 0xA5, 0xEF, 0x54, 0x50, 0x48,
+ 0x40, 0x0B, 0x53, 0x47, 0x8B, 0x6B, 0xE3, 0x78, 0x4B, 0xDA, 0x38, 0xDE, 0xA2, 0x36, 0x0C, 0xF2,
+ 0xD9, 0x22, 0xD7, 0xC4, 0x2A, 0xAC, 0x8E, 0x00, 0xB0, 0x36, 0xB8, 0xBC, 0x59, 0x38, 0x1E, 0x3E,
+ 0x3A, 0xF5, 0x1D, 0x9E, 0x57, 0x72, 0x92, 0x5E, 0x05, 0x9D, 0x84, 0x04, 0x71, 0x1F, 0xE9, 0x71,
+ 0xAD, 0xF4, 0xB6, 0xA4, 0x95, 0x3C, 0x5A, 0xAB, 0x68, 0x65, 0x6A, 0x98, 0xF6, 0x88, 0x98, 0x16,
+ 0x3E, 0xC6, 0x51, 0x54, 0x31, 0x02, 0x6C, 0x6D, 0xF0, 0x26, 0x3A, 0xA9, 0xA2, 0x98, 0x56, 0x05,
+ 0xBD, 0x88, 0xF4, 0xC4, 0xFD, 0xA5, 0x07, 0xB3, 0xF2, 0x2D, 0xE9, 0x46, 0xD7, 0xB7, 0x39, 0xAA,
+ 0x2C, 0xC8, 0xC8, 0x34, 0xAC, 0xCF, 0x64, 0x32, 0x81, 0x69, 0x50, 0xF1, 0xA1, 0x25, 0x06, 0x0E,
+ 0xE3, 0x0B, 0x3B, 0xD7, 0x2E, 0xE9, 0x79, 0xE1, 0xFA, 0x65, 0x02, 0x5D, 0xF9, 0x22, 0x66, 0x72,
+ 0x4E, 0x28, 0x2D, 0x4B, 0x7E, 0xEF, 0x84, 0x74, 0x96, 0x9F, 0xB6, 0x7E, 0x4F, 0xA6, 0x74, 0x1B,
+ 0x41, 0x95, 0x39, 0xF4, 0x1B, 0xD7, 0xB8, 0xA5, 0xEF, 0x64, 0xA8, 0x32, 0xA5, 0xFF, 0x40, 0xC6,
+ 0xDA, 0x47, 0xD3, 0x2E, 0xCF, 0x4C, 0x17, 0x09, 0x21, 0xC4, 0xAE, 0x86, 0xA5, 0x07, 0x53, 0x24,
+ 0x38, 0xA8, 0x86, 0xA4, 0x8F, 0x35, 0xFD, 0x85, 0x69, 0x3C, 0x84, 0x49, 0xBC, 0xB1, 0x1A, 0x16,
+ 0x1F, 0x50, 0x56, 0x43, 0x18, 0x97, 0x7F, 0x7A, 0xA9, 0x5D, 0xD2, 0x8D, 0xEF, 0x85, 0xC3, 0x15,
+ 0xDB, 0x93, 0xA7, 0x62, 0xE8, 0xD1, 0xD2, 0x0D, 0xF6, 0xB9, 0xB6, 0xA6, 0x26, 0x77, 0x20, 0xD5,
+ 0x75, 0x35, 0x09, 0x7B, 0x01, 0x81, 0x74, 0x0B, 0x53, 0x4D, 0xE0, 0x56, 0x8D, 0xC7, 0x2D, 0xA6,
+ 0x62, 0xA3, 0x55, 0xF1, 0x34, 0x6C, 0xB4, 0x02, 0x35, 0x8D, 0xAF, 0xF1, 0x99, 0x88, 0xB1, 0x06,
+ 0xFA, 0xDA, 0x89, 0xA2, 0xB0, 0xD7, 0xFB, 0x51, 0x14, 0xE5, 0xF7, 0xBE, 0x15, 0x05, 0xD6, 0xF2,
+ 0x19, 0xC7, 0xD1, 0x32, 0x4E, 0x45, 0x01, 0x6B, 0x83, 0x77, 0x86, 0xBD, 0x84, 0x41, 0x66, 0x57,
+ 0x0A, 0x0B, 0x3B, 0xBE, 0x37, 0xF7, 0xE2, 0x7C, 0xDF, 0xB7, 0xEA, 0x80, 0x90, 0xB9, 0x33, 0x2E,
+ 0x3E, 0xDD, 0xE1, 0x70, 0x2C, 0x24, 0xBE, 0x83, 0xA3, 0xC2, 0x89, 0x41, 0x80, 0x61, 0xCB, 0x19,
+ 0x01, 0x9B, 0x4A, 0x95, 0x4F, 0x06, 0xAE, 0x96, 0xB6, 0x7D, 0x5B, 0x25, 0x13, 0xB8, 0xB0, 0x9C,
+ 0xE5, 0xB8, 0x3C, 0x06, 0x48, 0x03, 0xFE, 0x35, 0x99, 0x98, 0xA3, 0xF2, 0x89, 0x04, 0x24, 0x01,
+ 0x6F, 0x9D, 0xB9, 0x22, 0xFC, 0x96, 0x07, 0x5E, 0x32, 0x2A, 0x31, 0x93, 0x1B, 0x81, 0x16, 0x2F,
+ 0x2F, 0x76, 0x3A, 0xF0, 0x42, 0x9F, 0xF7, 0x14, 0x19, 0x90, 0xDB, 0xFB, 0x0E, 0x0A, 0x40, 0xC4,
+ 0x67, 0x6A, 0x3C, 0x65, 0x94, 0xC5, 0x20, 0xC3, 0x88, 0x1E, 0x4C, 0xBF, 0xEF, 0x6B, 0x7E, 0x17,
+ 0x51, 0x14, 0x9F, 0xDD, 0xE1, 0xD2, 0x73, 0x38, 0xBD, 0xEB, 0xB4, 0x37, 0x3B, 0xC1, 0x43, 0xE4,
+ 0xDB, 0xD5, 0x4F, 0xBB, 0x8C, 0x6A, 0x20, 0x1A, 0x7D, 0x8F, 0xEB, 0x0C, 0x05, 0x02, 0x76, 0x75,
+ 0x47, 0x6A, 0xDF, 0x9F, 0x27, 0xB5, 0x1F, 0x80, 0x2B, 0x4D, 0x4B, 0x44, 0xBC, 0x29, 0x46, 0xBC,
+ 0x37, 0x17, 0xBB, 0xD1, 0xD0, 0xF4, 0xDE, 0x42, 0xDD, 0xF4, 0x5E, 0x43, 0x9D, 0xC6, 0x37, 0x05,
+ 0x06, 0x52, 0x28, 0x99, 0xC1, 0x72, 0x40, 0x56, 0xCB, 0xAA, 0x12, 0xE4, 0xF4, 0x9B, 0x2A, 0x51,
+ 0x2E, 0x20, 0x23, 0x1E, 0xE4, 0xFA, 0xD1, 0xAA, 0x48, 0x6F, 0xB3, 0xCB, 0xBA, 0xDD, 0x3C, 0x6A,
+ 0xAB, 0x38, 0x8D, 0x6B, 0xAC, 0x3E, 0x4F, 0xE7, 0x46, 0x61, 0x65, 0x70, 0x38, 0xD0, 0xC5, 0xBB,
+ 0x17, 0xBB, 0x4C, 0x17, 0x82, 0x7E, 0xEF, 0xC7, 0x8F, 0x42, 0xAE, 0xEF, 0x3B, 0xD6, 0x59, 0xC4,
+ 0x2E, 0x1E, 0xEC, 0x10, 0xA8, 0x36, 0xF8, 0x8E, 0xD8, 0x9E, 0x76, 0xE1, 0xB8, 0xFC, 0x45, 0x98,
+ 0x3B, 0xD1, 0x1A, 0xED, 0xF9, 0x7E, 0x54, 0xC6, 0x98, 0xBE, 0x6F, 0x7D, 0xCD, 0xE6, 0xA6, 0xEB,
+ 0x3A, 0x6E, 0x61, 0x95, 0x71, 0x38, 0x98, 0x56, 0x34, 0xDF, 0xD1, 0xA3, 0x9D, 0xA8, 0x2B, 0xE8,
+ 0xF5, 0x7E, 0x34, 0x16, 0xF2, 0x7C, 0xDF, 0x4A, 0xBB, 0x9E, 0x58, 0xE6, 0xA2, 0xB0, 0xCA, 0x28,
+ 0x54, 0x6D, 0xF0, 0xA9, 0xF9, 0x1A, 0xFE, 0xEE, 0x44, 0x5D, 0xAC, 0xC7, 0xFB, 0x51, 0x16, 0xE7,
+ 0xF6, 0xBE, 0x55, 0x35, 0x5C, 0x14, 0x0F, 0x87, 0x00, 0x53, 0x1B, 0xBC, 0x7C, 0xBF, 0x9B, 0xDC,
+ 0x0F, 0x3B, 0x53, 0xD4, 0x50, 0x25, 0x7D, 0x50, 0xA6, 0xEE, 0x5B, 0x1B, 0xAB, 0x12, 0xDA, 0x58,
+ 0x21, 0xE1, 0x3F, 0xED, 0x48, 0x1B, 0x2B, 0x75, 0x6D, 0x6C, 0xD8, 0x5F, 0x56, 0x0F, 0x41, 0x3F,
+ 0xF4, 0xE9, 0xD3, 0xA1, 0x51, 0x7C, 0x38, 0x0A, 0x00, 0x71, 0xD3, 0x18, 0x1C, 0x69, 0x2F, 0x8D,
+ 0xDD, 0x0C, 0x48, 0x61, 0xBF, 0xBB, 0x70, 0xA1, 0x88, 0xC9, 0xFB, 0xD6, 0xD3, 0xC4, 0x18, 0x91,
+ 0xCF, 0x63, 0xE2, 0x97, 0x59, 0x5B, 0x16, 0x60, 0x6B, 0x83, 0xD7, 0x70, 0xA2, 0xBD, 0xA2, 0x27,
+ 0xBB, 0x4A, 0xF9, 0xC4, 0xFE, 0x77, 0xA1, 0xB5, 0x18, 0xBF, 0x0F, 0x42, 0x71, 0x90, 0x60, 0x3B,
+ 0x53, 0xBB, 0xD4, 0xE3, 0x4C, 0x31, 0x70, 0xAE, 0xBE, 0x0F, 0xEC, 0x7C, 0xB7, 0x0A, 0x8C, 0x88,
+ 0xD8, 0x99, 0x0E, 0x05, 0xBE, 0x37, 0xA8, 0x46, 0xC5, 0xA7, 0x1A, 0xF9, 0x9B, 0x81, 0xF3, 0x74,
+ 0xC5, 0x9F, 0xAE, 0xA3, 0x9B, 0x5A, 0x88, 0xDF, 0xF4, 0x7C, 0xD3, 0xB2, 0x60, 0x2A, 0x4C, 0x7C,
+ 0xED, 0x0A, 0x0F, 0x15, 0x1F, 0xA7, 0x13, 0xB0, 0x04, 0x0F, 0xD1, 0xFA, 0x2E, 0x31, 0xE6, 0xB5,
+ 0xC1, 0x15, 0xBE, 0x33, 0x19, 0x70, 0xE1, 0x59, 0x71, 0x64, 0x54, 0x8C, 0xC4, 0x76, 0x1D, 0x20,
+ 0x2A, 0x54, 0x13, 0x7F, 0x3F, 0x65, 0x4D, 0x0B, 0x8E, 0x84, 0x6B, 0x83, 0x4B, 0xDA, 0x58, 0x43,
+ 0x3B, 0xCB, 0xEF, 0x4E, 0xF9, 0x39, 0x3F, 0xFA, 0x44, 0x2F, 0x3E, 0xA2, 0x1B, 0x7F, 0xA3, 0x3A,
+ 0xE8, 0x95, 0xBD, 0xD5, 0x60, 0x70, 0x46, 0xDF, 0x0E, 0xCB, 0x9B, 0xD1, 0x87, 0xD9, 0x57, 0xFC,
+ 0xE9, 0xE4, 0xA1, 0x63, 0x8D, 0x9F, 0x09, 0xAB, 0xCB, 0x57, 0xE1, 0xE3, 0xB6, 0x08, 0x02, 0x86,
+ 0x11, 0x60, 0xC8, 0x51, 0xFE, 0xCC, 0x0D, 0xD0, 0xB3, 0x27, 0xA2, 0xF1, 0x1D, 0x65, 0x19, 0xCA,
+ 0x4D, 0x79, 0x34, 0xD8, 0x25, 0xD3, 0x50, 0x90, 0xB2, 0x27, 0xC6, 0xA5, 0x0F, 0x0A, 0x7F, 0x20,
+ 0x53, 0xD3, 0x03, 0x1A, 0x35, 0x30, 0x8B, 0x43, 0xFA, 0x8C, 0x25, 0x33, 0x66, 0xB5, 0xE7, 0x77,
+ 0xC5, 0x2E, 0xF9, 0xCB, 0x19, 0xA4, 0x8F, 0x63, 0x17, 0xCA, 0x4F, 0x92, 0x0F, 0x4F, 0xC7, 0x31,
+ 0xE6, 0x19, 0xFD, 0xE3, 0x66, 0x73, 0xD6, 0xC5, 0xA7, 0x45, 0xB5, 0x80, 0xB5, 0xB3, 0xC3, 0x59,
+ 0x37, 0xEF, 0xD1, 0xB0, 0xDC, 0x47, 0x7D, 0x81, 0xD3, 0xD2, 0x4F, 0xFA, 0xA2, 0x94, 0x06, 0x40,
+ 0xCD, 0xBE, 0xF6, 0xCE, 0xF0, 0xBE, 0xEC, 0x6B, 0x9F, 0xB0, 0x00, 0xB7, 0xC3, 0x07, 0x7E, 0x91,
+ 0x76, 0x63, 0x3C, 0x76, 0x53, 0x1F, 0xFA, 0xED, 0xC6, 0x1E, 0xFA, 0xED, 0x07, 0x0F, 0xFD, 0xF6,
+ 0xA3, 0xDD, 0x6E, 0x37, 0x9D, 0x56, 0xEB, 0x58, 0x85, 0x75, 0xC5, 0x07, 0x7F, 0x37, 0xC2, 0xD3,
+ 0x1C, 0xA4, 0xA9, 0xC8, 0x53, 0x37, 0xE0, 0x49, 0xD8, 0x15, 0x7E, 0x33, 0x99, 0x3C, 0x34, 0x8E,
+ 0xF8, 0xBA, 0x54, 0x79, 0x96, 0x5A, 0xED, 0x5D, 0x3F, 0x9D, 0x4D, 0x8D, 0x7B, 0x53, 0x0F, 0x67,
+ 0xD3, 0x26, 0xC9, 0x68, 0xD8, 0xCB, 0x0C, 0x86, 0x14, 0x84, 0x39, 0xFD, 0x9B, 0x4D, 0x3A, 0xFD,
+ 0xB4, 0x82, 0xD3, 0x4F, 0xD7, 0x9C, 0x7E, 0x87, 0xDE, 0x1E, 0x10, 0xFE, 0x77, 0xF3, 0xF8, 0x80,
+ 0xAF, 0x02, 0x5E, 0x2F, 0xE5, 0xAB, 0xD5, 0xDA, 0xA8, 0xDF, 0xE7, 0x3A, 0x49, 0x68, 0x0C, 0x6F,
+ 0x36, 0xE9, 0x24, 0x29, 0xA6, 0x5B, 0xCA, 0x4E, 0x79, 0xD8, 0x19, 0xEC, 0x66, 0x5C, 0xA2, 0xD9,
+ 0x94, 0xA8, 0x50, 0xDE, 0x3B, 0x3E, 0x13, 0xDA, 0xE9, 0xF2, 0xD4, 0x69, 0x13, 0xEA, 0x51, 0x7F,
+ 0x11, 0x44, 0x6A, 0x93, 0xCD, 0x24, 0x66, 0x0B, 0x21, 0xC3, 0x55, 0x4E, 0xCC, 0xDE, 0x7F, 0xF7,
+ 0x5D, 0xB1, 0x5C, 0x4C, 0xEC, 0xE5, 0x81, 0xE4, 0x62, 0x99, 0xB5, 0xD0, 0xDB, 0x05, 0xDC, 0x40,
+ 0xAA, 0x4B, 0x99, 0x6E, 0x04, 0x5E, 0x1B, 0xBC, 0xA4, 0xC7, 0x9A, 0x20, 0xB1, 0x42, 0xC6, 0xAB,
+ 0x3C, 0xED, 0xA4, 0x80, 0x42, 0xB1, 0x34, 0x22, 0x21, 0xA9, 0x1B, 0x45, 0x5C, 0x19, 0x05, 0x52,
+ 0x81, 0x3D, 0x75, 0xA6, 0x2A, 0xFB, 0x04, 0x6D, 0x92, 0x97, 0x0A, 0x2F, 0x5C, 0x52, 0x5A, 0x6D,
+ 0x1C, 0xB6, 0x36, 0x78, 0xEF, 0x12, 0xED, 0x95, 0x79, 0xAD, 0xCE, 0x9B, 0xB0, 0x51, 0x30, 0x44,
+ 0xA2, 0x26, 0xE5, 0xE4, 0x0E, 0x3E, 0xE9, 0xAE, 0x40, 0x5C, 0x6C, 0x57, 0xDD, 0x4E, 0x27, 0xC1,
+ 0x0A, 0x69, 0x57, 0xBB, 0x1A, 0x86, 0x4E, 0x6D, 0xD0, 0xA9, 0x86, 0xA1, 0x5B, 0x1B, 0x74, 0xAB,
+ 0x61, 0xE8, 0x81, 0x1C, 0x0E, 0x7A, 0xD5, 0x70, 0xF4, 0x6B, 0x83, 0x7E, 0x35, 0x0C, 0x47, 0x20,
+ 0xCB, 0xAA, 0x54, 0x40, 0xE6, 0x72, 0x5C, 0x00, 0x43, 0xFE, 0x26, 0x47, 0xD6, 0xAA, 0xBA, 0xF3,
+ 0xCC, 0x97, 0x56, 0x69, 0xE7, 0xE1, 0xB0, 0xB5, 0xC1, 0xBB, 0xA5, 0xE5, 0x9B, 0x0B, 0xCB, 0x84,
+ 0x69, 0x7B, 0xA3, 0xAB, 0x35, 0xB5, 0x76, 0xAF, 0xBD, 0xB7, 0xC3, 0x0C, 0x33, 0xA0, 0x43, 0xED,
+ 0x1D, 0x52, 0x9D, 0x20, 0x09, 0xD3, 0x8F, 0xC5, 0x77, 0x0A, 0x3C, 0x88, 0x70, 0xE6, 0x3A, 0x8E,
+ 0x5F, 0x5A, 0x1D, 0x01, 0x30, 0xA4, 0xF9, 0x70, 0x54, 0x3A, 0x9A, 0x45, 0x68, 0xCA, 0x18, 0x7A,
+ 0xCA, 0x26, 0xE7, 0x8A, 0xE1, 0x4C, 0x2F, 0x16, 0xCE, 0x76, 0xE7, 0x3E, 0xDE, 0x6D, 0xF9, 0x94,
+ 0x81, 0xC3, 0xC2, 0x6C, 0xF5, 0x16, 0x66, 0x88, 0x73, 0x54, 0x98, 0xD6, 0x68, 0x81, 0xFB, 0xE8,
+ 0xBD, 0x5D, 0x7A, 0x4F, 0x40, 0x46, 0xC1, 0x37, 0xB0, 0x89, 0xDE, 0xF3, 0x30, 0x9C, 0x87, 0xEA,
+ 0x83, 0x58, 0xE3, 0x5E, 0x79, 0x8D, 0x04, 0xD0, 0x90, 0x0F, 0xE0, 0x7B, 0xF0, 0x2A, 0xF9, 0x91,
+ 0x80, 0xAC, 0x9C, 0x23, 0x55, 0x77, 0x1A, 0xA9, 0x2B, 0x56, 0xCC, 0x0B, 0xDA, 0x95, 0x47, 0xF5,
+ 0xCE, 0x43, 0x1C, 0x0B, 0x17, 0xF8, 0xEA, 0x44, 0xA2, 0xB6, 0xBD, 0x92, 0x22, 0x13, 0x93, 0x48,
+ 0x06, 0xCB, 0x8D, 0x86, 0x6D, 0x2B, 0xDF, 0x69, 0xE6, 0x1F, 0x10, 0xB0, 0xBE, 0xDA, 0x54, 0x7C,
+ 0x15, 0x5E, 0x60, 0x4E, 0x36, 0x11, 0x08, 0x79, 0x7D, 0x70, 0xB3, 0x00, 0x24, 0xAC, 0xF4, 0x34,
+ 0x80, 0x03, 0x73, 0x15, 0x86, 0x91, 0xB8, 0xA3, 0x17, 0x88, 0xC4, 0xE2, 0x8C, 0x20, 0xC4, 0x57,
+ 0x72, 0xB4, 0xBB, 0xF7, 0xF4, 0xBF, 0x2B, 0x0F, 0x1E, 0x15, 0x5D, 0xBF, 0x60, 0x1A, 0x2C, 0xC1,
+ 0x80, 0xEF, 0x0B, 0xD4, 0x8B, 0x24, 0xF4, 0x9B, 0x0B, 0x1F, 0xC2, 0x5A, 0x21, 0x35, 0x38, 0x3A,
+ 0x74, 0x13, 0x9F, 0xCD, 0xF3, 0x0B, 0x2C, 0xFF, 0xA5, 0x36, 0xD9, 0x4C, 0x75, 0x67, 0x65, 0xDA,
+ 0xC5, 0xAB, 0x3B, 0x3F, 0x99, 0xF6, 0xD8, 0x59, 0x15, 0x2B, 0xF0, 0x88, 0x1D, 0xFD, 0x05, 0x0A,
+ 0x3C, 0x34, 0x3D, 0xC0, 0x15, 0xE2, 0xA6, 0x4B, 0xD4, 0xDE, 0x67, 0x93, 0x14, 0x32, 0x83, 0xBE,
+ 0xC1, 0x05, 0x56, 0x40, 0xE1, 0x69, 0x74, 0xBD, 0x79, 0xDB, 0x99, 0xDA, 0xCF, 0xA7, 0x62, 0xAE,
+ 0xC6, 0x29, 0x50, 0xCB, 0xD5, 0xBA, 0x92, 0x72, 0xF3, 0xBD, 0x57, 0xD0, 0x7F, 0x59, 0xE7, 0xE7,
+ 0xF6, 0xDE, 0xF9, 0xD9, 0xC4, 0x00, 0x44, 0xEC, 0x71, 0x69, 0xCB, 0x42, 0xD8, 0xC8, 0xAE, 0x2E,
+ 0xED, 0xF1, 0x4E, 0xAD, 0x8A, 0xF5, 0x5E, 0x5A, 0x07, 0xED, 0x7E, 0xBB, 0xF3, 0xB0, 0xCC, 0x0A,
+ 0x19, 0xAA, 0x60, 0x54, 0xFA, 0x49, 0xEF, 0x01, 0x4D, 0x69, 0x9C, 0xC9, 0x84, 0xAD, 0x6B, 0x96,
+ 0x33, 0x2D, 0x0E, 0x7E, 0x43, 0x9F, 0xD2, 0xF5, 0xC8, 0x6E, 0xE3, 0x55, 0xD8, 0x79, 0xC1, 0xD2,
+ 0x8C, 0xA0, 0x8B, 0xFE, 0xC3, 0x32, 0x2D, 0xCE, 0x91, 0xAA, 0x75, 0x49, 0x38, 0xEA, 0x3E, 0x1C,
+ 0xD3, 0xF2, 0x1D, 0xDF, 0xB0, 0x4A, 0x5B, 0x16, 0x83, 0x06, 0xC3, 0xFA, 0x88, 0x07, 0xDA, 0x15,
+ 0xF0, 0xB9, 0x53, 0xE3, 0x0A, 0xFA, 0x2F, 0x1F, 0xB8, 0x8E, 0xBB, 0x1B, 0x52, 0x46, 0x05, 0x96,
+ 0x7E, 0x59, 0x67, 0xA9, 0x52, 0xE8, 0xEA, 0x6F, 0x68, 0x91, 0x7C, 0x23, 0xA1, 0x6B, 0xE9, 0xE3,
+ 0xD5, 0xD2, 0xA1, 0x8B, 0x81, 0x63, 0xE8, 0xA2, 0x47, 0xBB, 0x37, 0xB1, 0x90, 0x82, 0xF2, 0x36,
+ 0xD6, 0x3B, 0xD9, 0xE4, 0x16, 0x98, 0x4D, 0x44, 0x30, 0xC6, 0x53, 0x25, 0x23, 0xDB, 0x94, 0xDF,
+ 0x54, 0x36, 0xB2, 0x91, 0xA1, 0xFC, 0x8E, 0x37, 0x8A, 0x4C, 0xCC, 0xE6, 0x19, 0x2C, 0xCC, 0xE1,
+ 0xD8, 0xC1, 0x4E, 0x2B, 0x36, 0x41, 0xE7, 0x1B, 0x5F, 0xA8, 0x0D, 0xB9, 0x7A, 0x48, 0xF5, 0x99,
+ 0xA1, 0x69, 0xDB, 0x65, 0xD5, 0xC4, 0x61, 0x6B, 0x83, 0x97, 0xEC, 0x60, 0xB7, 0x4B, 0xEA, 0xBC,
+ 0xF3, 0xCD, 0xAF, 0xA7, 0x07, 0x5C, 0xED, 0x5A, 0x4D, 0x89, 0x22, 0x86, 0x1B, 0x7E, 0xF7, 0xA3,
+ 0xC6, 0xF7, 0xA8, 0x46, 0xDF, 0x01, 0x79, 0x38, 0x25, 0x8D, 0xA9, 0x31, 0xC7, 0x87, 0x97, 0x8B,
+ 0x16, 0x35, 0xDE, 0x20, 0x58, 0xB1, 0x9A, 0x46, 0xBC, 0xA7, 0x87, 0x5D, 0xD5, 0x18, 0xC4, 0xDF,
+ 0x5A, 0x09, 0x84, 0x37, 0x87, 0xA6, 0xE1, 0xE1, 0x83, 0xFE, 0x70, 0xAC, 0xBD, 0x84, 0x63, 0xED,
+ 0xBD, 0xB5, 0x0C, 0x5F, 0xBB, 0x2B, 0x73, 0x08, 0x71, 0x3F, 0x5B, 0x84, 0x21, 0xED, 0xA9, 0x05,
+ 0xBA, 0x8D, 0x8F, 0x3F, 0xE0, 0x05, 0xC7, 0xB8, 0x7B, 0xAD, 0xD7, 0x3D, 0x6E, 0xD5, 0x34, 0x96,
+ 0x15, 0xF3, 0xC7, 0xFA, 0xBD, 0x2F, 0x74, 0x5B, 0x9B, 0x1E, 0x12, 0x28, 0x73, 0x00, 0x91, 0xDE,
+ 0x90, 0x40, 0x6A, 0xBF, 0x55, 0x76, 0x9B, 0xAD, 0x4B, 0x44, 0x0F, 0xC4, 0xD1, 0x92, 0x1A, 0x42,
+ 0xEC, 0x3D, 0x9B, 0xAC, 0x7D, 0xFC, 0x05, 0x05, 0xED, 0x9E, 0xEC, 0xFD, 0xA7, 0x72, 0x41, 0xE8,
+ 0x52, 0x41, 0xE0, 0xEE, 0xBE, 0xCD, 0xF2, 0xD4, 0x0E, 0x78, 0xD2, 0xD5, 0x78, 0x6A, 0x57, 0xE0,
+ 0xA9, 0xBD, 0x23, 0x9E, 0x3A, 0x01, 0x4F, 0x6D, 0x35, 0x9E, 0x3A, 0x15, 0x78, 0xEA, 0xEC, 0x88,
+ 0xA7, 0x6E, 0xC0, 0x53, 0x47, 0x8D, 0xA7, 0x6E, 0x05, 0x9E, 0xBA, 0x3B, 0xE2, 0xA9, 0x17, 0xF0,
+ 0xD4, 0x55, 0xE3, 0xA9, 0x57, 0x81, 0xA7, 0xDE, 0x8E, 0x78, 0xEA, 0x07, 0x3C, 0xF5, 0xD4, 0x78,
+ 0xEA, 0x57, 0xE0, 0xA9, 0xBF, 0x23, 0x9E, 0x8E, 0x02, 0x9E, 0xFA, 0x6A, 0x3C, 0x1D, 0x55, 0xE0,
+ 0xE9, 0x68, 0x47, 0x3C, 0x1D, 0x07, 0x3C, 0x1D, 0xA9, 0xF1, 0x74, 0x5C, 0x81, 0xA7, 0xE3, 0x1D,
+ 0xF1, 0x74, 0x12, 0xF0, 0x74, 0xAC, 0xC6, 0xD3, 0x49, 0x05, 0x9E, 0x4E, 0x76, 0xC4, 0x13, 0xEE,
+ 0xA6, 0x62, 0x4C, 0x9D, 0x28, 0x0E, 0xBA, 0xAD, 0x0A, 0x5C, 0x19, 0xBB, 0xE2, 0x2A, 0x4C, 0x25,
+ 0x74, 0xD5, 0x5C, 0xA2, 0x4A, 0x32, 0x31, 0xDC, 0x15, 0x5B, 0x51, 0x36, 0xA1, 0x98, 0x4E, 0xE8,
+ 0x55, 0xF2, 0x89, 0xD1, 0xAE, 0xD8, 0x0A, 0x13, 0x0A, 0x5D, 0x31, 0xA3, 0xD0, 0xAB, 0xA4, 0x14,
+ 0xE3, 0x5D, 0xB1, 0x15, 0xE6, 0x14, 0xBA, 0x62, 0x52, 0xA1, 0x57, 0xC9, 0x2A, 0xC8, 0xAE, 0xD8,
+ 0x0A, 0xD3, 0x0A, 0x5D, 0x31, 0xAF, 0xD0, 0xAB, 0x24, 0x16, 0x93, 0x5D, 0xB1, 0x15, 0x66, 0x16,
+ 0xBA, 0x62, 0x6A, 0xA1, 0x57, 0xC8, 0x2D, 0x4E, 0xE4, 0x13, 0xB1, 0x8D, 0xB2, 0x45, 0x7C, 0x3E,
+ 0x45, 0x8E, 0x26, 0x6D, 0x4A, 0x0F, 0x1C, 0x71, 0x20, 0x7C, 0x22, 0x8E, 0x09, 0xE4, 0xC2, 0xB1,
+ 0x27, 0xE6, 0x34, 0x2C, 0x32, 0x3C, 0x98, 0x67, 0x63, 0x3C, 0xE1, 0x85, 0xBF, 0xCA, 0x85, 0x86,
+ 0xAB, 0x57, 0x97, 0xC5, 0xCA, 0x0C, 0x62, 0x2F, 0x7F, 0xA1, 0x22, 0x03, 0x90, 0xDD, 0x16, 0xBF,
+ 0x3E, 0xA0, 0x54, 0x57, 0xA0, 0x40, 0x45, 0x2A, 0x0A, 0x3D, 0xB1, 0xA2, 0xD0, 0x57, 0xAE, 0x28,
+ 0x30, 0xE2, 0xB6, 0x53, 0x4B, 0x00, 0xDC, 0x1D, 0xF6, 0xC9, 0x04, 0x75, 0xA6, 0x3B, 0xE5, 0x99,
+ 0xEE, 0x15, 0x61, 0xBA, 0x53, 0x86, 0xE9, 0x12, 0xCF, 0xB4, 0x2A, 0xCA, 0x09, 0xE8, 0x7D, 0x6D,
+ 0xDE, 0x90, 0xB1, 0xF6, 0x8B, 0xBA, 0xA8, 0xF4, 0xF2, 0xA2, 0x3A, 0x2A, 0x22, 0x2A, 0x7D, 0x8B,
+ 0xF6, 0xD1, 0x0B, 0xF8, 0xFE, 0x51, 0x9D, 0xEF, 0x5E, 0x79, 0xBE, 0x3B, 0x45, 0xF8, 0xEE, 0x6D,
+ 0x91, 0xEF, 0x6E, 0xC0, 0xF7, 0x27, 0x75, 0xBE, 0xBB, 0xE5, 0xF9, 0xEE, 0x16, 0xE1, 0xBB, 0xBB,
+ 0x45, 0xBE, 0xDB, 0x10, 0x6C, 0x7E, 0xFC, 0xA4, 0x7D, 0x9C, 0xB9, 0xC4, 0x9B, 0xE5, 0x57, 0xE2,
+ 0x18, 0x44, 0xD9, 0xB1, 0xBD, 0xB7, 0x83, 0xB9, 0x1B, 0x52, 0xD8, 0x11, 0x79, 0xCA, 0xCD, 0x9B,
+ 0x19, 0x84, 0xCA, 0x37, 0x89, 0xE4, 0x3C, 0xC9, 0x67, 0x6E, 0xBA, 0x2A, 0x53, 0xDB, 0x8B, 0x61,
+ 0xC7, 0xB5, 0xC1, 0xDB, 0x65, 0x81, 0xF1, 0xED, 0xB8, 0xBC, 0x3D, 0xAB, 0x57, 0xCC, 0x19, 0x5D,
+ 0x5B, 0xB3, 0xE7, 0x13, 0xCA, 0x33, 0xE4, 0x65, 0x9E, 0x82, 0xDA, 0xCB, 0x57, 0x21, 0x7A, 0x3B,
+ 0xA8, 0x92, 0x63, 0xA4, 0x3F, 0x62, 0xEC, 0xFC, 0x88, 0x0C, 0x69, 0x90, 0xB1, 0x14, 0x18, 0x8C,
+ 0x8E, 0x0A, 0x6A, 0xF3, 0xB8, 0x64, 0x74, 0x42, 0x1A, 0xB7, 0xA6, 0x4E, 0x9C, 0x7A, 0xA0, 0x00,
+ 0x3E, 0x95, 0x10, 0x40, 0xBF, 0xBC, 0x00, 0x0A, 0x65, 0x2E, 0x48, 0xE3, 0xF6, 0x04, 0xD0, 0x62,
+ 0x02, 0xB8, 0x8A, 0x5E, 0x7A, 0x9D, 0x61, 0xD0, 0x15, 0x2A, 0x50, 0xBD, 0x1D, 0xAC, 0x91, 0x60,
+ 0xA4, 0xD5, 0x03, 0x8B, 0x06, 0x8E, 0x8A, 0x29, 0xB4, 0x5D, 0x34, 0xBF, 0x92, 0x17, 0x3F, 0x15,
+ 0xF2, 0xEF, 0x6D, 0x26, 0x58, 0xED, 0x56, 0x60, 0xD1, 0xC5, 0x05, 0xD0, 0x2A, 0x2F, 0x00, 0xBD,
+ 0x90, 0x00, 0x5A, 0x0F, 0x2B, 0x19, 0xEF, 0xAF, 0x7F, 0xA7, 0x38, 0x5F, 0x5A, 0x45, 0xDD, 0x5F,
+ 0x18, 0xCD, 0xDA, 0x45, 0x84, 0xB5, 0x55, 0xEF, 0xEF, 0x44, 0x9C, 0x6B, 0xBF, 0x68, 0xF1, 0xAD,
+ 0xAF, 0x59, 0x71, 0xA0, 0x7C, 0x11, 0xB0, 0xB7, 0x83, 0xF5, 0x2A, 0xA4, 0xF0, 0x44, 0xC2, 0x59,
+ 0xC1, 0x00, 0x7F, 0x52, 0xDE, 0x1D, 0x0A, 0x69, 0x18, 0x69, 0xDD, 0x9E, 0x8A, 0x7B, 0x31, 0x41,
+ 0xB0, 0x6F, 0xA4, 0xAB, 0xA8, 0xB8, 0x7C, 0xE5, 0xB0, 0xB7, 0x83, 0xA5, 0x2E, 0xA4, 0xF0, 0x58,
+ 0xC2, 0x59, 0x41, 0x15, 0x17, 0x4D, 0x49, 0x8F, 0x4B, 0x4E, 0x2D, 0xF5, 0x6D, 0xE6, 0xA4, 0x58,
+ 0xED, 0x16, 0x04, 0x21, 0x7E, 0xC0, 0x22, 0x4B, 0xC1, 0xE5, 0x2B, 0xDE, 0xBD, 0x8A, 0xEB, 0xB3,
+ 0xDB, 0x8B, 0xE4, 0x47, 0xB2, 0xAF, 0x9B, 0xE7, 0xDB, 0x41, 0xD1, 0x5C, 0xB6, 0x55, 0x72, 0xE0,
+ 0xDB, 0x6A, 0x2A, 0x0B, 0xBD, 0x43, 0xD6, 0xB3, 0xCE, 0x7D, 0x86, 0x09, 0x94, 0x5F, 0x79, 0xEB,
+ 0xED, 0x60, 0x7B, 0x08, 0x52, 0xD8, 0xAE, 0x0D, 0x3E, 0x15, 0x64, 0xAA, 0x4A, 0xFD, 0xA0, 0xF4,
+ 0xFE, 0x90, 0xDD, 0x95, 0xDE, 0x47, 0xF3, 0x9B, 0xE2, 0xA5, 0xF7, 0x8B, 0x77, 0x3F, 0x17, 0x2B,
+ 0xBD, 0x8B, 0xBD, 0xEC, 0xAE, 0xF4, 0x5E, 0xCE, 0x66, 0x0A, 0x6D, 0x94, 0x05, 0xC6, 0xF0, 0x55,
+ 0x48, 0x23, 0xD3, 0xA3, 0x5D, 0x82, 0x60, 0xB4, 0xF7, 0xC1, 0x69, 0x28, 0x22, 0xE1, 0x19, 0xE5,
+ 0x78, 0xFB, 0x2C, 0xEB, 0xE9, 0x64, 0x84, 0x85, 0x52, 0xCF, 0xF0, 0xE2, 0x0B, 0x75, 0xFA, 0xFC,
+ 0x1B, 0x5F, 0x15, 0x9E, 0x05, 0x4E, 0x7B, 0xD7, 0xC8, 0xC1, 0x51, 0x41, 0xDC, 0x5B, 0x7F, 0xC5,
+ 0xC0, 0x20, 0xA1, 0x28, 0x9D, 0xEA, 0x47, 0xC7, 0x73, 0xE5, 0x3A, 0x39, 0x05, 0x2B, 0x12, 0xCD,
+ 0x3B, 0x62, 0xA9, 0x45, 0x3D, 0x9A, 0x33, 0xF2, 0xB6, 0x13, 0xCD, 0x11, 0x77, 0x8C, 0xF7, 0x02,
+ 0x59, 0x0D, 0x83, 0x2D, 0x26, 0x00, 0xF9, 0x26, 0x0A, 0x05, 0x01, 0xA4, 0x49, 0x60, 0x23, 0x22,
+ 0x68, 0x53, 0x09, 0xB4, 0x13, 0xDA, 0x4F, 0x09, 0xFC, 0xB4, 0x7D, 0xD9, 0xB8, 0xDF, 0xD9, 0x41,
+ 0x6D, 0x02, 0xC5, 0x15, 0xE3, 0xA8, 0xA0, 0x4E, 0x8B, 0x2D, 0x0E, 0xC6, 0x74, 0x5A, 0xCC, 0xA8,
+ 0xB7, 0xB6, 0x3A, 0x08, 0xC8, 0x3B, 0x54, 0x00, 0x1D, 0x65, 0x95, 0x96, 0x9F, 0x66, 0x76, 0x76,
+ 0x90, 0x9F, 0xA0, 0xB4, 0x62, 0x1C, 0x15, 0x54, 0x69, 0xB1, 0xA5, 0xCF, 0x98, 0x4A, 0xD5, 0xE7,
+ 0x97, 0x9C, 0xC8, 0xAD, 0xA9, 0xB4, 0x4B, 0x05, 0xD0, 0x55, 0x56, 0x69, 0xF9, 0x59, 0x47, 0x67,
+ 0x07, 0xBB, 0x77, 0x51, 0x5A, 0x31, 0x8E, 0x0A, 0xAA, 0xB4, 0xD8, 0x92, 0x5D, 0x4C, 0xA5, 0xEA,
+ 0xF3, 0x49, 0x4E, 0xE4, 0xD6, 0x54, 0xDA, 0xA3, 0x02, 0xE8, 0x29, 0xAB, 0xB4, 0x7C, 0xA5, 0xA0,
+ 0xB3, 0x83, 0x62, 0x10, 0x4A, 0x2B, 0xC6, 0x51, 0x41, 0x95, 0x16, 0x5B, 0x7D, 0x8E, 0xA9, 0x54,
+ 0x7D, 0x9D, 0x83, 0x13, 0xB9, 0x35, 0x95, 0xF6, 0xA9, 0x00, 0xFA, 0xCA, 0x2A, 0x2D, 0xBF, 0xBF,
+ 0xAA, 0xB3, 0x83, 0xBD, 0xDB, 0x28, 0xAD, 0x18, 0x47, 0x05, 0x55, 0x5A, 0xAC, 0x74, 0x1B, 0x53,
+ 0xA9, 0xFA, 0xCA, 0x0D, 0x27, 0x72, 0x6B, 0x2A, 0x3D, 0xA2, 0x02, 0x38, 0x52, 0x56, 0x69, 0xF9,
+ 0xAD, 0xEB, 0x9D, 0x1D, 0xD4, 0xF3, 0x50, 0x5A, 0x31, 0x8E, 0x0A, 0xAA, 0xB4, 0x58, 0x05, 0x27,
+ 0xA6, 0x52, 0xF5, 0xBD, 0x53, 0x9C, 0xC8, 0xAD, 0xA9, 0xF4, 0x98, 0x0A, 0xE0, 0x58, 0x59, 0xA5,
+ 0xE5, 0x77, 0xEE, 0x77, 0x76, 0xB0, 0x73, 0x1F, 0xA5, 0x15, 0xE3, 0xA8, 0xA0, 0x4A, 0x8B, 0xD5,
+ 0x66, 0x63, 0x2A, 0x55, 0xDF, 0xEE, 0xC4, 0x89, 0xDC, 0x9A, 0x4A, 0x4F, 0xA8, 0x00, 0x4E, 0x94,
+ 0x55, 0x5A, 0x7E, 0xCB, 0x40, 0x67, 0x07, 0x9B, 0x5F, 0x50, 0x5A, 0x2D, 0x91, 0xA3, 0x82, 0x2A,
+ 0x2D, 0xB6, 0xC0, 0xD8, 0x49, 0xD9, 0xFA, 0xA2, 0xA0, 0xD2, 0xB4, 0x05, 0xC6, 0x07, 0x50, 0xBF,
+ 0x33, 0x56, 0xC3, 0x12, 0x1F, 0xFC, 0x79, 0xF1, 0xD3, 0xCB, 0xF4, 0xC2, 0x7E, 0x6A, 0x15, 0x2F,
+ 0xD6, 0xD7, 0x43, 0x2F, 0xE3, 0x89, 0xF2, 0x42, 0xC2, 0x41, 0xCB, 0xEC, 0x25, 0x91, 0xDA, 0x1A,
+ 0xF3, 0xD9, 0x96, 0xC6, 0x80, 0x0B, 0x58, 0x5A, 0xA7, 0xDB, 0x92, 0x27, 0x2D, 0x39, 0x96, 0xC6,
+ 0xA9, 0xDC, 0x4E, 0xF0, 0x40, 0xE4, 0x30, 0x17, 0x47, 0xDE, 0x3F, 0x28, 0xAD, 0xE9, 0x30, 0x80,
+ 0x78, 0xF8, 0xE8, 0xB6, 0x4E, 0x14, 0xE3, 0x07, 0xC8, 0x20, 0x6D, 0x63, 0xFC, 0x06, 0x03, 0x08,
+ 0xD2, 0xD8, 0x61, 0x4C, 0xBD, 0x51, 0x66, 0x2A, 0x59, 0x05, 0x28, 0xC4, 0x54, 0x5A, 0x65, 0x67,
+ 0xC3, 0x4C, 0x75, 0x19, 0x53, 0x19, 0x4E, 0x9A, 0x60, 0x2A, 0x39, 0x0F, 0x2E, 0xC4, 0x54, 0xDA,
+ 0x44, 0x38, 0x62, 0xEA, 0x21, 0x04, 0x3A, 0x32, 0x32, 0xA6, 0xA3, 0x12, 0xA1, 0xEE, 0xF2, 0xE2,
+ 0xF0, 0xC5, 0x9B, 0x0B, 0x8D, 0x2E, 0x69, 0x3A, 0x56, 0xC1, 0x88, 0x17, 0xEF, 0xF4, 0x2F, 0x15,
+ 0xF3, 0x28, 0xE9, 0x42, 0xD4, 0x7B, 0x73, 0xA1, 0x1A, 0xF0, 0x38, 0x64, 0x91, 0x90, 0xD7, 0x6B,
+ 0x75, 0xCA, 0x54, 0x08, 0x43, 0x22, 0xB7, 0x14, 0xF4, 0x28, 0xFA, 0x76, 0x24, 0x83, 0xCB, 0x62,
+ 0x32, 0x28, 0x54, 0x25, 0x8D, 0xCB, 0xA0, 0x40, 0xD8, 0x0F, 0x88, 0xDC, 0xA6, 0x0C, 0x30, 0x4A,
+ 0x5E, 0x5E, 0x68, 0xEF, 0xFF, 0xA9, 0x5D, 0xDE, 0x2C, 0x1C, 0x6F, 0xE9, 0x92, 0xDC, 0xA8, 0xC2,
+ 0xE1, 0xE2, 0x71, 0xA5, 0xDF, 0xEB, 0x75, 0x54, 0x03, 0x4B, 0x2F, 0x7D, 0x08, 0x98, 0xB4, 0x36,
+ 0x18, 0x2F, 0x29, 0xA1, 0xDD, 0x90, 0xC1, 0x0F, 0x04, 0x34, 0xAD, 0x14, 0x37, 0x39, 0x60, 0x9C,
+ 0x43, 0xBD, 0x85, 0xDB, 0xAB, 0x15, 0x19, 0x94, 0x67, 0x94, 0x9D, 0x8D, 0x0E, 0x07, 0x94, 0xCA,
+ 0x5E, 0xC8, 0xDE, 0xA7, 0x8F, 0x57, 0x6A, 0x8C, 0x25, 0xEB, 0x68, 0xC5, 0x54, 0x97, 0xF6, 0xC8,
+ 0x68, 0xC1, 0x41, 0x41, 0xDE, 0xE8, 0xEC, 0x10, 0x62, 0xEC, 0xBA, 0x6C, 0x52, 0x44, 0x76, 0x36,
+ 0x31, 0xA7, 0x60, 0xB0, 0x72, 0x59, 0x52, 0x19, 0xB2, 0xB7, 0x9A, 0xE2, 0x17, 0x48, 0x9B, 0x23,
+ 0x08, 0xF3, 0xA0, 0x7B, 0xF4, 0xAE, 0x40, 0xB2, 0x73, 0x63, 0x4A, 0xA2, 0xEB, 0x1A, 0x0B, 0xE2,
+ 0x59, 0xC1, 0xD9, 0x60, 0x08, 0x8D, 0x6B, 0xC2, 0x3F, 0x97, 0xAA, 0xCD, 0x5C, 0x32, 0x39, 0xAF,
+ 0x7D, 0x13, 0xE2, 0xE4, 0x8F, 0xDF, 0x61, 0x93, 0x9A, 0x36, 0x76, 0x56, 0xB6, 0xE5, 0x18, 0x18,
+ 0xF8, 0x8D, 0x85, 0x0F, 0x94, 0x1E, 0xFC, 0xB1, 0xC0, 0x37, 0x5C, 0x19, 0xF8, 0xB4, 0x96, 0x91,
+ 0xD1, 0x8F, 0xA0, 0xFE, 0x91, 0xE5, 0x78, 0xC1, 0xB4, 0x0D, 0x0F, 0xC3, 0xCF, 0xAB, 0xFE, 0xCF,
+ 0x7F, 0xE7, 0x6D, 0x15, 0x30, 0xE7, 0x53, 0x41, 0x00, 0x35, 0xCD, 0x73, 0x47, 0xE7, 0x35, 0xA0,
+ 0xD4, 0x75, 0x3C, 0xCF, 0x71, 0xCD, 0xA9, 0x99, 0x32, 0x36, 0xA7, 0x49, 0xFB, 0x50, 0x26, 0xEE,
+ 0x44, 0x63, 0xC9, 0xB0, 0x7F, 0xE6, 0x8D, 0x5C, 0x73, 0xE1, 0x0F, 0x1E, 0x8D, 0x9D, 0xD1, 0x72,
+ 0x4E, 0x6C, 0xFF, 0xC0, 0x18, 0x8F, 0x2F, 0xAF, 0xE1, 0xE0, 0x3B, 0xFC, 0x16, 0x1F, 0x48, 0xBE,
+ 0x51, 0x7F, 0xF5, 0xAF, 0x77, 0x38, 0x0C, 0xE3, 0x35, 0x90, 0x17, 0x19, 0xD7, 0xF7, 0xB5, 0xC9,
+ 0xD2, 0x66, 0x23, 0x61, 0x83, 0x60, 0xDB, 0x3D, 0xED, 0x2B, 0x60, 0xBC, 0x36, 0x5C, 0x6D, 0x68,
+ 0x78, 0xE4, 0xAD, 0xE3, 0xF9, 0xDA, 0xB9, 0x16, 0x62, 0xB4, 0x9C, 0x11, 0xDD, 0xB7, 0x71, 0xC0,
+ 0xF8, 0xE2, 0x2D, 0x19, 0xE3, 0x3F, 0xBA, 0x16, 0x34, 0x0D, 0xA1, 0x9E, 0x6A, 0xF5, 0xD3, 0x63,
+ 0xBD, 0x8E, 0xF6, 0x17, 0x76, 0x31, 0x21, 0x10, 0xE6, 0xA1, 0x5D, 0x63, 0xE9, 0x5A, 0xFB, 0xDA,
+ 0x68, 0xB8, 0xF7, 0x95, 0x52, 0x4F, 0x2F, 0xE3, 0xB5, 0x3D, 0xCE, 0xCC, 0x81, 0x3F, 0x23, 0x76,
+ 0x23, 0xA2, 0xCC, 0x25, 0xDE, 0xC2, 0xB1, 0x3D, 0xC2, 0x88, 0x63, 0x3F, 0x73, 0x12, 0x5D, 0x3F,
+ 0xF0, 0x7C, 0xC3, 0x5F, 0x7A, 0xDA, 0xE3, 0xF3, 0x73, 0xAD, 0xDD, 0x6A, 0x89, 0xCD, 0x34, 0xE8,
+ 0x26, 0xD9, 0x6E, 0x5F, 0x4B, 0x5C, 0xF8, 0x48, 0x6E, 0xFC, 0xBD, 0x67, 0x21, 0xCC, 0x9D, 0x46,
+ 0x2C, 0x8F, 0xC4, 0x90, 0x84, 0x00, 0xF8, 0xDE, 0xB8, 0xC6, 0x5E, 0x9C, 0xC0, 0xC6, 0xD8, 0xF0,
+ 0x8D, 0xBD, 0xAF, 0x31, 0x7D, 0x41, 0xAF, 0x40, 0xC9, 0xBE, 0x46, 0x6F, 0x3D, 0x13, 0x6E, 0xDD,
+ 0xED, 0x1D, 0x80, 0x0C, 0x81, 0xDF, 0x10, 0x9A, 0xB8, 0x6E, 0x9C, 0x62, 0x0A, 0xDD, 0xD4, 0xF7,
+ 0x35, 0xBC, 0x13, 0x87, 0x15, 0x88, 0x7C, 0x14, 0x5C, 0x0B, 0x84, 0x96, 0x8D, 0x56, 0x82, 0x92,
+ 0xA1, 0xBB, 0x8B, 0xA9, 0x08, 0x02, 0xCE, 0x07, 0x32, 0x05, 0x89, 0x4D, 0xF7, 0x79, 0xFC, 0xD9,
+ 0xA7, 0xC1, 0x67, 0x9F, 0xC5, 0x2D, 0x41, 0x6B, 0x87, 0x87, 0xE0, 0xD2, 0x9E, 0x63, 0x11, 0xB0,
+ 0x8A, 0x69, 0xA3, 0xCE, 0xBF, 0xF5, 0x0A, 0x16, 0x55, 0x6F, 0xDD, 0xD4, 0x9F, 0x02, 0x82, 0x03,
+ 0xDF, 0xB9, 0xF2, 0x5D, 0xD3, 0x9E, 0x36, 0xF4, 0xFE, 0x5E, 0x84, 0x8D, 0xDE, 0x46, 0x94, 0x89,
+ 0xFB, 0xF4, 0x3A, 0xED, 0x24, 0x79, 0xA3, 0xC1, 0xAF, 0x3F, 0xAD, 0xEF, 0xD5, 0x39, 0xF1, 0xF4,
+ 0x1C, 0xCC, 0xAD, 0xC1, 0x0E, 0x9E, 0x50, 0x1A, 0xF7, 0xB4, 0xB3, 0x33, 0xDE, 0x0D, 0x6B, 0x85,
+ 0x17, 0xA1, 0x11, 0xFD, 0x93, 0xB8, 0x15, 0x9A, 0xE2, 0xEF, 0xFF, 0xF8, 0x1A, 0xD8, 0xEC, 0xDD,
+ 0x21, 0x50, 0xFD, 0x1C, 0x43, 0xF0, 0x3F, 0xBE, 0xC2, 0xFF, 0x77, 0x4F, 0x68, 0xD4, 0xFD, 0xC7,
+ 0x57, 0xFC, 0x73, 0xF7, 0x04, 0x7A, 0x82, 0x63, 0xDA, 0xDF, 0xDD, 0xEF, 0x54, 0x0E, 0xEB, 0xD2,
+ 0x9B, 0xA6, 0x4A, 0x2F, 0x14, 0x5B, 0x61, 0x9A, 0xA6, 0x19, 0x44, 0xFD, 0x1E, 0xF9, 0x6F, 0x63,
+ 0xE4, 0x8C, 0x41, 0x3D, 0x3E, 0x58, 0x72, 0xA0, 0x74, 0x0B, 0x54, 0x12, 0x08, 0xAA, 0x15, 0x28,
+ 0xDD, 0x9C, 0xD0, 0x96, 0x1A, 0x77, 0x95, 0xC8, 0x40, 0x82, 0x96, 0x0B, 0xC3, 0xF5, 0xC8, 0xB7,
+ 0xB6, 0xDF, 0xF0, 0x63, 0x4E, 0x91, 0x22, 0xF1, 0xC1, 0x20, 0xC6, 0x02, 0xFE, 0x00, 0x0E, 0xDA,
+ 0xD5, 0xB9, 0xD2, 0x42, 0x63, 0xE3, 0x7F, 0x13, 0x66, 0xF3, 0xA6, 0x90, 0xD9, 0x34, 0xA8, 0xD8,
+ 0xC2, 0x3E, 0xF7, 0x8A, 0x98, 0x10, 0x90, 0x25, 0x18, 0x10, 0x75, 0x88, 0x48, 0x64, 0xEC, 0x62,
+ 0x8A, 0x43, 0xFC, 0x3C, 0xB2, 0xBE, 0x34, 0x6E, 0xE0, 0xBF, 0x64, 0xCC, 0x5A, 0xD3, 0x15, 0x36,
+ 0x7A, 0x8E, 0xFF, 0x81, 0x82, 0xF0, 0x4F, 0xAA, 0xA1, 0x00, 0xD6, 0xF7, 0x96, 0xD5, 0x60, 0x1F,
+ 0x98, 0x03, 0x1B, 0x59, 0x42, 0x3C, 0xF4, 0x6E, 0x31, 0x32, 0x39, 0x8E, 0xFF, 0x79, 0x5F, 0x5B,
+ 0xB8, 0x40, 0x18, 0xFD, 0x96, 0x0A, 0x1C, 0x03, 0x22, 0x62, 0xB3, 0xBF, 0xB9, 0x14, 0x2C, 0x2C,
+ 0xEB, 0x39, 0xC3, 0x0A, 0x24, 0xB0, 0x03, 0x30, 0x99, 0x25, 0x9A, 0x2E, 0xFC, 0x7F, 0xF7, 0x04,
+ 0x3A, 0x81, 0x43, 0xF8, 0xFF, 0xEE, 0x09, 0x76, 0x85, 0x46, 0x85, 0x3D, 0xDE, 0x3D, 0x81, 0x1E,
+ 0xE1, 0x04, 0xFE, 0x87, 0x36, 0xD8, 0x2F, 0xB6, 0xC2, 0xBF, 0x70, 0x87, 0xF6, 0x8F, 0x37, 0xE9,
+ 0x01, 0xBB, 0xC0, 0x4F, 0xB3, 0x18, 0x64, 0x6F, 0xD7, 0x6F, 0xD0, 0xB7, 0x9D, 0x7F, 0xBE, 0x01,
+ 0x76, 0xE8, 0xC1, 0x2D, 0xC4, 0x20, 0x7B, 0x8C, 0xE7, 0xF8, 0xE7, 0x36, 0x50, 0x30, 0x5E, 0xE0,
+ 0x47, 0x70, 0x8D, 0xBE, 0x11, 0x16, 0x2F, 0xB1, 0x03, 0x6C, 0x45, 0xDF, 0xDF, 0x49, 0x5B, 0xB1,
+ 0x23, 0xB8, 0xC6, 0xDF, 0xFA, 0xB8, 0xAF, 0xF1, 0xF7, 0x0A, 0xE6, 0x0A, 0x27, 0x7A, 0xEF, 0xDF,
+ 0x73, 0xEF, 0x06, 0x19, 0x64, 0xA4, 0xA1, 0x54, 0xC2, 0xB3, 0xDB, 0xBB, 0x27, 0x04, 0xEF, 0x51,
+ 0x22, 0xE1, 0xF8, 0x96, 0x1F, 0xC3, 0x75, 0xA0, 0x0F, 0xEF, 0x04, 0x04, 0xD3, 0x0B, 0xB7, 0xD1,
+ 0x05, 0x68, 0xE1, 0xE3, 0x7D, 0x4E, 0x3C, 0x9C, 0xDD, 0x86, 0x67, 0x08, 0x4D, 0x61, 0x39, 0x1B,
+ 0x70, 0x7A, 0x1B, 0x9D, 0xC2, 0x5D, 0xE4, 0x05, 0x15, 0xC0, 0x79, 0xBA, 0x7B, 0xC2, 0x79, 0x42,
+ 0x2D, 0xB2, 0xA3, 0xB8, 0xA8, 0xE1, 0x7F, 0xF4, 0x23, 0x9F, 0x07, 0xEC, 0x4F, 0x81, 0x77, 0x12,
+ 0x6B, 0x4F, 0x3B, 0x1F, 0xF0, 0xB8, 0x8F, 0x01, 0x00, 0x3C, 0x0A, 0xAE, 0x13, 0xEB, 0xC0, 0xF0,
+ 0xC1, 0x21, 0x20, 0x6F, 0x22, 0xDE, 0x01, 0x46, 0x94, 0xD0, 0xCD, 0xD7, 0x6E, 0x1D, 0xD8, 0xE0,
+ 0x16, 0x14, 0xE1, 0xDE, 0x29, 0x0F, 0x1B, 0x88, 0x88, 0x71, 0xB9, 0x86, 0x8B, 0x5D, 0x4E, 0x43,
+ 0xC7, 0xEE, 0xA6, 0x60, 0xE4, 0xA1, 0x30, 0x0E, 0x81, 0x17, 0xD3, 0xB0, 0xD1, 0x51, 0x43, 0xC0,
+ 0xD5, 0xEE, 0xF5, 0x22, 0x6C, 0x89, 0x48, 0xC7, 0xE6, 0x94, 0x28, 0x90, 0x03, 0xCC, 0xCF, 0xA3,
+ 0xA1, 0x70, 0x04, 0xE6, 0xA0, 0xD5, 0x83, 0x09, 0x65, 0xFD, 0x74, 0x2D, 0xC2, 0x01, 0x04, 0x2F,
+ 0x20, 0x68, 0xCF, 0x19, 0x8D, 0xA7, 0x51, 0xF8, 0xD4, 0xB4, 0x21, 0x24, 0x3B, 0x5F, 0x9E, 0xC5,
+ 0x90, 0xD1, 0xD4, 0x3F, 0xC4, 0xC4, 0xAE, 0x61, 0xA2, 0x90, 0xB8, 0xC4, 0xB6, 0xDB, 0x35, 0x1D,
+ 0x9B, 0xC8, 0x7B, 0x8D, 0xC5, 0x4B, 0xDE, 0x11, 0x3F, 0x1B, 0x93, 0x89, 0xB1, 0xB4, 0xFC, 0x08,
+ 0xCC, 0x25, 0x90, 0xE8, 0xDA, 0x3C, 0x6C, 0xB1, 0x24, 0x3F, 0x77, 0xE8, 0xCE, 0x18, 0x2A, 0x82,
+ 0x51, 0xE1, 0x71, 0x72, 0x54, 0x00, 0xAB, 0x74, 0xFD, 0x46, 0xFD, 0xD2, 0x75, 0x1D, 0xF7, 0xD7,
+ 0xFA, 0x53, 0x6C, 0xF4, 0xB4, 0xFE, 0xDB, 0xA9, 0x46, 0xE3, 0xE9, 0x5E, 0x3C, 0xB8, 0x0B, 0xE1,
+ 0xF3, 0xF0, 0x50, 0x7B, 0xE1, 0xFB, 0x06, 0x28, 0x00, 0x6B, 0x2C, 0x33, 0x94, 0x8F, 0x66, 0xF0,
+ 0x24, 0xD0, 0x71, 0xD1, 0x28, 0xD9, 0xF7, 0xEE, 0x41, 0x22, 0x98, 0x58, 0x7A, 0x00, 0x12, 0x24,
+ 0x99, 0x14, 0xD5, 0xC1, 0xBF, 0x97, 0xC4, 0xBD, 0xBD, 0xA2, 0x02, 0x73, 0xDC, 0x17, 0x10, 0x2A,
+ 0xEB, 0x07, 0xD1, 0x3C, 0xA9, 0xCE, 0x72, 0x9E, 0x03, 0x40, 0x75, 0x09, 0x7D, 0x80, 0x8E, 0x23,
+ 0x9B, 0x67, 0xDC, 0x84, 0x7A, 0x87, 0x71, 0xEE, 0x9C, 0x2B, 0x23, 0x99, 0x64, 0x41, 0x0B, 0xC7,
+ 0xFE, 0x42, 0x6E, 0x97, 0x0B, 0x10, 0x7F, 0x94, 0x36, 0x25, 0x12, 0x39, 0x2E, 0x1D, 0x72, 0x00,
+ 0x2D, 0x2F, 0xF8, 0xC0, 0xA9, 0x77, 0x24, 0x8D, 0x22, 0x15, 0x50, 0xEB, 0x44, 0x4F, 0x7C, 0xB6,
+ 0xD6, 0xE8, 0xEE, 0x91, 0xFC, 0x4C, 0x92, 0x72, 0x72, 0x02, 0xB9, 0xF0, 0xC0, 0xB5, 0xA9, 0x63,
+ 0x27, 0x7A, 0x48, 0xA4, 0x83, 0x90, 0x0C, 0x46, 0x91, 0x61, 0xB9, 0x80, 0xE4, 0x93, 0xC4, 0x83,
+ 0x43, 0x68, 0x0B, 0xC1, 0xCD, 0xB9, 0xE3, 0x93, 0x44, 0xC4, 0x30, 0x6D, 0xD3, 0x37, 0x0D, 0xEB,
+ 0x53, 0x64, 0x8D, 0x5B, 0x75, 0x7F, 0x89, 0x8F, 0x17, 0xF0, 0xFF, 0xB5, 0x9C, 0x4F, 0x2D, 0x4F,
+ 0x59, 0xB3, 0x90, 0x30, 0x1E, 0x44, 0x56, 0x22, 0xCA, 0x21, 0x16, 0x16, 0xF8, 0xFD, 0xA0, 0xA7,
+ 0xC7, 0x8F, 0xE9, 0xD1, 0xA3, 0x50, 0x69, 0x41, 0xF4, 0x38, 0xD7, 0xA2, 0x1B, 0x09, 0x05, 0xAF,
+ 0xE3, 0x4E, 0xE0, 0x08, 0x90, 0x0B, 0x18, 0x12, 0x81, 0x7F, 0x01, 0xE9, 0x0D, 0xDA, 0xC2, 0xFF,
+ 0x47, 0xFD, 0x07, 0x14, 0xF5, 0xB7, 0x17, 0xE2, 0x33, 0x6C, 0x3B, 0xE1, 0x01, 0x0C, 0x4E, 0x9E,
+ 0x4F, 0x3F, 0x85, 0x44, 0x5B, 0x9E, 0x24, 0x87, 0xA1, 0x3B, 0x9C, 0xEC, 0xC3, 0x64, 0xE6, 0x92,
+ 0x85, 0xE7, 0x97, 0xB7, 0xDF, 0x8E, 0x1B, 0xF5, 0xF0, 0x8D, 0x46, 0xF5, 0x3D, 0x8C, 0x4B, 0x96,
+ 0x39, 0xFA, 0x12, 0x86, 0xA5, 0xC8, 0xF2, 0x20, 0xA5, 0xC1, 0xEC, 0x1F, 0x27, 0xD6, 0xE6, 0x88,
+ 0x9B, 0xEA, 0xAB, 0x0F, 0x2F, 0xDE, 0x7D, 0x7E, 0xF1, 0xF1, 0xE3, 0x07, 0x6D, 0x09, 0x36, 0xAB,
+ 0xF7, 0x3F, 0x63, 0xDA, 0x02, 0x93, 0x00, 0xF7, 0x33, 0xD0, 0xE7, 0x7D, 0xA6, 0x48, 0x5B, 0xBF,
+ 0xFE, 0xF6, 0x6B, 0xFB, 0x37, 0x00, 0xFD, 0xFA, 0x5F, 0x76, 0x9D, 0x31, 0x82, 0xA8, 0x9E, 0x02,
+ 0x2E, 0x3C, 0xFE, 0x5A, 0x7F, 0x1A, 0x18, 0x7C, 0x23, 0x9D, 0xC2, 0xF0, 0xF5, 0xBA, 0xF5, 0x3D,
+ 0x60, 0xF5, 0x6E, 0x1F, 0x50, 0xB1, 0x74, 0x10, 0xC6, 0x9C, 0x06, 0x96, 0x2A, 0x4C, 0xE8, 0x40,
+ 0x7F, 0x06, 0x7F, 0xCE, 0x34, 0xFD, 0x08, 0xFE, 0x3E, 0x7D, 0x1A, 0x99, 0x48, 0xC9, 0xEE, 0xEA,
+ 0x4F, 0x4D, 0xDA, 0x19, 0xCC, 0x4E, 0x1A, 0xE6, 0x19, 0x48, 0xF2, 0x79, 0x7D, 0xBF, 0x7E, 0x5A,
+ 0xAF, 0xC3, 0xB5, 0xA0, 0xFB, 0xBB, 0x18, 0x3B, 0x77, 0xCF, 0x42, 0x0E, 0xD9, 0xE8, 0x0A, 0x37,
+ 0x22, 0xF1, 0x8B, 0x59, 0xDD, 0x4B, 0x56, 0xE5, 0x3A, 0x4F, 0xD7, 0x09, 0x7B, 0x9B, 0xF5, 0x94,
+ 0x0E, 0x88, 0x22, 0x4C, 0x86, 0x82, 0x58, 0x68, 0x08, 0x7D, 0x2D, 0x15, 0x35, 0x1D, 0x6E, 0xC7,
+ 0x63, 0x17, 0xB4, 0x4D, 0xAD, 0x65, 0x6F, 0xCD, 0x85, 0xD5, 0x70, 0x60, 0x63, 0x09, 0x8E, 0xB5,
+ 0xE9, 0x66, 0x26, 0x12, 0xDA, 0x5A, 0xC0, 0xB2, 0x96, 0xF0, 0xB4, 0xEE, 0x2F, 0xD7, 0x61, 0x1A,
+ 0x9B, 0x2A, 0x6A, 0x6C, 0x2A, 0x68, 0x6C, 0xBA, 0x59, 0x8D, 0x71, 0xD4, 0x95, 0xB5, 0x16, 0xE0,
+ 0xC9, 0xD1, 0x5C, 0x2E, 0x3C, 0x57, 0x1A, 0xD7, 0xD6, 0x54, 0xA6, 0xAD, 0x32, 0x6A, 0x62, 0xB1,
+ 0x0B, 0x26, 0x45, 0xC4, 0x7D, 0xFB, 0xF1, 0xDD, 0x77, 0x18, 0x6D, 0xE4, 0x2A, 0x0B, 0x35, 0x96,
+ 0x4C, 0xAE, 0x24, 0x18, 0x30, 0x28, 0xC6, 0x2A, 0x1F, 0x89, 0xB0, 0xA9, 0x45, 0x15, 0x84, 0x1C,
+ 0x43, 0xE0, 0x05, 0x03, 0x35, 0xDF, 0xC5, 0x22, 0x41, 0xE0, 0xBC, 0x11, 0x54, 0x86, 0x2D, 0x20,
+ 0x80, 0x92, 0x12, 0x19, 0xE6, 0x35, 0x87, 0x11, 0x6A, 0x19, 0x3B, 0x77, 0x11, 0xEA, 0xAF, 0x9E,
+ 0x6A, 0x50, 0x0B, 0xA6, 0xEA, 0x51, 0x6C, 0xF3, 0x72, 0xA5, 0xC3, 0x27, 0xF4, 0x4A, 0x02, 0xE2,
+ 0x5F, 0x95, 0x93, 0x18, 0x38, 0x2F, 0x04, 0x14, 0xC0, 0x72, 0x2B, 0xC1, 0x42, 0x0B, 0x08, 0x4A,
+ 0x38, 0xE8, 0x97, 0xC8, 0x52, 0x30, 0xA8, 0x51, 0x41, 0x3F, 0xFD, 0x25, 0xC1, 0x10, 0x94, 0x2A,
+ 0x94, 0x90, 0x04, 0x9F, 0xAD, 0x4A, 0xC7, 0xA3, 0x46, 0x4C, 0xF0, 0xB1, 0x28, 0x09, 0x1E, 0x5E,
+ 0x1A, 0x51, 0x42, 0xC3, 0x3F, 0x74, 0x94, 0x8A, 0x45, 0x8D, 0x18, 0xFE, 0x6D, 0x21, 0x19, 0x4F,
+ 0xBC, 0x14, 0xA3, 0xC6, 0x13, 0xFF, 0x24, 0x4E, 0x3A, 0x1E, 0x45, 0xD9, 0xF0, 0xCF, 0xD0, 0xC8,
+ 0xAC, 0x8E, 0x55, 0x7E, 0x32, 0x1D, 0x83, 0x35, 0x01, 0x60, 0x9E, 0xAA, 0x3E, 0xD7, 0xC5, 0xCC,
+ 0x9A, 0x17, 0x8A, 0xB2, 0x30, 0xF0, 0x26, 0x49, 0x0C, 0x41, 0x74, 0xB8, 0x87, 0x92, 0xDD, 0x7D,
+ 0x44, 0xA1, 0xF7, 0x96, 0xA5, 0x16, 0x85, 0x16, 0x96, 0x15, 0x84, 0x9F, 0x10, 0x26, 0x25, 0xFC,
+ 0xD0, 0x25, 0x33, 0x5A, 0x6F, 0xCD, 0x94, 0x3F, 0x6D, 0xC1, 0xF0, 0xAE, 0x2B, 0x11, 0x71, 0xCC,
+ 0x97, 0x96, 0x92, 0x25, 0x41, 0x3B, 0x8E, 0x46, 0x34, 0x24, 0xBA, 0x1C, 0x77, 0xEB, 0xA9, 0x85,
+ 0xAE, 0x5B, 0x2F, 0x05, 0x03, 0x2D, 0x09, 0xAB, 0xE5, 0x66, 0xD0, 0x32, 0x05, 0xC9, 0xC2, 0x55,
+ 0x4B, 0xEF, 0xA0, 0x5D, 0x1A, 0x23, 0x58, 0x7F, 0x56, 0x63, 0x25, 0xF8, 0xEA, 0xB8, 0x8C, 0x0E,
+ 0x5A, 0xB5, 0xCE, 0x52, 0x0A, 0xFF, 0xBA, 0x73, 0x9A, 0x46, 0x16, 0xAA, 0x43, 0x6E, 0xF0, 0xFD,
+ 0x63, 0xC9, 0xB0, 0x5B, 0xB2, 0xD8, 0xBF, 0x7B, 0xE7, 0x30, 0xAE, 0x89, 0x82, 0x6B, 0x84, 0x2B,
+ 0xF3, 0x3C, 0xBB, 0x8B, 0xC0, 0x32, 0xBC, 0x63, 0x64, 0xD8, 0xD7, 0x46, 0xCC, 0x3B, 0x46, 0x30,
+ 0xFD, 0xF5, 0x09, 0x47, 0xDD, 0xA8, 0xB1, 0x06, 0x35, 0x4E, 0x23, 0x3B, 0x3B, 0xA0, 0x5B, 0xD6,
+ 0xB0, 0x10, 0x62, 0x92, 0x15, 0x3B, 0x89, 0xDD, 0x9E, 0x11, 0xFA, 0x9A, 0x10, 0x7E, 0x9F, 0x9D,
+ 0xB1, 0x06, 0x61, 0x2F, 0x43, 0x67, 0x7C, 0x7B, 0x60, 0x2C, 0x16, 0x10, 0xBC, 0x2E, 0x66, 0xA6,
+ 0x35, 0x6E, 0x30, 0x50, 0xC1, 0x44, 0x70, 0x6F, 0x02, 0xA1, 0xAB, 0x56, 0x1C, 0x2B, 0x30, 0x7C,
+ 0xC1, 0xAE, 0x35, 0xEA, 0xED, 0x71, 0xB0, 0x66, 0xC4, 0x9B, 0x1D, 0x8C, 0x5D, 0x63, 0xF5, 0x2D,
+ 0x6E, 0x6A, 0x68, 0x60, 0xA7, 0xFB, 0xAD, 0xFD, 0x16, 0x6F, 0xE0, 0xBB, 0xB7, 0x61, 0x96, 0x89,
+ 0x78, 0x71, 0xF1, 0xF7, 0xC7, 0x0F, 0xDF, 0x45, 0x78, 0x7D, 0xE7, 0x15, 0xBB, 0xD4, 0xA8, 0xD3,
+ 0x5D, 0x11, 0x87, 0x7F, 0x2C, 0x70, 0x2A, 0x10, 0x28, 0x45, 0x10, 0x23, 0x6E, 0x78, 0x40, 0x51,
+ 0xB1, 0xE6, 0xCF, 0x44, 0xA4, 0x70, 0xD9, 0x26, 0x2B, 0x0D, 0x30, 0x91, 0x86, 0x0C, 0x34, 0xD8,
+ 0x0E, 0x81, 0xE0, 0xC8, 0xC9, 0xEB, 0xA5, 0x65, 0xFD, 0x42, 0x0C, 0x17, 0xF4, 0xF1, 0x54, 0x6B,
+ 0xD4, 0x5A, 0xB5, 0xA7, 0x0D, 0x7A, 0xFD, 0x1D, 0xB0, 0x33, 0x6B, 0xEC, 0x3D, 0xD5, 0xF7, 0xF6,
+ 0x0E, 0x3C, 0xD0, 0x19, 0x69, 0x34, 0xDB, 0x41, 0x13, 0xF8, 0x43, 0xDB, 0xB0, 0x4E, 0xD2, 0xEF,
+ 0xBF, 0x75, 0x96, 0xAE, 0x97, 0xD5, 0xE0, 0x9D, 0x69, 0x63, 0x11, 0x27, 0xAB, 0xC9, 0x15, 0x01,
+ 0xC1, 0x8E, 0xD7, 0x9A, 0xD4, 0xE8, 0x2E, 0x0E, 0x5E, 0xFE, 0xD0, 0xE8, 0xE2, 0xB6, 0xD6, 0x10,
+ 0x2B, 0x3A, 0x7C, 0x19, 0x91, 0xA0, 0xA1, 0x37, 0x02, 0x8F, 0xBF, 0x13, 0x8D, 0x03, 0x5C, 0x16,
+ 0x0C, 0xE0, 0x7B, 0xF0, 0x80, 0x03, 0x97, 0xCC, 0x9D, 0x6B, 0xB2, 0xA6, 0x7F, 0x6C, 0x1E, 0x1A,
+ 0xFF, 0xCC, 0x1C, 0xB3, 0x32, 0x4D, 0x64, 0xB7, 0x58, 0x15, 0xC2, 0x0D, 0x22, 0xB8, 0x85, 0x02,
+ 0xF7, 0x53, 0x34, 0xEA, 0x6C, 0xF7, 0x0A, 0x1D, 0x15, 0xEE, 0x22, 0xB7, 0x99, 0x39, 0xAB, 0x2C,
+ 0x48, 0xD6, 0x7B, 0x02, 0x38, 0x84, 0x1E, 0x9B, 0x9E, 0x31, 0xB4, 0xF2, 0xBB, 0xE6, 0xED, 0xC6,
+ 0xBC, 0xFC, 0x0D, 0x0D, 0x82, 0x2B, 0x00, 0xEA, 0xBB, 0xB4, 0x4E, 0x28, 0xA0, 0x25, 0x76, 0x1E,
+ 0xD6, 0x80, 0xAC, 0x4C, 0xC4, 0x13, 0x03, 0x26, 0x4F, 0x71, 0xCC, 0xAC, 0x78, 0x5C, 0xA0, 0xAC,
+ 0x2C, 0x5E, 0x06, 0x88, 0xF8, 0x29, 0x98, 0x33, 0x58, 0xA8, 0xF6, 0x9C, 0xB2, 0xA0, 0x9D, 0xC6,
+ 0xEE, 0x86, 0xB9, 0x8D, 0x58, 0x30, 0x7D, 0xC4, 0xE2, 0xDF, 0x5F, 0xB0, 0x82, 0x1B, 0x52, 0x1E,
+ 0x93, 0xC0, 0x93, 0x27, 0x71, 0x6C, 0xB8, 0x8D, 0x85, 0x0D, 0x20, 0x61, 0x6F, 0xAC, 0x3D, 0x7B,
+ 0x7D, 0x78, 0xB4, 0xB2, 0xC0, 0x49, 0x82, 0xA1, 0xE0, 0x71, 0x4C, 0xF0, 0xC2, 0x18, 0x01, 0x84,
+ 0x98, 0x63, 0x2A, 0x20, 0xDC, 0x95, 0x56, 0x5B, 0x5B, 0xEF, 0x7F, 0x4E, 0xAD, 0xBE, 0x41, 0xF8,
+ 0xA6, 0xC4, 0x3D, 0x90, 0x3F, 0x1A, 0x73, 0x74, 0x21, 0x3E, 0x87, 0x4E, 0x60, 0x9C, 0xC6, 0x30,
+ 0x22, 0x63, 0x09, 0xBA, 0xF1, 0x77, 0x78, 0x48, 0x31, 0x4E, 0x0D, 0xD3, 0xBE, 0x20, 0x26, 0xA6,
+ 0x7F, 0x7B, 0xC2, 0x5D, 0xDA, 0x3D, 0x20, 0xC2, 0x0D, 0x83, 0xC2, 0x72, 0xC6, 0xFA, 0x7A, 0xC8,
+ 0xE1, 0x21, 0x6D, 0x9A, 0x82, 0x86, 0x76, 0xB1, 0x8E, 0x26, 0x93, 0xFA, 0xD5, 0xF0, 0x33, 0x62,
+ 0x93, 0x09, 0x85, 0xA2, 0x5B, 0x0D, 0x51, 0x1C, 0xB4, 0x57, 0x38, 0xCC, 0x42, 0x35, 0x31, 0x46,
+ 0xE4, 0xB3, 0x0B, 0x71, 0x6C, 0x6A, 0x9B, 0x7F, 0x12, 0x19, 0x42, 0xE6, 0x8C, 0x0D, 0x62, 0xBB,
+ 0x4E, 0x90, 0x48, 0x22, 0x72, 0xEE, 0x67, 0xF1, 0xEB, 0xF1, 0x21, 0x3A, 0x70, 0xBD, 0x70, 0x69,
+ 0x5D, 0xB4, 0x05, 0x56, 0xFA, 0x8F, 0x26, 0xC0, 0x91, 0xB1, 0x6D, 0xA8, 0x12, 0xAE, 0x63, 0x19,
+ 0x3C, 0x6C, 0x22, 0xD6, 0xAB, 0x2B, 0x16, 0xC1, 0x33, 0x70, 0xB2, 0xCD, 0x7D, 0x49, 0xA4, 0xCB,
+ 0xE1, 0xDC, 0xF4, 0x25, 0x08, 0xEB, 0x7A, 0x5D, 0x8A, 0x2B, 0xA5, 0x9E, 0x2E, 0x7A, 0x22, 0x8B,
+ 0x66, 0x74, 0xA9, 0x11, 0x10, 0xC5, 0xB6, 0x0A, 0x8C, 0xD8, 0x6E, 0xF5, 0xE7, 0x30, 0xE2, 0xE2,
+ 0x06, 0x00, 0x54, 0x75, 0x62, 0x0B, 0x10, 0x43, 0xC1, 0xF6, 0xAE, 0x51, 0x14, 0xF1, 0xDD, 0x6B,
+ 0xC1, 0x8E, 0xB1, 0xF8, 0xCA, 0xA4, 0xB8, 0xF7, 0xE5, 0x77, 0x97, 0x00, 0x9C, 0x87, 0xF3, 0x59,
+ 0xED, 0x1F, 0x5F, 0x29, 0x8A, 0x3B, 0x6D, 0x02, 0x91, 0xC0, 0x9B, 0x91, 0x31, 0x9D, 0x7B, 0xF9,
+ 0x4B, 0xEF, 0x54, 0xC3, 0x6D, 0x3F, 0xB1, 0xDD, 0x6A, 0x77, 0xBF, 0x87, 0x16, 0x12, 0x0E, 0x24,
+ 0xD1, 0x7A, 0x2B, 0x67, 0x7B, 0x6D, 0xDD, 0xF5, 0x91, 0xC2, 0x0A, 0x2B, 0x87, 0x55, 0x5A, 0x65,
+ 0x95, 0x2D, 0x4E, 0x26, 0xA3, 0x14, 0xCF, 0x31, 0x1F, 0xA9, 0xF4, 0x4D, 0x77, 0x5D, 0xAA, 0x74,
+ 0x29, 0xC9, 0x2E, 0xF1, 0xC7, 0xC2, 0x98, 0x25, 0x8C, 0xF9, 0x09, 0x3F, 0xDA, 0xE3, 0x72, 0x02,
+ 0x13, 0x19, 0x07, 0xF1, 0x96, 0x19, 0x11, 0xAE, 0x3E, 0x33, 0x3D, 0xC6, 0x4C, 0x80, 0x49, 0x9B,
+ 0x0B, 0x3B, 0x7F, 0x4B, 0x22, 0x5F, 0x76, 0x09, 0x95, 0xF5, 0x87, 0x07, 0x79, 0x7B, 0x28, 0x02,
+ 0x19, 0x0E, 0xEC, 0x40, 0x40, 0x10, 0x13, 0x51, 0x21, 0x15, 0x65, 0xC8, 0x8C, 0xFD, 0x84, 0x01,
+ 0x9B, 0x8E, 0xD6, 0xB4, 0xE7, 0x5F, 0xA9, 0x55, 0xFF, 0xB6, 0xCF, 0x46, 0x78, 0x21, 0x68, 0xEE,
+ 0x15, 0x21, 0x68, 0x6D, 0x55, 0x3E, 0x97, 0x98, 0x8D, 0xAD, 0x4F, 0x06, 0x3F, 0x88, 0xC5, 0x14,
+ 0xDF, 0xB9, 0xD6, 0x5A, 0x5B, 0x97, 0x17, 0x17, 0xD1, 0x42, 0x06, 0x25, 0xB2, 0x11, 0x16, 0xD5,
+ 0x03, 0xF1, 0x48, 0x17, 0xD0, 0x52, 0xC5, 0xC5, 0xEC, 0x8B, 0x45, 0x14, 0x9C, 0x16, 0x64, 0xCE,
+ 0x9F, 0xE8, 0x86, 0x59, 0x2A, 0xAF, 0x08, 0xE0, 0x22, 0xDC, 0x20, 0x9D, 0x0B, 0x19, 0x6D, 0xA6,
+ 0x16, 0x70, 0xD0, 0xF9, 0x98, 0xDA, 0xFA, 0x03, 0x9F, 0xBA, 0x09, 0xA0, 0x88, 0x35, 0x1F, 0x36,
+ 0x78, 0x4A, 0x26, 0x49, 0xBE, 0x38, 0x7A, 0x65, 0xC1, 0xD3, 0x61, 0x92, 0x35, 0x16, 0xA0, 0xA9,
+ 0xE7, 0xE7, 0x03, 0x8B, 0xDB, 0xB2, 0xEB, 0x82, 0xB0, 0x3D, 0xDF, 0x59, 0x5C, 0xD1, 0xAB, 0x89,
+ 0xA8, 0xB0, 0xA2, 0xC5, 0xAC, 0x03, 0xBC, 0x1F, 0xCC, 0x93, 0x44, 0x46, 0xE3, 0xF5, 0xFF, 0x2B,
+ 0xAC, 0x74, 0x69, 0x0C, 0x4F, 0x3D, 0x9E, 0xED, 0xD2, 0x22, 0x98, 0xB4, 0x07, 0x3A, 0xE7, 0xF4,
+ 0xDC, 0x11, 0x1B, 0x3C, 0xC2, 0x6D, 0xD0, 0x18, 0x3A, 0xF0, 0xF0, 0x77, 0xD6, 0x27, 0xA6, 0x12,
+ 0x31, 0x05, 0xEF, 0xE5, 0xD2, 0xE2, 0x2C, 0x92, 0xA4, 0x44, 0x01, 0x9E, 0x39, 0x9B, 0x87, 0xA3,
+ 0x06, 0x1B, 0x28, 0x31, 0x7C, 0x09, 0xCA, 0x4F, 0x89, 0x91, 0x91, 0x98, 0x78, 0x50, 0x8A, 0x13,
+ 0x2F, 0x8C, 0x7C, 0x6C, 0x0F, 0xFD, 0xF3, 0xCF, 0xA3, 0x21, 0x0C, 0x76, 0x38, 0x01, 0x04, 0xD7,
+ 0x5B, 0x35, 0xF6, 0xEE, 0xB2, 0xD8, 0x61, 0xE2, 0x8A, 0x14, 0xA9, 0x4A, 0x04, 0x8D, 0xDA, 0x72,
+ 0x6C, 0x31, 0xF9, 0xC8, 0xD1, 0x89, 0xD6, 0x7B, 0x69, 0x07, 0x13, 0x96, 0x34, 0xC1, 0x9E, 0xAF,
+ 0x8B, 0x96, 0xE5, 0xAC, 0x31, 0x04, 0x51, 0x3C, 0x5E, 0x23, 0x36, 0x91, 0x94, 0x0A, 0x76, 0x11,
+ 0x34, 0x08, 0x68, 0x17, 0x1D, 0x22, 0x85, 0xF6, 0xF8, 0x58, 0x99, 0x48, 0xFF, 0x02, 0x95, 0x5F,
+ 0x2C, 0x81, 0x88, 0x79, 0xA0, 0x72, 0x76, 0x0D, 0x33, 0xDC, 0xD0, 0x36, 0x21, 0xE3, 0xCD, 0xF2,
+ 0x19, 0xB8, 0x2D, 0x38, 0x1A, 0x4F, 0x8F, 0x73, 0x00, 0x68, 0x4E, 0xCC, 0x1E, 0x84, 0xA1, 0xB0,
+ 0x6C, 0xC3, 0xAE, 0xAF, 0x09, 0x89, 0x77, 0x66, 0x7C, 0x81, 0x66, 0x23, 0xD6, 0x4C, 0x40, 0x02,
+ 0x78, 0xD7, 0xD3, 0x05, 0x89, 0x20, 0xA0, 0xDD, 0x5E, 0xA8, 0x17, 0x04, 0xE2, 0x99, 0x68, 0xA4,
+ 0x95, 0xF4, 0xD9, 0xC4, 0xFA, 0x4C, 0x22, 0xA1, 0xB0, 0xF4, 0x19, 0xC4, 0xFA, 0xEC, 0xE1, 0x4E,
+ 0xD0, 0x42, 0xF0, 0xC4, 0x56, 0x24, 0x48, 0x92, 0x2D, 0x75, 0x22, 0x4A, 0x3D, 0x98, 0x49, 0xE5,
+ 0x40, 0x7C, 0xA6, 0xA9, 0x88, 0x28, 0x32, 0xA2, 0x28, 0x32, 0xC2, 0x45, 0x86, 0x00, 0x51, 0xE2,
+ 0x9E, 0x3F, 0xAD, 0x0B, 0xE3, 0xCA, 0x4F, 0x2F, 0x23, 0xCE, 0x56, 0xC3, 0x4C, 0x3A, 0xF9, 0x94,
+ 0x49, 0x60, 0x2F, 0x1B, 0x00, 0xDA, 0xCF, 0x61, 0xDC, 0x16, 0xD9, 0x5A, 0x0D, 0xD5, 0xD8, 0x0A,
+ 0xA6, 0x5C, 0x08, 0x10, 0xB1, 0x25, 0x9F, 0x98, 0x05, 0xAC, 0xBC, 0x22, 0x3E, 0x7F, 0xAE, 0xD3,
+ 0xB0, 0xC7, 0xDA, 0xC4, 0x35, 0xE6, 0xC4, 0x83, 0x09, 0x59, 0x48, 0xEC, 0x98, 0xDE, 0xCF, 0x1D,
+ 0xA2, 0x58, 0x33, 0x81, 0xC9, 0x70, 0x6A, 0x97, 0x0B, 0x1A, 0xB6, 0x14, 0xA0, 0x43, 0x3A, 0x32,
+ 0xA1, 0x83, 0x46, 0x6C, 0x6C, 0x0B, 0x4F, 0x95, 0x84, 0x15, 0xB6, 0x8E, 0x9C, 0x27, 0x42, 0xC0,
+ 0x26, 0x4A, 0x03, 0xAD, 0x97, 0x2C, 0x27, 0xB0, 0x84, 0x87, 0x31, 0x9B, 0x48, 0x6B, 0xC4, 0x06,
+ 0x21, 0x4B, 0xB1, 0x36, 0xA1, 0x83, 0x30, 0xF8, 0x34, 0x32, 0x73, 0x49, 0x61, 0xE5, 0xEA, 0xDA,
+ 0x7B, 0x8B, 0xE0, 0x34, 0x8F, 0xBF, 0xA9, 0xF3, 0xE2, 0xDB, 0xD7, 0x9A, 0xE3, 0x6A, 0x96, 0xB3,
+ 0x22, 0xB8, 0x59, 0x34, 0x58, 0x0A, 0xD6, 0x86, 0x04, 0x12, 0x4B, 0xC2, 0x26, 0xD3, 0x18, 0x87,
+ 0xFC, 0x99, 0xE9, 0x41, 0xEA, 0x8E, 0xEF, 0x93, 0x25, 0x8F, 0x6B, 0x61, 0x31, 0x34, 0x97, 0xBD,
+ 0xF5, 0xAD, 0x55, 0x31, 0x71, 0x32, 0x98, 0x48, 0x96, 0x8F, 0x39, 0x8F, 0x6B, 0xC1, 0x28, 0x6B,
+ 0xFA, 0x5E, 0x40, 0x84, 0xE1, 0xED, 0x07, 0x2B, 0x45, 0x39, 0x03, 0xB9, 0x82, 0x0C, 0xC1, 0x22,
+ 0x59, 0x46, 0xBC, 0xAE, 0x49, 0x53, 0x56, 0x23, 0xC9, 0xD0, 0x28, 0x96, 0x0B, 0xA5, 0x71, 0x3E,
+ 0x5D, 0x2B, 0x4C, 0xE2, 0x2C, 0x55, 0x67, 0xBF, 0xB3, 0xC3, 0xE0, 0xB1, 0x39, 0x76, 0x86, 0x8B,
+ 0x05, 0x83, 0x47, 0x67, 0x87, 0x33, 0x7F, 0x6E, 0x0D, 0x1E, 0xFD, 0x2F, 0x5E, 0x72, 0x0B, 0x89,
+ 0x42, 0x10, 0x01, 0x00
+};
diff --git a/arduino/ESP32CameraWebServer/camera_pins.h b/arduino/ESP32CameraWebServer/camera_pins.h
new file mode 100644
index 0000000..e1be287
--- /dev/null
+++ b/arduino/ESP32CameraWebServer/camera_pins.h
@@ -0,0 +1,273 @@
+
+#if defined(CAMERA_MODEL_WROVER_KIT)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM 21
+#define SIOD_GPIO_NUM 26
+#define SIOC_GPIO_NUM 27
+
+#define Y9_GPIO_NUM 35
+#define Y8_GPIO_NUM 34
+#define Y7_GPIO_NUM 39
+#define Y6_GPIO_NUM 36
+#define Y5_GPIO_NUM 19
+#define Y4_GPIO_NUM 18
+#define Y3_GPIO_NUM 5
+#define Y2_GPIO_NUM 4
+#define VSYNC_GPIO_NUM 25
+#define HREF_GPIO_NUM 23
+#define PCLK_GPIO_NUM 22
+
+#elif defined(CAMERA_MODEL_ESP_EYE)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM 4
+#define SIOD_GPIO_NUM 18
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 36
+#define Y8_GPIO_NUM 37
+#define Y7_GPIO_NUM 38
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 35
+#define Y4_GPIO_NUM 14
+#define Y3_GPIO_NUM 13
+#define Y2_GPIO_NUM 34
+#define VSYNC_GPIO_NUM 5
+#define HREF_GPIO_NUM 27
+#define PCLK_GPIO_NUM 25
+
+#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM 15
+#define XCLK_GPIO_NUM 27
+#define SIOD_GPIO_NUM 25
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 19
+#define Y8_GPIO_NUM 36
+#define Y7_GPIO_NUM 18
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 5
+#define Y4_GPIO_NUM 34
+#define Y3_GPIO_NUM 35
+#define Y2_GPIO_NUM 32
+#define VSYNC_GPIO_NUM 22
+#define HREF_GPIO_NUM 26
+#define PCLK_GPIO_NUM 21
+
+#elif defined(CAMERA_MODEL_M5STACK_V2_PSRAM)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM 15
+#define XCLK_GPIO_NUM 27
+#define SIOD_GPIO_NUM 22
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 19
+#define Y8_GPIO_NUM 36
+#define Y7_GPIO_NUM 18
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 5
+#define Y4_GPIO_NUM 34
+#define Y3_GPIO_NUM 35
+#define Y2_GPIO_NUM 32
+#define VSYNC_GPIO_NUM 25
+#define HREF_GPIO_NUM 26
+#define PCLK_GPIO_NUM 21
+
+#elif defined(CAMERA_MODEL_M5STACK_WIDE)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM 15
+#define XCLK_GPIO_NUM 27
+#define SIOD_GPIO_NUM 22
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 19
+#define Y8_GPIO_NUM 36
+#define Y7_GPIO_NUM 18
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 5
+#define Y4_GPIO_NUM 34
+#define Y3_GPIO_NUM 35
+#define Y2_GPIO_NUM 32
+#define VSYNC_GPIO_NUM 25
+#define HREF_GPIO_NUM 26
+#define PCLK_GPIO_NUM 21
+
+#elif defined(CAMERA_MODEL_M5STACK_ESP32CAM)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM 15
+#define XCLK_GPIO_NUM 27
+#define SIOD_GPIO_NUM 25
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 19
+#define Y8_GPIO_NUM 36
+#define Y7_GPIO_NUM 18
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 5
+#define Y4_GPIO_NUM 34
+#define Y3_GPIO_NUM 35
+#define Y2_GPIO_NUM 17
+#define VSYNC_GPIO_NUM 22
+#define HREF_GPIO_NUM 26
+#define PCLK_GPIO_NUM 21
+
+#elif defined(CAMERA_MODEL_M5STACK_UNITCAM)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM 15
+#define XCLK_GPIO_NUM 27
+#define SIOD_GPIO_NUM 25
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 19
+#define Y8_GPIO_NUM 36
+#define Y7_GPIO_NUM 18
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 5
+#define Y4_GPIO_NUM 34
+#define Y3_GPIO_NUM 35
+#define Y2_GPIO_NUM 32
+#define VSYNC_GPIO_NUM 22
+#define HREF_GPIO_NUM 26
+#define PCLK_GPIO_NUM 21
+
+#elif defined(CAMERA_MODEL_AI_THINKER)
+#define PWDN_GPIO_NUM 32
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM 0
+#define SIOD_GPIO_NUM 26
+#define SIOC_GPIO_NUM 27
+
+#define Y9_GPIO_NUM 35
+#define Y8_GPIO_NUM 34
+#define Y7_GPIO_NUM 39
+#define Y6_GPIO_NUM 36
+#define Y5_GPIO_NUM 21
+#define Y4_GPIO_NUM 19
+#define Y3_GPIO_NUM 18
+#define Y2_GPIO_NUM 5
+#define VSYNC_GPIO_NUM 25
+#define HREF_GPIO_NUM 23
+#define PCLK_GPIO_NUM 22
+
+#elif defined(CAMERA_MODEL_TTGO_T_JOURNAL)
+#define PWDN_GPIO_NUM 0
+#define RESET_GPIO_NUM 15
+#define XCLK_GPIO_NUM 27
+#define SIOD_GPIO_NUM 25
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 19
+#define Y8_GPIO_NUM 36
+#define Y7_GPIO_NUM 18
+#define Y6_GPIO_NUM 39
+#define Y5_GPIO_NUM 5
+#define Y4_GPIO_NUM 34
+#define Y3_GPIO_NUM 35
+#define Y2_GPIO_NUM 17
+#define VSYNC_GPIO_NUM 22
+#define HREF_GPIO_NUM 26
+#define PCLK_GPIO_NUM 21
+
+
+#elif defined(CAMERA_MODEL_ESP32_CAM_BOARD)
+// The 18 pin header on the board has Y5 and Y3 swapped
+#define USE_BOARD_HEADER 0
+#define PWDN_GPIO_NUM 32
+#define RESET_GPIO_NUM 33
+#define XCLK_GPIO_NUM 4
+#define SIOD_GPIO_NUM 18
+#define SIOC_GPIO_NUM 23
+
+#define Y9_GPIO_NUM 36
+#define Y8_GPIO_NUM 19
+#define Y7_GPIO_NUM 21
+#define Y6_GPIO_NUM 39
+#if USE_BOARD_HEADER
+#define Y5_GPIO_NUM 13
+#else
+#define Y5_GPIO_NUM 35
+#endif
+#define Y4_GPIO_NUM 14
+#if USE_BOARD_HEADER
+#define Y3_GPIO_NUM 35
+#else
+#define Y3_GPIO_NUM 13
+#endif
+#define Y2_GPIO_NUM 34
+#define VSYNC_GPIO_NUM 5
+#define HREF_GPIO_NUM 27
+#define PCLK_GPIO_NUM 25
+
+#elif defined(CAMERA_MODEL_ESP32S3_CAM_LCD)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM 40
+#define SIOD_GPIO_NUM 17
+#define SIOC_GPIO_NUM 18
+
+#define Y9_GPIO_NUM 39
+#define Y8_GPIO_NUM 41
+#define Y7_GPIO_NUM 42
+#define Y6_GPIO_NUM 12
+#define Y5_GPIO_NUM 3
+#define Y4_GPIO_NUM 14
+#define Y3_GPIO_NUM 47
+#define Y2_GPIO_NUM 13
+#define VSYNC_GPIO_NUM 21
+#define HREF_GPIO_NUM 38
+#define PCLK_GPIO_NUM 11
+
+#elif defined(CAMERA_MODEL_ESP32S2_CAM_BOARD)
+// The 18 pin header on the board has Y5 and Y3 swapped
+#define USE_BOARD_HEADER 0
+#define PWDN_GPIO_NUM 1
+#define RESET_GPIO_NUM 2
+#define XCLK_GPIO_NUM 42
+#define SIOD_GPIO_NUM 41
+#define SIOC_GPIO_NUM 18
+
+#define Y9_GPIO_NUM 16
+#define Y8_GPIO_NUM 39
+#define Y7_GPIO_NUM 40
+#define Y6_GPIO_NUM 15
+#if USE_BOARD_HEADER
+#define Y5_GPIO_NUM 12
+#else
+#define Y5_GPIO_NUM 13
+#endif
+#define Y4_GPIO_NUM 5
+#if USE_BOARD_HEADER
+#define Y3_GPIO_NUM 13
+#else
+#define Y3_GPIO_NUM 12
+#endif
+#define Y2_GPIO_NUM 14
+#define VSYNC_GPIO_NUM 38
+#define HREF_GPIO_NUM 4
+#define PCLK_GPIO_NUM 3
+
+#elif defined(CAMERA_MODEL_ESP32S3_EYE)
+#define PWDN_GPIO_NUM -1
+#define RESET_GPIO_NUM -1
+#define XCLK_GPIO_NUM 15
+#define SIOD_GPIO_NUM 4
+#define SIOC_GPIO_NUM 5
+
+#define Y2_GPIO_NUM 11
+#define Y3_GPIO_NUM 9
+#define Y4_GPIO_NUM 8
+#define Y5_GPIO_NUM 10
+#define Y6_GPIO_NUM 12
+#define Y7_GPIO_NUM 18
+#define Y8_GPIO_NUM 17
+#define Y9_GPIO_NUM 16
+
+#define VSYNC_GPIO_NUM 6
+#define HREF_GPIO_NUM 7
+#define PCLK_GPIO_NUM 13
+
+#else
+#error "Camera model not selected"
+#endif
diff --git a/arduino/ESP32CameraWebServer/index_ov2640.html b/arduino/ESP32CameraWebServer/index_ov2640.html
new file mode 100644
index 0000000..4f3738c
--- /dev/null
+++ b/arduino/ESP32CameraWebServer/index_ov2640.html
@@ -0,0 +1,1160 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>ESP32 OV2460</title>
+ <style>
+ body {
+ font-family: Arial,Helvetica,sans-serif;
+ background: #181818;
+ color: #EFEFEF;
+ font-size: 16px
+ }
+
+ h2 {
+ font-size: 18px
+ }
+
+ section.main {
+ display: flex
+ }
+
+ #menu,section.main {
+ flex-direction: column
+ }
+
+ #menu {
+ display: none;
+ flex-wrap: nowrap;
+ min-width: 340px;
+ background: #363636;
+ padding: 8px;
+ border-radius: 4px;
+ margin-top: -10px;
+ margin-right: 10px;
+ }
+
+ #content {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: stretch
+ }
+
+ figure {
+ padding: 0px;
+ margin: 0;
+ -webkit-margin-before: 0;
+ margin-block-start: 0;
+ -webkit-margin-after: 0;
+ margin-block-end: 0;
+ -webkit-margin-start: 0;
+ margin-inline-start: 0;
+ -webkit-margin-end: 0;
+ margin-inline-end: 0
+ }
+
+ figure img {
+ display: block;
+ width: 100%;
+ height: auto;
+ border-radius: 4px;
+ margin-top: 8px;
+ }
+
+ @media (min-width: 800px) and (orientation:landscape) {
+ #content {
+ display:flex;
+ flex-wrap: nowrap;
+ align-items: stretch
+ }
+
+ figure img {
+ display: block;
+ max-width: 100%;
+ max-height: calc(100vh - 40px);
+ width: auto;
+ height: auto
+ }
+
+ figure {
+ padding: 0 0 0 0px;
+ margin: 0;
+ -webkit-margin-before: 0;
+ margin-block-start: 0;
+ -webkit-margin-after: 0;
+ margin-block-end: 0;
+ -webkit-margin-start: 0;
+ margin-inline-start: 0;
+ -webkit-margin-end: 0;
+ margin-inline-end: 0
+ }
+ }
+
+ section#buttons {
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: space-between
+ }
+
+ #nav-toggle {
+ cursor: pointer;
+ display: block
+ }
+
+ #nav-toggle-cb {
+ outline: 0;
+ opacity: 0;
+ width: 0;
+ height: 0
+ }
+
+ #nav-toggle-cb:checked+#menu {
+ display: flex
+ }
+
+ .input-group {
+ display: flex;
+ flex-wrap: nowrap;
+ line-height: 22px;
+ margin: 5px 0
+ }
+
+ .input-group>label {
+ display: inline-block;
+ padding-right: 10px;
+ min-width: 47%
+ }
+
+ .input-group input,.input-group select {
+ flex-grow: 1
+ }
+
+ .range-max,.range-min {
+ display: inline-block;
+ padding: 0 5px
+ }
+
+ button, .button {
+ display: block;
+ margin: 5px;
+ padding: 0 12px;
+ border: 0;
+ line-height: 28px;
+ cursor: pointer;
+ color: #fff;
+ background: #ff3034;
+ border-radius: 5px;
+ font-size: 16px;
+ outline: 0
+ }
+
+ .save {
+ position: absolute;
+ right: 25px;
+ top: 0px;
+ height: 16px;
+ line-height: 16px;
+ padding: 0 4px;
+ text-decoration: none;
+ cursor: pointer
+ }
+
+ button:hover {
+ background: #ff494d
+ }
+
+ button:active {
+ background: #f21c21
+ }
+
+ button.disabled {
+ cursor: default;
+ background: #a0a0a0
+ }
+
+ input[type=range] {
+ -webkit-appearance: none;
+ width: 100%;
+ height: 22px;
+ background: #363636;
+ cursor: pointer;
+ margin: 0
+ }
+
+ input[type=range]:focus {
+ outline: 0
+ }
+
+ input[type=range]::-webkit-slider-runnable-track {
+ width: 100%;
+ height: 2px;
+ cursor: pointer;
+ background: #EFEFEF;
+ border-radius: 0;
+ border: 0 solid #EFEFEF
+ }
+
+ input[type=range]::-webkit-slider-thumb {
+ border: 1px solid rgba(0,0,30,0);
+ height: 22px;
+ width: 22px;
+ border-radius: 50px;
+ background: #ff3034;
+ cursor: pointer;
+ -webkit-appearance: none;
+ margin-top: -11.5px
+ }
+
+ input[type=range]:focus::-webkit-slider-runnable-track {
+ background: #EFEFEF
+ }
+
+ input[type=range]::-moz-range-track {
+ width: 100%;
+ height: 2px;
+ cursor: pointer;
+ background: #EFEFEF;
+ border-radius: 0;
+ border: 0 solid #EFEFEF
+ }
+
+ input[type=range]::-moz-range-thumb {
+ border: 1px solid rgba(0,0,30,0);
+ height: 22px;
+ width: 22px;
+ border-radius: 50px;
+ background: #ff3034;
+ cursor: pointer
+ }
+
+ input[type=range]::-ms-track {
+ width: 100%;
+ height: 2px;
+ cursor: pointer;
+ background: 0 0;
+ border-color: transparent;
+ color: transparent
+ }
+
+ input[type=range]::-ms-fill-lower {
+ background: #EFEFEF;
+ border: 0 solid #EFEFEF;
+ border-radius: 0
+ }
+
+ input[type=range]::-ms-fill-upper {
+ background: #EFEFEF;
+ border: 0 solid #EFEFEF;
+ border-radius: 0
+ }
+
+ input[type=range]::-ms-thumb {
+ border: 1px solid rgba(0,0,30,0);
+ height: 22px;
+ width: 22px;
+ border-radius: 50px;
+ background: #ff3034;
+ cursor: pointer;
+ height: 2px
+ }
+
+ input[type=range]:focus::-ms-fill-lower {
+ background: #EFEFEF
+ }
+
+ input[type=range]:focus::-ms-fill-upper {
+ background: #363636
+ }
+
+ .switch {
+ display: block;
+ position: relative;
+ line-height: 22px;
+ font-size: 16px;
+ height: 22px
+ }
+
+ .switch input {
+ outline: 0;
+ opacity: 0;
+ width: 0;
+ height: 0
+ }
+
+ .slider {
+ width: 50px;
+ height: 22px;
+ border-radius: 22px;
+ cursor: pointer;
+ background-color: grey
+ }
+
+ .slider,.slider:before {
+ display: inline-block;
+ transition: .4s
+ }
+
+ .slider:before {
+ position: relative;
+ content: "";
+ border-radius: 50%;
+ height: 16px;
+ width: 16px;
+ left: 4px;
+ top: 3px;
+ background-color: #fff
+ }
+
+ input:checked+.slider {
+ background-color: #ff3034
+ }
+
+ input:checked+.slider:before {
+ -webkit-transform: translateX(26px);
+ transform: translateX(26px)
+ }
+
+ select {
+ border: 1px solid #363636;
+ font-size: 14px;
+ height: 22px;
+ outline: 0;
+ border-radius: 5px
+ }
+
+ .image-container {
+ position: relative;
+ min-width: 160px
+ }
+
+ .close {
+ position: absolute;
+ right: 5px;
+ top: 5px;
+ background: #ff3034;
+ width: 16px;
+ height: 16px;
+ border-radius: 100px;
+ color: #fff;
+ text-align: center;
+ line-height: 18px;
+ cursor: pointer
+ }
+
+ .hidden {
+ display: none
+ }
+
+ input[type=text] {
+ border: 1px solid #363636;
+ font-size: 14px;
+ height: 20px;
+ margin: 1px;
+ outline: 0;
+ border-radius: 5px
+ }
+
+ .inline-button {
+ line-height: 20px;
+ margin: 2px;
+ padding: 1px 4px 2px 4px;
+ }
+
+ label.toggle-section-label {
+ cursor: pointer;
+ display: block
+ }
+
+ input.toggle-section-button {
+ outline: 0;
+ opacity: 0;
+ width: 0;
+ height: 0
+ }
+
+ input.toggle-section-button:checked+section.toggle-section {
+ display: none
+ }
+
+ </style>
+ </head>
+ <body>
+ <section class="main">
+ <div id="logo">
+ <label for="nav-toggle-cb" id="nav-toggle">&#9776;&nbsp;&nbsp;Toggle OV2640 settings</label>
+ </div>
+ <div id="content">
+ <div id="sidebar">
+ <input type="checkbox" id="nav-toggle-cb" checked="checked">
+ <nav id="menu">
+
+ <section id="xclk-section" class="nothidden">
+ <div class="input-group" id="set-xclk-group">
+ <label for="set-xclk">XCLK MHz</label>
+ <div class="text">
+ <input id="xclk" type="text" minlength="1" maxlength="2" size="2" value="20">
+ </div>
+ <button class="inline-button" id="set-xclk">Set</button>
+ </div>
+ </section>
+
+ <div class="input-group" id="framesize-group">
+ <label for="framesize">Resolution</label>
+ <select id="framesize" class="default-action">
+ <!-- 2MP -->
+ <option value="13">UXGA(1600x1200)</option>
+ <option value="12">SXGA(1280x1024)</option>
+ <option value="11">HD(1280x720)</option>
+ <option value="10">XGA(1024x768)</option>
+ <option value="9">SVGA(800x600)</option>
+ <option value="8">VGA(640x480)</option>
+ <option value="7">HVGA(480x320)</option>
+ <option value="6">CIF(400x296)</option>
+ <option value="5">QVGA(320x240)</option>
+ <option value="4">240x240</option>
+ <option value="3">HQVGA(240x176)</option>
+ <option value="2">QCIF(176x144)</option>
+ <option value="1">QQVGA(160x120)</option>
+ <option value="0">96x96</option>
+ </select>
+ </div>
+ <div class="input-group" id="quality-group">
+ <label for="quality">Quality</label>
+ <div class="range-min">4</div>
+ <input type="range" id="quality" min="4" max="63" value="10" class="default-action">
+ <div class="range-max">63</div>
+ </div>
+ <div class="input-group" id="brightness-group">
+ <label for="brightness">Brightness</label>
+ <div class="range-min">-2</div>
+ <input type="range" id="brightness" min="-2" max="2" value="0" class="default-action">
+ <div class="range-max">2</div>
+ </div>
+ <div class="input-group" id="contrast-group">
+ <label for="contrast">Contrast</label>
+ <div class="range-min">-2</div>
+ <input type="range" id="contrast" min="-2" max="2" value="0" class="default-action">
+ <div class="range-max">2</div>
+ </div>
+ <div class="input-group" id="saturation-group">
+ <label for="saturation">Saturation</label>
+ <div class="range-min">-2</div>
+ <input type="range" id="saturation" min="-2" max="2" value="0" class="default-action">
+ <div class="range-max">2</div>
+ </div>
+ <div class="input-group" id="special_effect-group">
+ <label for="special_effect">Special Effect</label>
+ <select id="special_effect" class="default-action">
+ <option value="0" selected="selected">No Effect</option>
+ <option value="1">Negative</option>
+ <option value="2">Grayscale</option>
+ <option value="3">Red Tint</option>
+ <option value="4">Green Tint</option>
+ <option value="5">Blue Tint</option>
+ <option value="6">Sepia</option>
+ </select>
+ </div>
+ <div class="input-group" id="awb-group">
+ <label for="awb">AWB</label>
+ <div class="switch">
+ <input id="awb" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="awb"></label>
+ </div>
+ </div>
+ <div class="input-group" id="awb_gain-group">
+ <label for="awb_gain">AWB Gain</label>
+ <div class="switch">
+ <input id="awb_gain" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="awb_gain"></label>
+ </div>
+ </div>
+ <div class="input-group" id="wb_mode-group">
+ <label for="wb_mode">WB Mode</label>
+ <select id="wb_mode" class="default-action">
+ <option value="0" selected="selected">Auto</option>
+ <option value="1">Sunny</option>
+ <option value="2">Cloudy</option>
+ <option value="3">Office</option>
+ <option value="4">Home</option>
+ </select>
+ </div>
+ <div class="input-group" id="aec-group">
+ <label for="aec">AEC SENSOR</label>
+ <div class="switch">
+ <input id="aec" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="aec"></label>
+ </div>
+ </div>
+ <div class="input-group" id="aec2-group">
+ <label for="aec2">AEC DSP</label>
+ <div class="switch">
+ <input id="aec2" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="aec2"></label>
+ </div>
+ </div>
+ <div class="input-group" id="ae_level-group">
+ <label for="ae_level">AE Level</label>
+ <div class="range-min">-2</div>
+ <input type="range" id="ae_level" min="-2" max="2" value="0" class="default-action">
+ <div class="range-max">2</div>
+ </div>
+ <div class="input-group" id="aec_value-group">
+ <label for="aec_value">Exposure</label>
+ <div class="range-min">0</div>
+ <input type="range" id="aec_value" min="0" max="1200" value="204" class="default-action">
+ <div class="range-max">1200</div>
+ </div>
+ <div class="input-group" id="agc-group">
+ <label for="agc">AGC</label>
+ <div class="switch">
+ <input id="agc" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="agc"></label>
+ </div>
+ </div>
+ <div class="input-group hidden" id="agc_gain-group">
+ <label for="agc_gain">Gain</label>
+ <div class="range-min">1x</div>
+ <input type="range" id="agc_gain" min="0" max="30" value="5" class="default-action">
+ <div class="range-max">31x</div>
+ </div>
+ <div class="input-group" id="gainceiling-group">
+ <label for="gainceiling">Gain Ceiling</label>
+ <div class="range-min">2x</div>
+ <input type="range" id="gainceiling" min="0" max="6" value="0" class="default-action">
+ <div class="range-max">128x</div>
+ </div>
+ <div class="input-group" id="bpc-group">
+ <label for="bpc">BPC</label>
+ <div class="switch">
+ <input id="bpc" type="checkbox" class="default-action">
+ <label class="slider" for="bpc"></label>
+ </div>
+ </div>
+ <div class="input-group" id="wpc-group">
+ <label for="wpc">WPC</label>
+ <div class="switch">
+ <input id="wpc" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="wpc"></label>
+ </div>
+ </div>
+ <div class="input-group" id="raw_gma-group">
+ <label for="raw_gma">Raw GMA</label>
+ <div class="switch">
+ <input id="raw_gma" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="raw_gma"></label>
+ </div>
+ </div>
+ <div class="input-group" id="lenc-group">
+ <label for="lenc">Lens Correction</label>
+ <div class="switch">
+ <input id="lenc" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="lenc"></label>
+ </div>
+ </div>
+ <div class="input-group" id="hmirror-group">
+ <label for="hmirror">H-Mirror</label>
+ <div class="switch">
+ <input id="hmirror" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="hmirror"></label>
+ </div>
+ </div>
+ <div class="input-group" id="vflip-group">
+ <label for="vflip">V-Flip</label>
+ <div class="switch">
+ <input id="vflip" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="vflip"></label>
+ </div>
+ </div>
+ <div class="input-group" id="dcw-group">
+ <label for="dcw">DCW (Downsize EN)</label>
+ <div class="switch">
+ <input id="dcw" type="checkbox" class="default-action" checked="checked">
+ <label class="slider" for="dcw"></label>
+ </div>
+ </div>
+ <div class="input-group" id="colorbar-group">
+ <label for="colorbar">Color Bar</label>
+ <div class="switch">
+ <input id="colorbar" type="checkbox" class="default-action">
+ <label class="slider" for="colorbar"></label>
+ </div>
+ </div>
+ <div class="input-group" id="led-group">
+ <label for="led_intensity">LED Intensity</label>
+ <div class="range-min">0</div>
+ <input type="range" id="led_intensity" min="0" max="255" value="0" class="default-action">
+ <div class="range-max">255</div>
+ </div>
+ <div class="input-group" id="face_detect-group">
+ <label for="face_detect">Face Detection</label>
+ <div class="switch">
+ <input id="face_detect" type="checkbox" class="default-action">
+ <label class="slider" for="face_detect"></label>
+ </div>
+ </div>
+ <div class="input-group" id="face_recognize-group">
+ <label for="face_recognize">Face Recognition</label>
+ <div class="switch">
+ <input id="face_recognize" type="checkbox" class="default-action">
+ <label class="slider" for="face_recognize"></label>
+ </div>
+ </div>
+ <div class="input-group" id="flash-group">
+ <label for="flash">Flash</label>
+ <div class="switch">
+ <input id="flash" type="checkbox" class="default-action">
+ <label class="slider" for="flash"></label>
+ </div>
+ </div>
+
+ <section id="buttons">
+ <button id="get-still">Get Still</button>
+ <button id="toggle-stream">Start Stream</button>
+ <button id="face_enroll" class="disabled" disabled="disabled">Enroll Face</button>
+ </section>
+
+ <div style="margin-top: 8px;"><center><span style="font-weight: bold;">Advanced Settings</span></center></div>
+ <hr style="width:100%">
+ <label for="nav-toggle-reg" class="toggle-section-label">&#9776;&nbsp;&nbsp;Register Get/Set</label><input type="checkbox" id="nav-toggle-reg" class="hidden toggle-section-button" checked="checked">
+ <section class="toggle-section">
+ <!--h4>Set Register</h4-->
+ <div class="input-group" id="set-reg-group">
+ <label for="set-reg">Reg, Mask, Value</label>
+ <div class="text">
+ <input id="reg-addr" type="text" minlength="4" maxlength="6" size="6" value="0x111">
+ </div>
+ <div class="text">
+ <input id="reg-mask" type="text" minlength="4" maxlength="4" size="4" value="0x80">
+ </div>
+ <div class="text">
+ <input id="reg-value" type="text" minlength="4" maxlength="4" size="4" value="0x80">
+ </div>
+ <button class="inline-button" id="set-reg">Set</button>
+ </div>
+ <hr style="width:50%">
+ <!--h4>Get Register</h4-->
+ <div class="input-group" id="get-reg-group">
+ <label for="get-reg">Reg, Mask</label>
+ <div class="text">
+ <input id="get-reg-addr" type="text" minlength="4" maxlength="6" size="6" value="0x111">
+ </div>
+ <div class="text">
+ <input id="get-reg-mask" type="text" minlength="4" maxlength="6" size="6" value="0x80">
+ </div>
+ <button class="inline-button" id="get-reg">Get</button>
+ </div>
+ <div class="input-group">
+ <label for="get-reg-value">Value</label>
+ <div class="text">
+ <span id="get-reg-value">0x1234</span>
+ </div>
+ </div>
+ </section>
+ <hr style="width:100%">
+ <label for="nav-toggle-2640pll" class="toggle-section-label">&#9776;&nbsp;&nbsp;CLK</label><input type="checkbox" id="nav-toggle-2640pll" class="hidden toggle-section-button" checked="checked">
+ <section class="toggle-section">
+
+ <div class="input-group"><label for="2640pll1">CLK 2X</label><div class="switch"><input id="2640pll1" type="checkbox" class="reg-action" reg="0x111" offset="7" mask="0x01"><label class="slider" for="2640pll1"></label></div></div>
+
+ <div class="input-group"><label for="2640pll3">CLK DIV</label><div class="text">0<input id="2640pll3" type="text" minlength="1" maxlength="2" size="2" value="1" class="reg-action" reg="0x111" offset="0" mask="0x3f">63</div></div>
+ <div class="input-group"><label for="2640pll5">Auto PCLK</label><div class="switch"><input id="2640pll5" type="checkbox" class="reg-action" reg="0xd3" offset="7" mask="0x01"><label class="slider" for="2640pll5"></label></div></div>
+ <div class="input-group"><label for="2640pll4">PCLK DIV</label><div class="text">0<input id="2640pll4" type="text" minlength="1" maxlength="3" size="3" value="4" class="reg-action" reg="0xd3" offset="0" mask="0x7f">127</div></div>
+
+ </section>
+ <hr style="width:100%">
+ <label for="nav-toggle-win" class="toggle-section-label">&#9776;&nbsp;&nbsp;Window</label><input type="checkbox" id="nav-toggle-win" class="hidden toggle-section-button" checked="checked">
+ <section class="toggle-section">
+
+ <div class="input-group">
+ <label for="start-x">Sensor Resolution</label><select id="start-x">
+ <option value="2">CIF (400x296)</option>
+ <option value="1">SVGA (800x600)</option>
+ <option value="0" selected="selected">UXGA (1600x1200)</option>
+ </select>
+ </div>
+
+ <div class="input-group" id="set-offset-res-group">
+ <label for="offset-x">Offset</label>
+ <div class="text">
+ X:<input id="offset-x" type="text" minlength="1" maxlength="3" size="6" value="400">
+ </div>
+ <div class="text">
+ Y:<input id="offset-y" type="text" minlength="1" maxlength="3" size="6" value="300">
+ </div>
+ </div>
+ <div class="input-group" id="set-total-res-group">
+ <label for="total-x">Window Size</label>
+ <div class="text">
+ X:<input id="total-x" type="text" minlength="1" maxlength="4" size="6" value="800">
+ </div>
+ <div class="text">
+ Y:<input id="total-y" type="text" minlength="1" maxlength="4" size="6" value="600">
+ </div>
+ </div>
+ <div class="input-group" id="set-output-res-group">
+ <label for="output-x">Output Size</label>
+ <div class="text">
+ X:<input id="output-x" type="text" minlength="1" maxlength="4" size="6" value="320">
+ </div>
+ <div class="text">
+ Y:<input id="output-y" type="text" minlength="1" maxlength="4" size="6" value="240">
+ </div>
+ </div>
+ <button id="set-resolution">Set Resolution</button>
+ </section>
+
+
+
+ </nav>
+ </div>
+ <figure>
+ <div id="stream-container" class="image-container hidden">
+ <a id="save-still" href="#" class="button save" download="capture.jpg">Save</a>
+ <div class="close" id="close-stream">×</div>
+ <img id="stream" src="" crossorigin>
+ </div>
+ </figure>
+ </div>
+ </section>
+ <script>
+document.addEventListener('DOMContentLoaded', function (event) {
+ var baseHost = document.location.origin
+ var streamUrl = baseHost + ':81'
+
+ function fetchUrl(url, cb){
+ fetch(url)
+ .then(function (response) {
+ if (response.status !== 200) {
+ cb(response.status, response.statusText);
+ } else {
+ response.text().then(function(data){
+ cb(200, data);
+ }).catch(function(err) {
+ cb(-1, err);
+ });
+ }
+ })
+ .catch(function(err) {
+ cb(-1, err);
+ });
+ }
+
+ function setReg(reg, offset, mask, value, cb){
+ //console.log('Set Reg', '0x'+reg.toString(16), offset, '0x'+mask.toString(16), '0x'+value.toString(16), '('+value+')');
+ value = (value & mask) << offset;
+ mask = mask << offset;
+ fetchUrl(`${baseHost}/reg?reg=${reg}&mask=${mask}&val=${value}`, cb);
+ }
+
+ function getReg(reg, offset, mask, cb){
+ mask = mask << offset;
+ fetchUrl(`${baseHost}/greg?reg=${reg}&mask=${mask}`, function(code, txt){
+ let value = 0;
+ if(code == 200){
+ value = parseInt(txt);
+ value = (value & mask) >> offset;
+ txt = ''+value;
+ }
+ cb(code, txt);
+ });
+ }
+
+ function setXclk(xclk, cb){
+ fetchUrl(`${baseHost}/xclk?xclk=${xclk}`, cb);
+ }
+
+ function setWindow(start_x, start_y, end_x, end_y, offset_x, offset_y, total_x, total_y, output_x, output_y, scaling, binning, cb){
+ fetchUrl(`${baseHost}/resolution?sx=${start_x}&sy=${start_y}&ex=${end_x}&ey=${end_y}&offx=${offset_x}&offy=${offset_y}&tx=${total_x}&ty=${total_y}&ox=${output_x}&oy=${output_y}&scale=${scaling}&binning=${binning}`, cb);
+ }
+
+ const setRegButton = document.getElementById('set-reg')
+ setRegButton.onclick = () => {
+ let reg = parseInt(document.getElementById('reg-addr').value);
+ let mask = parseInt(document.getElementById('reg-mask').value);
+ let value = parseInt(document.getElementById('reg-value').value);
+
+ setReg(reg, 0, mask, value, function(code, txt){
+ if(code != 200){
+ alert('Error['+code+']: '+txt);
+ }
+ });
+ }
+
+ const getRegButton = document.getElementById('get-reg')
+ getRegButton.onclick = () => {
+ let reg = parseInt(document.getElementById('get-reg-addr').value);
+ let mask = parseInt(document.getElementById('get-reg-mask').value);
+ let value = document.getElementById('get-reg-value');
+
+ getReg(reg, 0, mask, function(code, txt){
+ if(code != 200){
+ value.innerHTML = 'Error['+code+']: '+txt;
+ } else {
+ value.innerHTML = '0x'+parseInt(txt).toString(16)+' ('+txt+')';
+ }
+ });
+ }
+
+ const setXclkButton = document.getElementById('set-xclk')
+ setXclkButton.onclick = () => {
+ let xclk = parseInt(document.getElementById('xclk').value);
+
+ setXclk(xclk, function(code, txt){
+ if(code != 200){
+ alert('Error['+code+']: '+txt);
+ }
+ });
+ }
+
+ const setResButton = document.getElementById('set-resolution')
+ setResButton.onclick = () => {
+ let start_x = parseInt(document.getElementById('start-x').value);
+ let offset_x = parseInt(document.getElementById('offset-x').value);
+ let offset_y = parseInt(document.getElementById('offset-y').value);
+ let total_x = parseInt(document.getElementById('total-x').value);
+ let total_y = parseInt(document.getElementById('total-y').value);
+ let output_x = parseInt(document.getElementById('output-x').value);
+ let output_y = parseInt(document.getElementById('output-y').value);
+
+ setWindow(start_x, 0, 0, 0, offset_x, offset_y, total_x, total_y, output_x, output_y, false, false, function(code, txt){
+ if(code != 200){
+ alert('Error['+code+']: '+txt);
+ }
+ });
+ }
+
+ const setRegValue = (el) => {
+ let reg = el.attributes.reg?parseInt(el.attributes.reg.nodeValue):0;
+ let offset = el.attributes.offset?parseInt(el.attributes.offset.nodeValue):0;
+ let mask = el.attributes.mask?parseInt(el.attributes.mask.nodeValue):255;
+ let value = 0;
+ switch (el.type) {
+ case 'checkbox':
+ value = el.checked ? mask : 0;
+ break;
+ case 'range':
+ case 'text':
+ case 'select-one':
+ value = el.value;
+ break
+ default:
+ return;
+ }
+
+ setReg(reg, offset, mask, value, function(code, txt){
+ if(code != 200){
+ alert('Error['+code+']: '+txt);
+ }
+ });
+ }
+
+ // Attach on change action for register elements
+ document
+ .querySelectorAll('.reg-action')
+ .forEach(el => {
+ if (el.type === 'text') {
+ el.onkeyup = function(e){
+ if(e.keyCode == 13){
+ setRegValue(el);
+ }
+ }
+ } else {
+ el.onchange = () => setRegValue(el)
+ }
+ })
+
+
+ const updateRegValue = (el, value, updateRemote) => {
+ let initialValue;
+ let offset = el.attributes.offset?parseInt(el.attributes.offset.nodeValue):0;
+ let mask = (el.attributes.mask?parseInt(el.attributes.mask.nodeValue):255) << offset;
+ value = (value & mask) >> offset;
+ if (el.type === 'checkbox') {
+ initialValue = el.checked
+ value = !!value
+ el.checked = value
+ } else {
+ initialValue = el.value
+ el.value = value
+ }
+ }
+
+
+ const printReg = (el) => {
+ let reg = el.attributes.reg?parseInt(el.attributes.reg.nodeValue):0;
+ let offset = el.attributes.offset?parseInt(el.attributes.offset.nodeValue):0;
+ let mask = el.attributes.mask?parseInt(el.attributes.mask.nodeValue):255;
+ let value = 0;
+ switch (el.type) {
+ case 'checkbox':
+ value = el.checked ? mask : 0;
+ break;
+ case 'range':
+ case 'select-one':
+ value = el.value;
+ break
+ default:
+ return;
+ }
+ value = (value & mask) << offset;
+ return '0x'+reg.toString(16)+', 0x'+value.toString(16);
+ }
+
+
+
+ const hide = el => {
+ el.classList.add('hidden')
+ }
+ const show = el => {
+ el.classList.remove('hidden')
+ }
+
+ const disable = el => {
+ el.classList.add('disabled')
+ el.disabled = true
+ }
+
+ const enable = el => {
+ el.classList.remove('disabled')
+ el.disabled = false
+ }
+
+ const updateValue = (el, value, updateRemote) => {
+ updateRemote = updateRemote == null ? true : updateRemote
+ let initialValue
+ if (el.type === 'checkbox') {
+ initialValue = el.checked
+ value = !!value
+ el.checked = value
+ } else {
+ initialValue = el.value
+ el.value = value
+ }
+
+ if (updateRemote && initialValue !== value) {
+ updateConfig(el);
+ } else if(!updateRemote){
+ if(el.id === "aec"){
+ value ? hide(exposure) : show(exposure)
+ } else if(el.id === "agc"){
+ if (value) {
+ show(gainCeiling)
+ hide(agcGain)
+ } else {
+ hide(gainCeiling)
+ show(agcGain)
+ }
+ } else if(el.id === "awb_gain"){
+ value ? show(wb) : hide(wb)
+ } else if(el.id === "face_recognize"){
+ value ? enable(enrollButton) : disable(enrollButton)
+ } else if(el.id == "led_intensity"){
+ value > -1 ? show(ledGroup) : hide(ledGroup)
+ }
+ }
+ }
+
+ function updateConfig (el) {
+ let value
+ switch (el.type) {
+ case 'checkbox':
+ value = el.checked ? 1 : 0
+ break
+ case 'range':
+ case 'select-one':
+ value = el.value
+ break
+ case 'button':
+ case 'submit':
+ value = '1'
+ break
+ default:
+ return
+ }
+
+ const query = `${baseHost}/control?var=${el.id}&val=${value}`
+
+ fetch(query)
+ .then(response => {
+ console.log(`request to ${query} finished, status: ${response.status}`)
+ })
+ }
+
+ document
+ .querySelectorAll('.close')
+ .forEach(el => {
+ el.onclick = () => {
+ hide(el.parentNode)
+ }
+ })
+
+ // read initial values
+ fetch(`${baseHost}/status`)
+ .then(function (response) {
+ return response.json()
+ })
+ .then(function (state) {
+ document
+ .querySelectorAll('.default-action')
+ .forEach(el => {
+ updateValue(el, state[el.id], false)
+ })
+ document
+ .querySelectorAll('.reg-action')
+ .forEach(el => {
+ let reg = el.attributes.reg?parseInt(el.attributes.reg.nodeValue):0;
+ if(reg == 0){
+ return;
+ }
+ updateRegValue(el, state['0x'+reg.toString(16)], false)
+ })
+ })
+
+ const view = document.getElementById('stream')
+ const viewContainer = document.getElementById('stream-container')
+ const stillButton = document.getElementById('get-still')
+ const streamButton = document.getElementById('toggle-stream')
+ const enrollButton = document.getElementById('face_enroll')
+ const closeButton = document.getElementById('close-stream')
+ const saveButton = document.getElementById('save-still')
+ const ledGroup = document.getElementById('led-group')
+
+ const stopStream = () => {
+ window.stop();
+ streamButton.innerHTML = 'Start Stream'
+ }
+
+ const startStream = () => {
+ view.src = `${streamUrl}/stream`
+ show(viewContainer)
+ streamButton.innerHTML = 'Stop Stream'
+ }
+
+ // Attach actions to buttons
+ stillButton.onclick = () => {
+ stopStream()
+ view.src = `${baseHost}/capture?_cb=${Date.now()}`
+ show(viewContainer)
+ }
+
+ closeButton.onclick = () => {
+ stopStream()
+ hide(viewContainer)
+ }
+
+ streamButton.onclick = () => {
+ const streamEnabled = streamButton.innerHTML === 'Stop Stream'
+ if (streamEnabled) {
+ stopStream()
+ } else {
+ startStream()
+ }
+ }
+
+ enrollButton.onclick = () => {
+ updateConfig(enrollButton)
+ }
+
+ saveButton.onclick = () => {
+ var canvas = document.createElement("canvas");
+ canvas.width = view.width;
+ canvas.height = view.height;
+ document.body.appendChild(canvas);
+ var context = canvas.getContext('2d');
+ context.drawImage(view,0,0);
+ try {
+ var dataURL = canvas.toDataURL('image/jpeg');
+ saveButton.href = dataURL;
+ var d = new Date();
+ saveButton.download = d.getFullYear() + ("0"+(d.getMonth()+1)).slice(-2) + ("0" + d.getDate()).slice(-2) + ("0" + d.getHours()).slice(-2) + ("0" + d.getMinutes()).slice(-2) + ("0" + d.getSeconds()).slice(-2) + ".jpg";
+ } catch (e) {
+ console.error(e);
+ }
+ canvas.parentNode.removeChild(canvas);
+ }
+
+ // Attach default on change action
+ document
+ .querySelectorAll('.default-action')
+ .forEach(el => {
+ el.onchange = () => updateConfig(el)
+ })
+
+ // Custom actions
+ // Gain
+ const agc = document.getElementById('agc')
+ const agcGain = document.getElementById('agc_gain-group')
+ const gainCeiling = document.getElementById('gainceiling-group')
+ agc.onchange = () => {
+ updateConfig(agc)
+ if (agc.checked) {
+ show(gainCeiling)
+ hide(agcGain)
+ } else {
+ hide(gainCeiling)
+ show(agcGain)
+ }
+ }
+
+ // Exposure
+ const aec = document.getElementById('aec')
+ const exposure = document.getElementById('aec_value-group')
+ aec.onchange = () => {
+ updateConfig(aec)
+ aec.checked ? hide(exposure) : show(exposure)
+ }
+
+ // AWB
+ const awb = document.getElementById('awb_gain')
+ const wb = document.getElementById('wb_mode-group')
+ awb.onchange = () => {
+ updateConfig(awb)
+ awb.checked ? show(wb) : hide(wb)
+ }
+
+ // Detection and framesize
+ const detect = document.getElementById('face_detect')
+ const recognize = document.getElementById('face_recognize')
+ const framesize = document.getElementById('framesize')
+
+ framesize.onchange = () => {
+ updateConfig(framesize)
+ if (framesize.value > 5) {
+ updateValue(detect, false)
+ updateValue(recognize, false)
+ }
+ }
+
+ detect.onchange = () => {
+ if (framesize.value > 5) {
+ alert("Please select CIF or lower resolution before enabling this feature!");
+ updateValue(detect, false)
+ return;
+ }
+ updateConfig(detect)
+ if (!detect.checked) {
+ disable(enrollButton)
+ updateValue(recognize, false)
+ }
+ }
+
+ recognize.onchange = () => {
+ if (framesize.value > 5) {
+ alert("Please select CIF or lower resolution before enabling this feature!");
+ updateValue(recognize, false)
+ return;
+ }
+ updateConfig(recognize)
+ if (recognize.checked) {
+ enable(enrollButton)
+ updateValue(detect, true)
+ } else {
+ disable(enrollButton)
+ }
+ }
+})
+
+ </script>
+ </body>
+</html>