Hardware components | ||||||
| × | 1 | ||||
Software apps and online services | ||||||
| ||||||
|
#25projectsofchristmas
A Hall effect sensor has nothing to do with acoustic reverberation (German for reverb = hall) but is named after Edwin Hall and is used to measure magnetic fields. The output voltage of such a sensor is directly proportional to the strength of the magnetic field to which the sensor is exposed. Don't ask me why, but the ESP32 has an integrated Hall effect sensor. This means that you can measure the presence and strength of a magnet if the magnet is in the right place above the M5Stack Core module. But where exactly is this right spot?
Let's measure itThe sensor can be addressed via a direct API call. With a simple function I can read out the average value over a number of measurements:
float ESP32_hallRead(int count, float scale)
{
float value = 0;
// mean value filter
for (int n = 0; n < count; n++)
value += hallRead();
return (value / count) * scale;
}
So far so good, but how can I determine where the hot spot of the sensor is?
A simple method is to display a grid on the display and then measure the value of the Hall-effect sensor at each position.
And to make the measurement easy, the software displays the measurement point one by one each time. The point is randomly selected to avoid systematic measurement errors.
Note: The screenshots are made with my M5Screen2bmp() function, which is described in this article.
How the code worksA two-dimensional array for all measuring points is declared:
// the dimensions of the raster field on the screen
#define raster_steps 20 // 80 = 5x4 // 40 = 9x7 = 63 // 20 = 17x13 = 221
const int raster_x = (SCREEN_WIDTH / raster_steps)+1;
const int raster_y = (SCREEN_HEIGHT / raster_steps)+1;
// to count how many scans are done
int raster_count = 0;
// rater positions
int xpos, ypos;
// raterfield to store which positions are already scanned
float raster_field[raster_x][raster_y];
At the beginning, each field of the array is initialized with the value -9999.0. This is used later to find the measurement points where measurements have not yet been taken.
// init the raster fiels with zero values
for(int x=0; x<raster_x; x++){
for(int y=0; y<raster_y; y++){
raster_field[x][y] = -9999.0;
M5.Lcd.drawCircle(x*raster_steps, y*raster_steps, 10, TFT_RED);
}
}
All measuring points are then represented by red circles. If the right key is pressed, a measuring position is randomly selected and a white circle is displayed at that position.
// left Button
if (M5.BtnC.wasPressed()){
Clear_Screen();
// first point to map
xpos = random(raster_x);
ypos = random(raster_y);
M5.Lcd.drawCircle(xpos*raster_steps, ypos*raster_steps, 10, TFT_WHITE);
Serial.println(raster_x*raster_y);
Serial.println("\n\nn x y value");
writeFile(SD, "/data.txt", "n x y value\n", true);
M5Screen2bmp(SD, "/scr_04.bmp");
}
Now the magnet should be held exactly over this position on the display. Then, by pressing the middle button, the measured value of the Hall effect sensor is stored in the array.
The positions which have already been measured are briefly displayed by green circles. Then a white circle appears at a new position that has not yet been measured.
The resultsWhen all points have been measured, the measured value for each position is shown on the display by a false color representation.
False colors are a useful tool to visualize three dimensional data. The display of the M5Stack uses the RGB565 colors and with a simple function 64 color levels are created in the color range Blue -> Cyan -> Green -> Yellow -> Red:
uint32_t ColorPalette565_6bit(uint16_t value) {
// ensure the constraints [0..63] for input value
if(value > 63)
value = 63;
int r = 0;
int g = ((value)*4);
int b = 63;
if(value >= 16){
g = 63;
b = 63-((value-16)*4);
if(value >= 24){
r = ((value-24)*4);
if(value >= 42){
b = 0;
r = 63;
g = 63-((value-42)*4);
}
}
}
// ensure the constraints [0..63] for 565 color
if(r < 0) r = 0;
if(r > 63) r = 63;
if(g < 0) g = 0;
if(g > 63) g = 63;
if(b < 0) b = 0;
if(b > 63) b = 63;
// calculate the 565 Color
return ((r & 0x3E) << 10) | ((g & 0x3F) << 5) | ((b & 0x3E) >> 1);
}
In addition to the presentation of the results on the display, the data are also stored on the SD card in a file (data.txt). This data can then be analyzed on a PC to evaluate the position more precisely:
Very accurate data are obtained when a large number of points are measured. This takes a little longer, but the quality of the data is worth the effort:
The results can vary with the type and characteristics of the magnets. Here is another result with a different magnet:
But the measurements agree on the position: The Hall Effect sensor has its sensitive measuring point at the screen position of (220.40).
ApplicationsI don't know yet exactly what this result can be useful for, but it was fun to determine the position.
Let me know if you have a use for it. I am happy about any feedback.
Regards,
Hans-Günther Nusseck
# R Script to analyze and visualize the measured data from the Hall-Sensor.
#
# see Hackster.io project page for details and the results:
# https://www.hackster.io/hague/where-on-earth-is-the-hall-effect-sensor-of-the-esp32-21d7b3
fileName <- file.choose()
Hallsensor_Data <- read.table(fileName,header=TRUE, sep = "",dec = ".",numerals = c("warn.loss"))
#############################################################################
# Display the color coded representation matrix
# note:
# the y-axis need to be flipped because the origin on the display is the top left corner
x <- Hallsensor_Data[,2]
y <- max(Hallsensor_Data[,3])-Hallsensor_Data[,3]
z <- Hallsensor_Data[,4]
plot(x,z)
plot(y,z)
#- Here's a useful function to normalize a vector of data
#- to between 0 and 1.
normalize.vector <- function(x, ...) {
(x-min(x, ...))/max(x-min(x, ...), ...)
}
#fields is useful for colorbars
if (!require("fields")) {
install.packages("fields", dependencies = TRUE)
library(fields)
}
#Make the scatter plot
#- Making a colorbar is a multi-step process. First
#- let's create a color ramp from which to sample colors
my.colramp <- colorRamp(colors=c("blue", "lightblue",
"lightgreen", "yellow",
"orange", "red"))
# Grayscale Ramp
#my.colramp <- colorRamp(colors=c("gray75",
# "gray60", "gray45",
# "gray30", "gray15", "gray0"))
#- "my.colramp" is a function that takes a value [0,1] and
#- returns an rgb value for the appropriate color in the ramp.
#- Normalize the data of the z column
z.norm <- normalize.vector(z, na.rm=T)
#- Use the normalized values to get colors
z.col.components <- my.colramp(z.norm)
#- Convert the rgb values into actual colors
z.cols <- rgb(z.col.components, maxColorValue=255)
#- Use the same color ramp to make colors for the bar
my.colbar.cols <- rgb(my.colramp(seq(0,1,l=10)), maxColorValue=255)
#plotting margins.
# buttom, left, top, right
# Style "i" (internal) just finds an axis with pretty labels that fits within the original data range
# Style "r" (regular) first extends the data range by 4 percent at each end and then finds an axis with pretty labels that fits within the extended range.
par(mar = c(5,5,2.5,6.5), font = 2, xaxs = "r",yaxs = "r")
# change the cex value depending on the plot size and the grid dimensions
plot(x,y,main="Hall sensor sensitivity over the area of the screen",
xlab='x position',ylab='y position', pch=15, col=z.cols,
xlim = range(x),ylim=range(y), cex = 4,
panel.first=grid(lty= "dashed"))
# Add a colorbar
#- For the colorbar, "fields" is a fairly useful package.
#- It provides "image.plot" which will allow you to plot
#- a colorbar over an existing plot.
# see: http://www.image.ucar.edu/Software/Fields/Help/image.plot.html
# and: https://rdrr.io/cran/fields/man/image.plot.html
image.plot(legend.only=T, add=T, horizontal=F,
col=my.colbar.cols, zlim=range(z),
legend.lab="Hall Sensor Value", legend.line=2.5)
#############################################################################
/******************************************************************************
* M5Stack Hall Sensor detector
* Simple program to detect the position of the Hall sensor on the M5STack Core
*
* Hague Nusseck @ electricidea
* v1.0 | 19.December.2021
*
*
* Check the complete project at Hackster.io:
* https://www.hackster.io/hague/where-on-earth-is-the-hall-effect-sensor-of-the-esp32-21d7b3
*
*
* Distributed as-is; no warranty is given.
******************************************************************************/
#include <Arduino.h>
#include <M5Stack.h>
// install the library:
// pio lib install "M5Stack"
// Free Fonts for nice looking fonts on the screen
#include "Free_Fonts.h"
// logo with 150x150 pixel size in XBM format
// check the file header for more information
#include "electric-idea_logo.h"
// Stuff for the Graphical output
// The M5Stack screen pixel is 320x240, with the top left corner of the screen as the origin (0,0)
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
// speaker DAC, only 8 Bit
#define M5STACK_SPEAKER_PIN 25
// the dimensions of the raster field on the screen
#define raster_steps 20 // 80 = 5x4 // 40 = 9x7 = 63 // 20 = 17x13 = 221
const int raster_x = (SCREEN_WIDTH / raster_steps)+1;
const int raster_y = (SCREEN_HEIGHT / raster_steps)+1;
// to count how many scans are done
int raster_count = 0;
// rater positions
int xpos, ypos;
// raterfield to store which positions are already scanned
float raster_field[raster_x][raster_y];
// Offset to cerrect the hall sensor zero value
float HallOffset = 0;
float MaxValue = -9999.0;
float MinValue = 9999.0;
//==============================================================
// function forward declaration
void Clear_Screen();
float ESP32_hallRead(int count, float scale = 10.0);
bool M5Screen2bmp(fs::FS &fs, const char * path);
uint32_t ColorPalette565_6bit(uint16_t value);
bool writeFile(fs::FS &fs, const char * path, const char * data, bool new_file = false);
void setup() {
// initialize the M5Stack object
M5.begin();
// configure the Lcd display
M5.Lcd.setBrightness(100); //Brightness (0: Off - 255: Full)
M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
M5.Lcd.setTextSize(1);
Clear_Screen();
// draw logo in the center of the screen
M5.Lcd.drawXBitmap((int)(320-logoWidth)/2, (int)(240-logoHeight)/2, logo, logoWidth, logoHeight, TFT_WHITE);
// configure centered String output
M5.Lcd.setTextDatum(CC_DATUM);
M5.Lcd.setFreeFont(FF2);
M5.Lcd.drawString("Hall Sensor Mapping", (int)(M5.Lcd.width()/2), 20, 1);
M5.Lcd.setFreeFont(FF1);
M5.Lcd.drawString("Version 1.0 | 19.12.2021", (int)(M5.Lcd.width()/2), M5.Lcd.height()-20, 1);
// print Welcome screen over Serial connection
Serial.println("Hall Sensor Mapping");
M5Screen2bmp(SD, "/scr_01.bmp");
// wait 5 seconds before start file action
delay(5000);
Clear_Screen();
// make sure that the speaker is quite
dacWrite(M5STACK_SPEAKER_PIN, 0);
// callibrate the Hall Sensor value to the magnetic field at start up
M5.Lcd.drawString("INIT Hall Sensor", (int)(M5.Lcd.width()/2), (int)(M5.Lcd.height()/2), 1);
delay(1000);
Clear_Screen();
HallOffset = ESP32_hallRead(1500);
// init the raster fiels with zero values
for(int x=0; x<raster_x; x++){
for(int y=0; y<raster_y; y++){
raster_field[x][y] = -9999.0;
M5.Lcd.drawCircle(x*raster_steps, y*raster_steps, 10, TFT_RED);
}
}
M5Screen2bmp(SD, "/scr_02.bmp");
delay(1000);
M5.Lcd.drawString("Press right Button to start", (int)(M5.Lcd.width()/2), (int)(M5.Lcd.height()/2)-20, 1);
M5.Lcd.drawString("Center Button to measure", (int)(M5.Lcd.width()/2), (int)(M5.Lcd.height()/2)+20, 1);
M5Screen2bmp(SD, "/scr_03.bmp");
// use xpos to indicate the start of the mapping
xpos = -99;
// call M5.update() to empty all detected button presses
M5.update();
}
void loop() {
M5.update();
// left Button
if (M5.BtnC.wasPressed()){
Clear_Screen();
// first point to map
xpos = random(raster_x);
ypos = random(raster_y);
M5.Lcd.drawCircle(xpos*raster_steps, ypos*raster_steps, 10, TFT_WHITE);
Serial.println(raster_x*raster_y);
Serial.println("\n\nn x y value");
writeFile(SD, "/data.txt", "n x y value\n", true);
M5Screen2bmp(SD, "/scr_04.bmp");
}
// center Button
if (M5.BtnB.wasPressed()){
if(xpos >= 0){
float value = ESP32_hallRead(1000)- HallOffset;
raster_field[xpos][ypos] = value;
if(value > MaxValue)
MaxValue = value;
if(value < MinValue)
MinValue = value;
raster_count++;
char Str_buffer[64];
snprintf(Str_buffer, sizeof(Str_buffer), "%i %i %i %8.2f\n", raster_count, xpos*raster_steps, ypos*raster_steps, value);
Serial.printf(Str_buffer);
writeFile(SD, "/data.txt", Str_buffer);
// print all measured points
M5.Lcd.fillScreen(TFT_BLACK);
for(int x=0; x<raster_x; x++){
for(int y=0; y<raster_y; y++){
if(raster_field[x][y] > -9999.0){
M5.Lcd.drawCircle(x*raster_steps, y*raster_steps, 10, TFT_GREEN);
}
}
}
if(raster_count == (raster_x*raster_y)/2){
M5.Lcd.setTextColor(TFT_WHITE, TFT_RED);
M5.Lcd.drawString("Half finished!", (int)(M5.Lcd.width()/2), (int)(M5.Lcd.height()/2), 1);
M5Screen2bmp(SD, "/scr_05.bmp");
delay(2000);
M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
}
delay(200);
// if there are still positions left to measure
if(raster_count < raster_x*raster_y){
// Brutal force method to find the next not yet measured position
while(raster_field[xpos][ypos] > -9999.0){
xpos = random(raster_x);
ypos = random(raster_y);
}
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.drawCircle(xpos*raster_steps, ypos*raster_steps, 10, TFT_WHITE);
} else{
// print all measured points in false colors
M5.Lcd.fillScreen(TFT_BLACK);
for(int x=0; x<raster_x; x++){
for(int y=0; y<raster_y; y++){
// scale measured values to 0..64 for 6bit false color display
int color = round((raster_field[x][y] - MinValue) / (MaxValue - MinValue) * 63.0);
M5.Lcd.fillRect((x*raster_steps)-(raster_steps / 2), (y*raster_steps)-(raster_steps / 2), raster_steps, raster_steps, ColorPalette565_6bit(color));
}
}
M5Screen2bmp(SD, "/result.bmp");
Serial.println("done");
}
}
}
delay(10);
}
/***************************************************************************************
* Function name: Clear_Screen
* Description: Clear the entire screen and add one row
* The added row is important. Otherwise the first row is not visible with print command
***************************************************************************************/
void Clear_Screen(){
M5.Lcd.fillScreen(TFT_BLACK);
M5.Lcd.setCursor(0, 0);
M5.Lcd.println("");
}
/***************************************************************************************
* Function name: ESP32_hallRead
* Description: Return the value from the internal Hall Effect Sensor
* Parameter:
* count = number of averages
* scale = optional paramter to scale the value (Default = 10.0)
***************************************************************************************/
float ESP32_hallRead(int count, float scale)
{
float value = 0;
// mean value filter
for (int n = 0; n < count; n++)
value += hallRead();
return (value / count) * scale;
}
/***************************************************************************************
* Function name: M5Screen2bmp
* Description: Dump the screen to a bmp image File
* Image file format: .bmp
* return value: true: succesfully wrote screen to file
* false: unabel to open file for writing
* example for screen capture onto SD-Card:
* M5Screen2bmp(SD, "/screen.bmp");
* inspired by: https://stackoverflow.com/a/58395323
***************************************************************************************/
bool M5Screen2bmp(fs::FS &fs, const char * path){
// Open file for writing
// The existing image file will be replaced
File file = fs.open(path, FILE_WRITE);
if(file){
// M5Stack: TFT_WIDTH = 240 / TFT_HEIGHT = 320
// M5StickC: TFT_WIDTH = 80 / TFT_HEIGHT = 160
// M5StickCplus: TFT_WIDTH = 135 / TFT_HEIGHT = 240
int image_height = M5.Lcd.height();
int image_width = M5.Lcd.width();
// horizontal line must be a multiple of 4 bytes long
// add padding to fill lines with 0
const uint pad=(4-(3*image_width)%4)%4;
// header size is 54 bytes:
// File header = 14 bytes
// Info header = 40 bytes
uint filesize=54+(3*image_width+pad)*image_height;
unsigned char header[54] = {
'B','M', // BMP signature (Windows 3.1x, 95, NT, …)
0,0,0,0, // image file size in bytes
0,0,0,0, // reserved
54,0,0,0, // start of pixel array
40,0,0,0, // info header size
0,0,0,0, // image width
0,0,0,0, // image height
1,0, // number of color planes
24,0, // bits per pixel
0,0,0,0, // compression
0,0,0,0, // image size (can be 0 for uncompressed images)
0,0,0,0, // horizontal resolution (dpm)
0,0,0,0, // vertical resolution (dpm)
0,0,0,0, // colors in color table (0 = none)
0,0,0,0 };// important color count (0 = all colors are important)
// fill filesize, width and heigth in the header array
for(uint i=0; i<4; i++) {
header[ 2+i] = (char)((filesize>>(8*i))&255);
header[18+i] = (char)((image_width >>(8*i))&255);
header[22+i] = (char)((image_height >>(8*i))&255);
}
// write the header to the file
file.write(header, 54);
// To keep the required memory low, the image is captured line by line
unsigned char line_data[image_width*3+pad];
// initialize padded pixel with 0
for(int i=(image_width-1)*3; i<(image_width*3+pad); i++){
line_data[i]=0;
}
// The coordinate origin of a BMP image is at the bottom left.
// Therefore, the image must be read from bottom to top.
for(int y=image_height; y>0; y--){
// get one line of the screen content
M5.Lcd.readRectRGB(0, y-1, image_width, 1, line_data);
// BMP color order is: Blue, Green, Red
// return values from readRectRGB is: Red, Green, Blue
// therefore: R und B need to be swapped
for(int x=0; x<image_width; x++){
unsigned char r_buff = line_data[x*3];
line_data[x*3] = line_data[x*3+2];
line_data[x*3+2] = r_buff;
}
// write the line to the file
file.write(line_data, (image_width*3)+pad);
}
file.close();
return true;
}
return false;
}
/***************************************************************************************
* Function name: ColorPalette565_6bit
* Description: 6 bit False color palette
* Parameter: unsigned integer value fom 0 to 63
* retrun a 565 Color Palette with colors from 0..63
* Colors goes: Blue -> Cyan -> Green -> Yellow -> Red
* Example:
* for(int i=0; i<64; i++)
* M5.Lcd.fillRect(i*5, 0, 5, 100, ColorPalette565_6bit(i));
***************************************************************************************/
uint32_t ColorPalette565_6bit(uint16_t value) {
// ensure the constraints [0..63] for input value
if(value > 63)
value = 63;
int r = 0;
int g = ((value)*4);
int b = 63;
if(value >= 16){
g = 63;
b = 63-((value-16)*4);
if(value >= 24){
r = ((value-24)*4);
if(value >= 42){
b = 0;
r = 63;
g = 63-((value-42)*4);
}
}
}
// ensure the constraints [0..63] for 565 color
if(r < 0) r = 0;
if(r > 63) r = 63;
if(g < 0) g = 0;
if(g > 63) g = 63;
if(b < 0) b = 0;
if(b > 63) b = 63;
// calculate the 565 Color
return ((r & 0x3E) << 10) | ((g & 0x3F) << 5) | ((b & 0x3E) >> 1);
}
/***************************************************************************************
* Function name: writeFile
* Description: Write a data string to a file
* return value: true: succesfully wrote data to file
* false: unabel to open file for writing
* example for writing data into a new file on SD-Card:
* M5Screen2bmp(SD, "/data_01", "n x y");
* example for appending data to an existing file on SD-Card:
* M5Screen2bmp(SD, "/data_01", "01 12.54 87.9");
***************************************************************************************/
bool writeFile(fs::FS &fs, const char * path, const char * data, bool new_file){
bool result = false;
File file;
if(new_file){
file = fs.open(path, FILE_WRITE);
} else {
file = fs.open(path, FILE_APPEND);
}
if(!file){
return false;
}
if(file.print(data)){
result = true;
}
return result;
}
// See:
// https://github.com/m5stack/M5Stack/tree/master/examples/Advanced/Display/drawXBitmap
//
// Images can be converted to XBM format by using the online converter here:
// https://www.online-utility.org/image/convert/to/XBM
// The output must be pasted in a header file, renamed and adjusted to appear
// as as a const unsigned char array in PROGMEM (FLASH program memory).
// The xbm format adds padding to pixel rows so they are a whole number of bytes
// For example: 50 pixel width means 56 bits = 7 bytes
// the 50 height then means array uses 50 x 7 = 350 bytes of FLASH
// The library ignores the padding bits when drawing the image on the display.
#include <pgmspace.h> // PROGMEM support header
// electric-idea logo 150 x 150 pixel array in XBM format
#define logoWidth 150 // logo width
#define logoHeight 150 // logo height
// Image is stored in this array
PROGMEM const unsigned char logo[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x0F, 0x00, 0xFE, 0xFF,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xFF, 0xFF, 0x00, 0x00, 0xC0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00,
0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0x01, 0x00, 0xF8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x00, 0x00, 0xE0, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0x3F, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0xC0,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0x00, 0xE0, 0xC7, 0x3F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01,
0xFC, 0xFF, 0x3F, 0x00, 0xFE, 0x07, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0xFE, 0xFF, 0x3F, 0x00, 0xFF,
0x1F, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0x01, 0xFF, 0xFF, 0x3F, 0xC0, 0xFF, 0x3F, 0xE0, 0xE7, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x81, 0xFF, 0xE3, 0x3F,
0xE0, 0x0F, 0x7F, 0xF0, 0xC3, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE0, 0xFF, 0x81, 0xFF, 0xC1, 0x3F, 0xE0, 0x07, 0x7E, 0xF0, 0x83,
0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x81, 0xFF,
0xC0, 0x3F, 0xF0, 0x07, 0xFE, 0xF0, 0x81, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xFF, 0xC1, 0xFF, 0xC0, 0x3F, 0xF0, 0x07, 0xFE,
0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0xC1, 0x7F, 0xC0, 0x3F, 0xF0, 0x0F, 0xFF, 0x00, 0x80, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC1, 0x7F, 0xC0, 0x3F, 0xF0,
0xFF, 0xFF, 0x00, 0xC0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xC1, 0x7F, 0xC0, 0x3F, 0xF0, 0xFF, 0xFF, 0x00, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC1, 0x7F, 0xC0,
0x3F, 0xF0, 0x1F, 0x00, 0xE0, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xC1, 0x7F, 0xC0, 0x3F, 0xF0, 0x0F, 0x00, 0xF0,
0xCF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC1,
0xFF, 0xC0, 0x3F, 0xF0, 0x0F, 0x00, 0xF8, 0x87, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC1, 0xFF, 0xC0, 0x3F, 0xF0, 0x0F,
0x00, 0xF8, 0x83, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xC1, 0xFF, 0xE1, 0x3F, 0xF0, 0x1F, 0x60, 0xF8, 0x83, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x81, 0xFF, 0xF3, 0xFF,
0xE3, 0x7F, 0xF8, 0xF8, 0x83, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xFF, 0x83, 0xFF, 0xFF, 0xFF, 0xE3, 0xFF, 0xFF, 0xF8, 0xC7,
0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x07, 0xFF,
0xFF, 0xFF, 0xC1, 0xFF, 0x7F, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0xFE, 0xDF, 0xFF, 0x80, 0xFF, 0x3F,
0xF0, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0x07, 0xFC, 0x87, 0x7F, 0x00, 0xFF, 0x0F, 0xF0, 0x3F, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x01, 0xE0, 0x83, 0x0F, 0x00,
0xFC, 0x03, 0xC0, 0x1F, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x80, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00,
0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0x01, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0xF0,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00,
0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07,
0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF0, 0x07, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00,
0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00,
0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
0x0F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xFC,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00,
0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F,
0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0xFE, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0x1F, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0xC0, 0x0F,
0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0x1F, 0x00, 0xF8, 0x1F, 0x7E, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1F, 0x00,
0xFF, 0x1F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F,
0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xF0, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xC0, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8,
0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x07, 0xE0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x01,
0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x80, 0xFF, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF0, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
Comments