First Commit

This commit is contained in:
Godzil 2013-10-28 13:18:33 +00:00 committed by trapierm
parent f33130c44b
commit f234c63ebb
91 changed files with 76850 additions and 0 deletions

BIN
board/gameduino.brd Normal file

Binary file not shown.

BIN
board/gameduino.sch Normal file

Binary file not shown.

Binary file not shown.

41
fpga/ck_div.v Normal file
View File

@ -0,0 +1,41 @@
module ck_div(
input ck_in,
output ck_out,
input sys_rst_i
//output locked;
);
parameter DIV_BY = 1;
parameter MULT_BY = 1;
wire ck_fb;
//DCM #(
// .CLKDV_DIVIDE(DIV_BY),
// .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis
// .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
// .STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE
//) DCM_inst (
// .CLK0(ck_fb),
// .CLKDV(ck_out),
// .CLKFB(ck_fb), // DCM clock feedback
// .CLKIN(ck_in), // Clock input (from IBUFG, BUFG or DCM)
// .RST(0)
//);
DCM #(
.CLKFX_MULTIPLY(MULT_BY),
.CLKFX_DIVIDE(DIV_BY),
.DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis
.DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
.STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE
) DCM_inst (
.CLK0(ck_fb),
.CLKFX(ck_out),
.CLKFB(ck_fb), // DCM clock feedback
.CLKIN(ck_in), // Clock input (from IBUFG, BUFG or DCM)
.RST(0)
);
//BUFG BUFG_inst(.I(ck_int), .O(ck_out));
endmodule

41
fpga/ck_div.vhd Normal file
View File

@ -0,0 +1,41 @@
module ck_div(
input ck_in,
output ck_out,
input sys_rst_i
//output locked;
);
parameter DIV_BY = 1;
parameter MULT_BY = 1;
wire ck_fb;
//DCM #(
// .CLKDV_DIVIDE(DIV_BY),
// .DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis
// .DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
// .STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE
//) DCM_inst (
// .CLK0(ck_fb),
// .CLKDV(ck_out),
// .CLKFB(ck_fb), // DCM clock feedback
// .CLKIN(ck_in), // Clock input (from IBUFG, BUFG or DCM)
// .RST(0)
//);
DCM #(
.CLKFX_MULTIPLY(MULT_BY),
.CLKFX_DIVIDE(DIV_BY),
.DFS_FREQUENCY_MODE("LOW"), // HIGH or LOW frequency mode for frequency synthesis
.DUTY_CYCLE_CORRECTION("TRUE"), // Duty cycle correction, TRUE or FALSE
.STARTUP_WAIT("TRUE") // Delay configuration DONE until DCM LOCK, TRUE/FALSE
) DCM_inst (
.CLK0(ck_fb),
.CLKFX(ck_out),
.CLKFB(ck_fb), // DCM clock feedback
.CLKIN(ck_in), // Clock input (from IBUFG, BUFG or DCM)
.RST(0)
);
//BUFG BUFG_inst(.I(ck_int), .O(ck_out));
endmodule

33
fpga/fifo.v Normal file
View File

@ -0,0 +1,33 @@
module fifo ( clk, datain, wr, dataout, rd, fullness);
parameter WIDTH = 1;
input clk;
input [WIDTH-1:0] datain;
input wr;
output [WIDTH-1:0] dataout;
input rd;
output reg [4:0] fullness;
always @(posedge clk)
begin
fullness <= (fullness + wr - rd);
end
wire [3:0] readaddr = (fullness - 1);
genvar i;
generate
for (i = 0; i < WIDTH; i=i+1) begin : srl16
SRL16E fifo16(
.CLK(clk),
.CE(wr),
.D(datain[i]),
.A0(readaddr[0]),
.A1(readaddr[1]),
.A2(readaddr[2]),
.A3(readaddr[3]),
.Q(dataout[i]));
end
endgenerate
endmodule

1590
fpga/generated.v Normal file

File diff suppressed because one or more lines are too long

164
fpga/j0.v Normal file
View File

@ -0,0 +1,164 @@
// J0 is a stripped-down J1.
// Major changes:
// stacks are only 16 deep
// program counter is only 7 bits (128 instructions)
// DEPTH and LSHIFT instructions removed
// multiply and swab instructions added
module j0(
input sys_clk_i, input sys_rst_i,
output [6:0] insn_addr,
input [15:0] insn,
output mem_rd,
output mem_wr,
output [15:0] mem_addr,
output [15:0] mem_dout,
input [15:0] mem_din,
input pause
);
wire [15:0] immediate = { 1'b0, insn[14:0] };
wire [15:0] ramrd;
reg [4:0] dsp; // Data stack pointer
reg [4:0] _dsp;
reg [15:0] st0; // Top of data stack
reg [15:0] _st0;
wire dstkW; // D stack write
reg [6:0] pc;
reg [6:0] _pc;
reg [4:0] rsp;
reg [4:0] _rsp;
reg rstkW; // R stack write
reg [15:0] rstkD; // R stack write value
wire [6:0] pc_plus_1 = pc + 1;
// The D and R stacks
reg [15:0] dstack[0:31];
reg [15:0] rstack[0:31];
wire [15:0] st1 = dstack[dsp];
wire [15:0] rst0 = rstack[rsp];
// st0sel is the ALU operation. For branch and call the operation
// is T, for 0branch it is N. For ALU ops it is loaded from the instruction
// field.
reg [4:0] st0sel;
always @*
begin
case (insn[14:13])
2'b00: st0sel <= 0; // ubranch
2'b10: st0sel <= 0; // call
2'b01: st0sel <= 1; // 0branch
2'b11: st0sel <= {insn[4], insn[11:8]}; // ALU
default: st0sel <= 4'bxxxx;
endcase
// Compute the new value of T.
if (insn[15])
_st0 <= immediate;
else
case (st0sel)
5'b00000: _st0 <= st0;
5'b00001: _st0 <= st1;
5'b00010: _st0 <= st0 + st1;
5'b00011: _st0 <= st0 & st1;
5'b00100: _st0 <= st0 | st1;
5'b00101: _st0 <= st0 ^ st1;
5'b00110: _st0 <= ~st0;
5'b00111: _st0 <= {16{(st1 == st0)}};
5'b01000: _st0 <= {16{($signed(st1) < $signed(st0))}};
5'b01001: _st0 <= st1 >> st0[3:0];
5'b01010: _st0 <= st0 - 1;
5'b01011: _st0 <= rst0;
5'b01100: _st0 <= mem_din;
5'b01101: _st0 <= st1 * st0;
5'b01110: _st0 <= {st0[7:0], st0[15:8]};
5'b01111: _st0 <= {16{(st1 < st0)}};
default: _st0 <= 16'hxxxx;
endcase
end
wire is_alu = (insn[15:13] == 3'b011);
wire is_lit = (insn[15]);
// assign mem_rd = (is_alu & (insn[11:8] == 4'hc));
assign mem_rd = (st0sel == 5'hc);
assign mem_wr = is_alu & insn[5];
assign mem_addr = st0;
assign mem_dout = st1;
assign dstkW = is_lit | (is_alu & insn[7]);
wire [1:0] dd = insn[1:0]; // D stack delta
wire [1:0] rd = insn[3:2]; // R stack delta
always @*
begin
if (is_lit) begin // literal
_dsp = dsp + 1;
_rsp = rsp;
rstkW = 0;
rstkD = _pc;
end else if (is_alu) begin // ALU
_dsp = dsp + {dd[1], dd[1], dd[1], dd};
_rsp = rsp + {rd[1], rd[1], rd[1], rd};
rstkW = insn[6];
rstkD = st0;
end else begin // jump/call
// predicated jump is like DROP
if (insn[15:13] == 3'b001) begin
_dsp = dsp - 1;
end else begin
_dsp = dsp;
end
if (insn[15:13] == 3'b010) begin // call
_rsp = rsp + 1;
rstkW = 1;
rstkD = {pc_plus_1, 1'b0};
end else begin
_rsp = rsp;
rstkW = 0;
rstkD = _pc;
end
end
if (sys_rst_i)
_pc = pc;
else
if ((insn[15:13] == 3'b000) |
((insn[15:13] == 3'b001) & (|st0 == 0)) |
(insn[15:13] == 3'b010))
_pc = insn[6:0];
else if (is_alu & insn[12])
_pc = rst0[7:1];
else
_pc = pc_plus_1;
end
assign insn_addr = pause ? pc : _pc;
always @(posedge sys_clk_i)
begin
if (sys_rst_i) begin
pc <= 0;
dsp <= 0;
st0 <= 0;
rsp <= 0;
end else if (!pause) begin
pc <= _pc;
dsp <= _dsp;
st0 <= _st0;
rsp <= _rsp;
if (dstkW)
dstack[_dsp] = st0;
if (rstkW)
rstack[_rsp] = rstkD;
end
end
endmodule // j1

1
fpga/revision.v Normal file
View File

@ -0,0 +1 @@
`define REVISION 8'h11

20
fpga/testtop.v Normal file
View File

@ -0,0 +1,20 @@
module top(
input SCK, // arduino 13
input MOSI, // arduino 11
inout MISO, // arduino 12
input SSEL, // arduino 9
output flashMOSI,
input flashMISO,
output flashSCK,
output flashSSEL
);
assign flashMOSI = MOSI;
assign MISO = flashMISO;
assign flashSCK = SCK;
assign flashSSEL = SSEL;
endmodule // top

1854
fpga/top.v Normal file

File diff suppressed because it is too large Load Diff

451
gd/GD.cpp Normal file
View File

@ -0,0 +1,451 @@
/*
* Copyright (c) 2011 by James Bowman <jamesb@excamera.com>
* Gameduino library for arduino.
*
*/
#ifdef MAPLE_IDE
#include "wirish.h"
HardwareSPI SPI(1);
#include "GD.h"
#else
#include "WProgram.h"
#include <avr/pgmspace.h>
#include <SPI.h>
#include <GD.h>
#endif
GDClass GD;
void GDClass::begin()
{
delay(250); // give Gameduino time to boot
pinMode(SS_PIN, OUTPUT);
digitalWrite(SS_PIN, HIGH);
#ifdef MAPLE_IDE
SPI.begin(SPI_4_5MHZ, MSBFIRST, 0);
if (GD.rd(REV) == 0x11) { // Rev 1.1 can handle SPI at 9MHz
SPI.begin(SPI_9MHZ, MSBFIRST, 0);
}
#else
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV2);
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPSR = (1 << SPI2X);
#endif
GD.wr(J1_RESET, 1); // HALT coprocessor
GD.wr(VIDEO_MODE, MODE_800x600_72);
__wstart(RAM_SPR); // Hide all sprites
for (int i = 0; i < 512; i++)
GD.xhide();
__end();
fill(RAM_PIC, 0, 1024 * 10); // Zero all character RAM
fill(RAM_SPRPAL, 0, 2048); // Sprite palletes black
fill(RAM_SPRIMG, 0, 64 * 256); // Clear all sprite data
fill(VOICES, 0, 256); // Silence
fill(PALETTE16A, 0, 128); // Black 16-, 4-palletes and COMM
GD.wr16(SCROLL_X, 0);
GD.wr16(SCROLL_Y, 0);
GD.wr(JK_MODE, 0);
GD.wr(SPR_DISABLE, 0);
GD.wr(SPR_PAGE, 0);
GD.wr(IOMODE, 0);
GD.wr16(BG_COLOR, 0);
GD.wr16(SAMPLE_L, 0);
GD.wr16(SAMPLE_R, 0);
GD.wr16(SCREENSHOT_Y, 0);
GD.wr(MODULATOR, 64);
}
void GDClass::end() {
}
void GDClass::__start(unsigned int addr) // start an SPI transaction to addr
{
digitalWrite(SS_PIN, LOW);
SPI.transfer(highByte(addr));
SPI.transfer(lowByte(addr));
}
void GDClass::__wstart(unsigned int addr) // start an SPI write transaction to addr
{
__start(0x8000|addr);
}
void GDClass::__wstartspr(unsigned int sprnum)
{
__start((0x8000 | RAM_SPR) + (sprnum << 2));
spr = 0;
}
void GDClass::__end() // end the SPI transaction
{
digitalWrite(SS_PIN, HIGH);
}
byte GDClass::rd(unsigned int addr)
{
__start(addr);
byte r = SPI.transfer(0);
__end();
return r;
}
void GDClass::wr(unsigned int addr, byte v)
{
__wstart(addr);
SPI.transfer(v);
__end();
}
unsigned int GDClass::rd16(unsigned int addr)
{
unsigned int r;
__start(addr);
r = SPI.transfer(0);
r |= (SPI.transfer(0) << 8);
__end();
return r;
}
void GDClass::wr16(unsigned int addr, unsigned int v)
{
__wstart(addr);
SPI.transfer(lowByte(v));
SPI.transfer(highByte(v));
__end();
}
void GDClass::fill(int addr, byte v, unsigned int count)
{
__wstart(addr);
while (count--)
SPI.transfer(v);
__end();
}
void GDClass::copy(unsigned int addr, PROGMEM prog_uchar *src, int count)
{
__wstart(addr);
while (count--) {
SPI.transfer(pgm_read_byte_near(src));
src++;
}
__end();
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
void GDClass::copy(unsigned int addr, uint_farptr_t src, int count)
{
__wstart(addr);
while (count--) {
SPI.transfer(pgm_read_byte_far(src));
src++;
}
__end();
}
#endif
void GDClass::microcode(PROGMEM prog_uchar *src, int count)
{
wr(J1_RESET, 1);
copy(J1_CODE, src, count);
wr(J1_RESET, 0);
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
void GDClass::microcode(uint_farptr_t src, int count)
{
wr(J1_RESET, 1);
copy(J1_CODE, src, count);
wr(J1_RESET, 0);
}
#endif
void GDClass::setpal(int pal, unsigned int rgb)
{
wr16(RAM_PAL + (pal << 1), rgb);
}
void GDClass::sprite(int spr, int x, int y, byte image, byte palette, byte rot, byte jk)
{
__wstart(RAM_SPR + (spr << 2));
SPI.transfer(lowByte(x));
SPI.transfer((palette << 4) | (rot << 1) | (highByte(x) & 1));
SPI.transfer(lowByte(y));
SPI.transfer((jk << 7) | (image << 1) | (highByte(y) & 1));
__end();
}
void GDClass::xsprite(int ox, int oy, signed char x, signed char y, byte image, byte palette, byte rot, byte jk)
{
if (rot & 2)
x = -16-x;
if (rot & 4)
y = -16-y;
if (rot & 1) {
int s;
s = x; x = y; y = s;
}
ox += x;
oy += y;
SPI.transfer(lowByte(ox));
SPI.transfer((palette << 4) | (rot << 1) | (highByte(ox) & 1));
SPI.transfer(lowByte(oy));
SPI.transfer((jk << 7) | (image << 1) | (highByte(oy) & 1));
spr++;
}
void GDClass::xhide()
{
SPI.transfer(lowByte(400));
SPI.transfer(highByte(400));
SPI.transfer(lowByte(400));
SPI.transfer(highByte(400));
spr++;
}
void GDClass::plots(int ox, int oy, PROGMEM sprplot *psp, byte count, byte rot, byte jk)
{
while (count--) {
struct sprplot sp;
memcpy_P((void*)&sp, psp++, sizeof(sp));
GD.xsprite(ox, oy, sp.x, sp.y, sp.image, sp.palette, rot, jk);
}
}
void GDClass::sprite2x2(int spr, int x, int y, byte image, byte palette, byte rot, byte jk)
{
__wstart(0x3000 + (spr << 2));
GD.xsprite(x, y, -16, -16, image + 0, palette, rot, jk);
GD.xsprite(x, y, 0, -16, image + 1, palette, rot, jk);
GD.xsprite(x, y, -16, 0, image + 2, palette, rot, jk);
GD.xsprite(x, y, 0, 0, image + 3, palette, rot, jk);
__end();
}
void GDClass::waitvblank()
{
// Wait for the VLANK to go from 0 to 1: this is the start
// of the vertical blanking interval.
while (rd(VBLANK) == 1)
;
while (rd(VBLANK) == 0)
;
}
/* Fixed ascii font, useful for debug */
#include "font8x8.h"
static byte stretch[16] = {
0x00, 0x03, 0x0c, 0x0f,
0x30, 0x33, 0x3c, 0x3f,
0xc0, 0xc3, 0xcc, 0xcf,
0xf0, 0xf3, 0xfc, 0xff
};
void GDClass::ascii()
{
long i;
for (i = 0; i < 768; i++) {
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
byte b = pgm_read_byte_far(GET_FAR_ADDRESS(font8x8) + i);
#else
byte b = pgm_read_byte(font8x8 + i);
#endif
byte h = stretch[b >> 4];
byte l = stretch[b & 0xf];
GD.wr(0x1000 + (16 * ' ') + (2 * i), h);
GD.wr(0x1000 + (16 * ' ') + (2 * i) + 1, l);
}
for (i = 0x20; i < 0x80; i++) {
GD.setpal(4 * i + 0, TRANSPARENT);
GD.setpal(4 * i + 3, RGB(255,255,255));
}
GD.fill(RAM_PIC, ' ', 4096);
}
void GDClass::putstr(int x, int y, const char *s)
{
GD.__wstart((y << 6) + x);
while (*s)
SPI.transfer(*s++);
GD.__end();
}
void GDClass::voice(int v, byte wave, unsigned int freq, byte lamp, byte ramp)
{
__wstart(VOICES + (v << 2));
SPI.transfer(lowByte(freq));
SPI.transfer(highByte(freq) | (wave << 7));
SPI.transfer(lamp);
SPI.transfer(ramp);
__end();
}
void GDClass::screenshot(unsigned int frame)
{
int yy, xx;
byte undone[38]; // 300-long bitmap of lines pending
// initialize to 300 ones
memset(undone, 0xff, 37);
undone[37] = 0xf;
int nundone = 300;
Serial.write(0xa5); // sync byte
Serial.write(lowByte(frame));
Serial.write(highByte(frame));
while (nundone) {
// find a pending line a short distance ahead of the raster
int hwline = GD.rd16(SCREENSHOT_Y) & 0x1ff;
for (yy = (hwline + 7) % 300; ((undone[yy>>3] >> (yy&7)) & 1) == 0; yy = (yy + 1) % 300)
;
GD.wr16(SCREENSHOT_Y, 0x8000 | yy); // ask for it
// housekeeping while waiting: mark line done and send yy
undone[yy>>3] ^= (1 << (yy&7));
nundone--;
Serial.write(lowByte(yy));
Serial.write(highByte(yy));
while ((GD.rd(SCREENSHOT_Y + 1) & 0x80) == 0)
;
// Now send the line, compressing zero pixels
uint16_t zeroes = 0;
for (xx = 0; xx < 800; xx += 2) {
uint16_t v = GD.rd16(SCREENSHOT + xx);
if (v == 0) {
zeroes++;
} else {
if (zeroes) {
Serial.write(lowByte(zeroes));
Serial.write(0x80 | highByte(zeroes));
zeroes = 0;
}
Serial.write(lowByte(v));
Serial.write(highByte(v));
}
}
if (zeroes) {
Serial.write(lowByte(zeroes));
Serial.write(0x80 | highByte(zeroes));
}
}
GD.wr16(SCREENSHOT_Y, 0); // restore screen to normal
}
// near ptr version
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
static GDflashbits GDFB;
void GDClass::uncompress(unsigned int addr, prog_uchar *src)
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
while (items--) {
if (GDFB.get1() == 0) {
GD.wr(addr++, GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
GD.wr(addr, GD.rd(addr + offset));
addr++;
}
}
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_far(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte mask;
};
static GDflashbitsF GDFBF;
void GDClass::uncompress(unsigned int addr, uint_farptr_t src)
{
GDFBF.begin(src);
byte b_off = GDFBF.getn(4);
byte b_len = GDFBF.getn(4);
byte minlen = GDFBF.getn(2);
unsigned short items = GDFBF.getn(16);
while (items--) {
if (GDFBF.get1() == 0) {
GD.wr(addr++, GDFBF.getn(8));
} else {
int offset = -GDFBF.getn(b_off) - 1;
int l = GDFBF.getn(b_len) + minlen;
while (l--) {
GD.wr(addr, GD.rd(addr + offset));
addr++;
}
}
}
}
#endif

250
gd/GD.h Normal file
View File

@ -0,0 +1,250 @@
/*
* Copyright (C) 2011 by James Bowman <jamesb@excamera.com>
* Gameduino library for arduino.
*
*/
#ifndef _GD_H_INCLUDED
#define _GD_H_INCLUDED
// define SS_PIN before including "GD.h" to override this
#ifndef SS_PIN
#define SS_PIN 9
#endif
#ifdef MAPLE_IDE
#include <stdarg.h>
#include "wirish.h"
typedef const unsigned char prog_uchar;
typedef const signed char prog_char;
typedef const unsigned short prog_uint16_t;
typedef const unsigned long prog_uint32_t;
#define Serial SerialUSB
#define pgm_read_byte(x) (*(prog_uchar*)(x))
#define pgm_read_byte_near(x) pgm_read_byte(x)
#define pgm_read_word(x) (*(prog_uint16_t*)(x))
#define pgm_read_word_near(x) pgm_read_word(x)
#define pgm_read_dword(x) (*(prog_uint32_t*)(x))
#define pgm_read_dword_near(x) pgm_read_dword(x)
#define PROGMEM const
#define memcpy_P(a,b,c) memcpy((a), (b), (c))
extern HardwareSPI SPI;
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#endif
struct sprplot
{
char x, y;
byte image, palette;
};
class GDClass {
public:
static void begin();
static void end();
static void __start(unsigned int addr);
static void __wstart(unsigned int addr);
static void __end(void);
static byte rd(unsigned int addr);
static void wr(unsigned int addr, byte v);
static unsigned int rd16(unsigned int addr);
static void wr16(unsigned int addr, unsigned int v);
static void fill(int addr, byte v, unsigned int count);
static void copy(unsigned int addr, prog_uchar *src, int count);
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static void copy(unsigned int addr, uint_farptr_t src, int count);
static void microcode(uint_farptr_t src, int count);
static void uncompress(unsigned int addr, uint_farptr_t src);
#endif
static void setpal(int pal, unsigned int rgb);
static void sprite(int spr, int x, int y, byte image, byte palette, byte rot = 0, byte jk = 0);
static void sprite2x2(int spr, int x, int y, byte image, byte palette, byte rot = 0, byte jk = 0);
static void waitvblank();
static void microcode(prog_uchar *src, int count);
static void uncompress(unsigned int addr, prog_uchar *src);
static void voice(int v, byte wave, unsigned int freq, byte lamp, byte ramp);
static void ascii();
static void putstr(int x, int y, const char *s);
static void screenshot(unsigned int frame);
void __wstartspr(unsigned int spr = 0);
void xsprite(int ox, int oy, signed char x, signed char y, byte image, byte palette, byte rot = 0, byte jk = 0);
void xhide();
void plots(int ox, int oy, PROGMEM sprplot *psp, byte count, byte rot, byte jk);
byte spr; // Current sprite, incremented by xsprite/xhide above
};
#define GD_HAS_PLOTS 1 // have the 'GD.plots' method
extern GDClass GD;
#define RGB(r,g,b) ((((r) >> 3) << 10) | (((g) >> 3) << 5) | ((b) >> 3))
#define TRANSPARENT (1 << 15) // transparent for chars and sprites
#define RAM_PIC 0x0000 // Screen Picture, 64 x 64 = 4096 bytes
#define RAM_CHR 0x1000 // Screen Characters, 256 x 16 = 4096 bytes
#define RAM_PAL 0x2000 // Screen Character Palette, 256 x 8 = 2048 bytes
#define IDENT 0x2800
#define REV 0x2801
#define FRAME 0x2802
#define VBLANK 0x2803
#define SCROLL_X 0x2804
#define SCROLL_Y 0x2806
#define JK_MODE 0x2808
#define J1_RESET 0x2809
#define SPR_DISABLE 0x280a
#define SPR_PAGE 0x280b
#define IOMODE 0x280c
#define BG_COLOR 0x280e
#define SAMPLE_L 0x2810
#define SAMPLE_R 0x2812
#define MODULATOR 0x2814
#define VIDEO_MODE 0x2815
#define MODE_800x600_72 0
#define MODE_800x600_60 1
#define SCREENSHOT_Y 0x281e
#define PALETTE16A 0x2840 // 16-color palette RAM A, 32 bytes
#define PALETTE16B 0x2860 // 16-color palette RAM B, 32 bytes
#define PALETTE4A 0x2880 // 4-color palette RAM A, 8 bytes
#define PALETTE4B 0x2888 // 4-color palette RAM A, 8 bytes
#define COMM 0x2890 // Communication buffer
#define COLLISION 0x2900 // Collision detection RAM, 256 bytes
#define VOICES 0x2a00 // Voice controls
#define J1_CODE 0x2b00 // J1 coprocessor microcode RAM
#define SCREENSHOT 0x2c00 // screenshot line RAM
#define RAM_SPR 0x3000 // Sprite Control, 512 x 4 = 2048 bytes
#define RAM_SPRPAL 0x3800 // Sprite Palettes, 4 x 256 = 2048 bytes
#define RAM_SPRIMG 0x4000 // Sprite Image, 64 x 256 = 16384 bytes
#ifndef GET_FAR_ADDRESS // at some point this will become official... https://savannah.nongnu.org/patch/?6352
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define GET_FAR_ADDRESS(var) \
({ \
uint_farptr_t tmp; \
\
__asm__ __volatile__( \
\
"ldi %A0, lo8(%1)" "\n\t" \
"ldi %B0, hi8(%1)" "\n\t" \
"ldi %C0, hh8(%1)" "\n\t" \
"clr %D0" "\n\t" \
: \
"=d" (tmp) \
: \
"p" (&(var)) \
); \
tmp; \
})
#else
#define GET_FAR_ADDRESS(var) (var)
#endif
#endif
// simple utilities for accessing the asset library in a filesystem-like
// way
// Details of the flash chip:
// http://www.atmel.com/dyn/resources/prod_documents/doc3638.pdf
const int FLASHSEL = 2; // flash SPI select pin
class Asset {
private:
uint32_t addr; // pointer into flash memory
uint16_t remain; // number of remaing unread bytes
byte find_name(const char *name) {
// addr points at a directory, scan for name, if found set addr
// to the entry and return 1, otherwise return 0.
while (true) {
static struct {
char name[12];
uint16_t length;
uint32_t addr;
} de;
read(&de.name, 12);
read(&de.length, 2);
read(&de.addr, 4);
if (de.name[0] == 0)
return 0; // end of dir, no match found
if (strcmp(de.name, name) == 0) {
remain = de.length;
addr = de.addr;
return 1;
}
}
}
public:
int open(const char *d, ...) {
va_list ap;
va_start(ap, d);
addr = 512L * 640;
remain = 1024;
pinMode(FLASHSEL, OUTPUT);
digitalWrite(FLASHSEL, HIGH);
do {
if (!find_name(d))
return 0;
d = va_arg(ap, const char *);
} while (d != NULL);
return 1;
}
int read(void *dst, uint16_t n) {
GD.wr(IOMODE, 'F');
digitalWrite(FLASHSEL, LOW);
SPI.transfer(0x03);
SPI.transfer((byte)(addr >> 16));
SPI.transfer((byte)(addr >> 8));
SPI.transfer((byte)(addr >> 0));
uint16_t actual = min(n, remain); // actual bytes read
byte *bdst = (byte*)dst;
for (uint16_t a = actual; a; a--) {
byte b = SPI.transfer(0);
*bdst++ = b;
addr++;
if ((511 & (uint16_t)addr) == 264)
addr = addr - 264 + 512;
}
remain -= actual;
digitalWrite(FLASHSEL, HIGH);
GD.wr(IOMODE, 0);
return actual;
}
void load(uint16_t dst) {
while (remain) {
byte buf[16];
uint16_t n = min(remain, sizeof(buf));
read(buf, n);
GD.__wstart(dst);
for (byte i = 0; i < n; i++)
SPI.transfer(buf[i]);
GD.__end();
dst += n;
}
}
uint16_t available() {
return remain;
}
};
#endif

View File

@ -0,0 +1,180 @@
#include <SPI.h>
#include <GD.h>
void readn(byte *dst, unsigned int addr, int c)
{
GD.__start(addr);
while (c--)
*dst++ = SPI.transfer(0);
GD.__end();
}
#define NBALLS 80
static byte coll[NBALLS];
static void load_coll()
{
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
while (GD.rd(VBLANK) == 1) // Wait until display
;
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
readn(coll, COLLISION, NBALLS);
}
struct ball {
int x, y;
signed char vx, vy;
byte lasthit;
};
static struct ball balls[NBALLS];
#include "stone_wall_texture.h" // texture from 3dmd.net project
#include "sphere.h"
static void plot_balls()
{
byte i;
for (i = 0; i < NBALLS; i++)
GD.sprite(i, balls[i].x >> 4, balls[i].y >> 4, 0, 0, 0);
}
// Place all balls so that none collide. Do this by placing all at
// random, then moving until there are no collisions
static byte anycolliding()
{
plot_balls();
load_coll();
byte i;
for (i = 0; i < NBALLS; i++)
if (coll[i] != 0xff)
return 1;
return 0;
}
static void place_balls()
{
byte i;
for (i = 0; i < NBALLS; i++) {
balls[i].x = (2 + random(380)) << 4;
balls[i].y = (2 + random(280)) << 4;
balls[i].vx = random(-128,127);
balls[i].vy = random(-128,127);
balls[i].lasthit = 255;
}
while (anycolliding()) {
for (i = 0; i < NBALLS; i++) {
if (coll[i] != 0xff) {
balls[i].x = (2 + random(380)) << 4;
balls[i].y = (2 + random(280)) << 4;
}
}
}
}
void setup()
{
int i;
GD.begin();
GD.wr(JK_MODE, 0);
GD.copy(RAM_CHR, stone_wall_texture_chr, sizeof(stone_wall_texture_chr));
GD.copy(RAM_PAL, stone_wall_texture_pal, sizeof(stone_wall_texture_pal));
for (i = 0; i < 4096; i++)
GD.wr(RAM_PIC + i, (i & 15) + ((i >> 6) << 4));
GD.copy(RAM_SPRIMG, sphere_img, sizeof(sphere_img));
GD.copy(RAM_SPRPAL, sphere_pal, sizeof(sphere_pal));
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
place_balls();
}
float dot(float x1, float y1, float x2, float y2)
{
return (x1 * x2) + (y1 * y2);
}
// Collide ball a with ball b, compute new velocities.
// Algorithm from
// http://stackoverflow.com/questions/345838/ball-to-ball-collision-detection-and-handling
void collide(struct ball *a, struct ball *b)
{
float collision_x, collision_y;
collision_x = a->x - b->x;
collision_y = a->y - b->y;
float distance = sqrt(collision_x * collision_x + collision_y * collision_y);
float rdistance = 1.0 / distance;
collision_x *= rdistance;
collision_y *= rdistance;
float aci = dot(a->vx, a->vy, collision_x, collision_y);
float bci = dot(b->vx, b->vy, collision_x, collision_y);
float acf = bci;
float bcf = aci;
a->vx += int((acf - aci) * collision_x);
a->vy += int((acf - aci) * collision_y);
b->vx += int((bcf - bci) * collision_x);
b->vy += int((bcf - bci) * collision_y);
}
#define LWALL (0 << 4)
#define RWALL (384 << 4)
#define TWALL (0 << 4)
#define BWALL (284 << 4)
static int timer;
void loop()
{
int i;
plot_balls();
load_coll();
struct ball *pb;
for (i = NBALLS, pb = balls; i--; pb++, i) {
if ((pb->x <= LWALL)) {
pb->x = LWALL;
pb->vx = -pb->vx;
}
if ((pb->x >= RWALL)) {
pb->x = RWALL;
pb->vx = -pb->vx;
}
if ((pb->y <= TWALL)) {
pb->y = TWALL;
pb->vy = -pb->vy;
}
if ((pb->y >= BWALL)) {
pb->y = BWALL;
pb->vy = -pb->vy;
}
}
for (i = 1; i < NBALLS; i++) {
byte other = coll[i];
if ((balls[i].lasthit != other) && other != 0xff) {
collide(&balls[i], &balls[other]);
}
balls[i].lasthit = other;
}
for (i = NBALLS, pb = balls; i--; pb++, i) {
pb->x += pb->vx;
pb->y += pb->vy;
}
if (++timer == 2000) {
place_balls();
delay(1000);
timer = 0;
}
}

View File

@ -0,0 +1,55 @@
static PROGMEM prog_uchar sphere_img[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0b, 0x12, 0x20, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x0f, 0x17, 0x23, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x0e, 0x16, 0x1e, 0x27, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x11, 0x17, 0x1f, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x0c, 0x12, 0x19, 0x22, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x10, 0x15, 0x1b, 0x25, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x08, 0x0d, 0x14, 0x1a, 0x21, 0x27, 0x27, 0x27, 0xff,
0xff, 0x03, 0x01, 0x02, 0x03, 0x05, 0x0a, 0x0d, 0x13, 0x18, 0x1d, 0x26, 0x27, 0x27, 0x27, 0xff,
0xff, 0x0b, 0x06, 0x07, 0x09, 0x0c, 0x10, 0x14, 0x18, 0x1c, 0x24, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x12, 0x0f, 0x0e, 0x11, 0x12, 0x15, 0x1a, 0x1d, 0x24, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x20, 0x17, 0x16, 0x17, 0x19, 0x1b, 0x21, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0xff, 0x23, 0x1e, 0x1f, 0x22, 0x25, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff,
0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
static PROGMEM prog_uchar sphere_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xde, 0x7b, 0xbd, 0x77, 0x9c, 0x73, 0x9c, 0x73, 0x7b, 0x6f,
0x7b, 0x6f, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x39, 0x67, 0x18, 0x63, 0xf7, 0x5e, 0xf7, 0x5e,
0xf7, 0x5e, 0xf7, 0x5e, 0xb5, 0x56, 0xb5, 0x56, 0x94, 0x52, 0x73, 0x4e, 0x73, 0x4e, 0x52, 0x4a,
0x52, 0x4a, 0x31, 0x46, 0x31, 0x46, 0xef, 0x3d, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xad, 0x35,
0xad, 0x35, 0xad, 0x35, 0x8c, 0x31, 0x8c, 0x31, 0x6b, 0x2d, 0x6b, 0x2d, 0x4a, 0x29, 0x29, 0x25,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
};

View File

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

View File

@ -0,0 +1,59 @@
#include <SPI.h>
#include <GD.h>
void spr(int x, int y, byte pal)
{
static int sprnum = 0;
GD.sprite(sprnum++, x, y, 0, pal, 0);
}
static unsigned int random_color()
{
return RGB(64 + random(192), 64 + random(192), 64 + random(192));
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0,"Sprite palettes");
for (i = 0; i < 256; i++)
GD.wr(RAM_SPRIMG + i, i);
// Fill all the palettes with random colors
for (i = 0; i < (4 * 256); i++)
GD.wr16(RAM_SPRPAL + (i << 1), random_color());
for (i = 0; i < 16; i++) {
GD.wr16(PALETTE16A + (i << 1), random_color());
GD.wr16(PALETTE16B + (i << 1), random_color());
}
for (i = 0; i < 4; i++) {
GD.wr16(PALETTE4A + (i << 1), random_color());
GD.wr16(PALETTE4B + (i << 1), random_color());
}
GD.putstr(0, 8, "Four 256-color palettes");
for (i = 0; i < 4; i++)
spr(200 + 20 * i, (8 * 8), i);
GD.putstr(0, 12, "Two 16-color palettes");
for (i = 0; i < 2; i++) {
spr(200 + 20 * i, (8 * 12), 0x4 | i);
spr(200 + 20 * i, (8 * 12) + 20, 0x6 | i);
}
GD.putstr(0, 18, "Two 4-color palettes");
for (i = 0; i < 2; i++) {
spr(200 + 20 * i, (8 * 18), 0x8 | i);
spr(200 + 20 * i, (8 * 18) + 20, 0xa | i);
spr(200 + 20 * i, (8 * 18) + 40, 0xc | i);
spr(200 + 20 * i, (8 * 18) + 60, 0xe | i);
}
}
void loop()
{
}

View File

@ -0,0 +1,55 @@
static PROGMEM prog_uchar r_img[] = {
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x09, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x04, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0c, 0x00, 0x01, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0c, 0x00, 0x02, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x06, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0c, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0d, 0x09, 0x01, 0x01, 0x0b, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x08, 0x00, 0x05, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0d, 0x04, 0x00, 0x08, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0a, 0x00, 0x02, 0x0c, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
};
static PROGMEM prog_uchar r_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xdf, 0x7b, 0xbf, 0x77, 0x5f, 0x6f, 0x3f, 0x6b, 0xbf, 0x5e, 0x7f, 0x5a,
0xbf, 0x45, 0x7f, 0x41, 0x3f, 0x39, 0x9f, 0x28, 0x5f, 0x24, 0x1f, 0x1c, 0x1f, 0x1c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

View File

@ -0,0 +1,28 @@
#include <SPI.h>
#include <GD.h>
#include "r.h"
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0,"Sprite rotation");
GD.copy(RAM_SPRIMG, r_img, sizeof(r_img));
GD.copy(RAM_SPRPAL, r_pal, sizeof(r_pal));
for (i = 0; i < 8; i++) {
char msg[] = "ROT=.";
byte y = 3 + 4 * i;
msg[4] = '0' + i;
GD.putstr(18, y, msg);
GD.sprite(i, 200, 8 * y, 0, 0, i);
}
}
void loop()
{
}

View File

@ -0,0 +1,291 @@
static PROGMEM prog_uchar platformer_pic[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03, 0x00,
0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
0x15, 0x16, 0x17, 0x18, 0x15, 0x16, 0x17, 0x18, 0x15, 0x16, 0x17, 0x18, 0x15, 0x16, 0x17, 0x18,
0x19, 0x19, 0x1a, 0x1b, 0x19, 0x19, 0x1a, 0x1b, 0x19, 0x19, 0x1a, 0x1b, 0x19, 0x19, 0x1a, 0x1b,
0x1c, 0x1d, 0x1e, 0x1f, 0x1c, 0x1d, 0x1e, 0x1f, 0x1c, 0x1d, 0x1e, 0x1f, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x20, 0x21, 0x22, 0x23, 0x20, 0x21, 0x22, 0x23, 0x20, 0x21, 0x22, 0x23,
0x24, 0x25, 0x26, 0x27, 0x24, 0x25, 0x26, 0x27, 0x24, 0x25, 0x26, 0x27, 0x24, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2a, 0x2b, 0x28, 0x29, 0x2a, 0x2b, 0x28, 0x29, 0x2a, 0x2b, 0x28, 0x29, 0x2a, 0x2b,
0x2c, 0x2c, 0x2c, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
0x2c, 0x2c, 0x2c, 0x2c, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
0x2c, 0x2c, 0x2c, 0x2c, 0x33, 0x34, 0x39, 0x36, 0x3a, 0x3b, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c,
0x3c, 0x3d, 0x3d, 0x3e, 0x3f, 0x40, 0x40, 0x41, 0x42, 0x43, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e, 0x4f, 0x50, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e, 0x4f, 0x50, 0x50, 0x51, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e, 0x4f, 0x50, 0x50, 0x51, 0x56, 0x57, 0x58, 0x59,
0x5a, 0x5b, 0x5c, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x2c, 0x2c, 0x5e, 0x5f, 0x60, 0x61, 0x2c, 0x2c,
0x62, 0x63, 0x64, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x2c, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x2c,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x9b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x9c,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d, 0x5d,
};
static PROGMEM prog_uchar platformer_chr[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x41, 0x55, 0x54,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9, 0x55, 0xaa, 0x60, 0x55, 0x54,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x6a, 0x00, 0xaa, 0x0a, 0xaa, 0x05, 0xaa,
0xaa, 0xa5, 0xaa, 0x50, 0x55, 0x0a, 0x00, 0x2a, 0x95, 0x2a, 0x54, 0xa9, 0x02, 0xa9, 0xaa, 0xa5,
0x40, 0x2a, 0x2a, 0xaa, 0x0a, 0xaa, 0x81, 0xa5, 0xa8, 0x00, 0xaa, 0xa5, 0x5a, 0x95, 0x05, 0x54,
0x95, 0x00, 0xa9, 0x55, 0x2a, 0x00, 0x4a, 0xaa, 0x4a, 0xaa, 0x52, 0x80, 0x54, 0x00, 0xa9, 0x55,
0x56, 0xaa, 0x05, 0x6a, 0x50, 0x55, 0x94, 0x00, 0x54, 0x2a, 0x50, 0xa9, 0x41, 0x55, 0x28, 0x00,
0xaa, 0xa5, 0xaa, 0x50, 0x55, 0x0a, 0x00, 0x2a, 0x95, 0x06, 0x54, 0x01, 0x02, 0xa0, 0xaa, 0xa9,
0x40, 0x2a, 0x2a, 0xaa, 0x0a, 0xaa, 0x81, 0xa5, 0xa0, 0x00, 0xaa, 0xaa, 0x5a, 0xa8, 0x05, 0x41,
0x95, 0x00, 0xa9, 0x55, 0x2a, 0x00, 0x4a, 0xaa, 0x4a, 0xaa, 0x52, 0x80, 0x54, 0x00, 0xa5, 0x55,
0x56, 0xaa, 0x05, 0x6a, 0x50, 0x55, 0x94, 0x00, 0x54, 0x2a, 0x50, 0xa9, 0x41, 0x55, 0x04, 0x00,
0x9f, 0x55, 0x25, 0x5a, 0x0a, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x8a, 0xa9, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xbf, 0x7f, 0x6a, 0x6f, 0x00, 0x5b, 0x00, 0x15, 0x00, 0x19, 0x00, 0x06, 0x00, 0x01,
0xff, 0xff, 0xff, 0xbf, 0xfe, 0xbf, 0xfa, 0xae, 0xaa, 0x5a, 0x55, 0x45, 0xa9, 0x00, 0x54, 0x00,
0xfb, 0xea, 0xea, 0xa5, 0xea, 0x5f, 0xa5, 0x57, 0x95, 0x55, 0x41, 0xa9, 0x00, 0x54, 0x00, 0x00,
0xaa, 0xae, 0xaf, 0xfd, 0xff, 0xfd, 0xff, 0xf5, 0x5f, 0x56, 0xa5, 0x58, 0x0a, 0xa0, 0x00, 0x00,
0xad, 0xfe, 0x6a, 0xfa, 0x95, 0xa9, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa5, 0x00, 0x90, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x45, 0x15, 0x00, 0x00, 0x15, 0x01, 0x40, 0x55, 0x15, 0x41, 0x55, 0x55, 0x55, 0x55, 0x55,
0x10, 0x00, 0x05, 0x41, 0x40, 0x00, 0x14, 0x00, 0x45, 0x54, 0x54, 0x15, 0x55, 0x55, 0x55, 0x55,
0x00, 0x00, 0x50, 0x00, 0x00, 0x10, 0x55, 0x00, 0x00, 0x00, 0x55, 0x55, 0x01, 0x15, 0x55, 0x55,
0x00, 0x00, 0x00, 0x54, 0x40, 0x00, 0x05, 0x50, 0x00, 0x01, 0x55, 0x55, 0x44, 0x05, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x54, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x51, 0x55,
0x54, 0x55, 0x41, 0x05, 0x55, 0x55, 0x00, 0x00, 0x15, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x51, 0x50, 0x04, 0x15, 0x55, 0x54, 0x00, 0x01, 0x51, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x15, 0x01, 0x40, 0x55, 0x55, 0x05, 0x55, 0x50, 0x15, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x41, 0x15, 0x14, 0x00, 0x55, 0x54, 0x55, 0x01, 0x11, 0x05, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0x01, 0x55, 0x55, 0x00, 0x00, 0x50, 0x54, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x50, 0x11, 0x05, 0x54, 0x50, 0x01, 0x01, 0x50, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x05, 0x55, 0x54, 0x00, 0x04, 0x05, 0x55, 0x55, 0x01, 0x10, 0x50, 0x05,
0x55, 0x55, 0x55, 0x55, 0x55, 0x41, 0x40, 0x54, 0x01, 0x01, 0x55, 0x54, 0x44, 0x00, 0x00, 0x50,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x54, 0x15, 0x15, 0x45, 0x40, 0x00, 0x04, 0x55,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x41, 0x41, 0x55, 0x15, 0x40, 0x00, 0x15, 0x51, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x05, 0x15, 0x55, 0x00, 0x00, 0x05, 0x40, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x54, 0x55, 0x45, 0x00, 0x00, 0x15, 0x05, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x51, 0x00, 0x40, 0x15, 0x05, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x04, 0x50, 0x40, 0x15, 0x05, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x15, 0x55, 0x50, 0x45, 0x00, 0x10, 0x15, 0x40, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x40, 0x10, 0x55, 0x40, 0x00, 0x15, 0x40, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x80, 0xa8, 0x04, 0xa0, 0x01, 0x80, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa8, 0x00, 0x56, 0x80, 0x95, 0x60, 0x65, 0x58, 0x99, 0x58, 0xa5, 0x56, 0x99, 0x56, 0xa5, 0x56,
0x55, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x52, 0x55, 0x4b, 0x55, 0x2f, 0x54, 0xbf, 0x54, 0xff,
0x55, 0x00, 0x40, 0xaa, 0x2a, 0xfa, 0xbf, 0xff, 0xff, 0xfe, 0xff, 0xea, 0xfe, 0xaa, 0xea, 0xaa,
0xaa, 0x00, 0xff, 0xa8, 0xfd, 0x56, 0xd5, 0x55, 0x55, 0x75, 0xd7, 0xfd, 0xff, 0xfd, 0xff, 0xfd,
0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x8f, 0xff, 0xa3, 0xff, 0xa8, 0xff, 0x96, 0x3f, 0x56, 0x3f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x44, 0x01, 0x50, 0x01, 0x44, 0x01, 0x50, 0x01, 0x44, 0x01, 0x50, 0x01, 0x44, 0x01, 0x50, 0x01,
0x52, 0xfe, 0x52, 0xfa, 0x52, 0xfa, 0x4b, 0xfa, 0x4f, 0xfa, 0x4f, 0xea, 0x4f, 0xea, 0x4f, 0xea,
0x55, 0x40, 0x54, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x15, 0x01, 0x55, 0x15, 0x55, 0x55, 0x54,
0xfc, 0x29, 0xfe, 0xaa, 0xc2, 0xaa, 0x02, 0xa8, 0x02, 0x80, 0x00, 0x00, 0x3f, 0x00, 0xff, 0x02,
0xa8, 0x1f, 0xa8, 0x1f, 0x80, 0x1f, 0x00, 0x07, 0x00, 0x07, 0x02, 0x87, 0x2a, 0x87, 0x2a, 0x87,
0x4f, 0xea, 0x4c, 0x2a, 0x60, 0x2a, 0x60, 0x28, 0x60, 0x00, 0x63, 0xc0, 0x4f, 0xc0, 0x4f, 0xc2,
0xaa, 0x15, 0xa8, 0x55, 0x80, 0x55, 0x00, 0x54, 0x00, 0x40, 0x02, 0x00, 0x2a, 0x00, 0xaa, 0x01,
0x80, 0x2d, 0x82, 0xad, 0xaa, 0xad, 0xea, 0xad, 0xea, 0x89, 0xe8, 0x09, 0xc0, 0x09, 0x80, 0x09,
0x00, 0x00, 0x3f, 0xff, 0x3f, 0xbf, 0x3f, 0x95, 0x3a, 0x95, 0x3d, 0x55, 0x3d, 0x55, 0x3d, 0x55,
0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x00, 0x02, 0xff, 0xf2, 0xff, 0xfa, 0x55, 0xfa, 0x55, 0xaa, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42,
0xaa, 0xaa, 0x95, 0x55, 0x95, 0xd5, 0x95, 0xc0, 0x9f, 0xc0, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00,
0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xa9, 0xff, 0xf9, 0xff, 0xf5, 0x00, 0xf5, 0x00, 0x55, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29,
0xff, 0xff, 0xc0, 0x00, 0xc0, 0x80, 0xc0, 0x95, 0xca, 0x95, 0xc1, 0x55, 0xc1, 0x55, 0xc1, 0x55,
0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0xaa, 0xa8, 0xff, 0xf8, 0xff, 0xf0, 0x55, 0xf0, 0x55, 0x00, 0x55, 0x68, 0x55, 0x68, 0x55, 0x68,
0x55, 0x55, 0x43, 0xff, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb,
0xaa, 0xaa, 0x00, 0x05, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f, 0x05, 0x5f,
0xaa, 0xaa, 0x00, 0x55, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff, 0x54, 0xff,
0x55, 0x55, 0x20, 0x89, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65, 0x9a, 0x65,
0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55, 0x29, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29,
0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00, 0x94, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42, 0x55, 0x42,
0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55, 0x81, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81, 0xaa, 0x81,
0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x55, 0x55, 0x55, 0x55,
0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0xa0, 0x0f, 0x55, 0x55, 0x55, 0x55,
0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0xa8, 0xff, 0x55, 0x55, 0x55, 0x55,
0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x00, 0x00, 0x00, 0x00,
0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb, 0x40, 0xeb, 0x43, 0xeb,
0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a, 0x50, 0x0a,
0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa, 0x54, 0xaa,
0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10, 0x45, 0x10,
0xaa, 0xaa, 0x00, 0x00, 0xcc, 0xcc, 0xff, 0xff, 0x55, 0x55, 0xaa, 0xaa, 0x7f, 0xf5, 0x57, 0xfd,
0x55, 0x55, 0x4d, 0x00, 0x79, 0x3f, 0x79, 0x3f, 0x79, 0x3f, 0x79, 0x3f, 0x79, 0xaa, 0x55, 0x55,
0x55, 0x55, 0x02, 0x4d, 0xfe, 0x79, 0xfe, 0x79, 0xfe, 0x79, 0xfe, 0x79, 0xaa, 0x79, 0x55, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x95, 0xa9, 0x40, 0x94, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0xd5, 0x00, 0x00, 0x22, 0x08, 0x8a, 0x22, 0x2a,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0x55, 0x0a, 0x55, 0x40, 0x44, 0x00, 0x10, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x01, 0x55, 0xa8, 0x15, 0x82, 0x81,
0x40, 0x15, 0x54, 0x01, 0x55, 0x40, 0x15, 0x50, 0x01, 0x54, 0x40, 0x15, 0x54, 0x01, 0x55, 0x40,
0x40, 0x24, 0x4f, 0xe7, 0x4f, 0xe7, 0x4f, 0xe7, 0x4f, 0xe7, 0x4f, 0xe7, 0x6a, 0xa7, 0x55, 0x55,
0x4a, 0xac, 0xc9, 0x5c, 0xc9, 0x5c, 0xc9, 0x5c, 0xc9, 0x5c, 0xc9, 0x5c, 0xcf, 0xfc, 0x00, 0x00,
0xaa, 0xaa, 0xaa, 0xa5, 0xaa, 0x90, 0xaa, 0x40, 0xa9, 0x03, 0xa4, 0x0f, 0x90, 0x03, 0x40, 0x0f,
0x40, 0xaa, 0x0a, 0xab, 0x2a, 0xae, 0xaa, 0xbb, 0xaa, 0xee, 0xab, 0xbb, 0xaa, 0xef, 0xab, 0xbb,
0x55, 0x44, 0xd5, 0x11, 0xd4, 0x44, 0xd5, 0x10, 0xd4, 0x40, 0xd1, 0x10, 0x44, 0x4a, 0x51, 0x2a,
0x2a, 0x65, 0xaa, 0x98, 0xaa, 0x67, 0xa9, 0x98, 0xaa, 0x67, 0xa9, 0x98, 0xfa, 0x66, 0xfd, 0x99,
0x54, 0xff, 0x51, 0x0f, 0x54, 0x43, 0x95, 0x10, 0x55, 0x44, 0x95, 0x51, 0x65, 0x54, 0x95, 0x51,
0xaa, 0xaa, 0x0a, 0xaa, 0xf2, 0xaa, 0x3c, 0xaa, 0x4f, 0x2a, 0x53, 0xca, 0x50, 0xf2, 0x54, 0x3c,
0xaa, 0xa9, 0xaa, 0xa9, 0xaa, 0xa4, 0xaa, 0x90, 0xaa, 0x90, 0xaa, 0x40, 0xaa, 0x40, 0xa9, 0x00,
0x55, 0x40, 0x55, 0x00, 0x54, 0x40, 0x51, 0x00, 0x54, 0x50, 0x51, 0x55, 0x45, 0x55, 0x11, 0x55,
0xa2, 0x21, 0x88, 0x81, 0x22, 0x05, 0x88, 0x95, 0x21, 0x57, 0x55, 0x55, 0x55, 0x57, 0x55, 0x55,
0x44, 0xbf, 0x12, 0xef, 0x47, 0xbf, 0x1e, 0xff, 0x4b, 0xbf, 0x1e, 0xff, 0x4b, 0xbf, 0x1e, 0xff,
0xaa, 0x33, 0xa9, 0x8c, 0xaa, 0x73, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c,
0x40, 0x03, 0x80, 0x00, 0x60, 0x00, 0x94, 0x00, 0x65, 0x40, 0x99, 0x55, 0x65, 0x55, 0x99, 0x55,
0x94, 0x0f, 0x64, 0x0f, 0x98, 0x03, 0xa7, 0x00, 0xac, 0xc0, 0xf3, 0x30, 0xfc, 0xc0, 0xff, 0x30,
0x40, 0x00, 0x40, 0x00, 0x90, 0x00, 0xa4, 0x00, 0xa4, 0x00, 0x69, 0x00, 0x69, 0x00, 0x5a, 0x40,
0xa9, 0x00, 0xa9, 0x00, 0xa4, 0x00, 0xa4, 0x00, 0xa4, 0x03, 0xa4, 0x00, 0x90, 0x03, 0x90, 0x0c,
0x45, 0x55, 0x15, 0x55, 0x45, 0x58, 0x15, 0x42, 0x45, 0x08, 0x15, 0x02, 0x54, 0x08, 0x14, 0x22,
0xaa, 0xa9, 0xaa, 0xa6, 0xce, 0xa9, 0x33, 0xa6, 0xcf, 0xe9, 0x3f, 0xe6, 0xcf, 0xe9, 0x3f, 0xf6,
0x4b, 0xff, 0x1e, 0xff, 0x47, 0xff, 0x12, 0xff, 0x44, 0xff, 0x11, 0x3f, 0x44, 0x0f, 0x11, 0x00,
0x55, 0x1e, 0x55, 0x4b, 0x55, 0x2e, 0x55, 0x7b, 0x55, 0xee, 0x56, 0xbb, 0x5a, 0xee, 0xaa, 0xbb,
0x8a, 0xaa, 0x22, 0xaa, 0x8a, 0x95, 0x22, 0x55, 0x89, 0x55, 0x21, 0x55, 0x8b, 0x55, 0x2d, 0x55,
0xa8, 0x88, 0xaa, 0x20, 0x5a, 0x88, 0x56, 0x22, 0x55, 0x88, 0x55, 0xa2, 0x55, 0x48, 0x55, 0x62,
0x50, 0x6a, 0x50, 0x6a, 0x54, 0x1a, 0x54, 0x1a, 0x54, 0x1a, 0x54, 0x1a, 0x55, 0x06, 0x55, 0x06,
0xd0, 0x02, 0xd0, 0x08, 0xd0, 0x02, 0x40, 0x08, 0x40, 0x02, 0x40, 0x08, 0x40, 0x02, 0x40, 0x88,
0x50, 0x08, 0x10, 0x22, 0x50, 0x88, 0x50, 0x22, 0x50, 0x88, 0x50, 0x22, 0x50, 0x88, 0x50, 0x22,
0x55, 0x52, 0xd5, 0x58, 0x55, 0x52, 0xd5, 0x58, 0x75, 0x52, 0xd5, 0x58, 0x75, 0x52, 0xd5, 0x58,
0x44, 0x00, 0x11, 0x00, 0x44, 0x00, 0x11, 0x00, 0x44, 0x00, 0x11, 0x00, 0x44, 0x00, 0x11, 0x0a,
0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0xa5, 0x44,
0x87, 0x55, 0x2d, 0x55, 0x87, 0x55, 0x2d, 0x55, 0x87, 0x55, 0x2d, 0x55, 0x87, 0x55, 0x2d, 0x55,
0xaa, 0x9c, 0xaa, 0xa3, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c, 0xaa, 0x63, 0xaa, 0x9c, 0xaa, 0x63,
0x55, 0x07, 0x55, 0x07, 0x15, 0x07, 0x55, 0x41, 0x15, 0x41, 0x55, 0x41, 0x15, 0x41, 0x56, 0x41,
0x81, 0x53, 0x81, 0x7c, 0x81, 0x53, 0x81, 0x7c, 0x85, 0x5f, 0x85, 0x74, 0x85, 0x5f, 0x85, 0x74,
0xa8, 0xcc, 0xa8, 0x33, 0xa8, 0xcc, 0xaa, 0x33, 0xaa, 0xcc, 0xaa, 0xb3, 0xaa, 0x6c, 0xaa, 0x99,
0xaa, 0xbd, 0xaa, 0xb7, 0xaa, 0xbd, 0xaa, 0xf7, 0xaa, 0xfd, 0xab, 0xf7, 0xaf, 0xfd, 0x3f, 0xf7,
0x44, 0x3f, 0x11, 0xff, 0x44, 0xff, 0x12, 0xff, 0x47, 0xff, 0x12, 0xff, 0x4b, 0xff, 0x1e, 0xff,
0xa8, 0xcc, 0xaa, 0x33, 0xaa, 0xcc, 0xaa, 0xb3, 0xaa, 0x4c, 0xaa, 0xb3, 0xaa, 0x6c, 0xaa, 0x93,
0x8b, 0x55, 0x21, 0x55, 0x8b, 0x55, 0x22, 0x55, 0x88, 0x55, 0x22, 0x95, 0x88, 0xa5, 0x22, 0xaa,
0x55, 0x4c, 0x55, 0xb3, 0x55, 0x4c, 0x55, 0x33, 0x55, 0xcc, 0x57, 0x33, 0x5f, 0xcc, 0xff, 0x33,
0x8f, 0xe8, 0x0f, 0xe8, 0x8f, 0xe8, 0x0f, 0xe8, 0xbf, 0xd8, 0x3f, 0xd8, 0xbf, 0xd8, 0x3f, 0xd8,
0x85, 0x5f, 0x85, 0x74, 0x85, 0x5c, 0x85, 0x74, 0x85, 0x5c, 0x85, 0x5c, 0x85, 0x74, 0x85, 0x5c,
0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11, 0x55, 0x11, 0x55, 0x44, 0x55, 0x11,
0x45, 0x56, 0x15, 0x59, 0x45, 0x56, 0x15, 0x59, 0x45, 0x56, 0x45, 0x56, 0x15, 0x59, 0x45, 0x56,
0x4b, 0xff, 0x1e, 0xff, 0x4b, 0xff, 0x1f, 0xff, 0x4a, 0xff, 0x4b, 0xff, 0x1e, 0xff, 0x4b, 0xff,
0x55, 0x1e, 0x55, 0x4b, 0x55, 0x1e, 0x55, 0x1e, 0x55, 0x4b, 0x55, 0x1e, 0x55, 0x4b, 0x55, 0x1e,
0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xa5,
0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x88, 0xaa, 0x22, 0xaa, 0x88, 0xaa, 0x22, 0x5a, 0x88,
0xd5, 0x6c, 0x15, 0x6c, 0xd5, 0x6c, 0xd5, 0x6c, 0x15, 0x6c, 0xd5, 0x6c, 0x15, 0x6c, 0xd5, 0x6c,
0x85, 0x74, 0x85, 0x5c, 0x85, 0x74, 0x85, 0x5c, 0x81, 0x70, 0x81, 0x50, 0x81, 0x70, 0x81, 0x50,
0xaa, 0x99, 0xaa, 0x6c, 0xaa, 0xb3, 0xaa, 0xcc, 0xaa, 0x33, 0xa8, 0xcc, 0xa8, 0x33, 0xa8, 0xcc,
0x80, 0x0c, 0x50, 0x03, 0x54, 0x0c, 0x55, 0x03, 0x55, 0x0c, 0x55, 0x43, 0x55, 0x4c, 0x55, 0x43,
0x4e, 0xff, 0x1b, 0xff, 0x46, 0xff, 0x11, 0xff, 0x44, 0xff, 0x11, 0x7f, 0x44, 0x5f, 0x11, 0x55,
0xaa, 0x8c, 0xaa, 0x73, 0xaa, 0x8c, 0xaa, 0x33, 0xaa, 0xcc, 0xab, 0x33, 0xaf, 0xcc, 0xff, 0x33,
0x88, 0x15, 0x22, 0x55, 0x88, 0x55, 0x23, 0x55, 0x89, 0x55, 0x23, 0x55, 0x8d, 0x55, 0x27, 0x55,
0xa9, 0x11, 0xaa, 0x44, 0xaa, 0x11, 0xaa, 0x84, 0xaa, 0xd1, 0xaa, 0x84, 0xaa, 0xe1, 0xaa, 0xb4,
0x80, 0x1e, 0xc0, 0x1e, 0xa0, 0x3e, 0xe0, 0x3e, 0xa0, 0x3e, 0xe0, 0x3e, 0xa8, 0xbe, 0xea, 0xbe,
0x80, 0x03, 0x80, 0x0c, 0x80, 0x03, 0x80, 0x0c, 0x80, 0x03, 0x80, 0x0c, 0x80, 0x03, 0x80, 0x4c,
0x55, 0x05, 0x55, 0x05, 0x15, 0x05, 0x55, 0x41, 0x15, 0x41, 0x55, 0x41, 0x15, 0x41, 0x56, 0x41,
};
static PROGMEM prog_uchar platformer_pal[] = {
0x9f, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0x00, 0x00,
0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73, 0x00, 0x00, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x00, 0x00,
0x7f, 0x36, 0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73, 0x7f, 0x36, 0x3f, 0x5f, 0xff, 0x52, 0x00, 0x00,
0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73,
0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x7f, 0x36, 0x3f, 0x5f, 0xff, 0x52, 0x9f, 0x73,
0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x9f, 0x73, 0x7f, 0x36, 0xff, 0x52, 0x3f, 0x5f, 0x00, 0x00,
0x7f, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x7f, 0x36, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x3e, 0x9f, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x9f, 0x3a, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x3a, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00,
0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00,
0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x42, 0xbf, 0x3e, 0x00, 0x00, 0x00, 0x00,
0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00, 0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00,
0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00, 0xff, 0x46, 0xdf, 0x42, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00,
0x1f, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x36, 0xba, 0x32, 0x1f, 0x4b, 0x00, 0x00,
0x1f, 0x4b, 0xba, 0x32, 0xdb, 0x36, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0x0b, 0x27, 0xf3, 0x47,
0x00, 0x00, 0x1f, 0x4b, 0x0b, 0x27, 0xf3, 0x47, 0x1f, 0x4b, 0x87, 0x16, 0x00, 0x00, 0x0b, 0x27,
0x00, 0x00, 0x25, 0x02, 0x87, 0x16, 0x1f, 0x4b, 0xdb, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xba, 0x32, 0xdb, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x4b, 0x0b, 0x27, 0xf3, 0x47,
0x8f, 0x37, 0x0b, 0x27, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x27, 0x25, 0x02, 0x87, 0x16, 0x8f, 0x37,
0x87, 0x16, 0x00, 0x00, 0x25, 0x02, 0x1f, 0x4b, 0x8f, 0x37, 0x00, 0x00, 0x0b, 0x27, 0xf3, 0x47,
0x0b, 0x27, 0x87, 0x16, 0x8f, 0x37, 0x00, 0x00, 0x25, 0x02, 0x00, 0x00, 0x87, 0x16, 0x0b, 0x27,
0xa3, 0x66, 0x29, 0x73, 0xe4, 0x49, 0xb2, 0x7f, 0xa3, 0x66, 0x29, 0x73, 0xb2, 0x7f, 0x00, 0x00,
0xa3, 0x66, 0x29, 0x73, 0xe4, 0x49, 0xb2, 0x7f, 0x32, 0x47, 0x95, 0x53, 0xee, 0x36, 0xac, 0x2e,
0x32, 0x47, 0x95, 0x53, 0xee, 0x36, 0x00, 0x00, 0x32, 0x47, 0xac, 0x2e, 0xee, 0x36, 0x95, 0x53,
0xbf, 0x4f, 0x5e, 0x43, 0x9c, 0x2a, 0xfd, 0x36, 0xbf, 0x4f, 0x5e, 0x43, 0xfd, 0x36, 0x00, 0x00,
0x9c, 0x2a, 0x5e, 0x43, 0xfd, 0x36, 0xbf, 0x4f, 0x45, 0x2e, 0x00, 0x00, 0xff, 0x7f, 0x8f, 0x57,
0x8f, 0x57, 0xea, 0x42, 0x00, 0x00, 0x45, 0x2e, 0xea, 0x42, 0x45, 0x2e, 0x00, 0x00, 0xa0, 0x19,
0x45, 0x2e, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x00, 0xa3, 0x66, 0x29, 0x73, 0xb2, 0x7f, 0x00, 0x00,
0x29, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x73, 0xe4, 0x49, 0xa3, 0x66, 0x00, 0x00,
0x32, 0x47, 0x95, 0x53, 0xee, 0x36, 0x00, 0x00, 0x32, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xee, 0x36, 0x32, 0x47, 0xac, 0x2e, 0x00, 0x00, 0xbf, 0x4f, 0x5e, 0x43, 0xfd, 0x36, 0x00, 0x00,
0x5e, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x36, 0x9c, 0x2a, 0x5e, 0x43, 0x00, 0x00,
0x45, 0x2e, 0x00, 0x00, 0xff, 0x7f, 0x8f, 0x57, 0xea, 0x42, 0x00, 0x00, 0x8f, 0x57, 0x45, 0x2e,
0xea, 0x42, 0x00, 0x00, 0x45, 0x2e, 0xa0, 0x19, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x00, 0x00, 0x00,
0x45, 0x2e, 0x00, 0x00, 0xff, 0x7f, 0x8f, 0x57, 0xea, 0x42, 0x8f, 0x57, 0x45, 0x2e, 0x00, 0x00,
0xea, 0x42, 0x45, 0x2e, 0xa0, 0x19, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x19, 0x00, 0x00, 0x00, 0x00,
0x8c, 0x7e, 0x01, 0x45, 0x00, 0x00, 0x84, 0x59, 0x20, 0x7f, 0x00, 0x00, 0x80, 0x49, 0x40, 0x62,
0x20, 0x7f, 0x00, 0x00, 0x80, 0x49, 0x40, 0x62, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0x00, 0x00, 0x4f, 0x5b, 0x88, 0x42, 0x2e, 0x57, 0x1f, 0x4b,
0xa8, 0x46, 0x2e, 0x57, 0x67, 0x3e, 0x1f, 0x4b, 0x67, 0x3e, 0x1f, 0x4b, 0x88, 0x42, 0x00, 0x00,
0x01, 0x45, 0x84, 0x59, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7f, 0x00, 0x00, 0x80, 0x49, 0x40, 0x62,
0x00, 0x00, 0x40, 0x62, 0x20, 0x7f, 0x80, 0x49, 0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0xd1, 0x73,
0x4f, 0x5b, 0x88, 0x42, 0xd1, 0x73, 0x6e, 0x6f, 0xc9, 0x4a, 0x2e, 0x57, 0x2c, 0x67, 0x8f, 0x6f,
0xeb, 0x5e, 0x88, 0x42, 0xc9, 0x4a, 0x2c, 0x67, 0xa8, 0x5a, 0xeb, 0x62, 0x2c, 0x67, 0x67, 0x3e,
0x67, 0x3e, 0xa8, 0x5a, 0x1f, 0x4b, 0x88, 0x42, 0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0x00, 0x00,
0xd1, 0x73, 0x4f, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x6f, 0x2e, 0x57, 0xd1, 0x73, 0xc9, 0x4a,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0x88, 0x42, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a,
0xeb, 0x62, 0x88, 0x42, 0xc9, 0x4a, 0xa8, 0x5a, 0x67, 0x3e, 0xa8, 0x5a, 0xeb, 0x62, 0x88, 0x42,
0x1f, 0x4b, 0x67, 0x3e, 0x88, 0x42, 0x00, 0x00, 0x4f, 0x5b, 0x88, 0x42, 0x1f, 0x4b, 0xd1, 0x73,
0xd1, 0x73, 0x4f, 0x5b, 0x6e, 0x6f, 0x00, 0x00, 0xd1, 0x73, 0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a, 0x88, 0x42,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x2c, 0x67, 0x67, 0x3e, 0xeb, 0x62, 0x88, 0x42, 0x00, 0x00,
0x88, 0x42, 0x67, 0x3e, 0x1f, 0x4b, 0x00, 0x00, 0x4f, 0x5b, 0x88, 0x42, 0xd1, 0x73, 0x1f, 0x4b,
0xd1, 0x73, 0x4f, 0x5b, 0x6e, 0x6f, 0x00, 0x00, 0x2e, 0x57, 0x6e, 0x6f, 0xc9, 0x4a, 0xd1, 0x73,
0xc9, 0x4a, 0x2e, 0x57, 0x2c, 0x67, 0x00, 0x00, 0x88, 0x42, 0xc9, 0x4a, 0x2c, 0x67, 0x00, 0x00,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x2c, 0x67, 0x67, 0x3e, 0xa8, 0x5a, 0xeb, 0x62, 0x88, 0x42,
0x88, 0x42, 0x67, 0x3e, 0xa8, 0x5a, 0x1f, 0x4b, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0xd1, 0x73, 0x2e, 0x57, 0x4f, 0x5b, 0x6e, 0x6f, 0x4f, 0x5b, 0xc9, 0x4a, 0x6e, 0x6f, 0x2e, 0x57,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0xc9, 0x4a, 0xeb, 0x62, 0x2c, 0x67, 0x88, 0x42,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x2c, 0x67, 0x67, 0x3e, 0xeb, 0x62, 0xa8, 0x5a, 0x88, 0x42,
0x67, 0x3e, 0xeb, 0x62, 0x88, 0x42, 0xa8, 0x5a, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0x2e, 0x57, 0x4f, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x5b, 0x2e, 0x57, 0xc9, 0x4a, 0x00, 0x00,
0xc9, 0x4a, 0x2e, 0x57, 0x6e, 0x6f, 0x2c, 0x67, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a, 0x88, 0x42,
0xc9, 0x4a, 0xeb, 0x62, 0x88, 0x42, 0x00, 0x00, 0x67, 0x3e, 0xeb, 0x62, 0x88, 0x42, 0x00, 0x00,
0x67, 0x3e, 0xa8, 0x5a, 0xeb, 0x62, 0x88, 0x42, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0xd1, 0x73, 0x2e, 0x57, 0x4f, 0x5b, 0x6e, 0x6f, 0x2e, 0x57, 0x6e, 0x6f, 0x4f, 0x5b, 0xc9, 0x4a,
0x2e, 0x57, 0xc9, 0x4a, 0x6e, 0x6f, 0x2c, 0x67, 0x88, 0x42, 0xeb, 0x62, 0x2c, 0x67, 0xc9, 0x4a,
0x88, 0x42, 0xeb, 0x62, 0xc9, 0x4a, 0x2c, 0x67, 0x67, 0x3e, 0x88, 0x42, 0xeb, 0x62, 0xa8, 0x5a,
0xa8, 0x5a, 0xeb, 0x62, 0x67, 0x3e, 0x88, 0x42, 0x4f, 0x5b, 0xf2, 0x77, 0x88, 0x42, 0xd1, 0x73,
0x88, 0x42, 0x67, 0x3e, 0xa8, 0x5a, 0x00, 0x00,
};

View File

@ -0,0 +1,124 @@
#include <SPI.h>
#include <GD.h>
#include "platformer.h"
int atxy(int x, int y)
{
return (y << 6) + x;
}
// copy a (w,h) rectangle from the source image (x,y) into picture RAM
static void rect(unsigned int dst, byte x, byte y, byte w, byte h)
{
prog_uchar *src = platformer_pic + (16 * y) + x;
while (h--) {
GD.copy(dst, src, w);
dst += 64;
src += 16;
}
}
#define SINGLE(x, y) (pgm_read_byte_near(&platformer_pic[(y) * 16 + (x)]))
// Draw a random 8-character wide background column at picture RAM dst
void draw_column(unsigned int dst)
{
byte y;
byte x;
byte ch;
// Clouds and sky, 11 lines
rect(dst, 0, 0, 8, 11);
// bottom plain sky, lines 11-28
ch = SINGLE(0,11);
for (y = 11; y < 28; y++)
GD.fill(dst + (y << 6), ch, 8);
// randomly choose between background elements
byte what = random(256);
if (what < 10) {
// big mushroom thing
y = random(11, 18);
rect(dst + atxy(0, y), 8, 18, 8, 9);
y += 9;
byte i;
while (y < 28) {
rect(dst + atxy(0, y), 8, 23 + (i & 3), 8, 1);
i++, y++;
}
} else if (what < 32) {
// pair of green bollards
for (x = 0; x < 8; x += 4) {
y = random(20, 25);
rect(dst + atxy(x, y), 6, 11, 4, 3);
y += 3;
while (y < 28) {
rect(dst + atxy(x, y), 6, 13, 4, 1);
y++;
}
}
} else {
// hills
for (x = 0; x < 8; x += 2) {
y = random(20, 25);
rect(dst + atxy(x, y), 4, 11, 2, 3);
y += 3;
while (y < 28) {
rect(dst + atxy(x, y), 4, 13, 2, 1);
y++;
}
}
// foreground blocks
x = random(5);
y = random(11, 24);
byte blk = random(4);
rect(dst + atxy(x, y), blk * 4, 14, 4, 3);
y += 3;
while (y < 28) {
rect(dst + atxy(x, y), blk * 4, 17, 4, 1);
y++;
}
}
// Ground, line 28
ch = SINGLE(0,18);
GD.fill(dst + atxy(0,28), ch, 8);
// Underground, line 29
ch = SINGLE(0,19);
GD.fill(dst + atxy(0,29), ch, 8);
}
unsigned long xscroll;
void setup()
{
GD.begin();
GD.copy(RAM_CHR, platformer_chr, sizeof(platformer_chr));
GD.copy(RAM_PAL, platformer_pal, sizeof(platformer_pal));
int i;
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
for (i = 0; i < 64; i += 8) {
draw_column(atxy(i, 0));
}
}
void loop()
{
xscroll++;
if ((xscroll & 63) == 0) {
// figure out where to draw the 64-pixel draw_column
// offscreen_pixel is the pixel x draw_column that is offscreen...
int offscreen_pixel = ((xscroll + (7 * 64)) & 511);
// offscreen_ch is the character address
byte offscreen_ch = (offscreen_pixel >> 3);
draw_column(atxy(offscreen_ch, 0));
}
GD.waitvblank();
GD.wr16(SCROLL_X, xscroll);
}

View File

@ -0,0 +1,922 @@
static PROGMEM prog_uchar pickups2_img[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x02, 0x41, 0x43, 0x45, 0x46, 0x49, 0x4c, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x4f, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x26, 0x10, 0x26, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x26, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x52, 0x50, 0x2a, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x02, 0x2a, 0x26, 0x26, 0x50, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x52, 0x2a, 0x26, 0x10, 0x26, 0x26, 0x52, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x2a, 0x10, 0x10, 0x26, 0x2a, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x02, 0x41, 0x43, 0x45, 0x46, 0x49, 0x4c, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x02, 0x14, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x14, 0x2d, 0x30, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x1c, 0x02, 0x14, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x30, 0x2f, 0x1b, 0x00, 0x02, 0x2d, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x1c, 0x1b, 0x00, 0x14, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x30, 0x2f, 0x1c, 0x1b, 0x15, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x32, 0x30, 0x2f, 0x2d, 0x20, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x10, 0x0a, 0x10, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x04, 0x0a, 0x10, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x10, 0x0a, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x11, 0x10, 0x11, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x12, 0x04, 0x12, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x10, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x12, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0xff, 0x34, 0xff, 0x34, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x17, 0x3f, 0x34, 0x3f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4e, 0x4c, 0x49, 0x49, 0x4c, 0x4d, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x47, 0x44, 0x42, 0x43, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x47, 0x43, 0x42, 0x41, 0x41, 0x42, 0x46, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x47, 0x43, 0x02, 0x41, 0x41, 0x42, 0x46, 0x49, 0x4b, 0x4d, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x47, 0x43, 0x42, 0x41, 0x41, 0x42, 0x44, 0x46, 0x49, 0x4b, 0x4d, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x47, 0x43, 0x41, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4e, 0xff,
0xff, 0xff, 0x4d, 0x47, 0x43, 0x42, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff,
0xff, 0xff, 0x4c, 0x47, 0x43, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff, 0xff,
0xff, 0x4c, 0x47, 0x42, 0x41, 0x42, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff, 0xff, 0xff,
0x4c, 0x47, 0x42, 0x41, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff,
0x47, 0x41, 0x43, 0x46, 0x49, 0x4b, 0x4c, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x29, 0x26, 0x26, 0x26, 0x26, 0x26, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x29, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x29, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x29, 0x13, 0x10, 0x0a, 0x04, 0x04, 0x07, 0x07, 0x0a, 0x0a, 0x10, 0x13, 0x29, 0xff, 0xff,
0xff, 0x26, 0x10, 0x0a, 0x04, 0x07, 0x07, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x26, 0xff, 0xff,
0xff, 0x29, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x29, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x29, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x29, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x2a, 0x2a, 0x27, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x2a, 0x27, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x12, 0x0a, 0x10, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0c, 0x04, 0x0c, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0c, 0x07, 0x0a, 0x10, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x0a, 0x0c, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x13, 0x13, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x34, 0xff, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x4d, 0x4a, 0x48, 0x4d, 0x3f, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x4a, 0x43, 0x41, 0x43, 0x46, 0x49, 0x46, 0x48, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x48, 0x43, 0x02, 0x02, 0x41, 0x43, 0x43, 0x41, 0x41, 0x48, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x46, 0x02, 0x02, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x48, 0xff, 0xff,
0xff, 0xff, 0x4a, 0x46, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x46, 0xff, 0xff,
0xff, 0xff, 0x4a, 0x46, 0x02, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x48, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x46, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x46, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x46, 0x48, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x46, 0x41, 0x41, 0x46, 0x41, 0x46, 0x48, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x4a, 0x46, 0x46, 0x49, 0x46, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x49, 0x4d, 0xff, 0x4d, 0x49, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x43, 0x49, 0x4d, 0x49, 0x43, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x49, 0x43, 0x41, 0x02, 0x43, 0x49, 0x43, 0x02, 0x02, 0x43, 0x49, 0xff, 0xff, 0xff,
0xff, 0xff, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43, 0x41, 0x41, 0x41, 0x41, 0x43, 0xff, 0xff, 0xff,
0xff, 0xff, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x14, 0x1b, 0x1b, 0x43, 0x43, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x14, 0x1b, 0x1b, 0x1b, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x22, 0x24, 0x37, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x50, 0x53, 0x50, 0x50, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x50, 0x53, 0x55, 0xff, 0x50, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x51, 0x53, 0x50, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x02, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x4f, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x53, 0x51, 0x50, 0x4f, 0x50, 0x51, 0x53, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x02, 0x1b, 0x2d, 0x2f, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x44, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x44, 0x15, 0x15, 0x32, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x15, 0x00, 0x15, 0x32, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x00, 0x02, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x00, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x00, 0x02, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x15, 0x00, 0x02, 0x15, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x32, 0x15, 0x02, 0x15, 0x44, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x41, 0x44, 0x44, 0x47, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x02, 0x1b, 0x2d, 0x2f, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x4d, 0x49, 0x49, 0x3f, 0x23, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x34, 0x3f, 0x43, 0x41, 0x43, 0x3f, 0x3f, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x3f, 0x34, 0x3f, 0x41, 0x41, 0x3f, 0x41, 0x43, 0x43, 0x49, 0x3f, 0x4d, 0xff, 0xff,
0x4d, 0x49, 0x43, 0x3f, 0x41, 0x41, 0x3f, 0x34, 0x3f, 0x41, 0x41, 0x3f, 0x34, 0x3f, 0x4d, 0xff,
0x49, 0x3f, 0x3f, 0x43, 0x41, 0x3f, 0x34, 0x23, 0x34, 0x3f, 0x41, 0x3f, 0x23, 0x34, 0x3f, 0xff,
0x3f, 0x34, 0x23, 0x3f, 0x43, 0x41, 0x3f, 0x3f, 0x3f, 0x41, 0x43, 0x43, 0x3f, 0x3f, 0x4c, 0xff,
0x4d, 0x3f, 0x34, 0x3f, 0x49, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0x49, 0x4d, 0xff,
0xff, 0x4d, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x08, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x07, 0x04, 0x07, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x49, 0x43, 0x43, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x4a, 0x49, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x49, 0x4c, 0x4a, 0x4a, 0x4c, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x45, 0x43, 0x49, 0x4c, 0x4c, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x43, 0x49, 0x4c, 0x49, 0x43, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x45, 0x43, 0x45, 0x49, 0x4c, 0x49, 0x4c, 0x4c, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x43, 0x49, 0x45, 0x49, 0x4c, 0x4c, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x4c, 0x4c, 0x4c, 0x4a, 0x4c, 0x4a, 0x43, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x45, 0x49, 0x4c, 0x49, 0x45, 0x4a, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x2d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x02, 0x02, 0x2d, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x02, 0x2d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x28, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x13, 0x13, 0x28, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x13, 0x28, 0x28, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x13, 0x26, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x13, 0x28, 0x2a, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x13, 0x10, 0x04, 0x13, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x13, 0x10, 0x13, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x13, 0x28, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x10, 0x4d, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x10, 0x49, 0x43, 0x04, 0x10, 0x43, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x4d, 0x49, 0x49, 0x43, 0x10, 0x49, 0x49, 0x10, 0x43, 0x49, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x2a, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x10, 0x10, 0x43, 0x49, 0x43, 0x4d, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x43, 0x49, 0x49, 0x49, 0x4d, 0xff,
0xff, 0x2a, 0x26, 0x26, 0x2a, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x49, 0x43, 0x49, 0x4d, 0xff,
0xff, 0x2a, 0x26, 0x2a, 0x02, 0x2d, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff,
0xff, 0x2a, 0x26, 0x26, 0x2a, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x26, 0x26, 0x26, 0x2a, 0x4d, 0x49, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x2a, 0x2a, 0x2a, 0x4d, 0x49, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x02, 0x49, 0x49, 0x49, 0x49, 0x49, 0x26, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x49, 0x49, 0x49, 0x02, 0x04, 0x26, 0x49, 0x26, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff,
0xff, 0x49, 0x10, 0x49, 0x02, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x49, 0x4d, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x49, 0x10, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x10, 0x04, 0x10, 0x26, 0x26, 0x26, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x49, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x4d, 0x4d, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0x4d, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x34, 0x02, 0x34, 0x34, 0x34, 0x34, 0x34, 0x17, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x34, 0x34, 0x34, 0x02, 0x03, 0x22, 0x34, 0x17, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff,
0xff, 0x34, 0x17, 0x34, 0x02, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x34, 0x17, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x34, 0x17, 0x02, 0x22, 0x22, 0x22, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2d, 0x02, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x02, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2d, 0x2d, 0x2d, 0x02, 0x15, 0x1b, 0x2d, 0x02, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff,
0xff, 0x2d, 0x02, 0x2d, 0x02, 0x33, 0x33, 0x33, 0x33, 0x33, 0x2d, 0x33, 0x2d, 0x33, 0xff, 0xff,
0xff, 0xff, 0x2d, 0x02, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x2d, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2d, 0x02, 0x15, 0x1b, 0x2d, 0x15, 0x2d, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2d, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x33, 0x33, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0x10, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x49, 0x43, 0x2a, 0x10, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x04, 0x10, 0x34, 0x26, 0x2a, 0x10, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x43, 0x49, 0x10, 0x10, 0x10, 0x26, 0x2a, 0x10, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x04, 0x10, 0x34, 0x26, 0x49, 0x43, 0x10, 0x26, 0x2a, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x26, 0x43, 0x49, 0x26, 0x10, 0x10, 0x26, 0x26, 0x26, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x10, 0x10, 0x26, 0x26, 0x26, 0x26, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x26, 0x26, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x4d, 0x49, 0x43, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x4d, 0x43, 0x02, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x4d, 0x49, 0x43, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x43, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x41, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x4d, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x43, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0x34, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x17, 0x3f, 0x17, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x17, 0x22, 0x3f, 0x3f, 0x3f, 0x22, 0x17, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x17, 0x34, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x34, 0x17, 0x34, 0x3f, 0xff, 0xff,
0xff, 0x3f, 0x17, 0x34, 0x3f, 0x3f, 0x3f, 0x34, 0x3f, 0x3f, 0x3f, 0x34, 0x17, 0x3f, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x17, 0x16, 0x3f, 0x17, 0x3f, 0x17, 0x3f, 0x16, 0x17, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x22, 0x3f, 0x34, 0x3f, 0x34, 0x3f, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x22, 0x17, 0x3f, 0x3f, 0x3f, 0x17, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x22, 0x17, 0x16, 0x3f, 0x17, 0x3f, 0x16, 0x17, 0x22, 0x34, 0x3f, 0xff, 0xff,
0xff, 0x3f, 0x34, 0x22, 0x17, 0x16, 0x3f, 0x22, 0x3f, 0x17, 0x17, 0x22, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x22, 0x17, 0x3f, 0x34, 0x3f, 0x34, 0x22, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x33, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x33, 0x4d, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x47, 0x2d, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x2d, 0x47, 0x4d, 0xff, 0xff,
0xff, 0x49, 0x44, 0x02, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x02, 0x44, 0x49, 0xff, 0xff,
0xff, 0x49, 0x46, 0x15, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x15, 0x46, 0x49, 0xff, 0xff,
0xff, 0x4d, 0x4a, 0x2d, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x2d, 0x4a, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x33, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x4d, 0x33, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x04, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x04, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x10, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x0a, 0x10, 0x10, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x2a, 0xff, 0x10, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x04, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0x28, 0x10, 0x04, 0x07, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x28, 0xff, 0xff,
0xff, 0x28, 0x0d, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0d, 0x28, 0xff, 0xff,
0xff, 0x28, 0x10, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x28, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x04, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x10, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x03, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x49, 0x46, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x03, 0x45, 0x42, 0x45, 0x03, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x45, 0x1b, 0x02, 0x1b, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x46, 0x45, 0x43, 0x33, 0x02, 0x33, 0x43, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff,
0xff, 0x4b, 0x49, 0x46, 0x45, 0x43, 0x20, 0x1b, 0x20, 0x43, 0x45, 0x46, 0x49, 0x4b, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x46, 0x45, 0x03, 0x43, 0x42, 0x43, 0x03, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x46, 0x45, 0x43, 0x43, 0x43, 0x45, 0x46, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x4b, 0x49, 0x46, 0x45, 0x46, 0x49, 0x4b, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x3f, 0x34,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x2a, 0x3f, 0x34, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x27, 0x2a, 0x3f, 0x3f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x10, 0x04, 0x10, 0x13, 0x2a, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x28, 0x10, 0x13, 0x28, 0x2a, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x10, 0x04, 0x10, 0x13, 0x28, 0x2a, 0x2a, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x28, 0x13, 0x13, 0x28, 0x2a, 0x2a, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x28, 0x04, 0x10, 0x13, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x12, 0x10, 0x11, 0x28, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x1e, 0x04, 0x11, 0x2a, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x12, 0x10, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x2a, 0x0a, 0x11, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x32, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x32, 0x1c, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x32, 0x2f, 0x1c, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x33, 0x2f, 0x2d, 0x1c, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2f, 0x2d, 0x1c, 0x15, 0x2d, 0x32, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x2f, 0x2d, 0x1c, 0x30, 0x15, 0x03, 0x20, 0x30, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x30, 0x1c, 0x1c, 0x15, 0x03, 0x20, 0x30, 0x33, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x20, 0x1c, 0x1c, 0x2f, 0x2f, 0x32, 0x30, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x20, 0x1c, 0x2f, 0x13, 0x10, 0x13, 0x32, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x20, 0x2f, 0x13, 0x10, 0x04, 0x10, 0x32, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x2f, 0x30, 0x10, 0x0a, 0x10, 0x13, 0x32, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x30, 0x13, 0x10, 0x13, 0x30, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x30, 0x30, 0x30, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x04, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x32, 0x2d, 0x03, 0x15, 0x1b, 0x1b, 0x1c, 0x2d, 0x32, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x04, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x29, 0x1e, 0x29, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x0a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x10, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0a, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x1e, 0x10, 0x0a, 0x04, 0x0a, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0x37, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x4a, 0x4c, 0x3b, 0x02, 0x1a, 0x25, 0x3b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x02, 0x45, 0x49, 0x25, 0x1a, 0x17, 0x1a, 0x34, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x46, 0x43, 0x43, 0x45, 0x3b, 0x25, 0x1a, 0x25, 0x3b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x49, 0x46, 0x45, 0x4a, 0x4c, 0x3b, 0x37, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4c, 0x4c, 0x2a, 0xff, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xff, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x20, 0x14, 0x02, 0x14, 0x20, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x20, 0x14, 0x02, 0x00, 0x02, 0x14, 0x20, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x30, 0x20, 0x02, 0x00, 0x02, 0x20, 0x30, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x20, 0x00, 0x14, 0x20, 0x02, 0x20, 0x14, 0x00, 0x20, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x02, 0x33, 0x33, 0x33, 0x2d, 0x33, 0x33, 0x33, 0x02, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x20, 0x33, 0x33, 0x2d, 0x33, 0x2d, 0x33, 0x33, 0x20, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x30, 0x14, 0x02, 0x33, 0x33, 0x33, 0x02, 0x14, 0x30, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x20, 0x20, 0x14, 0x00, 0x14, 0x20, 0x20, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0x2d, 0x33, 0xff, 0x33, 0x02, 0x33, 0x02, 0x33, 0x02, 0x33, 0xff, 0x33, 0x2d, 0xff, 0xff,
0x33, 0x02, 0x2d, 0x02, 0x33, 0x30, 0x20, 0x00, 0x20, 0x30, 0x33, 0x02, 0x2d, 0x02, 0x33, 0xff,
0xff, 0x2d, 0x33, 0xff, 0x2d, 0xff, 0x33, 0x30, 0x33, 0xff, 0x2d, 0xff, 0x33, 0x2d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x34, 0x17, 0x38, 0x34, 0x38, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x34, 0x38, 0x10, 0x13, 0x38, 0x17, 0x38, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x13, 0x10, 0x04, 0x04, 0x0a, 0x10, 0x38, 0x34, 0x17, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0x04, 0x04, 0x0a, 0x0a, 0x0a, 0x10, 0x38, 0x34, 0x10, 0x13, 0xff, 0xff,
0xff, 0xff, 0x13, 0x10, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x38, 0x10, 0x13, 0xff, 0xff,
0xff, 0xff, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x2a, 0xff, 0xff,
0xff, 0xff, 0xff, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x10, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x13, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x10, 0x04, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x02, 0x2d, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x14, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x30, 0x2d, 0x30, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x20, 0x15, 0x20, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x2f, 0x2d, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x03, 0x03, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x45, 0x45, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x54, 0x03, 0x47, 0x45, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x53, 0x54, 0x54, 0x03, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x54, 0x01, 0x03, 0x55, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1b, 0x01, 0x54, 0x54, 0x54, 0x03, 0x1b, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1b, 0x54, 0x01, 0x02, 0x54, 0x01, 0x14, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x15, 0x03, 0x54, 0x54, 0x54, 0x03, 0x1b, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x01, 0x54, 0x03, 0x1b, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x29, 0x28, 0x26, 0x26, 0x26, 0x4c, 0x43, 0x26, 0x26, 0x26, 0x28, 0x2a, 0xff,
0xff, 0xff, 0x29, 0x10, 0x10, 0x10, 0x10, 0x4c, 0x43, 0x10, 0x04, 0x10, 0x2a, 0x10, 0x28, 0x2a,
0xff, 0xff, 0x13, 0x0d, 0x0d, 0x0d, 0x4d, 0x4c, 0x49, 0x0d, 0x0d, 0x2a, 0x10, 0x2a, 0x2a, 0x28,
0xff, 0xff, 0x29, 0x13, 0x13, 0x49, 0x13, 0x4c, 0x49, 0x13, 0x13, 0x13, 0x2a, 0x13, 0x28, 0x2a,
0xff, 0x29, 0x28, 0x26, 0x26, 0x26, 0x4c, 0x43, 0x4c, 0x49, 0x26, 0x26, 0x26, 0x28, 0x2a, 0xff,
0x29, 0x10, 0x10, 0x10, 0x10, 0x4c, 0x43, 0x10, 0x04, 0x10, 0x2a, 0x10, 0x28, 0x2a, 0xff, 0xff,
0x13, 0x0d, 0x0d, 0x0d, 0x0d, 0x4c, 0x49, 0x0d, 0x10, 0x2a, 0x10, 0x2a, 0x2a, 0x28, 0xff, 0xff,
0x29, 0x13, 0x13, 0x13, 0x4c, 0x4c, 0x49, 0x13, 0x13, 0x13, 0x2a, 0x13, 0x28, 0x2a, 0xff, 0xff,
0xff, 0x29, 0x28, 0x28, 0x49, 0x28, 0x4c, 0x49, 0x28, 0x28, 0x28, 0x28, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x34, 0xff, 0xff,
0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff, 0xff,
0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff, 0xff,
0xff, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x34, 0xff,
0xff, 0x22, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff,
0xff, 0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff,
0xff, 0xff, 0x22, 0x34, 0x34, 0x34, 0x1a, 0x1a, 0x34, 0x1a, 0x1a, 0x34, 0x34, 0x34, 0x38, 0xff,
0xff, 0xff, 0x34, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xff, 0xff,
0xff, 0x40, 0x00, 0x02, 0x02, 0x03, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x20, 0x40, 0xff,
0xff, 0x40, 0x02, 0x3d, 0x3a, 0x39, 0x36, 0x36, 0x36, 0x36, 0x39, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x03, 0x3d, 0x3a, 0x36, 0x31, 0x21, 0x21, 0x31, 0x36, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x03, 0x3d, 0x3a, 0x36, 0x31, 0x21, 0x21, 0x31, 0x36, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x39, 0x36, 0x35, 0x31, 0x31, 0x35, 0x36, 0x39, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x39, 0x36, 0x35, 0x31, 0x31, 0x35, 0x36, 0x39, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x39, 0x36, 0x36, 0x35, 0x35, 0x36, 0x36, 0x39, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x14, 0x3d, 0x3a, 0x39, 0x36, 0x36, 0x36, 0x36, 0x39, 0x3a, 0x3d, 0x1b, 0x40, 0xff,
0xff, 0x40, 0x1b, 0x3e, 0x3d, 0x3a, 0x39, 0x39, 0x39, 0x39, 0x3a, 0x3d, 0x3e, 0x1b, 0x40, 0xff,
0xff, 0xff, 0x40, 0x1b, 0x3e, 0x3d, 0x3a, 0x3a, 0x3a, 0x3a, 0x3d, 0x3e, 0x1b, 0x40, 0xff, 0xff,
0xff, 0xff, 0xff, 0x40, 0x1b, 0x3e, 0x3d, 0x3d, 0x3d, 0x3d, 0x3e, 0x1b, 0x40, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x40, 0x1b, 0x3e, 0x3e, 0x3e, 0x3e, 0x1b, 0x40, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x1b, 0x1b, 0x1b, 0x1b, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x40, 0x40, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x43, 0x49, 0x13, 0x2a, 0x13, 0x2a, 0x49, 0x43, 0x55, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x2a, 0x10, 0x2a, 0x2a, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x2a, 0x13, 0x2a, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x33, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x33, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x32, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x15, 0x2d, 0x32, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x30, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x33, 0x30, 0x14, 0x2d, 0x30, 0x33, 0x14, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x30, 0x14, 0x2d, 0x30, 0x33, 0xff, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x1c, 0x14, 0x2d, 0x30, 0x33, 0x33, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x15, 0x2d, 0x30, 0x33, 0x10, 0x1e, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2d, 0x30, 0x33, 0x26, 0x10, 0x04, 0x1e, 0x33, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x33, 0x33, 0x33, 0x28, 0x10, 0x04, 0x10, 0x28, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x28, 0x26, 0x29, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2f, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x04, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x04, 0x10, 0x0c, 0x0c, 0x0c, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x04, 0x10, 0x26, 0x13, 0x13, 0x13, 0x26, 0x0c, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0x27, 0x13, 0x10, 0x26, 0x13, 0x04, 0x0c, 0x10, 0x13, 0x26, 0x10, 0x0d, 0x27, 0xff, 0xff,
0xff, 0x13, 0x09, 0x0c, 0x13, 0x04, 0x0c, 0x0a, 0x0c, 0x10, 0x13, 0x0c, 0x10, 0x13, 0xff, 0xff,
0xff, 0x13, 0x10, 0x0c, 0x13, 0x10, 0x0c, 0x0a, 0x0c, 0x10, 0x13, 0x0c, 0x10, 0x13, 0xff, 0xff,
0xff, 0x27, 0x09, 0x10, 0x26, 0x13, 0x10, 0x0c, 0x10, 0x13, 0x26, 0x10, 0x0d, 0x27, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x10, 0x0c, 0x26, 0x13, 0x13, 0x13, 0x26, 0x0c, 0x10, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x10, 0x0c, 0x0c, 0x0c, 0x10, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x10, 0x10, 0x10, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x43, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x33, 0x15, 0x4d, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x15, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x15, 0x33, 0x34, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x15, 0x2d, 0xff, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x49, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x4d, 0x49, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2d, 0x15, 0x2d, 0x33, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2d, 0x15, 0x2d, 0x33, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x2d, 0x33, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4d, 0x4b, 0x49, 0x47, 0x49, 0x4b, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x49, 0x43, 0x06, 0x41, 0x41, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4b, 0x43, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x4b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x41, 0x49, 0x43, 0x49, 0x43, 0x41, 0x49, 0x49, 0x43, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x43, 0x4d, 0x49, 0x4d, 0x49, 0x43, 0x49, 0x4d, 0x49, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4d, 0x28, 0x4d, 0x10, 0x4d, 0x47, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x04, 0x0a, 0x49, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x10, 0x0a, 0x10, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x0a, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x04, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x10, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0x2a, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x04, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x43, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x4d, 0x4d, 0x4d, 0x43, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x1e, 0x0a, 0x4d, 0x43, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x04, 0x33, 0x10, 0x4d, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x28, 0x13, 0x33, 0x33, 0x33, 0x10, 0x1e, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x33, 0x0a, 0x10, 0x33, 0x1e, 0x28, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x28, 0x13, 0x04, 0x33, 0x33, 0x33, 0x10, 0x1e, 0x28, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x33, 0x0a, 0x10, 0x33, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x33, 0x33, 0x33, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x10, 0x33, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0x2a, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x13, 0x13, 0x1e, 0x28, 0x29, 0x2a, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0xff, 0xff, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x2a, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x02, 0x1c, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x1c, 0x03, 0x1c, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x49, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x42, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x48, 0x43, 0x48, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x47, 0x43, 0x47, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x4b, 0x47, 0x43, 0x41, 0x43, 0x47, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x4b, 0x47, 0x43, 0x47, 0x4b, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x27, 0x13, 0x4b, 0x47, 0x4b, 0x13, 0x27, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x04, 0x2a, 0x4b, 0x2a, 0x13, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff,
0xff, 0x2a, 0x0a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x2a, 0xff, 0xff,
0xff, 0x27, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x27, 0xff, 0xff,
0xff, 0x27, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x27, 0xff, 0xff,
0xff, 0x2a, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x13, 0x2a, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x10, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x10, 0x13, 0x27, 0x2a, 0x27, 0x13, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2a, 0x27, 0x13, 0x10, 0x13, 0x27, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x1f, 0x05, 0x05, 0x0e, 0x0e, 0x0f, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x0e, 0x0f, 0x2b, 0x2b, 0x2b, 0x2b, 0x1f, 0x0f, 0x0f, 0x1f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x0e, 0x0f, 0x2b, 0x0f, 0x05, 0x0b, 0x0b, 0x0f, 0x2b, 0x1d, 0x0f, 0x1f, 0xff, 0xff,
0xff, 0x0e, 0x0f, 0x2b, 0x0f, 0x05, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x2b, 0x1d, 0x0f, 0x1f, 0xff,
0xff, 0x0f, 0x2b, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x2b, 0x0f, 0x2b, 0xff,
0x0f, 0x1d, 0x2b, 0x0f, 0x05, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x1d, 0x0f, 0x1f,
0x0e, 0x2b, 0x0f, 0x0f, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0b, 0x0f, 0x2b,
0x0f, 0x1f, 0x0f, 0x0f, 0x0f, 0x0b, 0x0f, 0x0f, 0x1d, 0x1d, 0x0f, 0x0f, 0x0f, 0x0b, 0x0f, 0x2b,
0x0f, 0x1f, 0x0f, 0x0f, 0x0f, 0x05, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0f, 0x2b,
0x2b, 0x0f, 0x1d, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x0e, 0x0f, 0x2b, 0x2c,
0xff, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x05, 0x0f, 0x1d, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x2b, 0xff,
0xff, 0x2b, 0x0f, 0x0f, 0x1d, 0x05, 0x0f, 0x0f, 0x0f, 0x0f, 0x1d, 0x0f, 0x0f, 0x2b, 0x2c, 0xff,
0xff, 0xff, 0x2b, 0x0f, 0x0f, 0x0f, 0x0b, 0x0b, 0x0e, 0x1d, 0x0f, 0x0f, 0x2b, 0x2c, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2b, 0x1f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x2b, 0x2b, 0x2c, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x32, 0x2a, 0x10, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x32, 0x32, 0x33, 0x2f, 0x2a, 0x2d, 0xff, 0x26, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x32, 0x2f, 0x2f, 0x2f, 0x32, 0x15, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x33, 0x30, 0x2f, 0x1c, 0x1b, 0x20, 0x2f, 0x32, 0x32, 0x33, 0x3c, 0xff, 0xff, 0xff,
0xff, 0x33, 0x30, 0x2f, 0x1c, 0x03, 0x15, 0x1b, 0x20, 0x2f, 0x30, 0x32, 0x33, 0x3c, 0xff, 0xff,
0xff, 0x33, 0x2f, 0x20, 0x14, 0x15, 0x15, 0x1b, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff,
0xff, 0x33, 0x2f, 0x20, 0x15, 0x15, 0x1b, 0x1b, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff,
0xff, 0x33, 0x30, 0x2f, 0x20, 0x1b, 0x1b, 0x20, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff,
0xff, 0xff, 0x33, 0x30, 0x2d, 0x20, 0x20, 0x20, 0x2d, 0x2f, 0x30, 0x32, 0x33, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x33, 0x30, 0x2f, 0x2f, 0x2f, 0x30, 0x32, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3c, 0x33, 0x32, 0x32, 0x33, 0x33, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x26, 0x10, 0x04, 0x0a, 0x0a, 0x10, 0x26, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x0c, 0x26, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x26, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x26, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x2a, 0x26, 0x13, 0x13, 0x13, 0x13, 0x13, 0x26, 0x2a, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0x4d, 0x34, 0x34, 0x17, 0x34, 0x17, 0x34, 0x17, 0x34, 0x34, 0x4d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x4d, 0x49, 0x43, 0x41, 0x41, 0x41, 0x43, 0x49, 0x4d, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0x2a, 0x13, 0x10, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2a, 0x13, 0x10, 0x0a, 0x0a, 0x0a, 0x10, 0x13, 0x2a, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x24, 0x1b, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x1b, 0x24, 0xff,
0x1a, 0x02, 0x49, 0x44, 0x44, 0x44, 0x44, 0x55, 0x44, 0x44, 0x55, 0x44, 0x49, 0x02, 0x1a, 0xff,
0x1a, 0x00, 0x49, 0x41, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x49, 0x00, 0x1a, 0xff,
0x23, 0x00, 0x49, 0x41, 0x41, 0x41, 0x41, 0x41, 0x55, 0x41, 0x41, 0x41, 0x49, 0x00, 0x23, 0xff,
0x34, 0x02, 0x49, 0x43, 0x41, 0x55, 0x41, 0x41, 0x41, 0x41, 0x41, 0x43, 0x49, 0x02, 0x34, 0xff,
0x3f, 0x34, 0x02, 0x49, 0x44, 0x41, 0x41, 0x41, 0x41, 0x41, 0x44, 0x49, 0x02, 0x34, 0x3f, 0xff,
0xff, 0x3f, 0x34, 0x02, 0x48, 0x47, 0x44, 0x41, 0x44, 0x47, 0x48, 0x02, 0x34, 0x3f, 0xff, 0xff,
0xff, 0xff, 0x3f, 0x34, 0x1a, 0x02, 0x00, 0x00, 0x00, 0x02, 0x1a, 0x34, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x3f, 0x34, 0x23, 0x1a, 0x17, 0x1a, 0x23, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x24, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x24, 0xff, 0xff, 0xff, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x34, 0x38, 0x24, 0x34, 0x38, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x3b, 0xff, 0xff, 0xff, 0xff, 0x38, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x3b, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff, 0x4c, 0x02, 0x41, 0x43, 0x4c, 0xff, 0xff,
0xff, 0xff, 0x4c, 0x02, 0x41, 0x43, 0x4c, 0xff, 0xff, 0x4c, 0x47, 0x43, 0x47, 0x4c, 0xff, 0xff,
0xff, 0xff, 0x4c, 0x47, 0x43, 0x47, 0x4c, 0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x4c, 0x47, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x1b, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x33, 0x33, 0x1b, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x1a, 0x34, 0x3f, 0x33, 0x1b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x1a, 0x18, 0x1a, 0x34, 0x3f, 0x1b, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x1a, 0x17, 0x16, 0x17, 0x1a, 0x34, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x19, 0x17, 0x16, 0x17, 0x19, 0x24, 0x30, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x24, 0x19, 0x17, 0x16, 0x17, 0x19, 0x24, 0x33, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x34, 0x1a, 0x17, 0x16, 0x17, 0x1a, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x1a, 0x18, 0x1a, 0x34, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x33, 0x2d, 0x1b, 0x2d, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff,
0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff,
0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff,
0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff,
0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff,
0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e,
0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff,
0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0x2e, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff,
0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x05, 0x05, 0x05, 0x05, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff,
0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x50, 0x50, 0x50, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
static PROGMEM prog_uchar pickups2_pal[] = {
0xff, 0x7f, 0xbd, 0x77, 0x9c, 0x73, 0x5a, 0x6b, 0x31, 0x7f, 0x24, 0x7b, 0x10, 0x7f, 0xef, 0x7e,
0xcf, 0x7e, 0xce, 0x7e, 0xcc, 0x7a, 0xe3, 0x76, 0xab, 0x76, 0x8b, 0x76, 0xa3, 0x6e, 0x83, 0x6a,
0x6b, 0x72, 0x6a, 0x6e, 0x4a, 0x6e, 0x2a, 0x6a, 0x18, 0x63, 0xd6, 0x5a, 0xe0, 0x03, 0x80, 0x03,
0x40, 0x03, 0x20, 0x03, 0xe0, 0x02, 0xb5, 0x56, 0x73, 0x4e, 0x42, 0x62, 0x09, 0x66, 0x02, 0x5e,
0x31, 0x46, 0x33, 0x26, 0xa0, 0x02, 0x80, 0x02, 0x40, 0x02, 0x20, 0x02, 0xe9, 0x65, 0xe9, 0x61,
0xc9, 0x5d, 0xa8, 0x5d, 0x88, 0x59, 0xe2, 0x55, 0xa2, 0x51, 0xef, 0x3d, 0x79, 0x7c, 0xce, 0x39,
0x8c, 0x31, 0xf2, 0x21, 0x4a, 0x29, 0x08, 0x21, 0xe0, 0x01, 0xd1, 0x1d, 0x90, 0x19, 0xa0, 0x01,
0x80, 0x01, 0x4e, 0x15, 0x2d, 0x15, 0x40, 0x01, 0xe7, 0x1c, 0xec, 0x10, 0xab, 0x0c, 0xe0, 0x00,
0x85, 0x00, 0x00, 0x7c, 0x00, 0x78, 0x00, 0x70, 0x00, 0x6c, 0x00, 0x64, 0x00, 0x60, 0x00, 0x58,
0x00, 0x54, 0x00, 0x4c, 0x00, 0x48, 0x00, 0x40, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x2c, 0x1f, 0x00,
0x1c, 0x00, 0x17, 0x00, 0x16, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
};

View File

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

View File

@ -0,0 +1,79 @@
#include <SPI.h>
#include <GD.h>
#include "pickups2.h"
#include "sprites256.h"
struct sprite
{
int x;
int y;
signed char vx, vy;
} sprites[256];
void plot()
{
int i;
for (i = 0; i < 256; i++) {
GD.sprite(i, sprites[i].x >> 4, sprites[i].y >> 4, i % 47, 0, 0);
}
}
#define LWALL (0 << 4)
#define RWALL (384 << 4)
#define TWALL (0 << 4)
#define BWALL (284 << 4)
void move()
{
int i;
sprite *ps;
for (i = 256, ps = sprites; i--; ps++) {
if ((ps->x <= LWALL)) {
ps->x = LWALL;
ps->vx = -ps->vx;
}
if ((ps->x >= RWALL)) {
ps->x = RWALL;
ps->vx = -ps->vx;
}
if ((ps->y <= TWALL)) {
ps->y = TWALL;
ps->vy = -ps->vy;
}
if ((ps->y >= BWALL)) {
ps->y = BWALL;
ps->vy = -ps->vy;
}
ps->x += ps->vx;
ps->y += ps->vy;
}
}
void setup()
{
int i;
GD.begin();
GD.copy(RAM_PIC, sprites256_pic, sizeof(sprites256_pic));
GD.copy(RAM_CHR, sprites256_chr, sizeof(sprites256_chr));
GD.copy(RAM_PAL, sprites256_pal, sizeof(sprites256_pal));
GD.copy(RAM_SPRIMG, pickups2_img, sizeof(pickups2_img));
GD.copy(RAM_SPRPAL, pickups2_pal, sizeof(pickups2_pal));
for (i = 0; i < 256; i++) {
sprites[i].x = random(400 << 4);
sprites[i].y = random(300 << 4);
sprites[i].vx = random(-16,16);
sprites[i].vy = random(-16,16);
}
}
void loop()
{
plot();
move();
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,156 @@
#include <SPI.h>
#include <GD.h>
#include "instruments.h"
// midi frequency table
static PROGMEM prog_uint16_t midifreq[128] = {
32,34,36,38,41,43,46,48,51,55,58,61,65,69,73,77,82,87,92,97,103,110,116,123,130,138,146,155,164,174,184,195,207,220,233,246,261,277,293,311,329,349,369,391,415,440,466,493,523,554,587,622,659,698,739,783,830,880,932,987,1046,1108,1174,1244,1318,1396,1479,1567,1661,1760,1864,1975,2093,2217,2349,2489,2637,2793,2959,3135,3322,3520,3729,3951,4186,4434,4698,4978,5274,5587,5919,6271,6644,7040,7458,7902,8372,8869,9397,9956,10548,11175,11839,12543,13289,14080,14917,15804,16744,17739,18794,19912,21096,22350,23679,25087,26579,28160,29834,31608,33488,35479,37589,39824,42192,44701,47359,50175
};
class player {
public:
byte voices, duration;
prog_uchar *amps;
byte fv;
player() {
duration = 0;
}
void begin(PROGMEM prog_uchar *instr, byte note, byte firstvoice) {
voices = pgm_read_byte(instr++);
duration = pgm_read_byte(instr++);
uint16_t midi = pgm_read_word(midifreq + note);
fv = firstvoice;
for (byte i = 0; i < voices; i++) {
uint16_t w = pgm_read_word(instr);
GD.voice(fv + i, 0, (long(w) * midi) >> 10, 0, 0);
instr += 2;
}
amps = instr;
}
void update() {
for (byte j = 0; j < voices; j++) {
byte v = pgm_read_byte(amps++) >> 2;
GD.wr(VOICES + 4 * (fv + j) + 2, v);
GD.wr(VOICES + 4 * (fv + j) + 3, v);
}
duration--;
}
byte available() {
return duration != 0;
}
};
static struct {
byte t, note;
} pacman[] = {
{ 0, 71 },
{ 2, 83 },
{ 4, 78 },
{ 6, 75 },
{ 8, 83 },
{ 9, 78 },
{ 12, 75 },
{ 16, 72 },
{ 18, 84 },
{ 20, 79 },
{ 22, 76 },
{ 24, 84 },
{ 25, 79 },
{ 28, 76 },
{ 32, 71 },
{ 34, 83 },
{ 36, 78 },
{ 38, 75 },
{ 40, 83 },
{ 41, 78 },
{ 44, 75 },
{ 48, 75 },
{ 49, 76 },
{ 50, 77 },
{ 52, 77 },
{ 53, 78 },
{ 54, 79 },
{ 56, 79 },
{ 57, 80 },
{ 58, 81 },
{ 60, 83 }
};
static void pickinstrument(prog_uchar* &instdata, byte &pitchdrop, byte n)
{
char* name = "";
switch (n) {
case 0: name = "chimebar"; instdata = chimebar; pitchdrop = 0; break;
case 1: name = "piano"; instdata = piano; pitchdrop = 4; break;
case 2: name = "flute"; instdata = flute; pitchdrop = 0; break;
case 3: name = "harp"; instdata = harp; pitchdrop = 1; break;
case 4: name = "glock"; instdata = glock; pitchdrop = 5; break;
case 5: name = "nylon"; instdata = nylon; pitchdrop = 2; break;
case 6: name = "bass"; instdata = bass; pitchdrop = 4; break;
case 7: name = "clarinet"; instdata = clarinet; pitchdrop = 1; break;
case 8: name = "recorder"; instdata = recorder; pitchdrop = 1; break;
case 9: name = "musicbox"; instdata = musicbox; pitchdrop = 0; break;
case 10: name = "guitar"; instdata = guitar; pitchdrop = 3; break;
case 11: name = "oboe"; instdata = oboe; pitchdrop = 2; break;
case 12: name = "organ"; instdata = organ; pitchdrop = 2; break;
}
GD.fill(64, ' ', 128);
GD.putstr(0, 2, name);
}
#include "showvoices.h"
#include "sphere.h"
void setup()
{
GD.begin();
GD.ascii();
GD.copy(RAM_SPRIMG, sphere_img, sizeof(sphere_img));
GD.copy(RAM_SPRPAL, sphere_pal, sizeof(sphere_pal));
for (byte i = 0; i < 64; i++)
GD.sprite(i, 100, 284 * i / 64, 0, 0);
GD.microcode(showvoices_code, sizeof(showvoices_code));
GD.putstr(0, 0, "Synthesized instruments");
}
void loop()
{
player p[4];
byte nextv = 0;
byte v;
for (byte inst = 0; inst < 13; inst++) {
prog_uchar* instdata;
byte pitchdrop;
pickinstrument(instdata, pitchdrop, inst);
byte t = 0;
byte i = 0;
while (i < sizeof(pacman) / sizeof(pacman[0])) {
if (t == pacman[i].t) {
p[nextv].begin(instdata, pacman[i].note - 12 * pitchdrop, 16 * nextv);
nextv = (nextv + 1) & 3;
i++;
}
for (int d = 4; d; d--) {
for (v = 0; v < 4; v++)
if (p[v].available())
p[v].update();
GD.waitvblank();
}
t++;
}
byte anyplaying;
do {
anyplaying = 0;
for (v = 0; v < 4; v++) {
byte playing = p[v].available();
anyplaying |= playing;
if (playing)
p[v].update();
}
GD.waitvblank();
} while (anyplaying);
}
}

View File

@ -0,0 +1,28 @@
static PROGMEM prog_uchar showvoices_code[] = {
0x81,0x15,
0x00,0x80,
0x81,0x60,
0x04,0x80,
0x03,0x6D,
0x00,0xAA,
0x03,0x62,
0x02,0x80,
0x03,0x62,
0x00,0x60,
0x00,0x6C,
0x00,0x66,
0x81,0x61,
0x04,0x80,
0x03,0x6D,
0x00,0xB0,
0x03,0x62,
0x02,0x80,
0x03,0x62,
0x23,0x60,
0x03,0x61,
0x00,0x6A,
0x3F,0x80,
0x03,0x63,
0x82,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,55 @@
static PROGMEM prog_uchar sphere_img[] = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0b, 0x12, 0x20, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x0f, 0x17, 0x23, 0xff, 0xff, 0xff,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x0e, 0x16, 0x1e, 0x27, 0xff, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x11, 0x17, 0x1f, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05, 0x0c, 0x12, 0x19, 0x22, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x10, 0x15, 0x1b, 0x25, 0x27, 0x27, 0xff,
0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x08, 0x0d, 0x14, 0x1a, 0x21, 0x27, 0x27, 0x27, 0xff,
0xff, 0x03, 0x01, 0x02, 0x03, 0x05, 0x0a, 0x0d, 0x13, 0x18, 0x1d, 0x26, 0x27, 0x27, 0x27, 0xff,
0xff, 0x0b, 0x06, 0x07, 0x09, 0x0c, 0x10, 0x14, 0x18, 0x1c, 0x24, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x12, 0x0f, 0x0e, 0x11, 0x12, 0x15, 0x1a, 0x1d, 0x24, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0x20, 0x17, 0x16, 0x17, 0x19, 0x1b, 0x21, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff,
0xff, 0xff, 0x23, 0x1e, 0x1f, 0x22, 0x25, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff,
0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};
static PROGMEM prog_uchar sphere_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xde, 0x7b, 0xbd, 0x77, 0x9c, 0x73, 0x9c, 0x73, 0x7b, 0x6f,
0x7b, 0x6f, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x39, 0x67, 0x18, 0x63, 0xf7, 0x5e, 0xf7, 0x5e,
0xf7, 0x5e, 0xf7, 0x5e, 0xb5, 0x56, 0xb5, 0x56, 0x94, 0x52, 0x73, 0x4e, 0x73, 0x4e, 0x52, 0x4a,
0x52, 0x4a, 0x31, 0x46, 0x31, 0x46, 0xef, 0x3d, 0xce, 0x39, 0xce, 0x39, 0xce, 0x39, 0xad, 0x35,
0xad, 0x35, 0xad, 0x35, 0x8c, 0x31, 0x8c, 0x31, 0x6b, 0x2d, 0x6b, 0x2d, 0x4a, 0x29, 0x29, 0x25,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
};

View File

@ -0,0 +1,691 @@
static PROGMEM prog_uchar mont[] = {
0xa1, 0x70, 0x03, 0x05, 0x8f, 0xe0, 0x06, 0x0a, 0x98, 0x26, 0x05, 0x05, 0xa9, 0x4d, 0x0a, 0x0a,
0xa2, 0xb8, 0x01, 0x02, 0xaf, 0xba, 0x01, 0x02, 0x82, 0xb5, 0x01, 0x01, 0x89, 0x26, 0x05, 0x02,
0xae, 0x2e, 0x05, 0x02, 0x9c, 0x1e, 0x05, 0x01, 0x8a, 0xe0, 0x06, 0x02, 0xbd, 0xeb, 0x06, 0x02,
0x86, 0xd4, 0x06, 0x01, 0xb1, 0x4d, 0x0a, 0x04, 0xa3, 0x5d, 0x0a, 0x04, 0x83, 0x3c, 0x0a, 0x03,
0xbf, 0x70, 0x03, 0x04, 0xba, 0x75, 0x03, 0x04, 0xa5, 0x6a, 0x03, 0x03, 0x8e, 0xdc, 0x00, 0x05,
0x91, 0xdd, 0x00, 0x05, 0x8b, 0xda, 0x00, 0x04, 0xab, 0xe0, 0x06, 0x01, 0x9b, 0xc0, 0x0d, 0x03,
0x80, 0x70, 0x03, 0x01, 0x9e, 0xe0, 0x06, 0x03, 0x81, 0xb8, 0x01, 0x01, 0xb4, 0x70, 0x03, 0x03,
0xb8, 0x6e, 0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0xa8, 0xdc, 0x00, 0x04, 0xb0, 0xb8, 0x01, 0x09,
0x8d, 0xc0, 0x0d, 0x06, 0xb7, 0xb8, 0x01, 0x06, 0x84, 0xdc, 0x00, 0x04, 0x99, 0xc0, 0x0d, 0x01,
0x0c, 0x92, 0x26, 0x05, 0x06, 0x0c, 0x58, 0x69, 0x61, 0x4f, 0x78, 0x67, 0xb8, 0x6e, 0x00, 0x04,
0x88, 0xdc, 0x00, 0x09, 0xa4, 0xb8, 0x01, 0x04, 0xb5, 0x70, 0x03, 0x09, 0x77, 0x4d, 0x94, 0xe0,
0x06, 0x06, 0x9a, 0x70, 0x03, 0x06, 0x0c, 0x52, 0x95, 0x26, 0x05, 0x06, 0x92, 0x93, 0x02, 0x06,
0x0c, 0x78, 0x48, 0x93, 0x6e, 0x00, 0x04, 0xb7, 0xdc, 0x00, 0x09, 0x64, 0x75, 0x88, 0xb8, 0x01,
0x04, 0x8f, 0x70, 0x03, 0x09, 0x5a, 0x54, 0xac, 0x70, 0x03, 0x06, 0x0c, 0x52, 0x55, 0x9f, 0x26,
0x05, 0x06, 0x0c, 0x96, 0x26, 0x05, 0x05, 0xb9, 0x4d, 0x0a, 0x0a, 0xbe, 0x70, 0x03, 0x05, 0x95,
0xe0, 0x06, 0x0a, 0x53, 0x77, 0x48, 0x4f, 0x90, 0xb8, 0x01, 0x04, 0xa6, 0x70, 0x03, 0x09, 0x6c,
0x9a, 0xe0, 0x06, 0x06, 0x8d, 0x70, 0x03, 0x06, 0x0c, 0x5f, 0xb6, 0x26, 0x05, 0x06, 0x0c, 0x55,
0x7e, 0x79, 0x56, 0x94, 0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0x97, 0x70, 0x03, 0x05, 0x98,
0xe0, 0x06, 0x0a, 0xb3, 0x6e, 0x00, 0x04, 0x92, 0xdc, 0x00, 0x09, 0x68, 0x70, 0x88, 0xdc, 0x00,
0x04, 0x9d, 0xb8, 0x01, 0x09, 0x50, 0x66, 0x4d, 0x5a, 0xb9, 0x4d, 0x0a, 0x06, 0x8d, 0x93, 0x02,
0x06, 0x0c, 0x76, 0xb8, 0x26, 0x05, 0x06, 0x0c, 0x58, 0x57, 0x7c, 0x54, 0x52, 0x73, 0x93, 0x6e,
0x00, 0x04, 0xac, 0xdc, 0x00, 0x09, 0xad, 0xb8, 0x01, 0x04, 0x94, 0x70, 0x03, 0x09, 0x4d, 0x79,
0xa8, 0xe0, 0x06, 0x06, 0x8d, 0x70, 0x03, 0x06, 0x0c, 0x78, 0x95, 0x26, 0x05, 0x06, 0xb3, 0x93,
0x02, 0x06, 0x0c, 0xa0, 0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0x92, 0x70, 0x03, 0x05, 0xb0,
0xe0, 0x06, 0x0a, 0x53, 0x6c, 0x54, 0x6d, 0xb2, 0xb8, 0x01, 0x04, 0x85, 0x70, 0x03, 0x09, 0x4d,
0x68, 0x8f, 0x70, 0x03, 0x06, 0x0c, 0x73, 0x55, 0x87, 0x26, 0x05, 0x06, 0x0c, 0x70, 0x52, 0x60,
0x7c, 0xa4, 0x6e, 0x00, 0x04, 0x97, 0xdc, 0x00, 0x09, 0x48, 0x5d, 0x8d, 0xdc, 0x00, 0x04, 0x88,
0xb8, 0x01, 0x09, 0x72, 0x45, 0x4f, 0xa6, 0xe0, 0x06, 0x06, 0x93, 0x70, 0x03, 0x06, 0x0c, 0x47,
0xb2, 0x26, 0x05, 0x06, 0x0c, 0x7a, 0x65, 0x7f, 0x43, 0x71, 0x63, 0x85, 0x2d, 0x09, 0x04, 0x8c,
0x3c, 0x09, 0x04, 0xa8, 0x1e, 0x09, 0x03, 0x92, 0x0f, 0x03, 0x04, 0xbf, 0x14, 0x03, 0x04, 0xb1,
0x0a, 0x03, 0x03, 0x64, 0x57, 0x95, 0x6e, 0x00, 0x04, 0xba, 0xdc, 0x00, 0x09, 0x83, 0xb8, 0x01,
0x04, 0xbc, 0x70, 0x03, 0x09, 0x97, 0xc0, 0x0d, 0x06, 0x53, 0x66, 0xb5, 0xb8, 0x01, 0x06, 0x59,
0x8f, 0x3f, 0x0c, 0x01, 0x0c, 0x72, 0x98, 0x26, 0x05, 0x06, 0x0c, 0xa1, 0x26, 0x05, 0x05, 0xb7,
0x4d, 0x0a, 0x0a, 0x90, 0x70, 0x03, 0x05, 0x9d, 0xe0, 0x06, 0x0a, 0x7a, 0x55, 0x48, 0x4d, 0x43,
0x7c, 0xb0, 0xb8, 0x01, 0x04, 0xad, 0x70, 0x03, 0x09, 0x75, 0x57, 0x87, 0xe0, 0x06, 0x06, 0xbc,
0x70, 0x03, 0x06, 0x0c, 0x58, 0x97, 0x26, 0x05, 0x06, 0xa9, 0x93, 0x02, 0x06, 0x0c, 0x50, 0x5d,
0x61, 0x77, 0x96, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0x93, 0x70, 0x03, 0x05, 0x99, 0xe0,
0x06, 0x0a, 0x98, 0x6e, 0x00, 0x04, 0x90, 0xdc, 0x00, 0x09, 0xb5, 0xdc, 0x00, 0x04, 0xa6, 0xb8,
0x01, 0x09, 0x70, 0x6d, 0x7c, 0x47, 0xb2, 0x70, 0x03, 0x06, 0x0c, 0x69, 0x57, 0x8d, 0x26, 0x05,
0x06, 0x0c, 0x59, 0x53, 0x63, 0x56, 0x58, 0x50, 0x97, 0x6e, 0x00, 0x04, 0xb0, 0xdc, 0x00, 0x09,
0x75, 0x66, 0xaa, 0xdc, 0x00, 0x04, 0xbe, 0xb8, 0x01, 0x09, 0x9a, 0xb8, 0x01, 0x04, 0xba, 0x70,
0x03, 0x09, 0x72, 0xbc, 0xe0, 0x06, 0x06, 0xb2, 0x70, 0x03, 0x06, 0x0c, 0x4d, 0xb5, 0x26, 0x05,
0x06, 0x0c, 0xb3, 0x26, 0x05, 0x05, 0xa0, 0x4d, 0x0a, 0x0a, 0x87, 0x70, 0x03, 0x05, 0xb6, 0xe0,
0x06, 0x0a, 0x70, 0x57, 0x6a, 0x7e, 0x5a, 0x7a, 0x90, 0xb8, 0x01, 0x04, 0x9a, 0x70, 0x03, 0x09,
0xb0, 0x4d, 0x0a, 0x06, 0x72, 0x7c, 0xb7, 0x93, 0x02, 0x06, 0x0c, 0x75, 0x83, 0x26, 0x05, 0x06,
0x0c, 0x76, 0x47, 0x60, 0x73, 0x94, 0x26, 0x05, 0x05, 0x88, 0x4d, 0x0a, 0x0a, 0xbe, 0x70, 0x03,
0x05, 0xa9, 0xe0, 0x06, 0x0a, 0x8d, 0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0xa3, 0xdc, 0x00,
0x04, 0x98, 0xb8, 0x01, 0x09, 0x50, 0x5a, 0x77, 0x70, 0x9f, 0xe0, 0x06, 0x06, 0x93, 0x70, 0x03,
0x06, 0x0c, 0x43, 0xa1, 0x26, 0x05, 0x06, 0xa6, 0x93, 0x02, 0x06, 0x0c, 0x69, 0x7e, 0x48, 0x54,
0xa0, 0x26, 0x05, 0x05, 0xb6, 0x4d, 0x0a, 0x0a, 0xbc, 0x70, 0x03, 0x05, 0xba, 0xe0, 0x06, 0x0a,
0x72, 0x4d, 0xb0, 0x6e, 0x00, 0x04, 0x9a, 0xdc, 0x00, 0x09, 0x58, 0x63, 0x94, 0xdc, 0x00, 0x04,
0x97, 0xb8, 0x01, 0x09, 0xb2, 0xb8, 0x01, 0x04, 0xa4, 0x70, 0x03, 0x09, 0x53, 0x5f, 0x93, 0x70,
0x03, 0x06, 0x0c, 0x66, 0x61, 0xb5, 0x26, 0x05, 0x06, 0x0c, 0x7a, 0x7c, 0x60, 0x76, 0x70, 0x5a,
0x54, 0x57, 0x72, 0x64, 0xa7, 0xb8, 0x01, 0x04, 0x98, 0x70, 0x03, 0x09, 0xb3, 0xdc, 0x00, 0x04,
0x9d, 0xb8, 0x01, 0x09, 0x96, 0x6e, 0x00, 0x04, 0x8d, 0xdc, 0x00, 0x09, 0x53, 0xa1, 0xe0, 0x06,
0x06, 0xb0, 0x70, 0x03, 0x06, 0x0c, 0x75, 0x97, 0x26, 0x05, 0x06, 0x0c, 0xa9, 0x70, 0x03, 0x05,
0xa6, 0xe0, 0x06, 0x0a, 0x87, 0x26, 0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x71, 0x52, 0x7f, 0x68,
0x4c, 0x45, 0x9a, 0x2d, 0x08, 0x04, 0xb2, 0x3a, 0x08, 0x04, 0xb6, 0x1f, 0x08, 0x03, 0xa8, 0xe3,
0x02, 0x04, 0xbe, 0xe8, 0x02, 0x04, 0xb9, 0xdf, 0x02, 0x03, 0x4d, 0x56, 0x73, 0x5d, 0x58, 0x67,
0x94, 0xdc, 0x00, 0x04, 0xa5, 0xb8, 0x01, 0x09, 0x83, 0x6e, 0x00, 0x04, 0xb3, 0xdc, 0x00, 0x09,
0x57, 0x70, 0x61, 0x98, 0xc0, 0x0d, 0x06, 0x92, 0xb8, 0x01, 0x06, 0x4f, 0xa3, 0x8f, 0x0b, 0x01,
0x0c, 0x96, 0x26, 0x05, 0x06, 0x0c, 0x7b, 0x47, 0x69, 0x66, 0x73, 0x43, 0x54, 0x65, 0xa7, 0x6e,
0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0xad, 0xb8, 0x01, 0x04, 0x93, 0x70, 0x03, 0x09, 0x52, 0x58,
0x97, 0xe0, 0x06, 0x06, 0x88, 0x70, 0x03, 0x06, 0x0c, 0x56, 0xa0, 0x26, 0x05, 0x06, 0xbc, 0x93,
0x02, 0x06, 0x0c, 0x75, 0x67, 0x9d, 0x6e, 0x00, 0x04, 0xb8, 0xdc, 0x00, 0x09, 0x53, 0x6d, 0xb0,
0xb8, 0x01, 0x04, 0xa7, 0x70, 0x03, 0x09, 0x48, 0x57, 0x87, 0x70, 0x03, 0x06, 0x0c, 0x7c, 0x60,
0xb5, 0x26, 0x05, 0x06, 0x0c, 0xbf, 0x26, 0x05, 0x05, 0xa5, 0x4d, 0x0a, 0x0a, 0xb3, 0x70, 0x03,
0x05, 0x94, 0xe0, 0x06, 0x0a, 0x78, 0x5d, 0x70, 0x67, 0x98, 0xb8, 0x01, 0x04, 0x8f, 0x70, 0x03,
0x09, 0x47, 0x99, 0xe0, 0x06, 0x06, 0xb7, 0x70, 0x03, 0x06, 0x0c, 0x75, 0xac, 0x26, 0x05, 0x06,
0x0c, 0x73, 0x54, 0x65, 0x7f, 0x97, 0x26, 0x05, 0x05, 0x9f, 0x4d, 0x0a, 0x0a, 0x83, 0x70, 0x03,
0x05, 0xa6, 0xe0, 0x06, 0x0a, 0xbf, 0x6e, 0x00, 0x04, 0xaa, 0xdc, 0x00, 0x09, 0xb1, 0xdc, 0x00,
0x04, 0xa1, 0xb8, 0x01, 0x09, 0x58, 0x4f, 0x77, 0x59, 0x9d, 0x4d, 0x0a, 0x06, 0xa0, 0x93, 0x02,
0x06, 0x0c, 0x6c, 0x85, 0x26, 0x05, 0x06, 0x0c, 0x43, 0x66, 0x5f, 0x57, 0x6a, 0x7f, 0xb3, 0x6e,
0x00, 0x04, 0x9f, 0xdc, 0x00, 0x09, 0x99, 0xb8, 0x01, 0x04, 0x90, 0x70, 0x03, 0x09, 0x60, 0x5d,
0xa5, 0xe0, 0x06, 0x06, 0x88, 0x70, 0x03, 0x06, 0x0c, 0x45, 0xb8, 0x26, 0x05, 0x06, 0x93, 0x93,
0x02, 0x06, 0x0c, 0xba, 0x26, 0x05, 0x05, 0x8c, 0x4d, 0x0a, 0x0a, 0xbb, 0x70, 0x03, 0x05, 0x9d,
0xe0, 0x06, 0x0a, 0x73, 0x5f, 0x50, 0x59, 0xa4, 0xb8, 0x01, 0x04, 0x83, 0x70, 0x03, 0x09, 0x48,
0x65, 0xa7, 0x70, 0x03, 0x06, 0x0c, 0x53, 0x78, 0xad, 0x26, 0x05, 0x06, 0x0c, 0x7b, 0x5d, 0x7a,
0x4c, 0x85, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x71, 0x61, 0x92, 0xdc, 0x00, 0x04, 0xac,
0xb8, 0x01, 0x09, 0x43, 0x64, 0x67, 0xaa, 0xe0, 0x06, 0x06, 0xa6, 0x70, 0x03, 0x06, 0x0c, 0x6d,
0xba, 0x26, 0x05, 0x06, 0x0c, 0x68, 0x79, 0x7e, 0x5a, 0x72, 0x76, 0xb0, 0x2d, 0x09, 0x04, 0xbe,
0x3c, 0x09, 0x04, 0x88, 0x1e, 0x09, 0x03, 0xad, 0x0f, 0x03, 0x04, 0xa0, 0x14, 0x03, 0x04, 0xb8,
0x0a, 0x03, 0x03, 0x69, 0x45, 0x83, 0x6e, 0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0x93, 0xb8, 0x01,
0x04, 0xbb, 0x70, 0x03, 0x09, 0xa8, 0xc0, 0x0d, 0x06, 0x66, 0x6a, 0xbc, 0xb8, 0x01, 0x06, 0x63,
0xb7, 0x4d, 0x0a, 0x01, 0xa5, 0x2d, 0x08, 0x01, 0x0c, 0x7a, 0xa1, 0x26, 0x05, 0x06, 0x0c, 0x95,
0x26, 0x05, 0x05, 0xb9, 0x4d, 0x0a, 0x0a, 0x98, 0x70, 0x03, 0x05, 0xa7, 0xe0, 0x06, 0x0a, 0x43,
0x75, 0x52, 0x6c, 0x7b, 0x53, 0xac, 0xb8, 0x01, 0x04, 0x94, 0x70, 0x03, 0x09, 0x7c, 0x68, 0x83,
0xe0, 0x06, 0x06, 0xa9, 0x70, 0x03, 0x06, 0x0c, 0x61, 0xb3, 0x26, 0x05, 0x06, 0x85, 0x93, 0x02,
0x06, 0x0c, 0x58, 0x67, 0x79, 0x55, 0x8c, 0x26, 0x05, 0x05, 0x8f, 0x4d, 0x0a, 0x0a, 0xba, 0x70,
0x03, 0x05, 0x92, 0xe0, 0x06, 0x0a, 0x9f, 0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0x99, 0xdc,
0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x54, 0x6c, 0x69, 0x43, 0xa1, 0x70, 0x03, 0x06, 0x0c, 0x45,
0x73, 0xa8, 0x26, 0x05, 0x06, 0x0c, 0x7a, 0x52, 0x4c, 0x4f, 0x72, 0x5f, 0x9d, 0x6e, 0x00, 0x04,
0xa7, 0xdc, 0x00, 0x09, 0x59, 0x7f, 0xb2, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01, 0x09, 0xa3, 0xb8,
0x01, 0x04, 0x90, 0x70, 0x03, 0x09, 0x61, 0xac, 0xe0, 0x06, 0x06, 0xb1, 0x70, 0x03, 0x06, 0x0c,
0x68, 0xaa, 0x26, 0x05, 0x06, 0x0c, 0xa1, 0x26, 0x05, 0x05, 0xb5, 0x4d, 0x0a, 0x0a, 0x98, 0x70,
0x03, 0x05, 0x94, 0xe0, 0x06, 0x0a, 0x5d, 0x67, 0x72, 0x52, 0x50, 0x63, 0xa8, 0xb8, 0x01, 0x04,
0x96, 0x70, 0x03, 0x09, 0xbf, 0x4d, 0x0a, 0x06, 0x71, 0x6c, 0x90, 0x93, 0x02, 0x06, 0x65, 0x9a,
0x2d, 0x09, 0x01, 0xb2, 0x3f, 0x0c, 0x01, 0x0c, 0x6a, 0x92, 0x26, 0x05, 0x06, 0x0c, 0x58, 0x54,
0x61, 0x75, 0x99, 0x26, 0x05, 0x05, 0x8c, 0x4d, 0x0a, 0x0a, 0x8d, 0x70, 0x03, 0x05, 0x93, 0xe0,
0x06, 0x0a, 0xbb, 0x6e, 0x00, 0x04, 0x83, 0xdc, 0x00, 0x09, 0x97, 0xdc, 0x00, 0x04, 0xa6, 0xb8,
0x01, 0x09, 0x68, 0x56, 0x50, 0x7f, 0xa4, 0xe0, 0x06, 0x06, 0xb9, 0x70, 0x03, 0x06, 0x0c, 0x52,
0x90, 0x26, 0x05, 0x06, 0x96, 0x93, 0x02, 0x06, 0x0c, 0x53, 0x4d, 0x59, 0x4c, 0xa1, 0x26, 0x05,
0x05, 0xb3, 0x4d, 0x0a, 0x0a, 0x8d, 0x70, 0x03, 0x05, 0xaa, 0xe0, 0x06, 0x0a, 0x43, 0x7b, 0x9f,
0x6e, 0x00, 0x04, 0xba, 0xdc, 0x00, 0x09, 0x66, 0x57, 0xa9, 0xdc, 0x00, 0x04, 0x83, 0xb8, 0x01,
0x09, 0xac, 0xb8, 0x01, 0x04, 0x87, 0x70, 0x03, 0x09, 0x79, 0x64, 0x97, 0x70, 0x03, 0x06, 0x0c,
0x56, 0x50, 0x99, 0x26, 0x05, 0x06, 0x92, 0xb7, 0x07, 0x01, 0x0c, 0x6a, 0x4d, 0x61, 0x73, 0x95,
0xe0, 0x06, 0x12, 0xa6, 0xec, 0x06, 0x0f, 0x85, 0xd3, 0x06, 0x0a, 0xb5, 0xf8, 0x06, 0x05, 0x8d,
0xc7, 0x06, 0x03, 0x8c, 0xcc, 0x0d, 0x02, 0x7a, 0x5f, 0xa7, 0x6e, 0x00, 0x04, 0xbc, 0xdc, 0x00,
0x09, 0x69, 0x43, 0x8f, 0xdc, 0x00, 0x04, 0xa9, 0xb8, 0x01, 0x09, 0x6c, 0x47, 0x87, 0xb8, 0x01,
0x04, 0xa8, 0x70, 0x03, 0x09, 0x57, 0xbb, 0xe0, 0x06, 0x06, 0x98, 0x70, 0x03, 0x06, 0x0c, 0x45,
0x66, 0x4c, 0x4d, 0x75, 0x55, 0xb9, 0x2d, 0x09, 0x12, 0xa1, 0x3d, 0x09, 0x0f, 0x85, 0x1c, 0x09,
0x0a, 0xac, 0x4e, 0x09, 0x05, 0x8d, 0x0c, 0x09, 0x03, 0x9d, 0x6b, 0x12, 0x02, 0x59, 0x94, 0x26,
0x05, 0x06, 0x0c, 0x90, 0x70, 0x03, 0x05, 0x95, 0xe0, 0x06, 0x0a, 0xa3, 0x26, 0x05, 0x05, 0xbf,
0x4d, 0x0a, 0x0a, 0x61, 0x45, 0x6c, 0x4d, 0x79, 0x5d, 0xb3, 0x4d, 0x0a, 0x1a, 0xba, 0x5f, 0x0a,
0x15, 0xb6, 0x3a, 0x0a, 0x0e, 0x9d, 0x71, 0x0a, 0x08, 0xa5, 0x28, 0x0a, 0x04, 0x99, 0xac, 0x14,
0x03, 0x51, 0x4b, 0x4e, 0x60, 0x78, 0x6d, 0x70, 0x48, 0x7e, 0x4a, 0x7d, 0x46, 0x49, 0x5c, 0x6e,
0x62, 0x42, 0x6f, 0xb0, 0xb8, 0x01, 0x02, 0xb5, 0xba, 0x01, 0x02, 0x96, 0xb5, 0x01, 0x01, 0x8c,
0x26, 0x05, 0x02, 0xae, 0x2e, 0x05, 0x02, 0xa6, 0x1e, 0x05, 0x01, 0xad, 0xe0, 0x06, 0x02, 0xa1,
0xeb, 0x06, 0x02, 0xa2, 0xd4, 0x06, 0x01, 0x9f, 0xdc, 0x00, 0x05, 0xbe, 0xdd, 0x00, 0x05, 0xb8,
0xda, 0x00, 0x04, 0x41, 0x74, 0x40, 0x5e, 0x5b, 0x6b, 0x7c, 0x67, 0x69, 0x4f, 0x68, 0x47, 0x83,
0x6e, 0x00, 0x04, 0x86, 0xdc, 0x00, 0x09, 0xa4, 0xdc, 0x00, 0x04, 0xb1, 0xb8, 0x01, 0x09, 0x58,
0x54, 0x7b, 0xbb, 0x4d, 0x0a, 0x06, 0x82, 0xe0, 0x06, 0x06, 0x94, 0x16, 0x04, 0x06, 0x52, 0x72,
0x5a, 0x77, 0x44, 0x18, 0x63, 0x7f, 0x50, 0x55, 0x43, 0x46, 0x93, 0x6e, 0x00, 0x04, 0xa3, 0xdc,
0x00, 0x09, 0x8b, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x63, 0x53, 0xaa, 0x6e, 0x00,
0x04, 0xab, 0xdc, 0x00, 0x09, 0x4b, 0x4e, 0xa9, 0xb8, 0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x18,
0x9e, 0x26, 0x05, 0x05, 0x8b, 0x4d, 0x0a, 0x0a, 0x80, 0x70, 0x03, 0x05, 0xbd, 0xe0, 0x06, 0x0a,
0x6a, 0x6b, 0x69, 0x44, 0x9b, 0xb8, 0x01, 0x04, 0xa3, 0x70, 0x03, 0x09, 0x18, 0x40, 0x7d, 0x4b,
0x5e, 0x8d, 0x26, 0x05, 0x05, 0xb2, 0x4d, 0x0a, 0x0a, 0xb4, 0x70, 0x03, 0x05, 0x86, 0xe0, 0x06,
0x0a, 0x80, 0x6e, 0x00, 0x04, 0x9a, 0xdc, 0x00, 0x09, 0x71, 0x64, 0xac, 0xdc, 0x00, 0x04, 0xa0,
0xb8, 0x01, 0x09, 0x63, 0x5b, 0x18, 0x74, 0x46, 0x72, 0x4d, 0x40, 0x5a, 0xbf, 0x6e, 0x00, 0x04,
0x84, 0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x9a, 0x70, 0x03, 0x09, 0x18, 0x81, 0x26, 0x05,
0x05, 0x93, 0x4d, 0x0a, 0x0a, 0xbc, 0x70, 0x03, 0x05, 0xb7, 0xe0, 0x06, 0x0a, 0x44, 0x7f, 0x52,
0x5a, 0x9a, 0xb8, 0x01, 0x04, 0x9c, 0x70, 0x03, 0x09, 0x18, 0x7c, 0x77, 0x41, 0x53, 0x83, 0x6e,
0x00, 0x04, 0x97, 0xdc, 0x00, 0x09, 0x60, 0x6c, 0x91, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01, 0x09,
0x5a, 0x5c, 0x18, 0x43, 0x57, 0xb7, 0x6e, 0x00, 0x04, 0x9c, 0xdc, 0x00, 0x09, 0xa3, 0xb8, 0x01,
0x04, 0xbd, 0x70, 0x03, 0x09, 0x18, 0x83, 0x26, 0x05, 0x05, 0xa4, 0x4d, 0x0a, 0x0a, 0x9e, 0x70,
0x03, 0x05, 0xbc, 0xe0, 0x06, 0x0a, 0x5c, 0x77, 0x40, 0x51, 0x63, 0x7d, 0x89, 0xb8, 0x01, 0x04,
0x97, 0x70, 0x03, 0x09, 0x18, 0x7c, 0x5e, 0x43, 0x64, 0xb2, 0x26, 0x05, 0x05, 0x9a, 0x4d, 0x0a,
0x0a, 0xaa, 0x70, 0x03, 0x05, 0x80, 0xe0, 0x06, 0x0a, 0xa7, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00,
0x09, 0xa3, 0xdc, 0x00, 0x04, 0xb4, 0xb8, 0x01, 0x09, 0x49, 0x57, 0x18, 0x40, 0x6a, 0x72, 0x5a,
0x4e, 0x67, 0x85, 0x6e, 0x00, 0x04, 0x92, 0xdc, 0x00, 0x09, 0x63, 0x74, 0x91, 0xdc, 0x00, 0x04,
0x83, 0xb8, 0x01, 0x09, 0xa0, 0xb8, 0x01, 0x04, 0x8f, 0x70, 0x03, 0x09, 0x18, 0xbd, 0x26, 0x05,
0x05, 0x98, 0x4d, 0x0a, 0x0a, 0x95, 0x70, 0x03, 0x05, 0xb9, 0xe0, 0x06, 0x0a, 0x52, 0x45, 0x51,
0x43, 0x60, 0x4f, 0x90, 0xb8, 0x01, 0x04, 0x88, 0x70, 0x03, 0x09, 0x18, 0x79, 0x55, 0x58, 0x7d,
0x8e, 0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0x8f, 0x70, 0x03, 0x05, 0x98, 0xe0, 0x06, 0x0a,
0x9c, 0x6e, 0x00, 0x04, 0x8b, 0xdc, 0x00, 0x09, 0x86, 0xdc, 0x00, 0x04, 0x8a, 0xb8, 0x01, 0x09,
0x50, 0x48, 0x18, 0x58, 0x4f, 0x7c, 0x4e, 0xbc, 0x26, 0x05, 0x05, 0x87, 0x4d, 0x0a, 0x0a, 0xac,
0x70, 0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0x83, 0x2d, 0x09, 0x1a, 0xa7, 0x3d, 0x09, 0x15, 0x80,
0x1c, 0x09, 0x0e, 0x8f, 0x4e, 0x09, 0x08, 0x90, 0x0c, 0x09, 0x04, 0x93, 0x6b, 0x12, 0x03, 0x4b,
0x5c, 0xbf, 0x6e, 0x00, 0x04, 0x9c, 0xdc, 0x00, 0x09, 0x4a, 0x46, 0xb7, 0xdc, 0x00, 0x04, 0xb4,
0xb8, 0x01, 0x09, 0xb9, 0xb8, 0x01, 0x04, 0xb1, 0x70, 0x03, 0x09, 0x18, 0x41, 0x6c, 0x7c, 0x47,
0x65, 0x73, 0x76, 0x59, 0x7a, 0x5d, 0x5c, 0x7f, 0x74, 0x77, 0x79, 0x71, 0xa3, 0xb8, 0x01, 0x04,
0xaa, 0x70, 0x03, 0x09, 0xb7, 0xdc, 0x00, 0x04, 0x8e, 0xb8, 0x01, 0x09, 0xaf, 0x6e, 0x00, 0x04,
0x95, 0xdc, 0x00, 0x09, 0x18, 0x9c, 0x70, 0x03, 0x05, 0x89, 0xe0, 0x06, 0x0a, 0xb6, 0x26, 0x05,
0x05, 0xa0, 0x4d, 0x0a, 0x0a, 0x40, 0x43, 0x67, 0x4f, 0x50, 0x53, 0xb1, 0x3f, 0x0c, 0x1a, 0x81,
0x55, 0x0c, 0x15, 0x83, 0x2a, 0x0c, 0x0e, 0x97, 0x6b, 0x0c, 0x08, 0x90, 0x14, 0x0c, 0x04, 0xb9,
0x95, 0x18, 0x03, 0x55, 0x6f, 0x4e, 0x77, 0x6a, 0x63, 0xbf, 0xdc, 0x00, 0x04, 0xb7, 0xb8, 0x01,
0x09, 0x9a, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x54, 0x42, 0x7b, 0xa3, 0x4d, 0x0a, 0x06,
0x99, 0xe0, 0x06, 0x06, 0x80, 0x96, 0x04, 0x06, 0x18, 0x60, 0x76, 0x49, 0x5c, 0x69, 0x5a, 0x77,
0x7f, 0x95, 0x6e, 0x00, 0x04, 0xba, 0xdc, 0x00, 0x09, 0x93, 0xb8, 0x01, 0x04, 0x8b, 0x70, 0x03,
0x09, 0x18, 0x7a, 0x55, 0x82, 0x6e, 0x00, 0x04, 0x8a, 0xdc, 0x00, 0x09, 0x4b, 0x53, 0xaf, 0xb8,
0x01, 0x04, 0x95, 0x70, 0x03, 0x09, 0x18, 0x91, 0x26, 0x05, 0x05, 0x92, 0x4d, 0x0a, 0x0a, 0x98,
0x70, 0x03, 0x05, 0xab, 0xe0, 0x06, 0x0a, 0x42, 0x4a, 0x55, 0x6f, 0x86, 0xb8, 0x01, 0x04, 0x9d,
0x70, 0x03, 0x09, 0x18, 0x58, 0x6b, 0x51, 0x52, 0x95, 0x26, 0x05, 0x05, 0xaa, 0x4d, 0x0a, 0x0a,
0xbc, 0x70, 0x03, 0x05, 0xaf, 0xe0, 0x06, 0x0a, 0x91, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09,
0xbb, 0xdc, 0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x5d, 0x46, 0x18, 0x7c, 0x6f, 0x6a, 0x55, 0x51,
0x4e, 0x8f, 0x6e, 0x00, 0x04, 0x95, 0xdc, 0x00, 0x09, 0xbc, 0xb8, 0x01, 0x04, 0x86, 0x70, 0x03,
0x09, 0x18, 0xbd, 0x26, 0x05, 0x05, 0xaf, 0x4d, 0x0a, 0x0a, 0x9e, 0x70, 0x03, 0x05, 0xab, 0xe0,
0x06, 0x0a, 0x55, 0x4f, 0x7c, 0x46, 0x84, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09, 0x18, 0x6b,
0x5e, 0x7d, 0x6f, 0x8f, 0x6e, 0x00, 0x04, 0xb7, 0xdc, 0x00, 0x09, 0x7b, 0x7f, 0x86, 0xdc, 0x00,
0x04, 0xa0, 0xb8, 0x01, 0x09, 0x5b, 0x44, 0x18, 0xbd, 0x8f, 0x0b, 0x19, 0x91, 0xa4, 0x0b, 0x15,
0xb4, 0x7b, 0x0b, 0x0e, 0xa9, 0xb9, 0x0b, 0x07, 0x92, 0x66, 0x0b, 0x04, 0xa4, 0x34, 0x17, 0x03,
0x77, 0x4f, 0x87, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x89, 0xb8, 0x01, 0x04, 0x8b, 0x70,
0x03, 0x09, 0x05, 0x41, 0x43, 0x50, 0x71, 0x57, 0x79, 0x13, 0x8e, 0x26, 0x05, 0x05, 0xbf, 0x4d,
0x0a, 0x0a, 0xb9, 0x70, 0x03, 0x05, 0x90, 0xe0, 0x06, 0x0a, 0x48, 0x47, 0x60, 0x46, 0x49, 0x4b,
0x85, 0xb8, 0x01, 0x04, 0x9e, 0x70, 0x03, 0x09, 0x18, 0x50, 0x79, 0x4e, 0x7f, 0xbc, 0x26, 0x05,
0x05, 0x88, 0x4d, 0x0a, 0x0a, 0x93, 0x70, 0x03, 0x05, 0xab, 0xe0, 0x06, 0x0a, 0x83, 0x6e, 0x00,
0x04, 0xb6, 0xdc, 0x00, 0x09, 0xa0, 0xdc, 0x00, 0x04, 0x95, 0xb8, 0x01, 0x09, 0x45, 0x5e, 0x18,
0x6b, 0x53, 0x48, 0x7c, 0x9d, 0x3f, 0x0c, 0x1a, 0x97, 0x55, 0x0c, 0x15, 0xb7, 0x2a, 0x0c, 0x0e,
0x9a, 0x6b, 0x0c, 0x08, 0xbb, 0x14, 0x0c, 0x04, 0x9b, 0x95, 0x18, 0x03, 0x43, 0x76, 0xaf, 0x6e,
0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0x60, 0x55, 0xb6, 0xdc, 0x00, 0x04, 0x85, 0xb8, 0x01, 0x09,
0xa0, 0xb8, 0x01, 0x04, 0x88, 0x70, 0x03, 0x09, 0x02, 0x64, 0x69, 0x51, 0x52, 0x74, 0x7d, 0x16,
0x89, 0x26, 0x05, 0x05, 0x87, 0x4d, 0x0a, 0x0a, 0x91, 0x70, 0x03, 0x05, 0x9c, 0xe0, 0x06, 0x0a,
0x67, 0x6f, 0x45, 0x76, 0x60, 0x48, 0x95, 0xb8, 0x01, 0x04, 0x92, 0x70, 0x03, 0x09, 0x18, 0x51,
0x5c, 0x49, 0x47, 0x85, 0x26, 0x05, 0x05, 0xb3, 0x4d, 0x0a, 0x0a, 0x81, 0x70, 0x03, 0x05, 0x9e,
0xe0, 0x06, 0x0a, 0x8e, 0x6e, 0x00, 0x04, 0x9c, 0xdc, 0x00, 0x09, 0x8d, 0xdc, 0x00, 0x04, 0x89,
0xb8, 0x01, 0x09, 0x52, 0x55, 0x16, 0x7b, 0x57, 0x77, 0x5a, 0x5b, 0x5d, 0x02, 0x41, 0x5e, 0x73,
0x45, 0x82, 0x26, 0x05, 0x05, 0x86, 0x4d, 0x0a, 0x0a, 0x9e, 0x70, 0x03, 0x05, 0xb9, 0xe0, 0x06,
0x0a, 0x8b, 0x8f, 0x0b, 0x1a, 0xaa, 0xa4, 0x0b, 0x15, 0xb4, 0x7b, 0x0b, 0x0e, 0x98, 0xb9, 0x0b,
0x08, 0x88, 0x66, 0x0b, 0x04, 0xbc, 0x34, 0x17, 0x03, 0x5c, 0x4e, 0x85, 0x6e, 0x00, 0x04, 0xa7,
0xdc, 0x00, 0x09, 0x49, 0x4d, 0x8e, 0xdc, 0x00, 0x04, 0x83, 0xb8, 0x01, 0x09, 0xa0, 0xb8, 0x01,
0x04, 0x9c, 0x70, 0x03, 0x09, 0x18, 0x79, 0x5e, 0x42, 0x46, 0x45, 0x67, 0x81, 0x6e, 0x00, 0x04,
0x89, 0xdc, 0x00, 0x09, 0x43, 0x4e, 0x9a, 0xdc, 0x00, 0x04, 0x8d, 0xb8, 0x01, 0x09, 0x60, 0x5c,
0xbf, 0xb8, 0x01, 0x04, 0xb1, 0x70, 0x03, 0x09, 0x18, 0x90, 0x70, 0x03, 0x05, 0x8f, 0xe0, 0x06,
0x0a, 0xb7, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0x48, 0x6a, 0x4b, 0x74, 0x58, 0x7c, 0x8a,
0x4d, 0x0a, 0x17, 0x9c, 0x5f, 0x0a, 0x13, 0xb9, 0x3a, 0x0a, 0x0c, 0xa9, 0x71, 0x0a, 0x07, 0xaf,
0x28, 0x0a, 0x04, 0x94, 0xac, 0x14, 0x03, 0x78, 0x7e, 0x5f, 0x70, 0x75, 0x56, 0x4c, 0x66, 0x6e,
0x61, 0x62, 0x6d, 0xaa, 0xb8, 0x01, 0x02, 0x97, 0xba, 0x01, 0x02, 0x8c, 0xb5, 0x01, 0x01, 0xa1,
0x26, 0x05, 0x02, 0x83, 0x2e, 0x05, 0x02, 0x98, 0x1e, 0x05, 0x01, 0x9e, 0xe0, 0x06, 0x02, 0xa5,
0xeb, 0x06, 0x02, 0x96, 0xd4, 0x06, 0x01, 0xa2, 0xdc, 0x00, 0x05, 0xa6, 0xdd, 0x00, 0x05, 0xa0,
0xda, 0x00, 0x04, 0x8b, 0xe0, 0x06, 0x01, 0xad, 0xc0, 0x0d, 0x03, 0x88, 0x70, 0x03, 0x01, 0xa7,
0xe0, 0x06, 0x03, 0xbe, 0xb8, 0x01, 0x01, 0xbc, 0x70, 0x03, 0x03, 0x41, 0x49, 0x5a, 0x4d, 0x71,
0x7f, 0xb5, 0x6e, 0x00, 0x04, 0xb8, 0xdc, 0x00, 0x09, 0x92, 0xdc, 0x00, 0x04, 0x9b, 0xb8, 0x01,
0x09, 0x59, 0x63, 0x40, 0xb2, 0x4d, 0x0a, 0x06, 0x84, 0xe0, 0x06, 0x06, 0x9f, 0x26, 0x05, 0x06,
0x18, 0x7d, 0x77, 0x50, 0x4f, 0x78, 0x75, 0x81, 0x6e, 0x00, 0x04, 0x90, 0xdc, 0x00, 0x09, 0xba,
0xb8, 0x01, 0x04, 0xb0, 0x70, 0x03, 0x09, 0x18, 0x50, 0x41, 0xb5, 0x6e, 0x00, 0x04, 0xb6, 0xdc,
0x00, 0x09, 0x70, 0x7a, 0x91, 0xb8, 0x01, 0x04, 0x89, 0x70, 0x03, 0x09, 0x18, 0xbf, 0x26, 0x05,
0x05, 0x8e, 0x4d, 0x0a, 0x0a, 0x82, 0x70, 0x03, 0x05, 0xb1, 0xe0, 0x06, 0x0a, 0x75, 0x76, 0x51,
0x49, 0x91, 0xb8, 0x01, 0x04, 0xb7, 0x70, 0x03, 0x09, 0x18, 0x71, 0x42, 0x4e, 0x7f, 0xb6, 0x26,
0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0xba, 0x70, 0x03, 0x05, 0xbb, 0xe0, 0x06, 0x0a, 0xb8, 0x6e,
0x00, 0x04, 0x99, 0xdc, 0x00, 0x09, 0x52, 0x5b, 0x81, 0xdc, 0x00, 0x04, 0x8f, 0xb8, 0x01, 0x09,
0x51, 0x77, 0x18, 0x7a, 0x7b, 0x63, 0x76, 0x78, 0x59, 0x85, 0x6e, 0x00, 0x04, 0xae, 0xdc, 0x00,
0x09, 0xb4, 0xb8, 0x01, 0x04, 0xa3, 0x70, 0x03, 0x09, 0x18, 0xa4, 0x26, 0x05, 0x05, 0x8e, 0x4d,
0x0a, 0x0a, 0x80, 0x70, 0x03, 0x05, 0xb3, 0xe0, 0x06, 0x0a, 0x45, 0x6e, 0x63, 0x74, 0x85, 0xb8,
0x01, 0x04, 0x9a, 0x70, 0x03, 0x09, 0x18, 0x40, 0x73, 0x64, 0x4e, 0xab, 0x6e, 0x00, 0x04, 0x90,
0xdc, 0x00, 0x09, 0x41, 0x4f, 0xb1, 0xdc, 0x00, 0x04, 0x86, 0xb8, 0x01, 0x09, 0x5a, 0x45, 0x18,
0x50, 0x6b, 0xb0, 0x6e, 0x00, 0x04, 0x9a, 0xdc, 0x00, 0x09, 0x90, 0xb8, 0x01, 0x04, 0xb7, 0x70,
0x03, 0x09, 0x18, 0x8d, 0x26, 0x05, 0x05, 0xab, 0x4d, 0x0a, 0x0a, 0x93, 0x70, 0x03, 0x05, 0xbb,
0xe0, 0x06, 0x0a, 0x70, 0x5a, 0x71, 0x46, 0x50, 0x77, 0xb4, 0xb8, 0x01, 0x04, 0x9d, 0x70, 0x03,
0x09, 0x18, 0x7b, 0x53, 0x6b, 0x4d, 0xb6, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0xbf, 0x70,
0x03, 0x05, 0xae, 0xe0, 0x06, 0x0a, 0x86, 0x6e, 0x00, 0x04, 0x80, 0xdc, 0x00, 0x09, 0x99, 0xdc,
0x00, 0x04, 0x9b, 0xb8, 0x01, 0x09, 0x74, 0x5d, 0x18, 0x6e, 0x7f, 0x7d, 0x76, 0x40, 0x46, 0x87,
0x6e, 0x00, 0x04, 0xab, 0xdc, 0x00, 0x09, 0x59, 0x5b, 0xba, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01,
0x09, 0x9b, 0xb8, 0x01, 0x04, 0x86, 0x70, 0x03, 0x09, 0x18, 0xb5, 0x26, 0x05, 0x05, 0x8f, 0x4d,
0x0a, 0x0a, 0xa4, 0x70, 0x03, 0x05, 0xa3, 0xe0, 0x06, 0x0a, 0x6b, 0x47, 0x40, 0x7a, 0x5b, 0x46,
0xbf, 0xb8, 0x01, 0x04, 0xbd, 0x70, 0x03, 0x09, 0x18, 0x63, 0x64, 0x75, 0x4f, 0xba, 0x26, 0x05,
0x05, 0x92, 0x4d, 0x0a, 0x0a, 0x95, 0x70, 0x03, 0x05, 0x9d, 0xe0, 0x06, 0x0a, 0xbb, 0x6e, 0x00,
0x04, 0xb4, 0xdc, 0x00, 0x09, 0x82, 0xdc, 0x00, 0x04, 0x90, 0xb8, 0x01, 0x09, 0x7d, 0x7f, 0x18,
0x55, 0x5d, 0x7a, 0x52, 0xba, 0x26, 0x05, 0x05, 0x92, 0x4d, 0x0a, 0x0a, 0xa3, 0x70, 0x03, 0x05,
0x86, 0xe0, 0x06, 0x0a, 0x95, 0xe0, 0x06, 0x14, 0xbf, 0xec, 0x06, 0x10, 0x9a, 0xd3, 0x06, 0x0b,
0x89, 0xf8, 0x06, 0x06, 0xa8, 0xc7, 0x06, 0x03, 0x9d, 0xcc, 0x0d, 0x02, 0x7b, 0x74, 0x87, 0x6e,
0x00, 0x04, 0x8d, 0xdc, 0x00, 0x09, 0x50, 0x42, 0xa4, 0xdc, 0x00, 0x04, 0x91, 0xb8, 0x01, 0x09,
0xab, 0xb8, 0x01, 0x04, 0xb0, 0x70, 0x03, 0x09, 0x0e, 0x69, 0x4a, 0x6f, 0x54, 0x79, 0x5c, 0x0a,
0x63, 0x46, 0x7a, 0x52, 0x68, 0x49, 0x55, 0x5a, 0x5d, 0x7f, 0xac, 0xb7, 0x07, 0x15, 0x86, 0xc5,
0x07, 0x12, 0x89, 0xa9, 0x07, 0x0c, 0xb1, 0xd3, 0x07, 0x06, 0xae, 0x9b, 0x07, 0x03, 0xa8, 0x7c,
0x0f, 0x03, 0x4d, 0x47, 0x51, 0x64, 0x70, 0x6b, 0xa9, 0xb8, 0x01, 0x04, 0x91, 0x70, 0x03, 0x09,
0xbb, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01, 0x09, 0xbf, 0x6e, 0x00, 0x04, 0x94, 0xdc, 0x00, 0x09,
0x18, 0xb6, 0x70, 0x03, 0x05, 0x93, 0xe0, 0x06, 0x0a, 0xb0, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a,
0x0a, 0x46, 0x68, 0x49, 0x6c, 0x6e, 0x71, 0x81, 0x2d, 0x08, 0x11, 0xaf, 0x3b, 0x08, 0x0e, 0x9d,
0x1e, 0x08, 0x09, 0xb9, 0x4a, 0x08, 0x05, 0xb5, 0x0f, 0x08, 0x03, 0x99, 0x68, 0x10, 0x02, 0x54,
0x7f, 0x52, 0x7b, 0x69, 0x51, 0x91, 0xdc, 0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x82, 0x6e, 0x00,
0x04, 0x9b, 0xdc, 0x00, 0x09, 0x44, 0x72, 0xab, 0x4d, 0x0a, 0x06, 0x90, 0xe0, 0x06, 0x06, 0x5f,
0x84, 0xc7, 0x05, 0x06, 0x18, 0x70, 0x63, 0x53, 0x76, 0x42, 0x5b, 0x51, 0x7f, 0xb1, 0x6e, 0x00,
0x04, 0xb3, 0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0xb8, 0x70, 0x03, 0x09, 0x18, 0x71, 0x73,
0x86, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09, 0x78, 0x52, 0xa9, 0xb8, 0x01, 0x04, 0xbd, 0x70,
0x03, 0x09, 0x18, 0xb2, 0x26, 0x05, 0x05, 0xae, 0x4d, 0x0a, 0x0a, 0x92, 0x70, 0x03, 0x05, 0x80,
0xe0, 0x06, 0x0a, 0x9f, 0x2d, 0x09, 0x11, 0x89, 0x3d, 0x09, 0x0e, 0x94, 0x1c, 0x09, 0x09, 0xb3,
0x4e, 0x09, 0x05, 0xb0, 0x0c, 0x09, 0x03, 0xb4, 0x6b, 0x12, 0x02, 0x4e, 0x46, 0x69, 0x7d, 0xac,
0xb8, 0x01, 0x04, 0x9c, 0x70, 0x03, 0x09, 0x18, 0x40, 0x52, 0x72, 0x6e, 0xa3, 0x26, 0x05, 0x05,
0x95, 0x4d, 0x0a, 0x0a, 0x8a, 0x70, 0x03, 0x05, 0xb1, 0xe0, 0x06, 0x0a, 0x41, 0x6f, 0x75, 0x59,
0x79, 0x5d, 0xb9, 0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0xae, 0xdc, 0x00, 0x04, 0xa9, 0xb8,
0x01, 0x09, 0x5c, 0x6c, 0x18, 0x71, 0x4a, 0x63, 0x55, 0x79, 0x72, 0xa3, 0x6e, 0x00, 0x04, 0x80,
0xdc, 0x00, 0x09, 0xb5, 0xb8, 0x01, 0x04, 0xaf, 0x70, 0x03, 0x09, 0x18, 0x9b, 0x26, 0x05, 0x05,
0x82, 0x4d, 0x0a, 0x0a, 0xb1, 0x70, 0x03, 0x05, 0x87, 0xe0, 0x06, 0x0a, 0x8d, 0x4d, 0x0a, 0x11,
0xac, 0x5f, 0x0a, 0x0e, 0xbb, 0x3a, 0x0a, 0x09, 0xbf, 0x71, 0x0a, 0x05, 0xb8, 0x28, 0x0a, 0x03,
0xb6, 0xac, 0x14, 0x02, 0x40, 0x63, 0x75, 0x6f, 0x8f, 0xb8, 0x01, 0x04, 0xb2, 0x70, 0x03, 0x09,
0x18, 0x71, 0x47, 0x42, 0x5b, 0x49, 0x70, 0x73, 0x54, 0x74, 0x5f, 0x86, 0x6e, 0x00, 0x04, 0xba,
0xdc, 0x00, 0x09, 0x69, 0x6e, 0xb3, 0xdc, 0x00, 0x04, 0xb9, 0xb8, 0x01, 0x09, 0x72, 0x4f, 0x18,
0x6c, 0x4d, 0x76, 0x78, 0x7b, 0x7f, 0xb1, 0x2d, 0x09, 0x11, 0xb0, 0x3d, 0x09, 0x0e, 0xb6, 0x1c,
0x09, 0x09, 0x89, 0x4e, 0x09, 0x05, 0xb4, 0x0c, 0x09, 0x03, 0xbb, 0x6b, 0x12, 0x02, 0x7a, 0x46,
0xb8, 0x6e, 0x00, 0x04, 0x99, 0xdc, 0x00, 0x09, 0xb7, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09,
0x44, 0xac, 0x96, 0x04, 0x06, 0x18, 0x9a, 0x26, 0x05, 0x05, 0x9f, 0x4d, 0x0a, 0x0a, 0xaf, 0x70,
0x03, 0x05, 0x93, 0xe0, 0x06, 0x0a, 0x78, 0x59, 0x79, 0x73, 0x5b, 0x77, 0x95, 0xb8, 0x01, 0x04,
0xa8, 0x70, 0x03, 0x09, 0x18, 0x53, 0x6f, 0x5a, 0x5f, 0x8d, 0x26, 0x05, 0x05, 0x92, 0x4d, 0x0a,
0x0a, 0x9c, 0x70, 0x03, 0x05, 0x8f, 0xe0, 0x06, 0x0a, 0x9a, 0x6e, 0x00, 0x04, 0x81, 0xdc, 0x00,
0x09, 0xb3, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01, 0x09, 0x68, 0x55, 0x18, 0x5c, 0x4f, 0x52, 0x4d,
0x95, 0xb7, 0x07, 0x11, 0xba, 0xc5, 0x07, 0x0e, 0x9f, 0xa9, 0x07, 0x09, 0x91, 0xd3, 0x07, 0x05,
0xa8, 0x9b, 0x07, 0x03, 0xb7, 0x7c, 0x0f, 0x02, 0x41, 0x5a, 0x82, 0x6e, 0x00, 0x04, 0x8d, 0xdc,
0x00, 0x09, 0x40, 0x73, 0x86, 0xdc, 0x00, 0x04, 0xb9, 0xb8, 0x01, 0x09, 0x81, 0xb8, 0x01, 0x04,
0xa4, 0x70, 0x03, 0x09, 0x18, 0xbf, 0x26, 0x05, 0x05, 0x9d, 0x4d, 0x0a, 0x0a, 0x99, 0x70, 0x03,
0x05, 0x85, 0xe0, 0x06, 0x0a, 0x49, 0x70, 0x71, 0x74, 0x76, 0x7b, 0x42, 0x4d, 0x79, 0x46, 0x41,
0x64, 0xb1, 0xb8, 0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x18, 0x59, 0x45, 0x5d, 0x7f, 0x87, 0x26,
0x05, 0x05, 0xae, 0x4d, 0x0a, 0x0a, 0x8e, 0x70, 0x03, 0x05, 0xa9, 0xe0, 0x06, 0x0a, 0x9b, 0x6e,
0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0x9d, 0xdc, 0x00, 0x04, 0xb4, 0xb8, 0x01, 0x09, 0x71, 0x44,
0x18, 0x69, 0x4e, 0x6e, 0x47, 0x8f, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0x99, 0x70, 0x03,
0x05, 0x8a, 0xe0, 0x06, 0x0a, 0x87, 0x1f, 0x06, 0x11, 0x94, 0x2a, 0x06, 0x0e, 0xbd, 0x15, 0x06,
0x09, 0xbf, 0x35, 0x06, 0x05, 0xb6, 0x0a, 0x06, 0x03, 0x80, 0x4a, 0x0c, 0x02, 0x72, 0x5b, 0xb5,
0x6e, 0x00, 0x04, 0x89, 0xdc, 0x00, 0x09, 0x74, 0x5d, 0x82, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01,
0x09, 0xb3, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09, 0x18, 0x59, 0x4a, 0x63, 0x4f, 0x68, 0x51,
0x55, 0x77, 0x7a, 0x5f, 0x49, 0x75, 0xb0, 0x6e, 0x00, 0x04, 0xaf, 0xdc, 0x00, 0x09, 0x42, 0x52,
0xa8, 0xdc, 0x00, 0x04, 0xb5, 0xb8, 0x01, 0x09, 0x5b, 0x73, 0x86, 0xb8, 0x01, 0x04, 0x8d, 0x70,
0x03, 0x09, 0x18, 0x84, 0x70, 0x03, 0x05, 0xb4, 0xe0, 0x06, 0x0a, 0x9b, 0x26, 0x05, 0x05, 0x8f,
0x4d, 0x0a, 0x0a, 0x40, 0x47, 0x54, 0x76, 0x7d, 0x7f, 0xba, 0x4d, 0x0a, 0x15, 0x91, 0x5f, 0x0a,
0x12, 0xb8, 0x3a, 0x0a, 0x0c, 0xbb, 0x71, 0x0a, 0x06, 0x92, 0x28, 0x0a, 0x03, 0xae, 0xac, 0x14,
0x03, 0x81, 0xe0, 0x06, 0x1a, 0xbf, 0xec, 0x06, 0x15, 0xa9, 0xd3, 0x06, 0x0e, 0x9d, 0xf8, 0x06,
0x08, 0x8e, 0xc7, 0x06, 0x04, 0x9f, 0xcc, 0x0d, 0x03, 0x60, 0x62, 0x66, 0x6a, 0x4c, 0x57, 0x58,
0x61, 0x43, 0x56, 0x65, 0x5e, 0xb9, 0xb8, 0x01, 0x02, 0xb2, 0xba, 0x01, 0x02, 0x93, 0xb5, 0x01,
0x01, 0x83, 0x26, 0x05, 0x02, 0xa2, 0x2e, 0x05, 0x02, 0x9a, 0x1e, 0x05, 0x01, 0x98, 0xe0, 0x06,
0x02, 0xb7, 0xeb, 0x06, 0x02, 0xa4, 0xd4, 0x06, 0x01, 0x85, 0xdc, 0x00, 0x05, 0x97, 0xdd, 0x00,
0x05, 0xa5, 0xda, 0x00, 0x04, 0x7c, 0x7e, 0x48, 0x67, 0x4b, 0x6d, 0x8a, 0xe0, 0x06, 0x01, 0xb3,
0xc0, 0x0d, 0x03, 0x9c, 0x70, 0x03, 0x01, 0x87, 0xe0, 0x06, 0x03, 0x8c, 0xb8, 0x01, 0x01, 0x89,
0x70, 0x03, 0x03, 0x70, 0x6f, 0x68, 0x75, 0x4d, 0x46, 0x96, 0x6e, 0x00, 0x04, 0xaf, 0xdc, 0x00,
0x09, 0xa1, 0xdc, 0x00, 0x04, 0xaa, 0xb8, 0x01, 0x09, 0x6c, 0x50, 0x6b, 0x82, 0x4d, 0x0a, 0x06,
0xa0, 0xe0, 0x06, 0x06, 0x86, 0x16, 0x04, 0x06, 0x80, 0xe0, 0x06, 0x04, 0xb0, 0x26, 0x05, 0x04,
0x90, 0x70, 0x03, 0x04, 0x18, 0x5b, 0x4f, 0x74, 0x44, 0x56, 0x6f, 0xb6, 0x6e, 0x00, 0x04, 0xa8,
0xdc, 0x00, 0x09, 0xa6, 0xb8, 0x01, 0x04, 0x96, 0x70, 0x03, 0x09, 0x18, 0x68, 0x76, 0xb6, 0x6e,
0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0x56, 0x66, 0xb5, 0xb8, 0x01, 0x04, 0xb4, 0x70, 0x03, 0x09,
0x18, 0xbd, 0x26, 0x05, 0x05, 0xa8, 0x4d, 0x0a, 0x0a, 0x95, 0x70, 0x03, 0x05, 0xac, 0xe0, 0x06,
0x0a, 0x76, 0x67, 0x74, 0x75, 0xa7, 0xb8, 0x01, 0x04, 0xaf, 0x70, 0x03, 0x09, 0x18, 0x6c, 0x55,
0x68, 0x7d, 0xb6, 0x26, 0x05, 0x05, 0x95, 0x4d, 0x0a, 0x0a, 0x8d, 0x70, 0x03, 0x05, 0xbe, 0xe0,
0x06, 0x0a, 0xac, 0x6e, 0x00, 0x04, 0xa8, 0xdc, 0x00, 0x09, 0x61, 0x6a, 0x9b, 0xdc, 0x00, 0x04,
0xaa, 0xb8, 0x01, 0x09, 0x6f, 0x67, 0x18, 0x4d, 0x7e, 0x55, 0x76, 0x68, 0x6c, 0x88, 0x6e, 0x00,
0x04, 0x94, 0xdc, 0x00, 0x09, 0x96, 0xb8, 0x01, 0x04, 0x8b, 0x70, 0x03, 0x09, 0x18, 0xbd, 0x26,
0x05, 0x05, 0xaf, 0x4d, 0x0a, 0x0a, 0x9e, 0x70, 0x03, 0x05, 0x99, 0xe0, 0x06, 0x0a, 0x48, 0x54,
0x4b, 0x56, 0xa1, 0xb8, 0x01, 0x04, 0xb1, 0x70, 0x03, 0x09, 0x18, 0x59, 0x5e, 0x7d, 0x6f, 0xac,
0x6e, 0x00, 0x04, 0x8f, 0xdc, 0x00, 0x09, 0x6a, 0x5b, 0x88, 0xdc, 0x00, 0x04, 0x84, 0xb8, 0x01,
0x09, 0x61, 0x71, 0x18, 0x41, 0x69, 0x4e, 0x7f, 0x5d, 0x5f, 0xa8, 0x1f, 0x06, 0x1a, 0xb4, 0x2a,
0x06, 0x15, 0xa9, 0x15, 0x06, 0x0e, 0x8d, 0x35, 0x06, 0x08, 0x96, 0x0a, 0x06, 0x04, 0xbd, 0x4a,
0x0c, 0x03, 0x6c, 0x4f, 0x8e, 0x6e, 0x00, 0x04, 0xbf, 0xdc, 0x00, 0x09, 0x95, 0xb8, 0x01, 0x04,
0x99, 0x70, 0x03, 0x09, 0x18, 0xa3, 0x26, 0x05, 0x05, 0xb1, 0x4d, 0x0a, 0x0a, 0x8f, 0x70, 0x03,
0x05, 0xb5, 0xe0, 0x06, 0x0a, 0x4e, 0x7f, 0x48, 0x44, 0x59, 0x55, 0xaf, 0xb8, 0x01, 0x04, 0xac,
0x70, 0x03, 0x09, 0x18, 0x75, 0x4f, 0x71, 0x63, 0xab, 0x26, 0x05, 0x05, 0xa6, 0x4d, 0x0a, 0x0a,
0x95, 0x70, 0x03, 0x05, 0xb6, 0xe0, 0x06, 0x0a, 0x9e, 0x6e, 0x00, 0x04, 0xad, 0xdc, 0x00, 0x09,
0x99, 0xdc, 0x00, 0x04, 0x9b, 0xb8, 0x01, 0x09, 0x6c, 0x6f, 0x18, 0x55, 0x76, 0x6b, 0x66, 0x6d,
0x5e, 0xac, 0x6e, 0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0x59, 0x5b, 0xbe, 0xdc, 0x00, 0x04, 0xa6,
0xb8, 0x01, 0x09, 0xab, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x9f, 0x26, 0x05, 0x05,
0xbf, 0x4d, 0x0a, 0x0a, 0xa3, 0x70, 0x03, 0x05, 0x95, 0xe0, 0x06, 0x0a, 0x6c, 0x75, 0x66, 0x7e,
0x6b, 0x4e, 0x81, 0xb8, 0x01, 0x04, 0xaf, 0x70, 0x03, 0x09, 0x18, 0x63, 0x55, 0x7f, 0x5f, 0x9f,
0x26, 0x05, 0x05, 0xbc, 0x4d, 0x0a, 0x0a, 0xa7, 0x70, 0x03, 0x05, 0x88, 0xe0, 0x06, 0x0a, 0x8b,
0x6e, 0x00, 0x04, 0x9b, 0xdc, 0x00, 0x09, 0xb1, 0xdc, 0x00, 0x04, 0xac, 0xb8, 0x01, 0x09, 0x41,
0x6f, 0x18, 0x48, 0x67, 0x7c, 0x5f, 0x9f, 0x26, 0x05, 0x05, 0xa1, 0x4d, 0x0a, 0x0a, 0xa7, 0x70,
0x03, 0x05, 0x8f, 0xe0, 0x06, 0x0a, 0xb5, 0x2d, 0x09, 0x1a, 0x8e, 0x3d, 0x09, 0x15, 0xaa, 0x1c,
0x09, 0x0e, 0xb6, 0x4e, 0x09, 0x08, 0x9e, 0x0c, 0x09, 0x04, 0xbe, 0x6b, 0x12, 0x03, 0x5b, 0x4b,
0xa3, 0x6e, 0x00, 0x04, 0xaf, 0xdc, 0x00, 0x09, 0x71, 0x6c, 0xab, 0xdc, 0x00, 0x04, 0x99, 0xb8,
0x01, 0x09, 0xa6, 0xb8, 0x01, 0x04, 0xad, 0x70, 0x03, 0x09, 0x18, 0x4f, 0x67, 0x61, 0x5f, 0x6e,
0x51, 0x52, 0x78, 0x7a, 0x7b, 0x63, 0x6f, 0x59, 0x6b, 0x6d, 0x66, 0x84, 0xb8, 0x01, 0x04, 0xbb,
0x70, 0x03, 0x09, 0xbf, 0xdc, 0x00, 0x04, 0x99, 0xb8, 0x01, 0x09, 0x91, 0x6e, 0x00, 0x04, 0x9d,
0xdc, 0x00, 0x09, 0x18, 0x88, 0x70, 0x03, 0x05, 0xb1, 0xe0, 0x06, 0x0a, 0xae, 0x26, 0x05, 0x05,
0x9f, 0x4d, 0x0a, 0x0a, 0x68, 0x69, 0x4d, 0x74, 0x56, 0x7d, 0x6a, 0x4e, 0x7e, 0x76, 0x5e, 0x75,
0x94, 0x3f, 0x0c, 0x1a, 0xb4, 0x55, 0x0c, 0x15, 0xa6, 0x2a, 0x0c, 0x0e, 0xac, 0x6b, 0x0c, 0x08,
0xab, 0x14, 0x0c, 0x04, 0xa9, 0x95, 0x18, 0x03, 0xaf, 0x2d, 0x08, 0x1a, 0xb5, 0x3b, 0x08, 0x15,
0x95, 0x1e, 0x08, 0x0e, 0x9e, 0x4a, 0x08, 0x08, 0x9b, 0x0f, 0x08, 0x04, 0xba, 0x68, 0x10, 0x03,
0x51, 0x5d, 0x59, 0x7f, 0x7b, 0x44, 0xb8, 0xdc, 0x00, 0x04, 0xa3, 0xb8, 0x01, 0x09, 0xbf, 0x6e,
0x00, 0x04, 0xad, 0xdc, 0x00, 0x09, 0x46, 0x60, 0x42, 0x84, 0x4d, 0x0a, 0x06, 0x9d, 0xe0, 0x06,
0x06, 0x81, 0x96, 0x04, 0x06, 0x70, 0x40, 0x82, 0x26, 0x05, 0x04, 0xa0, 0xb7, 0x07, 0x04, 0x8d,
0xdb, 0x03, 0x04, 0x50, 0x18, 0x6e, 0x5f, 0x48, 0x71, 0x6d, 0x7f, 0x78, 0x63, 0xae, 0x6e, 0x00,
0x04, 0x99, 0xdc, 0x00, 0x09, 0xad, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x59, 0x6e,
0x99, 0x6e, 0x00, 0x04, 0x9f, 0xdc, 0x00, 0x09, 0x6d, 0x4e, 0xae, 0xb8, 0x01, 0x04, 0xb0, 0x70,
0x03, 0x09, 0x18, 0x80, 0x26, 0x05, 0x05, 0xb6, 0x4d, 0x0a, 0x0a, 0xb1, 0x70, 0x03, 0x05, 0xad,
0xe0, 0x06, 0x0a, 0x59, 0x5f, 0x70, 0x6e, 0xa8, 0xb8, 0x01, 0x04, 0x9f, 0x70, 0x03, 0x09, 0x18,
0x71, 0x6d, 0x40, 0x76, 0xa3, 0x26, 0x05, 0x05, 0x99, 0x4d, 0x0a, 0x0a, 0xa7, 0x70, 0x03, 0x05,
0x88, 0xe0, 0x06, 0x0a, 0xb0, 0x6e, 0x00, 0x04, 0xbf, 0xdc, 0x00, 0x09, 0xbd, 0xdc, 0x00, 0x04,
0x90, 0xb8, 0x01, 0x09, 0x68, 0x5f, 0x18, 0x48, 0x67, 0x59, 0x63, 0x70, 0x7f, 0x8f, 0x6e, 0x00,
0x04, 0xb1, 0xdc, 0x00, 0x09, 0x9f, 0xb8, 0x01, 0x04, 0x86, 0x70, 0x03, 0x09, 0x18, 0xbe, 0x26,
0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x8b, 0x70, 0x03, 0x05, 0xa8, 0xe0, 0x06, 0x0a, 0x71, 0x4f,
0x46, 0x5f, 0xad, 0xb8, 0x01, 0x04, 0xaa, 0x70, 0x03, 0x09, 0x18, 0x68, 0x4b, 0x7b, 0x7e, 0x99,
0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09, 0x50, 0x7d, 0xb0, 0xdc, 0x00, 0x04, 0x96, 0xb8, 0x01,
0x09, 0x6a, 0x6d, 0x18, 0x6f, 0x55, 0x7a, 0x5b, 0x5e, 0x75, 0xbc, 0x8f, 0x0b, 0x19, 0x88, 0xa4,
0x0b, 0x15, 0x9e, 0x7b, 0x0b, 0x0e, 0xbe, 0xb9, 0x0b, 0x07, 0xae, 0x66, 0x0b, 0x04, 0x80, 0x34,
0x17, 0x03, 0xb1, 0x2d, 0x09, 0x1a, 0xaf, 0x3d, 0x09, 0x15, 0x8b, 0x1c, 0x09, 0x0e, 0xad, 0x4e,
0x09, 0x08, 0x90, 0x0c, 0x09, 0x04, 0xba, 0x6b, 0x12, 0x03, 0x59, 0x4e, 0x91, 0x6e, 0x00, 0x04,
0x8e, 0xdc, 0x00, 0x09, 0xa1, 0xb8, 0x01, 0x04, 0xa3, 0x70, 0x03, 0x09, 0x05, 0x66, 0x69, 0x6b,
0x6c, 0x74, 0x54, 0x13, 0x9f, 0x26, 0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x99, 0x70, 0x03, 0x05,
0xa8, 0xe0, 0x06, 0x0a, 0x51, 0x4e, 0x70, 0x56, 0x61, 0x63, 0xa7, 0xb8, 0x01, 0x04, 0x92, 0x70,
0x03, 0x09, 0x18, 0x68, 0x59, 0x7b, 0x5f, 0xa8, 0x26, 0x05, 0x05, 0xbb, 0x4d, 0x0a, 0x0a, 0x86,
0x70, 0x03, 0x05, 0xb4, 0xe0, 0x06, 0x0a, 0xb5, 0x6e, 0x00, 0x04, 0xbf, 0xdc, 0x00, 0x09, 0x8e,
0xdc, 0x00, 0x04, 0xaa, 0xb8, 0x01, 0x09, 0x52, 0x67, 0x18, 0x74, 0x46, 0x68, 0x7b, 0xa3, 0x3f,
0x0c, 0x1a, 0xb4, 0x55, 0x0c, 0x15, 0xbd, 0x2a, 0x0c, 0x0e, 0xac, 0x6b, 0x0c, 0x08, 0xa8, 0x14,
0x0c, 0x04, 0xa1, 0x95, 0x18, 0x03, 0x75, 0x7f, 0x99, 0x6e, 0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09,
0x6a, 0x4e, 0xbf, 0xdc, 0x00, 0x04, 0x91, 0xb8, 0x01, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x8e, 0x70,
0x03, 0x09, 0x02, 0x40, 0x48, 0x6e, 0x5e, 0x7c, 0x7e, 0x16, 0xb8, 0x26, 0x05, 0x05, 0x9f, 0x4d,
0x0a, 0x0a, 0x94, 0x70, 0x03, 0x05, 0xb0, 0xe0, 0x06, 0x0a, 0x59, 0x67, 0x51, 0x7f, 0x52, 0x4e,
0xa9, 0xb8, 0x01, 0x04, 0x9b, 0x70, 0x03, 0x09, 0x18, 0x70, 0x54, 0x78, 0x5f, 0xbc, 0x26, 0x05,
0x05, 0x99, 0x4d, 0x0a, 0x0a, 0xbb, 0x70, 0x03, 0x05, 0xb8, 0xe0, 0x06, 0x0a, 0x8e, 0x6e, 0x00,
0x04, 0x94, 0xdc, 0x00, 0x09, 0x9f, 0xdc, 0x00, 0x04, 0x9e, 0xb8, 0x01, 0x09, 0x69, 0x5b, 0x16,
0x61, 0x63, 0x68, 0x6c, 0x74, 0x7d, 0x02, 0x78, 0x7b, 0x59, 0x7c, 0xab, 0x26, 0x05, 0x05, 0xb0,
0x4d, 0x0a, 0x0a, 0x96, 0x70, 0x03, 0x05, 0x80, 0xe0, 0x06, 0x0a, 0x9b, 0x8f, 0x0b, 0x1a, 0xa7,
0xa4, 0x0b, 0x15, 0x88, 0x7b, 0x0b, 0x0e, 0xbb, 0xb9, 0x0b, 0x08, 0xa3, 0x66, 0x0b, 0x04, 0xb6,
0x34, 0x17, 0x03, 0x54, 0x4e, 0xb5, 0x6e, 0x00, 0x04, 0xb8, 0xdc, 0x00, 0x09, 0x5e, 0x5f, 0x94,
0xdc, 0x00, 0x04, 0x95, 0xb8, 0x01, 0x09, 0x86, 0xb8, 0x01, 0x04, 0xa8, 0x70, 0x03, 0x09, 0x18,
0x40, 0x56, 0x70, 0x6b, 0x78, 0x75, 0xb8, 0x6e, 0x00, 0x04, 0xa1, 0xdc, 0x00, 0x09, 0x54, 0x55,
0x80, 0xdc, 0x00, 0x04, 0x95, 0xb8, 0x01, 0x09, 0x68, 0x46, 0xa9, 0xb8, 0x01, 0x04, 0x96, 0x70,
0x03, 0x09, 0x18, 0xac, 0x70, 0x03, 0x05, 0x9e, 0xe0, 0x06, 0x0a, 0xa6, 0x26, 0x05, 0x05, 0x8f,
0x4d, 0x0a, 0x0a, 0x4b, 0x6d, 0x6f, 0x50, 0x71, 0x7a, 0x5b, 0x67, 0x48, 0x63, 0x76, 0x7b, 0xa3,
0x4d, 0x0a, 0x17, 0x8b, 0x5f, 0x0a, 0x13, 0x8e, 0x3a, 0x0a, 0x0c, 0xaf, 0x71, 0x0a, 0x07, 0xb4,
0x28, 0x0a, 0x04, 0xab, 0xac, 0x14, 0x03, 0xa8, 0x2d, 0x08, 0x1a, 0x90, 0x3b, 0x08, 0x15, 0xbe,
0x1e, 0x08, 0x0e, 0xae, 0x4a, 0x08, 0x08, 0x88, 0x0f, 0x08, 0x04, 0x92, 0x68, 0x10, 0x03, 0xba,
0xe0, 0x06, 0x1a, 0xbd, 0xec, 0x06, 0x15, 0xa7, 0xd3, 0x06, 0x0e, 0xbf, 0xf8, 0x06, 0x08, 0xbc,
0xc7, 0x06, 0x04, 0x91, 0xcc, 0x0d, 0x03, 0x65, 0x45, 0x57, 0x79, 0x72, 0x53, 0x62, 0x43, 0x5a,
0x58, 0x64, 0x77, 0xb7, 0xb8, 0x01, 0x02, 0x86, 0xba, 0x01, 0x02, 0xbb, 0xb5, 0x01, 0x01, 0x9b,
0x26, 0x05, 0x02, 0x94, 0x2e, 0x05, 0x02, 0xb5, 0x1e, 0x05, 0x01, 0xad, 0xe0, 0x06, 0x02, 0x85,
0xeb, 0x06, 0x02, 0xa5, 0xd4, 0x06, 0x01, 0xb2, 0xdc, 0x00, 0x05, 0x98, 0xdd, 0x00, 0x05, 0xb1,
0xda, 0x00, 0x04, 0x49, 0x4c, 0x5c, 0x47, 0x4a, 0x73, 0x9c, 0xe0, 0x06, 0x01, 0xb0, 0xc0, 0x0d,
0x03, 0x97, 0x70, 0x03, 0x01, 0xa4, 0xe0, 0x06, 0x03, 0xb9, 0xb8, 0x01, 0x01, 0x93, 0x70, 0x03,
0x03, 0x78, 0x61, 0x40, 0x55, 0x69, 0x56, 0x99, 0x6e, 0x00, 0x04, 0xa2, 0xdc, 0x00, 0x09, 0x80,
0xdc, 0x00, 0x04, 0x89, 0xb8, 0x01, 0x09, 0x41, 0x5d, 0x44, 0xb3, 0x4d, 0x0a, 0x06, 0xaa, 0xe0,
0x06, 0x06, 0x81, 0x26, 0x05, 0x06, 0x42, 0x83, 0x26, 0x05, 0x04, 0x60, 0x9a, 0x2d, 0x08, 0x04,
0x9f, 0x16, 0x04, 0x04, 0x4d, 0x18, 0x66, 0x4f, 0x6c, 0x5e, 0x59, 0x62, 0x87, 0x6e, 0x00, 0x04,
0x8f, 0xdc, 0x00, 0x09, 0x9d, 0xb8, 0x01, 0x04, 0xb6, 0x70, 0x03, 0x09, 0x18, 0x4f, 0x47, 0x8d,
0x6e, 0x00, 0x04, 0xa6, 0xdc, 0x00, 0x09, 0x5d, 0x76, 0x87, 0xb8, 0x01, 0x04, 0x82, 0x70, 0x03,
0x09, 0x18, 0xa1, 0x26, 0x05, 0x05, 0x8a, 0x4d, 0x0a, 0x0a, 0x96, 0x70, 0x03, 0x05, 0xb8, 0xe0,
0x06, 0x0a, 0x4d, 0x66, 0x42, 0x47, 0x9e, 0xb8, 0x01, 0x04, 0xb6, 0x70, 0x03, 0x09, 0x18, 0x78,
0x56, 0x61, 0x4a, 0x8a, 0x26, 0x05, 0x05, 0xa2, 0x4d, 0x0a, 0x0a, 0xa0, 0x70, 0x03, 0x05, 0x99,
0xe0, 0x06, 0x0a, 0x9d, 0x6e, 0x00, 0x04, 0x87, 0xdc, 0x00, 0x09, 0x40, 0x49, 0xa6, 0xdc, 0x00,
0x04, 0x82, 0xb8, 0x01, 0x09, 0x76, 0x5e, 0x18, 0x60, 0x59, 0x4a, 0x62, 0x5d, 0x47, 0x8a, 0x6e,
0x00, 0x04, 0x9d, 0xdc, 0x00, 0x09, 0x84, 0xb8, 0x01, 0x04, 0x95, 0x70, 0x03, 0x09, 0x18, 0xa9,
0x26, 0x05, 0x05, 0x89, 0x4d, 0x0a, 0x0a, 0x8c, 0x70, 0x03, 0x05, 0xb8, 0xe0, 0x06, 0x0a, 0x4a,
0x5d, 0x44, 0x55, 0x8d, 0xb8, 0x01, 0x04, 0x8f, 0x70, 0x03, 0x09, 0x18, 0x78, 0x4c, 0x69, 0x49,
0xa0, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x42, 0x66, 0x8a, 0xdc, 0x00, 0x04, 0x99, 0xb8,
0x01, 0x09, 0x4d, 0x4f, 0x18, 0x67, 0x51, 0x7a, 0x7c, 0x7d, 0x7f, 0x68, 0x6e, 0x50, 0x48, 0x52,
0x7e, 0xa8, 0xe0, 0x06, 0x1a, 0xba, 0xec, 0x06, 0x15, 0xae, 0xd3, 0x06, 0x0e, 0x84, 0xf8, 0x06,
0x08, 0xa1, 0xc7, 0x06, 0x04, 0x9e, 0xcc, 0x0d, 0x03, 0x8c, 0x26, 0x05, 0x1a, 0x8f, 0x2f, 0x05,
0x15, 0xbd, 0x1d, 0x05, 0x0e, 0xa6, 0x38, 0x05, 0x08, 0x95, 0x14, 0x05, 0x04, 0x89, 0x56, 0x0a,
0x03, 0x60, 0x69, 0xa0, 0x6e, 0x00, 0x04, 0x82, 0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x96,
0x70, 0x03, 0x09, 0x18, 0x9d, 0x26, 0x05, 0x05, 0xbe, 0x4d, 0x0a, 0x0a, 0x90, 0x70, 0x03, 0x05,
0xa2, 0xe0, 0x06, 0x0a, 0x60, 0x42, 0x59, 0x4a, 0x52, 0x56, 0xbc, 0xb8, 0x01, 0x04, 0xa0, 0x70,
0x03, 0x09, 0x18, 0x50, 0x62, 0x5d, 0x7e, 0x80, 0x26, 0x05, 0x05, 0x99, 0x4d, 0x0a, 0x0a, 0xb6,
0x70, 0x03, 0x05, 0xbe, 0xe0, 0x06, 0x0a, 0x92, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x90,
0xdc, 0x00, 0x04, 0x9d, 0xb8, 0x01, 0x09, 0x60, 0x7c, 0x18, 0x7e, 0x76, 0x40, 0x59, 0x48, 0x52,
0x88, 0x6e, 0x00, 0x04, 0xa9, 0xdc, 0x00, 0x09, 0x50, 0x5d, 0xbe, 0xdc, 0x00, 0x04, 0x8a, 0xb8,
0x01, 0x09, 0xb6, 0xb8, 0x01, 0x04, 0xa2, 0x70, 0x03, 0x09, 0x18, 0x82, 0x26, 0x05, 0x05, 0x99,
0x4d, 0x0a, 0x0a, 0xbc, 0x70, 0x03, 0x05, 0x92, 0xe0, 0x06, 0x0a, 0x48, 0x69, 0x4a, 0x7e, 0x62,
0x76, 0xa7, 0xb8, 0x01, 0x04, 0xb8, 0x70, 0x03, 0x09, 0x18, 0x52, 0x7c, 0x59, 0x42, 0x90, 0x26,
0x05, 0x05, 0x92, 0x4d, 0x0a, 0x0a, 0x8a, 0x70, 0x03, 0x05, 0x88, 0xe0, 0x06, 0x0a, 0x82, 0x6e,
0x00, 0x04, 0xbe, 0xdc, 0x00, 0x09, 0x91, 0xdc, 0x00, 0x04, 0xbf, 0xb8, 0x01, 0x09, 0x78, 0x67,
0x18, 0x48, 0x4a, 0x50, 0x52, 0x8a, 0x26, 0x05, 0x05, 0x96, 0x4d, 0x0a, 0x0a, 0xb8, 0x70, 0x03,
0x05, 0x87, 0xe0, 0x06, 0x0a, 0x42, 0x7e, 0x9d, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x51,
0x7f, 0xb6, 0xdc, 0x00, 0x04, 0xa7, 0xb8, 0x01, 0x09, 0xa9, 0xb8, 0x01, 0x04, 0xbf, 0x70, 0x03,
0x09, 0x0e, 0x6b, 0x4b, 0x4e, 0x6f, 0x63, 0x74, 0x0a, 0x78, 0x47, 0x4a, 0x56, 0x80, 0xb7, 0x07,
0x15, 0x8a, 0xc5, 0x07, 0x12, 0xab, 0xa9, 0x07, 0x0c, 0xb4, 0xd3, 0x07, 0x06, 0xa0, 0x9b, 0x07,
0x03, 0x82, 0x7c, 0x0f, 0x03, 0x48, 0x5d, 0x76, 0x67, 0x69, 0x7f, 0x8e, 0xb8, 0x01, 0x04, 0xbc,
0x70, 0x03, 0x09, 0x92, 0xdc, 0x00, 0x04, 0x9d, 0xb8, 0x01, 0x09, 0x8b, 0x6e, 0x00, 0x04, 0xa3,
0xdc, 0x00, 0x09, 0x18, 0x90, 0x70, 0x03, 0x05, 0x91, 0xe0, 0x06, 0x0a, 0x88, 0x26, 0x05, 0x05,
0xa2, 0x4d, 0x0a, 0x0a, 0x66, 0x49, 0x4c, 0x4f, 0x55, 0x7d, 0x61, 0x44, 0x68, 0x6e, 0x7a, 0x5e,
0x40, 0x60, 0x42, 0x4a, 0x6b, 0x74, 0x8a, 0x2d, 0x08, 0x11, 0xba, 0x3b, 0x08, 0x0e, 0xbe, 0x1e,
0x08, 0x09, 0xa8, 0x4a, 0x08, 0x05, 0xae, 0x0f, 0x08, 0x03, 0x8f, 0x68, 0x10, 0x02, 0x9e, 0x96,
0x04, 0x1a, 0xb6, 0x9e, 0x04, 0x15, 0x96, 0x8e, 0x04, 0x0e, 0x84, 0xa7, 0x04, 0x08, 0x99, 0x86,
0x04, 0x04, 0xac, 0x35, 0x09, 0x03, 0x8d, 0x1f, 0x06, 0x1a, 0xb8, 0x2a, 0x06, 0x15, 0xa7, 0x15,
0x06, 0x0e, 0xa9, 0x35, 0x06, 0x08, 0x8c, 0x0a, 0x06, 0x04, 0xbf, 0x4a, 0x0c, 0x03, 0x63, 0x4b,
0x52, 0x5d, 0x7c, 0x4e, 0xaf, 0xdc, 0x00, 0x04, 0x92, 0xb8, 0x01, 0x09, 0xbc, 0x6e, 0x00, 0x04,
0x82, 0xdc, 0x00, 0x09, 0x6a, 0x73, 0xa1, 0x4d, 0x0a, 0x06, 0xbd, 0xe0, 0x06, 0x06, 0x41, 0x80,
0xc7, 0x05, 0x06, 0x43, 0xb3, 0x96, 0x04, 0x04, 0x5a, 0x95, 0x2d, 0x09, 0x04, 0x5f, 0xab, 0xe0,
0x06, 0x04, 0x18, 0x48, 0x62, 0x50, 0x51, 0x42, 0x7c, 0x52, 0x6f, 0xa3, 0x6e, 0x00, 0x04, 0x83,
0xdc, 0x00, 0x09, 0x92, 0xb8, 0x01, 0x04, 0x82, 0x70, 0x03, 0x09, 0x18, 0x43, 0x63, 0x83, 0x6e,
0x00, 0x04, 0xbc, 0xdc, 0x00, 0x09, 0x52, 0x42, 0x91, 0xb8, 0x01, 0x04, 0xa0, 0x70, 0x03, 0x09,
0x18, 0x89, 0x26, 0x05, 0x05, 0xa3, 0x4d, 0x0a, 0x0a, 0xaa, 0x70, 0x03, 0x05, 0xa6, 0xe0, 0x06,
0x0a, 0xaf, 0x2d, 0x09, 0x11, 0x9a, 0x3d, 0x09, 0x0e, 0x8b, 0x1c, 0x09, 0x09, 0x92, 0x4e, 0x09,
0x05, 0x88, 0x0c, 0x09, 0x03, 0x81, 0x6b, 0x12, 0x02, 0x43, 0x7c, 0x60, 0x51, 0x82, 0xb8, 0x01,
0x04, 0x91, 0x70, 0x03, 0x09, 0x18, 0x6a, 0x66, 0x49, 0x63, 0xa6, 0x26, 0x05, 0x05, 0x90, 0x4d,
0x0a, 0x0a, 0x83, 0x70, 0x03, 0x05, 0x87, 0xe0, 0x06, 0x0a, 0x68, 0x4a, 0x6e, 0x4f, 0x7a, 0x7e,
0xa2, 0x6e, 0x00, 0x04, 0x9f, 0xdc, 0x00, 0x09, 0xa3, 0xdc, 0x00, 0x04, 0xaa, 0xb8, 0x01, 0x09,
0x51, 0x42, 0x18, 0x43, 0x47, 0x50, 0x66, 0x62, 0x5f, 0x87, 0x6e, 0x00, 0x04, 0xb4, 0xdc, 0x00,
0x09, 0xa0, 0xb8, 0x01, 0x04, 0x8e, 0x70, 0x03, 0x09, 0x18, 0x83, 0x26, 0x05, 0x05, 0x82, 0x4d,
0x0a, 0x0a, 0xae, 0x70, 0x03, 0x05, 0x8a, 0xe0, 0x06, 0x0a, 0x91, 0x4d, 0x0a, 0x11, 0x9f, 0x5f,
0x0a, 0x0e, 0xbe, 0x3a, 0x0a, 0x09, 0xa2, 0x71, 0x0a, 0x05, 0x8f, 0x28, 0x0a, 0x03, 0xbc, 0xac,
0x14, 0x02, 0x74, 0x47, 0x60, 0x4e, 0xa6, 0xb8, 0x01, 0x04, 0x89, 0x70, 0x03, 0x09, 0x18, 0x4a,
0x6e, 0x42, 0x43, 0x41, 0x48, 0x4b, 0x6f, 0x52, 0x5a, 0xa8, 0x6e, 0x00, 0x04, 0x8b, 0xdc, 0x00,
0x09, 0x6a, 0x63, 0x92, 0xdc, 0x00, 0x04, 0x90, 0xb8, 0x01, 0x09, 0x49, 0x66, 0x18, 0x67, 0x69,
0x4c, 0x4d, 0x78, 0x7f, 0x44, 0x76, 0x6c, 0x56, 0x59, 0x5e, 0x62, 0x4f, 0x51, 0x7c, 0x7e, 0x5f,
0xa7, 0x2d, 0x09, 0x11, 0x8d, 0x3d, 0x09, 0x0e, 0x8c, 0x1c, 0x09, 0x09, 0x87, 0x4e, 0x09, 0x05,
0x91, 0x0c, 0x09, 0x03, 0xa2, 0x6b, 0x12, 0x02, 0x82, 0x0f, 0x03, 0x0e, 0xbc, 0x15, 0x03, 0x0c,
0xa6, 0x0a, 0x03, 0x08, 0x96, 0x1a, 0x03, 0x04, 0x83, 0x05, 0x03, 0x02, 0xbf, 0x25, 0x06, 0x02,
0x9d, 0x96, 0x04, 0x0e, 0x9f, 0x9e, 0x04, 0x0c, 0x8e, 0x8e, 0x04, 0x08, 0xa3, 0xa7, 0x04, 0x04,
0xb6, 0x86, 0x04, 0x02, 0xa9, 0x35, 0x09, 0x02, 0xa0, 0xe0, 0x06, 0x0e, 0x9e, 0xec, 0x06, 0x0c,
0xb8, 0xd3, 0x06, 0x08, 0xac, 0xf8, 0x06, 0x04, 0xae, 0xc7, 0x06, 0x02, 0xaf, 0xcc, 0x0d, 0x02,
0x68, 0x4b, 0x99, 0x6e, 0x00, 0x04, 0x84, 0xdc, 0x00, 0x09, 0xbe, 0xb8, 0x01, 0x04, 0xa8, 0x70,
0x03, 0x09, 0x40, 0x8f, 0x96, 0x04, 0x06, 0x18, 0x80, 0x26, 0x05, 0x05, 0x8b, 0x4d, 0x0a, 0x0a,
0x9a, 0x70, 0x03, 0x05, 0x88, 0xe0, 0x06, 0x0a, 0x59, 0x44, 0x50, 0x52, 0x68, 0x7e, 0x90, 0xb8,
0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x18, 0x48, 0x5a, 0x40, 0x4b, 0x8b, 0x26, 0x05, 0x05, 0x9a,
0x4d, 0x0a, 0x0a, 0xba, 0x70, 0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0xb4, 0x6e, 0x00, 0x04, 0x88,
0xdc, 0x00, 0x09, 0x80, 0xdc, 0x00, 0x04, 0x89, 0xb8, 0x01, 0x09, 0x50, 0x44, 0x18, 0x41, 0x7a,
0x5a, 0x4b, 0x8a, 0xb7, 0x07, 0x11, 0x92, 0xc5, 0x07, 0x0e, 0x8b, 0xa9, 0x07, 0x09, 0xa8, 0xd3,
0x07, 0x05, 0x9a, 0x9b, 0x07, 0x03, 0xaa, 0x7c, 0x0f, 0x02, 0x48, 0x74, 0xb4, 0x6e, 0x00, 0x04,
0x90, 0xdc, 0x00, 0x09, 0x40, 0x49, 0xba, 0xdc, 0x00, 0x04, 0x80, 0xb8, 0x01, 0x09, 0x89, 0xb8,
0x01, 0x04, 0xbe, 0x70, 0x03, 0x09, 0x18, 0x99, 0x26, 0x05, 0x05, 0x88, 0x4d, 0x0a, 0x0a, 0x84,
0x70, 0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0x62, 0x47, 0x67, 0x4c, 0x4d, 0x51, 0x50, 0x74, 0x40,
0x7a, 0x49, 0x7e, 0x80, 0xb8, 0x01, 0x04, 0xa2, 0x70, 0x03, 0x09, 0x18, 0x41, 0x44, 0x48, 0x59,
0xba, 0x26, 0x05, 0x05, 0x88, 0x4d, 0x0a, 0x0a, 0xb4, 0x70, 0x03, 0x05, 0x91, 0xe0, 0x06, 0x0a,
0x87, 0x6e, 0x00, 0x04, 0xa7, 0xdc, 0x00, 0x09, 0x99, 0xdc, 0x00, 0x04, 0x81, 0xb8, 0x01, 0x09,
0x40, 0x62, 0x18, 0x51, 0x74, 0x48, 0x7a, 0x89, 0x26, 0x05, 0x05, 0x84, 0x4d, 0x0a, 0x0a, 0x8d,
0x70, 0x03, 0x05, 0x80, 0xe0, 0x06, 0x0a, 0xbe, 0x1f, 0x06, 0x11, 0x90, 0x2a, 0x06, 0x0e, 0x8c,
0x15, 0x06, 0x09, 0x91, 0x35, 0x06, 0x05, 0xba, 0x0a, 0x06, 0x03, 0xa2, 0x4a, 0x0c, 0x02, 0x67,
0x47, 0xa7, 0x6e, 0x00, 0x04, 0x88, 0xdc, 0x00, 0x09, 0x59, 0x41, 0x99, 0xdc, 0x00, 0x04, 0x87,
0xb8, 0x01, 0x09, 0x81, 0xb8, 0x01, 0x04, 0xb4, 0x70, 0x03, 0x09, 0x18, 0x40, 0x4d, 0x49, 0x44,
0x68, 0x4a, 0x4b, 0x52, 0x5a, 0x6a, 0x48, 0x67, 0xa8, 0x6e, 0x00, 0x04, 0x8d, 0xdc, 0x00, 0x09,
0x59, 0x47, 0x9a, 0xdc, 0x00, 0x04, 0x89, 0xb8, 0x01, 0x09, 0x41, 0x74, 0x8a, 0xb8, 0x01, 0x04,
0x8b, 0x70, 0x03, 0x09, 0x18, 0x84, 0x70, 0x03, 0x05, 0x87, 0xe0, 0x06, 0x0a, 0x88, 0x26, 0x05,
0x05, 0xa7, 0x4d, 0x0a, 0x0a, 0x60, 0x6c, 0x6e, 0x6f, 0x78, 0x5e, 0x63, 0x69, 0x4e, 0x76, 0x5d,
0x5f, 0x42, 0x43, 0x66, 0x56, 0x7c, 0x7f, 0x62, 0x4c, 0x50, 0x51, 0x7a, 0x7e, 0xaf, 0xba, 0x02,
0x1a, 0xa9, 0xbf, 0x02, 0x15, 0x90, 0xb5, 0x02, 0x0e, 0xbf, 0xc4, 0x02, 0x08, 0x82, 0xb0, 0x02,
0x04, 0xb8, 0x79, 0x05, 0x03, 0x91, 0x16, 0x04, 0x1a, 0xa6, 0x1d, 0x04, 0x15, 0xb4, 0x0f, 0x04,
0x0e, 0x96, 0x25, 0x04, 0x08, 0xb6, 0x07, 0x04, 0x04, 0xac, 0x34, 0x08, 0x03, 0xbe, 0xe0, 0x06,
0x1a, 0x83, 0xec, 0x06, 0x15, 0x9e, 0xd3, 0x06, 0x0e, 0x8e, 0xf8, 0x06, 0x08, 0x81, 0xc7, 0x06,
0x04, 0x9f, 0xcc, 0x0d, 0x03, 0xba, 0x2d, 0x08, 0x1a, 0x9d, 0x3b, 0x08, 0x15, 0x80, 0x1e, 0x08,
0x0e, 0x8c, 0x4a, 0x08, 0x08, 0xa3, 0x0f, 0x08, 0x04, 0xa0, 0x68, 0x10, 0x03, 0xa2, 0x4d, 0x0a,
0x11, 0xae, 0x5f, 0x0a, 0x0e, 0xaa, 0x3a, 0x0a, 0x09, 0x92, 0x71, 0x0a, 0x05, 0x99, 0x28, 0x0a,
0x03, 0xbc, 0xac, 0x14, 0x02, 0x58, 0x71, 0x72, 0x7b, 0x46, 0x77, 0x5b, 0x54, 0x75, 0x65, 0x6d,
0x45, 0x98, 0x26, 0x05, 0x02, 0xb1, 0x2e, 0x05, 0x02, 0xad, 0x1e, 0x05, 0x01, 0xa5, 0xe0, 0x06,
0x02, 0x94, 0xeb, 0x06, 0x02, 0xb5, 0xd4, 0x06, 0x01, 0x86, 0x5d, 0x01, 0x04, 0xbb, 0x5f, 0x01,
0x04, 0xb7, 0x5b, 0x01, 0x03, 0x85, 0xae, 0x00, 0x04, 0x9b, 0xaf, 0x00, 0x04, 0xb2, 0xad, 0x00,
0x03, 0x79, 0x53, 0x64, 0x57, 0x70, 0x5c, 0xb9, 0x74, 0x05, 0x03, 0x97, 0xe9, 0x0a, 0x06, 0xa4,
0xba, 0x02, 0x03, 0x9c, 0x74, 0x05, 0x06, 0xb0, 0x5d, 0x01, 0x03, 0x93, 0xba, 0x02, 0x06, 0x68,
0x4d, 0x49, 0x5a, 0x4a, 0x4b, 0x8b, 0xae, 0x00, 0x04, 0x8a, 0x5d, 0x01, 0x09, 0x89, 0x57, 0x00,
0x04, 0x9a, 0xae, 0x00, 0x09, 0x4f, 0x7d, 0x61, 0xa8, 0x4d, 0x0a, 0x06, 0xa1, 0xe0, 0x06, 0x06,
0x8d, 0x70, 0x03, 0x06, 0x6b, 0x73, 0x55, 0x8f, 0x26, 0x05, 0x04, 0xab, 0xe0, 0x06, 0x04, 0x95,
0x4d, 0x0a, 0x04, 0x18, 0x48, 0x67, 0x44, 0x47, 0x49, 0x5a, 0x4a, 0x4b, 0xbd, 0x57, 0x00, 0x04,
0x89, 0xae, 0x00, 0x09, 0x87, 0x5d, 0x01, 0x04, 0x88, 0xba, 0x02, 0x09, 0x18, 0x49, 0x7d, 0x84,
0x57, 0x00, 0x04, 0x8a, 0xae, 0x00, 0x09, 0x48, 0x47, 0xa7, 0x5d, 0x01, 0x04, 0x88, 0xba, 0x02,
0x09, 0x18, 0x89, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0x9a, 0x70, 0x03, 0x05, 0x87, 0xe0,
0x06, 0x0a, 0x4a, 0x44, 0x48, 0x67, 0x88, 0x5d, 0x01, 0x04, 0x84, 0xba, 0x02, 0x09, 0x18, 0x5a,
0x47, 0x49, 0x7d, 0x89, 0x26, 0x05, 0x05, 0x9a, 0x4d, 0x0a, 0x0a, 0xa7, 0x70, 0x03, 0x05, 0xbd,
0xe0, 0x06, 0x0a, 0x8a, 0x57, 0x00, 0x04, 0x87, 0xae, 0x00, 0x09, 0x8b, 0xae, 0x00, 0x04, 0xb3,
0x5d, 0x01, 0x09, 0x48, 0x44, 0x18, 0x7d, 0x67, 0x49, 0x5a, 0x4a, 0x47, 0xbd, 0x57, 0x00, 0x04,
0x88, 0xae, 0x00, 0x09, 0x8a, 0x5d, 0x01, 0x04, 0x87, 0xba, 0x02, 0x09, 0x18, 0x89, 0x26, 0x05,
0x05, 0xa7, 0x4d, 0x0a, 0x0a, 0x84, 0x70, 0x03, 0x05, 0x9a, 0xe0, 0x06, 0x0a, 0x48, 0x7d, 0x4a,
0x47, 0x8a, 0x5d, 0x01, 0x04, 0x87, 0xba, 0x02, 0x09, 0x18, 0x5a, 0x44, 0x49, 0x67, 0x89, 0x57,
0x00, 0x04, 0xa7, 0xae, 0x00, 0x09, 0x73, 0x4b, 0x8b, 0xae, 0x00, 0x04, 0xb3, 0x5d, 0x01, 0x09,
0x4a, 0x47, 0x18, 0x56, 0x66, 0x6c, 0x51, 0x74, 0x76, 0x42, 0x69, 0x6f, 0x50, 0x78, 0x7f, 0x41,
0x43, 0x4e, 0x7e, 0x5e, 0x5f, 0x40, 0x60, 0x63, 0x4c, 0x7a, 0x5d, 0xac, 0x26, 0x05, 0x1a, 0xb8,
0x2f, 0x05, 0x15, 0xa9, 0x1d, 0x05, 0x0e, 0x9d, 0x38, 0x05, 0x08, 0x9a, 0x14, 0x05, 0x04, 0xbe,
0x56, 0x0a, 0x03, 0x49, 0x67, 0xba, 0x57, 0x00, 0x04, 0xb4, 0xae, 0x00, 0x09, 0x83, 0x5d, 0x01,
0x04, 0xa6, 0xba, 0x02, 0x09, 0x18, 0xa0, 0x26, 0x05, 0x05, 0x9e, 0x4d, 0x0a, 0x0a, 0xaf, 0x70,
0x03, 0x05, 0x81, 0xe0, 0x06, 0x0a, 0x7a, 0x74, 0x73, 0x4b, 0x43, 0x66, 0xb6, 0x5d, 0x01, 0x04,
0xb3, 0xba, 0x02, 0x09, 0x18, 0x41, 0x6f, 0x60, 0x5e, 0x84, 0x26, 0x05, 0x05, 0x8c, 0x4d, 0x0a,
0x0a, 0x89, 0x70, 0x03, 0x05, 0x83, 0xe0, 0x06, 0x0a, 0x8b, 0x57, 0x00, 0x04, 0xaf, 0xae, 0x00,
0x09, 0xa3, 0xae, 0x00, 0x04, 0xa0, 0x5d, 0x01, 0x09, 0x73, 0x76, 0x10, 0x4d, 0x61, 0x68, 0x08,
0x49, 0x43, 0x4c, 0x44, 0x4b, 0x6f, 0xb3, 0x57, 0x00, 0x04, 0x82, 0xae, 0x00, 0x09, 0x60, 0x63,
0x81, 0xae, 0x00, 0x04, 0x8e, 0x5d, 0x01, 0x09, 0xa1, 0x5d, 0x01, 0x04, 0xa3, 0xba, 0x02, 0x09,
0x18, 0x8c, 0x26, 0x05, 0x05, 0x80, 0x4d, 0x0a, 0x0a, 0x91, 0x70, 0x03, 0x05, 0x96, 0xe0, 0x06,
0x0a, 0x42, 0x73, 0x41, 0x4e, 0x61, 0x63, 0x81, 0x5d, 0x01, 0x04, 0x82, 0xba, 0x02, 0x09, 0x18,
0x51, 0x56, 0x40, 0x4c, 0xaf, 0x26, 0x05, 0x05, 0xbd, 0x4d, 0x0a, 0x0a, 0xa6, 0x70, 0x03, 0x05,
0x9e, 0xe0, 0x06, 0x0a, 0x91, 0x57, 0x00, 0x04, 0x89, 0xae, 0x00, 0x09, 0x9f, 0xae, 0x00, 0x04,
0xba, 0x5d, 0x01, 0x09, 0x41, 0x42, 0x18, 0x5e, 0x66, 0x7d, 0x6f, 0xa0, 0x26, 0x05, 0x05, 0x82,
0x4d, 0x0a, 0x0a, 0xb4, 0x70, 0x03, 0x05, 0x8c, 0xe0, 0x06, 0x0a, 0x8d, 0xe0, 0x06, 0x1a, 0x8e,
0xec, 0x06, 0x15, 0x87, 0xd3, 0x06, 0x0e, 0x90, 0xf8, 0x06, 0x08, 0x81, 0xc7, 0x06, 0x04, 0x80,
0xcc, 0x0d, 0x03, 0x51, 0x49, 0xaf, 0x57, 0x00, 0x04, 0xa3, 0xae, 0x00, 0x09, 0x7a, 0x5f, 0x8b,
0xae, 0x00, 0x04, 0x84, 0x5d, 0x01, 0x09, 0xa1, 0x5d, 0x01, 0x04, 0x9e, 0xba, 0x02, 0x09, 0x0e,
0x62, 0x6a, 0x6e, 0x52, 0x59, 0x7c, 0x02, 0x40, 0x41, 0x47, 0x4d, 0x4e, 0x50, 0x08, 0x4c, 0x74,
0x60, 0x42, 0x80, 0xb7, 0x07, 0x15, 0xbd, 0xc5, 0x07, 0x12, 0x87, 0xa9, 0x07, 0x0c, 0x82, 0xd3,
0x07, 0x06, 0xa8, 0x9b, 0x07, 0x03, 0x8d, 0x7c, 0x0f, 0x03, 0x63, 0x6f, 0xbc, 0x57, 0x00, 0x04,
0x90, 0xae, 0x00, 0x09, 0x4b, 0x44, 0x8c, 0xae, 0x00, 0x04, 0x92, 0x5d, 0x01, 0x09, 0x61, 0x5e,
0xaf, 0x5d, 0x01, 0x04, 0x99, 0xba, 0x02, 0x09, 0x18, 0xa3, 0x70, 0x03, 0x05, 0xae, 0xe0, 0x06,
0x0a, 0xb6, 0x26, 0x05, 0x05, 0x91, 0x4d, 0x0a, 0x0a, 0x69, 0x6c, 0x78, 0x5a, 0x5d, 0x7e, 0x40,
0x42, 0x47, 0x68, 0x4d, 0x7d, 0x8b, 0x2d, 0x08, 0x11, 0xba, 0x3b, 0x08, 0x0e, 0xb8, 0x1e, 0x08,
0x09, 0xac, 0x4a, 0x08, 0x05, 0xbd, 0x0f, 0x08, 0x03, 0xbf, 0x68, 0x10, 0x02, 0x88, 0x1f, 0x06,
0x1a, 0xa8, 0x2a, 0x06, 0x15, 0xa7, 0x15, 0x06, 0x0e, 0xa9, 0x35, 0x06, 0x08, 0x87, 0x0a, 0x06,
0x04, 0x82, 0x4a, 0x0c, 0x03, 0x72, 0x5b, 0x45, 0x7b, 0x46, 0x77, 0x9a, 0x87, 0x01, 0x08, 0x8d,
0x8a, 0x01, 0x08, 0xbe, 0x85, 0x01, 0x07, 0x9f, 0xc3, 0x00, 0x08, 0x8a, 0xc5, 0x00, 0x08, 0x89,
0xc2, 0x00, 0x07, 0xa6, 0x0f, 0x03, 0x08, 0xbb, 0x14, 0x03, 0x08, 0x85, 0x0a, 0x03, 0x07, 0x70,
0x53, 0x5c, 0x64, 0x79, 0x57, 0xa1, 0x1f, 0x06, 0x03, 0xa2, 0x3f, 0x0c, 0x06, 0xb4, 0x0f, 0x03,
0x03, 0x86, 0x1f, 0x06, 0x06, 0x81, 0x87, 0x01, 0x03, 0xb9, 0x0f, 0x03, 0x06, 0x50, 0x7c, 0x52,
0x4c, 0x59, 0x6f, 0xb3, 0xc3, 0x00, 0x04, 0x99, 0x87, 0x01, 0x09, 0x8c, 0x61, 0x00, 0x04, 0x84,
0xc3, 0x00, 0x09, 0x55, 0x6b, 0x4f, 0x0c, 0x41, 0x79, 0x74, 0x46, 0x61, 0x62, 0x0c, 0x51, 0x76,
0x63, 0x6e, 0x44, 0x4c, 0x59, 0x73, 0xaa, 0x61, 0x00, 0x04, 0xb3, 0xc3, 0x00, 0x09, 0x9e, 0x87,
0x01, 0x04, 0x81, 0x0f, 0x03, 0x09, 0x18, 0x7b, 0x45, 0x66, 0x49, 0x4a, 0x5f, 0x5a, 0x4d, 0x7e,
0x6a, 0x73, 0x41, 0x5e, 0x18, 0xb2, 0x2d, 0x09, 0x11, 0x95, 0x3d, 0x09, 0x0e, 0x90, 0x1c, 0x09,
0x09, 0xb0, 0x4e, 0x09, 0x05, 0xb4, 0x0c, 0x09, 0x03, 0x9e, 0x6b, 0x12, 0x02, 0x18, 0x4b, 0x6c,
0x78, 0x7a, 0x7d, 0x7f, 0x30, 0x8e, 0x4d, 0x0a, 0x11, 0xb3, 0x5f, 0x0a, 0x0e, 0xbc, 0x3a, 0x0a,
0x09, 0xa6, 0x71, 0x0a, 0x05, 0x8d, 0x28, 0x0a, 0x03, 0xbe, 0xac, 0x14, 0x02, 0xae, 0x26, 0x05,
0x08, 0x18, 0x70, 0x50, 0x72, 0x74, 0x55, 0x5e, 0x6e, 0xba, 0x74, 0x05, 0x08, 0x18, 0x42, 0x47,
0x48, 0x69, 0x67, 0x68, 0x66, 0x4d, 0x4e, 0x73, 0x7c, 0x7e, 0x8b, 0x2d, 0x09, 0x11, 0x87, 0x3d,
0x09, 0x0e, 0xab, 0x1c, 0x09, 0x09, 0xaf, 0x4e, 0x09, 0x05, 0xbd, 0x0c, 0x09, 0x03, 0xb7, 0x6b,
0x12, 0x02, 0x96, 0xe0, 0x06, 0x1a, 0xb9, 0xec, 0x06, 0x15, 0xae, 0xd3, 0x06, 0x0e, 0x9b, 0xf8,
0x06, 0x08, 0x8e, 0xc7, 0x06, 0x04, 0x95, 0xcc, 0x0d, 0x03, 0x7a, 0x88, 0x1f, 0x06, 0x08, 0x18,
0x48, 0xaa, 0x70, 0x03, 0x08, 0xb3, 0xe0, 0x06, 0x08, 0x0c, 0x6a, 0x9a, 0xdb, 0x03, 0x08, 0x0c,
0x73, 0x5a, 0x91, 0x16, 0x04, 0x08, 0xa0, 0xb7, 0x07, 0x08, 0x0c, 0x51, 0xba, 0x96, 0x04, 0x08,
0x0c, 0x8f, 0xb7, 0x07, 0x11, 0xbb, 0xc5, 0x07, 0x0e, 0x89, 0xa9, 0x07, 0x09, 0xa2, 0xd3, 0x07,
0x05, 0xa8, 0x9b, 0x07, 0x03, 0x9f, 0x7c, 0x0f, 0x02, 0x60, 0x7a, 0x9e, 0x26, 0x05, 0x08, 0x9c,
0x87, 0x01, 0x08, 0xbe, 0x2d, 0x08, 0x08, 0x0c, 0x5c, 0x5e, 0x92, 0x74, 0x05, 0x08, 0x84, 0xed,
0x01, 0x08, 0x0c, 0x4b, 0x47, 0x6b, 0x6f, 0x77, 0x7d, 0x7e, 0x44, 0x52, 0x9e, 0x1f, 0x06, 0x08,
0xbe, 0x4b, 0x02, 0x08, 0xb7, 0x2d, 0x09, 0x08, 0x0c, 0x7e, 0x5e, 0x9a, 0xe0, 0x06, 0x08, 0x92,
0x0f, 0x03, 0x08, 0x82, 0x87, 0x01, 0x08, 0x0c, 0x77, 0x42, 0x52, 0x5a, 0xa1, 0xb7, 0x07, 0x08,
0xb6, 0xdb, 0x03, 0x08, 0xaa, 0x4b, 0x02, 0x08, 0xa4, 0x4d, 0x0a, 0x08, 0x0c, 0xa3, 0xf6, 0x00,
0x06, 0x8c, 0xed, 0x01, 0x0c, 0x6a, 0x76, 0x61, 0x97, 0x2d, 0x08, 0x08, 0xb4, 0x96, 0x04, 0x08,
0xa9, 0x0f, 0x03, 0x08, 0x85, 0xa4, 0x00, 0x08, 0x0c, 0x8a, 0x1f, 0x06, 0x11, 0x83, 0x2a, 0x06,
0x0e, 0x88, 0x15, 0x06, 0x09, 0x91, 0x35, 0x06, 0x05, 0xbc, 0x0a, 0x06, 0x03, 0xb2, 0x4a, 0x0c,
0x02, 0xb8, 0x49, 0x01, 0x08, 0x93, 0x4b, 0x01, 0x08, 0xba, 0x47, 0x01, 0x07, 0xb0, 0x49, 0x01,
0x06, 0x8b, 0x93, 0x02, 0x0c, 0x64, 0x69, 0x74, 0x57, 0x86, 0x2d, 0x09, 0x08, 0xb6, 0x1f, 0x06,
0x08, 0xa4, 0x96, 0x04, 0x08, 0xa1, 0x4b, 0x02, 0x08, 0x9a, 0xe9, 0x0a, 0x08, 0xa6, 0xdc, 0x00,
0x08, 0xbe, 0xb8, 0x01, 0x08, 0x0c, 0xac, 0xed, 0x01, 0x08, 0xb3, 0xf1, 0x01, 0x08, 0x99, 0xea,
0x01, 0x07, 0x84, 0x93, 0x02, 0x06, 0x92, 0x26, 0x05, 0x0c, 0x90, 0xdc, 0x00, 0x06, 0xaa, 0xb8,
0x01, 0x0c, 0x61, 0x64, 0x76, 0x46, 0xa7, 0x4d, 0x0a, 0x08, 0xb4, 0xb7, 0x07, 0x08, 0x81, 0x1f,
0x06, 0x08, 0xa0, 0x0f, 0x03, 0x08, 0xa1, 0x70, 0x03, 0x08, 0x0c, 0x62, 0x68, 0x49, 0x4f, 0x7b,
0x5f, 0x78, 0x7a, 0x53, 0xbd, 0x93, 0x02, 0x08, 0x89, 0x97, 0x02, 0x08, 0xba, 0x8f, 0x02, 0x07,
0xb7, 0x70, 0x03, 0x06, 0x9f, 0xe0, 0x06, 0x0c, 0x86, 0xb8, 0x01, 0x06, 0xa2, 0x70, 0x03, 0x0c,
0x5a, 0x60, 0x41, 0x74, 0x67, 0xa8, 0xe9, 0x0a, 0x08, 0xa9, 0x2d, 0x09, 0x08, 0x97, 0xb7, 0x07,
0x08, 0x8f, 0x96, 0x04, 0x08, 0x9c, 0x3f, 0x0c, 0x08, 0x8d, 0x93, 0x02, 0x08, 0x82, 0x26, 0x05,
0x08, 0x08, 0x5c, 0x04, 0x59, 0x73, 0x6c, 0xa7, 0xdb, 0x03, 0x08, 0xb3, 0xe2, 0x03, 0x08, 0x81,
0xd5, 0x03, 0x07, 0x63, 0x4c, 0x80, 0x26, 0x05, 0x06, 0xb4, 0x4d, 0x0a, 0x0c, 0xbf, 0x4d, 0x0a,
0x06, 0xa4, 0x9a, 0x14, 0x0c, 0x50, 0x6a, 0x8c, 0x93, 0x02, 0x06, 0x9c, 0x26, 0x05, 0x0c, 0x4f,
0x57, 0x69, 0x68, 0xa0, 0x3f, 0x0c, 0x08, 0xac, 0x2d, 0x09, 0x08, 0x9e, 0x0f, 0x03, 0x08, 0x45,
0x87, 0xe0, 0x06, 0x08, 0x0c, 0x4e, 0x6e, 0x56, 0x79, 0x5b, 0x55, 0x43, 0x48, 0x4a, 0x51, 0x72,
0x7c, 0x49, 0x7a, 0x7d, 0x41, 0x73, 0x67, 0x58, 0x71, 0x6d, 0x54, 0x65, 0x75, 0x99, 0x26, 0x05,
0x08, 0xb8, 0x2e, 0x05, 0x08, 0x98, 0x1e, 0x05, 0x07, 0xa9, 0xdc, 0x00, 0x06, 0xb5, 0xdd, 0x00,
0x06, 0x90, 0xda, 0x00, 0x05, 0x8a, 0x6e, 0x00, 0x06, 0x8e, 0x6e, 0x00, 0x06, 0x83, 0x6d, 0x00,
0x05, 0x64, 0x7f, 0x70, 0x4b, 0x52, 0x44, 0x5f, 0x77, 0x40, 0x74, 0x9b, 0xe0, 0x06, 0x06, 0xbb,
0xc0, 0x0d, 0x0c, 0xb4, 0x4d, 0x0a, 0x06, 0x8f, 0x9a, 0x14, 0x0c, 0x62, 0x46, 0x5c, 0x4c, 0xbd,
0x70, 0x03, 0x06, 0x85, 0xe0, 0x06, 0x0c, 0x80, 0xdc, 0x00, 0x04, 0x91, 0xb8, 0x01, 0x09, 0xa2,
0x6e, 0x00, 0x04, 0xb2, 0xdc, 0x00, 0x09, 0x5e, 0x6c, 0x60, 0xbc, 0xc0, 0x0d, 0x08, 0x88, 0x4d,
0x0a, 0x08, 0x97, 0xe0, 0x06, 0x08, 0x92, 0xdc, 0x00, 0x06, 0xaf, 0x6e, 0x00, 0x06, 0x42, 0x47,
0x61, 0x4d, 0x7e, 0x66, 0x8c, 0xe0, 0x06, 0x08, 0x18, 0x4a, 0x43, 0x4e, 0x50, 0x69, 0x75, 0xa3,
0x6e, 0x00, 0x06, 0xa7, 0x6e, 0x00, 0x06, 0x9a, 0x6d, 0x00, 0x05, 0x82, 0xb8, 0x01, 0x06, 0xab,
0xba, 0x01, 0x06, 0x94, 0xb5, 0x01, 0x05, 0x62, 0x72, 0x40, 0x51, 0xad, 0x6e, 0x00, 0x04, 0x8b,
0xdc, 0x00, 0x09, 0x89, 0xb8, 0x01, 0x04, 0xbf, 0x70, 0x03, 0x09, 0x6f, 0x52, 0x9f, 0x6e, 0x00,
0x06, 0x96, 0xb8, 0x01, 0x06, 0x18, 0x5a, 0x63, 0x67, 0x92, 0x6e, 0x00, 0x06, 0xb5, 0x6e, 0x00,
0x06, 0xa4, 0x6d, 0x00, 0x05, 0x42, 0x6b, 0x54, 0xa6, 0xb8, 0x01, 0x06, 0x81, 0xba, 0x01, 0x06,
0x94, 0xb5, 0x01, 0x05, 0x7b, 0x5b, 0x4b, 0x6d, 0x8b, 0x6e, 0x00, 0x04, 0x82, 0xdc, 0x00, 0x09,
0x49, 0x7f, 0xbb, 0xb8, 0x01, 0x04, 0x84, 0x70, 0x03, 0x09, 0x5f, 0xa3, 0x6e, 0x00, 0x06, 0x56,
0x8e, 0xb8, 0x01, 0x06, 0x4c, 0x18, 0x52, 0x64, 0x75, 0x41, 0x54, 0x66, 0x8c, 0xb8, 0x01, 0x06,
0xbe, 0xba, 0x01, 0x06, 0x81, 0xb5, 0x01, 0x05, 0x42, 0x4b, 0x7b, 0x44, 0xa2, 0xb8, 0x01, 0x04,
0x9d, 0x70, 0x03, 0x09, 0x63, 0x4e, 0xac, 0xb8, 0x01, 0x06, 0x18, 0x84, 0x6e, 0x00, 0x06, 0x93,
0x6e, 0x00, 0x06, 0x87, 0x6d, 0x00, 0x05, 0xab, 0xdc, 0x00, 0x06, 0x9a, 0xdd, 0x00, 0x06, 0xb1,
0xda, 0x00, 0x05, 0x41, 0x4c, 0x7e, 0xa4, 0x6e, 0x00, 0x04, 0xb5, 0xdc, 0x00, 0x09, 0x89, 0xdc,
0x00, 0x04, 0x8d, 0xb8, 0x01, 0x09, 0x62, 0x5d, 0xa9, 0x6e, 0x00, 0x06, 0x81, 0xdc, 0x00, 0x06,
0x6c, 0x18, 0x53, 0x44, 0x47, 0xa0, 0x6e, 0x00, 0x06, 0xb9, 0x6e, 0x00, 0x06, 0xa1, 0x6d, 0x00,
0x05, 0x86, 0xb8, 0x01, 0x06, 0x8a, 0xba, 0x01, 0x06, 0xb0, 0xb5, 0x01, 0x05, 0x64, 0x75, 0xa6,
0x6e, 0x00, 0x04, 0xac, 0xdc, 0x00, 0x09, 0xa8, 0xb8, 0x01, 0x04, 0xa7, 0x70, 0x03, 0x09, 0x69,
0xaf, 0x6e, 0x00, 0x06, 0x94, 0xb8, 0x01, 0x06, 0x18, 0x60, 0x79, 0x61, 0x70, 0x4a, 0x46, 0xa2,
0xb8, 0x01, 0x06, 0x8b, 0xba, 0x01, 0x06, 0xaa, 0xb5, 0x01, 0x05, 0x6c, 0x66, 0x68, 0x67, 0x9b,
0xb8, 0x01, 0x04, 0x93, 0x70, 0x03, 0x09, 0x6f, 0x54, 0x90, 0xb8, 0x01, 0x06, 0x18, 0x8c, 0x6e,
0x00, 0x06, 0xa4, 0x6e, 0x00, 0x06, 0xb3, 0x6d, 0x00, 0x05, 0x71, 0x5a, 0x6b, 0x8e, 0xdc, 0x00,
0x06, 0xbb, 0xdd, 0x00, 0x06, 0xaf, 0xda, 0x00, 0x05, 0x62, 0x4b, 0x6a, 0xb0, 0x6e, 0x00, 0x04,
0x9f, 0xdc, 0x00, 0x09, 0x49, 0x4d, 0x87, 0xdc, 0x00, 0x04, 0xac, 0xb8, 0x01, 0x09, 0x53, 0x5b,
0xa9, 0x6e, 0x00, 0x06, 0x41, 0x86, 0xdc, 0x00, 0x06, 0x50, 0x18, 0x64, 0x73, 0x4c, 0xa7, 0x6e,
0x00, 0x06, 0x94, 0x6e, 0x00, 0x06, 0xab, 0x6d, 0x00, 0x05, 0x9a, 0xb8, 0x01, 0x06, 0xb6, 0xba,
0x01, 0x06, 0x93, 0xb5, 0x01, 0x05, 0x70, 0x5f, 0xbf, 0x6e, 0x00, 0x04, 0x9b, 0xdc, 0x00, 0x09,
0x9c, 0xb8, 0x01, 0x04, 0xa0, 0x70, 0x03, 0x09, 0x69, 0xa9, 0x6e, 0x00, 0x06, 0x90, 0xb8, 0x01,
0x06, 0x18, 0x6b, 0x54, 0x67, 0x7b, 0x4e, 0x6f, 0x5a, 0x53, 0x76, 0xab, 0xb8, 0x01, 0x06, 0x83,
0xba, 0x01, 0x06, 0xb9, 0xb5, 0x01, 0x05, 0x5b, 0x7f, 0x6c, 0x47, 0x60, 0x5c, 0x8d, 0xb8, 0x01,
0x04, 0xa3, 0x70, 0x03, 0x09, 0x69, 0x46, 0x50, 0xae, 0xb8, 0x01, 0x06, 0x18, 0xb6, 0x6e, 0x00,
0x06, 0xb0, 0x6e, 0x00, 0x06, 0x81, 0x6d, 0x00, 0x05, 0x90, 0xdc, 0x00, 0x06, 0xad, 0xdd, 0x00,
0x06, 0x84, 0xda, 0x00, 0x05, 0x43, 0x79, 0x6b, 0xa0, 0x6e, 0x00, 0x04, 0x94, 0xdc, 0x00, 0x09,
0xa5, 0xdc, 0x00, 0x04, 0xb2, 0xb8, 0x01, 0x09, 0x63, 0x4d, 0x89, 0x6e, 0x00, 0x06, 0x86, 0xdc,
0x00, 0x06, 0x6e, 0x18, 0x70, 0x41, 0x76, 0xb1, 0x6e, 0x00, 0x06, 0x81, 0x6e, 0x00, 0x06, 0x9b,
0x6d, 0x00, 0x05, 0x50, 0x44, 0x6d, 0xaf, 0xdc, 0x00, 0x06, 0xb9, 0xdd, 0x00, 0x06, 0x8c, 0xda,
0x00, 0x05, 0x87, 0xb8, 0x01, 0x06, 0xa2, 0xba, 0x01, 0x06, 0xa1, 0xb5, 0x01, 0x05, 0x60, 0x54,
0xa6, 0x6e, 0x00, 0x04, 0x8e, 0xdc, 0x00, 0x09, 0x72, 0x65, 0x8d, 0xdc, 0x00, 0x04, 0xb3, 0xb8,
0x01, 0x09, 0xa5, 0xb8, 0x01, 0x04, 0x92, 0x70, 0x03, 0x09, 0x49, 0xab, 0x6e, 0x00, 0x06, 0x46,
0x83, 0xdc, 0x00, 0x06, 0xac, 0xb8, 0x01, 0x06, 0x18, 0x71, 0x5b, 0x41, 0x79, 0x4c, 0x6f, 0x61,
0x62, 0x47, 0x81, 0xb8, 0x01, 0x06, 0x91, 0xba, 0x01, 0x06, 0x86, 0xb5, 0x01, 0x05, 0x4e, 0x66,
0x73, 0x4d, 0x52, 0x65, 0x9d, 0xb8, 0x01, 0x04, 0xb2, 0x70, 0x03, 0x09, 0x6b, 0x43, 0x6c, 0xaa,
0xb8, 0x01, 0x06, 0x18, 0xa7, 0x6e, 0x00, 0x06, 0xad, 0x6e, 0x00, 0x06, 0xa0, 0x6d, 0x00, 0x05,
0xae, 0xdc, 0x00, 0x06, 0xba, 0xdd, 0x00, 0x06, 0x9f, 0xda, 0x00, 0x05, 0x41, 0x46, 0x51, 0xbf,
0x6e, 0x00, 0x04, 0x83, 0xdc, 0x00, 0x09, 0xa3, 0xdc, 0x00, 0x04, 0x9b, 0xb8, 0x01, 0x09, 0x72,
0x5d, 0xa5, 0x6e, 0x00, 0x06, 0xbe, 0xdc, 0x00, 0x06, 0x6a, 0x18, 0x60, 0x6d, 0x67, 0x96, 0x6e,
0x00, 0x06, 0xa1, 0x6e, 0x00, 0x06, 0x95, 0x6d, 0x00, 0x05, 0x7a, 0x6e, 0x5f, 0x8c, 0xdc, 0x00,
0x06, 0x9a, 0xdd, 0x00, 0x06, 0xb2, 0xda, 0x00, 0x05, 0x92, 0xb8, 0x01, 0x06, 0x9f, 0xba, 0x01,
0x06, 0xa6, 0xb5, 0x01, 0x05, 0x43, 0x7f, 0xb7, 0x6e, 0x00, 0x04, 0x83, 0xdc, 0x00, 0x09, 0x5b,
0x63, 0x93, 0xdc, 0x00, 0x04, 0x8e, 0xb8, 0x01, 0x09, 0x89, 0xb8, 0x01, 0x04, 0xba, 0x70, 0x03,
0x09, 0x65, 0xad, 0x6e, 0x00, 0x06, 0x7e, 0xae, 0xdc, 0x00, 0x06, 0x81, 0xb8, 0x01, 0x06, 0x18,
0x61, 0x55, 0x56, 0xa0, 0x6e, 0x00, 0x06, 0x8d, 0x6e, 0x00, 0x06, 0xaf, 0x6d, 0x00, 0x05, 0x5a,
0x4c, 0x72, 0x95, 0xdc, 0x00, 0x06, 0xbe, 0xdd, 0x00, 0x06, 0xbf, 0xda, 0x00, 0x05, 0x52, 0x66,
0x5f, 0x94, 0xb8, 0x01, 0x06, 0x9b, 0xba, 0x01, 0x06, 0xb2, 0xb5, 0x01, 0x05, 0x43, 0x77, 0xa6,
0x6e, 0x00, 0x04, 0x96, 0xdc, 0x00, 0x09, 0x53, 0x4e, 0xab, 0xdc, 0x00, 0x04, 0x90, 0xb8, 0x01,
0x09, 0x49, 0x7a, 0x86, 0xb8, 0x01, 0x04, 0x9c, 0x70, 0x03, 0x09, 0x6d, 0x91, 0x6e, 0x00, 0x06,
0x6e, 0xbb, 0xdc, 0x00, 0x06, 0x41, 0x84, 0xb8, 0x01, 0x06, 0x18, 0x78, 0x59, 0x58, 0x60, 0x4d,
0x6f, 0x55, 0x7e, 0x7f, 0x72, 0x5b, 0x54, 0x74, 0x4f, 0x7d, 0x45, 0x56, 0x66, 0x50, 0x6b, 0x5c,
0x46, 0x57, 0x48, 0x7c, 0x51, 0x7b, 0x44,
};

View File

@ -0,0 +1,109 @@
#include <SPI.h>
#include <GD.h>
#include "mont.h"
// visualize voice (v) at amplitude (a) on an 8x8 grid
void visualize(byte v, byte a)
{
int x = 64 + ((v & 7) * 34);
int y = 14 + ((v >> 3) * 34);
byte sprnum = (v << 2); // draw each voice using four sprites
GD.sprite(sprnum++, x + 16, y + 16, a, 0, 0);
GD.sprite(sprnum++, x + 0, y + 16, a, 0, 2);
GD.sprite(sprnum++, x + 16, y + 0, a, 0, 4);
GD.sprite(sprnum++, x + 0, y + 0, a, 0, 6);
}
void setup()
{
int i;
GD.begin();
GD.wr16(RAM_SPRPAL + 2 * 255, TRANSPARENT);
// draw 32 circles into 32 sprite images
for (i = 0; i < 32; i++) {
GD.wr16(RAM_SPRPAL + 2 * i, RGB(8 * i, 64, 255 - 8 * i));
int dst = RAM_SPRIMG + 256 * i;
GD.__wstart(dst);
byte x, y;
int r2 = min(i * i, 256);
for (y = 0; y < 16; y++) {
for (x = 0; x < 16; x++) {
byte pixel;
if ((x * x + y * y) <= r2)
pixel = i; // use color above
else
pixel = 0xff; // transparent
SPI.transfer(pixel);
}
}
GD.__end();
}
for (i = 0; i < 64; i++)
visualize(i, 0);
}
byte amp[64]; // current voice amplitude
byte target[64]; // target voice amplitude
// Set volume for voice v to a
void setvol(byte v, byte a)
{
GD.__wstart(VOICES + (v << 2) + 2);
SPI.transfer(a);
SPI.transfer(a);
GD.__end();
}
void adsr() // handle ADSR for 64 voices
{
byte v;
for (v = 0; v < 64; v++) {
int d = target[v] - amp[v]; // +ve means need to increase
if (d) {
if (d > 0)
amp[v] += 4; // attack
else
amp[v]--; // decay
setvol(v, amp[v]);
visualize(v, amp[v]);
}
}
}
void loop()
{
prog_uchar *pc;
long started = millis();
int ticks = 0;
for (pc = mont; pc < mont + sizeof(mont);) {
byte cmd = pgm_read_byte_near(pc++); // upper 2 bits are command code
if ((cmd & 0xc0) == 0) {
// Command 0x00: pause N*5 milliseconds
ticks += (cmd & 63);
while (millis() < (started + ticks * 5)) {
adsr();
delay(1);
}
} else {
byte v = (cmd & 63);
byte a;
if ((cmd & 0xc0) == 0x40) {
// Command 0x40: silence voice
target[v] = 0;
} else if ((cmd & 0xc0) == 0x80) {
// Command 0x80: set voice frequency and amplitude
byte flo = pgm_read_byte_near(pc++);
byte fhi = pgm_read_byte_near(pc++);
GD.__wstart(VOICES + 4 * v);
SPI.transfer(flo);
SPI.transfer(fhi);
GD.__end();
target[v] = pgm_read_byte_near(pc++);
}
}
}
}

View File

@ -0,0 +1,229 @@
#include <SPI.h>
#include <GD.h>
// ----------------------------------------------------------------------
// controller: buttons on Arduino pins 3,4,5,6 with 7 grounded
// ----------------------------------------------------------------------
static void controller_init()
{
// Configure input pins with internal pullups
byte i;
for (i = 3; i < 7; i++) {
pinMode(i, INPUT);
digitalWrite(i, HIGH);
}
// drive pin 7 low
pinMode(7, OUTPUT);
digitalWrite(7, 0);
}
#define CONTROL_LEFT 1
#define CONTROL_RIGHT 2
#define CONTROL_UP 4
#define CONTROL_DOWN 8
static byte controller_sense()
{
byte r = 0;
if (!digitalRead(5))
r |= CONTROL_DOWN;
if (!digitalRead(4))
r |= CONTROL_UP;
if (!digitalRead(6))
r |= CONTROL_LEFT;
if (!digitalRead(3))
r |= CONTROL_RIGHT;
return r;
}
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
struct dirent {
char name[12];
uint16_t length;
uint32_t addr;
};
static uint32_t flash_readn(byte *dst, uint32_t src, size_t n)
{
SEL_local();
SPI.transfer(0x03);
SPI.transfer((byte)(src >> 16));
SPI.transfer((byte)(src >> 8));
SPI.transfer((byte)(src >> 0));
while (n--) {
*dst++ = SPI.transfer(0);
src++;
if ((511 & (uint16_t)src) == 264)
src = src - 264 + 512;
}
UNSEL_local();
return src;
}
uint16_t samp_len;
uint32_t samp_ptr;
static dirent de;
static byte find_name(uint32_t &ptr, uint16_t &len, uint32_t dirptr, char *name)
{
while (true) {
dirptr = flash_readn((byte*)&de, dirptr, sizeof(de));
if (de.name[0] == 0)
return 0; // end of dir, no match found
if (strcmp(de.name, name) == 0) {
len = de.length;
ptr = de.addr;
return 1;
}
}
}
static byte ninstruments;
static dirent instruments[32];
struct active {
byte instrument;
uint32_t addr;
uint16_t pos, length;
uint16_t x, y;
};
#define NACTIVE 3
static active playing[NACTIVE];
struct active *findidle()
{
byte i;
for (i = 0; i < NACTIVE; i++)
if (playing[i].addr == 0)
return &playing[i];
return NULL;
}
static void kickoff(byte i)
{
active *p = findidle();
if (p) {
p->addr = instruments[i].addr;
p->pos = 0;
p->length = instruments[i].length;
p->x = 0;
p->y = 16 + 16 * i;
}
}
static void fromflash(uint16_t dst, uint32_t src, uint16_t len)
{
while (len--) {
byte v;
src = flash_readn(&v, src, 1);
GD.wr(dst++, v);
}
}
static byte sprstr(int x, int y, byte spr, const char *txt)
{
char c;
while ((c = *txt++) != 0) {
GD.sprite(spr++, x, y, (c - ' ') >> 2, 8 + ((c & 3) << 1), 0);
x += 11;
}
return spr;
}
// add all samples from dir
void add_samples(uint32_t dir)
{
dirent *pi = &instruments[ninstruments];
while (dir = flash_readn((byte*)pi, dir, sizeof(*pi)), pi->name[0]) {
pi++, ninstruments++;
}
}
void setup()
{
controller_init();
GD.begin();
GD.ascii();
pinMode(FLOCAL, OUTPUT);
UNSEL_local();
GD.wr(IOMODE, 'F');
uint32_t assetroot = 512L * 640;
uint32_t dk;
uint16_t dkl;
find_name(dk, dkl, assetroot, "voice");
add_samples(dk);
find_name(dk, dkl, assetroot, "drumkit");
add_samples(dk);
byte i;
for (i = 0; i < ninstruments; i++) {
byte x = (50 - strlen(instruments[i].name)) >> 1;
GD.putstr(x, 2 + i, instruments[i].name);
}
uint32_t sd;
uint16_t sdl;
if (1) {
find_name(dk, dkl, assetroot, "pickups");
find_name(sd, sdl, dk, "pal");
fromflash(RAM_SPRPAL, sd, sdl);
find_name(sd, sdl, dk, "img");
fromflash(RAM_SPRIMG, sd, sdl);
}
}
#include "soundbuffer.h"
#define SOUNDBUFFER 0x3f00
int cursor;
void loop()
{
GD.microcode(soundbuffer_code, sizeof(soundbuffer_code));
byte writepointer = 0;
for (;;) {
active *p;
byte i;
byte readpointer = GD.rd(COMM+0);
byte fullness = writepointer - readpointer;
while (fullness < 254) {
char total = 0;
for (p = playing, i = 0; i < NACTIVE; p++, i++) {
if (p->addr) {
char v;
p->addr = flash_readn((byte*)&v, p->addr, 1);
total += (v >> 1);
if (++p->pos >= p->length)
p->addr = 0;
}
}
GD.wr(SOUNDBUFFER + writepointer++, total);
fullness++;
}
GD.waitvblank();
GD.sprite(0, 142, 11 + 8 * cursor, 47, 0, 0);
GD.sprite(1, 238, 11 + 8 * cursor, 47, 0, 2);
static byte prev;
byte press;
press = controller_sense();
press = random(16);
if (prev == 0) {
if (press & CONTROL_DOWN)
cursor = min(ninstruments - 1, cursor + 1);
if (press & CONTROL_UP)
cursor = max(0, cursor - 1);
if (press & (CONTROL_RIGHT | CONTROL_LEFT))
kickoff(cursor);
}
prev = press;
}
}

View File

@ -0,0 +1,42 @@
static PROGMEM prog_uchar soundbuffer_code[] = {
0x86,0x15,
0x01,0x80,
0x0F,0x72,
0x00,0x66,
0x81,0x55,
0x0F,0x72,
0x00,0x80,
0xEB,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x81,0x61,
0x83,0x55,
0x00,0x80,
0x03,0x68,
0x00,0x66,
0xA6,0x35,
0x90,0xA8,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x00,0xBF,
0x03,0x62,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x11,0xA8,
0x23,0x60,
0x03,0x61,
0x13,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x90,0xA8,
0x23,0x60,
0x03,0x61,
0x6A,0x98,
0x03,0x62,
0x87,0x15,
0x0C,0x70,
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,124 @@
#include <SPI.h>
#include <GD.h>
struct voice
{
float f;
float a;
} voices[16];
void load()
{
byte v;
unsigned int gg = 0;
float sum = 0.0;
for (v = 0; v < 16; v++) {
sum += voices[v].a;
}
float scale = 255.0 / sum;
for (v = 0; v < 16; v++) {
byte a = int(voices[v].a * scale);
GD.voice(v, 0, int(4 * voices[v].f), a, a);
}
}
struct sprite
{
int x;
int y;
} sprites[64];
static int sprnum;
void note(byte voice, byte m, byte vel)
{
if (voice == 0 && vel) {
sprites[sprnum].x = 384;
sprites[sprnum].y = 284 - 8 * m;
sprnum = (sprnum + 1) & 63;
}
float f0 = 440 * pow(2.0, (m - 69) / 12.0);
float a0 = vel / 120.;
if (voice == 0) {
float choirA[] = { 3.5, 1.6, .7, 3.7, 1, 2 };
byte v;
for (v = 0; v < 6; v++) {
voices[v].f = (v + 1) * f0;
voices[v].a = a0 * choirA[v] / 3.7;
}
} else {
voices[voice].f = f0;
voices[voice].a = a0;
}
}
static void pause(int n)
{
load();
long started = millis();
while (millis() < (started + n * 3 / 2)) {
GD.waitvblank();
byte i;
for (i = 0; i < 64; i++) {
if (sprites[i].x > -16) {
GD.sprite(i, sprites[i].x, sprites[i].y, 0, 0, 0);
sprites[i].x--;
} else {
GD.sprite(i, 400, 400, 0, 0, 0);
}
}
}
}
#define PAUSE(x) 255,x
#define NOTE(v, p, a) v, p, a
static PROGMEM prog_uchar widor_toccata[] = {
#include "music.h"
};
static void play()
{
prog_uchar *pc = widor_toccata;
while (pc < (widor_toccata + sizeof(widor_toccata))) {
byte a = pgm_read_byte_near(pc++);
byte b = pgm_read_byte_near(pc++);
if (a == 255) {
pause(b);
} else {
byte c = pgm_read_byte_near(pc++);
note(a, b, c);
}
}
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.wr16(RAM_SPRPAL + (0 * 2), 0x8000);
GD.wr16(RAM_SPRPAL + (1 * 2), RGB(255, 255, 255));
GD.fill(RAM_SPRIMG, 0, 256);
GD.wr(RAM_SPRIMG + 0x78, 1);
GD.wr(RAM_SPRIMG + 0x98, 1);
GD.wr(RAM_SPRIMG + 0x87, 1);
GD.wr(RAM_SPRIMG + 0x89, 1);
GD.wr(RAM_SPRIMG + 0x88, 1);
GD.putstr(0, 0,"Widor's Toccata");
}
void loop()
{
play();
delay(2000);
int i;
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
}

View File

@ -0,0 +1,70 @@
#include <SPI.h>
#include <GD.h>
static void playsample(Asset &a)
{
while (a.available()) {
byte b;
a.read(&b, 1);
GD.wr(SAMPLE_L + 1, b);
GD.wr(SAMPLE_R + 1, b);
delayMicroseconds(80);
}
}
static void say(const char *word)
{
Asset a;
a.open("voice", word, NULL);
playsample(a);
}
void setup()
{
GD.begin();
// Say "Gameduino ready"
say("game");
say("duino");
delay(100);
say("ready");
// Load the pickups starting at sprite 0.
// First copy pickups/pal into RAM_SPRPAL, then
// pickups/img into RAM_SPRIMG.
Asset a;
a.open("pickups", "pal", NULL);
a.load(RAM_SPRPAL);
a.open("pickups", "img", NULL);
a.load(RAM_SPRIMG);
}
void loop()
{
// Scatter sprites across the screen
for (int i = 0; i < 256; i++)
GD.sprite(i, random(400), random(300), random(47), 0, 0);
// Play a random instrument from the 12 in the drumkit
static const char *drums[12] = {
"bassdrum2",
"bassdrum4",
"clap",
"conga2",
"conga3",
"cowbell1",
"cymbal1",
"cymbal3",
"hihat1",
"hihat2",
"snaredrum2",
"snaredrum3"
};
Asset drum;
drum.open("drumkit", drums[random(12)], NULL);
playsample(drum);
// Say "game over"
say("game");
say("over");
}

View File

@ -0,0 +1,145 @@
#include <SPI.h>
#include <GD.h>
// replicate a 2-bit color across the whole byte. Optimization for setpixel
byte replicate(byte color)
{
return (color << 6) | (color << 4) | (color << 2) | color;
}
// Set pixel at (x,y) to color. (note that color is replicated).
void setpixel(byte x, byte y, byte color)
{
/*
Because of the way the sprites are laid out in setup(), it's not too
hard to translate the pixel (x,y) to an address and mask. Taking the
two byte values as x7-x0 and y7-y0, the address of the pixel is:
x5 x4 y7 y6 y5 y4 y3 y2 y1 y0 x3 x2 x1 x0
(x6, x7) gives the value of the mask.
*/
unsigned int addr = RAM_SPRIMG | (x & 0xf) | (y << 4) | ((x & 0x30) << 8);
byte mask = 0xc0 >> ((x >> 5) & 6);
GD.wr(addr, (GD.rd(addr) & ~mask) | (color & mask));
}
// Draw color line from (x0,y0) to (x1,y1).
void line(byte x0, byte y0, byte x1, byte y1, byte color)
{
byte swap;
#define SWAP(a, b) (swap = (a), (a) = (b), (b) = swap)
color = replicate(color);
byte steep = abs(y1 - y0) > abs(x1 - x0);
if (steep) {
SWAP(x0, y0);
SWAP(x1, y1);
}
if (x0 > x1) {
SWAP(x0, x1);
SWAP(y0, y1);
}
int deltax = x1 - x0;
int deltay = abs(y1 - y0);
int error = deltax / 2;
char ystep;
if (y0 < y1)
ystep = 1;
else
ystep = -1;
byte x;
byte y = y0;
for (x = x0; x < x1; x++) {
if (steep)
setpixel(y, x, color);
else
setpixel(x, y, color);
error -= deltay;
if (error < 0) {
y += ystep;
error += deltax;
}
}
}
struct point {
int x, y;
char xv, yv;
};
static struct point triangle[3];
#define RANDOM_RGB() RGB(random(256),random(256),random(256))
// Restart the drawing
static void restart()
{
// Clear the screen
GD.fill(RAM_SPRIMG, 0, 16384);
// Position triangle at random
byte i;
for (i = 0; i < 3; i++) {
triangle[i].x = 3 + random(250);
triangle[i].y = 3 + random(250);
}
triangle[0].xv = 1;
triangle[0].yv = 1;
triangle[1].xv = -1;
triangle[1].yv = 1;
triangle[2].xv = 1;
triangle[2].yv = -1;
// Choose a random palette
GD.wr16(PALETTE4A, RGB(0,0,0));
GD.wr16(PALETTE4A + 2, RANDOM_RGB());
GD.wr16(PALETTE4A + 4, RANDOM_RGB());
GD.wr16(PALETTE4A + 6, RANDOM_RGB());
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0,"Bitmap demonstration");
// Draw 256 sprites left to right, top to bottom, all in 4-color
// palette mode. By doing them in column-wise order, the address
// calculation in setpixel is made simpler.
// First 64 use bits 0-1, next 64 use bits 2-4, etc.
// This gives a 256 x 256 4-color bitmap.
for (i = 0; i < 256; i++) {
int x = 72 + 16 * ((i >> 4) & 15);
int y = 22 + 16 * (i & 15);
int image = i & 63; /* image 0-63 */
int pal = 3 - (i >> 6); /* palettes bits in columns 3,2,1,0 */
GD.sprite(i, x, y, image, 0x8 | (pal << 1), 0);
}
restart();
}
void loop()
{
static byte color;
if (random(1000) == 0)
restart();
line(triangle[0].x, triangle[0].y, triangle[1].x, triangle[1].y, color);
line(triangle[1].x, triangle[1].y, triangle[2].x, triangle[2].y, color);
line(triangle[2].x, triangle[2].y, triangle[0].x, triangle[0].y, color);
color = (color + 1) & 3;
byte i;
for (i = 0; i < 3; i++) {
triangle[i].x += triangle[i].xv;
triangle[i].y += triangle[i].yv;
if (triangle[i].x == 0 || triangle[i].x == 255)
triangle[i].xv = -triangle[i].xv;
if (triangle[i].y == 0 || triangle[i].y == 255)
triangle[i].yv = -triangle[i].yv;
}
}

View File

@ -0,0 +1,47 @@
#include <SPI.h>
#include <GD.h>
#include "rasterinterrupt.h"
#define LINETIME_US 41.6 // time for one raster line in microseconds
#define delayLines(n) delayMicroseconds(int(n * LINETIME_US))
static int line;
#define BLACK
#define RED RGB(255, 0, 0)
void service()
{
delayLines(0.5); // wait half a line: puts us in middle of screen
if (line == 150) {
GD.wr16(BG_COLOR, RGB(255, 0, 0)); // turn red at line 150
line = 170;
} else {
GD.wr16(BG_COLOR, RGB(0, 0, 0)); // turn black at line 170
line = 150;
}
GD.wr16(COMM+0, line); // Set next split line
}
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(0, 0, "Raster interrupts");
pinMode(2, INPUT); // Arduino reads on pin 2
GD.wr(IOMODE, 'J'); // pin 2 is under microprogram control
line = 150;
GD.wr16(COMM+0, line); // Set first split line
// The raster interrupt microprogram
GD.microcode(rasterinterrupt_code, sizeof(rasterinterrupt_code));
// call 'rising' every time pin 2 rises
attachInterrupt(0, service, RISING);
}
void loop()
{
}

View File

@ -0,0 +1,32 @@
static PROGMEM prog_uchar rasterinterrupt_code[] = {
0x8C,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x80,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0x00,0x80,
0xEF,0xFF,
0x00,0x66,
0x23,0x60,
0x03,0x61,
0x90,0xA8,
0x83,0x55,
0xFF,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x03,0x68,
0xF1,0xFF,
0x00,0x66,
0x23,0x60,
0x03,0x61,
0x91,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,72 @@
#include <SPI.h>
#include <GD.h>
void readn(byte *dst, unsigned int addr, int c)
{
GD.__start(addr);
while (c--)
*dst++ = SPI.transfer(0);
GD.__end();
}
static byte coll[256];
static void load_coll()
{
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
while (GD.rd(VBLANK) == 1) // Wait until display
;
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
readn(coll, COLLISION, sizeof(coll));
}
void setup()
{
int i;
GD.begin();
GD.wr(JK_MODE, 1);
GD.wr16(RAM_PAL, RGB(255,255,255));
// Use the 4 palettes:
// 0 pink, for J sprites
// 1 green, for K sprites
// 2 dark pink, J collisions
// 3 dark green, K collisions
for (i = 0; i < 256; i++) {
GD.wr16(RAM_SPRPAL + (0 * 512) + (i << 1), RGB(255, 0, 255));
GD.wr16(RAM_SPRPAL + (1 * 512) + (i << 1), RGB(0, 255, 0));
GD.wr16(RAM_SPRPAL + (2 * 512) + (i << 1), RGB(100, 0, 100));
GD.wr16(RAM_SPRPAL + (3 * 512) + (i << 1), RGB(0, 100, 0));
}
}
byte spr;
static void polar(float th, int r, byte jk)
{
// add 2 to the palette if this sprite is colliding
byte colliding = coll[spr] != 0xff;
GD.sprite(spr, 200 + int(r * sin(th)), 142 + int(r * cos(th)), 0, jk + (colliding ? 2 : 0), 0, jk);
spr++;
}
void loop()
{
byte i;
float th;
spr = 0;
// draw the J sprites (pink)
for (i = 0; i < 5; i++) {
th = (millis() / 3000.) + 2 * PI * i / 5;
polar(th, 134, 0);
}
// draw the K sprites (green)
randomSeed(4);
for (i = 0; i < 17; i++) {
th = (millis() / float(random(1000,3000))) + 2 * PI * i / 17;
polar(th, 134, 1);
}
load_coll();
}

View File

@ -0,0 +1,16 @@
static PROGMEM prog_uchar random_code[] = {
0x81,0x15,
0x00,0x80,
0xED,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x81,0x61,
0x23,0x60,
0x03,0x61,
0x00,0x6A,
0xFF,0x9F,
0x03,0x63,
0x82,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,21 @@
#include <SPI.h>
#include <GD.h>
#include "random.h"
void setup()
{
GD.begin();
int i;
for (i = 0; i < 256; i++) {
GD.wr16(RAM_PAL + (4 * i + 0) * 2, RGB(0,0,0));
GD.wr16(RAM_PAL + (4 * i + 1) * 2, RGB(0x20,0x20,0x20));
GD.wr16(RAM_PAL + (4 * i + 2) * 2, RGB(0x40,0x40,0x40));
GD.wr16(RAM_PAL + (4 * i + 3) * 2, RGB(0xff,0xff,0xff));
}
GD.microcode(random_code, sizeof(random_code));
}
void loop()
{
}

View File

@ -0,0 +1,69 @@
static PROGMEM prog_uchar splitscreen_code[] = {
0xB3,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x6C,
0x80,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0x81,0x60,
0xFF,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x03,0x67,
0x8B,0x35,
0x0F,0x71,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x04,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x05,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x06,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x07,0xA8,
0x23,0x60,
0x03,0x61,
0x07,0x80,
0x03,0x69,
0x0A,0xA8,
0x23,0x60,
0x0F,0x71,
0x94,0xA8,
0x83,0x55,
0x8B,0x55,
0x96,0xA8,
0x93,0x55,
0x9A,0xA8,
0x83,0x55,
0x8B,0x55,
0x9C,0xA8,
0x93,0x55,
0x2C,0x81,
0x8B,0x55,
0x90,0xA8,
0x93,0x55,
0xB3,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,57 @@
#include <SPI.h>
#include <GD.h>
#include "splitscreen.h"
/*
For the splitscreen microprogram, the COMM area holds 8 short words
that control the 3-way screen split:
COMM+0 SCROLL_X for top section
COMM+2 SCROLL_Y for top section
COMM+4 Y-coordinate of start of middle section
COMM+6 SCROLL_X for middle section
COMM+8 SCROLL_Y for middle section
COMM+10 Y-coordinate of start of bottom section
COMM+12 SCROLL_X for bottom section
COMM+14 SCROLL_Y for bottom section
*/
#include "splitscreen_graphics.h"
void setup()
{
GD.begin();
GD.copy(RAM_PIC, splitscreen_pic, sizeof(splitscreen_pic));
GD.copy(RAM_CHR, splitscreen_chr, sizeof(splitscreen_chr));
GD.copy(RAM_PAL, splitscreen_pal, sizeof(splitscreen_pal));
GD.wr16(COMM+0, 0);
GD.wr16(COMM+2, 0);
GD.wr16(COMM+4, 100); // split at line 100
GD.wr16(COMM+6, 0);
GD.wr16(COMM+8, 140);
GD.wr16(COMM+10, 200); // split at line 200
GD.wr16(COMM+12, 0);
GD.wr16(COMM+14, (511 & (82 - 200))); // show line 82 at line 200
GD.microcode(splitscreen_code, sizeof(splitscreen_code));
}
// Set the scroll registers for the middle screen secion to (x, y)
static void scrollxy(uint16_t x, uint16_t y)
{
GD.wr16(COMM+6, x);
GD.wr16(COMM+8, y);
}
void loop()
{
static int i;
float th = i / 16.;
scrollxy(55 + 50 * cos(th), 150 + 50 * sin(th));
GD.wr16(COMM+12, i);
i++;
GD.waitvblank();
}

View File

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

View File

@ -0,0 +1,205 @@
static PROGMEM prog_char ADDER_vertices[] = {
-28,0,63, 28,0,63, 47,0,-37, 47,0,-63, 28,-11,-63, -28,-11,-63, -47,0,-63, -47,0,-37, -28,11,-63, 28,11,-63, -28,11,20, 28,11,20, -28,-11,20, 28,-11,20, -17,4,45, 17,4,45, 17,6,37, -17,6,37
};
static PROGMEM prog_uchar ADDER_edges[] = {
14,17, 10,11, 5,6, 0,7, 8,9, 0,10, 1,11, 1,2, 6,7, 12,13, 5,12, 8,10, 4,13, 7,12, 2,13, 9,11, 7,10, 16,17, 4,5, 1,13, 0,12, 3,9, 2,3, 0,1, 6,8, 15,16, 2,11, 14,15, 3,4
};
static PROGMEM prog_char ANACONDA_vertices[] = {
0,1,-14, -10,-3,-9, -6,-11,0, 6,-11,0, 10,-3,-9, 0,11,-12, -17,3,-3, -10,-9,9, 10,-9,9, 17,3,-3, -10,13,-5, -17,0,7, 0,0,63, 17,0,7, 10,13,-5
};
static PROGMEM prog_uchar ANACONDA_edges[] = {
8,13, 7,12, 1,6, 7,11, 1,2, 5,14, 4,9, 12,13, 6,10, 10,12, 0,4, 2,7, 9,14, 12,14, 6,11, 2,3, 11,12, 0,1, 9,13, 5,10, 8,12, 3,8, 10,14, 0,5, 3,4
};
static PROGMEM prog_char ASP_vertices[] = {
0,-15,0, 0,-7,-38, 37,0,-38, 59,-2,0, 37,-12,24, -37,0,-38, -59,-2,0, -37,-12,24, 22,-6,63, -22,-6,63, 37,12,24, -37,12,24, 0,7,-38, -14,0,-38, 14,0,-38, 0,-3,-38, 0,3,-38
};
static PROGMEM prog_uchar ASP_edges[] = {
6,9, 10,11, 4,8, 5,6, 0,7, 8,10, 8,9, 2,12, 1,2, 6,7, 5,12, 10,12, 13,16, 1,5, 9,11, 0,4, 6,11, 13,15, 2,3, 11,12, 7,9, 0,1, 14,16, 3,8, 14,15, 3,4, 3,10
};
static PROGMEM prog_char ASTEROID_vertices[] = {
0,63,0, -63,-7,0, 0,-63,0, 55,-31,0, 47,39,0, 39,0,47, -31,0,55, 0,23,-59, 0,-39,-47
};
static PROGMEM prog_uchar ASTEROID_edges[] = {
0,1, 1,2, 4,7, 2,6, 3,7, 5,6, 7,8, 0,4, 2,8, 0,7, 1,7, 3,8, 0,6, 1,8, 0,5, 4,5, 2,3, 1,6, 2,5, 3,4, 3,5
};
static PROGMEM prog_char BARREL_vertices[] = {
63,42,0, 63,13,39, 63,-34,23, 63,-34,-23, 63,13,-39, -63,42,0, -63,13,39, -63,-34,23, -63,-34,-23, -63,13,-39
};
static PROGMEM prog_uchar BARREL_edges[] = {
0,1, 1,2, 6,7, 5,9, 5,6, 7,8, 2,7, 1,6, 3,8, 2,3, 0,4, 0,5, 8,9, 4,9, 3,4
};
static PROGMEM prog_char BOA_vertices[] = {
0,0,54, 0,23,-51, 22,-14,-58, -22,-14,-58, -22,23,-34, 22,23,-34, 36,0,-39, 14,-38,-46, -14,-38,-46, -36,0,-39, 0,4,-62, 7,-5,-62, -7,-5,-62
};
static PROGMEM prog_uchar BOA_edges[] = {
10,11, 5,6, 0,7, 8,9, 6,7, 10,12, 1,5, 0,4, 1,10, 2,6, 4,5, 1,4, 3,9, 0,5, 4,9, 0,8, 11,12, 2,7, 3,12, 2,11, 3,8, 0,6, 0,9, 7,8
};
static PROGMEM prog_char BOULDER_vertices[] = {
-29,59,-17, 48,11,19, 45,-11,-19, 3,0,-63, -45,54,-48, 8,-16,21, 32,27,-48
};
static PROGMEM prog_uchar BOULDER_edges[] = {
0,1, 1,2, 2,6, 4,6, 0,6, 4,5, 1,6, 1,5, 0,5, 3,6, 0,4, 2,3, 2,5, 3,4, 3,5
};
static PROGMEM prog_char CAPSULE_vertices[] = {
-12,0,63, -12,-24,-21, -12,24,-21, 36,0,0
};
static PROGMEM prog_uchar CAPSULE_edges[] = {
1,2, 0,1, 1,3, 2,3, 0,3, 0,2
};
static PROGMEM prog_char COBRA_vertices[] = {
15,0,37, -15,0,37, 0,12,11, -59,-1,-3, 59,-1,-3, -43,7,-19, 43,7,-19, 63,-3,-19, -63,-3,-19, 0,12,-19, -15,-11,-19, 15,-11,-19, -17,3,-19, -3,5,-19, 3,5,-19, 17,3,-19, 17,-5,-19, 3,-7,-19, -3,-7,-19, -17,-5,-19, 0,0,37, 0,0,44, -39,-2,-19, -39,2,-19, -43,0,-19, 39,2,-19, 43,0,-19, 39,-2,-19
};
static PROGMEM prog_uchar COBRA_edges[] = {
5,9, 6,9, 1,3, 10,11, 4,7, 14,17, 25,27, 18,19, 7,11, 2,5, 5,8, 1,2, 6,7, 2,9, 12,13, 8,10, 25,26, 1,5, 0,11, 0,4, 1,10, 16,17, 2,6, 22,24, 22,23, 14,15, 23,24, 3,5, 0,1, 26,27, 4,6, 12,19, 3,8, 0,6, 13,18, 15,16, 0,2
};
static PROGMEM prog_char COBRAMK1_vertices[] = {
-17,0,47, 17,0,47, -63,0,6, 63,0,6, -30,11,-36, 30,11,-36, -51,-11,-36, 51,-11,-36, 0,11,-5, 0,0,47, 0,0,57
};
static PROGMEM prog_uchar COBRAMK1_edges[] = {
0,1, 2,6, 6,7, 4,6, 4,8, 4,5, 5,7, 2,4, 0,6, 1,8, 1,3, 1,7, 3,7, 0,8, 0,2, 5,8, 3,5
};
static PROGMEM prog_char CONSTRICTOR_vertices[] = {
15,-5,63, -15,-5,63, -42,-5,31, -42,-5,-31, -15,10,-31, 15,10,-31, 42,-5,-31, 42,-5,31, 15,10,3, -15,10,3, 15,-5,48, -15,-5,48, 19,-5,-19, -19,-5,-19, 11,-5,-11, -11,-5,-11, 0,-5,0
};
static PROGMEM prog_uchar CONSTRICTOR_edges[] = {
5,6, 0,7, 8,9, 5,8, 1,2, 6,7, 2,9, 10,12, 3,6, 11,13, 12,14, 4,5, 13,15, 3,9, 2,3, 1,9, 4,9, 0,8, 0,1, 6,8, 7,8, 10,14, 11,15, 3,4
};
static PROGMEM prog_char CORIOLIS_vertices[] = {
63,0,63, 0,63,63, -63,0,63, 0,-63,63, 63,-63,0, 63,63,0, -63,63,0, -63,-63,0, 63,0,-63, 0,63,-63, -63,0,-63, 0,-63,-63, 3,-11,63, 3,11,63, -3,11,63, -3,-11,63
};
static PROGMEM prog_uchar CORIOLIS_edges[] = {
5,9, 6,9, 10,11, 4,8, 8,9, 1,6, 7,11, 3,7, 0,3, 5,8, 1,2, 12,13, 6,10, 1,5, 7,10, 0,4, 14,15, 2,7, 2,6, 8,11, 9,10, 2,3, 4,11, 0,1, 12,15, 13,14, 0,5, 3,4
};
static PROGMEM prog_char COUGAR_vertices[] = {
0,4,63, -18,0,37, -37,0,-37, 0,13,-37, 0,-13,-37, 18,0,37, 37,0,-37, -33,0,52, -56,0,-18, 33,0,52, 56,0,-18, 0,6,32, 0,7,23, -11,1,42, 11,1,42, -9,5,-37, -9,-5,-37, 9,-5,-37, 9,5,-37, 0,0,-37
};
static PROGMEM prog_uchar COUGAR_edges[] = {
5,9, 5,6, 2,8, 18,19, 11,14, 15,19, 0,3, 1,2, 12,13, 6,10, 3,6, 11,13, 17,18, 17,19, 12,14, 4,5, 1,4, 9,10, 2,3, 16,19, 11,12, 0,1, 4,6, 7,8, 1,7, 0,5, 15,16, 2,4
};
static PROGMEM prog_char DODO_vertices[] = {
0,38,50, 37,11,50, 22,-31,50, -22,-31,50, -37,11,50, 0,63,11, 59,19,11, 37,-50,11, -37,-50,11, -59,19,11, 37,50,-11, 59,-19,-11, 0,-63,-11, -59,-19,-11, -37,50,-11, 22,31,-50, 37,-11,-50, 0,-38,-50, -37,-11,-50, -22,31,-50, -4,8,50, -4,-8,50, 4,8,50, 4,-8,50
};
static PROGMEM prog_uchar DODO_edges[] = {
11,16, 8,13, 7,12, 10,15, 1,6, 7,11, 15,19, 18,19, 1,2, 5,14, 4,9, 20,21, 6,10, 14,19, 12,17, 0,4, 2,7, 9,14, 20,22, 6,11, 21,23, 22,23, 2,3, 17,18, 16,17, 0,1, 9,13, 5,10, 8,12, 15,16, 3,8, 13,18, 0,5, 3,4
};
static PROGMEM prog_char FERDELANCE_vertices[] = {
0,-8,63, -23,-8,-2, -7,-8,-30, 7,-8,-30, 23,-8,-2, -23,8,-2, -7,1,-30, 7,1,-30, 23,8,-2, 0,10,-11, -1,-6,56, -15,4,10, -9,8,-2, 1,-6,56, 15,4,10, 9,8,-2, 0,-8,-11, -8,-8,25, 8,-8,25
};
static PROGMEM prog_uchar FERDELANCE_edges[] = {
5,9, 6,9, 10,11, 4,8, 5,6, 8,9, 3,7, 1,2, 6,7, 10,12, 1,5, 0,4, 7,9, 16,18, 17,18, 2,6, 13,15, 14,15, 0,5, 0,8, 11,12, 16,17, 0,1, 13,14, 7,8, 2,3, 3,4
};
static PROGMEM prog_char GECKO_vertices[] = {
-9,-3,44, 9,-3,44, -15,7,-21, 15,7,-21, -63,0,-2, 63,0,-2, -19,-13,-21, 19,-13,-21, -7,-5,31, 7,-5,31, -7,-12,-15, 7,-12,-15
};
static PROGMEM prog_uchar GECKO_edges[] = {
0,1, 1,3, 6,7, 4,6, 0,6, 5,7, 2,4, 3,7, 1,5, 2,6, 2,3, 1,7, 0,4, 0,2, 3,5
};
static PROGMEM prog_char KRAIT_vertices[] = {
0,0,63, 0,11,-31, 0,-11,-31, 59,0,-1, -59,0,-1, 59,0,57, -59,0,57, 0,3,34, 0,4,24, -11,4,12, 11,4,12, 11,7,-25, 11,-7,-25, 23,0,-19, -11,7,-25, -11,-7,-25, -23,0,-19
};
static PROGMEM prog_uchar KRAIT_edges[] = {
0,1, 1,2, 1,3, 14,16, 12,13, 15,16, 8,10, 1,4, 2,4, 8,9, 2,3, 7,10, 0,4, 14,15, 0,3, 7,9, 11,12, 0,2, 7,8, 11,13
};
static PROGMEM prog_char MAMBA_vertices[] = {
0,0,63, -63,-7,-31, -31,7,-31, 31,7,-31, 63,-7,-31, -3,3,15, 3,3,15, 7,2,27, -7,2,27, -19,-3,15, 19,-3,15, -23,-6,-19, -15,-6,-19, 15,-6,-19, 23,-6,-19, -7,3,-31, 7,3,-31, 7,-3,-31, -7,-3,-31, -31,3,-31, 31,3,-31, 35,-3,-31, -35,-3,-31, -37,0,-31, 37,0,-31
};
static PROGMEM prog_uchar MAMBA_edges[] = {
22,23, 5,6, 19,22, 0,3, 5,8, 1,2, 6,7, 20,21, 9,11, 15,18, 0,4, 17,18, 10,13, 1,4, 2,3, 3,4, 11,12, 16,17, 0,1, 20,24, 13,14, 15,16, 10,14, 21,24, 19,23, 7,8, 0,2, 9,12
};
static PROGMEM prog_char MISSILE_vertices[] = {
0,0,63, 7,7,33, -7,7,33, -7,-7,33, 7,-7,33, 7,7,-40, -7,7,-40, -7,-7,-40, 7,-7,-40, 11,11,-40, -11,11,-40, -11,-11,-40, 11,-11,-40, 7,7,-11, -7,7,-11, -7,-7,-11, 7,-7,-11
};
static PROGMEM prog_uchar MISSILE_edges[] = {
5,9, 4,8, 5,6, 12,16, 5,13, 7,11, 3,7, 0,3, 5,8, 6,14, 1,2, 6,7, 7,15, 6,10, 1,5, 0,4, 8,16, 2,6, 1,4, 2,3, 0,1, 9,13, 8,12, 3,4, 10,14, 11,15, 7,8, 0,2
};
static PROGMEM prog_char MORAY_vertices[] = {
14,0,63, -14,0,63, 0,17,-38, -58,0,0, 58,0,0, 29,-26,-9, -29,-26,-9, -8,-3,-24, 8,-3,-24, 0,-17,-15, 12,2,47, 5,0,63, -12,2,47, -5,0,63
};
static PROGMEM prog_uchar MORAY_edges[] = {
1,2, 0,1, 1,3, 0,5, 5,6, 2,4, 8,9, 4,5, 2,6, 2,3, 3,6, 0,4, 1,6, 2,5, 7,8, 0,2, 7,9
};
static PROGMEM prog_char PLATELET_vertices[] = {
-20,-30,-12, -20,52,-12, 26,43,15, 13,-63,8
};
static PROGMEM prog_uchar PLATELET_edges[] = {
0,1, 1,2, 0,3, 2,3
};
static PROGMEM prog_char PYTHON_vertices[] = {
0,0,63, 0,13,13, 27,0,-4, -27,0,-4, 0,13,-9, 0,6,-31, -13,0,-31, 13,0,-31, 0,-13,13, 0,-13,-9, 0,-6,-31
};
static PROGMEM prog_uchar PYTHON_edges[] = {
1,3, 5,6, 2,8, 8,9, 0,3, 1,2, 2,9, 6,10, 3,6, 2,7, 7,10, 4,5, 1,4, 9,10, 3,9, 0,8, 0,1, 5,7, 0,2, 3,8, 3,4, 2,4
};
static PROGMEM prog_char SIDEWINDER_vertices[] = {
-31,0,35, 31,0,35, 63,0,-27, -63,0,-27, 0,15,-27, 0,-15,-27, -11,5,-27, 11,5,-27, 11,-5,-27, -11,-5,-27
};
static PROGMEM prog_uchar SIDEWINDER_edges[] = {
0,1, 1,2, 2,5, 6,7, 7,8, 6,9, 1,4, 8,9, 1,5, 0,5, 0,4, 0,3, 3,4, 2,4, 3,5
};
static PROGMEM prog_char SHUTTLE_vertices[] = {
0,-30,41, -30,0,41, 0,32,41, 32,0,41, -36,-36,-48, -36,36,-48, 36,36,-48, 36,-36,-48, 9,0,-48, 0,-3,-48, -9,0,-48, 0,5,-48, 0,-16,63, 5,-1,55, 7,19,45, 19,7,45, -5,-1,55, -5,19,45, -18,7,45
};
static PROGMEM prog_uchar SHUTTLE_edges[] = {
4,7, 10,11, 5,6, 0,7, 8,9, 2,12, 3,7, 2,5, 0,3, 1,2, 6,7, 1,5, 3,6, 0,4, 16,18, 16,17, 2,6, 4,5, 8,11, 13,15, 1,4, 0,12, 9,10, 2,3, 0,1, 3,12, 1,12, 13,14, 17,18, 14,15
};
static PROGMEM prog_char THARGLET_vertices[] = {
-14,0,63, -14,-59,18, -14,-37,-50, -14,37,-50, -14,59,18, 14,0,-12, 14,-15,-23, 14,-9,-40, 14,9,-40, 14,15,-23
};
static PROGMEM prog_uchar THARGLET_edges[] = {
0,1, 1,2, 6,7, 5,9, 5,6, 7,8, 2,7, 1,6, 3,8, 2,3, 0,4, 0,5, 8,9, 4,9, 3,4
};
static PROGMEM prog_char THARGOID_vertices[] = {
12,-18,18, 12,-26,0, 12,-18,-18, 12,0,-26, 12,18,-18, 12,26,0, 12,18,18, 12,0,26, -9,-44,44, -9,-63,0, -9,-44,-44, -9,0,-63, -9,44,-44, -9,63,0, -9,44,44, -9,0,63, -9,24,30, -9,24,-30, -9,-24,-30, -9,-24,30
};
static PROGMEM prog_uchar THARGOID_edges[] = {
10,11, 5,6, 5,13, 0,7, 8,9, 4,12, 6,14, 1,2, 0,8, 6,7, 7,15, 12,13, 8,15, 4,5, 3,11, 9,10, 2,3, 1,9, 2,10, 11,12, 0,1, 13,14, 14,15, 3,4
};
static PROGMEM prog_char TRANSPORTER_vertices[] = {
0,19,-49, -47,7,-49, -53,-5,-49, -47,-15,-49, 49,-15,-49, 55,-5,-49, 49,7,-49, 0,11,22, -57,-1,22, -63,-15,22, 63,-15,22, 57,-1,22, -21,-3,57, -24,-15,57, 26,-15,57, 21,-3,57, -9,11,3, -34,5,3, -9,13,-13, -34,7,-13, -21,11,-26, -21,9,-13, 9,13,-26, 34,7,-26, 21,9,-13, 9,11,-5, 34,5,-5, 21,7,15, 21,9,-5, -30,-15,-24, -30,-15,30, 32,-15,-24, 32,-15,30, -24,-5,-49, 24,-5,-49, 17,5,-49, -15,5,-49
};
static PROGMEM prog_uchar TRANSPORTER_edges[] = {
10,11, 5,6, 0,7, 8,9, 34,35, 7,11, 1,2, 7,15, 2,9, 12,13, 6,11, 35,36, 4,10, 4,5, 33,34, 3,9, 2,3, 33,36, 7,12, 11,15, 0,1, 9,13, 12,15, 5,10, 8,12, 13,14, 3,4, 0,6, 1,8, 10,14, 14,15, 7,8
};
static PROGMEM prog_char VIPER_vertices[] = {
0,0,63, 0,14,21, 0,-14,21, 42,0,-21, -42,0,-21, 21,-14,-21, -21,-14,-21, 21,14,-21, -21,14,-21, -28,0,-21, 28,0,-21, 7,7,-21, -7,7,-21, -7,-7,-21, 7,-7,-21
};
static PROGMEM prog_uchar VIPER_edges[] = {
0,1, 9,13, 2,5, 2,6, 10,11, 4,6, 4,8, 5,6, 1,7, 12,13, 1,8, 10,14, 11,14, 0,4, 3,7, 0,3, 7,8, 0,2, 9,12, 3,5
};
static PROGMEM prog_char WORM_vertices[] = {
18,-18,63, -18,-18,63, 9,10,27, -9,10,27, 27,-18,45, -27,-18,45, 46,-18,-45, -46,-18,-45, 14,25,-45, -14,25,-45
};
static PROGMEM prog_uchar WORM_edges[] = {
0,1, 1,3, 6,7, 6,8, 4,6, 2,8, 5,7, 2,4, 8,9, 1,5, 3,9, 2,3, 0,4, 7,9, 0,2, 3,5
};
static ship eliteships[] = {
{ "ADDER", 18, ADDER_vertices, 29, ADDER_edges },
{ "ANACONDA", 15, ANACONDA_vertices, 25, ANACONDA_edges },
{ "ASP", 17, ASP_vertices, 27, ASP_edges },
{ "ASTEROID", 9, ASTEROID_vertices, 21, ASTEROID_edges },
{ "BARREL", 10, BARREL_vertices, 15, BARREL_edges },
{ "BOA", 13, BOA_vertices, 24, BOA_edges },
{ "BOULDER", 7, BOULDER_vertices, 15, BOULDER_edges },
{ "CAPSULE", 4, CAPSULE_vertices, 6, CAPSULE_edges },
{ "COBRA", 28, COBRA_vertices, 37, COBRA_edges },
{ "COBRAMK1", 11, COBRAMK1_vertices, 17, COBRAMK1_edges },
{ "CONSTRICTOR", 17, CONSTRICTOR_vertices, 24, CONSTRICTOR_edges },
{ "CORIOLIS", 16, CORIOLIS_vertices, 28, CORIOLIS_edges },
{ "COUGAR", 20, COUGAR_vertices, 28, COUGAR_edges },
{ "DODO", 24, DODO_vertices, 34, DODO_edges },
{ "FERDELANCE", 19, FERDELANCE_vertices, 27, FERDELANCE_edges },
{ "GECKO", 12, GECKO_vertices, 15, GECKO_edges },
{ "KRAIT", 17, KRAIT_vertices, 20, KRAIT_edges },
{ "MAMBA", 25, MAMBA_vertices, 28, MAMBA_edges },
{ "MISSILE", 17, MISSILE_vertices, 28, MISSILE_edges },
{ "MORAY", 14, MORAY_vertices, 17, MORAY_edges },
{ "PLATELET", 4, PLATELET_vertices, 4, PLATELET_edges },
{ "PYTHON", 11, PYTHON_vertices, 22, PYTHON_edges },
{ "SIDEWINDER", 10, SIDEWINDER_vertices, 15, SIDEWINDER_edges },
{ "SHUTTLE", 19, SHUTTLE_vertices, 30, SHUTTLE_edges },
{ "THARGLET", 10, THARGLET_vertices, 15, THARGLET_edges },
{ "THARGOID", 20, THARGOID_vertices, 24, THARGOID_edges },
{ "TRANSPORTER", 37, TRANSPORTER_vertices, 32, TRANSPORTER_edges },
{ "VIPER", 15, VIPER_vertices, 20, VIPER_edges },
{ "WORM", 10, WORM_vertices, 16, WORM_edges },
};

View File

@ -0,0 +1,25 @@
static PROGMEM prog_uchar eraser_code[] = {
0x81,0x15,
0x98,0xA8,
0x00,0x60,
0x00,0x6C,
0x47,0x61,
0xFF,0xBF,
0xFF,0xFF,
0x81,0x60,
0x00,0x6C,
0x81,0x6B,
0x03,0x63,
0x81,0x61,
0x23,0x60,
0x03,0x61,
0x00,0x6A,
0x81,0x67,
0x87,0x35,
0x00,0x80,
0x97,0xA8,
0x23,0x60,
0x03,0x61,
0x95,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,109 @@
static PROGMEM prog_uchar wireframe_code[] = {
0xE0,0x15,
0x44,0x60,
0x0F,0x80,
0x03,0x63,
0x81,0x6B,
0x04,0x80,
0x03,0x69,
0xF0,0x8F,
0x03,0x63,
0x03,0x64,
0x81,0x6B,
0x30,0x80,
0x03,0x63,
0x00,0x6E,
0x03,0x64,
0x00,0xC0,
0x03,0x64,
0x81,0x60,
0x00,0x6C,
0x98,0xA8,
0x00,0x60,
0x00,0x6C,
0x8D,0x6B,
0x05,0x80,
0x03,0x69,
0x06,0x80,
0x03,0x63,
0x03,0x69,
0x03,0x64,
0x80,0x61,
0x23,0x60,
0x0F,0x71,
0x00,0x66,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x6C,
0x80,0x61,
0xA1,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0xFF,0x80,
0x0F,0x73,
0x96,0xA8,
0x00,0x60,
0x00,0x6C,
0xA0,0x55,
0x47,0x61,
0x90,0xA8,
0xA3,0x55,
0x95,0xA8,
0x00,0x60,
0x00,0x6C,
0x01,0x80,
0x03,0x69,
0x81,0x61,
0xAB,0x55,
0x92,0xA8,
0x00,0x60,
0x00,0x6C,
0x03,0x65,
0xDE,0x35,
0x81,0x61,
0x94,0xA8,
0x00,0x60,
0x00,0x6C,
0xC6,0x35,
0x00,0x6E,
0x81,0x55,
0x81,0x6B,
0x03,0x62,
0x81,0x60,
0x00,0x80,
0x03,0x68,
0xD7,0x35,
0x95,0xA8,
0x00,0x60,
0x00,0x6C,
0x03,0x62,
0x97,0xA8,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0xA1,0x55,
0xD8,0x15,
0x01,0x80,
0x47,0x61,
0x80,0x61,
0x8D,0x6B,
0x03,0x62,
0x80,0x61,
0xB9,0x15,
0x8D,0x6B,
0x0F,0x71,
0x97,0xA8,
0x00,0x60,
0x00,0x6C,
0xE0,0x35,
0xAD,0x55,
0x00,0x80,
0x97,0xA8,
0x23,0x60,
0x03,0x61,
0xE0,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,263 @@
#include <SPI.h>
#include <GD.h>
////////////////////////////////////////////////////////////////////////////////
// Plotter
////////////////////////////////////////////////////////////////////////////////
#include "wireframe.h"
#include "eraser.h"
// replicate a 2-bit color across the whole byte.
byte replicate(byte color)
{
return (color << 6) | (color << 4) | (color << 2) | color;
}
#define BLACK RGB(0,0,0)
#define WHITE RGB(255,255,255)
class PlotterClass
{
public:
void begin();
void line(byte x0, byte y0, byte x1, byte y1);
void show();
private:
byte flip;
byte plotting;
void erase();
void waitready();
};
PlotterClass Plotter;
void PlotterClass::waitready()
{
while (GD.rd(COMM+7))
;
}
void PlotterClass::erase()
{
byte color = flip ? 1 : 2;
plotting = 0;
GD.wr(J1_RESET, 1);
GD.wr(COMM+7, 1);
GD.wr(COMM+8, replicate(color ^ 3));
GD.microcode(eraser_code, sizeof(eraser_code));
}
void PlotterClass::begin()
{
// Draw 256 sprites left to right, top to bottom, all in 4-color
// palette mode. By doing them in column-wise order, the address
// calculation in setpixel is made simpler.
// First 64 use bits 0-1, next 64 use bits 2-4, etc.
// This gives a 256 x 256 4-color bitmap.
unsigned int i;
for (i = 0; i < 256; i++) {
int x = 72 + 16 * ((i >> 4) & 15);
int y = 22 + 16 * (i & 15);
int image = i & 63; /* image 0-63 */
int pal = 3 - (i >> 6); /* palettes bits in columns 3,2,1,0 */
GD.sprite(i, x, y, image, 0x8 | (pal << 1), 0);
}
flip = 0;
plotting = 0;
erase();
show();
}
void PlotterClass::show()
{
waitready();
if (flip == 1) {
GD.wr16(PALETTE4A, BLACK);
GD.wr16(PALETTE4A + 2, WHITE);
GD.wr16(PALETTE4A + 4, BLACK);
GD.wr16(PALETTE4A + 6, WHITE);
} else {
GD.wr16(PALETTE4A, BLACK);
GD.wr16(PALETTE4A + 2, BLACK);
GD.wr16(PALETTE4A + 4, WHITE);
GD.wr16(PALETTE4A + 6, WHITE);
}
flip ^= 1;
erase();
}
void PlotterClass::line(byte x0, byte y0, byte x1, byte y1)
{
byte swap;
#define SWAP(a, b) (swap = (a), (a) = (b), (b) = swap)
byte steep = abs(y1 - y0) > abs(x1 - x0);
if (steep) {
SWAP(x0, y0);
SWAP(x1, y1);
}
if (x0 > x1) {
SWAP(x0, x1);
SWAP(y0, y1);
}
int deltax = x1 - x0;
int deltay = abs(y1 - y0);
int error = deltax / 2;
signed char ystep;
if (y0 < y1)
ystep = 1;
else
ystep = -1;
byte x;
byte y = y0;
waitready();
if (!plotting) {
GD.microcode(wireframe_code, sizeof(wireframe_code));
plotting = 1;
byte color = flip ? 1 : 2;
GD.wr(COMM+8, color << 6);
}
GD.__wstart(COMM+0);
SPI.transfer(x0);
SPI.transfer(y0);
SPI.transfer(x1);
SPI.transfer(y1);
SPI.transfer(steep);
SPI.transfer(deltax);
SPI.transfer(deltay);
SPI.transfer(ystep);
GD.__end();
}
////////////////////////////////////////////////////////////////////////////////
// 3D Projection
////////////////////////////////////////////////////////////////////////////////
struct ship
{
const char *name;
byte nvertices;
prog_char *vertices;
byte nedges;
prog_uchar *edges;
};
#include "eliteships.h"
#define NSHIPS (sizeof(eliteships) / sizeof(eliteships[0]))
static float mat[9];
// Taken from glRotate()
static void rotation(float phi)
{
float x = 0.57735026918962573;
float y = 0.57735026918962573;
float z = 0.57735026918962573;
float s = sin(phi);
float c = cos(phi);
mat[0] = x*x*(1-c)+c;
mat[1] = x*y*(1-c)-z*s;
mat[2] = x*z*(1-c)+y*s;
mat[3] = y*x*(1-c)+z*s;
mat[4] = y*y*(1-c)+c;
mat[5] = y*z*(1-c)-x*s;
mat[6] = x*z*(1-c)-y*s;
mat[7] = y*z*(1-c)+x*s;
mat[8] = z*z*(1-c)+c;
}
static byte projected[40 * 2];
void project(struct ship *s, float distance)
{
byte vx;
prog_char *pm = s->vertices;
prog_char *pm_e = pm + (s->nvertices * 3);
byte *dst = projected;
signed char x, y, z;
while (pm < pm_e) {
x = pgm_read_byte_near(pm++);
y = pgm_read_byte_near(pm++);
z = pgm_read_byte_near(pm++);
float xx = x * mat[0] + y * mat[3] + z * mat[6];
float yy = x * mat[1] + y * mat[4] + z * mat[7];
float zz = x * mat[2] + y * mat[5] + z * mat[8] + distance;
float q = 140 / (140 + zz);
*dst++ = byte(128 + xx * q);
*dst++ = byte(128 + yy * q);
}
}
void draw(struct ship *s, float distance)
{
project(s, distance);
prog_uchar *pe = s->edges;
prog_uchar *pe_e = pe + (s->nedges * 2);
while (pe < pe_e) {
byte *v0 = &projected[pgm_read_byte_near(pe++) << 1];
byte *v1 = &projected[pgm_read_byte_near(pe++) << 1];
Plotter.line(v0[0], v0[1], v1[0], v1[1]);
}
}
void setup()
{
GD.begin();
GD.ascii();
GD.putstr(0, 0, "Accelerated wireframe");
Plotter.begin();
}
static byte sn; // Ship number, 0-NSHIPS
static float phi; // Current rotation angle
// Draw one frame of ship
void cycle(float distance)
{
rotation(phi);
phi += 0.02;
draw(&eliteships[sn], distance);
// GD.waitvblank(); // uncomment this to sync to 72Hz frame rate
Plotter.show();
static byte every;
if (++every == 4) {
static long tprev;
long t = micros();
every = 0;
char msg[30];
int fps10 = int(4 * 10000000UL / (t - tprev));
sprintf(msg, "%3d.%d fps ", fps10 / 10, fps10 % 10);
GD.putstr(41, 0, msg);
tprev = t;
}
}
void loop()
{
const char *name = eliteships[sn].name;
GD.putstr(0, 36, " ");
GD.putstr(25 - strlen(name) / 2, 36, name);
int d;
for (d = 0; d < 100; d++)
cycle(1000 - 10 * d);
for (d = 0; d < 72*6; d++)
cycle(0.0);
for (d = 0; d < 100; d++)
cycle(10 * d);
sn = (sn + 1) % NSHIPS;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,937 @@
#include <SPI.h>
#include <GD.h>
// ----------------------------------------------------------------------
// qrand: quick random numbers
// ----------------------------------------------------------------------
static uint16_t lfsr = 1;
static void qrandSeed(int seed)
{
if (seed) {
lfsr = seed;
} else {
lfsr = 0x947;
}
}
static byte qrand1() // a random bit
{
lfsr = (lfsr >> 1) ^ (-(lfsr & 1) & 0xb400);
return lfsr & 1;
}
static byte qrand(byte n) // n random bits
{
byte r = 0;
while (n--)
r = (r << 1) | qrand1();
return r;
}
// ----------------------------------------------------------------------
// controller: buttons on Arduino pins 3,4,5,6
// ----------------------------------------------------------------------
static void controller_init()
{
// Configure input pins with internal pullups
byte i;
for (i = 3; i < 7; i++) {
pinMode(i, INPUT);
digitalWrite(i, HIGH);
}
}
#define CONTROL_LEFT 1
#define CONTROL_RIGHT 2
#define CONTROL_UP 4
#define CONTROL_DOWN 8
static byte controller_sense(uint16_t clock)
{
byte r = 0;
if (!digitalRead(5))
r |= CONTROL_DOWN;
if (!digitalRead(4))
r |= CONTROL_UP;
if (!digitalRead(6))
r |= CONTROL_LEFT;
if (!digitalRead(3))
r |= CONTROL_RIGHT;
return r;
}
// Swap color's red and blue channels
uint16_t swapRB(uint16_t color)
{
byte r = 31 & (color >> 10);
byte g = 31 & (color >> 5);
byte b = 31 & color;
return (color & 0x8000) | (b << 10) | (g << 5) | r;
}
// Swap color's red and green channels
uint16_t swapRG(uint16_t color)
{
byte r = 31 & (color >> 10);
byte g = 31 & (color >> 5);
byte b = 31 & color;
return (color & 0x8000) | (g << 10) | (r << 5) | b;
}
#include "asteroidgraphics.h"
#include "splitscreen.h"
static void update_score();
// [int(127 * math.sin(math.pi * 2 * i / 16)) for i in range(16)]
static PROGMEM prog_uchar charsin[16] = {0, 48, 89, 117, 127, 117, 89, 48, 0, -48, -89, -117, -127, -117, -89, -48};
#define qsin(a) (signed char)pgm_read_byte_near(charsin + ((a) & 15))
#define qcos(a) qsin((a) + 4)
static char spr2obj[256]; // Maps sprites to owning objects
/*
The general idea is that an object table ``objects`` has an entry for
each drawn thing on screen (e.g. player, missile, rock, explosion).
Each class of object has a ``handler`` function that does the necessary
housekeeping and draws the actual sprites.
As part of the behavior, some classes need to know if they have collided
with anything. In particular the rocks need to know if they have collided
with the player or a missile. The `collide` member points to the
colliding sprite.
*/
struct object {
int x, y;
byte handler, state;
byte collide;
} objects[128];
#define COORD(c) ((c) << 4)
static char explosions = -1;
static char enemies = -1;
static char missiles = -1;
static void push(char *stk, byte i)
{
objects[i].state = *stk;
*stk = i;
}
static char pop(char *stk)
{
char r = *stk;
if (0 <= r) {
*stk = objects[r].state;
}
return r;
}
byte rr[4] = { 0,3,6,5 };
static struct {
byte boing, boom, pop;
byte thrust;
byte bass;
} sounds;
static int player_vx, player_vy; // Player velocity
static int player_invincible, player_dying;
static byte lives;
static long score;
static byte level;
// Move object po by velocity (vx, vy), optionally keeping in
// player's frame.
// Returns true if the object wrapped screen edge
static bool move(struct object *po, char vx, char vy, byte playerframe = 1)
{
bool r = 0;
if (playerframe) {
po->x += (vx - player_vx);
po->y += (vy - player_vy);
} else {
po->x += vx;
po->y += vy;
}
if (po->x > COORD(416))
r = 1, po->x -= COORD(432);
else if (po->x < COORD(-16))
r = 1, po->x += COORD(432);
if (po->y > COORD(316))
r = 1, po->y -= COORD(332);
else if (po->y < COORD(-16))
r = 1, po->y += COORD(332);
return r;
}
#define HANDLE_NULL 0
#define HANDLE_ROCK0 1
#define HANDLE_ROCK1 2
#define HANDLE_BANG0 3
#define HANDLE_BANG1 4
#define HANDLE_PLAYER 5
#define HANDLE_MISSILE 6
// Expire object i, and return it to the free stk
static void expire(char *stk, byte i)
{
objects[i].handler = HANDLE_NULL;
push(stk, i);
}
static void handle_null(byte i, byte state, uint16_t clock)
{
}
static void handle_player(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte angle = (po->state & 15);
byte rot1 = (angle & 3);
byte rot2 = rr[3 & (angle >> 2)];
if (!player_dying && (player_invincible & 1) == 0)
draw_player(200, 150, rot1, rot2);
static byte prev_control;
byte control = controller_sense(clock);
char thrust_x, thrust_y;
if (!player_dying && control & CONTROL_DOWN) { // thrust
byte flame_angle = angle ^ 8;
byte d;
for (d = 9; d > 5; d--) {
int flamex = 201 - (((d + (clock&3)) * qsin(flame_angle)) >> 5);
int flamey = 150 - (((d + (clock&3)) * qcos(flame_angle)) >> 5);
if ((player_invincible & 1) == 0)
draw_sparkr(flamex, flamey, rot1, rot2, 1); // collision class K
}
thrust_x = -qsin(angle);
thrust_y = -qcos(angle);
sounds.thrust = 1;
} else {
thrust_x = thrust_y = 0;
sounds.thrust = 0;
}
player_vx = ((31 * player_vx) + thrust_x) / 32;
player_vy = ((31 * player_vy) + thrust_y) / 32;
po->x += player_vx;
po->y += player_vy;
if (clock & 1) {
char rotate = (512 - analogRead(0)) / 400;
if (control & CONTROL_LEFT)
rotate++;
if (control & CONTROL_RIGHT)
rotate--;
po->state = ((angle + rotate) & 15);
}
if (!player_dying &&
!(prev_control & CONTROL_UP) &&
(control & CONTROL_UP)) { // shoot!
char e = pop(&missiles);
if (0 <= e) {
objects[e].x = COORD(200);
objects[e].y = COORD(150);
objects[e].state = po->state;
objects[e].handler = HANDLE_MISSILE;
}
sounds.boing = 1;
}
prev_control = control;
if (player_invincible)
--player_invincible;
if (player_dying) {
if (--player_dying == 0) {
--lives;
update_score();
if (lives != 0) {
player_invincible = 48;
}
}
}
}
static void handle_missile(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte angle = (po->state & 15);
byte rot1 = (angle & 3);
byte rot2 = rr[3 & (angle >> 2)];
draw_sparkr(po->x >> 4, po->y >> 4, rot1, rot2);
char vx = -qsin(po->state), vy = -qcos(po->state);
if (move(po, vx, vy, 0)) {
expire(&missiles, i);
}
}
static void explodehere(struct object *po, byte handler, uint16_t clock)
{
char e = pop(&explosions);
if (0 <= e) {
objects[e].x = po->x;
objects[e].y = po->y;
objects[e].handler = handler;
objects[e].state = clock;
}
}
static void killplayer(uint16_t clock)
{
if (!player_invincible && !player_dying) {
char e = pop(&explosions);
if (0 <= e) {
objects[e].x = COORD(200);
objects[e].y = COORD(150);
objects[e].handler = HANDLE_BANG1;
objects[e].state = clock;
}
player_dying = 2 * 36;
sounds.boom = 1;
sounds.pop = 1;
}
}
static byte commonrock(uint16_t clock, byte i, byte speed, void df(int x, int y, byte anim, byte rot, byte jk))
{
struct object *po = &objects[i];
byte move_angle = po->state >> 4;
char vx = (speed * -qsin(move_angle)) >> 6, vy = (speed * -qcos(move_angle)) >> 6;
move(po, vx, vy);
byte angle = (clock * speed) >> 4;
if (po->state & 1)
angle = ~angle;
byte rot1 = (angle & 3);
byte rot2 = rr[3 & (angle >> 2)];
df(po->x >> 4, po->y >> 4, rot1, rot2, 1);
if (po->collide != 0xff) {
struct object *other = &objects[po->collide];
switch (other->handler) {
case HANDLE_PLAYER:
killplayer(clock);
break;
case HANDLE_MISSILE:
expire(&missiles, po->collide); // missile is dead
expire(&enemies, i);
return 1;
}
}
return 0;
}
static void handle_rock0(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte speed = 12 + (po->state & 7);
if (commonrock(clock, i, speed, draw_rock0r)) {
explodehere(po, HANDLE_BANG0, clock);
score += 10;
sounds.pop = 1;
}
}
static void handle_rock1(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
byte speed = 6 + (po->state & 3);
if (commonrock(clock, i, speed, draw_rock1r)) {
int j;
for (j = 0; j < 4; j++) {
char e = pop(&enemies);
if (0 < e) {
objects[e].x = po->x;
objects[e].y = po->y;
objects[e].handler = HANDLE_ROCK0;
objects[e].state = (j << 6) + qrand(6); // spread fragments across 4 quadrants
}
}
explodehere(po, HANDLE_BANG1, clock);
score += 30;
sounds.boom = 1;
}
}
static void handle_bang0(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
move(po, 0, 0);
byte anim = ((0xff & clock) - state) >> 1;
if (anim < EXPLODE16_FRAMES)
draw_explode16(po->x >> 4, po->y >> 4, anim, 0);
else
expire(&explosions, i);
}
static void handle_bang1(byte i, byte state, uint16_t clock)
{
struct object *po = &objects[i];
move(po, 0, 0);
byte anim = ((0xff & clock) - state) >> 1;
byte rot = 7 & i;
if (anim < EXPLODE32_FRAMES)
draw_explode32(po->x >> 4, po->y >> 4, anim, rot);
else
expire(&explosions, i);
}
typedef void (*handler)(byte, byte, uint16_t);
static handler handlers[] = {
handle_null,
handle_rock0,
handle_rock1,
handle_bang0,
handle_bang1,
handle_player,
handle_missile
};
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
static GDflashbits GDFB;
static void GD_uncompress(unsigned int addr, PROGMEM prog_uchar *src)
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
while (items--) {
if (GDFB.get1() == 0) {
GD.wr(addr++, GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
GD.wr(addr, GD.rd(addr + offset));
addr++;
}
}
}
}
// uncompress one line of the title banner into buffer dst
// title banner lines are run-length encoded
static void titlepaint(char *dst, byte src, byte mask)
{
if (src != 0xff) {
prog_uchar *psrc = title_runs + 2 * src;
byte a, b;
do {
a = pgm_read_byte_near(psrc++);
b = pgm_read_byte_near(psrc++);
while (a < (b & 0x7f))
dst[a++] |= mask;
} while (!(b & 0x80));
}
}
// draw a title banner column src (0-511) to screen column dst (0-63).
static void column(byte dst, byte src)
{
static char scratch[76];
memset(scratch, 0, sizeof(scratch));
byte line = pgm_read_byte_near(title + 2 * src);
titlepaint(scratch, line, 1);
line = pgm_read_byte_near(title + 2 * src + 1);
titlepaint(scratch, line, 2);
byte j;
for (j = 0; j < 38; j++) {
GD.wr(dst + (j << 6),
(((dst + j) & 15) << 4) +
scratch[2 * j] +
(scratch[2 * j + 1] << 2));
}
}
static void setup_sprites()
{
GD.copy(PALETTE16A, palette16a, sizeof(palette16a));
GD.copy(PALETTE4A, palette4a, sizeof(palette4a));
GD.copy(PALETTE16B, palette16b, sizeof(palette16b));
// Use the first two 256-color palettes as pseudo-16 color palettes
int i;
for (i = 0; i < 256; i++) {
// palette 0 decodes low nibble, hence (i & 15)
uint16_t rgb = pgm_read_word_near(palette256a + ((i & 15) << 1));
GD.wr16(RAM_SPRPAL + (i << 1), rgb);
// palette 1 decodes nigh nibble, hence (i >> 4)
rgb = pgm_read_word_near(palette256a + ((i >> 4) << 1));
GD.wr16(RAM_SPRPAL + 512 + (i << 1), rgb);
}
GD_uncompress(RAM_SPRIMG, asteroid_images_compressed);
GD.wr(JK_MODE, 1);
}
// Run the object handlers, keeping track of sprite ownership in spr2obj
static void runobjects(uint16_t r)
{
int i;
GD.__wstartspr((r & 1) ? 256 : 0); // write sprites to other frame
for (i = 0; i < 128; i++) {
struct object *po = &objects[i];
handler h = (handler)handlers[po->handler];
byte loSpr = GD.spr;
(*h)(i, po->state, r);
while (loSpr < GD.spr) {
spr2obj[loSpr++] = i;
}
}
// Hide all the remaining sprites
do
GD.xhide();
while (GD.spr);
GD.__end();
}
// ----------------------------------------------------------------------
// map
// ----------------------------------------------------------------------
static byte loaded[8];
static byte scrap;
// copy a (w,h) rectangle from the source image (x,y) into picture RAM
static void rect(unsigned int dst, byte x, byte y, byte w, byte h)
{
prog_uchar *src = bg_pic + (16 * y) + x;
while (h--) {
GD.copy(dst, src, w);
dst += 64;
src += 16;
}
}
static void map_draw(byte strip)
{
strip &= 63; // Universe is finite but unbounded: 64 strips
byte s8 = (strip & 7); // Destination slot for this strip (0-7)
if (loaded[s8] != strip) {
qrandSeed(level ^ (strip * 77)); // strip number is the hash...
// Random star pattern is made from characters 1-15
GD.__wstart(s8 * (8 * 64));
int i;
for (i = 0; i < (8 * 64); i++) {
byte r;
if (qrand(3) == 0)
r = qrand(4);
else
r = 0;
SPI.transfer(r);
}
GD.__end();
// Occasional planet, copied from the background char map
if (qrand(2) == 0) {
uint16_t dst = (qrand(3) * 8) + (s8 * (8 * 64));
switch (qrand(2)) {
case 0:
rect(dst, 0, 1, 6, 6);
break;
case 1:
rect(dst, 7, 1, 6, 6);
break;
case 2:
rect(dst, 0, 7, 8, 4);
break;
case 3:
rect(dst, 8, 7, 5, 5);
break;
}
}
loaded[s8] = strip;
}
}
static void map_coldstart()
{
memset(loaded, 0xff, sizeof(loaded));
scrap = 0xff;
byte i;
for (i = 0; i < 8; i++)
map_draw(i);
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void update_score()
{
prog_uchar* digitcodes = bg_pic + (16 * 30);
unsigned long s = score;
uint16_t a = atxy(49, scrap << 3);
byte i;
for (i = 0; i < 6; i++) {
GD.wr(a--, pgm_read_byte_near(digitcodes + (s % 10)));
s /= 10;
}
GD.wr(atxy(0, scrap << 3), pgm_read_byte_near(digitcodes + lives));
}
static void map_refresh(byte strip)
{
byte i;
byte newscrap = 7 & (strip + 7);
if (scrap != newscrap) {
scrap = newscrap;
uint16_t scrapline = scrap << 6;
GD.wr16(COMM+2, 0x8000 | scrapline); // show scrapline at line 0
GD.wr16(COMM+14, 0x8000 | (0x1ff & ((scrapline + 8) - 291))); // show scrapline+8 at line 291
GD.fill(atxy(0, scrap << 3), 0, 50);
update_score();
GD.fill(atxy(0, 1 + (scrap << 3)), 0, 64);
rect(atxy(0, 1 + (scrap << 3)), 0, 31, 16, 1);
rect(atxy(32, 1 + (scrap << 3)), 0, 31, 16, 1);
loaded[scrap] = 0xff;
}
delay(1); // wait for raster to pass the top line before overwriting it
for (i = 0; i < 6; i++)
map_draw(strip + i);
}
static void start_level()
{
int i;
for (i = 0; i < 128; i++)
objects[i].handler = 0;
player_vx = 0;
player_vy = 0;
player_invincible = 0;
player_dying = 0;
objects[0].x = 0;
objects[0].y = 0;
objects[0].state = 0;
objects[0].handler = HANDLE_PLAYER;
// Set up the pools of objects for missiles, enemies, explosions
missiles = 0;
enemies = 0;
explosions = 0;
for (i = 1; i < 16; i++)
push(&missiles, i);
for (i = 16; i < 80; i++)
push(&enemies, i);
for (i = 80; i < 128; i++)
push(&explosions, i);
// Place asteroids in a ring around the edges of the screen
for (i = 0; i < min(32, 3 + level); i++) {
char e = pop(&enemies);
if (random(2) == 0) {
objects[e].x = random(2) ? COORD(32) : COORD(400-32);
objects[e].y = random(COORD(300));
} else {
objects[e].x = random(COORD(400));
objects[e].y = random(2) ? COORD(32) : COORD(300-32);
}
objects[e].handler = HANDLE_ROCK1;
objects[e].state = qrand(8);
}
GD.copy(PALETTE16B, palette16b, sizeof(palette16b));
for (i = 0; i < 16; i++) {
uint16_t a = PALETTE16B + 2 * i;
uint16_t c = GD.rd16(a);
if (level & 1)
c = swapRB(c);
if (level & 2)
c = swapRG(c);
if (level & 4)
c = swapRB(c);
GD.wr16(a, c);
}
map_coldstart();
}
void setup()
{
GD.begin();
controller_init();
}
static void title_banner()
{
GD.fill(VOICES, 0, 64 * 4);
GD.wr(J1_RESET, 1);
GD.wr(SPR_DISABLE, 1);
GD.wr16(SCROLL_X, 0);
GD.wr16(SCROLL_Y, 0);
GD.fill(RAM_PIC, 0, 4096);
setup_sprites();
uint16_t i;
uint16_t j;
GD.__wstart(RAM_CHR);
for (i = 0; i < 256; i++) {
// bits control lit segments like this:
// 0 1
// 2 3
byte a = (i & 1) ? 0x3f : 0;
byte b = (i & 2) ? 0x3f : 0;
byte c = (i & 4) ? 0x3f : 0;
byte d = (i & 8) ? 0x3f : 0;
for (j = 0; j < 3; j++) {
SPI.transfer(a);
SPI.transfer(b);
}
SPI.transfer(0);
SPI.transfer(0);
for (j = 0; j < 3; j++) {
SPI.transfer(c);
SPI.transfer(d);
}
SPI.transfer(0);
SPI.transfer(0);
}
GD.__end();
for (i = 0; i < 256; i++) {
GD.setpal(4 * i + 0, RGB(0,0,0));
uint16_t color = pgm_read_word_near(title_ramp + 2 * (i >> 4));
GD.setpal(4 * i + 3, color);
}
for (i = 0; i < 64; i++) {
column(i, i);
}
for (i = 0; i < 128; i++) {
objects[i].handler = 0;
objects[i].collide = 0xff;
}
for (i = 0; i < 128; i++)
push(&enemies, i);
for (i = 0; i < 40; i++) {
char e = pop(&enemies);
objects[e].x = COORD(random(400));
objects[e].y = COORD(random(300));
objects[e].handler = qrand1() ? HANDLE_ROCK1 : HANDLE_ROCK0;
objects[e].state = qrand(8);
}
byte startgame = 0;
for (i = 0; startgame < 50; i++) {
for (j = 0; j < 256; j++) {
byte index = 15 & ((-i >> 2) + (j >> 4));
uint16_t color = pgm_read_word_near(title_ramp + 2 * index);
GD.setpal(4 * j + 3, color);
}
if (!startgame &&
(controller_sense(i) || (i == (2048 - 400)))) {
// explode all rocks!
for (j = 0; j < 128; j++) {
byte h = objects[j].handler;
if ((h == HANDLE_ROCK0) || (h == HANDLE_ROCK1))
objects[j].handler = HANDLE_BANG1;
objects[j].state = i;
}
startgame = 1;
}
if (startgame)
startgame++;
runobjects(i);
GD.waitvblank();
GD.wr(SPR_PAGE, (i & 1));
GD.wr(SPR_DISABLE, 0);
GD.wr16(SCROLL_X, i);
if ((i & 7) == 0) {
byte x = ((i >> 3) + 56);
column(63 & x, 255 & x);
}
}
for (i = 0; i < 32; i++) {
for (j = 0; j < 256; j++) {
uint16_t a = RAM_PAL + (8 * j) + 6;
uint16_t pal = GD.rd16(a);
byte r = 31 & (pal >> 10);
byte g = 31 & (pal >> 5);
byte b = 31 & pal;
if (r) r--;
if (g) g--;
if (b) b--;
pal = (r << 10) | (g << 5) | b;
GD.wr16(a, pal);
}
GD.waitvblank();
GD.waitvblank();
}
GD.fill(RAM_PIC, 0, 4096);
}
#define SOUNDCYCLE(state) ((state) = v ? ((state) + 1) : 0)
void loop()
{
title_banner();
GD_uncompress(RAM_CHR, bg_chr_compressed);
GD_uncompress(RAM_PAL, bg_pal_compressed);
GD.wr16(COMM+0, 0);
GD.wr16(COMM+2, 0x8000);
GD.wr16(COMM+4, 8); // split at line 8
GD.wr16(COMM+6, 177);
GD.wr16(COMM+8, 166);
GD.wr16(COMM+10, 291); // split at line 291
GD.wr16(COMM+12, 0);
GD.wr16(COMM+14, 0x8000 | (0x1ff & (8 - 291))); // show line 8 at line 292
GD.microcode(splitscreen_code, sizeof(splitscreen_code));
setup_sprites();
memset(&sounds, 0, sizeof(sounds));
level = 0;
score = 0;
lives = 3;
unsigned int r = 0;
start_level();
while (lives) {
int i, j;
runobjects(r);
for (i = 0; i < 128; i++)
objects[i].collide = 0xff;
GD.waitvblank();
// swap frames
GD.wr(SPR_PAGE, (r & 1));
int scrollx = objects[0].x >> 4;
int scrolly = objects[0].y >> 4;
GD.wr16(COMM+6, scrollx & 0x1ff);
GD.wr16(COMM+8, scrolly & 0x1ff);
map_refresh(scrolly >> 6);
update_score();
GD.wr16(COMM+12, r); // horizontal scroll the bottom banner
GD.waitvblank();
GD.__start(COLLISION);
for (i = 0; i < 256; i++) {
byte c = SPI.transfer(0); // c is the colliding sprite number
if (c != 0xff) {
objects[spr2obj[i]].collide = spr2obj[c];
}
}
GD.__end();
if (sounds.boing) {
byte v = max(0, 16 - (sounds.boing - 1) * 2);
GD.voice(0, 0, 4 * 4000 - 700 * sounds.boing, v/2, v/2);
GD.voice(1, 1, 1000 - 100 * sounds.boing, v, v);
SOUNDCYCLE(sounds.boing);
}
if (sounds.boom) {
byte v = max(0, 96 - (sounds.boom - 1) * 6);
GD.voice(2, 0, 220, v, v);
GD.voice(3, 1, 220/8, v/2, v/2);
SOUNDCYCLE(sounds.boom);
}
if (sounds.pop) {
byte v = max(0, 32 - (sounds.pop - 1) * 3);
GD.voice(4, 0, 440, v, v);
GD.voice(5, 1, 440/8, v/2, v/2);
SOUNDCYCLE(sounds.pop);
}
GD.voice(6, 1, 40, sounds.thrust ? 10 : 0, sounds.thrust ? 10 : 0);
static byte tune;
if (sounds.bass) {
byte v = sounds.bass < 9 ? 63 : 0;
int f0 = tune ? 130: 163 ;
byte partials[] = { 71, 32, 14, 75, 20, 40 };
byte i;
for (i = 0; i < 6; i++) {
byte a = (v * partials[i]) >> 8;
GD.voice(7 + i, 0, f0 * (i + 1), a, a);
}
SOUNDCYCLE(sounds.bass);
}
static byte rhythm;
if (++rhythm >= max(24 - level, 10)) {
sounds.bass = 1;
rhythm = 0;
tune = !tune;
}
byte nenemies = 64;
byte pe = enemies;
while (pe) {
pe = objects[pe].state;
nenemies--;
}
if (nenemies == 0) {
level++;
start_level();
}
r++;
}
}

View File

@ -0,0 +1,69 @@
static PROGMEM prog_uchar splitscreen_code[] = {
0xB3,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x60,
0x00,0x6C,
0x80,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x00,0x6E,
0x0F,0x74,
0x81,0x60,
0xFF,0xFF,
0x00,0x66,
0x00,0x60,
0x00,0x6C,
0x03,0x67,
0x8B,0x35,
0x0F,0x71,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x04,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x05,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x81,0x60,
0x00,0x60,
0x00,0x6C,
0x06,0xA8,
0x23,0x60,
0x03,0x61,
0x81,0x55,
0x00,0x60,
0x00,0x6C,
0x81,0x60,
0x07,0xA8,
0x23,0x60,
0x03,0x61,
0x07,0x80,
0x03,0x69,
0x0A,0xA8,
0x23,0x60,
0x0F,0x71,
0x94,0xA8,
0x83,0x55,
0x8B,0x55,
0x96,0xA8,
0x93,0x55,
0x9A,0xA8,
0x83,0x55,
0x8B,0x55,
0x9C,0xA8,
0x93,0x55,
0x2C,0x81,
0x8B,0x55,
0x90,0xA8,
0x93,0x55,
0xB3,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,722 @@
static void draw_ball(int x, int y, byte pal) {
GD.xsprite(x, y, -40, -56, 0, pal, 0);
GD.xsprite(x, y, -24, -56, 1, pal, 0);
GD.xsprite(x, y, -8, -56, 2, pal, 0);
GD.xsprite(x, y, 8, -56, 3, pal, 0);
GD.xsprite(x, y, 24, -56, 4, pal, 0);
GD.xsprite(x, y, -56, -40, 5, pal, 0);
GD.xsprite(x, y, -40, -40, 6, pal, 0);
GD.xsprite(x, y, -24, -40, 7, pal, 0);
GD.xsprite(x, y, -8, -40, 8, pal, 0);
GD.xsprite(x, y, 8, -40, 9, pal, 0);
GD.xsprite(x, y, 24, -40, 10, pal, 0);
GD.xsprite(x, y, 40, -40, 11, pal, 0);
GD.xsprite(x, y, -56, -24, 12, pal, 0);
GD.xsprite(x, y, -40, -24, 13, pal, 0);
GD.xsprite(x, y, -24, -24, 14, pal, 0);
GD.xsprite(x, y, -8, -24, 15, pal, 0);
GD.xsprite(x, y, 8, -24, 16, pal, 0);
GD.xsprite(x, y, 24, -24, 17, pal, 0);
GD.xsprite(x, y, 40, -24, 18, pal, 0);
GD.xsprite(x, y, -56, -8, 19, pal, 0);
GD.xsprite(x, y, -40, -8, 20, pal, 0);
GD.xsprite(x, y, -24, -8, 21, pal, 0);
GD.xsprite(x, y, -8, -8, 22, pal, 0);
GD.xsprite(x, y, 8, -8, 23, pal, 0);
GD.xsprite(x, y, 24, -8, 24, pal, 0);
GD.xsprite(x, y, 40, -8, 25, pal, 0);
GD.xsprite(x, y, -56, 8, 26, pal, 0);
GD.xsprite(x, y, -40, 8, 27, pal, 0);
GD.xsprite(x, y, -24, 8, 28, pal, 0);
GD.xsprite(x, y, -8, 8, 29, pal, 0);
GD.xsprite(x, y, 8, 8, 30, pal, 0);
GD.xsprite(x, y, 24, 8, 31, pal, 0);
GD.xsprite(x, y, 40, 8, 32, pal, 0);
GD.xsprite(x, y, -56, 24, 33, pal, 0);
GD.xsprite(x, y, -40, 24, 34, pal, 0);
GD.xsprite(x, y, -24, 24, 35, pal, 0);
GD.xsprite(x, y, -8, 24, 36, pal, 0);
GD.xsprite(x, y, 8, 24, 37, pal, 0);
GD.xsprite(x, y, 24, 24, 38, pal, 0);
GD.xsprite(x, y, 40, 24, 39, pal, 0);
GD.xsprite(x, y, -40, 40, 40, pal, 0);
GD.xsprite(x, y, -24, 40, 41, pal, 0);
GD.xsprite(x, y, -8, 40, 42, pal, 0);
GD.xsprite(x, y, 8, 40, 43, pal, 0);
GD.xsprite(x, y, 24, 40, 44, pal, 0);
}
static PROGMEM prog_uchar ball[] = {
0xc9, 0xa1, 0xdc, 0xf9, 0x0f, 0xe0, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0x1e, 0xc4, 0x83, 0x78,
0x10, 0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0x71, 0xff, 0x06, 0xed, 0x85, 0xf2, 0x20, 0x68, 0xd8,
0xbe, 0x5d, 0x5b, 0xc1, 0xdf, 0xbf, 0xd1, 0x70, 0x60, 0xc7, 0x94, 0x8d, 0xe0, 0x6f, 0xd9, 0xbc,
0x59, 0xd3, 0x26, 0x4d, 0x18, 0x0b, 0xbe, 0xd6, 0x2c, 0x99, 0x37, 0x63, 0xca, 0xa4, 0x71, 0x63,
0x46, 0x82, 0x8f, 0x15, 0x8b, 0xe6, 0x82, 0x83, 0x89, 0xe0, 0x68, 0x38, 0x78, 0x5b, 0xb1, 0x10,
0x9c, 0x8d, 0x1a, 0x31, 0x6c, 0x28, 0x78, 0xda, 0xb4, 0x1c, 0xdc, 0x0d, 0x19, 0x0c, 0x1e, 0x36,
0x82, 0x7b, 0xb8, 0x30, 0x68, 0xc0, 0xbf, 0xf5, 0xe0, 0x9a, 0x14, 0x82, 0x93, 0xfd, 0x6a, 0x1f,
0xc4, 0x83, 0xb8, 0x1d, 0x9b, 0xd6, 0xad, 0x5a, 0x0e, 0xb6, 0x06, 0x82, 0xa1, 0x35, 0x2b, 0x96,
0x2c, 0x5a, 0x08, 0x5e, 0x86, 0xec, 0xd9, 0x0e, 0x8b, 0xc1, 0xca, 0x9c, 0xd9, 0xe0, 0x61, 0xd0,
0x6e, 0xb0, 0xab, 0x11, 0x66, 0x4c, 0x07, 0xeb, 0x28, 0x61, 0x39, 0x4a, 0x98, 0x0f, 0x07, 0xc1,
0xc1, 0x94, 0x1d, 0x5b, 0x36, 0xac, 0x25, 0x8a, 0x38, 0x18, 0xac, 0x5b, 0x40, 0x1c, 0xb2, 0x6c,
0xc9, 0x42, 0x38, 0x09, 0x0e, 0xc6, 0xc3, 0x41, 0xe2, 0x0a, 0xee, 0xc6, 0x8c, 0x96, 0x6a, 0x7b,
0x76, 0xe3, 0x62, 0xb8, 0x0c, 0xee, 0x76, 0x6c, 0xdb, 0xb2, 0x69, 0xc3, 0x7a, 0x70, 0x30, 0xd2,
0x22, 0x0c, 0x84, 0x03, 0x3b, 0xc1, 0x25, 0x6e, 0x5a, 0x69, 0x11, 0xc1, 0x3d, 0x38, 0x58, 0xb5,
0x62, 0xd9, 0x80, 0xfd, 0xe0, 0x19, 0x8d, 0x83, 0xb3, 0xa5, 0xe0, 0x6e, 0x2d, 0x5a, 0x5a, 0xd6,
0xa4, 0x29, 0xdc, 0x59, 0x0f, 0x4e, 0x9a, 0x4b, 0x87, 0xad, 0x8e, 0x59, 0x1c, 0x22, 0x45, 0x8a,
0xca, 0x90, 0xd6, 0xcb, 0xb2, 0xe9, 0xad, 0xb0, 0x0e, 0x97, 0x43, 0x15, 0xd8, 0x1c, 0x66, 0x8b,
0xdc, 0x3a, 0xcc, 0x06, 0xf6, 0x83, 0x7d, 0xe5, 0x8d, 0xb2, 0xc1, 0x32, 0x1c, 0xa6, 0xc3, 0x5a,
0x1c, 0x55, 0xec, 0x05, 0x47, 0xdd, 0x17, 0xa3, 0x16, 0x46, 0x9d, 0xe0, 0xa0, 0xa7, 0x0c, 0x04,
0xcb, 0x70, 0xa7, 0x37, 0x67, 0xea, 0xcc, 0x04, 0xd1, 0x3c, 0x5c, 0xe8, 0xb2, 0xa9, 0xd3, 0x48,
0x70, 0x29, 0x01, 0x7a, 0x83, 0xa3, 0x2d, 0x9d, 0x36, 0x82, 0xb3, 0x7e, 0xfb, 0xfa, 0xec, 0xda,
0xd1, 0x6d, 0x3b, 0x3c, 0xe8, 0xb8, 0x17, 0x03, 0x50, 0x41, 0x70, 0xd4, 0x13, 0xad, 0x74, 0xe8,
0xd0, 0xde, 0x20, 0x34, 0x5a, 0x50, 0x6f, 0x4f, 0x6f, 0x78, 0xd4, 0x15, 0x9e, 0xb4, 0x59, 0x0c,
0x8e, 0xe6, 0xd4, 0x99, 0x55, 0xa3, 0x3a, 0x5a, 0x85, 0x87, 0xe0, 0xa1, 0xc1, 0xbc, 0x7a, 0x75,
0x6a, 0xcd, 0x04, 0x0f, 0x53, 0x2a, 0x55, 0xda, 0xd0, 0x6e, 0x4d, 0x9b, 0x86, 0x68, 0x61, 0x4e,
0x6d, 0x78, 0x30, 0xad, 0x4a, 0x95, 0x4a, 0x15, 0xca, 0x95, 0x2b, 0xd3, 0xfa, 0xdb, 0x83, 0xe8,
0x99, 0x7c, 0x45, 0xa1, 0xdd, 0x5e, 0xff, 0x6e, 0x14, 0x46, 0x43, 0xec, 0x9e, 0x56, 0x6e, 0x4c,
0xa9, 0x62, 0x43, 0x0a, 0xed, 0x87, 0xa4, 0x52, 0xbc, 0x34, 0x15, 0x19, 0x54, 0x50, 0x28, 0x74,
0x87, 0x88, 0xcb, 0x50, 0x31, 0xac, 0x69, 0xd5, 0xb2, 0x26, 0x34, 0x9a, 0xaf, 0x19, 0xb6, 0x75,
0x6a, 0x6f, 0x10, 0xb9, 0xe0, 0x34, 0x6a, 0xb2, 0xa8, 0xa1, 0x30, 0xa8, 0x09, 0x1e, 0x3a, 0x0a,
0x86, 0x75, 0x6d, 0xe1, 0xb9, 0x74, 0x54, 0x42, 0x93, 0x2a, 0x4a, 0xa6, 0x55, 0x2d, 0xa7, 0x23,
0x3c, 0x55, 0x0a, 0xd5, 0x25, 0x43, 0x7b, 0xb8, 0xd0, 0x6a, 0x45, 0xb3, 0x26, 0x8d, 0xe1, 0xa1,
0x56, 0xd4, 0x82, 0xe0, 0x11, 0x2d, 0xc2, 0x4b, 0x7c, 0xa8, 0x0d, 0x6a, 0x6a, 0xa6, 0xb6, 0xe0,
0x90, 0x0e, 0xc2, 0x63, 0x2b, 0x0c, 0x0f, 0xc1, 0x2b, 0x19, 0xbc, 0xca, 0xe8, 0x10, 0xfc, 0xc2,
0x73, 0xb2, 0x0c, 0x3e, 0x22, 0x55, 0x64, 0xcd, 0x5f, 0x10, 0x9e, 0xd5, 0xaa, 0x11, 0x1d, 0x3d,
0x44, 0x68, 0x89, 0x57, 0xc1, 0x5b, 0x8c, 0x6a, 0xd5, 0xf1, 0xb3, 0xff, 0x07, 0xf1, 0x20, 0x1e,
0xc4, 0x83, 0x78, 0x10, 0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0xa2, 0x4d, 0x73, 0x08,
0x0f, 0xc2, 0xd6, 0xb4, 0x68, 0x52, 0x1f, 0xe2, 0x83, 0xa0, 0x72, 0xa5, 0x9a, 0x35, 0xaa, 0x53,
0x15, 0xe2, 0xfd, 0x07, 0x0f, 0x25, 0x8a, 0x34, 0x88, 0x0d, 0xe1, 0xc1, 0x43, 0x99, 0x12, 0xc5,
0x0a, 0xf5, 0xab, 0x51, 0xa9, 0x24, 0xa2, 0xde, 0x04, 0x25, 0x82, 0x15, 0x2a, 0x90, 0x27, 0x5b,
0x44, 0x08, 0x15, 0x1e, 0x3e, 0x05, 0x29, 0xd0, 0xa7, 0x57, 0x96, 0x0e, 0x21, 0x11, 0x3a, 0x7c,
0x08, 0x55, 0xac, 0x48, 0xa0, 0x7e, 0xb9, 0xba, 0x65, 0x6a, 0x13, 0x2c, 0x27, 0x7d, 0x29, 0x0b,
0xde, 0xf2, 0xf4, 0xc8, 0x92, 0xa1, 0x55, 0x52, 0x08, 0x54, 0x2e, 0x4c, 0xa9, 0x60, 0x41, 0x0a,
0x05, 0xc8, 0x8b, 0x80, 0xd2, 0xa5, 0x48, 0x94, 0x5d, 0xff, 0x83, 0x78, 0x10, 0x0f, 0xc2, 0x36,
0x82, 0x7b, 0x10, 0xb6, 0x69, 0x25, 0xf8, 0x07, 0x21, 0x5b, 0x56, 0x2c, 0x06, 0xff, 0x20, 0x64,
0xd5, 0x92, 0xf9, 0xe0, 0x1f, 0x04, 0xad, 0x59, 0xb2, 0x60, 0x36, 0xf8, 0x07, 0x01, 0xe3, 0x8a,
0x0d, 0xd8, 0xb3, 0x13, 0xfc, 0xfd, 0x9b, 0x54, 0x62, 0xd0, 0xbe, 0x5d, 0xdd, 0xc1, 0xdf, 0xbf,
0x51, 0x43, 0xfa, 0xf5, 0xda, 0xd6, 0x15, 0xfc, 0xa3, 0x85, 0x82, 0x68, 0xa1, 0xcb, 0x66, 0xf0,
0x53, 0x65, 0xc4, 0x60, 0x78, 0xd0, 0xad, 0xb3, 0xf8, 0x1b, 0x53, 0xd4, 0x0b, 0xec, 0x84, 0x07,
0xed, 0xe1, 0x57, 0x85, 0x11, 0x85, 0xf6, 0xe3, 0x85, 0x4e, 0x1d, 0xda, 0x82, 0x6f, 0x78, 0xd4,
0xab, 0x47, 0x97, 0x0d, 0xed, 0xc1, 0x57, 0x45, 0xd6, 0xd0, 0x67, 0x27, 0x5e, 0xe8, 0xb0, 0xa6,
0x35, 0xfc, 0x18, 0x55, 0x94, 0x0c, 0xc2, 0x83, 0x8e, 0xf0, 0xa0, 0xc5, 0x86, 0x65, 0x0b, 0xe6,
0xcc, 0x98, 0x32, 0x61, 0xdc, 0x98, 0x11, 0xc3, 0x86, 0x0c, 0x1a, 0xb0, 0x6f, 0x2f, 0x38, 0x9b,
0x0c, 0x0e, 0x46, 0x83, 0x8b, 0x5d, 0x8b, 0xe1, 0x32, 0x38, 0x19, 0x09, 0xd7, 0x76, 0xed, 0x98,
0x37, 0x6b, 0xda, 0xa4, 0x09, 0x63, 0x46, 0xa3, 0x65, 0x34, 0xb4, 0x17, 0x3c, 0x82, 0x43, 0x3c,
0x0c, 0x4e, 0xf1, 0x28, 0x38, 0xd8, 0x4e, 0xfa, 0xe1, 0xd1, 0xae, 0x9e, 0xe6, 0x61, 0xcb, 0xa6,
0x75, 0x6b, 0xe1, 0x21, 0x1e, 0x5d, 0x0c, 0x3b, 0x7a, 0x74, 0xd7, 0x88, 0x82, 0x61, 0x55, 0x8b,
0x65, 0x4d, 0x1a, 0x15, 0xe8, 0xd7, 0x17, 0x1e, 0x6d, 0xb5, 0x80, 0x82, 0x61, 0x45, 0xb3, 0x25,
0x8b, 0x1a, 0xcc, 0x9b, 0x53, 0xab, 0x26, 0x5c, 0xb4, 0x40, 0x6d, 0xe1, 0x41, 0xb3, 0x46, 0x0d,
0xea, 0xd5, 0xa9, 0x55, 0x6b, 0x46, 0xb5, 0x2a, 0x95, 0x2a, 0xb4, 0x6b, 0x0d, 0x8f, 0x1a, 0x2d,
0xa8, 0x0f, 0x8f, 0xaa, 0x4d, 0xa9, 0x0c, 0x1e, 0x0d, 0x22, 0x5a, 0x84, 0x67, 0x35, 0xaa, 0xc3,
0x93, 0xf2, 0x68, 0x99, 0x0c, 0xa2, 0x53, 0xf0, 0x88, 0x16, 0xe1, 0x41, 0xb9, 0x16, 0xcd, 0xc1,
0xd1, 0x7c, 0xbc, 0x08, 0xaf, 0xc1, 0x23, 0x6b, 0x86, 0x37, 0x15, 0x2a, 0x84, 0x2b, 0x0b, 0x4f,
0xe9, 0x30, 0x5a, 0x46, 0x07, 0x11, 0xca, 0x95, 0x29, 0xab, 0x89, 0x15, 0xc1, 0x86, 0x8d, 0x4a,
0xa0, 0x55, 0x4b, 0x69, 0xd2, 0x68, 0xc7, 0x76, 0x70, 0xb0, 0x19, 0x1c, 0x0a, 0x85, 0x55, 0x2b,
0x71, 0x42, 0x53, 0xe9, 0xb0, 0x1d, 0x3c, 0xc3, 0xa5, 0xb6, 0xf0, 0x90, 0x3b, 0xd2, 0x84, 0x05,
0x0d, 0xc1, 0x49, 0x7b, 0xcd, 0x68, 0x98, 0x49, 0xc2, 0x62, 0x11, 0xd4, 0xb5, 0x33, 0x36, 0x45,
0x29, 0x28, 0x4c, 0x85, 0x4b, 0x7d, 0x8b, 0xb2, 0x16, 0xad, 0x72, 0x67, 0xb4, 0xc8, 0x12, 0x36,
0x37, 0x41, 0xb4, 0x48, 0x9b, 0xb9, 0xb3, 0x36, 0xa9, 0xd3, 0xb1, 0x0b, 0xad, 0xb6, 0x4c, 0x4d,
0xd1, 0xba, 0x72, 0xe8, 0xb0, 0xae, 0x2d, 0x5a, 0x95, 0xa6, 0xca, 0x18, 0x3c, 0xd2, 0x66, 0xb4,
0x0e, 0xaf, 0x6a, 0x2b, 0x82, 0x52, 0xa5, 0x2d, 0x23, 0x3c, 0x8b, 0x57, 0x27, 0x6e, 0x62, 0x04,
0x4f, 0x25, 0x4a, 0x14, 0x2b, 0xd2, 0xa8, 0x51, 0x82, 0xfa, 0x89, 0x25, 0x46, 0x59, 0x78, 0x08,
0x8e, 0x82, 0x14, 0x2a, 0x50, 0xa0, 0x5e, 0x9c, 0x3a, 0xb1, 0x6a, 0x82, 0xa7, 0x10, 0x25, 0x82,
0x15, 0x29, 0x54, 0x28, 0x40, 0xbf, 0x7c, 0x7d, 0x72, 0xd5, 0x8a, 0x51, 0x1d, 0xde, 0x82, 0x87,
0xbe, 0x03, 0xa0, 0xe7, 0x00, 0x08, 0x0d, 0x17, 0x8a, 0xa3, 0x45, 0x78, 0xd4, 0x2f, 0x4f, 0xae,
0x5c, 0x39, 0xb2, 0x65, 0xef, 0x01, 0x75, 0x6b, 0x69, 0x6d, 0x8e, 0x8b, 0xe1, 0xa8, 0xd4, 0xfc,
0x38, 0x5a, 0x5a, 0x26, 0x55, 0x28, 0xcf, 0x5a, 0xc1, 0xc1, 0x6c, 0x2e, 0x30, 0xbd, 0x95, 0x82,
0xc7, 0xb4, 0x50, 0xaa, 0xc4, 0xdc, 0x5a, 0xdc, 0xaa, 0x45, 0xf9, 0x72, 0x2e, 0xed, 0x78, 0x25,
0x4c, 0xa9, 0x10, 0xc5, 0x6a, 0xa2, 0xc5, 0x19, 0x12, 0x19, 0xaf, 0xa3, 0x83, 0xe0, 0xe0, 0x10,
0x5e, 0xb6, 0x86, 0x30, 0x65, 0x79, 0x23, 0x1f, 0x84, 0x27, 0x51, 0x8f, 0x33, 0x1d, 0x85, 0xc7,
0xe8, 0xa1, 0x46, 0xb4, 0x2a, 0x55, 0xd1, 0x22, 0x3c, 0x0a, 0x0b, 0x0f, 0xf1, 0x41, 0x50, 0x8d,
0xc8, 0x9a, 0x2a, 0x83, 0xc3, 0x95, 0xa8, 0x13, 0xc1, 0xa1, 0x49, 0xc4, 0x0b, 0x51, 0x57, 0x20,
0x1d, 0xc6, 0xab, 0xf0, 0xa8, 0x48, 0x75, 0x74, 0x10, 0x29, 0x32, 0x3c, 0x09, 0xcd, 0x86, 0xe1,
0x41, 0xa0, 0xea, 0xf0, 0x94, 0x8e, 0x85, 0x08, 0x11, 0x2c, 0x48, 0x91, 0xc0, 0xf0, 0xa0, 0x32,
0xbc, 0x8d, 0x0e, 0x41, 0x5d, 0x42, 0x54, 0x36, 0x50, 0x21, 0x42, 0x78, 0xbc, 0x14, 0x1a, 0x1e,
0xc2, 0x87, 0x40, 0x81, 0xba, 0x64, 0xca, 0x0c, 0x0e, 0xca, 0x85, 0x55, 0xc5, 0x64, 0x19, 0x1e,
0x04, 0x44, 0x82, 0xb5, 0xa5, 0x7e, 0x6d, 0x94, 0xc1, 0xa8, 0x10, 0x17, 0x96, 0xe1, 0x3c, 0x58,
0x1b, 0xea, 0x96, 0x66, 0x96, 0x6c, 0x14, 0x8a, 0x33, 0xe6, 0xda, 0x98, 0x06, 0x4b, 0xa1, 0x0a,
0xb6, 0xca, 0xbd, 0xb0, 0x0e, 0x14, 0xac, 0x4d, 0xbd, 0x7a, 0x3a, 0x53, 0x52, 0x58, 0x86, 0x02,
0x83, 0x87, 0xbc, 0x65, 0xb0, 0x34, 0x64, 0xc9, 0x52, 0x19, 0x3d, 0x14, 0x15, 0x04, 0x05, 0x02,
0xf6, 0x82, 0xde, 0xf0, 0xa1, 0x3b, 0x2b, 0xca, 0x10, 0x1e, 0x2d, 0xc2, 0xe3, 0x51, 0x94, 0x13,
0x3e, 0x75, 0xca, 0xd0, 0x21, 0x3d, 0x3c, 0x2a, 0x08, 0x0e, 0xf2, 0xf4, 0xca, 0xd1, 0x2d, 0x3b,
0x7c, 0xc8, 0x90, 0xae, 0x3d, 0x78, 0x5c, 0xe9, 0xe0, 0x21, 0x3b, 0x3e, 0x84, 0x0f, 0xe9, 0xd2,
0x2a, 0x44, 0x78, 0x90, 0x9f, 0x2c, 0xc3, 0x87, 0xac, 0x2a, 0x11, 0x3e, 0x82, 0x87, 0x80, 0xe8,
0x72, 0x25, 0x82, 0x87, 0x8c, 0xe0, 0x15, 0x9e, 0xe5, 0xea, 0x09, 0x1e, 0xf1, 0x31, 0x7c, 0x97,
0x8d, 0xe8, 0x14, 0x1f, 0x65, 0x06, 0x87, 0xf8, 0x21, 0x20, 0x1f, 0x06, 0x9f, 0xf8, 0x2c, 0x2d,
0x38, 0x24, 0xcb, 0x2f, 0x14, 0x5f, 0xb8, 0x05, 0x8f, 0xaa, 0x55, 0x8d, 0xa2, 0x83, 0x0c, 0xee,
0xd2, 0xa4, 0x0e, 0x05, 0xa5, 0x0d, 0x51, 0x41, 0x4c, 0xd0, 0x2d, 0x4b, 0x86, 0x36, 0xc9, 0x12,
0x44, 0x4d, 0x89, 0xc9, 0x51, 0xb2, 0x62, 0x42, 0x0c, 0x90, 0x2e, 0x45, 0x92, 0xb8, 0x29, 0x70,
0x33, 0x26, 0x63, 0x22, 0xc8, 0x11, 0x32, 0xa5, 0x4b, 0x8d, 0x00, 0x97, 0x62, 0x76, 0xb6, 0x84,
0xe0, 0x91, 0x10, 0x65, 0x48, 0x8b, 0x00, 0x4b, 0x70, 0x35, 0xa6, 0x4a, 0xb9, 0x05, 0x22, 0x7f,
0x48, 0xe5, 0xfc, 0x28, 0x83, 0x87, 0xc2, 0xe0, 0x25, 0x27, 0x01, 0xa4, 0x0f, 0x29, 0x19, 0xe2,
0x34, 0x0a, 0x0c, 0xbe, 0x32, 0xb8, 0x05, 0x4f, 0x29, 0x92, 0x05, 0x05, 0x1f, 0xd9, 0x3c, 0x13,
0x00, 0xd7, 0xf0, 0x11, 0x3c, 0x24, 0x49, 0x0c, 0x5f, 0x7c, 0x64, 0xcb, 0xe4, 0x91, 0x21, 0xa4,
0x4a, 0x0d, 0x5e, 0x12, 0xc4, 0xf3, 0xab, 0x99, 0xbc, 0x2a, 0x00, 0xb7, 0xe0, 0x27, 0x8e, 0x6d,
0xf8, 0x08, 0xde, 0x52, 0xc2, 0x27, 0x47, 0x0e, 0xe2, 0xd9, 0x89, 0x15, 0xc3, 0x5a, 0x16, 0x4f,
0xe9, 0xe1, 0x23, 0x38, 0x70, 0x8e, 0x1f, 0xd1, 0x83, 0x1d, 0xdb, 0xe0, 0x21, 0x8a, 0x25, 0xf7,
0xe0, 0xc1, 0x45, 0xb2, 0x24, 0x4e, 0x12, 0x39, 0xb0, 0x17, 0x27, 0x96, 0x0d, 0x6b, 0x56, 0x2c,
0x45, 0x30, 0x4b, 0x0e, 0xe1, 0x21, 0x78, 0x48, 0x60, 0x1f, 0x3d, 0xd8, 0x88, 0x0e, 0x1e, 0x2c,
0x98, 0x71, 0x8d, 0x1e, 0xc1, 0x21, 0x7e, 0xb1, 0x0d, 0x5f, 0x2c, 0x98, 0xfb, 0x0f, 0xe0, 0x41,
0x44, 0x44, 0xf0, 0x0f, 0x22, 0x62, 0x85, 0x85, 0xf0, 0x20, 0x2c, 0x9e, 0xb5, 0xe0, 0x10, 0x1e,
0x84, 0x24, 0x88, 0x65, 0x19, 0xfc, 0x83, 0x90, 0x24, 0xf6, 0x62, 0x52, 0x7e, 0xf0, 0xe6, 0x20,
0x96, 0x15, 0xd3, 0x08, 0x1f, 0x04, 0x38, 0x4b, 0x64, 0xcf, 0x46, 0x04, 0xa3, 0x10, 0xee, 0x9f,
0x8b, 0x24, 0x09, 0x6c, 0x59, 0x31, 0x0b, 0xfe, 0xfe, 0xa5, 0x70, 0xe2, 0xc0, 0x8e, 0x3d, 0x0b,
0xc6, 0x21, 0x9c, 0x0b, 0x67, 0x8e, 0xec, 0xd9, 0x92, 0x62, 0xc6, 0x3f, 0x84, 0x6d, 0x88, 0xe0,
0xc9, 0x9a, 0x05, 0xe1, 0xe0, 0xc7, 0x95, 0x73, 0x0c, 0x20, 0xc7, 0x86, 0x25, 0x33, 0x02, 0x21,
0x94, 0x2b, 0x97, 0xe0, 0x91, 0x21, 0x48, 0x11, 0x8f, 0x60, 0x4c, 0x99, 0x50, 0xe2, 0x48, 0x9e,
0x6d, 0x0c, 0x60, 0x1a, 0x41, 0x83, 0x07, 0x63, 0x86, 0xec, 0xc9, 0x91, 0x26, 0x49, 0x8c, 0x50,
0x29, 0x0f, 0x02, 0x2a, 0x94, 0x28, 0xd4, 0xa7, 0x47, 0xb7, 0x4e, 0x1d, 0xda, 0xb4, 0x6a, 0x09,
0xd5, 0xca, 0x14, 0x29, 0xd0, 0xab, 0x47, 0x97, 0x0e, 0xed, 0xda, 0xb4, 0x68, 0x0e, 0x5e, 0x2a,
0xc3, 0x83, 0x7e, 0xbd, 0xe1, 0x49, 0x6a, 0xf0, 0x51, 0xae, 0x58, 0x41, 0x74, 0xd0, 0xa5, 0x33,
0x3c, 0x68, 0xd5, 0xac, 0x29, 0x7c, 0x8a, 0x56, 0xaa, 0x28, 0x3c, 0xc8, 0xd6, 0x29, 0x43, 0xbb,
0x56, 0x29, 0x9a, 0x25, 0x05, 0x4f, 0x1d, 0x5a, 0x14, 0xca, 0x8b, 0x17, 0xe1, 0x41, 0x5a, 0xb2,
0x90, 0xa4, 0x31, 0x78, 0x4a, 0xd3, 0xa4, 0x41, 0xac, 0x1a, 0x59, 0xc9, 0x42, 0x5a, 0xbc, 0xb8,
0x12, 0xc1, 0x43, 0xb7, 0x56, 0x8d, 0xe2, 0xd5, 0x8a, 0x56, 0x29, 0x42, 0x58, 0x78, 0x90, 0x1c,
0x26, 0x82, 0x87, 0x0c, 0x29, 0x1a, 0xd5, 0xa9, 0x51, 0xa5, 0x52, 0xb9, 0x30, 0xa1, 0x8a, 0x9f,
0x60, 0xf0, 0xd0, 0x26, 0x39, 0x3a, 0x88, 0x11, 0x25, 0x42, 0xb8, 0x52, 0x25, 0x82, 0x15, 0x29,
0x14, 0x10, 0x3c, 0xa4, 0x4a, 0x52, 0x2f, 0x56, 0xb5, 0x4a, 0x15, 0xe1, 0x41, 0x88, 0x60, 0x81,
0x0a, 0xe4, 0xfb, 0xd7, 0x15, 0x1d, 0xc4, 0xa9, 0x11, 0x25, 0x52, 0xb8, 0x32, 0xa5, 0xe1, 0x41,
0xa0, 0x00, 0xfd, 0xfe, 0x65, 0x48, 0x96, 0x20, 0x4e, 0x8c, 0xaa, 0xe8, 0x20, 0x2c, 0x3c, 0x08,
0x0a, 0x1e, 0xe1, 0x43, 0x7b, 0x7c, 0x14, 0x2d, 0x4a, 0x85, 0x70, 0xa1, 0xf1, 0x21, 0x5e, 0xc8,
0x97, 0xe7, 0x5f, 0x9a, 0x24, 0xf1, 0x62, 0x45, 0x8b, 0xcc, 0x16, 0x42, 0x85, 0x84, 0xa7, 0xe0,
0x21, 0x55, 0xa2, 0xf8, 0x74, 0x11, 0x1f, 0xa2, 0xab, 0xbc, 0x06, 0xa1, 0x51, 0x83, 0x7a, 0x75,
0x6a, 0xd5, 0x88, 0x2e, 0x10, 0x2a, 0x62, 0x41, 0x2a, 0xd0, 0x14, 0x1c, 0xc4, 0x07, 0x07, 0x31,
0xaa, 0x55, 0xa9, 0x12, 0x19, 0x1c, 0x95, 0x09, 0x6d, 0x10, 0xe1, 0x41, 0x5c, 0x78, 0x16, 0x11,
0x9e, 0x94, 0x46, 0xdb, 0xf0, 0x11, 0x1e, 0x94, 0xd7, 0x44, 0x21, 0x1a, 0x25, 0x88, 0x0f, 0x2f,
0xd1, 0x49, 0x69, 0xcd, 0x48, 0xc6, 0xf1, 0xa1, 0x02, 0x44, 0x8b, 0xf0, 0x24, 0x44, 0x82, 0x7a,
0x71, 0xfd, 0x20, 0x1d, 0x86, 0x47, 0x61, 0xc9, 0x42, 0x89, 0xe2, 0xe0, 0xa0, 0x56, 0x6d, 0x78,
0x69, 0x10, 0x25, 0xa1, 0x66, 0x84, 0x67, 0x51, 0xd9, 0x40, 0x44, 0xb4, 0x10, 0xa6, 0x34, 0x38,
0x08, 0xce, 0x07, 0x62, 0xc3, 0x73, 0x0b, 0x14, 0xda, 0x10, 0x05, 0xc9, 0x93, 0xab, 0x47, 0x4c,
0x73, 0xa8, 0x1f, 0xc2, 0x93, 0xb5, 0xe0, 0xe0, 0x29, 0x47, 0xb7, 0x2c, 0x99, 0xf3, 0x42, 0xf8,
0xf0, 0x88, 0x0f, 0x82, 0x83, 0x87, 0x3e, 0xb9, 0x72, 0x64, 0x07, 0x0f, 0x19, 0x32, 0x82, 0xa7,
0x90, 0x01, 0x29, 0x28, 0x38, 0x06, 0x2f, 0xe9, 0xd2, 0xa4, 0x49, 0x4d, 0x96, 0x3d, 0x21, 0x3c,
0xcb, 0x94, 0x11, 0x3c, 0xa4, 0x4a, 0x95, 0x22, 0x59, 0x52, 0xf0, 0x8d, 0x0e, 0xc1, 0x53, 0x4a,
0xf0, 0xe4, 0x28, 0x31, 0x63, 0x2a, 0x12, 0xa4, 0x50, 0x81, 0x00, 0xf9, 0xfa, 0xf4, 0xfd, 0x84,
0xb4, 0xa8, 0x44, 0x88, 0xe2, 0x5d, 0xb1, 0x3a, 0xf5, 0xe7, 0x81, 0xb8, 0xa0, 0x5b, 0xb6, 0xae,
0x45, 0x21, 0x28, 0xbc, 0xc8, 0xd3, 0x2b, 0x27, 0x4b, 0xca, 0x0a, 0xaf, 0x6b, 0x40, 0x6f, 0x78,
0x96, 0x55, 0x10, 0x37, 0xc3, 0x61, 0x90, 0x57, 0x39, 0xc3, 0x43, 0x9e, 0x3c, 0x85, 0x97, 0x32,
0x3c, 0x47, 0x47, 0x5d, 0x32, 0x2b, 0x84, 0xc2, 0x53, 0xa9, 0x2f, 0x59, 0xc9, 0x0e, 0x8f, 0x32,
0xb3, 0x41, 0x78, 0xc8, 0x06, 0xd1, 0x31, 0x59, 0x97, 0x81, 0x12, 0x11, 0x1e, 0xa3, 0x83, 0xdc,
0xda, 0x13, 0xbc, 0x04, 0x84, 0xf7, 0xd6, 0x11, 0x3c, 0xe2, 0x55, 0x78, 0xeb, 0x5c, 0xd1, 0x22,
0xbc, 0x25, 0x4b, 0x9e, 0x3c, 0xa4, 0x07, 0x7f, 0xd9, 0xbc, 0xc2, 0x13, 0xf7, 0x64, 0xcb, 0x47,
0x36, 0xef, 0xe0, 0x10, 0x1e, 0xc2, 0x47, 0xb2, 0xe0, 0x2f, 0x8f, 0x5f, 0x3a, 0x08, 0x1e, 0xb2,
0x78, 0xc9, 0x4c, 0x16, 0xdc, 0xb9, 0x73, 0x90, 0x9f, 0x2c, 0xf9, 0x86, 0xc7, 0xe8, 0x10, 0x9e,
0xb8, 0x57, 0x08, 0x1d, 0x3a, 0xa4, 0x4b, 0x3f, 0x13, 0x83, 0xb3, 0x2a, 0x08, 0x8c, 0x17, 0x91,
0x70, 0x1a, 0xce, 0x03, 0x29, 0xcb, 0x28, 0x78, 0xea, 0x94, 0x19, 0x1e, 0x83, 0xc3, 0x3c, 0x9c,
0x57, 0xc9, 0x22, 0x61, 0x84, 0x07, 0x6d, 0xe1, 0x71, 0x1e, 0x04, 0x0f, 0x89, 0x12, 0x25, 0xc8,
0x5f, 0x8b, 0x6b, 0x7b, 0x19, 0x4a, 0x0a, 0x9e, 0xe2, 0xd7, 0x52, 0x74, 0x0d, 0x1e, 0x12, 0x38,
0x04, 0x8f, 0x74, 0x70, 0x14, 0xb7, 0x66, 0x74, 0xd8, 0x06, 0x12, 0xd8, 0x07, 0xef, 0xa3, 0x28,
0x85, 0xb3, 0x24, 0x4e, 0xf1, 0x22, 0x3c, 0x04, 0xcf, 0xf0, 0xc8, 0x25, 0x59, 0x85, 0x07, 0x0e,
0xe1, 0x43, 0x5c, 0x74, 0xe4, 0x9a, 0x0d, 0xb8, 0x84, 0x27, 0x8e, 0xc1, 0x81, 0x3d, 0x3b, 0xee,
0xdc, 0x92, 0x05, 0xd7, 0xf0, 0x10, 0xbc, 0xc2, 0x83, 0xf8, 0xe0, 0xf1, 0x06, 0x83, 0x43, 0x78,
0x90, 0x1c, 0x2f, 0x38, 0x72, 0xe0, 0x10, 0x1c, 0xc4, 0x85, 0x0f, 0xa9, 0xc1, 0x23, 0x59, 0x47,
0x47, 0xf1, 0xec, 0xd8, 0x26, 0x8b, 0xf8, 0x10, 0x9e, 0x38, 0x85, 0xe7, 0xe0, 0x11, 0x1f, 0xa2,
0x13, 0x27, 0x49, 0xe9, 0x92, 0x7d, 0x74, 0x08, 0x9f, 0x5c, 0xb9, 0x86, 0xf7, 0xe0, 0xc1, 0x96,
0xed, 0x36, 0x97, 0xc5, 0xb3, 0x0d, 0x70, 0xcf, 0x1a, 0xe3, 0x69, 0x3a, 0xf0, 0x5e, 0x16, 0xd3,
0x4a, 0x3a, 0x37, 0xae, 0xd3, 0xe2, 0x2e, 0x5c, 0xa5, 0x79, 0xc1, 0x43, 0x46, 0x78, 0x90, 0x16,
0xbc, 0xf8, 0xca, 0x99, 0x0f, 0xf3, 0x52, 0xc6, 0x3a, 0x08, 0x0f, 0x52, 0xd9, 0x8b, 0xbb, 0x8b,
0xd1, 0x29, 0x3e, 0x70, 0x8f, 0x8e, 0x52, 0xc5, 0x65, 0x04, 0x31, 0xfb, 0x88, 0xa7, 0x4c, 0x1e,
0x75, 0x31, 0x6b, 0x88, 0x13, 0xc7, 0x56, 0x0c, 0x1b, 0xd1, 0xac, 0xd2, 0x65, 0xf0, 0x8c, 0x1e,
0x5c, 0xc2, 0x83, 0xd8, 0xe0, 0xc0, 0x5a, 0x14, 0x4b, 0x96, 0x2c, 0xa4, 0x27, 0x87, 0xa2, 0x19,
0x9e, 0x58, 0xb3, 0x66, 0x25, 0x32, 0x78, 0x30, 0x67, 0x1e, 0x1e, 0xa2, 0x07, 0xbb, 0xf0, 0xc0,
0x26, 0x3c, 0xb0, 0x0a, 0x0e, 0x2c, 0x98, 0x33, 0x63, 0xc6, 0x94, 0x09, 0x17, 0xb6, 0xd1, 0x89,
0x55, 0xf0, 0x23, 0xc2, 0x98, 0x2d, 0x9b, 0xf0, 0x10, 0x1d, 0xe2, 0x23, 0x73, 0xe2, 0xcc, 0x88,
0x86, 0x8f, 0xe0, 0x1d, 0x5e, 0xa2, 0x07, 0x53, 0xa2, 0xe1, 0x2b, 0x59, 0xb2, 0x22, 0xc9, 0x82,
0x04, 0x73, 0x62, 0xe1, 0x83, 0x09, 0x13, 0xc2, 0xd1, 0x81, 0x74, 0x74, 0x09, 0x1e, 0xe1, 0x21,
0x38, 0x04, 0x4f, 0xd6, 0xa4, 0xc2, 0x73, 0x7c, 0x8a, 0x0e, 0x8c, 0xb9, 0x70, 0x59, 0x8a, 0x4b,
0x62, 0x4e, 0x64, 0x8e, 0xc8, 0x99, 0x0b, 0xae, 0xc4, 0x56, 0xd8, 0xc3, 0x59, 0x20, 0x78, 0x4f,
0x03, 0xce, 0x4b, 0x71, 0x2e, 0x06, 0x4f, 0x52, 0x2c, 0x53, 0x45, 0x74, 0x5c, 0x1a, 0x7b, 0xb0,
0x71, 0x90, 0x09, 0x5f, 0xc4, 0xc3, 0x07, 0xa7, 0xf0, 0x15, 0x1c, 0xc2, 0x37, 0x8b, 0xe0, 0xc5,
0x71, 0x2f, 0xac, 0x09, 0xb2, 0x79, 0x30, 0x73, 0x44, 0x0f, 0xce, 0xf1, 0x89, 0x03, 0xf9, 0xe8,
0x44, 0xba, 0x51, 0x90, 0x20, 0x1e, 0x7c, 0xc2, 0x57, 0x7c, 0x20, 0x55, 0x19, 0x82, 0x07, 0x25,
0x4e, 0x14, 0xc3, 0x43, 0xf0, 0x24, 0x13, 0x9e, 0x89, 0x45, 0x87, 0xe4, 0x40, 0x21, 0x38, 0x90,
0x63, 0x9b, 0x1e, 0xc2, 0x43, 0x74, 0x60, 0xc6, 0x98, 0x52, 0x72, 0xa0, 0x10, 0x1f, 0xc8, 0x06,
0x8f, 0xf0, 0x11, 0x1d, 0x89, 0x11, 0x66, 0xc4, 0x90, 0x40, 0x7e, 0x20, 0x47, 0x36, 0x7d, 0x90,
0x0e, 0x5f, 0xc4, 0x08, 0x11, 0x0a, 0x1e, 0x04, 0xf8, 0x47, 0xc7, 0xf8, 0x11, 0xbc, 0x19, 0x31,
0x22, 0x18, 0x1c, 0xe8, 0xd3, 0xa3, 0x1b, 0x1c, 0xc2, 0x2f, 0xc3, 0xe0, 0x41, 0x9f, 0x5f, 0xf0,
0xa0, 0x43, 0x9b, 0x56, 0xf4, 0x21, 0xc8, 0x80, 0x40, 0x78, 0xa4, 0x1b, 0x3c, 0x69, 0xd2, 0x44,
0x41, 0x1c, 0x19, 0xd1, 0x91, 0xc1, 0x90, 0x01, 0x3b, 0x36, 0xa4, 0x88, 0x13, 0xa1, 0xe7, 0x3f,
0x00, 0xad, 0xc4, 0x18, 0x40, 0x8f, 0x0e, 0x29, 0x12, 0x44, 0x09, 0x06, 0xef, 0x95, 0xc8, 0x88,
0x01, 0x7d, 0xbe, 0xb4, 0x49, 0x66, 0x09, 0xba, 0x21, 0x88, 0x59, 0xf4, 0x20, 0x94, 0x00, 0xe8,
0xd2, 0xa6, 0x49, 0x1c, 0x31, 0xfd, 0xe0, 0x45, 0x2c, 0x78, 0x30, 0xca, 0x01, 0xc1, 0x93, 0x3a,
0x15, 0x84, 0x38, 0x43, 0x20, 0x33, 0x22, 0x84, 0x09, 0x11, 0xa4, 0x9f, 0x1e, 0x68, 0xd1, 0xc0,
0x4a, 0x09, 0x6f, 0xf0, 0x0c, 0x9f, 0xc1, 0x33, 0x05, 0xe0, 0xa2, 0x41, 0x0d, 0x33, 0xba, 0xe0,
0xc9, 0x34, 0x7c, 0x07, 0x0f, 0x5a, 0x38, 0x82, 0x07, 0x86, 0x18, 0x98, 0x3e, 0xa2, 0x17, 0x3d,
0x3c, 0xb4, 0x71, 0x62, 0xa3, 0x82, 0x11, 0x75, 0x04, 0x08, 0xde, 0xf8, 0xc3, 0x07, 0x6e, 0x9a,
0xd8, 0xb1, 0x60, 0x44, 0x1b, 0x7c, 0xe9, 0xe3, 0xa3, 0x83, 0x1b, 0x27, 0x76, 0xac, 0x98, 0xc0,
0x05, 0x6f, 0x44, 0x04, 0xc3, 0x07, 0xde, 0xe8, 0x11, 0x3c, 0xd1, 0x83, 0xf0, 0x1f, 0xbd, 0x10,
0x86, 0x0f, 0xbc, 0xe1, 0x0b, 0x32, 0x7a, 0x50, 0xfe, 0x91, 0x12, 0x41, 0x4c, 0x08, 0x61, 0xf8,
0x0c, 0x1e, 0x38, 0xb0, 0x62, 0xc6, 0x00, 0x3a, 0x7c, 0x20, 0x21, 0x8c, 0x88, 0x00, 0x7e, 0x7c,
0xe1, 0x13, 0x07, 0x34, 0xc8, 0x10, 0xc0, 0x04, 0x6f, 0x04, 0xc1, 0x07, 0x1b, 0x66, 0x8c, 0x60,
0xfd, 0xcb, 0x96, 0x22, 0x51, 0x9c, 0x18, 0x51, 0x22, 0x84, 0x0b, 0x15, 0x22, 0x58, 0x90, 0x40,
0xf9, 0xf2, 0xe4, 0xca, 0x94, 0x22, 0x21, 0xf8, 0x09, 0x14, 0x10, 0x3c, 0x65, 0x48, 0x96, 0x20,
0x56, 0xb4, 0x48, 0x11, 0xc2, 0xc2, 0x47, 0x78, 0x08, 0x5e, 0xd2, 0x25, 0x8b, 0x0f, 0x9e, 0xc2,
0x83, 0x47, 0x74, 0x60, 0x28, 0x80, 0xbf, 0x3c, 0xbe, 0xdc, 0x39, 0x89, 0x67, 0x2b, 0x9a, 0xa5,
0x70, 0x66, 0x42, 0x18, 0xc7, 0x47, 0x7e, 0x72, 0xf9, 0x48, 0x93, 0xc4, 0x5e, 0x0c, 0x2b, 0x91,
0xc9, 0x81, 0x89, 0x60, 0x46, 0xe1, 0x49, 0x0e, 0xb3, 0xe0, 0x25, 0x82, 0xb9, 0xd0, 0xe0, 0x11,
0x9d, 0xe5, 0x08, 0x63, 0x28, 0x8e, 0x8d, 0x28, 0x16, 0xcc, 0x99, 0x0a, 0x61, 0x24, 0x90, 0x81,
0xfc, 0xe8, 0xc9, 0x8c, 0x21, 0x3f, 0x3e, 0xc1, 0x83, 0x19, 0x53, 0xc6, 0xaf, 0x83, 0x01, 0x7f,
0x7e, 0x7c, 0xa3, 0x47, 0xf0, 0xe4, 0xc5, 0x42, 0x18, 0xd3, 0xf8, 0x10, 0x3e, 0xd2, 0x05, 0x1f,
0xde, 0xe1, 0x8b, 0x17, 0x0f, 0x6e, 0xe1, 0x2b, 0x3c, 0x06, 0x1f, 0x9e, 0xc1, 0x83, 0x0b, 0xe7,
0x53, 0x11, 0xfc, 0x78, 0xf3, 0xe4, 0xce, 0x2d, 0x78, 0x70, 0xa2, 0x10, 0x3c, 0xe8, 0x86, 0x0f,
0xe2, 0x0c, 0xe9, 0xf1, 0xa6, 0xc9, 0x9d, 0x1a, 0x17, 0xca, 0x1c, 0x39, 0xb0, 0x67, 0xc7, 0x37,
0x78, 0x32, 0x0a, 0x5e, 0xe1, 0x93, 0x23, 0x05, 0xf6, 0xe4, 0xd8, 0x92, 0xe1, 0x45, 0x92, 0x50,
0xf6, 0x88, 0x1e, 0xd4, 0xa8, 0x70, 0xa6, 0xc8, 0x81, 0x3c, 0x3b, 0x32, 0xac, 0x59, 0xc9, 0x91,
0x23, 0x5b, 0x96, 0x4c, 0x19, 0xd2, 0xa5, 0x49, 0x93, 0xca, 0x45, 0x32, 0x67, 0x49, 0x12, 0x25,
0x06, 0xa7, 0xe0, 0xc1, 0x5d, 0x1a, 0x57, 0xa9, 0x52, 0x82, 0x83, 0xa4, 0x44, 0x20, 0x87, 0xb7,
0x2c, 0x9e, 0x32, 0xc2, 0x27, 0x57, 0x29, 0xc1, 0x93, 0xa3, 0x44, 0x0e, 0xe1, 0x83, 0x57, 0x78,
0xe4, 0xc6, 0x2d, 0x3a, 0x70, 0x96, 0xcc, 0x29, 0x3a, 0x70, 0x90, 0x2d, 0x9b, 0x57, 0xf8, 0x88,
0x0f, 0xd1, 0x99, 0x53, 0x74, 0xe0, 0xc0, 0x3b, 0x3c, 0xc8, 0xe4, 0x51, 0x3c, 0xc2, 0x43, 0x72,
0x08, 0x0e, 0xd1, 0x41, 0x7c, 0x78, 0xe2, 0x2e, 0x9d, 0x1b, 0xd7, 0x0a, 0xc0, 0x39, 0x78, 0x94,
0xcc, 0xf0, 0x51, 0x2f, 0xc2, 0x43, 0x7c, 0xcc, 0x16, 0xf1, 0x81, 0x43, 0xc5, 0x48, 0x4f, 0xc1,
0x83, 0x6b, 0xf8, 0xe4, 0x14, 0x1f, 0xd9, 0xb3, 0x4f, 0x16, 0xe1, 0x2b, 0x38, 0xb4, 0x40, 0x8e,
0xd1, 0x31, 0x78, 0x26, 0x8b, 0xf0, 0x19, 0x1f, 0x29, 0x05, 0x87, 0x86, 0xc0, 0x2e, 0x7c, 0xa4,
0xcb, 0xe4, 0x50, 0x3f, 0xa2, 0x53, 0x43, 0x0c, 0x1e, 0x34, 0xba, 0x45, 0x7c, 0xa4, 0xcc, 0x89,
0x62, 0x74, 0x6c, 0x09, 0xb4, 0xe2, 0x4b, 0xf8, 0x88, 0x0e, 0x14, 0x29, 0x04, 0x07, 0x72, 0xc1,
0x83, 0x06, 0x75, 0x6e, 0x54, 0xe3, 0x4b, 0x74, 0x24, 0xc7, 0x92, 0x46, 0xfc, 0xa0, 0xc6, 0x95,
0x0a, 0x65, 0x4a, 0xd1, 0x23, 0x3c, 0x8c, 0xc8, 0x02, 0x21, 0xfe, 0x50, 0xdc, 0x86, 0xc6, 0x28,
0xb3, 0x71, 0x54, 0x41, 0x09, 0xe2, 0xd9, 0x89, 0x63, 0xcb, 0xa6, 0x57, 0xf0, 0x6a, 0x8d, 0x79,
0x8a, 0x7d, 0xf0, 0x10, 0x1b, 0x3c, 0x44, 0xb3, 0x16, 0x95, 0x07, 0xf3, 0x54, 0x78, 0x16, 0xc3,
0x7a, 0x0e, 0x88, 0x64, 0xc9, 0x42, 0x7a, 0x13, 0xdc, 0x04, 0xec, 0xc4, 0xb2, 0x61, 0x13, 0x1c,
0x58, 0x05, 0x87, 0x57, 0xc1, 0xbc, 0x0c, 0xb0, 0x8f, 0x17, 0xd1, 0x21, 0x3c, 0xb2, 0x0c, 0x5e,
0xcc, 0x5e, 0x07, 0x3b, 0x76, 0xc1, 0x21, 0x3c, 0x84, 0x8f, 0xe0, 0x41, 0x82, 0x39, 0x73, 0x62,
0xc1, 0x8f, 0x15, 0xa9, 0xe8, 0xcc, 0x8c, 0x28, 0xd3, 0xf0, 0x10, 0x5d, 0x48, 0xb2, 0x08, 0x1f,
0xd1, 0x81, 0x28, 0x13, 0x76, 0x64, 0xd9, 0x9c, 0x0a, 0xd2, 0xc9, 0x82, 0x65, 0x70, 0x20, 0x4e,
0x8c, 0x69, 0xf0, 0x8c, 0x4f, 0xa4, 0xd2, 0x65, 0x7c, 0x0a, 0x9e, 0x64, 0x1f, 0x06, 0xeb, 0xf0,
0x40, 0x92, 0x24, 0x09, 0x16, 0xe1, 0x21, 0x3e, 0x30, 0x21, 0x12, 0x7c, 0xd2, 0x0d, 0x51, 0xa2,
0x44, 0x88, 0x84, 0x07, 0x36, 0xe1, 0x81, 0x54, 0x78, 0x20, 0x41, 0x9c, 0x78, 0xba, 0x24, 0x42,
0x38, 0xba, 0x24, 0x8b, 0xe8, 0x48, 0x2c, 0x3c, 0x12, 0x26, 0x4b, 0x86, 0x34, 0xe9, 0xf0, 0x10,
0x3e, 0xc2, 0x43, 0x70, 0x08, 0x5e, 0x47, 0xf2, 0xac, 0x0e, 0x89, 0xaa, 0x91, 0x2c, 0x96, 0xe2,
0x5e, 0xbc, 0xca, 0xe3, 0xa2, 0x6e, 0x9e, 0xa9, 0x3b, 0x31, 0x0d, 0xae, 0x02, 0xf9, 0xae, 0x10,
0x1e, 0xd8, 0x9c, 0xa9, 0x27, 0x45, 0x21, 0x3a, 0x92, 0x63, 0x9b, 0x2c, 0x82, 0xe7, 0x5e, 0xd8,
0x1a, 0x7b, 0x23, 0x3c, 0x46, 0x47, 0x32, 0x4c, 0xf7, 0x44, 0x74, 0xe4, 0x18, 0x1e, 0x82, 0x07,
0x39, 0xb2, 0xe1, 0x81, 0x4d, 0x85, 0x60, 0x4c, 0xf8, 0x2c, 0x06, 0xcf, 0x21, 0x19, 0x3c, 0x58,
0x13, 0x61, 0x42, 0x98, 0x11, 0x21, 0x86, 0x04, 0x8f, 0x42, 0xba, 0x08, 0x1f, 0x5d, 0x81, 0x34,
0x93, 0xf0, 0xc0, 0x88, 0x20, 0x43, 0x02, 0x0c, 0xe8, 0x93, 0xeb, 0x13, 0xe1, 0x91, 0x74, 0x8d,
0x08, 0x4f, 0x04, 0xe8, 0xf3, 0xa7, 0x47, 0x8f, 0x2f, 0x99, 0xaa, 0x19, 0x1e, 0x08, 0x45, 0x87,
0xf0, 0x48, 0x9f, 0x1e, 0x5d, 0xba, 0x74, 0xe8, 0xd0, 0x26, 0x45, 0x38, 0x3e, 0x10, 0x24, 0x48,
0x20, 0x7c, 0x84, 0x87, 0xe0, 0x49, 0x9b, 0x36, 0x2d, 0xc6, 0xe1, 0x21, 0x78, 0xd2, 0x0f, 0x0f,
0xe1, 0x23, 0x3c, 0x06, 0x8f, 0x74, 0x49, 0x90, 0x41, 0x78, 0x88, 0xae, 0xb4, 0x70, 0x11, 0x26,
0x14, 0xdd, 0xe3, 0x05, 0x6e, 0x5a, 0xb4, 0xa2, 0x3b, 0x5e, 0x3a, 0x78, 0xe2, 0x23, 0xce, 0xb3,
0xb9, 0x2e, 0xf6, 0xd1, 0xd9, 0xd8, 0x06, 0xf9, 0x80, 0xd0, 0x3e, 0x67, 0x36, 0x1d, 0xab, 0x46,
0xf0, 0x24, 0x75, 0x35, 0x48, 0x1c, 0xc3, 0x65, 0x9d, 0x2e, 0xf6, 0x21, 0xab, 0xe8, 0xb8, 0x0e,
0x96, 0x75, 0xb2, 0x08, 0x1e, 0xe1, 0x61, 0x59, 0x30, 0x3f, 0x06, 0xc1, 0x77, 0x1f, 0x3d, 0x85,
0x75, 0x79, 0x35, 0x92, 0x45, 0x3e, 0xdc, 0x06, 0xac, 0x8f, 0x11, 0xb1, 0xf0, 0x1c, 0xbc, 0xef,
0x66, 0x78, 0x0c, 0xde, 0x88, 0x08, 0x21, 0x4c, 0x17, 0x57, 0xfb, 0x18, 0xb5, 0x85, 0xaa, 0x79,
0xb6, 0xee, 0x46, 0x74, 0x42, 0x42, 0x18, 0x31, 0x22, 0x82, 0xe1, 0x23, 0x3a, 0x23, 0x23, 0x86,
0x94, 0x48, 0xf0, 0x20, 0x14, 0x3c, 0x10, 0xd0, 0xa2, 0x59, 0x0c, 0x90, 0x67, 0x8b, 0xaf, 0x10,
0x9e, 0x10, 0x22, 0x24, 0x40, 0x93, 0x26, 0x0d, 0x1a, 0xc4, 0x91, 0x21, 0x0b, 0x4f, 0x88, 0x93,
0x05, 0x42, 0x04, 0x34, 0x71, 0xe2, 0xa0, 0x8e, 0x9d, 0x1a, 0x55, 0xa2, 0x48, 0x90, 0xc4, 0x0b,
0x44, 0xc1, 0x01, 0x01, 0xce, 0xf0, 0x80, 0x1d, 0x1b, 0x36, 0xac, 0x58, 0xa9, 0x60, 0x26, 0x1c,
0x1c, 0x82, 0x07, 0x7e, 0x9a, 0x38, 0xc2, 0x07, 0x36, 0x6a, 0x58, 0xb1, 0x60, 0xc1, 0x8c, 0x09,
0x13, 0x46, 0x04, 0x08, 0xf0, 0xef, 0x83, 0x65, 0xb4, 0xb4, 0x68, 0x45, 0x85, 0x38, 0x41, 0x6c,
0x99, 0x6c, 0xa5, 0x2c, 0x41, 0x23, 0x09, 0x60, 0x0d, 0x5e, 0x5b, 0x93, 0x0e, 0x6e, 0xda, 0xb8,
0xc2, 0x47, 0xf0, 0x8a, 0x4e, 0xf4, 0xe7, 0x41, 0x70, 0x08, 0x1f, 0x38, 0xd2, 0x44, 0xf8, 0xd8,
0x3a, 0x4b, 0x23, 0x3c, 0xa4, 0x85, 0xe0, 0x8d, 0x9f, 0x3e, 0x3e, 0xba, 0x78, 0xa2, 0x47, 0x72,
0xc0, 0x11, 0x3f, 0xf2, 0x40, 0x74, 0xc4, 0x47, 0x0f, 0x6f, 0x78, 0xc0, 0x1d, 0x3e, 0xa2, 0x63,
0xf0, 0x40, 0x40, 0x00, 0x7f, 0x70, 0x08, 0x1f, 0x47, 0x22, 0x78, 0x17, 0x0e, 0x04, 0xf4, 0xf1,
0x47, 0x47, 0x3c, 0xe1, 0xb1, 0x0e, 0xc4, 0x47, 0x28, 0xe1, 0x11, 0x5f, 0x74, 0x08, 0x5e, 0x55,
0x00, 0x3b, 0xb4, 0xf0, 0x19, 0x1e, 0x82, 0x27, 0xee, 0xf8, 0x0a, 0x15, 0x0b, 0xfe, 0xf8, 0x18,
0x3e, 0x82, 0x43, 0x7c, 0x80, 0x11, 0x1e, 0xa1, 0x04, 0x0f, 0x7c, 0xd1, 0x05, 0x66, 0x74, 0x80,
0x8e, 0x0d, 0x2a, 0x14, 0xcc, 0xd1, 0x05, 0x76, 0xba, 0x84, 0x1e, 0xbe, 0x20, 0x07, 0x0f, 0xbc,
0x78, 0xe1, 0x44, 0x07, 0x58, 0x30, 0xa3, 0x63, 0x72, 0x80, 0x02, 0x39, 0x3a, 0xc0, 0xc5, 0x93,
0x2e, 0x60, 0xe1, 0xc4, 0x09, 0x03, 0x3a, 0xb4, 0xe8, 0x00, 0x19, 0x32, 0xd2, 0xc5, 0x31, 0x2a,
0xf1, 0x85, 0x84, 0x04, 0x00, 0x0d, 0x32, 0x44, 0xb0, 0xc0, 0xa8, 0xce, 0x86, 0xe0, 0x15, 0x13,
0x22, 0x00, 0x36, 0x28, 0xc1, 0x03, 0xc4, 0xe4, 0x0c, 0xdf, 0xb0, 0x83, 0x07, 0xb4, 0xe0, 0x01,
0x0e, 0xc4, 0xe2, 0x98, 0x0d, 0x18, 0xf0, 0xa7, 0xc4, 0xe8, 0x19, 0x3c, 0x41, 0x86, 0x4f, 0x8c,
0x18, 0xc0, 0xa3, 0xc5, 0x03, 0x1b, 0x66, 0xf2, 0x88, 0x1f, 0xe0, 0x82, 0x27, 0xa4, 0xe0, 0x01,
0x0e, 0x2d, 0x18, 0x50, 0x38, 0xa1, 0x43, 0x0d, 0x3e, 0x98, 0x20, 0xa2, 0x0f, 0x5e, 0x20, 0x81,
0x07, 0x6f, 0xcc, 0xe1, 0x11, 0x3c, 0x3a, 0xb0, 0xe1, 0x23, 0x78, 0x00, 0x0d, 0x5f, 0xc1, 0x13,
0x02, 0xf8, 0xf0, 0x01, 0x1a, 0x14, 0x08, 0xe0, 0x40, 0x01, 0x03, 0x8c, 0x1f, 0x90, 0xa3, 0x03,
0x84, 0xe8, 0x01, 0x26, 0xf8, 0x00, 0x80, 0x0b, 0x32, 0x78, 0x81, 0x8f, 0x0e, 0xc1, 0x13, 0x58,
0xf8, 0x08, 0x1e, 0x30, 0x21, 0xc7, 0x0f, 0x08, 0xe0, 0x82, 0x27, 0x48, 0x10, 0xc0, 0x80, 0x00,
0x0a, 0x1e, 0x30, 0x20, 0x41, 0x8c, 0x8f, 0xc9, 0x29, 0x78, 0xc3, 0x09, 0xbe, 0xd1, 0x21, 0x3d,
0x84, 0x4f, 0xf8, 0x70, 0xa0, 0x87, 0xef, 0xe4, 0x0a, 0x10, 0x3e, 0x6c, 0x68, 0xc1, 0x33, 0x3e,
0x65, 0x17, 0x78, 0xb0, 0xa1, 0xf8, 0x27, 0x44, 0x8f, 0x0e, 0x4d, 0xee, 0xdc, 0xa8, 0x70, 0xa2,
0xc8, 0x81, 0x3c, 0x5b, 0x32, 0xa4, 0x59, 0xf9, 0x27, 0x4c, 0x9f, 0x0f, 0x4d, 0xea, 0xd4, 0xb8,
0x50, 0xe2, 0x48, 0x81, 0x1d, 0x59, 0x36, 0xa4, 0x49, 0xf9, 0x27, 0x42, 0x9f, 0x0e, 0xaf, 0xe0,
0x41, 0x85, 0x12, 0xc5, 0xe0, 0x49, 0x86, 0x75, 0xf0, 0x20, 0x4a, 0x80, 0x0e, 0x2d, 0x1a, 0xd1,
0x8b, 0x02, 0xb9, 0xe8, 0x4d, 0x9c, 0x00, 0xdd, 0xe0, 0x41, 0x2d, 0x7c, 0x91, 0x23, 0x1b, 0x3f,
0xc2, 0x87, 0x7f, 0x82, 0xc1, 0x9b, 0x72, 0xf4, 0x08, 0xbe, 0x88, 0xe8, 0xd1, 0xa6, 0x11, 0x3e,
0x82, 0x7f, 0x0a, 0xc0, 0x87, 0x9b, 0x26, 0x36, 0x2a, 0xc1, 0xdf, 0x3f, 0x36, 0xfa, 0x78, 0x68,
0x62, 0xa7, 0x8a, 0x99, 0x22, 0x06, 0x72, 0x68, 0xc9, 0xa0, 0x8e, 0x9f, 0xfe, 0x11, 0xe2, 0xc1,
0x49, 0x1d, 0x2b, 0x65, 0x8c, 0x14, 0xd0, 0x91, 0x45, 0x43, 0x1a, 0xa5, 0xff, 0x00, 0x80, 0x09,
0x2f, 0x2e, 0xec, 0x58, 0x31, 0x63, 0x0a, 0xfe, 0xd8, 0xd0, 0xe1, 0xc6, 0x41, 0x0d, 0x13, 0x26,
0x0c, 0xe4, 0xd1, 0xa2, 0x41, 0x4d, 0x32, 0x7c, 0xfa, 0xc7, 0x80, 0x06, 0x05, 0x36, 0x2c, 0xc1,
0x03, 0x7d, 0xf0, 0x8c, 0x5e, 0xfe, 0x21, 0xa1, 0x45, 0x89, 0x2c, 0xf8, 0xa2, 0x0a, 0x5f, 0xfe,
0xc1, 0xa1, 0x42, 0x8e, 0x14, 0x33, 0x46, 0xf4, 0xe8, 0xa2, 0x47, 0xf0, 0x81, 0x08, 0x1a, 0x05,
0x50, 0xc4, 0x00, 0x83, 0x37, 0x49, 0x16, 0xc4, 0xb9, 0x51, 0xe3, 0xca, 0x85, 0x33, 0xa5, 0x01,
0xc4, 0xbe, 0x26, 0xb0, 0x24, 0x41, 0x9c, 0x18, 0x51, 0xaa, 0xe5, 0xa1, 0x7b, 0x34, 0x00, 0xf2,
0xe4, 0x82, 0x47, 0xf8, 0x64, 0x46, 0x94, 0x09, 0x11, 0xc2, 0xe1, 0x91, 0x42, 0xf0, 0x20, 0x4b,
0x96, 0x64, 0xf8, 0x0a, 0x0e, 0x84, 0x09, 0x11, 0x0c, 0x0e, 0xc1, 0x3f, 0x78, 0x10, 0x0a, 0x1e,
0x04, 0xe8, 0x07, 0x4f, 0x32, 0xe1, 0x37, 0x78, 0xd3, 0xa3, 0x47, 0x37, 0xf8, 0x13, 0x24, 0x18,
0x3e, 0x82, 0x03, 0x5d, 0x3c, 0xe1, 0x17, 0x51, 0x70, 0x40, 0x40, 0x1f, 0x1f, 0x5d, 0xbc, 0x74,
0x48, 0x20, 0x27, 0x86, 0x94, 0x28, 0x92, 0xe4, 0x80, 0x90, 0x00, 0xfe, 0xe0, 0x89, 0x07, 0x4f,
0x7a, 0x40, 0x16, 0x1c, 0x88, 0x20, 0x0e, 0x9f, 0xc1, 0x9b, 0x0e, 0x0a, 0xe2, 0xc1, 0x93, 0x30,
0x61, 0x44, 0x08, 0x11, 0xe0, 0xc7, 0x17, 0x3d, 0xf0, 0xe0, 0x46, 0x81, 0x1c, 0x19, 0x52, 0x24,
0xe1, 0x21, 0x7c, 0xc4, 0x47, 0xbc, 0x78, 0x83, 0x57, 0xfc, 0x08, 0x9e, 0x08, 0xc3, 0x57, 0xf0,
0x09, 0xdf, 0xc1, 0x21, 0x7a, 0x86, 0x87, 0xe8, 0x1f, 0x7c, 0x71, 0xc7, 0xbf, 0xe8, 0x98, 0x3c,
0xe2, 0x23, 0x6c, 0x36, 0x2f, 0x93, 0x54, 0x2f, 0xc8, 0x0d, 0xbd, 0x91, 0x68, 0xeb, 0x24, 0xf3,
0x30, 0x49, 0x55, 0x82, 0x4e, 0x39, 0x18, 0x88, 0x04, 0x2f, 0xd2, 0xa4, 0x83, 0x43, 0x2d, 0x0c,
0xcf, 0xa5, 0x83, 0x50, 0x78, 0x0b, 0x5e, 0xb5, 0xa1, 0x74, 0x44, 0xf7, 0xca, 0x10, 0x1d, 0x10,
0x37, 0x8e, 0xe0, 0x49, 0x12, 0x65, 0x2b, 0xa8, 0x95, 0x8d, 0x21, 0x7c, 0x20, 0x22, 0x44, 0xfb,
0x25, 0x04, 0x5f, 0xa4, 0xf1, 0xa2, 0x31, 0xd2, 0xc6, 0x45, 0x0b, 0x27, 0x89, 0x56, 0x58, 0x2b,
0x6b, 0x43, 0x67, 0x0c, 0x5e, 0x34, 0x70, 0xb4, 0x82, 0x5a, 0x41, 0xa4, 0x35, 0x21, 0xc4, 0x8d,
0x0b, 0x27, 0x4e, 0x1c, 0xd4, 0xb1, 0x63, 0xa3, 0xda, 0x29, 0xc3, 0x43, 0x6b, 0xc0, 0x1d, 0x1d,
0x82, 0x47, 0x70, 0xc0, 0x86, 0x15, 0x0b, 0x16, 0xcc, 0xc1, 0x0b, 0x57, 0xf8, 0xc0, 0x81, 0x23,
0xf8, 0x62, 0xc2, 0xd4, 0x18, 0x82, 0x17, 0xf6, 0xe0, 0x81, 0x35, 0x7c, 0x60, 0xc6, 0x8c, 0x09,
0x22, 0x46, 0x08, 0xf1, 0x29, 0x78, 0x43, 0xc1, 0x0c, 0x19, 0x13, 0xc6, 0xe0, 0x85, 0x03, 0x46,
0x78, 0x80, 0x16, 0x9f, 0x20, 0x85, 0x0f, 0x0c, 0xe1, 0x03, 0x66, 0x7c, 0x0c, 0x0e, 0x50, 0xa1,
0x40, 0x0e, 0x0f, 0x10, 0x21, 0x62, 0x00, 0x7f, 0x85, 0xce, 0x04, 0xfd, 0xb3, 0x44, 0x27, 0x6f,
0x64, 0x83, 0xc7, 0x71, 0x24, 0xd6, 0xe2, 0x59, 0xc2, 0x5d, 0x36, 0x8a, 0xc6, 0x16, 0xb8, 0x12,
0x47, 0x82, 0x1e, 0xde, 0x3b, 0x11, 0x9e, 0x69, 0x86, 0x0f, 0x04, 0xe1, 0x65, 0x2d, 0x44, 0x87,
0xa2, 0x59, 0x21, 0xee, 0x10, 0xbe, 0xa5, 0x10, 0x1e, 0xea, 0x72, 0xbc, 0xc4, 0xbf, 0x26, 0xde,
0xc0, 0x93, 0x08, 0x4f, 0x75, 0xa1, 0x42, 0x84, 0x0f, 0x7a, 0xe1, 0x61, 0x2b, 0x46, 0x67, 0x1c,
0x7b, 0x38, 0x3a, 0xc6, 0x27, 0x9c, 0x45, 0x03, 0x7a, 0xb2, 0x88, 0x8e, 0x77, 0x28, 0xbc, 0x04,
0xaf, 0xcf, 0x71, 0x07, 0x61, 0xe3, 0x86, 0x15, 0x1e, 0xeb, 0xc2, 0x63, 0xc0, 0x0f, 0x0f, 0x2f,
0xdc, 0x64, 0x15, 0xbc, 0xa0, 0x63, 0x47, 0x00, 0x3f, 0x3c, 0x86, 0x0f, 0xd8, 0xb0, 0x61, 0xe1,
0x8a, 0x17, 0x30, 0xa0, 0x43, 0xc3, 0x10, 0x1e, 0xf0, 0xc1, 0x85, 0x83, 0x07, 0x36, 0x2e, 0x58,
0x30, 0x61, 0x06, 0x07, 0xec, 0xd0, 0xd0, 0x83, 0x47, 0x07, 0x36, 0x3a, 0xc0, 0x8d, 0x17, 0xe1,
0x25, 0x78, 0x80, 0x0b, 0x1e, 0x60, 0xd1, 0x80, 0x8e, 0x0e, 0xe1, 0x29, 0x3a, 0x40, 0x03, 0x0f,
0x0e, 0x1c, 0x5a, 0x30, 0x60, 0x40, 0x83, 0x02, 0x05, 0x12, 0x46, 0x74, 0x08, 0x1e, 0x50, 0xf7,
0x06, 0x76, 0xea, 0xeb, 0x60, 0x3c, 0x2d, 0x0b, 0x8c, 0x18, 0x92, 0x05, 0x0e, 0x1a, 0xeb, 0x68,
0x59, 0xcf, 0x8b, 0xf1, 0x80, 0x7e, 0x6b, 0x6c, 0xf3, 0x69, 0x81, 0x01, 0x3d, 0xb8, 0xe0, 0xb5,
0x8d, 0x21, 0x85, 0xa7, 0x6c, 0x70, 0x74, 0xb6, 0xc1, 0x3e, 0x5c, 0x96, 0xe1, 0x63, 0x6f, 0x42,
0x4d, 0x96, 0xeb, 0x20, 0x7c, 0x40, 0x88, 0x0f, 0xf9, 0x20, 0x5e, 0x41, 0xc5, 0x02, 0x19, 0x73,
0x70, 0x80, 0x08, 0x01, 0x7c, 0x78, 0x00, 0x5b, 0x21, 0xb0, 0x05, 0x87, 0xe8, 0x00, 0x29, 0xbc,
0x80, 0x0b, 0x9e, 0x58, 0xc3, 0xe3, 0xd1, 0x0a, 0x0f, 0x65, 0x03, 0x2c, 0x58, 0x68, 0xe1, 0x01,
0x4a, 0x78, 0x3a, 0x1b, 0xc1, 0xa3, 0x2a, 0x80, 0x05, 0x03, 0x2d, 0x59, 0x5c, 0xc5, 0xe8, 0x10,
0x2f, 0x82, 0x4f, 0x78, 0x4c, 0x16, 0x90, 0x21, 0x85, 0xa7, 0xe8, 0xd8, 0x24, 0xa0, 0x3e, 0x89,
0xf0, 0x11, 0xde, 0xdb, 0x40, 0xf0, 0x7c, 0x13, 0xe1, 0x2d, 0x3e, 0x80, 0x0e, 0xef, 0x7d, 0x30,
0x38, 0x06, 0xcf, 0xf0, 0x9e, 0x0d, 0x06, 0xe7, 0x3a, 0xc0, 0x0b, 0x67, 0x6b, 0x1e, 0xc9, 0x32,
0x11, 0x35, 0xd2, 0xc0, 0xb4, 0x08, 0x1e, 0xf3, 0x68, 0x2d, 0xe6, 0x85, 0x34, 0x19, 0x3c, 0xd0,
0x80, 0x41, 0xbd, 0xb6, 0x83, 0x63, 0xf0, 0x04, 0x3b, 0x2f, 0x40, 0x83, 0x46, 0x05, 0x12, 0x04,
0xf4, 0xb9, 0x19, 0x1c, 0x21, 0xa6, 0x8c, 0x75, 0xb0, 0x0c, 0x41, 0x00, 0x07, 0x16, 0x9d, 0x83,
0x67, 0x78, 0x58, 0x1b, 0x20, 0x82, 0x27, 0x50, 0x20, 0x80, 0x2b, 0x67, 0xce, 0x0c, 0xcf, 0xe1,
0x23, 0x78, 0x02, 0x02, 0x08, 0x60, 0x6f, 0x81, 0x8c, 0x0f, 0xc1, 0x31, 0xf8, 0x46, 0xf7, 0xe8,
0x00, 0x28, 0x7c, 0x9d, 0x85, 0xf0, 0x0c, 0x2c, 0xbc, 0xc0, 0x0f, 0xef, 0xe1, 0x01, 0x70, 0x78,
0x0c, 0x1e, 0xd9, 0x24, 0xbc, 0xc1, 0x8b, 0x8e, 0xd9, 0x24, 0x3e, 0xa6, 0x0b, 0xf8, 0xf0, 0xb2,
0x79, 0xb4, 0x86, 0x07, 0xb7, 0x68, 0x64, 0x63, 0x20, 0xe1, 0x35, 0x78, 0x96, 0x85, 0xa2, 0x17,
0x2d, 0xe0, 0xc2, 0x39, 0x95, 0x87, 0x60, 0x70, 0x44, 0x82, 0x14, 0x01, 0x18, 0x00, 0x3c, 0x58,
0xfe, 0x83, 0x77, 0x2a, 0x8c, 0x18, 0x40, 0x00, 0x01, 0x80, 0x0b, 0x33, 0x78, 0x4f, 0xc6, 0x58,
0x50, 0x3c, 0x00, 0xc1, 0x87, 0x03, 0xc3, 0xff, 0xa1, 0x6c, 0x89, 0x29, 0x13, 0x28, 0x60, 0x80,
0xc1, 0x03, 0x7a, 0xf0, 0xe9, 0x81, 0xf1, 0x11, 0x20, 0x3c, 0xd8, 0x50, 0x83, 0x57, 0x74, 0x04,
0x19, 0x5f, 0x92, 0x83, 0xff, 0x4b, 0x94, 0x1c, 0xe2, 0x63, 0x74, 0x8a, 0x0f, 0xfe, 0x73, 0x26,
0x98, 0xe8, 0x1e, 0x1f, 0x82, 0x47, 0x41, 0x80, 0x0d, 0x2b, 0xba, 0xe4, 0x0b, 0x28, 0xfe, 0xfd,
0xd7, 0x88, 0xe3, 0x00, 0x73, 0x1f, 0x40, 0xad, 0x0f, 0xf0, 0xf3, 0x65, 0xf0, 0x0a, 0x0f, 0xc1,
0x63, 0x6d, 0x40, 0x86, 0x08, 0x0e, 0x76, 0x74, 0xf4, 0x1f, 0x9d, 0xce, 0x26, 0x14, 0x48, 0x10,
0xc0, 0x82, 0x02, 0x12, 0x1e, 0x82, 0xe7, 0x39, 0x80, 0x11, 0x9e, 0xc0, 0x83, 0x01, 0x11, 0x1c,
0xfd, 0xc7, 0x8b, 0xe0, 0x71, 0x16, 0xc2, 0x23, 0x38, 0xd0, 0xc0, 0x82, 0x4f, 0xb2, 0x3a, 0x02,
0xe0, 0xc1, 0x82, 0x0c, 0x4e, 0xfe, 0x93, 0x65, 0x78, 0x4c, 0x96, 0xa0, 0x81, 0x07, 0xef, 0x40,
0x12, 0x0e, 0x90, 0x01, 0x41, 0x08, 0x00, 0xdd, 0x97, 0x00, 0x15, 0x7c, 0xc0, 0x83, 0x02, 0x8e,
0x04, 0x10, 0x02, 0x78, 0x78, 0xbf, 0x44, 0x24, 0x4d, 0x07, 0xdd, 0x03, 0x00, 0x7c, 0xbc, 0xf1,
0x22, 0xf8, 0x82, 0x07, 0x09, 0xac, 0x05, 0x16, 0x03, 0x5c, 0x89, 0x0c, 0x0c, 0xf0, 0xe9, 0x09,
0x0f, 0x4e, 0x8f, 0x0c, 0x31, 0x10, 0x40, 0x02, 0x9d, 0x1f, 0xc1, 0x03, 0x76, 0x26, 0x8f, 0x00,
0x31, 0x28, 0xf8, 0x87, 0x8e, 0x08, 0xd8, 0x11, 0x82, 0x7f, 0xf0, 0x00, 0x0b, 0xfc, 0x00, 0xc2,
0x29, 0xe5, 0x41, 0x00, 0x54, 0x82, 0x88, 0x00, 0xc1, 0x3f, 0x08, 0x82, 0x88, 0x00, 0x70, 0x83,
0x7f, 0x10, 0x02, 0x76, 0x12, 0x82, 0x7f, 0x10, 0x02, 0x03, 0x04, 0x40, 0xf0, 0x0f, 0xc2, 0x20,
0x01, 0x05, 0xff, 0x20, 0xd2, 0xcb, 0x43, 0x1f, 0x0a, 0xe0, 0xc8, 0x80, 0x22, 0x01, 0x8c, 0x08,
0x20, 0x02, 0xf8, 0xf8, 0xf6, 0x02, 0x1e, 0xd8, 0xb8, 0x50, 0x06, 0x2f, 0xc4, 0x80, 0x86, 0x01,
0xfe, 0x7e, 0x81, 0x17, 0x0e, 0xee, 0xb3, 0x80, 0x1c, 0x18, 0x52, 0x20, 0xe1, 0x3b, 0x3c, 0x04,
0xaf, 0x65, 0xf1, 0x25, 0x80, 0x84, 0x0f, 0x80, 0xc3, 0x00, 0x5f, 0xbf, 0xd8, 0x46, 0x38, 0xf6,
0x41, 0xf8, 0x8b, 0x0f, 0x57, 0x0b, 0x3a, 0x54, 0x28, 0x90, 0x01, 0x85, 0xcf, 0x27, 0x05, 0xeb,
0x1c, 0x06, 0x2f, 0x48, 0x10, 0xa3, 0x47, 0xf0, 0x81, 0x75, 0x8f, 0x8e, 0x03, 0x44, 0x08, 0xe0,
0x83, 0x37, 0xcc, 0x6b, 0x1d, 0xbc, 0xc1, 0x81, 0x4d, 0x4e, 0xb0, 0x61, 0x9e, 0x07, 0xa8, 0xc1,
0x17, 0x0c, 0xe8, 0x70, 0x11, 0x3c, 0xde, 0x55, 0xfc, 0x88, 0x1e, 0xe1, 0x23, 0x78, 0x80, 0x02,
0xb9, 0x21, 0x12, 0x40, 0x06, 0x08, 0xfe, 0x20, 0xe1, 0xc6, 0xc0, 0x1c, 0x98, 0x3c, 0xc3, 0x0f,
0xfc, 0x08, 0x08, 0xad, 0x00, 0x04, 0x7f, 0x80, 0x11, 0x20, 0x01, 0xc7, 0x1f, 0x90, 0xbb, 0x20,
0x02, 0x64, 0x88, 0x04, 0x04, 0x3e, 0x7a, 0x26, 0x07, 0x10, 0xb8, 0x5a, 0x00, 0x74, 0xec, 0xd0,
0xb0, 0x42, 0xc5, 0x82, 0x39, 0x17, 0x60, 0x8c, 0x95, 0x30, 0x71, 0xc2, 0xc0, 0x5e, 0x20, 0xb0,
0x42, 0x81, 0x82, 0x19, 0x52, 0x26, 0xc0, 0x10, 0x2b, 0x70, 0xc2, 0xc4, 0x01, 0x1d, 0x5b, 0x47,
0x48, 0x11, 0x25, 0x33, 0x3c, 0x82, 0x8f, 0x0e, 0x0d, 0x10, 0x6a, 0x8e, 0x0c, 0x3e, 0xe0, 0xe2,
0x63, 0x0d, 0x8c, 0x0e, 0xc1, 0xa1, 0x64, 0x66, 0xc2, 0xe0, 0x1f, 0x1c, 0xa2, 0x53, 0xf8, 0x82,
0x16, 0x5f, 0x21, 0x84, 0xc7, 0xe0, 0x1d, 0x9f, 0xd2, 0x65, 0xf0, 0x02, 0x0b, 0x23, 0x39, 0xc5,
0x27, 0x88, 0xd1, 0x39, 0x78, 0x40, 0x4f, 0x4e, 0x90, 0x07, 0x54, 0x74, 0x02, 0x0b, 0x22, 0x38,
0xc4, 0xa7, 0xe8, 0x04, 0xbe, 0x26, 0x06, 0x0f, 0xe0, 0xc0, 0xe2, 0x73, 0x74, 0x02, 0xd7, 0x10,
0x41, 0x04, 0x0f, 0xa0, 0x40, 0x80, 0x44, 0x57, 0xb0, 0x60, 0xc1, 0x04, 0x6f, 0xc0, 0x80, 0x01,
0x25, 0x1b, 0x30, 0xc1, 0xf7, 0x78, 0x9c, 0xc0, 0xe8, 0x04, 0x3a, 0x3a, 0xdc, 0xcf, 0xf0, 0x10,
0x1c, 0x4e, 0xf0, 0x8a, 0x40, 0x9f, 0x30, 0x62, 0x01, 0x68, 0xd0, 0x43, 0x02, 0x24, 0x88, 0xb8,
0x50, 0x25, 0x23, 0xd1, 0xe6, 0x0c, 0x5e, 0xc0, 0xd3, 0x22, 0xd0, 0xf0, 0x3a, 0x25, 0xd3, 0x64,
0x5c, 0x8c, 0xee, 0xc1, 0x21, 0x3c, 0x01, 0x29, 0x88, 0xd1, 0x39, 0x5e, 0x02, 0x0b, 0x8f, 0x40,
0x0a, 0x62, 0xb2, 0x89, 0xd7, 0x40, 0x00, 0xa7, 0x83, 0xf0, 0x1e, 0x9e, 0x82, 0x67, 0x78, 0x07,
0x5a, 0x07, 0xaa, 0x40, 0x85, 0xc8, 0x1b, 0xe9, 0x3c, 0x3a, 0x00, 0x8a, 0x16, 0x45, 0x3b, 0xde,
0x56, 0x81, 0x78, 0x1f, 0xaf, 0x1b, 0x47, 0xf0, 0x7c, 0x04, 0x79, 0x37, 0x5c, 0x04, 0x8f, 0x64,
0x95, 0x77, 0x7b, 0x25, 0x40, 0x80, 0xf1, 0x7e, 0x14, 0x84, 0x27, 0x00, 0xc1, 0x33, 0x3c, 0x01,
0xcf, 0x5a, 0xd1, 0x02, 0x00, 0x80, 0x36, 0x16, 0x9e, 0xa2, 0xc5, 0x20, 0xb8, 0xf3, 0x7d, 0x08,
0x6c, 0xb4, 0xf8, 0xe2, 0x5d, 0x18, 0x14, 0xa8, 0x92, 0xf8, 0x46, 0xba, 0x60, 0xd6, 0xca, 0xc4,
0x00, 0x8e, 0x72, 0x59, 0xce, 0xc4, 0x4b, 0x13, 0xde, 0xa2, 0x01, 0xb1, 0x16, 0xb7, 0x22, 0x7c,
0x78, 0x70, 0xe1, 0xc0, 0x81, 0x1d, 0x2f, 0x56, 0x01, 0xa0, 0x5c, 0x14, 0x1c, 0x83, 0x07, 0x6c,
0xd8, 0xb0, 0x60, 0x7e, 0x8b, 0x23, 0x1d, 0x5e, 0x82, 0x43, 0xf0, 0x80, 0x1e, 0xde, 0xc3, 0x45,
0x78, 0xfc, 0x07, 0x25, 0x0b, 0x5e, 0xbc, 0x8c, 0x36, 0xff, 0x20, 0x99, 0x47, 0x6b, 0x68, 0x50,
0x1b, 0x44, 0x32, 0x81, 0x15, 0xad, 0x83, 0x67, 0x70, 0xc8, 0xda, 0x69, 0x2b, 0x5a, 0x40, 0x85,
0x02, 0x3f, 0xed, 0xc3, 0x08, 0x4e, 0xc1, 0x23, 0x5c, 0xe4, 0xc5, 0x68, 0xfd, 0x2e, 0xdb, 0x45,
0xda, 0xcf, 0x0a, 0xf1, 0x20, 0x38, 0x40, 0x5a, 0x46, 0x6b, 0x61, 0x5c, 0x16, 0xc1, 0xb8, 0x54,
0x23, 0xf6, 0x52, 0xaf, 0xcc, 0x83, 0x85, 0x69, 0x1e, 0x85, 0x8b, 0xe0, 0x0f, 0x7b, 0x2f, 0x7c,
0xa6, 0x4e, 0xd9, 0x33, 0xd3, 0x50, 0xf0, 0x0c, 0x0f, 0x40, 0x83, 0x5f, 0xa1, 0x00, 0x1e, 0xde,
0xe3, 0x15, 0x2c, 0x18, 0xc1, 0x23, 0x6d, 0xa5, 0xe3, 0x11, 0x50, 0x09, 0x73, 0x41, 0xc5, 0x88,
0xf7, 0xfd, 0xb3, 0x10, 0x43, 0x84, 0x00, 0x3e, 0x5a, 0xc3, 0xac, 0x49, 0x90, 0x21, 0xef, 0x40,
0xf0, 0xdb, 0xe1, 0x68, 0x84, 0x87, 0x68, 0x15, 0x5c, 0xb7, 0x45, 0x59, 0xcc, 0x02, 0x35, 0x31,
0x5a, 0x1e, 0x23, 0x50, 0x79, 0x21, 0x2d, 0x00, 0x0a, 0x97, 0xc1, 0x73, 0x1f, 0xbe, 0x81, 0xac,
0x00, 0x04, 0x10, 0x80, 0x78, 0x1e, 0x2d, 0x5a, 0x03, 0x60, 0x80, 0xf0, 0x92, 0x0e, 0x98, 0x70,
0x01, 0x22, 0x38, 0xc1, 0x87, 0x13, 0x4f, 0x93, 0x36, 0xc0, 0xe0, 0x00, 0x1d, 0x76, 0xc1, 0x84,
0x1a, 0x0b, 0x20, 0x80, 0x05, 0xe5, 0x3f, 0x00, 0x57, 0x84, 0x82, 0x91, 0x31, 0x20, 0x82, 0x03,
0x0d, 0x3c, 0xf8, 0x84, 0x17, 0xf0, 0x60, 0x41, 0x06, 0x17, 0xff, 0x15, 0x11, 0x0a, 0x24, 0x08,
0xe1, 0xdd, 0x3f, 0x8c, 0x8a, 0x00, 0x19, 0x62, 0x78, 0x8f, 0x04, 0xf1, 0x32, 0x3c, 0x01, 0x8d,
0xae, 0xfe, 0xc3, 0x33, 0x18, 0x10, 0xc1, 0xcd, 0x7f, 0xbf, 0x08, 0x0f, 0x59, 0x2f, 0x14, 0x25,
0x63, 0x60, 0xe1, 0xdd, 0x7f, 0x32, 0x8c, 0xf6, 0xa1, 0x0a, 0x10, 0x7c, 0xb8, 0x30, 0xc3, 0x7d,
0x10, 0x04, 0x00, 0x17, 0x56, 0x70, 0x0f, 0x42, 0xf0, 0x60, 0x43, 0x0d, 0xfe, 0x41, 0x08, 0x36,
0xb4, 0xe0, 0x1e, 0x84, 0xa1, 0x07, 0xf7, 0x20, 0x1e, 0xc4, 0x83, 0x30, 0x94, 0x04, 0xd1, 0x30,
0x0a, 0x45, 0xc3, 0x58, 0x99, 0x93, 0x32, 0x64, 0x40, 0xce, 0x10, 0xd0, 0x47, 0xc4, 0xe4, 0x08,
0x7e, 0x25, 0x01, 0x0c, 0x4c, 0x68, 0x95, 0x69, 0x13, 0x84, 0xef, 0x58, 0x09, 0x3a, 0x02, 0xac,
0x8e, 0x5e, 0x70, 0x92, 0x92, 0xc9, 0xb4, 0x80, 0x92, 0x00, 0x83, 0x7f, 0x28, 0x00, 0x0d, 0x0c,
0xf0, 0x24, 0x08, 0xfe, 0x91, 0x08, 0x68, 0x93, 0x00, 0xfb, 0x12, 0x86, 0x78, 0x48, 0x00, 0x7a,
0x0e, 0xe0, 0x3c, 0x8c, 0xb6, 0xdf, 0xb6, 0x8f, 0x45, 0x39, 0x0f, 0xc2, 0x70, 0xfa, 0x7e, 0x63,
0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0x1e, 0xc4, 0x83, 0x78, 0x10, 0x0f, 0xa2, 0xc0,
0x81, 0x01, 0x05, 0x02, 0x04, 0x30, 0x20, 0x80, 0x00, 0xe0, 0xc3, 0x83, 0x07, 0x17, 0x0e, 0x6c,
0xd8, 0xc1, 0x2b, 0x38, 0x04, 0x6f, 0xb8, 0xc1, 0x13, 0x56, 0xf0, 0x09, 0x0f, 0xe1, 0x33, 0x3c,
0x05, 0xff, 0xe8, 0x10, 0x9e, 0x61, 0x86, 0xbf, 0xe0, 0x19, 0x2f, 0x61, 0x05, 0xaf, 0x64, 0x1d,
0xbc, 0x83, 0x03, 0x8c, 0xf0, 0x91, 0x6e, 0x93, 0x51, 0xf0, 0x4f, 0x36, 0xc1, 0x11, 0x7a, 0xf8,
0x0e, 0xee, 0x30, 0xa0, 0x43, 0xdf, 0x0a, 0x80, 0x8b, 0x51, 0x74, 0x82, 0x19, 0x1c, 0xa0, 0x9d,
0x6d, 0x00, 0x65, 0x29, 0x5a, 0x41, 0xfb, 0x86, 0x57, 0x07, 0x76, 0x70, 0x81, 0xd2, 0x98, 0xb6,
0xc4, 0x59, 0x8e, 0x0b, 0x50, 0xa1, 0x40, 0x6e, 0xad, 0x57, 0xb2, 0x0d, 0x16, 0x09, 0x88, 0xdd,
0x3f, 0x08, 0xb4, 0x82, 0x34, 0xd8, 0xff, 0x83, 0x28, 0x2c, 0x90, 0x20, 0x40, 0x34, 0xcc, 0x41,
0xd0, 0x4b, 0xe0, 0xc3, 0xcc, 0x85, 0xc0, 0xe2, 0x52, 0xa3, 0x2a, 0x9d, 0xc1, 0x31, 0x75, 0x35,
0xa2, 0x89, 0x5d, 0xb2, 0xa0, 0x66, 0x4e, 0x48, 0x90, 0x20, 0xce, 0xe4, 0x8a, 0x58, 0x0a, 0x72,
0x03, 0xe4, 0xe0, 0x00, 0x01, 0x3c, 0x78, 0x70, 0x60, 0xe1, 0x04, 0xcf, 0x70, 0x11, 0x3c, 0x82,
0x63, 0xf0, 0x08, 0x0e, 0x60, 0x40, 0xc7, 0xc3, 0x68, 0x05, 0x11, 0x42, 0x70, 0x01, 0x0d, 0x2d,
0x5a, 0x85, 0x8b, 0xe0, 0x11, 0x0d, 0xc3, 0x05, 0x68, 0x50, 0xc1, 0x3d, 0x1a, 0x05, 0x07, 0x90,
0xd1, 0x38, 0xdc, 0x36, 0x82, 0x72, 0x90, 0x94, 0x82, 0x7b, 0x95, 0xcc, 0xc2, 0xe0, 0xa2, 0x51,
0x47, 0xac, 0x83, 0xb9, 0x2b, 0xd8, 0x37, 0xca, 0xcc, 0x12, 0x76, 0x6a, 0xd1, 0x9c, 0x4c, 0x95,
0x1d, 0x09, 0xc8, 0x2b, 0x82, 0x0b, 0xa3, 0x86, 0xa6, 0x0c, 0xf8, 0x1b, 0x01, 0x16, 0x0c, 0xa8,
0xe1, 0xf3, 0x76, 0x2c, 0xcd, 0xda, 0x9d, 0x0e, 0x5f, 0x4d, 0xa7, 0x6e, 0xd4, 0xb7, 0x75, 0x6d,
0x67, 0xad, 0x68, 0xb8, 0x67, 0x21, 0x47, 0xcb, 0x46, 0x00, 0xfb, 0x88, 0x05, 0x17, 0xb0, 0xd9,
0x30, 0xa9, 0x15, 0xe5, 0x22, 0x57, 0x79, 0xcb, 0xf8, 0xc7, 0x8e, 0x9b, 0x65, 0x7a, 0x6b, 0x15,
0x47, 0xd8, 0xb9, 0x01, 0x5a, 0x4b, 0xac, 0x4d, 0xf0, 0x4b, 0x67, 0xe6, 0x80, 0x0e, 0x15, 0xf2,
0x19, 0x8a, 0x5a, 0xb9, 0x23, 0x1c, 0xfe, 0x05, 0x70, 0xe1, 0x70, 0x77, 0xc2, 0x8d, 0x13, 0x30,
0xa0, 0x05, 0xcb, 0x57, 0x14, 0x15, 0x83, 0x35, 0x44, 0xb0, 0x2f, 0x29, 0x58, 0x45, 0x49, 0xc8,
0xe0, 0xdf, 0x2f, 0x9c, 0x8e, 0x01, 0x0d, 0xf2, 0x2f, 0x0f, 0xe2, 0x41, 0x7c, 0xfa, 0x6c, 0x0e,
0xe0, 0x40, 0x01, 0x03, 0x84, 0x7f, 0x2f, 0xfc, 0x9f, 0x66, 0x50, 0xa5, 0x22, 0x38, 0x43, 0x8f,
0x0c, 0x6b, 0x3b, 0xb8, 0x42, 0x8b, 0x95, 0x60, 0x6f, 0x41, 0xb8, 0x85, 0x9d, 0xb0, 0x83, 0x43,
0xdc, 0x81, 0x17, 0x5c, 0xfc, 0x83, 0x0e, 0x0e, 0xc0, 0xe2, 0x06, 0x00, 0xb8, 0x30, 0x33, 0x2c,
0xc8, 0x16, 0xb0, 0x07, 0x00, 0xc0, 0xc9, 0xfe, 0xd0, 0x81, 0x42, 0x86, 0x08, 0x0e, 0x54, 0xe1,
0xf7, 0x0f, 0x15, 0x12, 0x04, 0x30, 0xa5, 0x3e, 0x08, 0x86, 0x83, 0x6a, 0x1e, 0xc4, 0x83, 0x78,
0x10, 0x0f, 0xe2, 0x41, 0x3c, 0x88, 0x07, 0xf1, 0x20, 0x1e, 0xc4, 0x83, 0x78, 0x10, 0x0f, 0x02,
};
static PROGMEM prog_uchar bg_pic[] = {
0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07,
0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05,
0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06, 0x07, 0x05, 0x06,
0x07, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04,
0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08,
0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03, 0x04, 0x08, 0x03,
0x04, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x04, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a,
0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09,
0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01, 0x0a, 0x09, 0x01,
0x0a, 0x08, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
0x0b, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
0x06, 0x0c, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
};
static PROGMEM prog_uchar bg_chr[] = {
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x54,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0x55,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54,
0x55, 0x55, 0x55, 0x55, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00,
0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x55, 0x55, 0x55, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00,
0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x50, 0x00, 0x55, 0x55,
0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x00, 0x00,
0x55, 0x54, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
0x50, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static PROGMEM prog_uchar bg_pal[] = {
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00, 0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00, 0x10, 0x42, 0x18, 0x63, 0x00, 0x00, 0x00, 0x00,
0x18, 0x63, 0x10, 0x42, 0x00, 0x00, 0x00, 0x00,
};

View File

@ -0,0 +1,77 @@
#include <SPI.h>
#include <GD.h>
#include "ball.h"
void setup()
{
GD.begin();
// Background image
GD.copy(RAM_PIC, bg_pic, sizeof(bg_pic));
GD.copy(RAM_CHR, bg_chr, sizeof(bg_chr));
GD.copy(RAM_PAL, bg_pal, sizeof(bg_pal));
// Sprite graphics
GD.uncompress(RAM_SPRIMG, ball);
// Palettes 0 and 1 are for the ball itself,
// and palette 2 is the shadow. Set it to
// all gray.
int i;
for (i = 0; i < 256; i++)
GD.wr16(RAM_SPRPAL + (2 * (512 + i)), RGB(64, 64, 64));
// Set color 255 to transparent in all three palettes
GD.wr16(RAM_SPRPAL + 2 * 0xff, TRANSPARENT);
GD.wr16(RAM_SPRPAL + 2 * 0x1ff, TRANSPARENT);
GD.wr16(RAM_SPRPAL + 2 * 0x2ff, TRANSPARENT);
}
#define RADIUS (112 / 2) // radius of the ball, in pixels
#define YBASE (300 - RADIUS)
void loop()
{
int x = 200, y = RADIUS; // ball position
int xv = 2, yv = 0; // ball velocity
int r; // frame counter
for (r = 0; ; r++) {
GD.__wstartspr((r & 1) ? 256 : 0); // write sprites to other frame
draw_ball(x + 15, y + 15, 2); // draw shadow using palette 2
draw_ball(x, y, r & 1); // draw ball using palette 0 or 1
GD.__end();
// paint the new palette
uint16_t palette = RAM_SPRPAL + 512 * (r & 1);
byte li;
for (li = 0; li < 7; li++) {
byte liv = 0x90 + 0x10 * li; // brightness goes 0x90, 0xa0, etc
uint16_t red = RGB(liv, 0, 0);
uint16_t white = RGB(liv, liv, liv);
byte i;
for (i = 0; i < 32; i++) { // palette cycling using 'r'
GD.wr16(palette, ((i + r) & 16) ? red : white);
palette += 2;
}
}
// bounce the ball around
x += xv;
if ((x < RADIUS) || (x > (400 - RADIUS)))
xv = -xv;
y += yv;
if ((yv > 0) && (y > YBASE)) {
y = YBASE - (y - YBASE); // reflect in YBASE
yv = -yv; // reverse Y velocity
}
if (0 == (r & 3))
yv++; // gravity
// swap frames
GD.waitvblank();
GD.wr(SPR_PAGE, (r & 1));
}
}

View File

@ -0,0 +1,60 @@
static PROGMEM prog_uchar Wood32_pic[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
};
static PROGMEM prog_uchar Wood32_chr[] = {
0x55, 0xa5, 0xc0, 0xcc, 0x8a, 0xae, 0x55, 0x02, 0xfe, 0xfb, 0xbe, 0xaf, 0x12, 0x0a, 0x6b, 0xff,
0x55, 0x55, 0xfa, 0xee, 0xbc, 0x2f, 0x66, 0x5e, 0x00, 0x0f, 0xeb, 0xba, 0xea, 0xbe, 0x00, 0x03,
0x00, 0x03, 0xfd, 0xd7, 0xff, 0xf7, 0x0a, 0x6e, 0xf7, 0x55, 0xdf, 0xff, 0xa5, 0xe5, 0xd5, 0xf7,
0x03, 0x00, 0x57, 0xaf, 0xff, 0xdf, 0x5a, 0x3b, 0xaa, 0xaa, 0xe9, 0xf7, 0x9d, 0x10, 0x5a, 0xaa,
0x01, 0x5d, 0x7f, 0xaa, 0x46, 0xfd, 0x4c, 0xe9, 0xeb, 0xba, 0x7a, 0xaa, 0x00, 0x5a, 0xf5, 0xaa,
0x7c, 0x82, 0xff, 0xff, 0x58, 0x59, 0x06, 0x28, 0xfa, 0xff, 0xb0, 0x85, 0xff, 0x12, 0xec, 0xec,
0x80, 0x56, 0x0c, 0xec, 0x56, 0x81, 0x41, 0x55, 0x22, 0x98, 0x56, 0xa2, 0x4a, 0x56, 0xed, 0x80,
0xca, 0x3a, 0x0c, 0xf3, 0xea, 0x9a, 0x9a, 0xa5, 0x0f, 0xdf, 0x65, 0xe6, 0x97, 0xfa, 0x07, 0x7d,
0xde, 0x65, 0x00, 0x3c, 0x2e, 0x95, 0xa1, 0x99, 0x03, 0xc0, 0x0e, 0xfc, 0xac, 0xc3, 0x20, 0xfa,
0x99, 0x24, 0xfd, 0xff, 0xaa, 0xaa, 0x08, 0x98, 0xff, 0xc7, 0x7f, 0xff, 0x58, 0x72, 0xd6, 0xa4,
0x00, 0x4f, 0x86, 0x6a, 0xd1, 0x00, 0x00, 0xff, 0x95, 0x15, 0xa4, 0x15, 0x0d, 0xff, 0x30, 0x01,
0x56, 0xaa, 0xcf, 0x3b, 0x66, 0xa9, 0x65, 0x6a, 0x8f, 0x3c, 0x0e, 0x02, 0x62, 0x94, 0x40, 0xa6,
0x08, 0x2d, 0x55, 0x54, 0x8e, 0xfe, 0xfe, 0xef, 0x2f, 0xff, 0x55, 0x0f, 0xa0, 0xff, 0xa2, 0x28,
0x5f, 0xd7, 0xd5, 0xd1, 0x9f, 0x0c, 0xa5, 0x00, 0x6f, 0x7f, 0x02, 0xfd, 0x13, 0x9b, 0xf5, 0xa8,
0x59, 0x56, 0x03, 0x34, 0xcf, 0xfc, 0x22, 0x98, 0x56, 0xa2, 0x4a, 0xd7, 0x21, 0x80, 0x45, 0xa1,
0x57, 0xd5, 0x25, 0x7f, 0xc8, 0x92, 0x00, 0x20, 0xdf, 0xdd, 0x6c, 0x05, 0x0c, 0x83, 0xfd, 0x7f,
0x55, 0x55, 0xba, 0xaa, 0xf0, 0x00, 0xff, 0xf3, 0x69, 0xaa, 0x55, 0x5a, 0xf0, 0x00, 0xba, 0xaa,
0x55, 0x55, 0xaa, 0x3a, 0xc3, 0xc3, 0xa8, 0xfa, 0x3a, 0x5a, 0xd5, 0x66, 0xc3, 0xc3, 0x80, 0x30,
0xff, 0xff, 0x5d, 0xf5, 0x20, 0x8a, 0x04, 0x03, 0x05, 0x7f, 0x76, 0x0f, 0x20, 0x8a, 0x1d, 0xf5,
0x00, 0x00, 0xcf, 0x0c, 0xaa, 0x66, 0xc9, 0xaa, 0x2a, 0xfc, 0xff, 0xea, 0xaa, 0x66, 0xcb, 0x0c,
0x00, 0x30, 0x0c, 0xff, 0xc0, 0x03, 0x00, 0x33, 0xaa, 0xba, 0x55, 0x55, 0xaa, 0xa5, 0xef, 0xba,
0x6a, 0xaa, 0x6a, 0x55, 0xa9, 0x55, 0x95, 0x55, 0xff, 0x0f, 0x30, 0x30, 0xff, 0x0e, 0x0f, 0x6a,
0x5d, 0xff, 0x55, 0x55, 0x5f, 0xf6, 0x5d, 0xff, 0xa6, 0x5a, 0x00, 0x00, 0x08, 0xa1, 0xaa, 0x95,
0x05, 0x00, 0x50, 0x15, 0x85, 0x00, 0x05, 0x00, 0x9a, 0x59, 0xff, 0xff, 0x9f, 0xaa, 0x6a, 0xa9,
0x0a, 0xa9, 0x4f, 0xc9, 0xff, 0xff, 0x00, 0xaa, 0xfc, 0xa8, 0xff, 0xf0, 0xf2, 0x95, 0xf2, 0x2a,
0xd5, 0x77, 0xff, 0x7f, 0xaa, 0x87, 0xf0, 0x2a, 0x0a, 0x80, 0x00, 0x80, 0xff, 0xff, 0x55, 0x57,
0x67, 0xfa, 0x94, 0x29, 0xd7, 0xfd, 0x09, 0xa0, 0xa9, 0xd6, 0xaa, 0x80, 0x80, 0x80, 0x4a, 0x99,
0xaa, 0xbf, 0x65, 0xd1, 0xaa, 0xbb, 0x04, 0x59, 0x15, 0x5a, 0x05, 0x54, 0x14, 0x08, 0xa9, 0x56,
0xdf, 0xff, 0xf0, 0x30, 0x7f, 0xf3, 0xff, 0xff, 0x55, 0x65, 0x55, 0x95, 0x55, 0x55, 0x57, 0x55,
0x7b, 0xeb, 0x05, 0x45, 0xf5, 0xfa, 0x54, 0x45, 0xbb, 0xdd, 0xaa, 0x53, 0xba, 0xf7, 0xaa, 0x44,
0x08, 0x00, 0xaa, 0x5e, 0x9f, 0x5f, 0xbf, 0xfe, 0xeb, 0x55, 0x9b, 0xef, 0x1c, 0x0a, 0xd5, 0xa7,
0x00, 0xf0, 0x0e, 0xbe, 0xda, 0x9a, 0x39, 0x95, 0xa7, 0xea, 0x9f, 0x57, 0x63, 0xb0, 0x55, 0xa7,
};
static PROGMEM prog_uchar Wood32_pal[] = {
0x32, 0x6f, 0xf0, 0x6e, 0x11, 0x73, 0x32, 0x77, 0x32, 0x77, 0xf0, 0x6a, 0x11, 0x73, 0x32, 0x73,
0x10, 0x6f, 0x32, 0x77, 0x32, 0x73, 0x32, 0x77, 0xf0, 0x6e, 0x32, 0x73, 0x53, 0x77, 0x11, 0x73,
0xef, 0x6a, 0x11, 0x73, 0x32, 0x77, 0x32, 0x73, 0x11, 0x6f, 0xf0, 0x6e, 0x32, 0x73, 0x32, 0x77,
0x52, 0x77, 0x11, 0x73, 0x32, 0x77, 0x33, 0x77, 0x53, 0x77, 0x32, 0x77, 0x11, 0x73, 0x32, 0x77,
0xf0, 0x6e, 0x52, 0x77, 0x32, 0x73, 0x11, 0x73, 0x53, 0x77, 0x32, 0x77, 0x32, 0x77, 0x10, 0x73,
0x32, 0x77, 0x11, 0x73, 0xef, 0x6a, 0x52, 0x77, 0x11, 0x73, 0x52, 0x77, 0x32, 0x77, 0xf0, 0x6e,
0x11, 0x73, 0xef, 0x6a, 0x32, 0x73, 0x32, 0x77, 0x32, 0x77, 0x32, 0x73, 0x33, 0x77, 0x11, 0x73,
0x32, 0x77, 0x11, 0x73, 0x32, 0x77, 0x32, 0x73, 0x53, 0x77, 0x11, 0x73, 0x32, 0x73, 0x32, 0x77,
0xc2, 0x44, 0x44, 0x55, 0x03, 0x4d, 0xe3, 0x48, 0xe2, 0x48, 0x23, 0x51, 0x03, 0x4d, 0xc2, 0x44,
0xe2, 0x48, 0x03, 0x4d, 0xc2, 0x44, 0x24, 0x55, 0x23, 0x55, 0xc2, 0x44, 0xe3, 0x48, 0x03, 0x4d,
0x65, 0x59, 0xc2, 0x44, 0x03, 0x4d, 0x23, 0x51, 0xc2, 0x44, 0x24, 0x55, 0x23, 0x51, 0x03, 0x4d,
0xc2, 0x44, 0x23, 0x55, 0x03, 0x4d, 0x64, 0x59, 0x44, 0x59, 0x23, 0x55, 0x03, 0x4d, 0xc2, 0x44,
0x44, 0x55, 0x03, 0x4d, 0x23, 0x51, 0x65, 0x5d, 0x44, 0x55, 0x23, 0x51, 0x65, 0x59, 0x03, 0x4d,
0x44, 0x55, 0x03, 0x4d, 0x23, 0x51, 0xe3, 0x48, 0x44, 0x55, 0x23, 0x51, 0x03, 0x4d, 0xe3, 0x48,
0xc2, 0x40, 0x23, 0x51, 0x03, 0x4d, 0xe3, 0x48, 0xc2, 0x40, 0xe2, 0x48, 0x03, 0x4d, 0x03, 0x49,
0x23, 0x51, 0xe2, 0x44, 0x03, 0x49, 0xc2, 0x40, 0x23, 0x51, 0xc2, 0x40, 0xe2, 0x48, 0x03, 0x49,
};

View File

@ -0,0 +1,261 @@
#include <SPI.h>
#include <GD.h>
#include "Wood32.h"
#include "staunton.h" // Chess pieces from eboard's Staunton set: http://www.bergo.eng.br
#define digits (sizeof(staunton_img) / 256)
#include "digits.h"
int atxy(int x, int y)
{
return (y << 6) + x;
}
static void square(byte x, byte y, byte light)
{
prog_uchar *src = Wood32_pic + (16 * light);
int addr = atxy(x, y);
GD.copy(addr + 0 * 64, src, 4);
GD.copy(addr + 1 * 64, src + 4, 4);
GD.copy(addr + 2 * 64, src + 8, 4);
GD.copy(addr + 3 * 64, src + 12, 4);
}
#define QROOK 0
#define QKNIGHT 1
#define QBISHOP 2
#define QUEEN 3
#define KING 4
#define KBISHOP 5
#define KKNIGHT 6
#define KROOK 7
#define PAWN 8
#define WHITE 0x00
#define BLACK 0x10
static char board[32];
static void startboard()
{
byte i;
for (i = 0; i < 8; i++) {
board[i] = 56 + i;
board[8+i] = 48 + i;
board[16+i] = i;
board[24+i] = 8 + i;
}
}
// Return the piece at pos, or -1 if pos is empty
static char find(byte pos)
{
byte slot;
for (slot = 0; slot < 32; slot++)
if (board[slot] == pos)
return slot;
return -1;
}
byte images[16] = { 0, 1, 2, 3, 4, 2, 1, 0, 5, 5, 5, 5, 5, 5, 5, 5 };
static void piece(byte slot, int x, int y)
{
byte i = (4 * slot);
byte j = images[slot & 0xf] * 2;
byte bw = (slot >> 4) & 1;
GD.sprite(i, x, y, j, bw, 0);
GD.sprite(i + 1, x + 16, y, j + 1, bw, 0);
GD.sprite(i + 2, x, y + 16, j + 12, bw, 0);
GD.sprite(i + 3, x + 16, y + 16, j + 13, bw, 0);
}
#define BOARDX(pos) (8 + (((pos) & 7) << 5))
#define BOARDY(pos) (24 + ((((pos) >> 3) & 7) << 5))
static void drawboard()
{
byte slot;
for (slot = 0; slot < 32; slot++) {
char pos = board[slot];
if (pos < 0)
piece(slot, 400, 400);
else {
piece(slot, BOARDX(pos), BOARDY(pos));
}
}
}
static float smoothstep(float x)
{
return x*x*(3-2*x);
}
// move piece 'slot' to position 'pos'.
// return true if a piece was taken.
static byte movepiece(byte slot, byte pos)
{
int x0 = BOARDX(board[slot]);
int y0 = BOARDY(board[slot]);
int x1 = BOARDX(pos);
int y1 = BOARDY(pos);
// move at 1.5 pix/frame
int d = int(sqrt(pow(x0 - x1, 2) + pow(y0 - y1, 2)) / 2);
int it;
for (it = 0; it < d; it++) {
float t = smoothstep(float(it) / d);
GD.waitvblank();
GD.waitvblank();
piece(slot, int(x0 + t * (x1 - x0)), int(y0 + t * (y1 - y0)));
}
byte taken = find(pos) != -1;
if (taken)
board[find(pos)] = -1;
board[slot] = pos;
drawboard();
return taken;
}
void setup()
{
int i, j;
GD.begin();
GD.ascii();
GD.putstr(0, 0, "Chess board");
GD.copy(RAM_CHR, Wood32_chr, sizeof(Wood32_chr));
GD.copy(RAM_PAL, Wood32_pal, sizeof(Wood32_pal));
GD.copy(RAM_SPRIMG, staunton_img, sizeof(staunton_img));
GD.copy(RAM_SPRPAL, staunton_white, sizeof(staunton_white));
GD.copy(RAM_SPRPAL + 512, staunton_black, sizeof(staunton_black));
GD.copy(RAM_SPRIMG + (digits << 8), digits_img, sizeof(digits_img));
GD.copy(RAM_SPRPAL + 2 * 512, digits_pal, sizeof(digits_pal));
for (i = 0; i < 256; i++) {
unsigned int b = GD.rd16(RAM_SPRPAL + 2 * 512 + 2 * i);
GD.wr16(RAM_SPRPAL + 3 * 512 + 2 * i, b ^ 0x7fff);
}
// Draw the 64 squares of the board
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
square(1 + (i << 2), 3 + (j << 2), (i ^ j) & 1);
// Draw the rank and file markers 1-8 a-h
for (i = 0; i < 8; i++) {
GD.wr(atxy(3 + (i << 2), 2), 'a' + i);
GD.wr(atxy(3 + (i << 2), 35), 'a' + i);
GD.wr(atxy(0, 5 + (i << 2)), '8' - i);
GD.wr(atxy(33, 5 + (i << 2)), '8' - i);
}
startboard();
drawboard();
}
static int clock[2];
// draw digit d in sprite slots spr,spr+1 at (x,y)
static void digit(byte spr, byte d, byte bw, int x, int y)
{
GD.sprite(spr, x, y, digits + d, 2 + bw, 0);
GD.sprite(spr + 1, x, y + 16, digits + d + 11, 2 + bw, 0);
}
static void showclock(byte bw)
{
int t = clock[bw];
byte spr = 128 + (bw * 16);
byte s = t % 60;
int y = (bw ? 31 : 3) * 8;
byte d0 = s % 10; s /= 10;
digit(spr, d0, bw, 400 - 1 * 16, y);
digit(spr + 2, s, bw, 400 - 2 * 16, y);
digit(spr + 4, 10, bw, 400 - 3 * 16, y); // colon
spr += 6;
int x = 400 - 4 * 16;
byte m = t / 60;
do {
d0 = m % 10; m /= 10;
digit(spr, d0, bw, x, y);
spr += 2;
x -= 16;
} while (m);
}
static int turn;
#define ALG(r,f) ((r - 'a') + ((8 - f) * 8))
#define CASTLE 255,255
static byte game[] = {
ALG('e', 2),ALG('e', 4), ALG('e', 7),ALG('e', 5),
ALG('g', 1),ALG('f', 3), ALG('b', 8),ALG('c', 6),
ALG('f', 1),ALG('b', 5), ALG('a', 7),ALG('a', 6),
ALG('b', 5),ALG('a', 4), ALG('g', 8),ALG('f', 6),
ALG('d', 1),ALG('e', 2), ALG('b', 7),ALG('b', 5),
ALG('a', 4),ALG('b', 3), ALG('f', 8),ALG('e', 7),
ALG('c', 2),ALG('c', 3), CASTLE,
CASTLE, ALG('d', 7),ALG('d', 5),
ALG('e', 4),ALG('d', 5), ALG('f', 6),ALG('d', 5),
ALG('f', 3),ALG('e', 5), ALG('d', 5),ALG('f', 4),
ALG('e', 2),ALG('e', 4), ALG('c', 6),ALG('e', 5),
ALG('e', 4),ALG('a', 8), ALG('d', 8),ALG('d', 3),
ALG('b', 3),ALG('d', 1), ALG('c', 8),ALG('h', 3),
ALG('a', 8),ALG('a', 6), ALG('h', 3),ALG('g', 2),
ALG('f', 1),ALG('e', 1), ALG('d', 3),ALG('f', 3),
};
static void putalg(byte x, byte y, byte a)
{
GD.wr(atxy(x, y), 'a' + (a & 7));
GD.wr(atxy(x+1, y), '8' - ((a >> 3) & 7));
}
void loop()
{
byte i;
for (i = random(25); i; i--) {
clock[(1 & turn) ^ 1]++;
GD.waitvblank();
showclock(0);
showclock(1);
delay(20);
}
if (turn < (sizeof(game) / 2)) {
byte yy = 8 + (turn >> 1);
byte xx = (turn & 1) ? 44 : 38;
byte i = 1 + (turn >> 1);
if (i >= 10)
GD.wr(atxy(35, yy), '0' + i / 10);
GD.wr(atxy(36, yy), '0' + i % 10);
GD.wr(atxy(37, yy), '.');
byte from = game[2 * turn];
byte to = game[2 * turn + 1];
if (from != 255) {
putalg(xx, yy, from);
GD.wr(atxy(xx + 2, yy), movepiece(find(from), to) ? 'x' : '-');
putalg(xx + 3, yy, to);
} else {
byte rank = (turn & 1) ? 8 : 1;
movepiece(find(ALG('e', rank)), ALG('g', rank));
movepiece(find(ALG('h', rank)), ALG('f', rank));
GD.putstr(xx, yy, "O-O");
}
turn++;
} else {
delay(4000);
setup();
turn = 0;
clock[0] = 0;
clock[1] = 0;
}
}

View File

@ -0,0 +1,412 @@
static PROGMEM prog_uchar digits_img[] = {
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xa3, 0x48, 0x15, 0x03, 0x15, 0x49, 0xa5, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x79, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x96, 0x00, 0x00, 0x24, 0xa7, 0xd0, 0xa7, 0x23, 0x00, 0x00, 0x99, 0xda, 0xda,
0xda, 0xda, 0xd8, 0x21, 0x00, 0x05, 0xb4, 0xda, 0xda, 0xda, 0xb2, 0x04, 0x00, 0x24, 0xd8, 0xda,
0xda, 0xda, 0x9f, 0x00, 0x00, 0x4c, 0xda, 0xda, 0xda, 0xda, 0xda, 0x49, 0x00, 0x00, 0xa2, 0xda,
0xda, 0xda, 0x68, 0x00, 0x00, 0x86, 0xda, 0xda, 0xda, 0xda, 0xda, 0x83, 0x00, 0x00, 0x6a, 0xda,
0xda, 0xda, 0x3b, 0x00, 0x00, 0xaa, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa9, 0x00, 0x00, 0x3d, 0xda,
0xda, 0xda, 0x1e, 0x00, 0x00, 0xc2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x00, 0x00, 0x20, 0xda,
0xda, 0xda, 0x0b, 0x00, 0x00, 0xd2, 0xda, 0x6c, 0x0c, 0x70, 0xda, 0xd0, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0x02, 0x00, 0x00, 0xd9, 0xda, 0x0b, 0x00, 0x0c, 0xda, 0xd8, 0x00, 0x00, 0x02, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xbe, 0x92, 0x62, 0x2f, 0x04, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x1e, 0x55, 0x89, 0xbb, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xb6, 0x7d, 0x51, 0x2c, 0x11, 0x04, 0x0a, 0x21, 0x4f, 0x98, 0xd8, 0xda, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xbf, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x3b, 0x87, 0xb5, 0xd4, 0xcf, 0xa8, 0x47, 0x00, 0x00, 0x21, 0xcb, 0xda,
0xda, 0xda, 0x42, 0xaf, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x50, 0x00, 0x00, 0x6a, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xb2, 0x00, 0x00, 0x22, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd5, 0x00, 0x00, 0x05, 0xd8,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc1, 0x00, 0x00, 0x00, 0xc5,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x7d, 0x00, 0x00, 0x06, 0xd4,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc6, 0x16, 0x00, 0x00, 0x48, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd8, 0x41, 0x00, 0x00, 0x04, 0xb0, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xb8, 0x82, 0x54, 0x2a, 0x0d, 0x04, 0x13, 0x36, 0x75, 0xc4, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x95, 0xda, 0xda,
0xda, 0xda, 0xda, 0x26, 0x69, 0x99, 0xb9, 0xd1, 0xd5, 0xb8, 0x72, 0x06, 0x00, 0x02, 0xa6, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x80, 0x00, 0x00, 0x3e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xca, 0x00, 0x00, 0x0d, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xca, 0x00, 0x00, 0x0e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x73, 0x00, 0x00, 0x4e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd9, 0xc9, 0xa3, 0x53, 0x00, 0x00, 0x24, 0xc2, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x77, 0xce, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x8a, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x81, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc1, 0x0e, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x4a, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x98, 0x00, 0x4b, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xcd, 0x1b, 0x0a, 0xbd, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x60, 0x00, 0x75, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xa9, 0x02, 0x22, 0xd3, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xd5, 0x2b, 0x00, 0x9a, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x77, 0x00, 0x44, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xb6, 0x08, 0x07, 0xb8, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x35, 0x0d, 0x05, 0x17, 0x44, 0x8f, 0xd7, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0xc5, 0xda, 0xda,
0xda, 0xda, 0xda, 0x34, 0x83, 0xb2, 0xd0, 0xd4, 0xb8, 0x7b, 0x14, 0x00, 0x00, 0x33, 0xd6, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xd8, 0x94, 0x4a, 0x1b, 0x05, 0x09, 0x29, 0x5f, 0xaa, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xc2, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xda,
0xda, 0xda, 0xda, 0xcd, 0x26, 0x00, 0x00, 0x32, 0x99, 0xc8, 0xd4, 0xbb, 0x8b, 0x39, 0xda, 0xda,
0xda, 0xda, 0xda, 0x5f, 0x00, 0x00, 0x46, 0xd7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xc3, 0x05, 0x00, 0x0e, 0xc6, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x7e, 0x00, 0x00, 0x5d, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x4b, 0x00, 0x00, 0x98, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x26, 0x00, 0x00, 0xb8, 0xb0, 0x49, 0x10, 0x07, 0x21, 0x5b, 0xb8, 0xda, 0xda, 0xda,
0xda, 0xda, 0x0e, 0x00, 0x00, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x9d, 0xda, 0xda,
0xda, 0xda, 0x02, 0x00, 0x00, 0x18, 0x4a, 0xb1, 0xd4, 0xb9, 0x5e, 0x00, 0x00, 0x11, 0xc3, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x4a, 0x00, 0x00, 0x6e, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc9, 0x06, 0x00, 0x00, 0xb4, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x83, 0x00, 0x00, 0x30, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x36, 0x00, 0x00, 0x7c, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xba, 0x01, 0x00, 0x03, 0xc5, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x74, 0x00, 0x00, 0x41, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x25, 0x00, 0x00, 0x8e, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xab, 0x00, 0x00, 0x0b, 0xcf, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xb1, 0x64, 0x2d, 0x0f, 0x03, 0x0f, 0x2d, 0x64, 0xb2, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x77, 0xda, 0xda,
0xda, 0xda, 0x8b, 0x00, 0x00, 0x0c, 0x80, 0xc2, 0xd6, 0xc2, 0x80, 0x0c, 0x00, 0x00, 0x8e, 0xda,
0xda, 0xda, 0x2d, 0x00, 0x00, 0x8c, 0xda, 0xda, 0xda, 0xda, 0xda, 0x8c, 0x00, 0x00, 0x2e, 0xda,
0xda, 0xda, 0x07, 0x00, 0x00, 0xcd, 0xda, 0xda, 0xda, 0xda, 0xda, 0xcc, 0x00, 0x00, 0x08, 0xda,
0xda, 0xda, 0x16, 0x00, 0x00, 0xcf, 0xda, 0xda, 0xda, 0xda, 0xda, 0xce, 0x00, 0x00, 0x17, 0xda,
0xda, 0xda, 0x62, 0x00, 0x00, 0x90, 0xda, 0xda, 0xda, 0xda, 0xda, 0x8e, 0x00, 0x00, 0x65, 0xda,
0xda, 0xda, 0xce, 0x36, 0x00, 0x0e, 0x82, 0xc4, 0xd7, 0xc3, 0x81, 0x0c, 0x00, 0x38, 0xd0, 0xda,
0xda, 0xda, 0xda, 0xd6, 0x81, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x82, 0xd6, 0xda, 0xda,
0xda, 0xda, 0xda, 0xd5, 0x77, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x78, 0xd6, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xc7, 0x70, 0x2e, 0x0e, 0x03, 0x18, 0x4b, 0xa0, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xac, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0xda, 0xda, 0xda,
0xda, 0xda, 0xc9, 0x19, 0x00, 0x00, 0x5e, 0xb9, 0xd4, 0xb1, 0x48, 0x00, 0x00, 0x83, 0xda, 0xda,
0xda, 0xda, 0x78, 0x00, 0x00, 0x4c, 0xda, 0xda, 0xda, 0xda, 0xd7, 0x37, 0x00, 0x15, 0xd2, 0xda,
0xda, 0xda, 0x34, 0x00, 0x00, 0xa2, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9a, 0x00, 0x00, 0x97, 0xda,
0xda, 0xda, 0x11, 0x00, 0x00, 0xca, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc6, 0x00, 0x00, 0x60, 0xda,
0xda, 0xda, 0x03, 0x00, 0x00, 0xd7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0x00, 0x00, 0x38, 0xda,
0xda, 0xda, 0x10, 0x00, 0x00, 0xcb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc6, 0x00, 0x00, 0x1d, 0xda,
0xda, 0xda, 0x31, 0x00, 0x00, 0xa5, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9a, 0x00, 0x00, 0x0b, 0xda,
0xda, 0xda, 0x70, 0x00, 0x00, 0x52, 0xda, 0xda, 0xda, 0xda, 0xd8, 0x39, 0x00, 0x00, 0x02, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x02, 0x00, 0x00, 0xd9, 0xda, 0x67, 0x0b, 0x6e, 0xda, 0xd8, 0x00, 0x00, 0x02, 0xda,
0xda, 0xda, 0x0b, 0x00, 0x00, 0xd2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd0, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0x1e, 0x00, 0x00, 0xc2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x00, 0x00, 0x20, 0xda,
0xda, 0xda, 0x3b, 0x00, 0x00, 0xab, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa9, 0x00, 0x00, 0x3d, 0xda,
0xda, 0xda, 0x68, 0x00, 0x00, 0x87, 0xda, 0xda, 0xda, 0xda, 0xda, 0x84, 0x00, 0x00, 0x6a, 0xda,
0xda, 0xda, 0x9f, 0x00, 0x00, 0x4d, 0xda, 0xda, 0xda, 0xda, 0xda, 0x4a, 0x00, 0x00, 0xa2, 0xda,
0xda, 0xda, 0xd8, 0x21, 0x00, 0x05, 0xb5, 0xda, 0xda, 0xda, 0xb3, 0x04, 0x00, 0x24, 0xd8, 0xda,
0xda, 0xda, 0xda, 0x96, 0x00, 0x00, 0x25, 0xa8, 0xd1, 0xa8, 0x24, 0x00, 0x00, 0x99, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xa3, 0x47, 0x13, 0x02, 0x13, 0x48, 0xa4, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x61, 0x00, 0x00, 0x00, 0x77, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x6d, 0x00, 0x00, 0x00, 0x52, 0xd9, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x73, 0x00, 0x00, 0x00, 0x45, 0xd5, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x75, 0x00, 0x00, 0x00, 0x43, 0xd3, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x76, 0x00, 0x00, 0x00, 0x58, 0xd5, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0x76, 0x00, 0x00, 0x05, 0x7d, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0x75, 0x00, 0x00, 0x1c, 0xa8, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x72, 0x00, 0x00, 0x47, 0xc8, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd7, 0xc2, 0x8d, 0x25, 0x00, 0x00, 0x56, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xcd, 0x2d, 0x00, 0x00, 0x8d, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9e, 0x00, 0x00, 0x36, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd0, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xce, 0x00, 0x00, 0x09, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9f, 0x00, 0x00, 0x27, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd2, 0x32, 0x00, 0x00, 0x6e, 0xda,
0xda, 0xda, 0x27, 0x6b, 0x9a, 0xb8, 0xd0, 0xd7, 0xc3, 0x93, 0x2c, 0x00, 0x00, 0x1e, 0xcb, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xba, 0xda, 0xda,
0xda, 0xda, 0xb5, 0x7c, 0x4e, 0x29, 0x0f, 0x03, 0x0a, 0x20, 0x4c, 0x93, 0xd7, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x3b, 0x00, 0x6e, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0x88, 0x00, 0x1d, 0xd0, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0x12, 0x00, 0x94, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xbc, 0x17, 0x00, 0x00, 0x88, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x85, 0x00, 0x00, 0x3f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x00, 0x00, 0x14, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd5, 0x00, 0x00, 0x04, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc2, 0x00, 0x00, 0x11, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x88, 0x00, 0x00, 0x3f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc2, 0x1c, 0x00, 0x00, 0x91, 0xda,
0xda, 0xda, 0x2a, 0x6f, 0x9e, 0xbe, 0xd2, 0xd5, 0xbb, 0x80, 0x18, 0x00, 0x00, 0x44, 0xd9, 0xda,
0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0xd1, 0xda, 0xda,
0xda, 0xda, 0xaf, 0x6e, 0x3b, 0x1c, 0x09, 0x02, 0x0f, 0x2c, 0x5f, 0xac, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0x01, 0x00, 0x00, 0x3a, 0xd8, 0xda, 0xda, 0xda, 0xda, 0x4c, 0x00, 0x00, 0x70, 0xda,
0xda, 0xda, 0x0a, 0x00, 0x00, 0x9c, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa3, 0x00, 0x00, 0x31, 0xda,
0xda, 0xda, 0x1c, 0x00, 0x00, 0xc7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xca, 0x00, 0x00, 0x11, 0xda,
0xda, 0xda, 0x36, 0x00, 0x00, 0xd7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd7, 0x00, 0x00, 0x04, 0xda,
0xda, 0xda, 0x5f, 0x00, 0x00, 0xc7, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc9, 0x00, 0x00, 0x12, 0xda,
0xda, 0xda, 0x95, 0x00, 0x00, 0x9c, 0xda, 0xda, 0xda, 0xda, 0xda, 0xa2, 0x00, 0x00, 0x37, 0xda,
0xda, 0xda, 0xd1, 0x14, 0x00, 0x3b, 0xd8, 0xda, 0xda, 0xda, 0xda, 0x4c, 0x00, 0x00, 0x7a, 0xda,
0xda, 0xda, 0xda, 0x80, 0x00, 0x00, 0x4b, 0xb2, 0xd5, 0xba, 0x5f, 0x00, 0x00, 0x1c, 0xcb, 0xda,
0xda, 0xda, 0xda, 0xda, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xae, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x9e, 0x49, 0x17, 0x03, 0x0d, 0x2e, 0x71, 0xc8, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x62, 0x00, 0x00, 0x54, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd6, 0x16, 0x00, 0x00, 0x9d, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x9b, 0x00, 0x00, 0x17, 0xd7, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x50, 0x00, 0x00, 0x66, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xcd, 0x09, 0x00, 0x00, 0xad, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x89, 0x00, 0x00, 0x27, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x3c, 0x00, 0x00, 0x77, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xc0, 0x02, 0x00, 0x01, 0xbc, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x7a, 0x00, 0x00, 0x38, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0x2b, 0x00, 0x00, 0x84, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xd7, 0x40, 0x00, 0x00, 0x61, 0xb9, 0xd5, 0xb9, 0x5f, 0x00, 0x00, 0x42, 0xd8, 0xda,
0xda, 0xda, 0x81, 0x00, 0x00, 0x59, 0xda, 0xda, 0xda, 0xda, 0xda, 0x55, 0x00, 0x00, 0x83, 0xda,
0xda, 0xda, 0x33, 0x00, 0x00, 0xaf, 0xda, 0xda, 0xda, 0xda, 0xda, 0xad, 0x00, 0x00, 0x33, 0xda,
0xda, 0xda, 0x0c, 0x00, 0x00, 0xd3, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd2, 0x00, 0x00, 0x0c, 0xda,
0xda, 0xda, 0x06, 0x00, 0x00, 0xd2, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd1, 0x00, 0x00, 0x07, 0xda,
0xda, 0xda, 0x1f, 0x00, 0x00, 0xac, 0xda, 0xda, 0xda, 0xda, 0xda, 0xad, 0x00, 0x00, 0x21, 0xda,
0xda, 0xda, 0x5c, 0x00, 0x00, 0x55, 0xda, 0xda, 0xda, 0xda, 0xda, 0x57, 0x00, 0x00, 0x5e, 0xda,
0xda, 0xda, 0xba, 0x0c, 0x00, 0x00, 0x60, 0xb9, 0xd5, 0xba, 0x63, 0x00, 0x00, 0x0d, 0xbc, 0xda,
0xda, 0xda, 0xda, 0xa1, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa4, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xc5, 0x72, 0x31, 0x10, 0x03, 0x10, 0x32, 0x74, 0xc6, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xc3, 0x10, 0x00, 0x00, 0x63, 0xbb, 0xd5, 0xb2, 0x4a, 0x18, 0x00, 0x00, 0x03, 0xda,
0xda, 0xda, 0xda, 0x9d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x97, 0x00, 0x00, 0x10, 0xda,
0xda, 0xda, 0xda, 0xda, 0xb7, 0x5a, 0x1f, 0x06, 0x0e, 0x46, 0xae, 0xb6, 0x00, 0x00, 0x28, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x98, 0x00, 0x00, 0x4c, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x5d, 0x00, 0x00, 0x7f, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xc7, 0x0e, 0x00, 0x05, 0xc4, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd7, 0x49, 0x00, 0x00, 0x60, 0xda, 0xda,
0xda, 0xda, 0xda, 0x39, 0x8f, 0xbe, 0xd5, 0xc9, 0x9b, 0x34, 0x00, 0x00, 0x27, 0xcd, 0xda, 0xda,
0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xc2, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xaa, 0x5c, 0x26, 0x08, 0x04, 0x1a, 0x49, 0x94, 0xd8, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0x00, 0x00, 0x00, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
};
static PROGMEM prog_uchar digits_pal[] = {
0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f,
0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b, 0xde, 0x7b,
0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0xbd, 0x77, 0x9c, 0x73,
0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x9c, 0x73, 0x7b, 0x6f,
0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x7b, 0x6f, 0x5a, 0x6b, 0x5a, 0x6b,
0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x5a, 0x6b, 0x39, 0x67, 0x39, 0x67, 0x39, 0x67,
0x39, 0x67, 0x39, 0x67, 0x39, 0x67, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0x18, 0x63,
0x18, 0x63, 0x18, 0x63, 0x18, 0x63, 0xf7, 0x5e, 0xf7, 0x5e, 0xf7, 0x5e, 0xf7, 0x5e, 0xf7, 0x5e,
0xf7, 0x5e, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a, 0xd6, 0x5a,
0xd6, 0x5a, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56, 0xb5, 0x56,
0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x94, 0x52, 0x73, 0x4e, 0x73, 0x4e,
0x73, 0x4e, 0x73, 0x4e, 0x73, 0x4e, 0x73, 0x4e, 0x73, 0x4e, 0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a,
0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a, 0x52, 0x4a, 0x31, 0x46, 0x31, 0x46, 0x31, 0x46,
0x31, 0x46, 0x31, 0x46, 0x31, 0x46, 0x31, 0x46, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42, 0x10, 0x42,
0x10, 0x42, 0x10, 0x42, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d, 0xef, 0x3d,
0xef, 0x3d, 0xef, 0x3d, 0xce, 0x39, 0xce, 0x39, 0xad, 0x35, 0xad, 0x35, 0xad, 0x35, 0xad, 0x35,
0xad, 0x35, 0xad, 0x35, 0xad, 0x35, 0x8c, 0x31, 0x8c, 0x31, 0x8c, 0x31, 0x8c, 0x31, 0x8c, 0x31,
0x8c, 0x31, 0x8c, 0x31, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d, 0x6b, 0x2d,
0x6b, 0x2d, 0x6b, 0x2d, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29, 0x4a, 0x29,
0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x29, 0x25, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21,
0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0x08, 0x21, 0xe7, 0x1c, 0xe7, 0x1c, 0xe7, 0x1c, 0xe7, 0x1c,
0xe7, 0x1c, 0xe7, 0x1c, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18, 0xc6, 0x18,
0xa5, 0x14, 0xa5, 0x14, 0xa5, 0x14, 0xa5, 0x14, 0xa5, 0x14, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10,
0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x84, 0x10, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c,
0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x63, 0x0c, 0x42, 0x08, 0x42, 0x08, 0x42, 0x08, 0x42, 0x08,
0x42, 0x08, 0x42, 0x08, 0x42, 0x08, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x21, 0x04,
0x21, 0x04, 0x21, 0x04, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

View File

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

View File

@ -0,0 +1,95 @@
#include <SPI.h>
#include <GD.h>
void setup()
{
#if 0
pinMode(9, OUTPUT);
pinMode(12, INPUT);
digitalWrite(12, HIGH);
for (;;) {
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
}
#endif
// Configure input pins with internal pullups
byte i;
for (i = 2; i < 7; i++) {
pinMode(i, INPUT);
digitalWrite(i, HIGH);
}
GD.begin();
GD.ascii();
GD.wr16(RAM_SPRPAL + 2 * 255, TRANSPARENT);
// draw 32 circles into 32 sprite images
for (i = 0; i < 32; i++) {
GD.wr16(RAM_SPRPAL + 2 * i, RGB(8 * i, 64, 255 - 8 * i));
int dst = RAM_SPRIMG + 256 * i;
GD.__wstart(dst);
byte x, y;
int r2 = min(i * i, 256);
for (y = 0; y < 16; y++) {
for (x = 0; x < 16; x++) {
byte pixel;
if ((x * x + y * y) <= r2)
pixel = i; // use color above
else
pixel = 0xff; // transparent
SPI.transfer(pixel);
}
}
GD.__end();
}
}
void circle(int x, int y, byte a)
{
byte sprnum = 0;
GD.sprite(sprnum++, x + 16, y + 16, a, 0, 0);
GD.sprite(sprnum++, x + 0, y + 16, a, 0, 2);
GD.sprite(sprnum++, x + 16, y + 0, a, 0, 4);
GD.sprite(sprnum++, x + 0, y + 0, a, 0, 6);
}
static byte bbits()
{
byte r;
r |= (digitalRead(3) << 0);
r |= (digitalRead(4) << 1);
r |= (digitalRead(5) << 2);
r |= (digitalRead(6) << 3);
r |= (digitalRead(2) << 4);
return r;
}
static byte ands = 0x1f, ors = 0x00;
void loop()
{
GD.putstr(40, 10, digitalRead(4) ? "-" : "U");
GD.putstr(40, 20, digitalRead(5) ? "-" : "D");
GD.putstr(35, 15, digitalRead(6) ? "-" : "L");
GD.putstr(45, 15, digitalRead(3) ? "-" : "R");
GD.putstr(17, 24, digitalRead(2) ? "-" : "S");
int x = analogRead(0);
int y = analogRead(1);
byte bb = bbits();
ands &= bb;
ors |= bb;
if (ands == 0 && ors == 0x1f)
GD.putstr(35, 24, "BUTTONS OK");
char msg[20];
sprintf(msg, "X=%4d, Y=%4d", x, y);
GD.putstr(0, 36, msg);
circle(x / 4, 255 - y / 4, digitalRead(2) ? 15 : 31);
}

View File

@ -0,0 +1,146 @@
#include <SPI.h>
#include <GD.h>
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ (data >> (0 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> (1 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
void setup()
{
Serial.begin(115200);
GD.begin();
GD.ascii();
GD.putstr(0, 0, "memloader");
}
static byte get1()
{
while (!Serial.available())
;
return Serial.read();
}
static uint16_t get2()
{
int r = get1();
return (r << 8) + get1();
}
static void crc_mem(uint16_t a, uint16_t n)
{
unsigned long crc = ~0;
GD.__start(a);
while (n--)
crc = crc_update(crc, SPI.transfer(0));
GD.__end();
crc = ~crc;
Serial.write(crc >> 24);
Serial.write(crc >> 16);
Serial.write(crc >> 8);
Serial.write(crc);
}
static byte mirror[256];
static void copycoll()
{
GD.waitvblank();
GD.waitvblank();
GD.__start(COLLISION);
int i;
for (i = 0; i < 256; i++)
mirror[i] = SPI.transfer(0);
GD.__end();
}
void loop()
{
int i;
// Commands arrive on the serial connection, and trigger various SPI
// actions. The commands are:
//
// len addr block read/write, depending on hi bit of addr
// 0 'L' yy line CRC. Captures line yy, returns the CRC32
// 0 'c' COLLISION dump. Returns the 256 bytes of COLLISION
// 0 'C' COLLISION CRC. Returns the CRC32 of COLLISION
// 0 'M' addr len RAM CRC. Returns the CRC32 of len bytes at addr
byte len = get1();
if (len) {
unsigned short addr;
addr = get2();
GD.__start(addr);
if (addr & 0x8000) {
while (len--)
SPI.transfer(get1());
} else {
while (len--)
Serial.write(SPI.transfer(0));
}
GD.__end();
} else switch (get1()) {
case 'L': { // one-line CRC
unsigned int yy;
yy = get2();
GD.wr16(SCREENSHOT_Y, 0x8000 | yy);
while ((GD.rd(SCREENSHOT_Y + 1) & 0x80) == 0)
;
crc_mem(SCREENSHOT, 800);
GD.wr16(SCREENSHOT_Y, 0);
break;
}
case 'F': { // full-screen CRC
unsigned int yy;
for (yy = 0; yy < 300; yy++) {
GD.wr16(SCREENSHOT_Y, 0x8000 | yy);
while ((GD.rd(SCREENSHOT_Y + 1) & 0x80) == 0)
;
crc_mem(SCREENSHOT, 800);
}
GD.wr16(SCREENSHOT_Y, 0);
break;
}
case 'c': {
copycoll();
for (i = 0; i < 256; i++) {
Serial.write(mirror[i]);
}
break;
}
case 'C': {
copycoll();
unsigned long crc = ~0;
for (i = 0; i < 256; i++)
crc = crc_update(crc, mirror[i]);
crc = ~crc;
Serial.write(crc >> 24);
Serial.write(crc >> 16);
Serial.write(crc >> 8);
Serial.write(crc);
break;
}
case 'M': {
uint16_t a = get2();
uint16_t s = get2();
crc_mem(a, s);
}
}
}

View File

@ -0,0 +1,45 @@
#include <SPI.h>
#include <GD.h>
#define RED RGB(255,0,0)
#define GREEN RGB(0,255,0)
void setup()
{
int i;
GD.begin();
GD.ascii();
GD.putstr(20, 0, "Screenshot");
GD.wr16(RAM_PAL + (8 * 127), RED); // char 127: 0=red, 3=green
GD.wr16(RAM_PAL + (8 * 127) + 6, GREEN);
static PROGMEM prog_uchar box[] = {
0xff, 0xff,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xc0, 0x03,
0xff, 0xff };
GD.copy(RAM_CHR + (16 * 127), box, sizeof(box));
for (i = 0; i < 64; i++) {
GD.wr(64 * i + i, 127); // diagonal boxes
char msg[20];
sprintf(msg, "Line %d", i);
GD.putstr(i + 2, i, msg);
GD.wr(64 * i + 49, 127); // boxes on right
}
Serial.begin(1000000);
long started = millis();
GD.screenshot(0);
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,428 @@
#include <SPI.h>
#include <GD.h>
int atxy(int x, int y)
{
return (y << 6) + x;
}
void readn(byte *dst, unsigned int addr, int c)
{
GD.__start(addr);
while (c--)
*dst++ = SPI.transfer(0);
GD.__end();
}
static byte coll[256];
static void debug_coll()
{
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
while (GD.rd(VBLANK) == 1) // Wait until display
;
while (GD.rd(VBLANK) == 0) // Wait until vblank
;
readn(coll, COLLISION, 256);
}
#define FAIL do { Serial.print("Fail at line: "); Serial.println(__LINE__, DEC); return 0; } while (0)
int test_collision()
{
int i, j;
#define NOCOLL 0xff
GD.wr16(RAM_SPRPAL, 0x8000); // color 0 transparent, 1-255 0x5555 (pinkish)
GD.fill(RAM_SPRPAL + 2, 0x55, 510);
GD.fill(RAM_SPRIMG, 1, 256);
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
debug_coll();
for (i = 0; i < 256; i++)
if (coll[i] != NOCOLL)
FAIL;
GD.sprite(7, 200, 100, 0, 0, 0);
GD.sprite(117, 200, 200, 0, 0, 0);
byte jkmode, jk;
for (jkmode = 0; jkmode < 2; jkmode++) {
for (jk = 0; jk < 2; jk++) {
GD.wr(JK_MODE, jkmode);
for (i = -20; i < 20; i++) {
GD.sprite(8, 200, 100 + i, 0, 0, 0, jk);
GD.sprite(200, 200 + i, 200, 0, 0, 0, jk);
debug_coll();
byte expected = ((!jkmode || jk) && (abs(i) < 16)) ? 7 : NOCOLL;
if (coll[8] != expected)
FAIL;
expected = ((!jkmode || jk) && (abs(i) < 16)) ? 117 : NOCOLL;
if (coll[200] != expected)
FAIL;
}
}
}
randomSeed(1);
for (j = 100; j; j--) {
for (i = 0; i < 256; i++) {
GD.sprite(i, random(512), random(512), 0, 0, 0);
}
debug_coll();
for (i = 0; i < 256; i++) {
if (coll[i] != 0xff && (coll[i] >= i))
FAIL;
}
}
for (i = 0; i < 256; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
return 1;
}
int test_ident()
{
byte id = GD.rd(IDENT);
if (id != 0x6d) {
Serial.println(id, HEX);
FAIL;
}
return 1;
}
int test_frame()
{
byte v;
const int nframes = 200;
v = GD.rd(FRAME);
while (GD.rd(FRAME) != ((v + 1) & 0xff))
;
long t0 = micros();
while (GD.rd(FRAME) != ((v + nframes + 1) & 0xff))
;
long t10 = micros();
Serial.println(t10 - t0, DEC);
Serial.print("(");
Serial.print(nframes / (1.e-6 * (t10 - t0)), DEC);
Serial.println(" fps)");
return 1;
}
// low-level SPI test. Write a random pattern to the 16K image RAM,
// then read it back, verifying the same random values. Meant to
// catch SPI transmission errors.
int test_spi()
{
int i;
randomSeed(947);
GD.__wstart(RAM_SPRIMG);
for (i = 0; i < 16384; i++)
SPI.transfer(random(256));
GD.__end();
randomSeed(947);
GD.__start(RAM_SPRIMG);
for (i = 0; i < 16384; i++)
if (SPI.transfer(0) != random(256))
FAIL;
GD.__end();
return 1;
}
// Test a RAM area (addr, c)
int test_a_ram(unsigned int addr, int c)
{
while (c--) {
byte prev = GD.rd(addr);
GD.wr(addr, 0xff); if (GD.rd(addr) != 0xff) FAIL;
GD.wr(addr, 0x00); if (GD.rd(addr) != 0x00) FAIL;
GD.wr(addr, 0x47); if (GD.rd(addr) != 0x47) FAIL;
GD.wr(addr, prev); if (GD.rd(addr) != prev) FAIL;
addr++;
}
return 1;
}
// Write/read a simple pattern to each RAM byte.
// (Restores RAM values so display is preserved.)
int test_rams()
{
test_a_ram(0, (4 + 4 + 2) * 1024); /* Pic, chr and pal */
test_a_ram(RAM_SPR, 0x5000); /* Sprites */
test_a_ram(PALETTE16A, 64);
test_a_ram(PALETTE4A, 16);
test_a_ram(VOICES, 64 * 4);
GD.wr(J1_RESET, 1);
test_a_ram(J1_CODE, 256);
return 1;
}
int test_audio_l()
{
GD.fill(VOICES, 0, 64 * 4);
GD.voice(0, 0, 4 * 440, 255, 0);
delay(1000);
return 1;
}
int test_audio_r()
{
GD.fill(VOICES, 0, 64 * 4);
GD.voice(0, 0, 4 * 440, 0, 255);
delay(1000);
GD.fill(VOICES, 0, 64 * 4);
return 1;
}
int test_speed()
{
long t0 = millis();
int i, j;
for (i = 0; i < 1000; i++) {
GD.fill(RAM_SPRIMG, 0x55, 1000);
}
Serial.print("(Took ");
Serial.print(millis() - t0);
Serial.print(")");
return 1;
}
#include "lena.h"
static void show_lena()
{
GD.copy(RAM_SPRPAL, lenapal, sizeof(lenapal));
int i;
for (i = 0; i < 64; i++)
GD.sprite(i, 256 + ((i & 7) << 4), 64 + 2 * (i & 070), i, 0, 0);
for (i = 64; i < 512; i++)
GD.sprite(i, 400, 400, 0, 0, 0);
GD.uncompress(RAM_SPRIMG, lenaimg);
}
void show_stripes()
{
int i;
for (i = 0; i < 32; i++) {
GD.wr16(RAM_PAL + (0x80 + i) * 8, RGB(8 * i, 0, 0));
GD.wr16(RAM_PAL + (0xa0 + i) * 8, RGB(0, 8 * i, 0));
GD.wr16(RAM_PAL + (0xc0 + i) * 8, RGB(0, 0, 8 * i));
GD.wr(atxy(i, 24), 0x80 + i);
GD.wr(atxy(i, 25), 0xa0 + i);
GD.wr(atxy(i, 26), 0xc0 + i);
}
GD.putstr(0, 28, "R");
GD.putstr(0, 29, "G");
GD.putstr(0, 30, "B");
GD.putstr(4, 31, "0");
GD.putstr(8, 31, "1");
GD.putstr(16, 31, "2");
GD.wr(atxy(4, 28), 0x80 + 4);
GD.wr(atxy(8, 28), 0x80 + 8);
GD.wr(atxy(16, 28), 0x80 + 16);
GD.wr(atxy(4, 29), 0xa0 + 4);
GD.wr(atxy(8, 29), 0xa0 + 8);
GD.wr(atxy(16, 29), 0xa0 + 16);
GD.wr(atxy(4, 30), 0xc0 + 4);
GD.wr(atxy(8, 30), 0xc0 + 8);
GD.wr(atxy(16, 30), 0xc0 + 16);
}
byte y;
static void logn(const char*s)
{
Serial.print(s);
GD.putstr(0, y, s);
}
static void log(const char*s)
{
Serial.println(s);
GD.putstr(16, y++, s);
}
#define RUNTEST(NAME) \
do { \
logn(#NAME ": "); \
r = NAME(); \
log(r ? "pass" : "FAIL"); \
pass &= r; \
} while (0)
#include "selftest1.h"
static unsigned long rd32()
{
return GD.rd16(COMM+0) + ((unsigned long)GD.rd16(COMM+2) << 16);
}
int test_coproc()
{
GD.microcode(selftest1_code, sizeof(selftest1_code));
GD.wr(COMM+15, 0); // stop
GD.wr16(COMM+0, 0);
GD.wr16(COMM+2, 0);
unsigned long started;
unsigned long cycles0, cycles1;
byte regime;
int jj;
for (regime = 0; regime < 6; regime++) {
cycles0 = rd32();
started = micros();
GD.wr(COMM+15, 1); // go
switch (regime) {
case 0:
delay(1000);
break;
case 1:
GD.__start(0);
delay(1000);
GD.__end();
break;
case 2:
GD.__start(0);
SPI.transfer(0);
delay(1000);
GD.__end();
break;
case 3:
GD.__start(0);
for (jj = 0; jj < 1000; jj++) {
SPI.transfer(0);
delay(1);
}
GD.__end();
break;
case 4:
for (jj = 0; jj < 1000; jj++) {
GD.rd(0);
delay(1);
}
break;
case 5:
while ((micros() - started) < 1000000) {
GD.__start(0);
for (jj = 0; jj < 1000; jj++)
SPI.transfer(0);
GD.__end();
}
break;
}
GD.wr(COMM+15, 0); // stop
delay(1);
cycles1 = rd32();
long cps = long(1e6 * (cycles1 - cycles0) / (micros() - started));
if (cps < 1000000)
FAIL;
// Serial.println(micros() - started, DEC);
// Serial.print(regime, DEC);
// Serial.print(' ');
// Serial.println(cps, DEC);
}
return 1;
}
// See Atmel AT45DB021D datasheet:
// http://www.atmel.com/dyn/resources/prod_documents/doc3638.pdf
static int test_flash()
{
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
delay(1);
digitalWrite(2, LOW);
SPI.transfer(0xd7); // read SPI flash status
byte status = SPI.transfer(0);
digitalWrite(2, HIGH);
if (status != 0x94) // 0x94 means "idle; all is well"
FAIL;
GD.wr(IOMODE, 0);
return 1;
}
static void runtests()
{
char msg[50];
GD.begin();
GD.ascii();
GD.fill(0, ' ', 4096);
GD.putstr(0, 0,"<------------------- TOP LINE ------------------->");
GD.putstr(0,36,"<----------------- BOTTOM LINE ------------------>");
show_stripes();
y = 3;
byte r, pass = 1;
log("Starting self-test");
RUNTEST(test_ident);
// RUNTEST(test_frame);
RUNTEST(test_flash);
RUNTEST(test_audio_l);
RUNTEST(test_audio_r);
RUNTEST(test_coproc);
RUNTEST(test_speed);
RUNTEST(test_spi);
RUNTEST(test_rams);
RUNTEST(test_collision);
if (pass) {
log("All tests passed");
show_lena();
long seconds = millis() / 1000;
long minutes = seconds / 60;
sprintf(msg, "%d minutes", minutes);
log(msg);
// GD.screenshot(0);
} else {
for (;;) {
GD.wr16(BG_COLOR, RGB(255,0,0));
delay(100);
GD.wr16(BG_COLOR, RGB(0,0,0));
delay(100);
}
}
byte i;
for (i = 9; i; i--) {
sprintf(msg, "Restarting in %d", i);
GD.putstr(0, y, msg);
delay(1000);
}
}
void setup()
{
Serial.begin(1000000);
runtests();
}
void loop()
{
runtests();
}

View File

@ -0,0 +1,37 @@
static PROGMEM prog_uchar selftest1_code[] = {
0x94,0x15,
0x01,0x80,
0x0F,0x72,
0x81,0x61,
0x00,0x6E,
0x81,0x61,
0x81,0x55,
0x23,0x60,
0x03,0x61,
0x23,0x60,
0x0F,0x71,
0x80,0x61,
0x81,0x55,
0x80,0x61,
0x81,0x61,
0x00,0x80,
0x03,0x67,
0x93,0x35,
0x81,0x55,
0x0C,0x70,
0x00,0x80,
0x00,0x80,
0x81,0x61,
0x90,0xA8,
0x83,0x55,
0x81,0x60,
0x92,0xA8,
0x83,0x55,
0x8B,0x55,
0x9F,0xA8,
0x00,0x60,
0x00,0x6C,
0x9D,0x35,
0x96,0x15,
0x0C,0x70,
};

View File

@ -0,0 +1,21 @@
#include <SPI.h>
#include <GD.h>
#include "assetlib.h"
#include "loadcommon.h"
void setup()
{
common_setup(0);
GD.putstr(0, 0, "Asset loader 0");
page = ASSET0_PAGE;
GD_uncompress(GET_FAR_ADDRESS(assetlib0));
if (flash_sum(ASSET0_PAGE, ASSET0_LEN) != ASSET0_SUM)
GD.putstr(0, 10, "load failed");
else
GD.putstr(0, 10, "Done");
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

View File

@ -0,0 +1,21 @@
#include <SPI.h>
#include <GD.h>
#include "assetlib.h"
#include "loadcommon.h"
void setup()
{
common_setup(1);
GD.putstr(0, 0, "Asset loader 1");
page = ASSET1_PAGE;
GD_uncompress(GET_FAR_ADDRESS(assetlib1));
if (flash_sum(ASSET1_PAGE, ASSET1_LEN) != ASSET1_SUM)
GD.putstr(0, 10, "load failed");
else
GD.putstr(0, 10, "Done");
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

View File

@ -0,0 +1,21 @@
#include <SPI.h>
#include <GD.h>
#include "assetlib.h"
#include "loadcommon.h"
void setup()
{
common_setup(2);
GD.putstr(0, 0, "Asset loader 2");
page = ASSET2_PAGE;
GD_uncompress(GET_FAR_ADDRESS(assetlib2));
if (flash_sum(ASSET2_PAGE, ASSET2_LEN) != ASSET2_SUM)
GD.putstr(0, 10, "load failed");
else
GD.putstr(0, 10, "Done");
}
void loop()
{
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(0);
page = STAGEBASE;
GD_uncompress(part0);
common_show_status();
GD.putstr(0, 20, "Done. Now run load1");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(1);
page = STAGEBASE + P1OFF;
GD_uncompress(part1);
common_show_status();
GD.putstr(0, 20, "Done. Now run load2");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(2);
page = STAGEBASE + P2OFF;
GD_uncompress(part2);
common_show_status();
GD.putstr(0, 20, "Done. Now run load3");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
void setup()
{
common_setup(3);
page = STAGEBASE + P3OFF;
GD_uncompress(part3);
common_show_status();
GD.putstr(0, 20, "Done. Now run load4");
GD.wr(IOMODE, 0);
}
void loop()
{
}

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,68 @@
#include <SPI.h>
#include <GD.h>
#include "flashimg.h"
#include "loadcommon.h"
#include "reload.h"
void reload()
{
GD.microcode(reload_code, sizeof(reload_code));
}
static unsigned long copy_page(int dst, int src)
{
int i;
SEL_local();
SPI.transfer(0x03);
spipage(src);
for (i = 0; i < 264; i++)
history[i] = spix(0);
UNSEL_local();
SEL_local();
SPI.transfer(0x82);
spipage(dst);
for (i = 0; i < 264; i++)
spix(history[i]);
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
void setup()
{
common_setup(4);
if (!ready0123(STAGEBASE)) {
GD.putstr(0, 20, "You must run load0, load1, load2, load3 first");
for (;;)
;
}
common_show_status();
do {
page = P4OFF;
GD_uncompress(part4);
common_show_status();
} while (!ready(4));
do {
GD.putstr(0, 20, "Parts ready. Copying...");
GD.putstr(0, 22, "DO NOT INTERRUPT OR TURN OFF");
int i;
for (i = 0; i < P4OFF; i++)
copy_page(i, STAGEBASE + i);
} while (!ready0123(0));
GD.putstr(25, 20, "Done!");
GD.putstr(0, 27, "Now restarting...");
delay(2000);
reload();
}
void loop()
{
}

View File

@ -0,0 +1,289 @@
#define STAGEBASE 568
#if 0
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
uint_farptr_t tab = GET_FAR_ADDRESS(crc_table);
byte tbl_idx;
tbl_idx = crc ^ data;
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = pgm_read_dword_far(tab + 4 * (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
#else
static uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc_update(unsigned long crc, byte data)
{
byte tbl_idx;
tbl_idx = crc ^ data;
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
tbl_idx = crc ^ (data >> 4);
crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4);
return crc;
}
#endif
class GDflashbits {
public:
void begin(prog_uchar *s) {
src = s;
mask = 0x01;
}
byte get1(void) {
byte r = (pgm_read_byte_near(src) & mask) != 0;
mask <<= 1;
if (!mask) {
mask = 1;
src++;
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
prog_uchar *src;
byte mask;
};
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// far ptr version
class GDflashbitsF {
public:
void begin(uint_farptr_t s) {
src = s;
mask = 8;
m = pgm_read_byte_far(src++);
}
byte get1(void) {
byte r = (m & 1);
m >>= 1;
if (--mask == 0) {
mask = 8;
m = pgm_read_byte_far(src++);
}
return r;
}
unsigned short getn(byte n) {
unsigned short r = 0;
while (n--) {
r <<= 1;
r |= get1();
}
return r;
}
private:
uint_farptr_t src;
byte m, mask;
};
#endif
static byte history[264], hp;
int page, offset;
#define FLOCAL 2
#define SEL_local() digitalWrite(FLOCAL, LOW)
#define UNSEL_local() digitalWrite(FLOCAL, HIGH)
#define spix(n) SPI.transfer(n)
static void spipage(int n)
{
spix(n >> 7);
spix(n << 1);
spix(0);
}
static byte status()
{
SEL_local();
spix(0xd7); // read SPI flash status
byte status = spix(0);
UNSEL_local();
return status;
}
static void UNSEL_local_wait()
{
UNSEL_local();
while ((status() & 0x80) == 0)
;
}
static void pgcmd(byte cmd, int page)
{
SEL_local();
spix(cmd);
spipage(page);
}
static void supply(byte b)
{
history[hp++] = b;
if (offset == 0) {
if ((page & 7) == 0) {
pgcmd(0x50, page);
UNSEL_local_wait();
}
pgcmd(0x84, page);
}
spix(b);
if (++offset == 264) {
UNSEL_local();
pgcmd(0x88, page++);
UNSEL_local_wait();
offset = 0;
}
}
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
static GDflashbitsF GDFB;
static void GD_uncompress(uint_farptr_t src)
#else
static GDflashbits GDFB;
static void GD_uncompress(PROGMEM prog_uchar *src)
#endif
{
GDFB.begin(src);
byte b_off = GDFB.getn(4);
byte b_len = GDFB.getn(4);
byte minlen = GDFB.getn(2);
unsigned short items = GDFB.getn(16);
hp = 0;
offset = 0;
while (items--) {
if (GDFB.get1() == 0) {
supply(GDFB.getn(8));
} else {
int offset = -GDFB.getn(b_off) - 1;
int l = GDFB.getn(b_len) + minlen;
while (l--) {
supply(history[0xff & (hp + offset)]);
}
}
}
}
static unsigned long flash_crc(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long crc = ~0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
crc = crc_update(crc, b);
}
crc = ~crc;
UNSEL_local();
return crc;
}
static unsigned long flash_sum(int page, int n)
{
SEL_local();
SPI.transfer(0x03);
spipage(page);
unsigned long sum = 0;
unsigned long len = 264L * n;
while (len--) {
byte b = spix(0);
sum = sum + b;
}
UNSEL_local();
return sum;
}
#ifdef P0OFF
static byte ready(byte part, int sb = STAGEBASE)
{
switch (part) {
case 0: return flash_crc(sb + P0OFF, P0SIZE) == P0CRC;
case 1: return flash_crc(sb + P1OFF, P1SIZE) == P1CRC;
case 2: return flash_crc(sb + P2OFF, P2SIZE) == P2CRC;
case 3: return flash_crc(sb + P3OFF, P3SIZE) == P3CRC;
case 4: return flash_crc(P4OFF, P4SIZE) == P4CRC;
}
return 0;
}
static int atxy(int x, int y)
{
return (y << 6) + x;
}
static void common_show_status()
{
for (byte i = 0; i < 5; i++) {
byte y = 10 + 2 * i;
GD.putstr(0, y, "part ");
GD.wr(atxy(6, y), '0' + i);
GD.putstr(25, y, ready(i) ? "OK" : "--");
}
}
static int ready0123(int sb)
{
return ready(0, sb) && ready(1, sb) && ready(2, sb) && ready(3, sb);
}
#endif
static void common_setup(byte part)
{
GD.begin();
GD.wr(IOMODE, 'F');
pinMode(2, OUTPUT);
digitalWrite(2, HIGH);
GD.ascii();
#ifdef REVISION
// avoid sprintf because it bloats executable
GD.putstr(0, 0, "Flash loader");
char revmsg[] = "Firmware X.X";
revmsg[9] = '0' + (REVISION >> 4);
revmsg[11] = '0' + (REVISION & 0xf);
GD.putstr(0, 2, revmsg);
char partmsg[] = "part X";
partmsg[5] = '0' + part;
GD.putstr(0, 4, partmsg);
GD.putstr(0, 8, "loading");
GD.putstr(8, 8, partmsg);
common_show_status();
#endif
}

View File

@ -0,0 +1,64 @@
static PROGMEM prog_uchar reload_code[] = {
0xB9,0x15,
0x02,0x80,
0x03,0x6D,
0x81,0x61,
0x01,0x80,
0x03,0x63,
0x03,0x62,
0x80,0x61,
0x01,0x80,
0x03,0x69,
0x8C,0x71,
0x00,0x80,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x81,0x55,
0x0F,0x70,
0xF9,0xFF,
0x00,0x66,
0x23,0x60,
0x0F,0x71,
0x8B,0x55,
0x81,0x60,
0x95,0x55,
0x00,0x81,
0x03,0x64,
0x95,0x15,
0x81,0x60,
0x00,0x6E,
0x99,0x55,
0x99,0x15,
0x00,0x80,
0x00,0x66,
0x9F,0x55,
0x66,0xD5,
0x00,0x66,
0x9F,0x55,
0x61,0xB2,
0x9F,0x55,
0x00,0x80,
0x9F,0x55,
0x81,0xB2,
0x9F,0x55,
0x00,0x80,
0x9F,0x55,
0xA1,0xB0,
0x9F,0x55,
0x0E,0x80,
0x9F,0x55,
0x00,0xA0,
0x9F,0x55,
0x00,0xA0,
0x9F,0x15,
0x00,0x80,
0x95,0x55,
0xA3,0x55,
0xBC,0x15,
0x0C,0x70,
};

53
gd/font8x8.h Normal file
View File

@ -0,0 +1,53 @@
static PROGMEM prog_uchar font8x8[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00,
0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x7f, 0x36, 0x7f, 0x36, 0x36, 0x00,
0x0c, 0x3f, 0x68, 0x3e, 0x0b, 0x7e, 0x18, 0x00, 0x60, 0x66, 0x0c, 0x18, 0x30, 0x66, 0x06, 0x00,
0x38, 0x6c, 0x6c, 0x38, 0x6d, 0x66, 0x3b, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0c, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00,
0x00, 0x18, 0x7e, 0x3c, 0x7e, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00,
0x3c, 0x66, 0x6e, 0x7e, 0x76, 0x66, 0x3c, 0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00,
0x3c, 0x66, 0x06, 0x0c, 0x18, 0x30, 0x7e, 0x00, 0x3c, 0x66, 0x06, 0x1c, 0x06, 0x66, 0x3c, 0x00,
0x0c, 0x1c, 0x3c, 0x6c, 0x7e, 0x0c, 0x0c, 0x00, 0x7e, 0x60, 0x7c, 0x06, 0x06, 0x66, 0x3c, 0x00,
0x1c, 0x30, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x00, 0x7e, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00,
0x3c, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x00, 0x3c, 0x66, 0x66, 0x3e, 0x06, 0x0c, 0x38, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30,
0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x00, 0x00,
0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x3c, 0x66, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x00,
0x3c, 0x66, 0x6e, 0x6a, 0x6e, 0x60, 0x3c, 0x00, 0x3c, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00,
0x78, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x00, 0x7e, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x7e, 0x00,
0x7e, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x00, 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x00,
0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00,
0x3e, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00, 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x00, 0x63, 0x77, 0x7f, 0x6b, 0x6b, 0x63, 0x63, 0x00,
0x66, 0x66, 0x76, 0x7e, 0x6e, 0x66, 0x66, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x6a, 0x6c, 0x36, 0x00,
0x7c, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x00, 0x3c, 0x66, 0x60, 0x3c, 0x06, 0x66, 0x3c, 0x00,
0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x63, 0x63, 0x6b, 0x6b, 0x7f, 0x77, 0x63, 0x00,
0x66, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x00,
0x7e, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x7e, 0x00, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x00,
0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3e, 0x00,
0x18, 0x3c, 0x66, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0x1c, 0x36, 0x30, 0x7c, 0x30, 0x30, 0x7e, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00,
0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x00,
0x06, 0x06, 0x3e, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
0x1c, 0x30, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x3c,
0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00,
0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x70, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x00,
0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x36, 0x7f, 0x6b, 0x6b, 0x63, 0x00,
0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00,
0x00, 0x00, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x3e, 0x06, 0x07,
0x00, 0x00, 0x6c, 0x76, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x3e, 0x60, 0x3c, 0x06, 0x7c, 0x00,
0x30, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00,
0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x63, 0x6b, 0x6b, 0x7f, 0x36, 0x00,
0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x3c,
0x00, 0x00, 0x7e, 0x0c, 0x18, 0x30, 0x7e, 0x00, 0x0c, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0c, 0x00,
0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x30, 0x00,
0x31, 0x6b, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
};

16
gd/readme.txt Normal file
View File

@ -0,0 +1,16 @@
Gameduino library
=================
Installation
------------
To install this library, place this entire folder as a subfolder in your
Arduino libraries folder. Then restart your Arduino application.
To use this library in a sketch, go to the Sketch | Import Library menu and
select Gameduino.
This library also has many examples. After installation, you can find them under
File | Examples | Gameduino. 'selftest' is a good example to start with, since it
runs a series of hardware tests.

0
python/.keep Normal file
View File