Space invaders with a nRF2401A wireless joypad
Dependencies: Gameduino mbed nRF2401A
Fork of Gameduino_Invaders_game by
Gameduino and an nRF2401A hooked up to an mbed on an mbeduino:
Revision 2:20a89dc286d5, committed 2012-12-20
- Comitter:
- TheChrisyd
- Date:
- Thu Dec 20 21:33:52 2012 +0000
- Parent:
- 1:f44175dd69fd
- Child:
- 3:9b01f67c7e15
- Commit message:
- Shields aren't destroyed when hit, life sprites aren't displaying properly.
Changed in this revision
--- a/GD.cpp Sat Sep 29 13:01:42 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,337 +0,0 @@ -/* - * Copyright (c) 2011 by James Bowman <jamesb@excamera.com> - * Gameduino library for mbed. Ported from Arduino by Chris Dick - * - */ -#include "GD.h" - -GDClass GD; -DigitalOut cs(ARD_D9); -SPI spi(ARD_MOSI, ARD_MISO, ARD_SCK); // mosi, miso, sclk -Serial pc(USBTX, USBRX); - - - -void GDClass::begin() { - wait_ms(250); // give Gameduino time to boot - cs = 1; - spi.format(8,0); - spi.frequency(8000000); - - - //SPSR = (1 << SPI2X); - - GD.wr(J1_RESET, 1); // HALT coprocessor - __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() { - cs = 1; -} - -void GDClass::__start(unsigned int addr) { // start an SPI transaction to addr - cs = 0; - spi.write(highByte(addr)); - spi.write(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 - cs = 1; -} - -byte GDClass::rd(unsigned int addr) { - __start(addr); - byte r = spi.write(0); - __end(); - return r; -} - -void GDClass::wr(unsigned int addr, byte v) { - __wstart(addr); - spi.write(v); - __end(); -} - -unsigned int GDClass::rd16(unsigned int addr) { - unsigned int r; - - __start(addr); - r = spi.write(0); - r |= (spi.write(0) << 8); - __end(); - return r; -} - -void GDClass::wr16(unsigned int addr, unsigned int v) { - __wstart(addr); - spi.write(lowByte(v)); - spi.write(highByte(v)); - __end(); -} - -void GDClass::fill(int addr, byte v, unsigned int count) { - __wstart(addr); - while (count--) - spi.write(v); - __end(); -} - -void GDClass::copy(unsigned int addr, PROGMEM prog_uchar *src, int count) { - __wstart(addr); - while (count--) { - spi.write(*src++); - } - __end(); -} - -void GDClass::microcode(PROGMEM prog_uchar *src, int count) { - wr(J1_RESET, 1); - copy(J1_CODE, src, count); - wr(J1_RESET, 0); -} - -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.write(lowByte(x)); - spi.write((palette << 4) | (rot << 1) | (highByte(x) & 1)); - spi.write(lowByte(y)); - spi.write((jk << 7) | (image << 1) | (highByte(y) & 1)); - __end(); -} - -void GDClass::xsprite(int ox, int oy, int x, int 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.write(lowByte(ox)); - spi.write((palette << 4) | (rot << 1) | (highByte(ox) & 1)); - spi.write(lowByte(oy)); - spi.write((jk << 7) | (image << 1) | (highByte(oy) & 1)); - spr++; -} - -void GDClass::xhide() { - spi.write(lowByte(400)); - spi.write(highByte(400)); - spi.write(lowByte(400)); - spi.write(highByte(400)); - spr++; -} - -void GDClass::plots(int ox, int oy, PROGMEM sprplot *psp, byte count, byte rot, byte jk) { - while (count--) { - struct sprplot sp; - sp = *psp++; - 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++) { - int b = font8x8[i]; - int h = stretch[b >> 4]; - int 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.write(*s++); - GD.__end(); -} - -void GDClass::voice(int v, byte wave, unsigned int freq, byte lamp, byte ramp) { - __wstart(VOICES + (v << 2)); - spi.write(lowByte(freq)); - spi.write(highByte(freq) | (wave << 7)); - spi.write(lamp); - spi.write(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; - - pc.printf("d%", 0xa5); // sync byte - pc.printf("d%", lowByte(frame)); - pc.printf("d%", 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--; - pc.printf("d%", lowByte(yy)); - pc.printf("d%", 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) { - pc.printf("d%", lowByte(zeroes)); - pc.printf("d%", (0x80 | highByte(zeroes))); - zeroes = 0; - } - pc.printf("d%", lowByte(v)); - pc.printf("d%", highByte(v)); - } - } - if (zeroes) { - pc.printf("d%", lowByte(zeroes)); - pc.printf("d%", (0x80 | highByte(zeroes))); - } - } - GD.wr16(SCREENSHOT_Y, 0); // restore screen to normal -} - -class GDflashbits { - -public: - void begin(PROGMEM prog_uchar *s) { - src = s; - mask = 0x01; - } - - byte get1(void) { - byte r = ( *src & mask) !=0; - mask <<= 1; - if (!( 0xFF & mask)) { - mask = 1; - src++; - } - return r; - } - - unsigned short getn(byte n) { - unsigned short r = 0; - while (n--) { - r <<= 1; - r |= get1(); - } - return r; - } - -private: - PROGMEM prog_uchar *src; - byte mask; -}; - -static GDflashbits GDFB; - -void GDClass::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++; - } - } - } -}
--- a/GD.h Sat Sep 29 13:01:42 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2011 by James Bowman <jamesb@excamera.com> - * Gameduino library for mbed. Ported from Arduino by Chris Dick - * - */ - -#ifndef GAMEDUINO -#define GAMEDUINO -#include "shield.h" -#include "mbed.h" -#include "arduino.h" - - - - - -struct sprplot { - char x, y; - int 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, PROGMEM prog_uchar *src, int count); - - 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(PROGMEM prog_uchar *src, int count); - static void uncompress(unsigned int addr, PROGMEM 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, int x, int 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 ints -#define RAM_CHR 0x1000 // Screen Characters, 256 x 16 = 4096 ints -#define RAM_PAL 0x2000 // Screen Character Palette, 256 x 8 = 2048 ints - -#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 SCREENSHOT_Y 0x281e - -#define PALETTE16A 0x2840 // 16-color palette RAM A, 32 ints -#define PALETTE16B 0x2860 // 16-color palette RAM B, 32 ints -#define PALETTE4A 0x2880 // 4-color palette RAM A, 8 ints -#define PALETTE4B 0x2888 // 4-color palette RAM A, 8 ints -#define COMM 0x2890 // Communication buffer -#define COLLISION 0x2900 // Collision detection RAM, 256 ints -#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 ints -#define RAM_SPRPAL 0x3800 // Sprite Palettes, 4 x 256 = 2048 ints -#define RAM_SPRIMG 0x4000 // Sprite Image, 64 x 256 = 16384 ints - -#ifndef GET_FAR_ADDRESS // at some point this will become official... https://savannah.nongnu.org/patch/?6352 -#define GET_FAR_ADDRESS(var) (var) -#endif -#endif \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Gameduino.lib Thu Dec 20 21:33:52 2012 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/TheChrisyd/code/Gameduino/#141b6d4c3c30
--- a/arduino.c Sat Sep 29 13:01:42 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -#include "arduino.h" - -long time_counter; -Ticker ticker; - -long millis(void) { - return time_counter/1000; -} -long micros(void) { - return time_counter; -} - -void one_micro(void) { - time_counter += 10; -} - -void arduino_setup(void) { - ticker.attach_us( &one_micro, 10 ); -} - -byte lowByte(short int low) { - byte bytelow = 0; - bytelow = (low & 0xFF); - return bytelow; -} - -byte highByte(short int high) { - byte bytehigh = 0; - bytehigh = ((high >> 8) & 0xFF); - return bytehigh; -} - -long random(int number) { - return (rand()%number); -} - -int random(int numberone, int numbertwo) { - int random = 0; - if ((numberone < 0) && (numbertwo < 0)) { - numberone = numberone * -1; - numbertwo = numbertwo * -1; - random = -1 * (rand()%(numberone + numbertwo)); - } - if ((numbertwo < 0) && (numberone >= 0)) { - numbertwo = numbertwo * -1; - random = (rand()%(numberone + numbertwo)) - numbertwo; - } - if ((numberone < 0) && (numbertwo >= 0)) { - numberone = numberone * -1; - random = (rand()%(numberone + numbertwo)) - numberone; - } else { - random = (rand()%(numberone + numbertwo)) - min(numberone, numbertwo); - } - return random; -}
--- a/arduino.h Sat Sep 29 13:01:42 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -#ifndef ARDUINO_H -#define ARDUINO_H - -#include "mbed.h" -#include "shield.h" - - -typedef unsigned char prog_uint8_t; -typedef unsigned int prog_uint16_t; -typedef unsigned char byte; -typedef bool boolean; -typedef unsigned char prog_uchar; -typedef signed char prog_char; - -#define pgm_read_word_near(x) (*(const unsigned int*)x) -#define pgm_read_int_near(x) (*(const int*)x) -#define pgm_read_int(x) (*(const int*)x) -#define pgm_read_byte(x) (*(const char*)x) -#define pgm_read_byte_near(x) (*(const char*)x) - -#define PROGMEM const - -#define randomSeed(x) srand(x) -#define min(a,b) ((a)<(b)?(a):(b)) -#define max(a,b) ((a)>(b)?(a):(b)) -#define delay(x) (wait_ms(x)) -long millis(void); -long micros(void); -void arduino_setup(void); -void one_mirco(void); -byte lowByte(short int low); -byte highByte(short int high); -long random(int number); -int random(int numberone, int numbertwo); -#endif
--- a/font8x8.h Sat Sep 29 13:01:42 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -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, -};
--- a/game.cpp Sat Sep 29 13:01:42 2012 +0000 +++ b/game.cpp Thu Dec 20 21:33:52 2012 +0000 @@ -1,6 +1,6 @@ #include "game.h" - +extern GDClass GD; SPI spigame(ARD_MOSI, ARD_MISO, ARD_SCK); // mosi, miso, sclk /*--------------------------------------------- Trivia: There is NO random number generator @@ -114,7 +114,6 @@ static unsigned int previousPlayerScore, previousHighScore; void redrawScores() { - previousPlayerScore = previousHighScore = 0xffff; } @@ -282,7 +281,7 @@ if (status == S_DYING) { ypos = y; updateSprite(GR_BULLET,1); - GD.wr16(SCROLL_Y,GD.rd16(SCROLL_Y)+1); + //GD.wr16(SCROLL_Y,GD.rd16(SCROLL_Y)+1); } } // See if the bullet hit anything
--- a/game.h Sat Sep 29 13:01:42 2012 +0000 +++ b/game.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,25 +1,25 @@ -//#include <SPI.h> -#include "GD.h" -#include "joystick.h" -#include "shield.h" -#include "mbed.h" -#include "arduino.h" -/*--------------------------------------------- - Data types ----------------------------------------------*/ -typedef char int8; - -/*--------------------------------------------- - Header files ----------------------------------------------*/ -#include "utils.h" -#include "graphics.h" -#include "sound.h" - -/*--------------------------------------------- - Game functions ----------------------------------------------*/ -void initGame(); // Called once from setup() -void updateGame(); // Called from loop() to update the game - -extern Joystick joystick; +//#include <SPI.h> +#include "GD.h" +#include "joystick.h" +#include "shield.h" +#include "mbed.h" +#include "arduino.h" +/*--------------------------------------------- + Data types +---------------------------------------------*/ +typedef char int8; + +/*--------------------------------------------- + Header files +---------------------------------------------*/ +#include "utils.h" +#include "graphics.h" +#include "sound.h" + +/*--------------------------------------------- + Game functions +---------------------------------------------*/ +void initGame(); // Called once from setup() +void updateGame(); // Called from loop() to update the game + +extern Joystick joystick;
--- a/graphics.cpp Sat Sep 29 13:01:42 2012 +0000 +++ b/graphics.cpp Thu Dec 20 21:33:52 2012 +0000 @@ -1,394 +1,395 @@ -#include "game.h" - -SPI spigraphics(ARD_MOSI, ARD_MISO, ARD_SCK); // mosi, miso, sclk - -typedef prog_uint8_t char_data; -typedef prog_uint16_t sprite_data; - -/*--------------------------------------------- - Graphics - made by typing in the hex... :-) ----------------------------------------------*/ -static PROGMEM sprite_data invaderT[] = { - 0x0c00, 0x0c00, - 0x1e00, 0x1e00, - 0x3f00, 0x3f00, - 0x6d80, 0x6d80, - 0x7f80, 0x7f80, - 0x1200, 0x2d00, - 0x2d00, 0x4080, - 0x5280, 0x2100 -}; -static PROGMEM sprite_data invaderM[] = { - 0x2080, 0x2080, - 0x9120, 0x1100, - 0xbfa0, 0x3f80, - 0xeee0, 0x6ec0, - 0xffe0, 0xffe0, - 0x7fc0, 0xbfa0, - 0x2080, 0xa0a0, - 0x4040, 0x1b00 -}; -static PROGMEM sprite_data invaderB[] = { - 0x0f00, 0x0f00, - 0x7fe0, 0x7fe0, - 0xfff0, 0xfff0, - 0xe670, 0xe670, - 0xfff0, 0xfff0, - 0x1980, 0x1980, - 0x36c0, 0x6660, - 0xc030, 0x30c0 -}; -static PROGMEM sprite_data invader_explosion[] = { - 0x0880, - 0x4510, - 0x2020, - 0x1040, - 0xc018, - 0x1040, - 0x2520, - 0x4890 -}; -static PROGMEM sprite_data player[] = { - 0x0200, 0x1004, 0x0200, - 0x0700, 0x8219, 0x0010, - 0x0700, 0x10c0, 0x02a0, - 0x7ff0, 0x0202, 0x1200, - 0xfff8, 0x4b31, 0x01b0, - 0xfff8, 0x21c4, 0x45a8, - 0xfff8, 0x1ff0, 0x1fe4, - 0xfff8, 0x37f2, 0x3ff5 -}; -static PROGMEM sprite_data bullet[] = { - 0x0200, - 0x0200, - 0x0200, - 0x0200, - 0x0000, - 0x0000, - 0x0000, - 0x0000 -}; -static PROGMEM sprite_data bullet_blast[] = { - 0x1120, - 0x0440, - 0x0fc0, - 0x1fe0, - 0x1fe0, - 0x0fc0, - 0x0480, - 0x1220 -}; -static PROGMEM sprite_data saucer[] = { - 0x0000, 0x1281, 0x4800, - 0x07e0, 0x0806, 0x1000, - 0x1ff8, 0x51e3, 0x0000, - 0x3ffc, 0x03f9, 0xc800, - 0x6db6, 0x0754, 0xe400, - 0xffff, 0x11f1, 0x8000, - 0x399c, 0x40a3, 0x1000, - 0x1008, 0x1110, 0x8000 -}; -static PROGMEM sprite_data saucerScore[] = { - 0x007c, 0x1038, 0x107c, 0x7c38, - 0x0040, 0x3044, 0x3040, 0x0444, - 0x0078, 0x104c, 0x1078, 0x084c, - 0x0004, 0x1054, 0x1004, 0x1854, - 0x0004, 0x1064, 0x1004, 0x0464, - 0x0044, 0x1044, 0x1044, 0x4444, - 0x0038, 0x3838, 0x3838, 0x3838, - 0x0000, 0x0000, 0x0000, 0x0000 -}; -static PROGMEM sprite_data saucerZero[] = { - 0x3800, - 0x4400, - 0x4c00, - 0x5400, - 0x6400, - 0x4400, - 0x3800, - 0x0000 -}; -static PROGMEM sprite_data zigzagBomb[] = { - 0x0200, 0x0400, 0x0200, 0x0100, - 0x0400, 0x0300, 0x0100, 0x0200, - 0x0200, 0x0100, 0x0200, 0x0400, - 0x0100, 0x0200, 0x0400, 0x0200, - 0x0200, 0x0400, 0x0200, 0x0100, - 0x0400, 0x0200, 0x0100, 0x0200, - 0x0100, 0x0100, 0x0200, 0x0400, - 0x0000, 0x0000, 0x0000, 0x0000 -}; -static PROGMEM sprite_data barBomb[] = { - 0x0200, 0x0200, 0x0200, 0x0700, - 0x0200, 0x0200, 0x0200, 0x0200, - 0x0200, 0x0200, 0x0700, 0x0200, - 0x0200, 0x0700, 0x0200, 0x0200, - 0x0200, 0x0200, 0x0200, 0x0200, - 0x0700, 0x0200, 0x0200, 0x0200, - 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000 -}; -static PROGMEM sprite_data diagBomb[] = { - 0x0200, 0x0200, 0x0200, 0x0300, - 0x0200, 0x0200, 0x0200, 0x0600, - 0x0200, 0x0600, 0x0200, 0x0200, - 0x0200, 0x0300, 0x0200, 0x0300, - 0x0200, 0x0200, 0x0200, 0x0600, - 0x0200, 0x0600, 0x0200, 0x0200, - 0x0200, 0x0300, 0x0200, 0x0200, - 0x0000, 0x0000, 0x0000, 0x0000 -}; -static PROGMEM sprite_data bomb_blast[] = { - 0x0100, - 0x0440, - 0x01a0, - 0x03c0, - 0x05c0, - 0x03e0, - 0x05c0, - 0x02a0 -}; - -static PROGMEM sprite_data shield[] = { - 0x0fff, 0xc000, - 0x1fff, 0xe000, - 0x3fff, 0xf000, - 0x7fff, 0xf800, - 0xffff, 0xfc00, - 0xffff, 0xfc00, - 0xffff, 0xfc00, - 0xffff, 0xfc00, - 0xffff, 0xfc00, - 0xffff, 0xfc00, - 0xffff, 0xfc00, - 0xffff, 0xfc00, - 0xfe03, 0xfc00, - 0xfc01, 0xfc00, - 0xf800, 0xfc00, - 0xf800, 0xfc00 -}; - -/*--------------------------------------------- - Turn raw data into Gameduino sprites - - We're using four color sprites so each - sprite can contain four images. This - function interleaves the data... ----------------------------------------------*/ -void makeSprite(byte index, byte height, const sprite_data* g1, byte s1=1, const sprite_data* g2=0, byte s2=0, const sprite_data* g3=0, byte s3=0, const sprite_data* g4=0, byte s4=0) -{ - const unsigned int topBit = 0x8000; - unsigned int d1=0,d2=0,d3=0,d4=0; - unsigned int dest = RAM_SPRIMG+(index*256); - for (byte i=0; i<height; ++i) { // Space invaders are only 8 pixels tall - d1 = *g1; g1 += s1; - if (g2) { d2 = *g2; g2 += s2; } - if (g3) { d3 = *g3; g3 += s3; } - if (g4) { d4 = *g4; g4 += s4; } - for (byte j=0; j<16; ++j) { - unsigned int m1 = (d1&topBit)>>15; - unsigned int m2 = (d2&topBit)>>13; - unsigned int m3 = (d3&topBit)>>11; - unsigned int m4 = (d4&topBit)>>9; - GD.wr(dest++,m1+m2+m3+m4); - d1 <<= 1; - d2 <<= 1; - d3 <<= 1; - d4 <<= 1; - } - } -} -void makeInvader(byte gr, const sprite_data *data) -{ - makeSprite(gr,8,data,2,data+1,2,invader_explosion,1); -} -void makeSp3(byte gr, const sprite_data *d) -{ - makeSprite(gr,8, d,3, d+1,3, d+2,3); -} -void makeSp4(byte gr, const sprite_data *d) -{ - makeSprite(gr,8, d,4, d+1,4, d+2,4, d+3,4); -} - -/*--------------------------------------------- - Char data ----------------------------------------------*/ -static PROGMEM char_data floorChar[] = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0xff, - 0x00 -}; -static PROGMEM char_data playerLeft[] = { - 0x02, - 0x07, - 0x07, - 0x7f, - 0xff, - 0xff, - 0xff, - 0xff -}; -static PROGMEM char_data playerRight[] = { - 0x00, - 0x00, - 0x00, - 0xf0, - 0xf8, - 0xf8, - 0xf8, - 0xf8 -}; - -/*--------------------------------------------- - Make a character ----------------------------------------------*/ -static PROGMEM prog_uint8_t stretch[16] = { - 0x00, 0x03, 0x0c, 0x0f, - 0x30, 0x33, 0x3c, 0x3f, - 0xc0, 0xc3, 0xcc, 0xcf, - 0xf0, 0xf3, 0xfc, 0xff -}; -static void makeChar(byte index, const char_data *ch, unsigned int color) -{ - // Bitmap - GD.__wstart(RAM_CHR+(16*index)); - for (int i=0; i<8; i++) { - byte b = *ch++; - spigraphics.write((*stretch+(b >> 4))); - spigraphics.write((*stretch+(b & 15))); - } - GD.__end(); - // Colors - GD.setpal((4*index)+3, color); -} - -/*--------------------------------------------- - Make all the game sprites ----------------------------------------------*/ -void makeGraphics() -{ - // Sprites - makeInvader(GR_INVADER_T,invaderT); - makeInvader(GR_INVADER_M,invaderM); - makeInvader(GR_INVADER_B,invaderB); - makeSp3(GR_PLAYER,player); - makeSprite(GR_BULLET,8,bullet,1,bullet_blast,1); - makeSprite(GR_BULLET,8,bullet,1,bullet_blast,1, saucerZero,1); - makeSp3(GR_SAUCER,saucer); - makeSp4(GR_BOMB_ZIGZAG,zigzagBomb); - makeSp4(GR_BOMB_BARS, barBomb); - makeSp4(GR_BOMB_DIAG, diagBomb); - makeSp4(GR_SAUCER_SCORE,saucerScore); - makeSprite(GR_BOMB_OTHER,8,bomb_blast,1); - GD.wr16(PALETTE4A+0,0x8000); // Transparent - GD.wr16(PALETTE4A+2,0x7fff); // White - // Charset - GD.ascii(); - //const unsigned int red = 0x7c00; - const unsigned int green = 0x03e0; - makeChar(CH_FLOOR,floorChar,green); - makeChar(CH_PLAYERL,playerLeft,green); - makeChar(CH_PLAYERR,playerRight,green); -} - - -/*--------------------------------------------------- - The shields are sprites but we use them as bitmaps - so we need to be able to shoot/bomb/rebuild them - on demand. ----------------------------------------------------*/ -void remakeShields() -{ - for (int i=0; i<4; ++i) { - makeSprite(GR_SHIELD1+i,16,shield,2,shield+1,2); - } -} - -int8 zapShield(int n, int8 x, bool withBullet) -{ - int y = 0; - if ((n >= 0) and (n <= 3)) { - n += GR_SHIELD1; - const unsigned int spriteMem = RAM_SPRIMG+(n*256); - int col = x+6; // The pixels in the bullet are in column 6 of the graphic - if (col < 0 ) col = 0; - if (col > 31) col = 31; - // Scan the shield and find the top/bottom pixel in column 'x' - byte pixelMask = 0x03; - if (col > 15) { - pixelMask = 0x0c; - col &= 15; - } - unsigned int s = spriteMem+col; - const sprite_data *blastMap = bullet_blast; - if (withBullet) { - // Go from the top, find lowest pixel - for (int8 r=0; r<16; ++r) { - if ((GD.rd(s)&pixelMask)!=0) { - y = r; - } - s += 16; - } - x += 3; - y -= 5; - } - else { - // Go from the bottom, find highest pixel - y = 16; - s += 256; - int8 offset = 3; - for (int8 r=0; r<16; ++r) { - s -= 16; - // Bombs are wider...we check three columns - if ((GD.rd(s)&pixelMask)!=0) { - y = 15-r; - offset = 2; - } - else if ((col!=0) and ((GD.rd(s-1)&pixelMask)!=0)) { - y = 15-r; - offset = 1; - } - else if ((col!=31) and ((GD.rd(s+1)&pixelMask)!=0)) { - y = 15-r; - offset = 3; - } - } - x += offset; - y -= 4; - blastMap = bomb_blast; - } - // Blast a hole in it - for (int8 j=0; j<8; ++j) { // 8 lines tall - const int py = y+j; - if ((py>=0) and (py<=15)) { - unsigned int blastMask = 0x1000; - unsigned int blastGraphic = pgm_read_word_near(blastMap); - for (int8 i=0; i<8; ++i) { // 8 pixels wide... - if ((blastGraphic&blastMask)!=0) { - // Set shield pixel to 0 where there's a 1 in the source graphic - int px = x+i; - if ((px>=0) and (px<=31)) { - byte pixelMask = 0xfc; - if (px > 15) { - px &= 15; - pixelMask = 0xf3; - } - unsigned int s = spriteMem+(py*16)+px; - GD.wr(s,GD.rd(s)&pixelMask); - } - } - blastMask >>= 1; - } - } - ++blastMap; - } - - } - return y; -} +#include "game.h" + +SPI spigraphics(ARD_MOSI, ARD_MISO, ARD_SCK); // mosi, miso, sclk + +typedef prog_uint8_t char_data; +typedef prog_uint16_t sprite_data; + +extern GDClass GD; +/*--------------------------------------------- + Graphics - made by typing in the hex... :-) +---------------------------------------------*/ +static PROGMEM sprite_data invaderT[] = { + 0x0c00, 0x0c00, + 0x1e00, 0x1e00, + 0x3f00, 0x3f00, + 0x6d80, 0x6d80, + 0x7f80, 0x7f80, + 0x1200, 0x2d00, + 0x2d00, 0x4080, + 0x5280, 0x2100 +}; +static PROGMEM sprite_data invaderM[] = { + 0x2080, 0x2080, + 0x9120, 0x1100, + 0xbfa0, 0x3f80, + 0xeee0, 0x6ec0, + 0xffe0, 0xffe0, + 0x7fc0, 0xbfa0, + 0x2080, 0xa0a0, + 0x4040, 0x1b00 +}; +static PROGMEM sprite_data invaderB[] = { + 0x0f00, 0x0f00, + 0x7fe0, 0x7fe0, + 0xfff0, 0xfff0, + 0xe670, 0xe670, + 0xfff0, 0xfff0, + 0x1980, 0x1980, + 0x36c0, 0x6660, + 0xc030, 0x30c0 +}; +static PROGMEM sprite_data invader_explosion[] = { + 0x0880, + 0x4510, + 0x2020, + 0x1040, + 0xc018, + 0x1040, + 0x2520, + 0x4890 +}; +static PROGMEM sprite_data player[] = { + 0x0200, 0x1004, 0x0200, + 0x0700, 0x8219, 0x0010, + 0x0700, 0x10c0, 0x02a0, + 0x7ff0, 0x0202, 0x1200, + 0xfff8, 0x4b31, 0x01b0, + 0xfff8, 0x21c4, 0x45a8, + 0xfff8, 0x1ff0, 0x1fe4, + 0xfff8, 0x37f2, 0x3ff5 +}; +static PROGMEM sprite_data bullet[] = { + 0x0200, + 0x0200, + 0x0200, + 0x0200, + 0x0000, + 0x0000, + 0x0000, + 0x0000 +}; +static PROGMEM sprite_data bullet_blast[] = { + 0x1120, + 0x0440, + 0x0fc0, + 0x1fe0, + 0x1fe0, + 0x0fc0, + 0x0480, + 0x1220 +}; +static PROGMEM sprite_data saucer[] = { + 0x0000, 0x1281, 0x4800, + 0x07e0, 0x0806, 0x1000, + 0x1ff8, 0x51e3, 0x0000, + 0x3ffc, 0x03f9, 0xc800, + 0x6db6, 0x0754, 0xe400, + 0xffff, 0x11f1, 0x8000, + 0x399c, 0x40a3, 0x1000, + 0x1008, 0x1110, 0x8000 +}; +static PROGMEM sprite_data saucerScore[] = { + 0x007c, 0x1038, 0x107c, 0x7c38, + 0x0040, 0x3044, 0x3040, 0x0444, + 0x0078, 0x104c, 0x1078, 0x084c, + 0x0004, 0x1054, 0x1004, 0x1854, + 0x0004, 0x1064, 0x1004, 0x0464, + 0x0044, 0x1044, 0x1044, 0x4444, + 0x0038, 0x3838, 0x3838, 0x3838, + 0x0000, 0x0000, 0x0000, 0x0000 +}; +static PROGMEM sprite_data saucerZero[] = { + 0x3800, + 0x4400, + 0x4c00, + 0x5400, + 0x6400, + 0x4400, + 0x3800, + 0x0000 +}; +static PROGMEM sprite_data zigzagBomb[] = { + 0x0200, 0x0400, 0x0200, 0x0100, + 0x0400, 0x0300, 0x0100, 0x0200, + 0x0200, 0x0100, 0x0200, 0x0400, + 0x0100, 0x0200, 0x0400, 0x0200, + 0x0200, 0x0400, 0x0200, 0x0100, + 0x0400, 0x0200, 0x0100, 0x0200, + 0x0100, 0x0100, 0x0200, 0x0400, + 0x0000, 0x0000, 0x0000, 0x0000 +}; +static PROGMEM sprite_data barBomb[] = { + 0x0200, 0x0200, 0x0200, 0x0700, + 0x0200, 0x0200, 0x0200, 0x0200, + 0x0200, 0x0200, 0x0700, 0x0200, + 0x0200, 0x0700, 0x0200, 0x0200, + 0x0200, 0x0200, 0x0200, 0x0200, + 0x0700, 0x0200, 0x0200, 0x0200, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 +}; +static PROGMEM sprite_data diagBomb[] = { + 0x0200, 0x0200, 0x0200, 0x0300, + 0x0200, 0x0200, 0x0200, 0x0600, + 0x0200, 0x0600, 0x0200, 0x0200, + 0x0200, 0x0300, 0x0200, 0x0300, + 0x0200, 0x0200, 0x0200, 0x0600, + 0x0200, 0x0600, 0x0200, 0x0200, + 0x0200, 0x0300, 0x0200, 0x0200, + 0x0000, 0x0000, 0x0000, 0x0000 +}; +static PROGMEM sprite_data bomb_blast[] = { + 0x0100, + 0x0440, + 0x01a0, + 0x03c0, + 0x05c0, + 0x03e0, + 0x05c0, + 0x02a0 +}; + +static PROGMEM sprite_data shield[] = { + 0x0fff, 0xc000, + 0x1fff, 0xe000, + 0x3fff, 0xf000, + 0x7fff, 0xf800, + 0xffff, 0xfc00, + 0xffff, 0xfc00, + 0xffff, 0xfc00, + 0xffff, 0xfc00, + 0xffff, 0xfc00, + 0xffff, 0xfc00, + 0xffff, 0xfc00, + 0xffff, 0xfc00, + 0xfe03, 0xfc00, + 0xfc01, 0xfc00, + 0xf800, 0xfc00, + 0xf800, 0xfc00 +}; + +/*--------------------------------------------- + Turn raw data into Gameduino sprites + + We're using four color sprites so each + sprite can contain four images. This + function interleaves the data... +---------------------------------------------*/ +void makeSprite(byte index, byte height, const sprite_data* g1, byte s1=1, const sprite_data* g2=0, byte s2=0, const sprite_data* g3=0, byte s3=0, const sprite_data* g4=0, byte s4=0) +{ + const unsigned int topBit = 0x8000; + unsigned int d1=0,d2=0,d3=0,d4=0; + unsigned int dest = RAM_SPRIMG+(index*256); + for (byte i=0; i<height; ++i) { // Space invaders are only 8 pixels tall + d1 = *g1; g1 += s1; + if (g2) { d2 = *g2; g2 += s2; } + if (g3) { d3 = *g3; g3 += s3; } + if (g4) { d4 = *g4; g4 += s4; } + for (byte j=0; j<16; ++j) { + unsigned int m1 = (d1&topBit)>>15; + unsigned int m2 = (d2&topBit)>>13; + unsigned int m3 = (d3&topBit)>>11; + unsigned int m4 = (d4&topBit)>>9; + GD.wr(dest++,m1+m2+m3+m4); + d1 <<= 1; + d2 <<= 1; + d3 <<= 1; + d4 <<= 1; + } + } +} +void makeInvader(byte gr, const sprite_data *data) +{ + makeSprite(gr,8,data,2,data+1,2,invader_explosion,1); +} +void makeSp3(byte gr, const sprite_data *d) +{ + makeSprite(gr,8, d,3, d+1,3, d+2,3); +} +void makeSp4(byte gr, const sprite_data *d) +{ + makeSprite(gr,8, d,4, d+1,4, d+2,4, d+3,4); +} + +/*--------------------------------------------- + Char data +---------------------------------------------*/ +static PROGMEM char_data floorChar[] = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xff, + 0x00 +}; +static PROGMEM char_data playerLeft[] = { + 0x02, + 0x07, + 0x07, + 0x7f, + 0xff, + 0xff, + 0xff, + 0xff +}; +static PROGMEM char_data playerRight[] = { + 0x00, + 0x00, + 0x00, + 0xf0, + 0xf8, + 0xf8, + 0xf8, + 0xf8 +}; + +/*--------------------------------------------- + Make a character +---------------------------------------------*/ +static PROGMEM prog_uint8_t stretch[16] = { + 0x00, 0x03, 0x0c, 0x0f, + 0x30, 0x33, 0x3c, 0x3f, + 0xc0, 0xc3, 0xcc, 0xcf, + 0xf0, 0xf3, 0xfc, 0xff +}; +static void makeChar(byte index, const char_data *ch, unsigned int color) +{ + // Bitmap + GD.__wstart(RAM_CHR+(16*index)); + for (int i=0; i<8; i++) { + byte b = *ch++; + spigraphics.write((*stretch+(b >> 4))); + spigraphics.write((*stretch+(b & 15))); + } + GD.__end(); + // Colors + GD.setpal((4*index)+3, color); +} + +/*--------------------------------------------- + Make all the game sprites +---------------------------------------------*/ +void makeGraphics() +{ + // Sprites + makeInvader(GR_INVADER_T,invaderT); + makeInvader(GR_INVADER_M,invaderM); + makeInvader(GR_INVADER_B,invaderB); + makeSp3(GR_PLAYER,player); + makeSprite(GR_BULLET,8,bullet,1,bullet_blast,1); + makeSprite(GR_BULLET,8,bullet,1,bullet_blast,1, saucerZero,1); + makeSp3(GR_SAUCER,saucer); + makeSp4(GR_BOMB_ZIGZAG,zigzagBomb); + makeSp4(GR_BOMB_BARS, barBomb); + makeSp4(GR_BOMB_DIAG, diagBomb); + makeSp4(GR_SAUCER_SCORE,saucerScore); + makeSprite(GR_BOMB_OTHER,8,bomb_blast,1); + GD.wr16(PALETTE4A+0,0x8000); // Transparent + GD.wr16(PALETTE4A+2,0x7fff); // White + // Charset + GD.ascii(); + //const unsigned int red = 0x7c00; + const unsigned int green = 0x03e0; + makeChar(CH_FLOOR,floorChar,green); + makeChar(CH_PLAYERL,playerLeft,green); + makeChar(CH_PLAYERR,playerRight,green); +} + + +/*--------------------------------------------------- + The shields are sprites but we use them as bitmaps + so we need to be able to shoot/bomb/rebuild them + on demand. +---------------------------------------------------*/ +void remakeShields() +{ + for (int i=0; i<4; ++i) { + makeSprite(GR_SHIELD1+i,16,shield,2,shield+1,2); + } +} + +int8 zapShield(int n, int8 x, bool withBullet) +{ + int y = 0; + if ((n >= 0) and (n <= 3)) { + n += GR_SHIELD1; + const unsigned int spriteMem = RAM_SPRIMG+(n*256); + int col = x+6; // The pixels in the bullet are in column 6 of the graphic + if (col < 0 ) col = 0; + if (col > 31) col = 31; + // Scan the shield and find the top/bottom pixel in column 'x' + byte pixelMask = 0x03; + if (col > 15) { + pixelMask = 0x0c; + col &= 15; + } + unsigned int s = spriteMem+col; + const sprite_data *blastMap = bullet_blast; + if (withBullet) { + // Go from the top, find lowest pixel + for (int8 r=0; r<16; ++r) { + if ((GD.rd(s)&pixelMask)!=0) { + y = r; + } + s += 16; + } + x += 3; + y -= 5; + } + else { + // Go from the bottom, find highest pixel + y = 16; + s += 256; + int8 offset = 3; + for (int8 r=0; r<16; ++r) { + s -= 16; + // Bombs are wider...we check three columns + if ((GD.rd(s)&pixelMask)!=0) { + y = 15-r; + offset = 2; + } + else if ((col!=0) and ((GD.rd(s-1)&pixelMask)!=0)) { + y = 15-r; + offset = 1; + } + else if ((col!=31) and ((GD.rd(s+1)&pixelMask)!=0)) { + y = 15-r; + offset = 3; + } + } + x += offset; + y -= 4; + blastMap = bomb_blast; + } + // Blast a hole in it + for (int8 j=0; j<8; ++j) { // 8 lines tall + const int py = y+j; + if ((py>=0) and (py<=15)) { + unsigned int blastMask = 0x1000; + unsigned int blastGraphic = pgm_read_word_near(blastMap); + for (int8 i=0; i<8; ++i) { // 8 pixels wide... + if ((blastGraphic&blastMask)!=0) { + // Set shield pixel to 0 where there's a 1 in the source graphic + int px = x+i; + if ((px>=0) and (px<=31)) { + byte pixelMask = 0xfc; + if (px > 15) { + px &= 15; + pixelMask = 0xf3; + } + unsigned int s = spriteMem+(py*16)+px; + GD.wr(s,GD.rd(s)&pixelMask); + } + } + blastMask >>= 1; + } + } + ++blastMap; + } + + } + return y; +}
--- a/graphics.h Sat Sep 29 13:01:42 2012 +0000 +++ b/graphics.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,65 +1,65 @@ -/*--------------------------------------------- - Send all graphics to the Gameduino ----------------------------------------------*/ -#ifndef INVADER_GRAPHICS -#define INVADER_GRAPHICS -#include "shield.h" -#include "mbed.h" -#include "arduino.h" -void makeGraphics(); - -/*--------------------------------------------- - Identifiers for custom chars ----------------------------------------------*/ -enum char_id { - CH_FLOOR=128, - CH_PLAYERL, - CH_PLAYERR -}; -/*--------------------------------------------- - Identifiers for each sprite graphic - - Sprites are made in four color mode so - each 'sprite' can have four images inside - it. - - The first image is usually the 'normal' - (eg. player/saucer) one and the third is - usually blank (so you can hide the sprite). - - The other two are used for animations - (eg. invaders) and explosions (eg. player) ----------------------------------------------*/ -enum graphic_id { - // Invader sprites - Top, Middle, Bottom, two animation frames each... - GR_INVADER_T, - GR_INVADER_M, - GR_INVADER_B, - GR_BOMB_ZIGZAG, // Zigzag bomb - GR_BOMB_BARS, // The bomb with rolling horizontal bars across it - GR_BOMB_DIAG, // The bomb with diagonal bars across it - GR_BOMB_OTHER, // Other bomb graphics (explosion and blank) - // The player (with bullet) - GR_PLAYER, - GR_BULLET, // nb. Has a '0' in frame 2 (for the saucer...) - // The saucer at the top - GR_SAUCER, - GR_SAUCER_SCORE, - // Shields - GR_SHIELD1, - GR_SHIELD2, - GR_SHIELD3, - GR_SHIELD4 -}; - -/*--------------------------------------------- - Functions for wrecking/rebuilding shields ----------------------------------------------*/ -void remakeShields(); - -// Damage the shield with either a bomb or a bullet (ie. above/below) -// n=shield number [0..4], x is relative to the shield's top-left corner -int8 zapShield(byte n, int8 x, bool withBullet); // Return Y coordinate of blast - -#endif - +/*--------------------------------------------- + Send all graphics to the Gameduino +---------------------------------------------*/ +#ifndef INVADER_GRAPHICS +#define INVADER_GRAPHICS +#include "shield.h" +#include "mbed.h" +#include "arduino.h" +void makeGraphics(); + +/*--------------------------------------------- + Identifiers for custom chars +---------------------------------------------*/ +enum char_id { + CH_FLOOR=128, + CH_PLAYERL, + CH_PLAYERR +}; +/*--------------------------------------------- + Identifiers for each sprite graphic + + Sprites are made in four color mode so + each 'sprite' can have four images inside + it. + + The first image is usually the 'normal' + (eg. player/saucer) one and the third is + usually blank (so you can hide the sprite). + + The other two are used for animations + (eg. invaders) and explosions (eg. player) +---------------------------------------------*/ +enum graphic_id { + // Invader sprites - Top, Middle, Bottom, two animation frames each... + GR_INVADER_T, + GR_INVADER_M, + GR_INVADER_B, + GR_BOMB_ZIGZAG, // Zigzag bomb + GR_BOMB_BARS, // The bomb with rolling horizontal bars across it + GR_BOMB_DIAG, // The bomb with diagonal bars across it + GR_BOMB_OTHER, // Other bomb graphics (explosion and blank) + // The player (with bullet) + GR_PLAYER, + GR_BULLET, // nb. Has a '0' in frame 2 (for the saucer...) + // The saucer at the top + GR_SAUCER, + GR_SAUCER_SCORE, + // Shields + GR_SHIELD1, + GR_SHIELD2, + GR_SHIELD3, + GR_SHIELD4 +}; + +/*--------------------------------------------- + Functions for wrecking/rebuilding shields +---------------------------------------------*/ +void remakeShields(); + +// Damage the shield with either a bomb or a bullet (ie. above/below) +// n=shield number [0..4], x is relative to the shield's top-left corner +int8 zapShield(byte n, int8 x, bool withBullet); // Return Y coordinate of blast + +#endif +
--- a/j1.h Sat Sep 29 13:01:42 2012 +0000 +++ b/j1.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,99 +1,99 @@ -static PROGMEM prog_uchar copper_code[] = { -0xBE,0x15, -0xF3,0xFF, -0x00,0x66, -0x00,0x60, -0x0C,0x7C, -0x23,0x60, -0x0F,0x71, -0x01,0x80, -0x0F,0x72, -0x81,0x60, -0x00,0x6C, -0x80,0x61, -0x87,0x55, -0x83,0x55, -0x00,0x6E, -0x0F,0x74, -0x81,0x61, -0x00,0x6E, -0x81,0x61, -0x87,0x55, -0x85,0x55, -0x85,0x15, -0xFF,0xFF, -0x82,0x55, -0x0F,0x77, -0x96,0xA8, -0x89,0x15, -0x99,0x55, -0x83,0x15, -0x9B,0x55, -0x01,0x80, -0x99,0x55, -0x03,0x62, -0x96,0xA8, -0x90,0x15, -0x9B,0x55, -0x0F,0x77, -0x9D,0x55, -0x9D,0x55, -0x00,0x6E, -0x0F,0x74, -0x9E,0x55, -0xA5,0x55, -0xA5,0x15, -0x81,0x55, -0x92,0xA8, -0x83,0x55, -0x00,0x67, -0x00,0x66, -0xBD,0x35, -0x81,0x60, -0x92,0xA8, -0x85,0x55, -0x00,0xBF, -0x03,0x62, -0x83,0x55, -0x81,0x60, -0x11,0xA8, -0x85,0x55, -0x13,0xA8, -0x85,0x55, -0x0C,0x70, -0x2C,0x81, -0x96,0x55, -0xC4,0x35, -0x90,0xA8, -0xA1,0x55, -0xDA,0x15, -0x41,0x80, -0xA3,0x55, -0xCE,0x35, -0x99,0x55, -0x87,0x55, -0x89,0x55, -0x96,0x55, -0xCE,0x35, -0x03,0x80, -0x9F,0x55, -0x42,0x80, -0xA3,0x55, -0xD5,0x35, -0x9E,0x55, -0x9D,0x55, -0xA5,0x55, -0x85,0x55, -0x43,0x80, -0xA3,0x55, -0xDA,0x35, -0xA9,0x55, -0x90,0x55, -0xAC,0x55, -0xFF,0xFF, -0x82,0x55, -0x98,0xA8, -0x90,0x55, -0xBE,0x15, -0x0C,0x70, +static PROGMEM prog_uchar copper_code[] = { +0xBE,0x15, +0xF3,0xFF, +0x00,0x66, +0x00,0x60, +0x0C,0x7C, +0x23,0x60, +0x0F,0x71, +0x01,0x80, +0x0F,0x72, +0x81,0x60, +0x00,0x6C, +0x80,0x61, +0x87,0x55, +0x83,0x55, +0x00,0x6E, +0x0F,0x74, +0x81,0x61, +0x00,0x6E, +0x81,0x61, +0x87,0x55, +0x85,0x55, +0x85,0x15, +0xFF,0xFF, +0x82,0x55, +0x0F,0x77, +0x96,0xA8, +0x89,0x15, +0x99,0x55, +0x83,0x15, +0x9B,0x55, +0x01,0x80, +0x99,0x55, +0x03,0x62, +0x96,0xA8, +0x90,0x15, +0x9B,0x55, +0x0F,0x77, +0x9D,0x55, +0x9D,0x55, +0x00,0x6E, +0x0F,0x74, +0x9E,0x55, +0xA5,0x55, +0xA5,0x15, +0x81,0x55, +0x92,0xA8, +0x83,0x55, +0x00,0x67, +0x00,0x66, +0xBD,0x35, +0x81,0x60, +0x92,0xA8, +0x85,0x55, +0x00,0xBF, +0x03,0x62, +0x83,0x55, +0x81,0x60, +0x11,0xA8, +0x85,0x55, +0x13,0xA8, +0x85,0x55, +0x0C,0x70, +0x2C,0x81, +0x96,0x55, +0xC4,0x35, +0x90,0xA8, +0xA1,0x55, +0xDA,0x15, +0x41,0x80, +0xA3,0x55, +0xCE,0x35, +0x99,0x55, +0x87,0x55, +0x89,0x55, +0x96,0x55, +0xCE,0x35, +0x03,0x80, +0x9F,0x55, +0x42,0x80, +0xA3,0x55, +0xD5,0x35, +0x9E,0x55, +0x9D,0x55, +0xA5,0x55, +0x85,0x55, +0x43,0x80, +0xA3,0x55, +0xDA,0x35, +0xA9,0x55, +0x90,0x55, +0xAC,0x55, +0xFF,0xFF, +0x82,0x55, +0x98,0xA8, +0x90,0x55, +0xBE,0x15, +0x0C,0x70, }; \ No newline at end of file
--- a/joystick.cpp Sat Sep 29 13:01:42 2012 +0000 +++ b/joystick.cpp Thu Dec 20 21:33:52 2012 +0000 @@ -1,305 +1,305 @@ -/*------------------------------------------------------------ - Universal joystick driver for Gameduino - - http://www.artlum.com/gameduino/gameduino.html#joystick -------------------------------------------------------------*/ -#include "joystick.h" -#include "GD.h" -//#include <SPI.h> -//#include <GD.h> - -// Change this line to enable your customized -// joystick configuration -// "1" = custom configuration -// "0" = default (Sparkfun joystick) -// -#define CUSTOM_JOYSTICK 0 - - -#if CUSTOM_JOYSTICK -/*------------------------------------------------------------------ - Custom joystick configuration. This is what you need to - hack to get your joystick working. - - The joystick layout can be customized by commenting - or uncommenting the lines below. - - Notes - ----- - To specify an analog pin for a button add "A0" to - the pin number, eg. Analog pin 4 is "A0+4" - - When connecting a Joystick to an Arduino: - * Digital pins 0/1 are used for system stuff. - * Gameduino uses pins 2/9/10/11/13 for SPI interface - - That leaves digital pins 3/4/5/6/7/8/10 free, plus - all the analog pins (which work as digital pins, too!) -------------------------------------------------------------------*/ - -// eg. The following layout is good for an NES controller - -// Connect the four buttons to pins 3/4/5/6 -#define BUTTON_A_PIN 3 -#define BUTTON_B_PIN 4 -//#define BUTTON_C_PIN ? -//#define BUTTON_X_PIN ? -//#define BUTTON_Y_PIN ? -//#define BUTTON_Z_PIN ? -#define BUTTON_ST_PIN 5 -#define BUTTON_SEL_PIN 6 - -// Connect the DPAD L/R/U/D to analog pins 2/3/4/5 -#define STICK_LEFT_PIN (A0+2) -#define STICK_RIGHT_PIN (A0+3) -#define STICK_UP_PIN (A0+4) -#define STICK_DOWN_PIN (A0+5) - -// Analog input is disabled... -//#define ANALOG_X_PIN ? -//#define ANALOG_Y_PIN ? - -// Make the DPAD emulate an analog joystick -#define DIGITAL_EMULATE_ANALOG -//#define ANALOG_EMULATE_DIGITAL - -#else -/*------------------------------------------------------------------ - Default: Sparkfun joystick -------------------------------------------------------------------*/ -#define BUTTON_A_PIN 3 -#define BUTTON_B_PIN 4 -// #define BUTTON_C_PIN ? -// nb. Button X is pin 7 if you've hacked your board -#define BUTTON_X_PIN 2 -// #define BUTTON_Y_PIN ? -// #define BUTTON_Z_PIN ? -#define BUTTON_ST_PIN 5 -#define BUTTON_SEL_PIN 6 - -// Digital joystick/DPAD -//#define STICK_LEFT_PIN 11 -//#define STICK_RIGHT_PIN 12 -//#define STICK_UP_PIN 13 -//#define STICK_DOWN_PIN 14 - -// Analog joystick is enabled -#define ANALOG_X_PIN 0 -#define ANALOG_Y_PIN 1 - -// Enable digital joystick emulation -// #define DIGITAL_EMULATE_ANALOG -#define ANALOG_EMULATE_DIGITAL - -#endif - -/*------------------------------------------------------ - Stop hacking now...! - - There are no user-servicable parts below this line -------------------------------------------------------*/ -#define STICK_LEFT_BIT 0x01 -#define STICK_RIGHT_BIT 0x02 -#define STICK_UP_BIT 0x04 -#define STICK_DOWN_BIT 0x08 -#define ANALOG_STICK_BIT 0x80 -#define STICK_INFO_MASK (ANALOG_STICK_BIT) - -/*--------------------------------------------- - Joystick reader ----------------------------------------------*/ -static PROGMEM prog_uchar joystickPinList[] = { -#ifdef BUTTON_A_PIN - BUTTON_A_PIN -#endif -#ifdef BUTTON_B_PIN - , BUTTON_B_PIN -#endif -#ifdef BUTTON_C_PIN - , BUTTON_C_PIN -#endif -#ifdef BUTTON_X_PIN - , BUTTON_X_PIN -#endif -#ifdef BUTTON_Y_PIN - , BUTTON_Y_PIN -#endif -#ifdef BUTTON_Z_PIN - , BUTTON_Z_PIN -#endif -#ifdef BUTTON_ST_PIN - , BUTTON_ST_PIN -#endif -#ifdef BUTTON_SEL_PIN - , BUTTON_SEL_PIN -#endif -#ifdef STICK_LEFT_PIN - , STICK_LEFT_PIN, - STICK_RIGHT_PIN, - STICK_UP_PIN, - STICK_DOWN_PIN -#endif -}; -Joystick::Joystick() -{ - // set up digital pins for dpad and buttons - // const prog_uchar *pin = joystickPinList; - for (byte i=0; i<sizeof(joystickPinList); ++i) { - byte p = pgm_read_byte(joystickPinList+i); - //pinMode(p,INPUT); - //digitalWrite(p,HIGH); - } - stickX = stickY = 0; - xCal = yCal = 0; - buttons = prev = dpad = 0; - -#ifdef ANALOG_X_PIN - dpad |= ANALOG_STICK_BIT; -#endif -} -bool Joystick::hasAnalogStick() -{ - return (dpad&ANALOG_STICK_BIT)!=0; -} -void Joystick::recalibrate() -{ - read(); - xCal = stickX; - yCal = stickY; -} -static char stickCalc(int a, char cal) -{ - //a = ((analogRead(a)-512)/4)-cal; - if (a < -128) a = -128; - if (a > 127) a = 127; - return char(a); -} -void Joystick::read() -{ - // Joystick buttons - prev = buttons; - buttons = 0; - #ifdef BUTTON_A_PIN - // if (digitalRead(BUTTON_A_PIN)==LOW) { buttons |= buttonA; } - #endif - #ifdef BUTTON_B_PIN - // if (digitalRead(BUTTON_B_PIN)==LOW) { buttons |= buttonB; } - #endif - #ifdef BUTTON_C_PIN -// if (digitalRead(BUTTON_C_PIN)==LOW) { buttons |= buttonC; } - #endif - #ifdef BUTTON_X_PIN - // if (digitalRead(BUTTON_X_PIN)==LOW) { buttons |= buttonX; } - #endif - #ifdef BUTTON_Y_PIN -// if (digitalRead(BUTTON_Y_PIN)==LOW) { buttons |= buttonY; } - #endif - #ifdef BUTTON_Z_PIN - // if (digitalRead(BUTTON_Z_PIN)==LOW) { buttons |= buttonZ; } - #endif - #ifdef BUTTON_SEL_PIN - // if (digitalRead(BUTTON_SEL_PIN)==LOW){ buttons |= buttonSelect; } - #endif - #ifdef BUTTON_ST_PIN - // if (digitalRead(BUTTON_ST_PIN)==LOW){ buttons |= buttonStart; } - #endif - - // Digital joystick/dpad - dpad &= STICK_INFO_MASK; // The top bits are informational...preserve them - #ifdef STICK_LEFT_PIN - // if (!digitalRead(STICK_LEFT_PIN)) { dpad |= STICK_LEFT_BIT; } - // if (!digitalRead(STICK_RIGHT_PIN)) { dpad |= STICK_RIGHT_BIT; } - // if (!digitalRead(STICK_UP_PIN)) { dpad |= STICK_UP_BIT; } - // if (!digitalRead(STICK_DOWN_PIN)) { dpad |= STICK_DOWN_BIT; } - #ifdef DIGITAL_EMULATE_ANALOG - stickX = 0; - if (dpad&STICK_LEFT_BIT) { stickX = -127; } - else if (dpad&STICK_RIGHT_BIT) { stickX = 127; } - stickY = 0; - if (dpad&STICK_UP_BIT) { stickY = 127; } - else if (dpad&STICK_DOWN_BIT) { stickY = -127; } - #endif - #endif - - // Analog stick - #ifdef ANALOG_X_PIN - stickX = stickCalc(ANALOG_X_PIN,xCal); - #endif - #ifdef ANALOG_Y_PIN - stickY = stickCalc(ANALOG_Y_PIN,yCal); - #endif - #ifdef ANALOG_EMULATE_DIGITAL - if (stickX < -40) { dpad |= STICK_LEFT_BIT; } - else if (stickX > 40) { dpad |= STICK_RIGHT_BIT; } - if (stickY > 40) { dpad |= STICK_UP_BIT; } - else if (stickY < -40) { dpad |= STICK_DOWN_BIT; } - #endif -} - -/*-------------------------------------------------------- - Useful function to show joystick status on screen. - - Note: You won't make your program any smaller by - removing this - the Arduino compiler is really, - really good at discarding unused code. - - ie. If you're not calling Joystick::dump() then it - doesn't take up any space. Try it and see...! ---------------------------------------------------------*/ -// Formatted output of joystick position -static void jpos(int v, char *s, char t) -{ - *s++ = t; - *s++ = ':'; - boolean neg = (v<0); - if (neg) { - v = -v; - } - char *o = s; - int m = 1000; - while (m != 0) { - int d = v/m; - *o++ = d+'0'; - v -= d*m; - m /= 10; - } - *o-- = 0; - // Remove leading zeros - while ((s<o) and (*s=='0')) { - *s++ = ' '; - } - if (neg) { - s[-1] = '-'; - } -} -void Joystick::dump(int sx, int sy) -{ - char temp[32]; - if (hasAnalogStick()) { - jpos(analogX(),temp,'X'); - GD.putstr(sx,sy++,temp); - jpos(analogY(),temp,'Y'); - GD.putstr(sx,sy++,temp); - } - temp[0] = 'D'; - temp[1] = ':'; - char *s = temp+2; - *s++ = left() ?'L':'.'; - *s++ = right() ?'R':'.'; - *s++ = up() ?'U':'.'; - *s++ = down() ?'D':'.'; - *s = 0; - GD.putstr(sx,sy++,temp); - temp[0] = 'B'; - s = temp+2; - *s++ = (buttons&buttonSelect)?'L':'.'; - *s++ = (buttons&buttonStart)?'S':'.'; - *s++ = (buttons&buttonZ)?'Z':'.'; - *s++ = (buttons&buttonY)?'Y':'.'; - *s++ = (buttons&buttonX)?'X':'.'; - *s++ = (buttons&buttonC)?'C':'.'; - *s++ = (buttons&buttonB)?'B':'.'; - *s++ = (buttons&buttonA)?'A':'.'; - *s = 0; - GD.putstr(sx,sy++,temp); +/*------------------------------------------------------------ + Universal joystick driver for Gameduino + + http://www.artlum.com/gameduino/gameduino.html#joystick +------------------------------------------------------------*/ +#include "joystick.h" +#include "GD.h" +//#include <SPI.h> +//#include <GD.h> + +// Change this line to enable your customized +// joystick configuration +// "1" = custom configuration +// "0" = default (Sparkfun joystick) +// +#define CUSTOM_JOYSTICK 0 +extern GDClass GD; + +#if CUSTOM_JOYSTICK +/*------------------------------------------------------------------ + Custom joystick configuration. This is what you need to + hack to get your joystick working. + + The joystick layout can be customized by commenting + or uncommenting the lines below. + + Notes + ----- + To specify an analog pin for a button add "A0" to + the pin number, eg. Analog pin 4 is "A0+4" + + When connecting a Joystick to an Arduino: + * Digital pins 0/1 are used for system stuff. + * Gameduino uses pins 2/9/10/11/13 for SPI interface + + That leaves digital pins 3/4/5/6/7/8/10 free, plus + all the analog pins (which work as digital pins, too!) +------------------------------------------------------------------*/ + +// eg. The following layout is good for an NES controller + +// Connect the four buttons to pins 3/4/5/6 +#define BUTTON_A_PIN 3 +#define BUTTON_B_PIN 4 +//#define BUTTON_C_PIN ? +//#define BUTTON_X_PIN ? +//#define BUTTON_Y_PIN ? +//#define BUTTON_Z_PIN ? +#define BUTTON_ST_PIN 5 +#define BUTTON_SEL_PIN 6 + +// Connect the DPAD L/R/U/D to analog pins 2/3/4/5 +#define STICK_LEFT_PIN (A0+2) +#define STICK_RIGHT_PIN (A0+3) +#define STICK_UP_PIN (A0+4) +#define STICK_DOWN_PIN (A0+5) + +// Analog input is disabled... +//#define ANALOG_X_PIN ? +//#define ANALOG_Y_PIN ? + +// Make the DPAD emulate an analog joystick +#define DIGITAL_EMULATE_ANALOG +//#define ANALOG_EMULATE_DIGITAL + +#else +/*------------------------------------------------------------------ + Default: Sparkfun joystick +------------------------------------------------------------------*/ +#define BUTTON_A_PIN 3 +#define BUTTON_B_PIN 4 +// #define BUTTON_C_PIN ? +// nb. Button X is pin 7 if you've hacked your board +#define BUTTON_X_PIN 2 +// #define BUTTON_Y_PIN ? +// #define BUTTON_Z_PIN ? +#define BUTTON_ST_PIN 5 +#define BUTTON_SEL_PIN 6 + +// Digital joystick/DPAD +//#define STICK_LEFT_PIN 11 +//#define STICK_RIGHT_PIN 12 +//#define STICK_UP_PIN 13 +//#define STICK_DOWN_PIN 14 + +// Analog joystick is enabled +#define ANALOG_X_PIN 0 +#define ANALOG_Y_PIN 1 + +// Enable digital joystick emulation +// #define DIGITAL_EMULATE_ANALOG +#define ANALOG_EMULATE_DIGITAL + +#endif + +/*------------------------------------------------------ + Stop hacking now...! + + There are no user-servicable parts below this line +------------------------------------------------------*/ +#define STICK_LEFT_BIT 0x01 +#define STICK_RIGHT_BIT 0x02 +#define STICK_UP_BIT 0x04 +#define STICK_DOWN_BIT 0x08 +#define ANALOG_STICK_BIT 0x80 +#define STICK_INFO_MASK (ANALOG_STICK_BIT) + +/*--------------------------------------------- + Joystick reader +---------------------------------------------*/ +static PROGMEM prog_uchar joystickPinList[] = { +#ifdef BUTTON_A_PIN + BUTTON_A_PIN +#endif +#ifdef BUTTON_B_PIN + , BUTTON_B_PIN +#endif +#ifdef BUTTON_C_PIN + , BUTTON_C_PIN +#endif +#ifdef BUTTON_X_PIN + , BUTTON_X_PIN +#endif +#ifdef BUTTON_Y_PIN + , BUTTON_Y_PIN +#endif +#ifdef BUTTON_Z_PIN + , BUTTON_Z_PIN +#endif +#ifdef BUTTON_ST_PIN + , BUTTON_ST_PIN +#endif +#ifdef BUTTON_SEL_PIN + , BUTTON_SEL_PIN +#endif +#ifdef STICK_LEFT_PIN + , STICK_LEFT_PIN, + STICK_RIGHT_PIN, + STICK_UP_PIN, + STICK_DOWN_PIN +#endif +}; +Joystick::Joystick() +{ + // set up digital pins for dpad and buttons + // const prog_uchar *pin = joystickPinList; + for (byte i=0; i<sizeof(joystickPinList); ++i) { + byte p = pgm_read_byte(joystickPinList+i); + //pinMode(p,INPUT); + //digitalWrite(p,HIGH); + } + stickX = stickY = 0; + xCal = yCal = 0; + buttons = prev = dpad = 0; + +#ifdef ANALOG_X_PIN + dpad |= ANALOG_STICK_BIT; +#endif +} +bool Joystick::hasAnalogStick() +{ + return (dpad&ANALOG_STICK_BIT)!=0; +} +void Joystick::recalibrate() +{ + read(); + xCal = stickX; + yCal = stickY; +} +static char stickCalc(int a, char cal) +{ + //a = ((analogRead(a)-512)/4)-cal; + if (a < -128) a = -128; + if (a > 127) a = 127; + return char(a); +} +void Joystick::read() +{ + // Joystick buttons + prev = buttons; + buttons = 0; + #ifdef BUTTON_A_PIN + // if (digitalRead(BUTTON_A_PIN)==LOW) { buttons |= buttonA; } + #endif + #ifdef BUTTON_B_PIN + // if (digitalRead(BUTTON_B_PIN)==LOW) { buttons |= buttonB; } + #endif + #ifdef BUTTON_C_PIN +// if (digitalRead(BUTTON_C_PIN)==LOW) { buttons |= buttonC; } + #endif + #ifdef BUTTON_X_PIN + // if (digitalRead(BUTTON_X_PIN)==LOW) { buttons |= buttonX; } + #endif + #ifdef BUTTON_Y_PIN +// if (digitalRead(BUTTON_Y_PIN)==LOW) { buttons |= buttonY; } + #endif + #ifdef BUTTON_Z_PIN + // if (digitalRead(BUTTON_Z_PIN)==LOW) { buttons |= buttonZ; } + #endif + #ifdef BUTTON_SEL_PIN + // if (digitalRead(BUTTON_SEL_PIN)==LOW){ buttons |= buttonSelect; } + #endif + #ifdef BUTTON_ST_PIN + // if (digitalRead(BUTTON_ST_PIN)==LOW){ buttons |= buttonStart; } + #endif + + // Digital joystick/dpad + dpad &= STICK_INFO_MASK; // The top bits are informational...preserve them + #ifdef STICK_LEFT_PIN + // if (!digitalRead(STICK_LEFT_PIN)) { dpad |= STICK_LEFT_BIT; } + // if (!digitalRead(STICK_RIGHT_PIN)) { dpad |= STICK_RIGHT_BIT; } + // if (!digitalRead(STICK_UP_PIN)) { dpad |= STICK_UP_BIT; } + // if (!digitalRead(STICK_DOWN_PIN)) { dpad |= STICK_DOWN_BIT; } + #ifdef DIGITAL_EMULATE_ANALOG + stickX = 0; + if (dpad&STICK_LEFT_BIT) { stickX = -127; } + else if (dpad&STICK_RIGHT_BIT) { stickX = 127; } + stickY = 0; + if (dpad&STICK_UP_BIT) { stickY = 127; } + else if (dpad&STICK_DOWN_BIT) { stickY = -127; } + #endif + #endif + + // Analog stick + #ifdef ANALOG_X_PIN + stickX = stickCalc(ANALOG_X_PIN,xCal); + #endif + #ifdef ANALOG_Y_PIN + stickY = stickCalc(ANALOG_Y_PIN,yCal); + #endif + #ifdef ANALOG_EMULATE_DIGITAL + if (stickX < -40) { dpad |= STICK_LEFT_BIT; } + else if (stickX > 40) { dpad |= STICK_RIGHT_BIT; } + if (stickY > 40) { dpad |= STICK_UP_BIT; } + else if (stickY < -40) { dpad |= STICK_DOWN_BIT; } + #endif +} + +/*-------------------------------------------------------- + Useful function to show joystick status on screen. + + Note: You won't make your program any smaller by + removing this - the Arduino compiler is really, + really good at discarding unused code. + + ie. If you're not calling Joystick::dump() then it + doesn't take up any space. Try it and see...! +--------------------------------------------------------*/ +// Formatted output of joystick position +static void jpos(int v, char *s, char t) +{ + *s++ = t; + *s++ = ':'; + boolean neg = (v<0); + if (neg) { + v = -v; + } + char *o = s; + int m = 1000; + while (m != 0) { + int d = v/m; + *o++ = d+'0'; + v -= d*m; + m /= 10; + } + *o-- = 0; + // Remove leading zeros + while ((s<o) and (*s=='0')) { + *s++ = ' '; + } + if (neg) { + s[-1] = '-'; + } +} +void Joystick::dump(int sx, int sy) +{ + char temp[32]; + if (hasAnalogStick()) { + jpos(analogX(),temp,'X'); + GD.putstr(sx,sy++,temp); + jpos(analogY(),temp,'Y'); + GD.putstr(sx,sy++,temp); + } + temp[0] = 'D'; + temp[1] = ':'; + char *s = temp+2; + *s++ = left() ?'L':'.'; + *s++ = right() ?'R':'.'; + *s++ = up() ?'U':'.'; + *s++ = down() ?'D':'.'; + *s = 0; + GD.putstr(sx,sy++,temp); + temp[0] = 'B'; + s = temp+2; + *s++ = (buttons&buttonSelect)?'L':'.'; + *s++ = (buttons&buttonStart)?'S':'.'; + *s++ = (buttons&buttonZ)?'Z':'.'; + *s++ = (buttons&buttonY)?'Y':'.'; + *s++ = (buttons&buttonX)?'X':'.'; + *s++ = (buttons&buttonC)?'C':'.'; + *s++ = (buttons&buttonB)?'B':'.'; + *s++ = (buttons&buttonA)?'A':'.'; + *s = 0; + GD.putstr(sx,sy++,temp); } \ No newline at end of file
--- a/joystick.h Sat Sep 29 13:01:42 2012 +0000 +++ b/joystick.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,73 +1,73 @@ -#ifndef JOYSTICK_INCLUDED -#define JOYSTICK_INCLUDED -/*------------------------------------------------------------ - Universal joystick driver for Gameduino - - http://www.artlum.com/gameduino/gameduino.html#joystick - - Important: Read the file "read_me_first.txt" *before* - writing any code. Do it NOW! - - Thanks go to 'Guy" for his contributions to this -------------------------------------------------------------*/ - -//#include "WProgram.h" -#include "arduino.h" -class Joystick { - byte buttons; // State of buttons, packed into a byte - byte prev; // State of the buttons on previous read - byte dpad; // State of Up/Down/Left/Right buttons plus some control flags - signed char stickX,stickY;// Analogue x/y position - char xCal,yCal; // Calibration -public: - // The constructor sets up the Arduino pins for input - // and calibrates the joystick using the current position - Joystick(); - - // Read the current state - void read(); - - // Return "true" if analog X/Y position is available - bool hasAnalogStick(); - -// Digital joystick functions - enum button_name { - buttonA = 0x01, - buttonB = 0x02, - buttonC = 0x04, - buttonX = 0x08, - buttonY = 0x10, - buttonZ = 0x20, - buttonStart = 0x40, - buttonSelect = 0x80 - }; - // Test a named button - // nb. You can combine button names to test multiple buttons at the same time - bool isPressed(byte n) { return (buttons&n)!=0; } - - // This tells you if a button changed between the last two calls to "read()" - bool changed(byte n) { return bool((buttons^prev)&n); } - - // Joystick up/down/left/right (or analog stick) - bool left() { return (dpad&0x01)!=0; } - bool right() { return (dpad&0x02)!=0; } - bool up() { return (dpad&0x04)!=0; } - bool down() { return (dpad&0x08)!=0; } - - -// Analog joystick functions - - // Force the analog joystick to recalibrate itself - void recalibrate(); - - // Current joystick position in range [-128..127] - char analogX() { return stickX; } - char analogY() { return stickY; } - -// For debugging - show all state onscreen at (x,y) - void dump(int x, int y); -}; - - -// JOYSTICK_INCLUDED -#endif +#ifndef JOYSTICK_INCLUDED +#define JOYSTICK_INCLUDED +/*------------------------------------------------------------ + Universal joystick driver for Gameduino + + http://www.artlum.com/gameduino/gameduino.html#joystick + + Important: Read the file "read_me_first.txt" *before* + writing any code. Do it NOW! + + Thanks go to 'Guy" for his contributions to this +------------------------------------------------------------*/ + +//#include "WProgram.h" +#include "arduino.h" +class Joystick { + byte buttons; // State of buttons, packed into a byte + byte prev; // State of the buttons on previous read + byte dpad; // State of Up/Down/Left/Right buttons plus some control flags + signed char stickX,stickY;// Analogue x/y position + char xCal,yCal; // Calibration +public: + // The constructor sets up the Arduino pins for input + // and calibrates the joystick using the current position + Joystick(); + + // Read the current state + void read(); + + // Return "true" if analog X/Y position is available + bool hasAnalogStick(); + +// Digital joystick functions + enum button_name { + buttonA = 0x01, + buttonB = 0x02, + buttonC = 0x04, + buttonX = 0x08, + buttonY = 0x10, + buttonZ = 0x20, + buttonStart = 0x40, + buttonSelect = 0x80 + }; + // Test a named button + // nb. You can combine button names to test multiple buttons at the same time + bool isPressed(byte n) { return (buttons&n)!=0; } + + // This tells you if a button changed between the last two calls to "read()" + bool changed(byte n) { return bool((buttons^prev)&n); } + + // Joystick up/down/left/right (or analog stick) + bool left() { return (dpad&0x01)!=0; } + bool right() { return (dpad&0x02)!=0; } + bool up() { return (dpad&0x04)!=0; } + bool down() { return (dpad&0x08)!=0; } + + +// Analog joystick functions + + // Force the analog joystick to recalibrate itself + void recalibrate(); + + // Current joystick position in range [-128..127] + char analogX() { return stickX; } + char analogY() { return stickY; } + +// For debugging - show all state onscreen at (x,y) + void dump(int x, int y); +}; + + +// JOYSTICK_INCLUDED +#endif
--- a/main.cpp Sat Sep 29 13:01:42 2012 +0000 +++ b/main.cpp Thu Dec 20 21:33:52 2012 +0000 @@ -1,53 +1,52 @@ -#include "mbed.h" -#include "GD.h" - - -/*--------------------------------------------------------- - A Space Invaders clone for Gameduino - - http://www.artlum.com/gameduino/gameduino.html#invaders - - Version 0.9 alpha - Still seme things to add - but I'm out of memory! - - Edit "joystick.cpp" if you have a custom joystick. ----------------------------------------------------------*/ - -#include <SPI.h> -#include <GD.h> -#include "game.h" -#include "arduino.h" - -void setup() { - GD.begin(); - makeGraphics(); - Coprocessor::reset(samplePlaybackBuffer); - randomSeed(GD.rd(FRAME)); - resetGameSounds(); - initGame(); -} - -void loop() { - GD.waitvblank(); - updateGame(); - updateGameSounds(); - - // Debugging/info - if (0) { - joystick.dump(0,33); // Show the joystick state - int yline = Coprocessor::yline(); - showNumber(yline,0,31); - } - // Screenshot when you press the select button - if (0 and joystick.isPressed(Joystick::buttonSelect)) { - sendScreenshot(); - } -} - - -int main() { - setup(); - while (1) { - loop(); - } +#include "mbed.h" +#include "GD.h" +#include "shield.h" +GDClass GD(ARD_MOSI, ARD_MISO, ARD_SCK, ARD_D9, USBTX, USBRX) ; + +/*--------------------------------------------------------- + A Space Invaders clone for Gameduino + + http://www.artlum.com/gameduino/gameduino.html#invaders + + Version 0.9 alpha - Still seme things to add + but I'm out of memory! + + Edit "joystick.cpp" if you have a custom joystick. +---------------------------------------------------------*/ + +#include "game.h" +#include "arduino.h" + +void setup() { + GD.begin(); + makeGraphics(); + Coprocessor::reset(samplePlaybackBuffer); + //randomSeed(GD.rd(FRAME)); + resetGameSounds(); + initGame(); +} + +void loop() { + GD.waitvblank(); + updateGame(); + updateGameSounds(); + + // Debugging/info + if (0) { + joystick.dump(0,33); // Show the joystick state + int yline = Coprocessor::yline(); + showNumber(yline,0,31); + } + // Screenshot when you press the select button + if (0 and joystick.isPressed(Joystick::buttonSelect)) { + sendScreenshot(); + } +} + + +int main() { + setup(); + while (1) { + loop(); + } } \ No newline at end of file
--- a/samples.h Sat Sep 29 13:01:42 2012 +0000 +++ b/samples.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,917 +1,917 @@ -static PROGMEM prog_uchar shoot_snd[2369] = { - 0x0D,0x08,0xEE,0x0D,0x0B,0xE4,0x15,0x0F,0xC9,0x0B,0x21,0xE1,0x05,0x23,0xD7,0xE2, - 0x39,0xE3,0xF4,0x35,0xCA,0xFE,0x38,0xCB,0xFF,0x26,0xC4,0x20,0x19,0xC4,0x2A,0x17, - 0xBF,0x01,0x38,0xDC,0x01,0x20,0xC8,0x1B,0x09,0xD6,0x30,0xF0,0xD1,0x37,0xFE,0xE2, - 0x28,0xE7,0xD2,0x34,0x0B,0xC7,0x27,0x1C,0xC2,0x01,0x39,0xD0,0xFA,0x2F,0xCB,0x15, - 0x1E,0xC4,0x04,0x37,0xD6,0xE7,0x34,0xE3,0xF7,0x30,0xE0,0xD4,0x38,0xF1,0xDA,0x3E, - 0xDD,0xDF,0x3A,0x01,0xC1,0x24,0x12,0xC9,0x33,0xF5,0xE4,0x34,0xE7,0xCF,0x34,0xFD, - 0xCD,0x40,0xE9,0xD8,0x3E,0xE0,0xDB,0x36,0x10,0xC3,0x0B,0x2D,0xCB,0xF4,0x38,0xEF, - 0xCF,0x31,0x0C,0xC9,0x22,0x02,0xD3,0x2E,0x06,0xCD,0x28,0x0E,0xC1,0x1B,0x23,0xC3, - 0x14,0x21,0xCC,0x24,0x06,0xC4,0x25,0x1D,0xC8,0x11,0x2D,0xBF,0x15,0x1A,0xC9,0x25, - 0x17,0xBE,0x0C,0x34,0xD1,0x13,0x13,0xC1,0x11,0x36,0xD7,0xE2,0x3C,0xDD,0xEB,0x39, - 0xE6,0xCF,0x22,0x28,0xC9,0xF6,0x39,0xD9,0xF1,0x3A,0xD2,0xEA,0x3B,0xCD,0x01,0x35, - 0xBF,0x11,0x2B,0xBE,0x17,0x2C,0xBF,0x14,0x1D,0xC2,0x11,0x34,0xD5,0xEC,0x3E,0xD7, - 0xDB,0x3C,0xE5,0xE4,0x34,0xFF,0xC4,0x27,0x14,0xC3,0x24,0x1D,0xC5,0x03,0x38,0xD1, - 0x02,0x28,0xC4,0x15,0x1A,0xC8,0x22,0x1E,0xC2,0x1D,0x1C,0xC0,0x19,0x25,0xCD,0x02, - 0x2E,0xD6,0xEC,0x40,0xDA,0xE4,0x3C,0xCC,0x00,0x36,0xC0,0x17,0x1A,0xC6,0x2A,0xFC, - 0xD9,0x2F,0xED,0xE3,0x31,0xFC,0xC5,0x2C,0x0D,0xCA,0x38,0xF9,0xC4,0x2F,0x08,0xD3, - 0x1E,0x1E,0xC8,0xFA,0x3B,0xD8,0xF1,0x27,0xD7,0x08,0x30,0xD0,0xE4,0x3F,0xDC,0xEB, - 0x3C,0xCF,0xFC,0x37,0xCE,0xE3,0x3B,0xF7,0xE2,0x2F,0xEA,0xCE,0x33,0xF3,0xD6,0x3F, - 0xEF,0xD0,0x40,0xF6,0xD0,0x30,0xE8,0xD8,0x3C,0xF5,0xE4,0x2C,0xF0,0xC7,0x29,0x1C, - 0xC0,0x27,0x0D,0xC3,0x31,0x0E,0xCE,0x17,0x21,0xC8,0xFC,0x36,0xDB,0xDC,0x32,0x0F, - 0xC5,0x16,0x1F,0xD0,0x0E,0x22,0xCF,0xFE,0x37,0xE6,0xCA,0x28,0x16,0xC8,0x24,0x1A, - 0xC1,0x1D,0x0E,0xD1,0x35,0xF4,0xCF,0x3A,0xF8,0xD3,0x23,0x0F,0xC5,0x17,0x27,0xC6, - 0x0D,0x33,0xD8,0xDF,0x37,0xEA,0xD3,0x3A,0xF7,0xD9,0x2E,0xF4,0xDC,0x2B,0xE6,0xE5, - 0x36,0xF2,0xDE,0x2C,0xF3,0xC9,0x33,0x08,0xCC,0x1F,0x20,0xCB,0xF9,0x3A,0xDD,0xE6, - 0x30,0xF3,0xCA,0x31,0x05,0xCC,0x3F,0xEE,0xCD,0x41,0xEB,0xDA,0x35,0xFB,0xC8,0x1C, - 0x24,0xC1,0x16,0x2A,0xC3,0x11,0x24,0xD3,0xFA,0x30,0xD9,0xE5,0x3F,0xD5,0xEA,0x42, - 0xCE,0xF8,0x35,0xC8,0x0B,0x30,0xC2,0x05,0x26,0xD0,0x00,0x32,0xE0,0xE8,0x35,0xDD, - 0xE5,0x3B,0xD9,0xE7,0x43,0xD7,0xEC,0x33,0xD5,0xE9,0x36,0xFF,0xC9,0x2C,0x03,0xC7, - 0x3E,0xFC,0xCC,0x28,0x13,0xCA,0x05,0x33,0xD5,0xF0,0x31,0xED,0xCE,0x34,0x03,0xCB, - 0x35,0x0E,0xC5,0x07,0x32,0xCA,0xFF,0x39,0xCA,0xF3,0x31,0xEE,0xDA,0x37,0xF5,0xCC, - 0x40,0xE9,0xD5,0x37,0x04,0xC5,0x13,0x2C,0xC5,0x08,0x38,0xDA,0xD9,0x34,0xFF,0xCC, - 0x20,0x21,0xCD,0xFA,0x39,0xCA,0xFD,0x30,0xC6,0x13,0x2C,0xC9,0x07,0x1E,0xD1,0x07, - 0x2E,0xDA,0x00,0x23,0xCC,0x07,0x1D,0xD3,0x26,0xFD,0xDA,0x2F,0xED,0xDA,0x2A,0x13, - 0xC0,0x1C,0x25,0xC1,0x1B,0x1A,0xCA,0x0A,0x26,0xDB,0x07,0x26,0xCA,0xF5,0x39,0xED, - 0xD0,0x2C,0x0B,0xC6,0x28,0x19,0xC8,0x02,0x33,0xD6,0xEC,0x3C,0xE5,0xD3,0x2B,0x19, - 0xBF,0x25,0x13,0xBD,0x35,0xFF,0xD1,0x37,0xEE,0xD4,0x3F,0xEA,0xDC,0x3C,0xD4,0xF5, - 0x2F,0xD1,0x09,0x23,0xCB,0x0D,0x33,0xC3,0x04,0x2C,0xD1,0xF5,0x33,0xF1,0xCC,0x31, - 0x0E,0xCF,0x1C,0x0D,0xD0,0x1D,0x11,0xD2,0x1F,0x06,0xCF,0x27,0x1C,0xBF,0x1F,0x11, - 0xC4,0x2D,0x0E,0xCE,0x0F,0x35,0xD6,0xEB,0x36,0xCC,0xF2,0x34,0xE6,0xE4,0x30,0x01, - 0xC7,0x21,0x21,0xCE,0xFB,0x30,0xD3,0xE4,0x3C,0xEF,0xED,0x26,0xE8,0xD4,0x32,0x06, - 0xC7,0x2C,0x16,0xCF,0x0E,0x1C,0xCB,0x03,0x37,0xC9,0xF6,0x36,0xDC,0x04,0x22,0xD3, - 0xE9,0x3A,0xEF,0xD2,0x34,0x05,0xC6,0x11,0x30,0xC3,0x0E,0x30,0xC1,0x1A,0x21,0xC8, - 0xFC,0x2F,0xE2,0xE6,0x3A,0xD9,0xE9,0x3E,0xD3,0xF0,0x3D,0xEE,0xCA,0x25,0x1A,0xBC, - 0x14,0x29,0xD6,0x12,0x18,0xCC,0x10,0x1A,0xD1,0x1E,0xFD,0xDC,0x35,0xF5,0xD3,0x2B, - 0xF4,0xE4,0x2D,0xD6,0xFD,0x33,0xDD,0xDF,0x36,0x00,0xC3,0x3B,0xF6,0xC6,0x2F,0x0D, - 0xD1,0x18,0x29,0xC8,0xF8,0x36,0xE6,0xCE,0x37,0x06,0xC5,0x25,0x22,0xCB,0x03,0x29, - 0xCA,0x16,0x1A,0xC9,0x1F,0x0B,0xCD,0x28,0x1D,0xC0,0x1C,0x12,0xC1,0x1D,0x23,0xD5, - 0xFE,0x38,0xDB,0xD7,0x31,0xEE,0xEA,0x2E,0xEE,0xD0,0x36,0xFE,0xD9,0x2F,0xE6,0xE6, - 0x36,0xE3,0xD7,0x43,0xED,0xD3,0x34,0xEF,0xD6,0x2B,0x11,0xCE,0x23,0x11,0xBA,0x2C, - 0x15,0xBD,0x26,0x11,0xCD,0x13,0x30,0xD1,0xE6,0x3D,0xEE,0xDA,0x28,0xFE,0xC3,0x32, - 0x0C,0xC7,0x3C,0xF6,0xCB,0x38,0xFC,0xCA,0x2A,0x0E,0xD7,0x1E,0x0A,0xC4,0x1C,0x23, - 0xBD,0x23,0x1B,0xC4,0x31,0x09,0xC0,0x22,0x21,0xCD,0x04,0x20,0xCD,0x0F,0x28,0xD0, - 0x12,0x1B,0xC4,0x1A,0x28,0xBB,0x1A,0x1E,0xBE,0x2A,0x1B,0xBC,0x20,0x17,0xCE,0x18, - 0x19,0xD1,0x0A,0x28,0xC7,0x07,0x29,0xCE,0x18,0x1E,0xBD,0x0F,0x32,0xCE,0x06,0x21, - 0xD1,0xF7,0x35,0xE1,0xDD,0x45,0xE6,0xD8,0x34,0xE8,0xDF,0x2E,0xFF,0xD2,0x2B,0x03, - 0xC9,0x33,0xF3,0xE2,0x30,0xDE,0xF9,0x2C,0xD7,0xEF,0x2E,0xD9,0xF2,0x42,0xD4,0xEE, - 0x3D,0xC6,0xEE,0x38,0xE0,0xEF,0x31,0xF5,0xC5,0x2E,0x18,0xC5,0x1D,0x0B,0xD7,0x1B, - 0x16,0xCA,0x0D,0x32,0xCC,0xF8,0x34,0xE4,0xCF,0x35,0x04,0xC9,0x2A,0x1E,0xC7,0x0C, - 0x21,0xCE,0x17,0x0A,0xC9,0x2A,0x1E,0xC3,0x21,0x11,0xBD,0x2B,0x1A,0xC9,0x1D,0x0F, - 0xCA,0x0F,0x2D,0xD0,0x04,0x31,0xC7,0xF7,0x3A,0xF1,0xC4,0x2A,0x13,0xC5,0x21,0x1F, - 0xD1,0x05,0x25,0xCB,0x05,0x35,0xCC,0xF3,0x3A,0xED,0xCF,0x2F,0xFA,0xD3,0x41,0xF1, - 0xC8,0x3E,0xEB,0xDD,0x3D,0xD5,0xE6,0x46,0xDC,0xE4,0x31,0xD3,0xFE,0x3D,0xCB,0xF8, - 0x28,0xD2,0x0D,0x27,0xD3,0xEB,0x3D,0xF2,0xCA,0x2D,0x11,0xCC,0x14,0x1D,0xC2,0x1E, - 0x20,0xC3,0x2A,0x0B,0xBE,0x27,0x1C,0xCC,0xFD,0x3E,0xD9,0xDC,0x41,0xE3,0xE1,0x29, - 0x00,0xC6,0x24,0x1E,0xCA,0x2A,0x09,0xC1,0x0A,0x3A,0xD5,0xEC,0x3F,0xD1,0xE3,0x34, - 0xEC,0xE7,0x2E,0xF2,0xE6,0x29,0xE8,0xCF,0x38,0x07,0xD3,0x22,0x11,0xC7,0x00,0x39, - 0xD2,0x07,0x2D,0xBF,0x09,0x25,0xD0,0x14,0x1B,0xCF,0x02,0x37,0xD7,0xE5,0x36,0xD5, - 0xFE,0x33,0xC5,0x05,0x2C,0xCA,0x13,0x1C,0xC6,0x19,0x2A,0xCE,0xFE,0x27,0xD8,0xF2, - 0x31,0xE2,0xF3,0x32,0xD1,0xE5,0x42,0xDC,0xF1,0x38,0xCA,0xF7,0x30,0xD7,0xF1,0x2D, - 0xF2,0xD8,0x36,0x04,0xCA,0x28,0xF3,0xD3,0x28,0x1A,0xCF,0x0F,0x2C,0xBD,0x10,0x23, - 0xC1,0x28,0x16,0xBF,0x2C,0x06,0xC7,0x22,0x23,0xCE,0xF4,0x36,0xD3,0xFE,0x2F,0xC9, - 0xFF,0x34,0xE6,0xDE,0x2A,0xF2,0xD5,0x33,0xF2,0xD9,0x2E,0x18,0xCA,0x01,0x32,0xC8, - 0x08,0x2E,0xC6,0xFF,0x28,0xE0,0xEE,0x34,0x03,0xC4,0x0F,0x34,0xCB,0xFA,0x32,0xD7, - 0xE9,0x31,0xF9,0xD7,0x2D,0xED,0xDE,0x34,0xE6,0xE5,0x32,0x03,0xCC,0x13,0x29,0xC5, - 0x08,0x2B,0xC9,0x09,0x1F,0xDA,0x11,0x1C,0xD5,0xF3,0x32,0xFD,0xC8,0x18,0x27,0xCF, - 0xF0,0x37,0xFA,0xC7,0x1B,0x1D,0xD7,0x0D,0x23,0xCB,0xFB,0x32,0xDD,0xF5,0x28,0xE0, - 0xF0,0x24,0xE5,0x03,0x23,0xDC,0xE0,0x33,0xF7,0xE3,0x2C,0xE9,0xE3,0x29,0x05,0xCA, - 0x1F,0x0B,0xD5,0x2C,0xF9,0xDE,0x2E,0xF2,0xD4,0x2C,0x01,0xD0,0x20,0x19,0xD6,0x0E, - 0x11,0xCD,0x06,0x31,0xDF,0xFC,0x1D,0xD9,0x09,0x20,0xDC,0xED,0x34,0xE4,0xDC,0x37, - 0xE6,0xF0,0x2F,0xD8,0xF1,0x2B,0xDB,0xFF,0x26,0xE0,0xF0,0x29,0xEE,0xD6,0x2F,0x0B, - 0xD0,0x0E,0x25,0xD0,0x02,0x28,0xCC,0x18,0x1E,0xC7,0x0C,0x23,0xE1,0xEA,0x32,0xF9, - 0xD2,0x29,0xF5,0xE7,0x23,0xFB,0xD2,0x1B,0x1E,0xD0,0x1D,0x0F,0xCB,0x03,0x32,0xE7, - 0xE3,0x36,0xDE,0xE6,0x2D,0xF5,0xDC,0x1F,0x17,0xCD,0x1E,0x0E,0xC8,0x15,0x1D,0xDF, - 0x00,0x26,0xD9,0xF8,0x28,0xD3,0x05,0x2E,0xD6,0xF4,0x24,0xF2,0xDB,0x24,0x0A,0xD6, - 0x2C,0xF2,0xD9,0x32,0xF3,0xDB,0x1F,0xFF,0xE3,0x1F,0x04,0xDB,0x1D,0x03,0xD9,0x23, - 0xFF,0xDA,0x29,0xF7,0xE4,0x23,0xE8,0xE9,0x29,0xFF,0xD6,0x18,0x19,0xD6,0x0F,0x10, - 0xD6,0x1C,0x0E,0xCF,0x1F,0x0B,0xD7,0x26,0x05,0xD1,0x0B,0x2A,0xDD,0xF0,0x31,0xD7, - 0xF4,0x27,0xDE,0xED,0x2C,0x02,0xDE,0x23,0xF6,0xD0,0x29,0x05,0xDA,0x1B,0x0C,0xDA, - 0x0C,0x1F,0xD2,0x0A,0x24,0xCF,0x13,0x18,0xCD,0x0C,0x1E,0xE2,0xF8,0x26,0xEB,0xDB, - 0x29,0x00,0xE8,0x1F,0xF5,0xDC,0x1C,0x09,0xD9,0x23,0x0A,0xCF,0x12,0x1B,0xE1,0xF3, - 0x2C,0xE8,0xF0,0x26,0xE5,0xE2,0x23,0x0C,0xD5,0x22,0x07,0xCF,0x24,0x08,0xD8,0x1D, - 0x06,0xE2,0x17,0x04,0xD9,0x12,0x1F,0xD4,0xFD,0x27,0xEC,0xE2,0x2A,0xFF,0xD7,0x22, - 0x03,0xD9,0x0C,0x20,0xDA,0x06,0x24,0xD0,0x02,0x1F,0xDC,0x13,0x0F,0xD3,0x21,0x03, - 0xD5,0x1C,0x13,0xDB,0xFD,0x28,0xEA,0xDE,0x23,0x0E,0xD6,0x19,0x11,0xCE,0x16,0x0C, - 0xDC,0x1C,0x08,0xDC,0x13,0x0D,0xDF,0x07,0x26,0xE1,0xF0,0x1F,0xE9,0xFB,0x1C,0xEB, - 0xE5,0x28,0xF9,0xE3,0x24,0xF4,0xE0,0x1C,0x1B,0xD2,0xFC,0x21,0xE6,0xEF,0x21,0x09, - 0xD6,0x06,0x22,0xE5,0xEA,0x23,0xFF,0xDE,0x19,0x13,0xD8,0xFF,0x1D,0xE8,0xFF,0x1C, - 0xDD,0xF6,0x2B,0xEA,0xEE,0x1E,0xEA,0xF7,0x1B,0xF1,0xE5,0x1F,0x08,0xDC,0x21,0xFA, - 0xDF,0x1A,0x02,0xE1,0x09,0x1F,0xDF,0x04,0x1C,0xDE,0xEF,0x21,0x0A,0xD9,0x0A,0x1C, - 0xE3,0xEB,0x26,0x05,0xD7,0x16,0x0B,0xDB,0x0B,0x1D,0xE5,0xF5,0x22,0xF4,0xDD,0x1A, - 0x11,0xD4,0x15,0x12,0xDA,0x06,0x24,0xEB,0xE4,0x25,0xED,0xF4,0x23,0xDF,0xFC,0x22, - 0xDF,0xFF,0x1F,0xE2,0xFC,0x1C,0xE8,0xFA,0x19,0xEB,0xF3,0x25,0xF2,0xE2,0x1E,0xFE, - 0xE6,0x15,0x0B,0xDD,0x11,0x11,0xD5,0x17,0x10,0xDC,0x19,0x00,0xDF,0x14,0x10,0xE3, - 0x00,0x20,0xE1,0xF9,0x21,0xEA,0xE9,0x1E,0x0D,0xD7,0x0C,0x13,0xE6,0x0B,0x0E,0xE1, - 0xFE,0x23,0xE3,0xFB,0x1F,0xDE,0xFE,0x1B,0xEA,0xFB,0x1B,0xEC,0xF3,0x18,0xF0,0xEE, - 0x1D,0x07,0xE1,0x0A,0x0E,0xDF,0x0E,0x17,0xDD,0x0E,0x12,0xDA,0x06,0x17,0xE7,0x0A, - 0x0A,0xE2,0x0F,0x0E,0xE4,0x01,0x1B,0xEE,0xEC,0x1E,0x01,0xDA,0x10,0x15,0xE4,0xF7, - 0x20,0xF3,0xED,0x1B,0xF4,0xE8,0x1B,0x0C,0xDC,0x07,0x19,0xE9,0xEF,0x1E,0xFE,0xE5, - 0x14,0x04,0xE5,0x09,0x17,0xEA,0xEE,0x20,0xF7,0xE6,0x21,0xF7,0xE3,0x1A,0x03,0xE7, - 0x13,0x0D,0xDF,0x01,0x1D,0xEE,0xEA,0x1D,0x01,0xDF,0x0A,0x1C,0xE2,0xF9,0x1D,0xE8, - 0x02,0x15,0xE9,0xF1,0x1D,0xFA,0xE6,0x17,0x09,0xE1,0x03,0x19,0xE3,0x04,0x19,0xE0, - 0x09,0x14,0xE2,0x01,0x18,0xEC,0xF5,0x1A,0xEE,0xF7,0x1D,0xF0,0xE6,0x17,0x0F,0xE1, - 0x0E,0x0F,0xDD,0x06,0x17,0xF1,0xEB,0x14,0x11,0xE2,0xFC,0x1A,0xF2,0xEF,0x18,0xFA, - 0xE9,0x1D,0xFA,0xE7,0x15,0x06,0xE4,0x03,0x1A,0xE6,0x02,0x17,0xE6,0xF4,0x1B,0xFB, - 0xE4,0x1E,0xF9,0xE7,0x1A,0xF9,0xEA,0x13,0x11,0xE0,0x02,0x18,0xE7,0xFC,0x16,0xF2, - 0xF0,0x1A,0xF9,0xE8,0x15,0x01,0xE8,0x0F,0x0D,0xE6,0xF6,0x20,0xFB,0xE3,0x19,0xFB, - 0xE6,0x17,0x02,0xEC,0x11,0x01,0xE8,0x0F,0x06,0xE8,0x13,0x0A,0xDF,0x0B,0x0F,0xE7, - 0x05,0x17,0xEB,0xF8,0x15,0xEF,0xEF,0x19,0x04,0xE9,0x10,0x04,0xE2,0x0B,0x13,0xEC, - 0x00,0x15,0xEA,0xF8,0x19,0xEC,0xF9,0x1A,0xEF,0xF2,0x14,0xFD,0xEA,0x06,0x19,0xEE, - 0xF2,0x18,0xF6,0xEA,0x13,0x0F,0xE7,0xFB,0x1A,0xF5,0xED,0x17,0xF9,0xEA,0x14,0x07, - 0xE7,0x09,0x0E,0xE4,0x0B,0x0F,0xE4,0x0F,0x0A,0xE4,0x0C,0x09,0xEA,0x0E,0x08,0xE9, - 0x08,0x08,0xED,0xFF,0x15,0xF6,0xEC,0x16,0x05,0xE3,0x09,0x0D,0xEB,0x03,0x15,0xEC, - 0xF6,0x16,0xEF,0xF9,0x16,0xF8,0xEE,0x08,0x12,0xED,0xFE,0x0E,0xEC,0x06,0x09,0xEE, - 0x08,0x0C,0xE8,0x06,0x12,0xE7,0x00,0x15,0xF1,0xF2,0x15,0xFD,0xE9,0x14,0x03,0xEB, - 0x0D,0x00,0xEE,0x0D,0x08,0xED,0xFB,0x17,0xFB,0xE7,0x10,0x06,0xE9,0x05,0x15,0xED, - 0xF4,0x14,0xF7,0xF5,0x12,0xFD,0xE9,0x0D,0x09,0xED,0x07,0x07,0xEE,0xFA,0x14,0xFC, - 0xF1,0x10,0xF8,0xF2,0x13,0x03,0xE8,0x00,0x16,0xF7,0xED,0x10,0x04,0xE9,0x0C,0x0C, - 0xEA,0x02,0x12,0xF5,0xEE,0x0F,0x0A,0xE8,0x01,0x13,0xF2,0xF2,0x12,0x02,0xEC,0x0A, - 0x0B,0xEA,0x00,0x14,0xED,0xFD,0x12,0xEE,0xF9,0x12,0xFC,0xED,0x07,0x13,0xEE,0xF6, - 0x14,0xF8,0xEE,0x0D,0x07,0xEA,0x05,0x0E,0xEF,0x03,0x08,0xEE,0x04,0x10,0xF2,0xF0, - 0x10,0x0A,0xE9,0xFD,0x13,0xF4,0xF4,0x13,0xF9,0xF2,0x10,0x04,0xEB,0x05,0x0E,0xEE, - 0xFE,0x0E,0xF4,0xF7,0x11,0xFC,0xEF,0x0D,0x09,0xEE,0xFA,0x13,0xFB,0xEC,0x10,0x02, - 0xEA,0x04,0x12,0xF6,0xEF,0x0E,0x09,0xEC,0x02,0x0C,0xF1,0xFF,0x0D,0xF2,0xF9,0x12, - 0xF7,0xF3,0x0F,0xFF,0xEF,0x09,0x0B,0xF0,0xF8,0x12,0xFC,0xED,0x0A,0x0B,0xED,0xFF, - 0x10,0xF3,0xFC,0x0E,0xF8,0xF3,0x0E,0xFF,0xF0,0x0E,0x00,0xEF,0x01,0x0E,0xFD,0xF0, - 0x08,0x09,0xF1,0x01,0x0C,0xF0,0xFC,0x0F,0xF8,0xF2,0x0E,0x05,0xEB,0x09,0x08,0xEE, - 0x08,0x06,0xF3,0xF7,0x0C,0x07,0xEB,0x06,0x0A,0xEE,0xFC,0x0E,0x01,0xEF,0x05,0x0F, - 0xF0,0xFB,0x0C,0xF3,0xFF,0x0B,0xF4,0xFA,0x0D,0xFB,0xF3,0x0B,0x03,0xEF,0x06,0x0D, - 0xF0,0xF8,0x0F,0xFE,0xF0,0x04,0x0D,0xF3,0xFB,0x0E,0xF8,0xF3,0x0C,0x05,0xEF,0xFE, - 0x10,0xF7,0xF6,0x0E,0xFB,0xF2,0x0A,0x06,0xF1,0x03,0x0B,0xF1,0x02,0x08,0xF1,0x04, - 0x08,0xF3,0x03,0x07,0xF2,0x00,0x0D,0xF7,0xF4,0x0C,0x05,0xF1,0x02,0x0A,0xF4,0xFC, - 0x0B,0xFB,0xF3,0x09,0x0B,0xF0,0xFB,0x0D,0xF9,0xF7,0x0C,0xFC,0xF5,0x0B,0xFA,0xFA, - 0x0B,0xFA,0xF5,0x0A,0x06,0xF1,0x00,0x0A,0xF6,0xFD,0x09,0xFB,0xF6,0x06,0x0B,0xF4, - 0xF9,0x0B,0xFB,0xF7,0x0B,0xFF,0xF2,0x08,0x06,0xF4,0xFD,0x09,0xFF,0xF4,0x05,0x08, - 0xF4,0xFD,0x0B,0xFA,0xF7,0x0A,0xFF,0xF4,0x06,0x08,0xF4,0xFB,0x0C,0xFB,0xF7,0x0B, - 0xFE,0xF3,0x07,0x06,0xF4,0xFE,0x0B,0xF8,0xF9,0x09,0xFD,0xF5,0x07,0x06,0xF5,0xFC, - 0x09,0xFD,0xF5,0x08,0x04,0xF2,0x04,0x06,0xF5,0xFC,0x09,0x00,0xF5,0x03,0x09,0xF6, - 0xF8,0x0A,0x03,0xF4,0xFF,0x09,0xFB,0xF6,0x05,0x07,0xF9,0xF8,0x06,0x03,0xF7,0xFD, - 0x00 -}; - -static PROGMEM prog_uchar aliendeath_snd[2808] = { - 0x14,0x1D,0xD9,0xFE,0x19,0xE0,0xF0,0x23,0x0B,0xDC,0x06,0x15,0xE2,0x02,0x1E,0xE9, - 0xE8,0x18,0x16,0xE3,0xF6,0x1F,0xEC,0xF1,0x20,0xF4,0xE9,0x13,0x01,0xDD,0x0D,0x13, - 0xE0,0x13,0x35,0xE8,0xDC,0x0D,0xE7,0xDC,0x15,0x21,0x22,0x13,0xF6,0xC9,0xCF,0x0B, - 0xFF,0x17,0x4D,0x2B,0xD6,0xBE,0xC7,0xBE,0xFC,0x41,0x38,0x44,0x24,0xCD,0xB3,0xD0, - 0x08,0x0D,0x2B,0x4B,0x21,0xD6,0xBC,0xC6,0xC4,0xFE,0x3D,0x3A,0x44,0x2A,0xC9,0xBB, - 0xD9,0xD5,0xFF,0x35,0x43,0x36,0xF2,0xC9,0xC1,0xC3,0xFF,0x2A,0x2F,0x46,0x36,0xD8, - 0xB7,0xCB,0xC4,0xE3,0x31,0x40,0x3C,0x3A,0xED,0xB4,0xCC,0xE1,0xE4,0x20,0x41,0x3E, - 0x24,0xE4,0xBE,0xC1,0xE6,0xF1,0x17,0x42,0x43,0x1F,0xDA,0xC8,0xBA,0xD8,0x10,0x1A, - 0x34,0x4B,0x2C,0xD5,0xBE,0xC8,0xBC,0xF2,0x2F,0x33,0x3C,0x43,0x00,0xBC,0xC0,0xDE, - 0xDB,0xF4,0x32,0x3C,0x3E,0x1B,0xDF,0xC2,0xB9,0xEC,0xFA,0x07,0x3B,0x3F,0x31,0xFF, - 0xD0,0xB6,0xCF,0xF0,0xEF,0x25,0x40,0x38,0x30,0xF3,0xC1,0xB7,0xD8,0xF8,0xFB,0x2B, - 0x3F,0x3D,0x1F,0xD8,0xC3,0xBE,0xC7,0x0C,0x1D,0x21,0x40,0x44,0x14,0xC4,0xC1,0xC1, - 0xC6,0x09,0x23,0x24,0x3D,0x41,0x15,0xD7,0xC4,0xB8,0xD4,0x01,0xFF,0x2B,0x42,0x35, - 0x2F,0xF1,0xBB,0xBA,0xD2,0xE4,0xF7,0x2B,0x3E,0x37,0x42,0x0A,0xBD,0xBC,0xCB,0xCC, - 0xE6,0x1E,0x3F,0x37,0x3E,0x34,0xE0,0xB6,0xC1,0xD1,0xD5,0xF5,0x2E,0x3B,0x36,0x40, - 0x2B,0xD3,0xB6,0xC1,0xC2,0xE0,0x13,0x30,0x30,0x3D,0x43,0x0E,0xCC,0xBE,0xC3,0xBD, - 0xE8,0x20,0x1B,0x32,0x40,0x41,0x1C,0xCB,0xBE,0xC2,0xBE,0xDD,0x1D,0x26,0x22,0x3D, - 0x41,0x28,0xE6,0xBD,0xC1,0xBC,0xD0,0x12,0x17,0x17,0x3B,0x3F,0x34,0x0D,0xD8,0xC0, - 0xB8,0xCC,0xF3,0xFC,0x0D,0x30,0x3E,0x30,0x35,0x15,0xC9,0xBB,0xC0,0xC5,0xE1,0x15, - 0x20,0x1F,0x3C,0x3A,0x2A,0x0B,0xD4,0xBE,0xB7,0xCF,0xEF,0xFA,0x21,0x27,0x2B,0x3F, - 0x38,0x12,0xD9,0xC3,0xBA,0xC2,0xE8,0xF5,0x0C,0x30,0x2E,0x2D,0x3B,0x2C,0xF9,0xCC, - 0xBF,0xBA,0xCE,0xEF,0xFC,0x1C,0x26,0x25,0x3C,0x37,0x1C,0xFC,0xD3,0xBC,0xBA,0xD0, - 0xE8,0xF9,0x1D,0x2D,0x24,0x2F,0x3D,0x2A,0xFD,0xD5,0xC2,0xB8,0xC4,0xE7,0xF9,0x08, - 0x27,0x31,0x27,0x34,0x3C,0x1B,0xE4,0xC1,0xBE,0xB7,0xCE,0xF8,0x02,0x0E,0x23,0x32, - 0x2C,0x2C,0x3A,0x1E,0xE3,0xBE,0xBE,0xBA,0xC3,0xF7,0x14,0x0F,0x14,0x2A,0x33,0x26, - 0x31,0x2D,0xF9,0xCC,0xBE,0xBD,0xBA,0xDD,0x0C,0x0D,0x14,0x27,0x21,0x20,0x34,0x31, - 0x12,0xF8,0xD5,0xBA,0xBA,0xCA,0xE1,0xFA,0x16,0x26,0x13,0x12,0x30,0x2F,0x1F,0x28, - 0x12,0xD4,0xBC,0xBF,0xBC,0xCF,0x00,0x15,0x0D,0x1A,0x24,0x17,0x1B,0x2F,0x2C,0x15, - 0x04,0xE5,0xC1,0xBD,0xC0,0xCD,0xEE,0x0E,0x26,0x1D,0x10,0x20,0x1F,0x19,0x29,0x25, - 0x0B,0xF2,0xD4,0xBF,0xBC,0xCA,0xE4,0xF8,0x10,0x24,0x1C,0x10,0x1C,0x1D,0x18,0x26, - 0x21,0x0A,0xFB,0xE0,0xC5,0xBB,0xC3,0xDD,0xEF,0x08,0x22,0x1C,0x12,0x1B,0x17,0x10, - 0x1B,0x28,0x1C,0x0B,0x04,0xE3,0xC2,0xC0,0xC3,0xCD,0xE8,0x0C,0x21,0x18,0x19,0x1E, - 0x0A,0x08,0x1E,0x1F,0x17,0x1A,0x11,0xFA,0xE4,0xD0,0xC1,0xC0,0xD2,0xED,0xFD,0x10, - 0x22,0x19,0x11,0x18,0x0F,0x07,0x16,0x1F,0x15,0x12,0x15,0x03,0xE5,0xD2,0xCA,0xC3, - 0xC7,0xE3,0xFE,0x09,0x14,0x1F,0x1C,0x10,0x0F,0x10,0x07,0x0C,0x1C,0x19,0x11,0x13, - 0x09,0xF3,0xE3,0xCF,0xC1,0xCC,0xD9,0xE2,0xFB,0x14,0x17,0x17,0x1C,0x13,0x09,0x0D, - 0x0B,0x05,0x10,0x1A,0x13,0x0E,0x11,0x06,0xF7,0xEB,0xD6,0xC6,0xC8,0xD6,0xE2,0xF0, - 0x04,0x17,0x1D,0x17,0x13,0x15,0x0C,0x04,0x08,0x05,0x03,0x0E,0x16,0x11,0x0C,0x0B, - 0x08,0xFD,0xEF,0xDE,0xD5,0xCC,0xCE,0xDD,0xEA,0xF5,0x07,0x17,0x1A,0x16,0x18,0x16, - 0x0A,0x08,0x0A,0x02,0xFF,0x05,0x0A,0x0B,0x11,0x10,0x07,0x05,0x05,0xFD,0xF4,0xE9, - 0xD9,0xCF,0xD4,0xDC,0xE1,0xED,0xFF,0x0C,0x11,0x16,0x1A,0x13,0x0E,0x0F,0x0A,0x06, - 0x07,0x05,0xFF,0x01,0x06,0x05,0x08,0x10,0x0F,0x08,0x04,0x04,0xFD,0xF8,0xFA,0xF1, - 0xE2,0xDA,0xDC,0xDE,0xE2,0xED,0xF4,0xF8,0x05,0x10,0x13,0x13,0x15,0x12,0x0C,0x0A, - 0x08,0x04,0x04,0x04,0x00,0xFE,0x00,0x01,0xFE,0x00,0x04,0x06,0x08,0x09,0x06,0x00, - 0x00,0xFF,0xFC,0xF8,0xFE,0xFE,0xE7,0xCD,0xC5,0xD9,0xF5,0x0B,0x1D,0x3F,0x2F,0xF5, - 0xDA,0xED,0x2A,0x0F,0xE2,0xE4,0x1C,0x24,0xEA,0xDD,0x07,0x33,0xFD,0xD9,0xF0,0x2E, - 0x14,0xDB,0xDE,0x19,0x2B,0xE9,0xD5,0xFD,0x34,0xFF,0xD4,0xE5,0x2A,0x1E,0xDD,0xD9, - 0x0E,0x34,0xEE,0xD4,0xEF,0x33,0x11,0xD9,0xDF,0x1A,0x32,0xEA,0xD6,0xF6,0x37,0x0A, - 0xD7,0xE0,0x20,0x2D,0xE5,0xD6,0xFB,0x3B,0x04,0xD5,0xDF,0x24,0x2D,0xE1,0xD6,0xFC, - 0x3E,0x03,0xD4,0xDF,0x22,0x2E,0xE1,0xD7,0xF5,0x3B,0x08,0xD7,0xDD,0x1B,0x35,0xE4, - 0xD6,0xF2,0x3C,0x11,0xD7,0xDD,0x11,0x3B,0xED,0xD6,0xE6,0x33,0x21,0xD8,0xD8,0x04, - 0x43,0xFA,0xD5,0xE0,0x23,0x31,0xE0,0xD8,0xEF,0x3D,0x12,0xD6,0xDA,0x0D,0x41,0xF1, - 0xD7,0xE2,0x29,0x2D,0xDD,0xD8,0xF1,0x41,0x0F,0xD4,0xDC,0x0A,0x41,0xF2,0xD6,0xE0, - 0x28,0x33,0xDC,0xD9,0xED,0x39,0x1A,0xD7,0xDA,0xFF,0x45,0xFF,0xD4,0xDE,0x14,0x3D, - 0xEB,0xD8,0xE2,0x2A,0x31,0xDC,0xDA,0xEC,0x39,0x1F,0xD6,0xDB,0xF9,0x41,0x09,0xD5, - 0xDB,0x07,0x46,0xF6,0xD6,0xE0,0x15,0x3F,0xEA,0xD7,0xE2,0x26,0x35,0xDF,0xDA,0xE5, - 0x32,0x2C,0xD8,0xDC,0xEC,0x38,0x21,0xD5,0xDC,0xF4,0x3D,0x15,0xD5,0xDC,0xF9,0x42, - 0x0C,0xD4,0xDE,0xFE,0x45,0x05,0xD3,0xDF,0x02,0x45,0xFF,0xD3,0xE1,0x06,0x43,0xFC, - 0xD3,0xE1,0x09,0x42,0xFB,0xD5,0xE0,0x0A,0x41,0xFA,0xD5,0xE0,0x0A,0x42,0xFA,0xD5, - 0xDF,0x09,0x43,0xFC,0xD5,0xDF,0x05,0x45,0x01,0xD3,0xDF,0x00,0x44,0x08,0xD3,0xDF, - 0xFB,0x42,0x10,0xD3,0xDE,0xF5,0x3D,0x1A,0xD5,0xDE,0xEF,0x36,0x25,0xDA,0xDC,0xEA, - 0x2B,0x2F,0xE1,0xDA,0xE6,0x1E,0x39,0xEA,0xD7,0xE4,0x11,0x41,0xF8,0xD4,0xE1,0x02, - 0x44,0x08,0xD1,0xE1,0xF5,0x3E,0x1C,0xD3,0xE0,0xEB,0x2F,0x31,0xDC,0xDB,0xE6,0x1C, - 0x3E,0xEE,0xD5,0xE3,0x06,0x42,0x07,0xD3,0xE1,0xF5,0x3A,0x22,0xD7,0xDD,0xEA,0x24, - 0x38,0xE8,0xD7,0xE6,0x0A,0x40,0x04,0xD2,0xE2,0xF5,0x37,0x26,0xD8,0xDE,0xEA,0x1B, - 0x3C,0xF0,0xD5,0xE5,0xFF,0x3F,0x14,0xD2,0xE1,0xED,0x26,0x35,0xE6,0xD8,0xE6,0x06, - 0x40,0x0C,0xD3,0xE2,0xEF,0x2A,0x32,0xE3,0xD8,0xE6,0x08,0x3F,0x0B,0xD4,0xE2,0xEF, - 0x2A,0x35,0xE5,0xD8,0xE7,0x03,0x3D,0x11,0xD5,0xE1,0xEB,0x22,0x3A,0xED,0xD6,0xE7, - 0xFA,0x38,0x20,0xD8,0xDE,0xEA,0x11,0x3F,0x02,0xD3,0xE5,0xF2,0x28,0x33,0xE7,0xD6, - 0xE8,0xFE,0x39,0x1E,0xD7,0xDF,0xEA,0x11,0x3F,0x03,0xD2,0xE5,0xED,0x22,0x3A,0xED, - 0xD5,0xE7,0xF5,0x32,0x2C,0xDF,0xDB,0xE8,0xFF,0x3B,0x1C,0xD7,0xE0,0xEA,0x0B,0x3F, - 0x0C,0xD3,0xE4,0xEB,0x15,0x3E,0xFF,0xD2,0xE6,0xEE,0x1D,0x3B,0xF7,0xD4,0xE7,0xF1, - 0x24,0x38,0xF0,0xD4,0xE8,0xF4,0x27,0x33,0xEC,0xD6,0xEA,0xF6,0x2A,0x31,0xE8,0xD7, - 0xEB,0xF6,0x2C,0x30,0xE7,0xD7,0xEA,0xF6,0x2C,0x30,0xE8,0xD7,0xEA,0xF6,0x29,0x32, - 0xEB,0xD4,0xEA,0xF5,0x25,0x35,0xF0,0xD3,0xE9,0xF3,0x1F,0x39,0xF9,0xD2,0xE7,0xF1, - 0x15,0x3B,0x04,0xD2,0xE5,0xF0,0x0C,0x3B,0x11,0xD6,0xE0,0xEF,0x03,0x36,0x20,0xDC, - 0xDB,0xED,0xFA,0x2C,0x2F,0xE8,0xD7,0xEB,0xF3,0x1E,0x39,0xFB,0xD4,0xE6,0xF0,0x0B, - 0x3A,0x14,0xD8,0xDE,0xEE,0xFE,0x2E,0x2C,0xE6,0xD6,0xEB,0xF5,0x1A,0x3A,0x00,0xD4, - 0xE3,0xF1,0x05,0x36,0x1F,0xDD,0xDA,0xEE,0xF8,0x21,0x38,0xF6,0xD4,0xE5,0xF3,0x07, - 0x38,0x1C,0xDC,0xDA,0xED,0xF9,0x1F,0x38,0xF9,0xD5,0xE3,0xF3,0x04,0x33,0x24,0xE2, - 0xD9,0xEA,0xF8,0x14,0x3A,0x09,0xD7,0xDF,0xF1,0xFD,0x25,0x35,0xF0,0xD6,0xE5,0xF5, - 0x05,0x33,0x25,0xDF,0xDA,0xEB,0xF7,0x0E,0x3B,0x12,0xD8,0xDE,0xEF,0xFB,0x18,0x3A, - 0x02,0xD7,0xE1,0xF2,0xFD,0x20,0x37,0xF6,0xD7,0xE3,0xF5,0xFF,0x25,0x34,0xED,0xD8, - 0xE4,0xF6,0x00,0x29,0x31,0xEA,0xDA,0xE5,0xF6,0x02,0x2A,0x30,0xE9,0xD8,0xE5,0xF7, - 0x01,0x29,0x30,0xEC,0xD9,0xE3,0xF8,0x00,0x26,0x34,0xEE,0xD9,0xE2,0xF5,0x00,0x1F, - 0x39,0xF6,0xD7,0xE2,0xF2,0xFF,0x15,0x3B,0x06,0xD6,0xDF,0xEE,0xFF,0x0B,0x37,0x19, - 0xDA,0xDD,0xEA,0xFD,0x05,0x2D,0x2C,0xE6,0xDA,0xE6,0xF8,0x00,0x1C,0x3A,0xFB,0xD9, - 0xE2,0xF0,0xFF,0x0A,0x37,0x1A,0xDD,0xDE,0xE7,0xFB,0x01,0x22,0x35,0xF5,0xD7,0xE4, - 0xF2,0xFF,0x0B,0x36,0x1C,0xDC,0xDD,0xE9,0xFB,0x00,0x1C,0x38,0xFB,0xD8,0xE2,0xEF, - 0x01,0x04,0x2D,0x29,0xE6,0xDA,0xE5,0xF7,0x00,0x0D,0x36,0x15,0xDC,0xDD,0xE8,0xFC, - 0x01,0x18,0x38,0x04,0xD8,0xE0,0xEC,0xFF,0x02,0x1F,0x36,0xF9,0xD6,0xE4,0xEF,0x00, - 0x02,0x24,0x35,0xF3,0xD7,0xE5,0xF0,0x02,0x01,0x24,0x34,0xF1,0xD7,0xE6,0xEF,0x01, - 0x02,0x21,0x33,0xF6,0xD7,0xE5,0xEF,0x00,0x02,0x1D,0x35,0x00,0xD7,0xE1,0xEE,0xFE, - 0x02,0x14,0x35,0x0F,0xD9,0xDD,0xED,0xFB,0x02,0x0B,0x30,0x21,0xE2,0xD9,0xE7,0xF6, - 0x02,0x05,0x23,0x30,0xF9,0xD6,0xE1,0xEF,0xFF,0x03,0x11,0x34,0x16,0xDF,0xDC,0xE8, - 0xF7,0x04,0x04,0x21,0x34,0xF8,0xD7,0xE3,0xED,0xFD,0x04,0x09,0x2E,0x24,0xE5,0xD9, - 0xE7,0xF3,0x01,0x04,0x11,0x33,0x11,0xDC,0xDE,0xEA,0xF6,0x03,0x04,0x18,0x34,0x06, - 0xDA,0xE0,0xEC,0xFA,0x04,0x05,0x1B,0x31,0x03,0xDA,0xDE,0xED,0xFA,0x03,0x06,0x18, - 0x32,0x06,0xD9,0xDF,0xEC,0xFB,0x03,0x04,0x13,0x30,0x11,0xDD,0xDB,0xEB,0xF8,0x01, - 0x06,0x0B,0x2B,0x20,0xE7,0xD9,0xE7,0xF4,0xFF,0x07,0x05,0x1E,0x2D,0xFB,0xDA,0xE1, - 0xEF,0xFA,0x05,0x05,0x0D,0x2D,0x1A,0xE4,0xDA,0xE8,0xF6,0xFE,0x06,0x07,0x18,0x2E, - 0x06,0xDA,0xDD,0xEB,0xFC,0x02,0x05,0x07,0x20,0x2C,0xF8,0xD8,0xE1,0xEE,0xFD,0x03, - 0x06,0x08,0x22,0x2A,0xF4,0xD7,0xE2,0xF0,0xFD,0x01,0x06,0x09,0x1E,0x2C,0xF9,0xD7, - 0xE1,0xEE,0xFB,0x02,0x07,0x06,0x18,0x2E,0x04,0xDA,0xDF,0xEA,0xFA,0x01,0x06,0x07, - 0x0D,0x2A,0x19,0xE6,0xDA,0xE4,0xF4,0xFF,0x04,0x08,0x07,0x1A,0x2B,0x03,0xDA,0xDF, - 0xEC,0xF8,0x01,0x04,0x07,0x0A,0x21,0x24,0xF4,0xD8,0xE2,0xF1,0xFB,0x01,0x06,0x06, - 0x0A,0x24,0x21,0xF0,0xD8,0xE5,0xF1,0xFC,0x03,0x05,0x06,0x09,0x20,0x23,0xF4,0xD9, - 0xE3,0xEF,0xFC,0x03,0x04,0x06,0x06,0x17,0x26,0x05,0xDC,0xDE,0xED,0xF8,0x00,0x02, - 0x07,0x07,0x0B,0x21,0x1C,0xEE,0xD9,0xE4,0xF2,0xFE,0x03,0x04,0x06,0x06,0x0F,0x24, - 0x13,0xE5,0xD8,0xE8,0xF4,0xFE,0x05,0x06,0x07,0x05,0x0F,0x24,0x11,0xE5,0xDA,0xE8, - 0xF5,0xFF,0x03,0x06,0x08,0x05,0x0A,0x1F,0x1A,0xF1,0xDA,0xE2,0xF1,0xFD,0x04,0x06, - 0x07,0x06,0x04,0x13,0x22,0x0A,0xE1,0xDA,0xE9,0xF7,0x00,0x05,0x06,0x06,0x05,0x05, - 0x16,0x22,0x02,0xDE,0xDD,0xE9,0xF7,0x01,0x05,0x07,0x06,0x05,0x04,0x12,0x21,0x0A, - 0xE3,0xDB,0xE9,0xF6,0xFF,0x04,0x06,0x06,0x06,0x04,0x07,0x1B,0x1B,0xF5,0xDA,0xE1, - 0xEE,0xFA,0x03,0x06,0x06,0x05,0x05,0x03,0x09,0x1D,0x17,0xF1,0xDB,0xE2,0xEF,0xFB, - 0x03,0x05,0x06,0x05,0x04,0x04,0x07,0x15,0x1C,0x00,0xDF,0xDE,0xEC,0xF6,0x00,0x05, - 0x06,0x06,0x05,0x04,0x03,0x07,0x19,0x19,0xF7,0xDB,0xE1,0xEF,0xFA,0x01,0x05,0x06, - 0x06,0x05,0x05,0x03,0x04,0x14,0x1B,0x01,0xE1,0xDD,0xEB,0xF8,0x00,0x04,0x07,0x06, - 0x04,0x04,0x03,0x00,0x06,0x16,0x17,0xFB,0xE0,0xE0,0xED,0xF9,0x02,0x05,0x06,0x06, - 0x04,0x03,0x03,0x00,0x01,0x0E,0x1A,0x0B,0xE9,0xDC,0xE6,0xF5,0xFE,0x03,0x06,0x07, - 0x06,0x04,0x02,0x01,0x00,0x00,0x0A,0x18,0x10,0xF2,0xDE,0xE3,0xF1,0xFC,0x03,0x05, - 0x05,0x06,0x05,0x03,0x02,0x01,0xFF,0xFF,0x0A,0x18,0x0F,0xF2,0xDF,0xE3,0xF1,0xFC, - 0x03,0x06,0x07,0x05,0x04,0x02,0x01,0x00,0x00,0xFF,0x01,0x0C,0x16,0x0D,0xF2,0xE0, - 0xE4,0xF1,0xFD,0x04,0x06,0x05,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0xFE,0x01,0x0C, - 0x15,0x0D,0xF4,0xE1,0xE4,0xF0,0xFB,0x01,0x05,0x05,0x04,0x04,0x03,0x02,0x02,0x00, - 0xFF,0xFF,0xFF,0x00,0x07,0x13,0x12,0xFE,0xE7,0xE2,0xEB,0xF7,0x00,0x04,0x05,0x05, - 0x04,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0xFF,0x01,0x09,0x11,0x10,0xFD,0xE7, - 0xE1,0xEB,0xF8,0x00,0x04,0x06,0x05,0x03,0x03,0x02,0x00,0xFF,0xFF,0x00,0xFF,0xFF, - 0xFF,0x00,0x00,0x02,0x09,0x11,0x10,0xFF,0xEA,0xE2,0xE9,0xF6,0xFE,0x04,0x06,0x06, - 0x05,0x02,0x01,0x01,0x00,0x00,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0x00,0x05, - 0x0C,0x10,0x0C,0xFB,0xEA,0xE4,0xEC,0xF6,0xFE,0x03,0x05,0x06,0x05,0x04,0x03,0x01, - 0x01,0xFF,0xFF,0xFF,0xFE,0xFE,0xFD,0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xFF,0x01,0x07, - 0x0B,0x0D,0x06,0xF6,0xEA,0xE6,0xEE,0xF8,0x02,0x05,0x06,0x06,0x04,0x04,0x01,0x01, - 0x00,0xFE,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFE,0xFE,0xFD,0xFE, - 0xFF,0xFF,0xFF,0xFF,0x02,0x08,0x0A,0x09,0x05,0xF9,0xF0,0xEA,0xEC,0xF7,0xFF,0x03, - 0x06,0x06,0x05,0x05,0x02,0x07,0x0E,0xF9,0xF6,0xF7,0xFD,0x09,0xF9,0xF9,0xFC,0x09, - 0x01,0xF9,0xFB,0x05,0x08,0xF8,0xFB,0xFE,0x0A,0xFB,0xF8,0xFC,0x07,0x03,0xF8,0xFB, - 0x02,0x09,0xF8,0xF9,0xFD,0x09,0xFD,0xF8,0xFB,0x06,0x05,0xF9,0xFC,0x00,0x09,0xFB, - 0xFB,0xFB,0x06,0x01,0xFA,0xFA,0xFF,0x08,0xFC,0xFB,0xFA,0x07,0x03,0xFB,0xFA,0x01, - 0x09,0xFC,0xF9,0xFB,0x0A,0x01,0xF8,0xFA,0x02,0x08,0xF9,0xFC,0xFB,0x08,0x00,0xFB, - 0xFA,0xFE,0x0A,0xFC,0xFB,0xF9,0x09,0x03,0xF8,0xFA,0xFF,0x0A,0xFB,0xFB,0xFB,0x05, - 0x04,0xFA,0xFC,0xFC,0x0B,0xFF,0xF9,0xF9,0x04,0x06,0xF9,0xFD,0xFB,0x08,0x02,0xFB, - 0xF9,0xFE,0x0A,0xFC,0xFA,0xFA,0x06,0x04,0xFA,0xFD,0xFA,0x09,0x00,0xFA,0xFA,0x00, - 0x0A,0xFA,0xFD,0xFA,0x04,0x06,0xFA,0xFB,0xFA,0x0A,0x00,0xF8,0xFC,0xFE,0x09,0xFD, - 0xFB,0xF9,0x03,0x09,0xF7,0xFC,0xFB,0x05,0x05,0xFB,0xFB,0xFC,0x0A,0xFF,0xFA,0xFC, - 0xFD,0x0A,0xFE,0xFA,0xFB,0x02,0x07,0xFB,0xFD,0xF9,0x05,0x07,0xF8,0xFD,0xFB,0x04, - 0x05,0xFA,0xFA,0xFD,0x09,0xFF,0xFB,0xFC,0xFC,0x0B,0xFE,0xFA,0xFD,0xFD,0x09,0xFE, - 0xFA,0xFB,0x00,0x07,0xFC,0xFC,0xF9,0x03,0x08,0xF9,0xFD,0xF9,0x03,0x08,0xF8,0xFD, - 0xFB,0x02,0x08,0xFA,0xFC,0xFC,0x03,0x05,0xFB,0xFB,0xFC,0x05,0x04,0xFB,0xFB,0xFB, - 0x06,0x03,0xFB,0xFC,0xFA,0x07,0x03,0xFA,0xFE,0xFA,0x06,0x04,0xF9,0xFE,0xF9,0x06, - 0x05,0xF8,0x00,0xFA,0x05,0x06,0xF8,0xFF,0xFA,0x03,0x07,0xF8,0xFF,0xFA,0x02,0x08, - 0xFA,0xFE,0xFB,0x00,0x08,0xFB,0xFD,0xFB,0xFE,0x07,0xFE,0xFD,0xFB,0xFD,0x07,0x01, - 0xFB,0xFB,0xFC,0x05,0x03,0xFB,0xFD,0xFC,0x02,0x06,0xFB,0xFC,0xFC,0xFF,0x08,0xFC, - 0xFB,0xFC,0xFD,0x08,0xFF,0xFB,0xFC,0xFD,0x06,0x01,0xFC,0xFD,0xFC,0x02,0x06,0xFC, - 0xFC,0xFC,0x00,0x08,0xFC,0xFC,0xFE,0xFC,0x07,0x00,0xFB,0xFE,0xFC,0x03,0x05,0xFC, - 0xFD,0xFC,0xFF,0x08,0xFD,0xFC,0xFD,0xFD,0x04,0x02,0xFC,0xFD,0xFC,0x01,0x06,0xFC, - 0xFC,0xFD,0xFE,0x05,0x00,0xFB,0xFD,0xFC,0x02,0x05,0xFB,0xFE,0xFC,0xFF,0x06,0xFF, - 0xFC,0xFD,0xFC,0x04,0x04,0xFB,0xFE,0xFC,0xFE,0x06,0xFF,0xFC,0xFD,0xFC,0x03,0x04, - 0xFD,0xFD,0xFD,0xFE,0x05,0x01,0xFC,0xFE,0xFD,0x01,0x04,0xFE,0xFC,0xFE,0xFE,0x03, - 0x02,0xFC,0xFE,0xFD,0xFE,0x05,0x00,0xFB,0xFE,0xFD,0x01,0x04,0xFD,0xFC,0xFE,0xFD, - 0x03,0x03,0xFC,0xFD,0xFE,0xFF,0x04,0x01,0xFB,0xFD,0xFE,0x00,0x04,0xFF,0xFB,0xFE, - 0xFE,0x01,0x03,0xFE,0xFB,0xFE,0xFE,0x01,0x03,0xFD,0xFC,0xFE,0xFF,0x03,0x02,0xFC, - 0xFD,0xFE,0xFE,0x03,0x01,0xFC,0xFE,0xFE,0xFE,0x04,0x00,0xFB,0xFE,0xFE,0x00,0x04, - 0xFE,0xFD,0xFE,0xFD,0x00,0x03,0xFE,0xFD,0xFD,0xFD,0x01,0x02,0xFE,0xFD,0xFE,0xFE, - 0x01,0x02,0xFF,0xFD,0xFE,0xFE,0x01,0x03,0xFE,0xFD,0xFE,0xFE,0x01,0x02,0xFF,0xFD, - 0xFE,0xFE,0x00,0x01,0xFF,0xFD,0xFE,0xFF,0x00,0x02,0x00,0xFD,0xFE,0xFF,0xFF,0x01, - 0x01,0xFD,0xFE,0xFF,0xFE,0x01,0x00,0xFD,0xFE,0xFF,0xFF,0x00,0x02,0xFE,0xFD,0xFF, - 0xFE,0x00,0x02,0xFE,0xFE,0xFF,0xFE,0xFF,0x01,0x00,0xFE,0xFE,0xFE,0xFF,0x01,0x01, - 0xFF,0xFE,0xFE,0xFF,0x00,0x01,0xFF,0xFE,0xFE,0xFE,0xFF,0x01,0x00,0xFE,0xFE,0xFE, - 0xFF,0x00,0x00,0xFF,0xFE,0xFE,0xFF,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x01,0x01, - 0xFF,0xFE,0xFE,0xFF,0xFF,0x01,0x00,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0xFF,0xFE,0xFE, - 0xFF,0xFF,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFE,0xFF,0xFE,0xFF, - 0x01,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0x01,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0x00,0xFF, - 0xFE,0xFF,0xFE,0xFE,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFE,0xFF, - 0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF, - 0x00,0x00,0xFF,0xFE,0xFF,0xFE,0xFE,0xFF -}; -static PROGMEM prog_uchar playerdeath_snd[5627] = { - 0x00,0x02,0x09,0x10,0x15,0x16,0x0D,0x03,0xF9,0xEC,0xE4,0xE5,0xE9,0xEB,0xF7,0x04, - 0x05,0x04,0x09,0x12,0x14,0x0D,0x00,0xF5,0xF5,0xF7,0x02,0x09,0x03,0x03,0x08,0x12, - 0x1A,0x1C,0x1A,0x15,0x0A,0xF8,0xDF,0xC8,0xC0,0xC2,0xC5,0xCD,0xE3,0xF4,0xFE,0x03, - 0x09,0x1B,0x25,0x26,0x20,0x1A,0x1E,0x30,0x3D,0x3D,0x3D,0x3B,0x2C,0x1D,0x0C,0xEF, - 0xD6,0xD4,0xD4,0xD3,0xDA,0xD9,0xCA,0xC0,0xC0,0xC0,0xC4,0xC8,0xDA,0xFE,0x13,0x22, - 0x30,0x38,0x39,0x2F,0x21,0x0A,0xE3,0xC4,0xBF,0xC2,0xBE,0xCD,0xEF,0x03,0x17,0x2A, - 0x36,0x31,0x1A,0x0E,0x0E,0x0E,0x10,0x01,0xE1,0xCB,0xC5,0xCF,0xDE,0xF2,0x10,0x1F, - 0x25,0x1E,0x10,0x0D,0x11,0x1A,0x1A,0x10,0x0B,0x1D,0x38,0x3E,0x3C,0x3D,0x3C,0x2E, - 0x09,0xD9,0xC1,0xBE,0xCA,0xE7,0xFD,0x12,0x19,0x11,0x03,0xF5,0xE8,0xD6,0xD2,0xD5, - 0xD3,0xE4,0x02,0x0C,0xFF,0xE9,0xDE,0xE7,0xF9,0x0D,0x17,0x26,0x39,0x3A,0x22,0xF4, - 0xCB,0xBF,0xC3,0xD5,0xF9,0x1D,0x2A,0x13,0xEC,0xD7,0xD2,0xCE,0xC9,0xC6,0xCD,0xEC, - 0x20,0x3D,0x3D,0x3D,0x3B,0x3D,0x36,0x22,0xF6,0xC6,0xC0,0xC1,0xC0,0xC0,0xCF,0xE6, - 0xE3,0xE2,0xF2,0xFD,0xFD,0xFB,0x07,0x1F,0x36,0x3D,0x3C,0x3D,0x3B,0x3B,0x3C,0x3C, - 0x3D,0x22,0xF8,0xD5,0xBF,0xC1,0xBF,0xC5,0xED,0xFF,0xEF,0xD8,0xC8,0xD6,0xE6,0xEF, - 0xF2,0xF4,0xFA,0x09,0x2C,0x3D,0x3B,0x3C,0x3B,0x29,0x03,0xEC,0xF1,0x08,0x1D,0x23, - 0x0D,0xDC,0xBE,0xC1,0xBF,0xC0,0xBE,0xC8,0xF7,0x27,0x3C,0x3A,0x3B,0x33,0x16,0xFF, - 0xE1,0xC1,0xBF,0xBF,0xC0,0xBE,0xD4,0x0E,0x25,0x23,0x31,0x3B,0x3C,0x39,0x28,0x26, - 0x37,0x3B,0x3A,0x3A,0x19,0xF5,0xF5,0x08,0x1E,0x2A,0x21,0x0E,0xFD,0xF3,0xED,0xEC, - 0xF1,0xF6,0xF9,0xEA,0xCE,0xC6,0xDA,0xF1,0x01,0x09,0x15,0x30,0x3C,0x3A,0x3B,0x3A, - 0x39,0x3E,0x24,0xF1,0xD1,0xCD,0xDF,0xF7,0x14,0x2F,0x2C,0x0B,0xDD,0xC2,0xBF,0xC1, - 0xC8,0xDC,0xF9,0x08,0x0E,0x17,0x18,0x01,0xE0,0xCF,0xD1,0xD0,0xD6,0xDF,0xE0,0xE8, - 0xEC,0xE9,0xE6,0xDB,0xD5,0xDC,0xE8,0x01,0x1F,0x32,0x30,0x1D,0x09,0x05,0x06,0xFD, - 0xF0,0xEA,0xF5,0x17,0x36,0x3C,0x35,0x2C,0x22,0x11,0xFF,0xF6,0xEF,0xF1,0xFD,0x05, - 0x0A,0x0F,0x0F,0x10,0x0F,0x0B,0x0C,0x13,0x19,0x1B,0x1B,0x19,0x13,0x0F,0x07,0xFC, - 0xF4,0xF2,0xF0,0xF1,0xF4,0xF2,0xEB,0xE5,0xE3,0xE5,0xE7,0xE7,0xEF,0xFE,0x05,0x0A, - 0x12,0x17,0x16,0x12,0x0C,0x02,0xF1,0xDD,0xD0,0xCF,0xD6,0xE4,0xF4,0xFD,0x07,0x10, - 0x15,0x12,0x07,0x02,0x01,0x03,0x04,0xFB,0xEC,0xE3,0xE0,0xE4,0xEB,0xF3,0xFD,0x04, - 0x07,0x04,0x06,0x10,0x13,0x13,0x0A,0xFB,0xF6,0x00,0x17,0x2C,0x39,0x3C,0x3B,0x3A, - 0x20,0xF0,0xCA,0xC1,0xD6,0xEA,0xF2,0xFB,0xFE,0xF9,0xED,0xDE,0xD3,0xCA,0xC7,0xD0, - 0xE0,0xFE,0x1F,0x26,0x16,0x00,0xF7,0xF9,0xFF,0x04,0x07,0x10,0x1C,0x1D,0x06,0xEC, - 0xD5,0xC9,0xCF,0xDA,0xF1,0x0E,0x19,0x0B,0xF2,0xE5,0xEA,0xEE,0xE8,0xE4,0xE8,0xFF, - 0x21,0x3A,0x3C,0x35,0x2B,0x25,0x1D,0x11,0xF5,0xCE,0xC2,0xC3,0xC3,0xC3,0xD3,0xE8, - 0xE4,0xE4,0xF2,0xFB,0xFD,0xFB,0x06,0x1B,0x2F,0x3D,0x3B,0x3C,0x36,0x34,0x3B,0x39, - 0x39,0x21,0xFD,0xDA,0xBF,0xC2,0xC0,0xC7,0xEC,0xFC,0xED,0xD5,0xC8,0xD5,0xE7,0xF1, - 0xF2,0xF5,0xFA,0x08,0x2B,0x3C,0x3A,0x3B,0x3A,0x28,0x03,0xEC,0xF2,0x08,0x1D,0x23, - 0x0E,0xDF,0xC2,0xC5,0xC3,0xC4,0xC2,0xCC,0xFB,0x28,0x3C,0x3A,0x3B,0x30,0x14,0xFE, - 0xDE,0xC1,0xC0,0xC1,0xC2,0xBF,0xD6,0x10,0x27,0x24,0x32,0x3A,0x3B,0x37,0x25,0x23, - 0x34,0x37,0x37,0x37,0x16,0xF2,0xF3,0x05,0x1A,0x27,0x1E,0x0C,0xFB,0xF0,0xEB,0xE9, - 0xEC,0xF2,0xF4,0xE5,0xCC,0xC3,0xD9,0xF0,0xFE,0x08,0x14,0x2F,0x39,0x37,0x38,0x37, - 0x37,0x3A,0x23,0xF0,0xCE,0xCA,0xDB,0xF3,0x13,0x31,0x2E,0x09,0xDA,0xBF,0xBF,0xC0, - 0xC0,0xD6,0xF5,0x05,0x0C,0x15,0x17,0x00,0xDA,0xC8,0xCA,0xC9,0xD0,0xDC,0xDB,0xE2, - 0xE8,0xE5,0xE1,0xD1,0xC9,0xD4,0xE3,0x04,0x2B,0x3C,0x38,0x23,0x0C,0x07,0x06,0xF6, - 0xE4,0xDA,0xE7,0x16,0x38,0x39,0x39,0x38,0x39,0x2D,0x15,0x05,0xF5,0xF1,0xFB,0x04, - 0x08,0x06,0x04,0x04,0x02,0x01,0x02,0xFF,0x00,0x01,0x01,0x02,0x02,0x01,0x02,0x03, - 0x01,0x00,0x01,0x03,0x02,0x00,0xFF,0x00,0xFE,0xFC,0xFC,0xFA,0xFC,0xFE,0xFB,0xF8, - 0xFA,0xF9,0xF6,0xF7,0xF6,0xF8,0xF7,0xF7,0xF7,0xF6,0xF8,0xF7,0xF8,0xF5,0xF5,0xF7, - 0xF6,0xF6,0xF7,0xF6,0xF7,0xF6,0xF7,0xF8,0xF7,0xF7,0xF8,0xF7,0xF8,0xF4,0xEA,0xE6, - 0xE5,0xE5,0xF7,0x14,0x19,0x05,0xEF,0xE0,0xD8,0xDA,0xE1,0xF8,0x22,0x3B,0x39,0x3A, - 0x38,0x11,0xE5,0xE1,0xEE,0xED,0xE2,0xD6,0xCF,0xCE,0xCA,0xC7,0xC8,0xC7,0xC7,0xCE, - 0xFD,0x35,0x41,0x3F,0x3F,0x37,0x33,0x29,0x0C,0xF3,0xE5,0xDC,0xDB,0xD1,0xC5,0xD9, - 0xF7,0xFC,0xF3,0xE9,0xE2,0xE4,0xEC,0xF9,0x0B,0x1B,0x34,0x44,0x41,0x42,0x3F,0x42, - 0x2F,0xFC,0xD3,0xC6,0xC7,0xC8,0xC5,0xD2,0xF1,0xFB,0xF7,0xF4,0xEF,0xEE,0xEE,0xEE, - 0xF1,0xF3,0xF6,0xFA,0xFC,0xFC,0xFE,0xF1,0xD7,0xCB,0xCE,0xDA,0xEF,0x06,0x1A,0x2A, - 0x36,0x3B,0x40,0x3F,0x3E,0x40,0x3B,0x43,0x11,0xCC,0xC6,0xC8,0xC8,0xCE,0xF2,0x07, - 0xF6,0xE0,0xCD,0xCA,0xC9,0xCA,0xCE,0xD4,0xD7,0xCD,0xCC,0xE6,0x02,0x08,0xFE,0x01, - 0x1C,0x38,0x3D,0x2A,0x15,0x05,0xFC,0xF8,0xF7,0xF9,0xF8,0xEB,0xDA,0xD8,0xF6,0x21, - 0x31,0x26,0x19,0x1C,0x1A,0x0C,0x0B,0x13,0x14,0x17,0x29,0x34,0x30,0x31,0x2B,0x12, - 0xF7,0xE1,0xD2,0xCD,0xD0,0xD3,0xD9,0xDE,0xDA,0xDE,0xE6,0xF6,0x0E,0x12,0x0D,0x08, - 0x03,0x00,0xFF,0xFE,0xFC,0xFC,0xF4,0xF9,0x0A,0x11,0x0F,0x0C,0x0A,0x07,0x06,0x05, - 0x05,0x07,0x07,0x07,0x08,0x07,0x07,0x05,0x05,0x06,0x07,0x08,0x08,0x07,0x06,0x02, - 0xFF,0xFE,0x05,0x0C,0x0C,0x09,0x05,0x02,0x01,0xFC,0xFC,0x01,0x02,0x01,0x00,0xFF, - 0x00,0x00,0xFA,0xEB,0xE7,0xFD,0x10,0x1B,0x20,0x17,0x0C,0x03,0xFD,0xF9,0xF7,0xF6, - 0xF7,0xF9,0xF9,0xF9,0xFA,0xFC,0xFE,0xFE,0xFF,0x00,0x01,0x01,0x00,0x01,0x00,0x01, - 0xFA,0xE9,0xD8,0xDC,0xF4,0x03,0x09,0x09,0x08,0x09,0x17,0x2D,0x3A,0x3C,0x3D,0x37, - 0x24,0x0C,0xF3,0xEA,0xE5,0xDD,0xE7,0xFB,0x03,0x06,0x0C,0x02,0xED,0xDC,0xD2,0xCC, - 0xC9,0xC8,0xCB,0xD6,0xE5,0x02,0x28,0x38,0x30,0x21,0x0F,0x02,0xFB,0xF8,0xF8,0xFB, - 0xFD,0x01,0x01,0xF4,0xED,0xF5,0xF9,0xFB,0x11,0x32,0x3F,0x32,0x1F,0x19,0x16,0x10, - 0x1A,0x2C,0x2C,0x2D,0x30,0x1F,0x06,0xF1,0xE1,0xDA,0xD9,0xDC,0xE0,0xE4,0xE9,0xEC, - 0xEF,0xF2,0xF5,0xED,0xDC,0xD3,0xD2,0xDD,0xF9,0x19,0x27,0x29,0x36,0x41,0x41,0x41, - 0x43,0x35,0x21,0x12,0xF6,0xDA,0xCD,0xCA,0xCB,0xCA,0xCC,0xE0,0xF7,0xFE,0xF6,0xED, - 0xF4,0x10,0x28,0x27,0x20,0x19,0x17,0x22,0x2D,0x22,0x03,0xE0,0xD2,0xD4,0xE1,0xFF, - 0x15,0x14,0x08,0xF9,0xE9,0xE1,0xDD,0xD6,0xD2,0xD6,0xE6,0x0E,0x37,0x42,0x40,0x3F, - 0x40,0x3A,0x1F,0x06,0xF9,0xF4,0xFF,0x0F,0x0F,0x02,0xF7,0xF0,0xED,0xEC,0xF0,0xF1, - 0xF4,0xF8,0xFA,0xFC,0xFE,0x00,0x01,0x03,0x02,0xF4,0xDF,0xD4,0xD5,0xE2,0xF5,0x08, - 0x19,0x27,0x3A,0x40,0x3E,0x40,0x3F,0x41,0x24,0x03,0xFB,0xF8,0x06,0x15,0x10,0x00, - 0xE5,0xCD,0xCB,0xCC,0xCB,0xCF,0xE4,0xFD,0x0D,0x0F,0x08,0x09,0x00,0xEF,0xE4,0xDB, - 0xDC,0xDB,0xD6,0xE2,0xFD,0x0F,0x12,0x11,0x0F,0x0D,0x0C,0x0C,0x0C,0x0F,0x10,0x10, - 0x11,0x12,0x15,0x15,0x15,0x15,0x15,0x13,0x12,0x11,0x0F,0x0F,0x0D,0x0C,0x0C,0x09, - 0xFE,0xEA,0xDA,0xD6,0xDD,0xEB,0xFA,0x11,0x30,0x3E,0x3D,0x3D,0x3D,0x3B,0x23,0xFE, - 0xE5,0xE5,0xFC,0x1A,0x30,0x33,0x1B,0xEF,0xCF,0xC8,0xCA,0xC9,0xCA,0xC7,0xCE,0xF6, - 0x23,0x39,0x32,0x22,0x17,0x02,0xEF,0xE1,0xDB,0xDB,0xDF,0xE3,0xE2,0xE2,0xE2,0xE0, - 0xE3,0xF5,0x16,0x2E,0x30,0x28,0x28,0x37,0x3C,0x39,0x35,0x1E,0x05,0xFA,0xFF,0x03, - 0x05,0x0F,0x12,0x0A,0xFF,0xF5,0xF0,0xEF,0xF1,0xF4,0xF5,0xF7,0xFA,0xF8,0xFB,0x02, - 0x03,0xFC,0xF5,0xFA,0x03,0x09,0x0A,0x08,0x06,0x05,0x0A,0x10,0x17,0x1E,0x1E,0x14, - 0x0C,0x04,0xFA,0xF7,0xF7,0xF2,0xF4,0xFE,0x00,0x02,0x03,0x00,0xF8,0xF0,0xE8,0xDC, - 0xD7,0xDD,0xE5,0xE4,0xE9,0xFA,0x0C,0x13,0x0E,0x0D,0x15,0x18,0x18,0x18,0x10,0x00, - 0xEF,0xE9,0xE9,0xE7,0xEF,0xF3,0xEF,0xEE,0xF5,0x00,0x03,0xFB,0xF3,0xF5,0xFC,0x08, - 0x23,0x34,0x35,0x32,0x2D,0x1C,0x00,0xEB,0xDD,0xCD,0xC7,0xC6,0xC9,0xD1,0xE1,0xF0, - 0xF8,0xF6,0xEE,0xE7,0xE5,0xE3,0xE5,0xEE,0xFD,0x0E,0x1A,0x21,0x2C,0x37,0x32,0x2D, - 0x2B,0x1D,0x12,0x0B,0xF8,0xE3,0xD8,0xCF,0xC6,0xC6,0xD3,0xE4,0xF4,0xF9,0xF5,0xEE, - 0xF3,0x08,0x18,0x17,0x12,0x0D,0x0A,0x14,0x1B,0x15,0xFD,0xE0,0xD6,0xD5,0xDE,0xF3, - 0x05,0x06,0x01,0xFA,0xEC,0xE5,0xE0,0xD8,0xD4,0xD9,0xE8,0x08,0x28,0x36,0x39,0x31, - 0x2D,0x29,0x11,0xFD,0xF2,0xED,0xF9,0x07,0x06,0xFC,0xF2,0xEB,0xE9,0xEA,0xEA,0xED, - 0xF0,0xF2,0xF5,0xF7,0xFA,0xFC,0xFC,0xFF,0xFC,0xEE,0xDB,0xD1,0xD2,0xDD,0xEF,0x00, - 0x11,0x1F,0x31,0x37,0x36,0x37,0x36,0x37,0x1B,0xFB,0xF2,0xEF,0xFE,0x0D,0x08,0xF9, - 0xDE,0xC6,0xC4,0xC6,0xC4,0xCA,0xDF,0xF6,0x08,0x07,0x02,0x02,0xF8,0xE8,0xDD,0xD6, - 0xD6,0xD4,0xCF,0xDB,0xF6,0x05,0x08,0x08,0x06,0x03,0x02,0x03,0x05,0x08,0x09,0x09, - 0x0A,0x0C,0x0B,0x0D,0x0E,0x0D,0x0E,0x0C,0x0B,0x0A,0x08,0x08,0x05,0x05,0x04,0x02, - 0xF8,0xE4,0xD6,0xD1,0xD7,0xE6,0xF7,0x0E,0x2C,0x39,0x38,0x38,0x39,0x37,0x21,0xFB, - 0xE1,0xDF,0xF7,0x16,0x2B,0x2F,0x15,0xE6,0xC7,0xC2,0xC4,0xC3,0xC4,0xC2,0xC6,0xEF, - 0x23,0x37,0x32,0x22,0x14,0x00,0xEB,0xDA,0xD4,0xD2,0xD7,0xDC,0xD9,0xDA,0xD6,0xD6, - 0xDB,0xEE,0x18,0x35,0x38,0x2E,0x2A,0x34,0x37,0x36,0x37,0x26,0x07,0xFA,0xFF,0x02, - 0x05,0x12,0x18,0x0C,0xFC,0xEF,0xE7,0xE7,0xE7,0xEB,0xEE,0xF2,0xF6,0xF4,0xF7,0xFE, - 0x02,0x01,0x00,0x04,0x09,0x0B,0x0B,0x07,0x05,0x03,0x03,0x02,0x01,0x02,0x03,0x02, - 0x01,0x03,0x02,0x02,0x02,0x01,0x02,0x01,0x01,0x00,0xFC,0xFD,0xFD,0xFD,0xF4,0xE4, - 0xE8,0xF6,0xF6,0xEB,0xE9,0xF4,0xF9,0xF7,0xF4,0xFF,0x1E,0x33,0x36,0x37,0x30,0x11, - 0xED,0xDE,0xDC,0xE4,0xFA,0xFB,0xED,0xE7,0xDF,0xD1,0xC6,0xC5,0xC8,0xD0,0xE1,0x07, - 0x2F,0x37,0x35,0x35,0x31,0x1F,0x00,0xED,0xDB,0xC5,0xC3,0xC4,0xC6,0xC3,0xD4,0xFD, - 0x0C,0x01,0xEB,0xE8,0xFB,0x08,0x0F,0x11,0x12,0x0E,0x11,0x21,0x2A,0x1E,0x04,0xFD, - 0x02,0x00,0x07,0x10,0x0F,0x0A,0x04,0x00,0xFE,0xFF,0xFE,0xFF,0x02,0x03,0x05,0x07, - 0x07,0x0B,0x0B,0x0A,0x0A,0x07,0x07,0x07,0x07,0x06,0x05,0x04,0x01,0xFD,0xF5,0xEA, - 0xEC,0xF4,0x06,0x1A,0x1F,0x1A,0x10,0x08,0xFF,0x02,0x0F,0x12,0x08,0xF9,0xEE,0xE6, - 0xE3,0xE2,0xE1,0xE1,0xE1,0xEA,0xF1,0xF3,0xF4,0xF4,0xF2,0xF3,0xF5,0xF5,0xF7,0xF7, - 0xF8,0xF8,0xF9,0xFA,0xFA,0xFB,0xFB,0xFB,0xFB,0xFC,0xFD,0xFC,0xFC,0xFD,0x01,0xFE, - 0xF6,0xFB,0x01,0xF9,0xE8,0xDB,0xE1,0xFE,0x16,0x18,0x1A,0x24,0x26,0x16,0xFD,0xEA, - 0xDF,0xE0,0xE8,0x04,0x2C,0x3D,0x3A,0x39,0x30,0x0C,0xE6,0xD2,0xCA,0xC8,0xD6,0xEC, - 0xF8,0x05,0x0A,0x02,0xF6,0xEB,0xEE,0xF9,0xFE,0xF6,0xEB,0xE4,0xDF,0xDE,0xDC,0xD7, - 0xD2,0xCF,0xD3,0xDE,0xF0,0x11,0x2F,0x3A,0x3A,0x39,0x3B,0x3B,0x3A,0x3B,0x38,0x38, - 0x34,0x16,0xEF,0xD0,0xC5,0xCC,0xE7,0x08,0x19,0x15,0xFF,0xED,0xDD,0xCF,0xC9,0xC8, - 0xC8,0xC9,0xC7,0xCB,0xDD,0xED,0xF4,0xFE,0x10,0x26,0x37,0x3B,0x32,0x1F,0x0F,0x04, - 0x05,0x1F,0x38,0x3A,0x3A,0x36,0x16,0xED,0xCD,0xC7,0xC9,0xCB,0xEA,0x17,0x34,0x3B, - 0x2D,0x0C,0xF3,0xE8,0xD1,0xC6,0xC8,0xC7,0xC9,0xC6,0xDE,0x13,0x27,0x1F,0x1C,0x25, - 0x32,0x36,0x23,0x11,0x08,0xF0,0xDC,0xD8,0xD6,0xD3,0xD4,0xE5,0x0F,0x36,0x39,0x36, - 0x35,0x31,0x2D,0x16,0xFE,0xEC,0xDF,0xE4,0xFC,0x28,0x3B,0x38,0x37,0x38,0x2E,0x0C, - 0xE4,0xC9,0xC4,0xC9,0xDD,0x01,0x14,0x11,0x0D,0x0E,0x0F,0x05,0xE6,0xCA,0xC9,0xCF, - 0xD5,0xE6,0xFC,0x03,0xF2,0xE5,0xEF,0xF7,0xEE,0xE4,0xEB,0x0A,0x2D,0x3A,0x39,0x2F, - 0x18,0x0B,0x0C,0x03,0xF3,0xF4,0x06,0x1C,0x2C,0x29,0x12,0x02,0xF8,0xF2,0xED,0xEA, - 0xEA,0xEB,0xEF,0xF2,0xF2,0xE9,0xDA,0xE4,0xF3,0xF2,0xFA,0x10,0x28,0x2D,0x19,0x0D, - 0x11,0x0D,0xFC,0xE8,0xDB,0xDE,0xF2,0x05,0x12,0x29,0x36,0x37,0x34,0x1B,0xF3,0xDF, - 0xE0,0xEB,0x00,0x1A,0x20,0x14,0x09,0xFB,0xDC,0xC7,0xC5,0xC8,0xE2,0x03,0x11,0x09, - 0xF4,0xDE,0xD0,0xD6,0xD6,0xCB,0xC8,0xCB,0xDC,0xFC,0x19,0x28,0x2A,0x22,0x23,0x2D, - 0x36,0x37,0x31,0x1E,0x04,0xEE,0xD3,0xC6,0xC9,0xC8,0xCC,0xE1,0x0A,0x2E,0x37,0x34, - 0x2E,0x2E,0x35,0x2D,0x10,0xF1,0xDA,0xD0,0xD8,0xF3,0x1F,0x36,0x36,0x31,0x20,0x0B, - 0xF4,0xE3,0xDE,0xF2,0x15,0x2F,0x38,0x31,0x11,0xEA,0xDA,0xDD,0xEA,0xF3,0xF4,0xE4, - 0xCA,0xC5,0xC8,0xC7,0xC8,0xC7,0xD3,0xE3,0xF1,0x0F,0x28,0x32,0x30,0x2C,0x35,0x37, - 0x36,0x36,0x35,0x36,0x1B,0xEE,0xD1,0xC7,0xDE,0xFA,0x07,0x16,0x18,0x04,0xE8,0xCE, - 0xC8,0xD2,0xDC,0xEA,0x05,0x15,0x19,0x20,0x26,0x25,0x1D,0x10,0xFF,0xDE,0xCA,0xC8, - 0xC9,0xC8,0xCD,0xF3,0x0C,0x04,0xFC,0x06,0x1B,0x20,0x16,0x0F,0x1E,0x32,0x36,0x34, - 0x37,0x2F,0x1D,0x12,0x01,0xEF,0xE1,0xD9,0xE5,0xF9,0xFE,0xFD,0x01,0x0A,0x10,0x06, - 0xF7,0xE5,0xE2,0xEE,0xED,0xE2,0xD7,0xD7,0xEC,0x00,0x0D,0x21,0x2F,0x34,0x31,0x26, - 0x12,0x04,0x01,0xFE,0x0C,0x29,0x35,0x33,0x35,0x2C,0x01,0xDE,0xD2,0xC6,0xC9,0xDB, - 0xE9,0xEF,0xF9,0xF2,0xD8,0xC8,0xC7,0xD3,0xDF,0xED,0xF9,0xF6,0xF6,0xF6,0xED,0xE7, - 0xD8,0xCC,0xD2,0xD5,0xDF,0xF9,0x19,0x2A,0x2A,0x29,0x29,0x20,0x04,0xEF,0xE7,0xE8, - 0xFE,0x16,0x29,0x2F,0x20,0x0E,0x06,0x03,0xF8,0xE1,0xDC,0xE9,0xF2,0xFE,0xFE,0xFA, - 0x00,0x09,0x16,0x1B,0x15,0x0C,0x0F,0x1E,0x2D,0x37,0x35,0x34,0x34,0x34,0x30,0x19, - 0x07,0xF7,0xE5,0xE2,0xDB,0xCB,0xC6,0xD1,0xDB,0xD6,0xCC,0xC7,0xD5,0xEA,0xF7,0x07, - 0x14,0x23,0x32,0x2F,0x29,0x23,0x12,0xFF,0xEA,0xD2,0xC9,0xD0,0xD7,0xE2,0xFA,0x18, - 0x2E,0x2E,0x1B,0x03,0xEE,0xEA,0xF2,0xFB,0x00,0xF2,0xD4,0xC6,0xC7,0xC7,0xC9,0xC9, - 0xD6,0xF5,0x11,0x24,0x33,0x35,0x35,0x32,0x20,0x12,0x08,0x08,0x12,0x14,0x0B,0xFD, - 0xED,0xE6,0xDB,0xCD,0xC9,0xD3,0xF4,0x10,0x1F,0x22,0x15,0x0D,0x0A,0x0A,0x17,0x18, - 0x05,0xED,0xDB,0xD6,0xE7,0x05,0x14,0x12,0x13,0x18,0x14,0x0C,0xFC,0xE9,0xE4,0xDF, - 0xDD,0xEC,0xFD,0x04,0x02,0xFE,0xF8,0xF4,0xFB,0xFC,0xEE,0xDB,0xCC,0xC8,0xCA,0xE0, - 0x09,0x21,0x22,0x23,0x2C,0x28,0x14,0x0B,0x11,0x1A,0x21,0x1A,0x00,0xDA,0xC5,0xC7, - 0xC7,0xCB,0xEA,0x0B,0x14,0x1D,0x21,0x16,0x09,0xFE,0xFF,0xFF,0xF2,0xEA,0xE7,0xE1, - 0xDC,0xE8,0x04,0x1A,0x24,0x23,0x1E,0x14,0x03,0xF0,0xE8,0xF5,0x13,0x2D,0x2F,0x27, - 0x13,0xF9,0xF0,0xE8,0xDE,0xDD,0xF1,0x11,0x29,0x36,0x2C,0x13,0xFF,0xF6,0xE9,0xD1, - 0xC6,0xC9,0xC7,0xCF,0xF7,0x1B,0x22,0x1C,0x18,0x18,0x16,0x12,0x0B,0x02,0xF6,0xDB, - 0xC8,0xC7,0xC8,0xC9,0xCE,0xE4,0xFA,0x1B,0x34,0x36,0x34,0x2F,0x32,0x37,0x32,0x27, - 0x1F,0x12,0x08,0x09,0x03,0x01,0x11,0x22,0x23,0x16,0x03,0xE8,0xD8,0xD3,0xCD,0xD3, - 0xDB,0xDE,0xE8,0xEE,0xF1,0xF6,0xFC,0x02,0x05,0x0C,0x18,0x1B,0x0B,0xF0,0xD5,0xCB, - 0xD9,0xF6,0x08,0x09,0x06,0x01,0xFF,0xF3,0xE4,0xDC,0xDD,0xEC,0xFE,0x15,0x28,0x28, - 0x16,0x07,0x06,0x00,0xEE,0xE7,0xF0,0xF6,0xFD,0x05,0x04,0x01,0x05,0x0C,0x07,0xF4, - 0xDA,0xCA,0xD3,0xEA,0x02,0x13,0x17,0x14,0x0B,0x0C,0x18,0x1C,0x10,0x01,0xF9,0xF2, - 0xED,0xF0,0x02,0x13,0x11,0x03,0xF7,0xF6,0xF7,0xF3,0xF1,0xF8,0x0B,0x21,0x27,0x22, - 0x20,0x1E,0x1F,0x19,0x0B,0x00,0x00,0x07,0x0D,0x20,0x2B,0x2A,0x24,0x1C,0x10,0x01, - 0xFB,0xF9,0xF5,0xF4,0xE5,0xCC,0xC7,0xC8,0xC7,0xC7,0xC8,0xC7,0xCD,0xE7,0xFF,0x14, - 0x21,0x26,0x2D,0x2C,0x2A,0x2C,0x27,0x1D,0x0A,0xEC,0xD1,0xCA,0xCB,0xCC,0xDD,0xFC, - 0x1A,0x29,0x26,0x15,0x00,0xF9,0x01,0x06,0x03,0xF9,0xE6,0xD9,0xD4,0xD7,0xD9,0xDC, - 0xEA,0x01,0x19,0x25,0x2F,0x2E,0x23,0x19,0x08,0xF6,0xEA,0xEB,0xF5,0xFA,0xFE,0x04, - 0x05,0x04,0xF9,0xEC,0xEC,0xF7,0x0C,0x18,0x18,0x12,0x05,0x03,0x08,0x13,0x21,0x1E, - 0x0C,0xF5,0xE1,0xD6,0xE0,0xFA,0x0B,0x10,0x18,0x20,0x1A,0x11,0x04,0xF3,0xEC,0xE3, - 0xDC,0xE7,0xF3,0xF9,0xFC,0x00,0x01,0xFD,0x02,0x03,0xF4,0xE3,0xD5,0xCF,0xD5,0xEB, - 0x0C,0x1E,0x1D,0x1C,0x25,0x22,0x12,0x0C,0x13,0x1F,0x25,0x1F,0x08,0xE2,0xCC,0xC9, - 0xCA,0xD5,0xF1,0x0B,0x13,0x1B,0x1C,0x12,0x06,0xFD,0xFF,0x00,0xF4,0xEB,0xE9,0xE4, - 0xDE,0xE9,0x04,0x19,0x24,0x22,0x1D,0x14,0x02,0xEF,0xE8,0xF5,0x12,0x2C,0x2E,0x26, - 0x12,0xF9,0xEF,0xE8,0xDE,0xDE,0xF1,0x10,0x28,0x35,0x2B,0x11,0xFF,0xF7,0xE9,0xD3, - 0xC9,0xCC,0xCB,0xD4,0xFB,0x1D,0x24,0x1E,0x19,0x1A,0x18,0x15,0x0E,0x04,0xF8,0xDD, - 0xCB,0xC9,0xCA,0xCA,0xD0,0xE5,0xFA,0x1C,0x34,0x37,0x34,0x30,0x33,0x36,0x31,0x26, - 0x1E,0x11,0x07,0x08,0x01,0x01,0x11,0x24,0x26,0x17,0x02,0xE8,0xD9,0xD4,0xCC,0xD2, - 0xDA,0xDC,0xE7,0xEE,0xEF,0xF5,0xFC,0x03,0x06,0x0D,0x18,0x1A,0x07,0xE6,0xCF,0xCA, - 0xD3,0xF4,0x09,0x09,0x07,0xFB,0xF0,0xE2,0xD2,0xCA,0xD5,0xEB,0x04,0x23,0x35,0x33, - 0x1E,0x0C,0x0A,0x03,0xF3,0xF0,0xFB,0xFF,0x06,0x0C,0x07,0x06,0x0B,0x13,0x10,0xFC, - 0xDC,0xCA,0xD7,0xF3,0x10,0x1D,0x17,0x0A,0xFF,0x02,0x0F,0x1A,0x15,0x07,0x03,0xF9, - 0xE6,0xE1,0xEF,0x04,0x0A,0xFD,0xEF,0xEF,0xF5,0xF8,0xF9,0xFD,0x16,0x32,0x34,0x33, - 0x30,0x28,0x22,0x15,0x02,0xF4,0xF6,0xF8,0xF7,0x06,0x11,0x12,0x0B,0xFE,0xF3,0xEA, - 0xEE,0xF8,0xFE,0xFF,0xEA,0xCC,0xC7,0xC8,0xC8,0xCA,0xCB,0xCB,0xCB,0xE6,0x08,0x20, - 0x2C,0x28,0x28,0x25,0x2A,0x34,0x32,0x33,0x27,0x02,0xDA,0xC7,0xC9,0xCB,0xCA,0xD8, - 0xFB,0x1F,0x30,0x28,0x11,0x08,0x12,0x15,0x09,0x03,0xFF,0xF5,0xF9,0x08,0x0D,0x04, - 0x03,0x11,0x1F,0x24,0x1F,0x07,0xF2,0xE6,0xD1,0xC6,0xC8,0xC8,0xC9,0xC8,0xDF,0x11, - 0x30,0x34,0x32,0x2E,0x32,0x33,0x33,0x28,0x07,0xE9,0xDC,0xE5,0x03,0x25,0x34,0x2F, - 0x1E,0x03,0xE2,0xCC,0xC8,0xCD,0xDF,0xFB,0x18,0x2A,0x24,0x18,0x14,0x10,0x04,0xE7, - 0xCD,0xC9,0xC9,0xC8,0xD5,0xF5,0x14,0x1B,0x11,0x0B,0x01,0xF4,0xEB,0xE8,0xF2,0x03, - 0x03,0xF1,0xDD,0xD4,0xDF,0xF0,0xFB,0x05,0x1A,0x32,0x32,0x33,0x2E,0x1C,0x13,0x0C, - 0x13,0x21,0x22,0x15,0x0C,0xFF,0xE6,0xD5,0xD7,0xE8,0xF7,0xF6,0xE0,0xCC,0xC9,0xCA, - 0xC9,0xCC,0xD2,0xDE,0xE9,0xF8,0x18,0x33,0x35,0x33,0x28,0x1E,0x19,0x1C,0x23,0x16, - 0x01,0xF5,0xE7,0xDF,0xE7,0xF5,0xF2,0xE3,0xD5,0xCB,0xD4,0xE8,0xFC,0x0C,0x0C,0x03, - 0x03,0x13,0x29,0x33,0x28,0x10,0xF6,0xD9,0xCB,0xCD,0xCD,0xD5,0xE8,0xF3,0xF9,0x0A, - 0x23,0x33,0x28,0x13,0x05,0xFC,0x01,0x0F,0x14,0x06,0xED,0xD9,0xD8,0xEF,0x0F,0x21, - 0x18,0x0C,0x05,0xF9,0xEF,0xF4,0x0B,0x19,0x15,0x14,0x0D,0x05,0x06,0x0B,0x10,0x12, - 0x13,0x0B,0xFB,0xF2,0xF5,0xFA,0xF6,0xF6,0x02,0x09,0x0B,0x1A,0x2D,0x33,0x2D,0x10, - 0xF0,0xDD,0xCB,0xC9,0xCD,0xCF,0xDB,0xF4,0x0F,0x21,0x26,0x22,0x13,0x06,0xF5,0xD6, - 0xC9,0xCC,0xCC,0xCC,0xCB,0xCD,0xDC,0xF1,0xFB,0x09,0x1F,0x2C,0x2F,0x29,0x2B,0x34, - 0x33,0x33,0x33,0x31,0x17,0xFD,0xFB,0xF9,0xF7,0xFC,0x02,0xFB,0xEB,0xD8,0xC9,0xCA, - 0xC9,0xD4,0xEB,0xF1,0xEC,0xF1,0x01,0x13,0x18,0x0B,0x01,0xF9,0xEB,0xE9,0xEA,0xE6, - 0xEB,0xFA,0x07,0x0C,0x06,0xF7,0xF1,0xF6,0xFE,0x03,0x05,0x05,0xF7,0xE7,0xE3,0xE0, - 0xE1,0xE2,0xEB,0xFD,0x03,0x00,0xF9,0x04,0x1B,0x25,0x1F,0x18,0x1D,0x1F,0x1A,0x18, - 0x29,0x34,0x33,0x31,0x1B,0xFB,0xE6,0xDE,0xDD,0xEC,0x0B,0x2A,0x34,0x2A,0x16,0xF7, - 0xE4,0xDC,0xDC,0xE9,0xF5,0xF0,0xE6,0xD5,0xC9,0xCA,0xCD,0xCC,0xCF,0xE5,0xFA,0x04, - 0x03,0xFA,0xED,0xEC,0xF8,0x06,0x12,0x18,0x1A,0x18,0x12,0x02,0xF1,0xE4,0xDD,0xE2, - 0xF3,0x17,0x32,0x35,0x34,0x22,0x06,0xF5,0xEF,0xF6,0xF4,0xE9,0xE8,0xE7,0xE6,0xF3, - 0x0B,0x1D,0x18,0x08,0x00,0xF6,0xEB,0xEA,0xFE,0x15,0x20,0x2D,0x35,0x2F,0x21,0x17, - 0x13,0x14,0x11,0xFF,0xEC,0xDA,0xCB,0xCD,0xCC,0xD0,0xF3,0x0F,0x14,0x0F,0x0B,0x14, - 0x1E,0x1D,0x17,0x14,0x12,0x16,0x2A,0x32,0x31,0x31,0x32,0x23,0xFE,0xDB,0xC9,0xD1, - 0xE6,0xFC,0x08,0xFF,0xE2,0xCC,0xCB,0xCA,0xCC,0xCE,0xD5,0xE8,0xF3,0xFB,0x06,0x11, - 0x13,0x05,0xF7,0xF0,0xE1,0xD1,0xD3,0xE6,0xFD,0x10,0x19,0x19,0x0F,0xF9,0xED,0xEE, - 0xF5,0xFD,0x02,0x02,0xF8,0xE2,0xD3,0xDB,0xF0,0xFE,0xF9,0xFA,0x0A,0x12,0x0D,0x06, - 0x0C,0x20,0x2C,0x25,0x17,0x0D,0x07,0x07,0x0A,0x12,0x2B,0x36,0x32,0x32,0x2C,0x1B, - 0x05,0xF0,0xE1,0xE3,0xF5,0x0F,0x23,0x28,0x18,0xF4,0xD6,0xCC,0xCD,0xCF,0xCE,0xCF, - 0xCE,0xCF,0xCD,0xD6,0xE5,0xE9,0xF2,0xFB,0x07,0x19,0x26,0x29,0x17,0xFB,0xEA,0xDE, - 0xD9,0xE1,0xE8,0xEA,0xF2,0x04,0x0D,0x17,0x22,0x28,0x2E,0x25,0x16,0x13,0x20,0x30, - 0x34,0x2F,0x17,0xF4,0xDE,0xDD,0xF4,0x0D,0x13,0x13,0x15,0x09,0xF5,0xF1,0xFA,0x03, - 0x01,0xED,0xDD,0xD5,0xDB,0xF0,0x01,0x0A,0x13,0x27,0x34,0x32,0x33,0x32,0x33,0x29, - 0x07,0xE5,0xD1,0xCE,0xD2,0xE2,0xFA,0x15,0x2C,0x34,0x26,0x08,0xF7,0xF7,0xFB,0xF7, - 0xF0,0xE4,0xD5,0xCF,0xDD,0xF9,0x0E,0x0E,0x05,0x05,0x08,0x06,0x03,0xFF,0x05,0x11, - 0x17,0x1A,0x0E,0xF3,0xE3,0xE3,0xEF,0xFE,0x07,0x0A,0x07,0xF7,0xE7,0xDA,0xD7,0xE1, - 0xE7,0xEC,0xEC,0xE6,0xE3,0xE8,0xFA,0x09,0x10,0x13,0x18,0x2A,0x33,0x32,0x32,0x2C, - 0x22,0x0D,0xFA,0xF1,0xF3,0xF9,0xFD,0x00,0x02,0x01,0xFC,0xEF,0xEC,0xF6,0x03,0x08, - 0xFF,0xE6,0xD2,0xD0,0xD2,0xDE,0xED,0xF7,0xF7,0xF0,0xF7,0x00,0xFE,0xF2,0xED,0xF8, - 0x0A,0x19,0x23,0x1C,0x09,0xFF,0xF5,0xEB,0xEC,0xEB,0xE8,0xE7,0xE0,0xDC,0xE6,0xFB, - 0x0C,0x0C,0x09,0x0E,0x13,0x11,0x0F,0x1B,0x2B,0x31,0x30,0x24,0x13,0x07,0x0A,0x13, - 0x16,0x19,0x19,0x12,0x0D,0x05,0xF7,0xE4,0xDC,0xE0,0xE3,0xEC,0xFD,0x09,0x07,0xFE, - 0xF5,0xF8,0x01,0x0A,0x0E,0x0A,0x02,0x03,0x06,0x04,0x0B,0x19,0x21,0x1B,0x10,0xFE, - 0xEA,0xDA,0xD2,0xD3,0xDD,0xF7,0x13,0x23,0x21,0x16,0x0B,0x05,0x00,0xF2,0xE2,0xD6, - 0xD1,0xDC,0xF7,0x11,0x24,0x23,0x1A,0x12,0x05,0xFA,0xF9,0xFC,0xFF,0xFE,0xF3,0xDD, - 0xD4,0xD5,0xD7,0xE3,0xEF,0xF9,0x0E,0x23,0x2C,0x2E,0x2A,0x29,0x27,0x1C,0x18,0x11, - 0x01,0xF6,0xF8,0xFC,0xFD,0x04,0x0B,0x0F,0x10,0x0B,0xFC,0xEF,0xE8,0xE0,0xDB,0xD7, - 0xD3,0xD3,0xD6,0xE8,0x02,0x0F,0x0F,0x0C,0x14,0x1E,0x20,0x1E,0x17,0x10,0x06,0xF8, - 0xF5,0xF8,0xFE,0x03,0x02,0xFC,0xFB,0xFF,0xFF,0xFB,0xFF,0x0D,0x1A,0x1A,0x10,0x02, - 0xF2,0xEB,0xF1,0xFA,0x02,0x00,0xF4,0xE9,0xDB,0xD5,0xD6,0xD5,0xD9,0xE7,0xF8,0x04, - 0x0B,0x0A,0x08,0x09,0x0A,0x0D,0x0F,0x15,0x1B,0x18,0x10,0x05,0xFC,0xF7,0xEF,0xEB, - 0xE7,0xEC,0xF6,0xFF,0x0A,0x12,0x1C,0x22,0x1D,0x1A,0x19,0x12,0x03,0xF2,0xE5,0xDF, - 0xE0,0xEC,0xF9,0xFF,0x05,0x04,0x03,0x04,0x01,0x01,0x00,0x04,0x12,0x20,0x29,0x27, - 0x18,0x04,0xF7,0xEB,0xE7,0xEA,0xED,0xF3,0xFB,0xFD,0xF5,0xF1,0xF6,0xFE,0xFE,0xF8, - 0xF5,0xF3,0xF3,0xF3,0xFC,0x09,0x0B,0x05,0xFF,0x02,0x06,0x09,0x08,0x08,0x0F,0x14, - 0x13,0x10,0x0E,0x05,0xF9,0xF3,0xEF,0xF3,0xFB,0x02,0x06,0x04,0x01,0xF9,0xF3,0xF5, - 0xF8,0xFA,0xF4,0xEB,0xE6,0xE8,0xF6,0x05,0x0E,0x0E,0x0E,0x13,0x14,0x13,0x0E,0x06, - 0x00,0xF4,0xE8,0xE5,0xEA,0xF3,0xF9,0xFC,0xFF,0x04,0x07,0x00,0xFD,0x01,0x04,0x04, - 0xF8,0xE6,0xD9,0xD6,0xDB,0xE8,0xF7,0x03,0x08,0x06,0x07,0x07,0x01,0xFB,0xF6,0xFD, - 0x0A,0x14,0x17,0x0F,0x03,0xFB,0xF7,0xF4,0xF5,0xF5,0xF4,0xF2,0xEB,0xE5,0xE8,0xF5, - 0x02,0x05,0x05,0x09,0x0C,0x0C,0x0D,0x14,0x1C,0x21,0x21,0x18,0x0B,0x01,0x02,0x06, - 0x07,0x0B,0x0B,0x08,0x07,0x04,0xFC,0xF0,0xE8,0xE7,0xE8,0xED,0xF8,0x00,0xFD,0xF6, - 0xF2,0xF6,0xFF,0x07,0x0A,0x06,0x02,0x02,0x03,0x01,0x05,0x10,0x14,0x0F,0x06,0xFA, - 0xEB,0xE0,0xDC,0xDE,0xE8,0xFB,0x11,0x1D,0x1C,0x14,0x0B,0x07,0x02,0xF7,0xE9,0xDF, - 0xDD,0xE5,0xF9,0x0F,0x1D,0x1C,0x14,0x0D,0x02,0xF9,0xF9,0xFB,0xFD,0xFD,0xF4,0xE3, - 0xDA,0xDB,0xDD,0xE7,0xF2,0xFB,0x0C,0x1D,0x23,0x25,0x23,0x21,0x1E,0x17,0x14,0x0E, - 0x01,0xF8,0xFA,0xFD,0xFF,0x04,0x0A,0x0E,0x0E,0x09,0xFD,0xF2,0xEC,0xE6,0xE2,0xDE, - 0xDA,0xD9,0xDD,0xEB,0x01,0x0D,0x0C,0x0A,0x10,0x18,0x1A,0x18,0x12,0x0D,0x03,0xF8, - 0xF5,0xF8,0xFE,0x03,0x02,0xFC,0xFC,0xFE,0xFE,0xFB,0xFE,0x0A,0x14,0x14,0x0D,0x01, - 0xF2,0xEE,0xF3,0xFA,0x00,0xFF,0xF5,0xEA,0xDE,0xDB,0xDC,0xDB,0xDD,0xEA,0xF9,0x04, - 0x0A,0x08,0x07,0x08,0x09,0x0C,0x0D,0x11,0x17,0x14,0x0C,0x02,0xFA,0xF5,0xED,0xE6, - 0xE3,0xE7,0xF2,0xFF,0x0B,0x14,0x19,0x1D,0x19,0x15,0x15,0x10,0x04,0xF3,0xE6,0xDE, - 0xE0,0xEF,0xFF,0x07,0x0C,0x09,0x04,0x02,0xFE,0xFA,0xF6,0xFB,0x07,0x15,0x20,0x22, - 0x18,0x0A,0x01,0xF7,0xF0,0xEE,0xEB,0xEC,0xF0,0xEE,0xE9,0xEC,0xF6,0x00,0xFF,0xFA, - 0xF9,0xFA,0xFC,0x00,0x07,0x0D,0x0A,0x01,0xFD,0xFE,0x02,0x08,0x08,0x09,0x0F,0x11, - 0x0D,0x09,0x0B,0x09,0x01,0xF8,0xF0,0xEE,0xF4,0xFD,0x05,0x09,0x0C,0x09,0x02,0x02, - 0x04,0x01,0xF8,0xEF,0xE9,0xEA,0xF4,0x02,0x0B,0x09,0x08,0x04,0xFC,0xF9,0xF4,0xF0, - 0xEB,0xE4,0xDF,0xDF,0xE8,0xF2,0xF8,0xFC,0x01,0x09,0x12,0x11,0x0E,0x0D,0x0B,0x03, - 0xF6,0xEA,0xE3,0xE2,0xE9,0xF5,0x02,0x10,0x19,0x1C,0x19,0x0F,0x07,0x02,0x00,0x04, - 0x0B,0x0D,0x08,0x01,0xF7,0xF2,0xF6,0xFD,0x01,0x01,0x00,0xFD,0xF5,0xEC,0xE7,0xEC, - 0xF3,0xF9,0x01,0x05,0x07,0x0A,0x0C,0x0E,0x0E,0x10,0x11,0x0B,0x03,0xFE,0xF9,0xF3, - 0xF2,0xF6,0xF8,0xFC,0x03,0x0C,0x12,0x11,0x05,0xFB,0xF7,0xF6,0xF4,0xF1,0xEC,0xE9, - 0xEC,0xF6,0x04,0x0B,0x0A,0x06,0x04,0x02,0xFC,0xF8,0xF9,0xFA,0xF5,0xEC,0xE6,0xE5, - 0xE7,0xED,0xF6,0xFE,0x08,0x12,0x18,0x18,0x18,0x1D,0x1F,0x19,0x13,0x0D,0x06,0x01, - 0x04,0x04,0x04,0x04,0x00,0xFD,0xFC,0xF7,0xEE,0xE7,0xE7,0xEA,0xF0,0xF5,0xFA,0xFA, - 0xFA,0xFE,0x06,0x0A,0x07,0x07,0x06,0x03,0xFE,0xF8,0xF4,0xF1,0xEF,0xEC,0xEC,0xEF, - 0xF7,0x01,0x06,0x09,0x0E,0x16,0x19,0x15,0x12,0x12,0x0E,0x07,0x02,0xFF,0xFB,0xFD, - 0x02,0x09,0x0C,0x0A,0x02,0xFC,0xF8,0xF0,0xE8,0xE6,0xE9,0xEF,0xF6,0xFB,0x00,0x01, - 0x01,0x03,0x05,0x07,0x09,0x0C,0x0B,0x05,0x01,0xFF,0x01,0x03,0x03,0xFE,0xF8,0xF4, - 0xF1,0xF5,0xFB,0x03,0x0A,0x0B,0x07,0x04,0x06,0x0C,0x0D,0x08,0xFE,0xF6,0xF0,0xF0, - 0xF8,0x01,0x06,0x05,0x05,0x02,0xFA,0xF5,0xF6,0xF9,0xF9,0xF8,0xF6,0xEF,0xEC,0xF0, - 0xF7,0xFC,0xFD,0x00,0x05,0x0A,0x0E,0x0F,0x0C,0x07,0x02,0xFA,0xF3,0xEC,0xE7,0xE7, - 0xEB,0xF7,0x05,0x0D,0x0E,0x0C,0x0D,0x0F,0x0F,0x09,0x04,0x00,0x00,0x04,0x08,0x09, - 0x06,0x06,0x06,0x07,0x05,0xFF,0xF9,0xF8,0xF9,0xF6,0xF5,0xF7,0xF6,0xF7,0xF6,0xF7, - 0xF8,0xF9,0xFC,0x00,0x03,0x06,0x0A,0x0D,0x0B,0x0B,0x0C,0x0C,0x0B,0x08,0x02,0xFA, - 0xF3,0xED,0xEC,0xF2,0xFA,0x00,0x01,0xFF,0xFB,0xFB,0xFC,0xFD,0xFC,0xFB,0xFA,0xFA, - 0xF8,0xF9,0xFD,0x03,0x04,0x01,0xFF,0xFF,0x03,0x07,0x07,0x05,0x06,0x06,0x03,0x00, - 0xFD,0xFA,0xF8,0xF6,0xF6,0xFA,0x01,0x0A,0x0B,0x06,0xFE,0xF9,0xF9,0xFA,0xFE,0x01, - 0x01,0xFF,0xFD,0xFA,0xF8,0xF9,0xFA,0xFC,0xFE,0xFF,0xFF,0xFF,0xFD,0xFA,0xF8,0xF9, - 0x00,0x06,0x0A,0x09,0x06,0x02,0xFF,0xFB,0xF7,0xF6,0xF6,0xF7,0xFE,0x07,0x0F,0x14, - 0x11,0x0D,0x09,0x03,0xFF,0xFE,0xFD,0xFC,0xFA,0xF6,0xF2,0xF2,0xF7,0xFD,0x00,0xFF, - 0xFD,0xFF,0x02,0x05,0x09,0x09,0x08,0x0A,0x0E,0x10,0x0F,0x0A,0x03,0xFF,0xFB,0xF5, - 0xF3,0xF4,0xF6,0xFB,0xFC,0xFB,0xFC,0x00,0x02,0x02,0xFF,0xFD,0xFC,0xFD,0xFE,0xFE, - 0xFF,0xFD,0xFB,0xFC,0x01,0x06,0x08,0x06,0x03,0x00,0xFC,0xFA,0xFA,0xFD,0x03,0x03, - 0x02,0xFF,0xFB,0xF6,0xF5,0xF7,0xF9,0xFE,0x02,0x02,0x01,0xFF,0xFE,0xFD,0xFC,0xFA, - 0xF8,0xF7,0xF9,0xFE,0x04,0x07,0x07,0x06,0x05,0x03,0xFF,0xFD,0xFA,0xF7,0xF8,0xF7, - 0xF5,0xF5,0xF6,0xF9,0xFB,0xFA,0xFB,0xFC,0xFF,0x02,0x05,0x07,0x06,0x04,0x04,0x06, - 0x09,0x0C,0x0A,0x09,0x07,0x02,0xFF,0xFD,0xFC,0xFD,0xFE,0xFE,0xFC,0xFD,0xFC,0xFB, - 0xFA,0xFC,0x01,0x04,0x04,0x03,0x04,0x03,0x04,0x04,0x03,0x03,0x01,0x00,0xFF,0xFD, - 0xFA,0xFA,0xFD,0x00,0x02,0x02,0x00,0xFE,0xFC,0xFA,0xF9,0xF8,0xF7,0xF6,0xF9,0xFA, - 0xFC,0x00,0x03,0x05,0x04,0x04,0x05,0x04,0x03,0x01,0x00,0x01,0x04,0x08,0x0A,0x0B, - 0x0B,0x0A,0x05,0xFF,0xF9,0xF6,0xF8,0xFB,0xFF,0x01,0x01,0xFE,0xF9,0xF8,0xF8,0xF7, - 0xF5,0xF5,0xF8,0xFA,0xFF,0x02,0x04,0x04,0x02,0x00,0xFF,0xFE,0xFD,0xFD,0xFD,0xFC, - 0xFB,0xFA,0xF9,0xFA,0xF9,0xFB,0xFD,0x01,0x04,0x05,0x04,0x02,0x01,0x00,0x01,0x02, - 0x04,0x03,0x00,0xFD,0xFC,0xFB,0xFD,0x00,0x01,0x03,0x04,0x03,0x03,0x02,0x01,0xFF, - 0xFD,0xFD,0xFE,0x02,0x05,0x06,0x06,0x04,0xFF,0xFB,0xF7,0xF4,0xF3,0xF3,0xF6,0xF8, - 0xFB,0xFF,0x02,0x02,0x01,0xFF,0x00,0x00,0xFF,0xFD,0xFA,0xF9,0xF7,0xF5,0xF6,0xF7, - 0xF9,0xFC,0xFF,0x01,0x04,0x07,0x07,0x08,0x07,0x08,0x09,0x09,0x08,0x08,0x05,0x01, - 0xFF,0xFD,0xFB,0xFC,0xFF,0x00,0x01,0x01,0xFD,0xFB,0xFA,0xFA,0xF9,0xF7,0xF6,0xF7, - 0xF8,0xFB,0x00,0x03,0x03,0x03,0x02,0x04,0x06,0x07,0x04,0x01,0xFF,0xFB,0xF9,0xFA, - 0xFB,0xFC,0xFD,0xFE,0xFE,0xFF,0x00,0x01,0x01,0x00,0x02,0x04,0x05,0x05,0x04,0x02, - 0x02,0x01,0xFF,0xFE,0xFC,0xFB,0xFA,0xFA,0xFB,0xFB,0xFD,0xFD,0xFC,0xFC,0xFD,0xFE, - 0xFD,0xFE,0xFE,0xFF,0x00,0x01,0x03,0x04,0x04,0x05,0x04,0x03,0x01,0xFF,0xFE,0xFF, - 0xFF,0x00,0xFF,0xFE,0xFC,0xFB,0xFC,0xFE,0xFF,0xFF,0xFE,0xFD,0xFC,0xFB,0xFC,0xFE, - 0xFF,0xFD,0xFD,0xFE,0xFE,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x00, - 0xFF,0x00,0x01,0x03,0x03,0x03,0x01,0xFF,0xFE,0xFD,0xFE,0xFF,0x00,0x01,0x01,0x00, - 0xFF,0xFF,0xFE,0xFF,0x00,0xFE,0xFC,0xFA,0xF9,0xFA,0xFB,0xFC,0xFE,0xFF,0x01,0x01, - 0x02,0x04,0x03,0x02,0x00,0xFF,0xFD,0xFD,0xFC,0xFC,0xFB,0xFC,0xFE,0xFF,0x00,0x01, - 0x01,0x02,0x02,0x01,0xFF,0x00,0x02,0x02,0x03,0x02,0x01,0xFF,0xFF,0xFE,0xFF,0xFE, - 0xFF,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFE,0xFD,0xFE,0xFE,0xFD,0xFE,0xFF,0xFF,0x00, - 0x01,0x01,0x00,0x01,0x00,0xFF,0xFE,0xFD,0xFD,0xFE,0xFE,0xFD,0xFE,0xFF,0x00,0x01, - 0x00,0x01,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFE,0xFE,0xFE, - 0xFF,0xFE,0xFE,0xFD,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00, - 0x00,0xFF,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xFF,0xFE,0xFE,0xFF, - 0xFE,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0x00,0x01,0x00,0xFF,0xFF,0xFE,0xFF,0xFF,0x00, - 0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0x00,0xFF,0xFE,0xFD,0xFC,0xFD,0xFD,0xFC,0xFD, - 0xFF,0x00,0x01,0x01,0x00,0x00,0xFF,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFC,0xFC,0xFD, - 0xFF,0xFF,0x00,0x01,0x02,0x02,0x03,0x02,0x02,0x01,0x02,0x01,0x02,0x02,0x01,0x00, - 0xFF,0xFE,0xFD,0xFE,0xFE,0xFF,0x00,0xFF,0xFF,0xFE,0xFD,0xFE,0xFD,0xFD,0xFC,0xFC, - 0xFD,0xFD,0xFF,0x00,0xFF,0x00,0xFF,0x01,0x02,0x02,0x01,0x00,0x00,0xFE,0xFD,0xFD, - 0xFE,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00,0x01,0x02,0x01,0x01,0x00, - 0x00,0xFF,0xFF,0xFE,0xFE,0xFC,0xFD,0xFD,0xFC,0xFD,0xFF,0xFF,0xFE,0xFD,0xFE,0xFF, - 0xFE,0xFF,0xFE,0xFF,0xFF,0x00,0x01,0x02,0x01,0x02,0x02,0x01,0x00,0x00,0xFF,0x00, - 0xFF,0x00,0xFF,0xFE,0xFE,0xFD,0xFE,0xFE,0xFF,0xFE,0xFF,0xFE,0xFE,0xFD,0xFE,0xFE, - 0xFF,0xFE,0xFD,0xFE,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF, - 0xFF,0x00,0x00,0x01,0x02,0x01,0x00,0xFF,0xFE,0xFE,0xFE,0xFF,0x00,0x00,0x00,0x00, - 0xFF,0xFE,0xFE,0xFF,0x00,0xFF,0xFD,0xFC,0xFB,0xFC,0xFD,0xFE,0xFE,0xFF,0x00,0x00, - 0x01,0x02,0x02,0x01,0xFF,0x00,0xFE,0xFD,0xFD,0xFE,0xFD,0xFE,0xFE,0xFF,0xFF,0x00, - 0x00,0x01,0x00,0xFF,0xFF,0x00,0x00,0x00,0x01,0x00,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE, - 0xFF,0xFF,0x00,0xFF,0x00,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFE,0xFF,0xFF,0x00,0xFF, - 0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFE,0xFD,0xFE,0xFE,0xFE,0xFF,0xFE,0xFF,0x00, - 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, - 0xFF,0x00,0xFF,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00, - 0xFF,0xFF,0x00,0x00,0x01,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF, - 0xFE,0xFF,0xFE,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0x00, - 0x00,0xFF,0xFE,0xFF,0xFE,0xFE,0xFF,0xFE,0xFE,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, - 0x00,0xFF,0x00,0x00,0xFF,0xFF,0xFE,0xFE,0xFF,0xFE,0xFD,0xFE,0xFE,0xFF,0x00,0xFF, - 0x00,0xFF,0x00,0xFF,0x00,0x01,0x00,0xFF,0xFF,0xFE,0xFE,0xFF,0x00,0xFF,0x00,0xFF, - 0x00,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0x00,0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF, - 0xFE,0xFF,0xFE,0xFD,0xFE,0xFD,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0x00,0x00, - 0xFF,0x00,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x00,0xFF,0xFE, - 0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00, - 0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF -}; -static PROGMEM prog_uchar beat1_snd[588] = { - 0xF9,0xEA,0xDA,0xCC,0xC3,0xC3,0xCB,0xD8,0xE6,0xF4,0x01,0x0E,0x1D,0x28,0x31,0x37, - 0x3B,0x3C,0x3B,0x3C,0x3C,0x3B,0x3B,0x37,0x30,0x2C,0x25,0x1F,0x1A,0x10,0x0A,0x02, - 0xFB,0xF8,0xF2,0xEB,0xE5,0xE1,0xDD,0xDA,0xDB,0xE3,0xEA,0xEA,0xED,0xEA,0xE1,0xD8, - 0xD1,0xC7,0xBE,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC, - 0xBD,0xBC,0xBE,0xC5,0xCE,0xD7,0xDE,0xE6,0xEE,0xF8,0xFD,0x04,0x0D,0x14,0x1E,0x25, - 0x2B,0x30,0x37,0x3C,0x3B,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C, - 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x34,0x2E, - 0x2D,0x28,0x20,0x1C,0x0E,0xFC,0xEB,0xDA,0xD0,0xCC,0xCE,0xD4,0xDC,0xE7,0xEF,0xF6, - 0xFC,0x01,0x05,0x0A,0x0D,0x0D,0x0E,0x0A,0x08,0x06,0x00,0xFC,0xFA,0xF4,0xEE,0xE6, - 0xE0,0xD8,0xD1,0xCC,0xC3,0xBD,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC, - 0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBD, - 0xBC,0xBD,0xBC,0xBC,0xBD,0xBC,0xBD,0xBC,0xC0,0xC9,0xD4,0xE0,0xEC,0xF8,0x01,0x0D, - 0x14,0x1D,0x29,0x32,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3C,0x3C, - 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C, - 0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x38,0x28,0x14,0x02,0xF4,0xED,0xEF,0xF4,0xFA, - 0x00,0x09,0x12,0x1B,0x20,0x24,0x2A,0x2D,0x2E,0x2D,0x2C,0x28,0x25,0x22,0x1C,0x16, - 0x0E,0x06,0xFF,0xF9,0xEF,0xE9,0xE2,0xDA,0xD2,0xCA,0xC6,0xBD,0xBC,0xBD,0xBC,0xBD, - 0xBC,0xBF,0xC1,0xBE,0xBD,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBC,0xBC,0xBC, - 0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBD,0xBD,0xC2,0xCB,0xD7, - 0xE0,0xE8,0xF4,0xFD,0x04,0x0C,0x16,0x1F,0x26,0x2B,0x35,0x3B,0x3B,0x3C,0x3B,0x3C, - 0x3B,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, - 0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3A,0x35,0x31,0x2B,0x27,0x1C,0x08,0xF9,0xEA,0xDF, - 0xDD,0xDD,0xE5,0xED,0xF4,0xFC,0x04,0x0B,0x13,0x1A,0x1D,0x1F,0x1F,0x1F,0x1E,0x1C, - 0x16,0x10,0x0D,0x05,0xFE,0xFB,0xF4,0xEE,0xE5,0xDC,0xD5,0xCC,0xC8,0xC0,0xBC,0xBD, - 0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBD,0xBE,0xBD,0xBC,0xBC,0xBD,0xBC,0xBC,0xBC,0xBC, - 0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBC,0xBD,0xBC,0xC2, - 0xCE,0xD7,0xE2,0xEC,0xF4,0xFD,0x06,0x12,0x1A,0x22,0x2C,0x35,0x3B,0x3C,0x3B,0x3C, - 0x3B,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C,0x3C, - 0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3B,0x39,0x30,0x22, - 0x0C,0xFD,0xEF,0xE6,0xE7,0xE7,0xF1,0xFA,0xFF,0x0B,0x12,0x1A,0x22,0x25,0x28,0x2B, - 0x2D,0x28,0x23,0x1D,0x19,0x13,0x0C,0x06,0xFF,0xFB,0xF3,0xE9,0xE4,0xDC,0xD3,0xCD, - 0xC7,0xBF,0xBC,0xBD,0xBD,0xBD,0xBE,0xBD,0xBE,0xC1,0xC3,0xC3,0xBE,0xBD,0xBE,0xBD, - 0xBE,0xBE,0xBF,0xBE,0xBF,0xBF,0xC0,0xBF,0xC0,0xC0,0xC1,0xC0,0xC1,0xC2,0xC2,0xC1, - 0xC2,0xC1,0xC5,0xCE,0xD9,0xE4,0xED,0xF7,0x00,0x09,0x13,0x19,0x22,0x2D,0x34,0x3C, - 0x41,0x40,0x40,0x41,0x40,0x3F,0x3F,0x40,0x3F,0x3F,0x3E,0x3F,0x3E,0x3D,0x3E,0x3E, - 0x3D,0x3C,0x3D,0x3D,0x3C,0x3B,0x3C,0x3C,0x3B,0x3A,0x3B,0x3A,0x3B,0x3B,0x39,0x34, - 0x2E,0x29,0x26,0x21,0x1B,0x17,0x13,0x10,0x0A,0x04,0x01,0xFF -}; -static PROGMEM prog_uchar beat2_snd[527] = { - 0xFE,0xF3,0xE4,0xD5,0xCA,0xC7,0xCD,0xD6,0xE4,0xF3,0xFE,0x0C,0x1A,0x24,0x2F,0x36, - 0x3A,0x3E,0x41,0x40,0x3F,0x3D,0x3B,0x38,0x32,0x2C,0x27,0x22,0x1B,0x17,0x0F,0x08, - 0x04,0xFD,0xF8,0xF2,0xEB,0xE6,0xDF,0xDE,0xE2,0xE5,0xEB,0xF0,0xEF,0xEF,0xE9,0xE0, - 0xD9,0xD1,0xC5,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC2,0xC1,0xC2,0xC1,0xC1,0xC2,0xC1, - 0xC2,0xC1,0xC4,0xCB,0xD1,0xD9,0xE3,0xE8,0xF3,0xFD,0x02,0x09,0x13,0x1B,0x24,0x2A, - 0x2F,0x35,0x3B,0x42,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42, - 0x42,0x42,0x42,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x41,0x42,0x3B,0x37,0x35, - 0x2F,0x2B,0x26,0x23,0x1F,0x18,0x14,0x0F,0x0D,0x09,0x04,0x00,0xFC,0xF9,0xF4,0xF1, - 0xEE,0xEA,0xE9,0xE5,0xE2,0xDE,0xCF,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC3, - 0xCC,0xD5,0xE2,0xEA,0xF2,0xF9,0xFC,0x01,0x02,0x01,0x02,0xFF,0xFC,0xF8,0xF5,0xF5, - 0xEF,0xEB,0xE7,0xE0,0xDA,0xD6,0xD2,0xCE,0xCB,0xC7,0xC4,0xC2,0xC1,0xC2,0xC6,0xCF, - 0xD8,0xDA,0xD9,0xD9,0xD4,0xCC,0xC6,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC1, - 0xC1,0xC1,0xC1,0xC2,0xC1,0xC6,0xCE,0xD6,0xDD,0xE6,0xF1,0xFB,0x02,0x0A,0x13,0x1E, - 0x27,0x30,0x3A,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, - 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, - 0x41,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x40,0x3A,0x39,0x32,0x2B,0x26,0x22,0x1C, - 0x16,0x12,0x0E,0x08,0x04,0x03,0x00,0xFA,0xF8,0xF5,0xEF,0xE6,0xD2,0xC3,0xC1,0xC1, - 0xC2,0xC1,0xC2,0xC1,0xC3,0xCC,0xD6,0xE1,0xEA,0xF2,0xF9,0xFB,0xFD,0xFE,0xFF,0x00, - 0xFE,0xFC,0xFA,0xF9,0xF1,0xEB,0xE8,0xE4,0xDD,0xD8,0xD4,0xCC,0xC7,0xC2,0xC1,0xC2, - 0xC1,0xC2,0xC1,0xC2,0xC2,0xC6,0xCA,0xCB,0xCB,0xC5,0xC1,0xC2,0xC1,0xC2,0xC1,0xC1, - 0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC1,0xC2,0xC1,0xC2,0xC1,0xC3,0xCB,0xD4, - 0xDE,0xE9,0xF3,0xFA,0x02,0x0C,0x14,0x1E,0x27,0x2E,0x36,0x3E,0x42,0x41,0x42,0x42, - 0x41,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, - 0x42,0x42,0x42,0x41,0x42,0x41,0x42,0x42,0x41,0x42,0x41,0x42,0x3E,0x39,0x35,0x2F, - 0x2B,0x28,0x21,0x1C,0x1A,0x14,0x0F,0x0E,0x06,0x01,0x02,0xFD,0xFA,0xF6,0xF2,0xF1, - 0xEB,0xDC,0xCA,0xC1,0xC2,0xC1,0xC1,0xC2,0xC2,0xC7,0xD2,0xDD,0xE9,0xF2,0xF9,0x01, - 0x06,0x09,0x0D,0x0B,0x0B,0x0A,0x07,0x05,0xFF,0xFA,0xF4,0xED,0xEB,0xE6,0xDD,0xDA, - 0xD7,0xD0,0xCA,0xC8,0xC4,0xC1,0xC2,0xC1,0xC2,0xC8,0xCE,0xD5,0xD7,0xD5,0xD3,0xCC, - 0xC7,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2, - 0xC2,0xC8,0xD3,0xD9,0xE1,0xEC,0xF5,0xFE,0x05,0x0F,0x18,0x21,0x29,0x31,0x39,0x40, - 0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, - 0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x40,0x41,0x41,0x40,0x3F,0x40,0x40,0x40,0x3F, - 0x3C,0x36,0x31,0x2D,0x29,0x26,0x22,0x1A,0x19,0x16,0x0C,0x0B,0x05,0xFF,0x00 -}; -static PROGMEM prog_uchar beat3_snd[554] = { - 0x05,0x04,0xF7,0xE8,0xDB,0xCF,0xCB,0xD3,0xDD,0xEA,0xF9,0x05,0x11,0x1D,0x27,0x31, - 0x38,0x40,0x44,0x43,0x45,0x43,0x44,0x40,0x3C,0x37,0x30,0x2C,0x25,0x21,0x1A,0x12, - 0x0C,0x05,0x03,0xFB,0xF5,0xF0,0xE9,0xE4,0xE0,0xE4,0xEA,0xEF,0xF4,0xF5,0xF2,0xEB, - 0xE7,0xDD,0xD4,0xCB,0xC5,0xC6,0xC5,0xC6,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5, - 0xC6,0xC5,0xC6,0xCC,0xD2,0xDB,0xE3,0xE9,0xF2,0xFC,0x03,0x0A,0x12,0x1A,0x20,0x26, - 0x2E,0x36,0x3B,0x42,0x44,0x44,0x45,0x44,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45, - 0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x44,0x45,0x44,0x45,0x44,0x40,0x3C,0x36, - 0x33,0x2F,0x29,0x26,0x22,0x1E,0x19,0x16,0x11,0x0C,0x0C,0x07,0x05,0x02,0xFF,0xFB, - 0xF7,0xF5,0xF1,0xED,0xEB,0xE6,0xE4,0xE3,0xE1,0xDE,0xDB,0xD9,0xD7,0xD5,0xD3,0xD2, - 0xCA,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC8,0xD4,0xE1,0xEB,0xF3,0xF9, - 0x00,0x05,0x07,0x09,0x09,0x0B,0x0A,0x09,0x08,0x05,0x04,0xFE,0xFE,0xFA,0xF3,0xF2, - 0xED,0xE8,0xE5,0xE3,0xDE,0xD8,0xD6,0xD7,0xDE,0xE7,0xEE,0xF4,0xF4,0xF1,0xED,0xE7, - 0xE2,0xDB,0xD3,0xCD,0xC7,0xC5,0xC6,0xC5,0xC6,0xC5,0xC5,0xC6,0xC6,0xC9,0xCF,0xD6, - 0xDD,0xE3,0xEB,0xF4,0xFE,0x04,0x0A,0x13,0x1D,0x24,0x2C,0x34,0x3C,0x43,0x45,0x44, - 0x45,0x44,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, - 0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x44,0x45, - 0x43,0x3E,0x37,0x33,0x30,0x2A,0x27,0x22,0x1E,0x18,0x11,0x0E,0x09,0x06,0x02,0x00, - 0xFB,0xF5,0xF5,0xEE,0xEA,0xEA,0xE3,0xE1,0xDE,0xDA,0xD6,0xD3,0xD3,0xD1,0xCB,0xC6, - 0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC7,0xD2,0xDE,0xE7,0xF1,0xF5,0xF8, - 0xFE,0x01,0x03,0x05,0x03,0x00,0xFF,0xFB,0xF7,0xF3,0xF0,0xEA,0xE5,0xE1,0xDE,0xDA, - 0xD5,0xD1,0xCD,0xC9,0xC6,0xC6,0xC6,0xCF,0xD6,0xDC,0xE0,0xDE,0xDC,0xD6,0xD0,0xC9, - 0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC8,0xCF, - 0xD5,0xDD,0xE5,0xEF,0xF8,0x01,0x09,0x11,0x1B,0x23,0x2B,0x34,0x3B,0x43,0x45,0x44, - 0x45,0x44,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, - 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x44,0x45,0x44,0x45,0x44,0x3F, - 0x39,0x37,0x32,0x2B,0x27,0x24,0x20,0x1E,0x18,0x14,0x0E,0x09,0x06,0x07,0x02,0xFD, - 0xFC,0xF6,0xF0,0xEA,0xE6,0xE4,0xE2,0xE0,0xDE,0xDC,0xDA,0xD6,0xD3,0xCD,0xC5,0xC6, - 0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC5,0xCB,0xD7,0xE4,0xEF,0xF9,0x02,0x05,0x06,0x08, - 0x0A,0x0C,0x0C,0x0C,0x0A,0x07,0x05,0x01,0xFE,0xF8,0xF3,0xF0,0xEE,0xE7,0xE1,0xDE, - 0xD9,0xD5,0xD1,0xD1,0xD0,0xD5,0xDD,0xE3,0xE6,0xE6,0xE8,0xE3,0xDD,0xD9,0xD0,0xC9, - 0xC6,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC6,0xC5,0xCA,0xD1,0xD8,0xDF, - 0xE8,0xF2,0xFB,0x04,0x08,0x11,0x1B,0x24,0x2D,0x31,0x38,0x41,0x44,0x43,0x43,0x42, - 0x43,0x42,0x43,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42, - 0x43,0x42,0x43,0x42,0x42,0x41,0x42,0x41,0x42,0x42,0x41,0x40,0x3C,0x38,0x31,0x2C, - 0x28,0x20,0x1D,0x1A,0x13,0x0F,0x0B,0x07,0x02,0xFF -}; -static PROGMEM prog_uchar beat4_snd[594] = { - 0x03,0x06,0x06,0x05,0x06,0xFF,0xF0,0xE2,0xD4,0xCD,0xCD,0xD6,0xE4,0xF0,0xFE,0x0C, - 0x16,0x24,0x2F,0x37,0x3D,0x41,0x44,0x43,0x43,0x44,0x42,0x40,0x3C,0x36,0x31,0x2A, - 0x25,0x1E,0x16,0x11,0x0A,0x05,0xFF,0xF9,0xF3,0xEC,0xE8,0xE3,0xE0,0xE6,0xEB,0xF2, - 0xF4,0xF2,0xF0,0xE7,0xDE,0xD6,0xCC,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC4,0xC5,0xC4, - 0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xCC,0xD6,0xDD,0xE3,0xED,0xF8,0xFE,0x04,0x0C, - 0x12,0x1A,0x23,0x29,0x31,0x37,0x3E,0x43,0x44,0x43,0x43,0x44,0x43,0x44,0x43,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x43, - 0x44,0x41,0x3C,0x3A,0x35,0x2E,0x2A,0x25,0x21,0x1D,0x19,0x13,0x10,0x0A,0x05,0x04, - 0x02,0xFF,0xF9,0xF7,0xF4,0xF1,0xED,0xE9,0xE5,0xE3,0xE1,0xDB,0xD4,0xD3,0xD1,0xD0, - 0xD0,0xCD,0xCD,0xCC,0xCB,0xC9,0xCA,0xC9,0xC8,0xC9,0xC5,0xC7,0xC9,0xC7,0xC5,0xC4, - 0xC5,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC6,0xD1,0xDF,0xED,0xFA,0x03,0x0A,0x10,0x17, - 0x1A,0x20,0x24,0x22,0x22,0x21,0x20,0x1B,0x19,0x17,0x13,0x0F,0x06,0x04,0x03,0x00, - 0xFA,0xF4,0xF3,0xEC,0xE7,0xE9,0xEF,0xF7,0xFF,0x03,0x03,0xFF,0xFB,0xF6,0xEE,0xE6, - 0xDF,0xD6,0xD4,0xD0,0xCA,0xC9,0xC6,0xC5,0xC7,0xC7,0xCC,0xCF,0xD3,0xD9,0xDE,0xE7, - 0xEE,0xF6,0xFE,0x04,0x0E,0x14,0x1D,0x24,0x2C,0x35,0x39,0x42,0x44,0x43,0x44,0x43, - 0x44,0x43,0x44,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x43,0x44,0x40,0x3A,0x34, - 0x2F,0x2B,0x26,0x23,0x1C,0x15,0x12,0x0B,0x06,0x03,0x00,0xFB,0xF5,0xF1,0xED,0xE9, - 0xE5,0xE3,0xE1,0xDC,0xDA,0xD6,0xD2,0xD2,0xCF,0xCA,0xC8,0xC6,0xC5,0xC5,0xC4,0xC5, - 0xC4,0xC5,0xC4,0xC4,0xC4,0xC4,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4, - 0xC5,0xC4,0xC5,0xCF,0xDD,0xEA,0xF5,0xFD,0x04,0x05,0x09,0x0D,0x10,0x11,0x10,0x0D, - 0x0C,0x08,0x05,0x04,0x00,0xFC,0xF8,0xF4,0xF0,0xEC,0xE8,0xE4,0xDF,0xDC,0xDA,0xD9, - 0xDF,0xE8,0xF1,0xF5,0xF5,0xF4,0xEE,0xE6,0xDF,0xD6,0xD1,0xCA,0xC4,0xC5,0xC4,0xC5, - 0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xCB,0xD1,0xD7,0xE0,0xE9,0xEF,0xF9,0x02,0x06,0x0F, - 0x19,0x21,0x29,0x33,0x3B,0x40,0x44,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x43,0x44,0x44,0x44,0x43,0x40,0x3C,0x37,0x32,0x2D,0x29,0x24,0x1F,0x1A, - 0x14,0x10,0x0D,0x09,0x05,0x03,0xFD,0xF6,0xF2,0xEE,0xEA,0xE6,0xE3,0xE2,0xDD,0xDA, - 0xD7,0xD3,0xD2,0xD0,0xCB,0xC9,0xC6,0xC5,0xC5,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5, - 0xC4,0xC4,0xC4,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC4,0xC5,0xC4,0xCB,0xD9, - 0xE7,0xF2,0xFA,0x02,0x05,0x07,0x0C,0x0F,0x11,0x11,0x0E,0x0D,0x09,0x05,0x04,0x01, - 0xFD,0xF9,0xF5,0xF1,0xED,0xE9,0xE6,0xE1,0xDC,0xDA,0xD9,0xDD,0xE5,0xEF,0xF5,0xF5, - 0xF5,0xF0,0xE8,0xE1,0xD8,0xD3,0xCC,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5, - 0xC5,0xC9,0xD0,0xD5,0xDD,0xE7,0xEE,0xF6,0x00,0x05,0x0C,0x16,0x1F,0x26,0x30,0x39, - 0x3F,0x43,0x44,0x43,0x44,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, - 0x44,0x44,0x41,0x3D,0x39,0x33,0x2E,0x2B,0x26,0x20,0x1B,0x16,0x11,0x0E,0x0B,0x06, - 0x04,0x00 -}; -static PROGMEM prog_uchar saucer_snd[1266] = { - 0x0C,0x10,0x1D,0x31,0x27,0x0A,0xF2,0xE5,0xCC,0xD2,0xE9,0x05,0x12,0x17,0x2E,0x2A, - 0x10,0xF5,0xE8,0xD0,0xD0,0xE6,0x02,0x12,0x16,0x2E,0x2C,0x11,0xF7,0xE8,0xCD,0xCD, - 0xE5,0x04,0x12,0x18,0x30,0x2A,0x0F,0xF7,0xE3,0xCA,0xD1,0xEB,0x07,0x11,0x1F,0x33, - 0x24,0x07,0xF2,0xD9,0xC8,0xD9,0xF6,0x0B,0x15,0x2A,0x33,0x17,0xFA,0xE7,0xCC,0xCE, - 0xE7,0x03,0x12,0x1F,0x35,0x23,0x03,0xF1,0xD4,0xC9,0xDE,0xFB,0x0E,0x19,0x32,0x2B, - 0x0A,0xF7,0xD9,0xC8,0xD8,0xF6,0x0C,0x17,0x30,0x30,0x0E,0xF8,0xDD,0xC8,0xD5,0xF4, - 0x0A,0x17,0x31,0x2F,0x0E,0xF9,0xDA,0xC6,0xD8,0xF7,0x0A,0x1B,0x35,0x29,0x0B,0xF4, - 0xD2,0xC7,0xDE,0xFD,0x0D,0x23,0x36,0x20,0x04,0xEB,0xCA,0xCB,0xEC,0x03,0x12,0x2F, - 0x32,0x13,0xFC,0xDA,0xC6,0xD9,0xF9,0x0B,0x20,0x38,0x23,0x05,0xEA,0xC8,0xCD,0xEE, - 0x04,0x19,0x35,0x2C,0x0E,0xF3,0xCE,0xC6,0xE6,0x00,0x11,0x34,0x31,0x11,0xFA,0xD2, - 0xC6,0xE0,0xFD,0x0E,0x30,0x36,0x13,0xF9,0xD2,0xC6,0xE2,0xFC,0x10,0x35,0x33,0x11, - 0xF6,0xCF,0xC6,0xE8,0xFD,0x16,0x39,0x2B,0x0D,0xEF,0xC7,0xCD,0xF0,0x01,0x23,0x39, - 0x21,0x05,0xDE,0xC2,0xD9,0xFA,0x0B,0x32,0x32,0x13,0xF8,0xC9,0xC8,0xEB,0x00,0x21, - 0x39,0x22,0x06,0xDC,0xBF,0xDF,0xF8,0x13,0x39,0x2B,0x10,0xE9,0xC0,0xD5,0xF2,0x0B, - 0x32,0x33,0x15,0xF3,0xC7,0xCB,0xF1,0x06,0x2C,0x36,0x18,0xF9,0xC8,0xCA,0xEF,0x04, - 0x2C,0x37,0x19,0xF7,0xC6,0xCB,0xF0,0x05,0x31,0x34,0x15,0xF1,0xC2,0xD3,0xF1,0x0D, - 0x39,0x2C,0x11,0xE3,0xC0,0xDF,0xF4,0x1A,0x3C,0x23,0x06,0xD1,0xC5,0xE9,0xFD,0x2F, - 0x35,0x1A,0xEF,0xC2,0xD8,0xF0,0x15,0x39,0x27,0x07,0xD3,0xC5,0xE9,0x01,0x30,0x33, - 0x14,0xEA,0xBF,0xDD,0xF7,0x22,0x39,0x1C,0xFB,0xC3,0xD3,0xF2,0x14,0x3B,0x23,0x01, - 0xCC,0xCE,0xED,0x10,0x38,0x29,0x05,0xCB,0xD1,0xE8,0x10,0x39,0x26,0x06,0xC9,0xCF, - 0xED,0x14,0x39,0x25,0xFB,0xC7,0xD6,0xED,0x1F,0x38,0x1E,0xF1,0xC4,0xDB,0xF9,0x29, - 0x35,0x16,0xDC,0xC7,0xE5,0x07,0x35,0x2E,0x01,0xC9,0xD2,0xF2,0x1E,0x39,0x1C,0xE2, - 0xC5,0xE3,0x06,0x34,0x2E,0xFE,0xCC,0xD0,0xF7,0x22,0x36,0x15,0xDB,0xC9,0xE5,0x17, - 0x36,0x25,0xE9,0xC8,0xDF,0x05,0x35,0x2C,0xF4,0xCC,0xD4,0x03,0x2E,0x30,0xFB,0xCB, - 0xD7,0xFC,0x2A,0x34,0xFE,0xCF,0xD3,0xF9,0x30,0x33,0xFC,0xCD,0xD2,0x02,0x31,0x2E, - 0xF6,0xCA,0xD7,0x0A,0x34,0x27,0xEA,0xC7,0xE1,0x15,0x37,0x1A,0xDD,0xCB,0xEB,0x23, - 0x3A,0x03,0xCE,0xD6,0xFF,0x31,0x2E,0xE7,0xCA,0xE4,0x19,0x38,0x10,0xD4,0xCD,0xFD, - 0x32,0x2C,0xE6,0xCB,0xE7,0x20,0x35,0x05,0xCD,0xD7,0x0C,0x36,0x1E,0xD3,0xD1,0xFA, - 0x32,0x2C,0xDD,0xCE,0xEC,0x2C,0x34,0xE9,0xCF,0xE4,0x23,0x37,0xF2,0xD0,0xE1,0x1E, - 0x38,0xF4,0xCE,0xE2,0x1E,0x3B,0xF3,0xCA,0xE8,0x1F,0x38,0xF2,0xC5,0xEE,0x27,0x2D, - 0xEC,0xC9,0xF3,0x33,0x22,0xDA,0xD3,0x02,0x35,0x15,0xD0,0xD7,0x1A,0x37,0xF6,0xCC, - 0xED,0x29,0x26,0xE3,0xD0,0x03,0x37,0x0C,0xCC,0xE1,0x29,0x2C,0xE1,0xCD,0x09,0x37, - 0x02,0xCB,0xEC,0x2C,0x22,0xD8,0xD7,0x17,0x2F,0xF0,0xCC,0x03,0x33,0x07,0xCA,0xF0, - 0x2F,0x19,0xD4,0xDB,0x28,0x24,0xDF,0xD6,0x1A,0x2D,0xE2,0xD5,0x16,0x2C,0xEC,0xCE, - 0x14,0x2F,0xE7,0xD5,0x14,0x29,0xEC,0xD1,0x19,0x2B,0xDF,0xDA,0x21,0x1E,0xDB,0xE3, - 0x24,0x18,0xD5,0xEB,0x2E,0x0A,0xCC,0x00,0x31,0xEF,0xD3,0x1B,0x22,0xDA,0xE5,0x2B, - 0x0A,0xD0,0x04,0x2C,0xE9,0xDA,0x24,0x16,0xD2,0xFA,0x2E,0xEE,0xDA,0x21,0x11,0xD5, - 0x05,0x25,0xE5,0xE5,0x2A,0x00,0xD5,0x16,0x19,0xD9,0xFD,0x2A,0xDF,0xED,0x26,0xF8, - 0xDA,0x23,0x0A,0xD0,0x1D,0x0D,0xDE,0x09,0x1B,0xDC,0xFE,0x29,0xD3,0x02,0x26,0xD6, - 0x04,0x1D,0xDE,0x03,0x1A,0xE2,0x02,0x18,0xE1,0x05,0x15,0xE1,0x0B,0x0E,0xE0,0x17, - 0x01,0xE3,0x22,0xEE,0xEE,0x29,0xDD,0xFF,0x22,0xD7,0x13,0x07,0xE5,0x21,0xE3,0xFE, - 0x20,0xD6,0x17,0xFE,0xEB,0x23,0xDA,0x0F,0x0A,0xE5,0x23,0xDC,0x0F,0x06,0xE7,0x23, - 0xDC,0x18,0xF6,0xF2,0x1A,0xE0,0x1E,0xE7,0x0C,0xFF,0xF2,0x14,0xE3,0x1A,0xE9,0x0E, - 0xF8,0xFD,0x0C,0xE9,0x1C,0xE2,0x18,0xF2,0xFC,0x12,0xDF,0x23,0xE2,0x0D,0x07,0xE2, - 0x24,0xDC,0x11,0x0A,0xE1,0x22,0xE0,0x0A,0x13,0xD8,0x20,0xF4,0xF2,0x20,0xD9,0x0D, - 0x18,0xD3,0x1B,0x08,0xDD,0x20,0xF3,0xEE,0x1F,0xE8,0xFB,0x1B,0xE4,0xFF,0x1A,0xE4, - 0x00,0x1C,0xE2,0xFB,0x25,0xDB,0xF8,0x2E,0xD5,0xFA,0x26,0xE2,0xF3,0x21,0xF7,0xDC, - 0x2B,0xFE,0xD4,0x20,0x0E,0xD8,0x06,0x26,0xDB,0xEE,0x2B,0xF7,0xDA,0x1B,0x15,0xD6, - 0xFE,0x2C,0xEA,0xDA,0x25,0x14,0xD1,0xFB,0x2F,0xF0,0xD5,0x1D,0x1E,0xD7,0xEC,0x2C, - 0x05,0xCF,0x07,0x2D,0xEC,0xD3,0x1D,0x25,0xD8,0xE1,0x2B,0x15,0xD2,0xF0,0x2C,0x0A, - 0xD2,0xF4,0x31,0x07,0xC9,0xFD,0x32,0x02,0xD0,0xF7,0x31,0x07,0xC9,0xF8,0x33,0x0D, - 0xCB,0xE8,0x34,0x16,0xD4,0xDE,0x25,0x24,0xDC,0xDB,0x15,0x2E,0xEB,0xD1,0x05,0x33, - 0x05,0xCE,0xEB,0x29,0x22,0xDC,0xD7,0x0E,0x34,0xFC,0xCD,0xEC,0x2F,0x24,0xD9,0xD0, - 0x0E,0x3B,0xFE,0xC8,0xEA,0x29,0x28,0xE6,0xD0,0xF8,0x34,0x1C,0xD3,0xD4,0x11,0x36, - 0x06,0xD1,0xDA,0x1B,0x3A,0xF4,0xCB,0xE8,0x20,0x37,0xF1,0xC6,0xEC,0x23,0x34,0xF4, - 0xC5,0xEA,0x24,0x33,0xF7,0xC7,0xE6,0x1E,0x36,0x00,0xC6,0xE1,0x16,0x38,0x0E,0xCB, - 0xD7,0x07,0x3B,0x1C,0xD7,0xD0,0xF5,0x2D,0x2E,0xF1,0xC8,0xE2,0x19,0x3B,0x0D,0xCE, - 0xD3,0x00,0x34,0x29,0xEA,0xC7,0xE4,0x1A,0x3C,0x0F,0xD1,0xD3,0xF7,0x2A,0x34,0xF4, - 0xCC,0xDE,0x07,0x34,0x26,0xE5,0xC8,0xE6,0x15,0x37,0x1D,0xDA,0xCB,0xED,0x18,0x3B, - 0x16,0xD4,0xCF,0xEC,0x1E,0x3C,0x11,0xD8,0xCB,0xEA,0x22,0x39,0x15,0xD7,0xC9,0xEE, - 0x19,0x37,0x1D,0xDE,0xCB,0xE2,0x12,0x39,0x25,0xEC,0xC6,0xDD,0x01,0x31,0x31,0x00, - 0xCD,0xCE,0xF6,0x22,0x36,0x18,0xDF,0xC7,0xE2,0x0E,0x34,0x2B,0xFC,0xCA,0xD2,0xF4, - 0x26,0x36,0x1A,0xE2,0xC4,0xE1,0x07,0x32,0x2E,0x0A,0xCD,0xCB,0xED,0x13,0x39,0x27, - 0xFB,0xC4,0xD8,0xEF,0x1D,0x3B,0x1D,0xF5,0xC1,0xD9,0xF6,0x22,0x38,0x1D,0xEF,0xC0, - 0xDE,0xF3,0x23,0x37,0x1D,0xF5,0xBF,0xDC,0xF0,0x1D,0x3B,0x1D,0x00,0xC3,0xD2,0xF0, - 0x10,0x3D,0x22,0x0A,0xCF,0xC7,0xED,0x00,0x36,0x2E,0x14,0xE1,0xBE,0xE6,0xF5,0x22, - 0x39,0x1F,0xFB,0xC4,0xD2,0xF0,0x08,0x37,0x2D,0x0F,0xE4,0xBF,0xE2,0xF7,0x1D,0x3A, - 0x20,0x07,0xCC,0xC6,0xED,0xFC,0x2E,0x36,0x18,0xFA,0xC3,0xCF,0xF2,0x04,0x33,0x32, - 0x12,0xF2,0xC2,0xD3,0xF4,0x08,0x34,0x30,0x11,0xEF,0xC3,0xD4,0xF4,0x08,0x33,0x30, - 0x13,0xF2,0xC3,0xD1,0xF4,0x02,0x30,0x33,0x17,0xFB,0xC6,0xCB,0xED,0x00,0x23,0x39, - 0x21,0x01,0xD8,0xC2,0xE3,0xFB,0x13,0x3A,0x29,0x0F,0xEA,0xC1,0xD5,0xF3,0x06,0x2A, - 0x38,0x19,0x00,0xD4,0xC3,0xE5,0xFC,0x13,0x36,0x2D,0x0E,0xF1,0xC8,0xCC,0xEF,0x03, - 0x1E,0x39,0x22,0x08,0xE5,0xC3,0xD5,0xF6,0x07,0x24,0x38,0x1C,0x06,0xDD,0xC2,0xD9, - 0xF9,0x09,0x26,0x38,0x1B,0x04,0xDE,0xC3,0xD8,0xF9,0x09,0x24,0x39,0x1C,0x05,0xE2, - 0xC4,0xD3,0xF4,0x0A,0x1E,0x39,0x23,0x07,0xED,0xC8,0xCC,0xEC,0x05,0x14,0x33,0x2E, - 0x0C,0xFA,0xD4,0xC7,0xE1,0xFD,0x0C,0x25,0x38,0x1A,0x03,0xE6,0xC6,0xD0,0xEF,0x08, - 0x15,0x31,0x2F,0x0F,0xF9,0xD7,0xC6,0xD9,0xF9,0x0D,0x1B,0x34,0x28,0x08,0xF3,0xD2, - 0xC8,0xE2,0x00,0x0F,0x21,0x37,0x20,0x03,0xEC,0xCD,0xCC,0xE3,0x02,0x10,0x21,0x38, - 0x20,0x06,0xEF,0xCC,0xCB,0xE1,0x00,0x0F,0x1E,0x36,0x23,0x08,0xF3,0xD2,0xC9,0xDF, - 0xFA,0x01 -}; +static PROGMEM prog_uchar shoot_snd[2369] = { + 0x0D,0x08,0xEE,0x0D,0x0B,0xE4,0x15,0x0F,0xC9,0x0B,0x21,0xE1,0x05,0x23,0xD7,0xE2, + 0x39,0xE3,0xF4,0x35,0xCA,0xFE,0x38,0xCB,0xFF,0x26,0xC4,0x20,0x19,0xC4,0x2A,0x17, + 0xBF,0x01,0x38,0xDC,0x01,0x20,0xC8,0x1B,0x09,0xD6,0x30,0xF0,0xD1,0x37,0xFE,0xE2, + 0x28,0xE7,0xD2,0x34,0x0B,0xC7,0x27,0x1C,0xC2,0x01,0x39,0xD0,0xFA,0x2F,0xCB,0x15, + 0x1E,0xC4,0x04,0x37,0xD6,0xE7,0x34,0xE3,0xF7,0x30,0xE0,0xD4,0x38,0xF1,0xDA,0x3E, + 0xDD,0xDF,0x3A,0x01,0xC1,0x24,0x12,0xC9,0x33,0xF5,0xE4,0x34,0xE7,0xCF,0x34,0xFD, + 0xCD,0x40,0xE9,0xD8,0x3E,0xE0,0xDB,0x36,0x10,0xC3,0x0B,0x2D,0xCB,0xF4,0x38,0xEF, + 0xCF,0x31,0x0C,0xC9,0x22,0x02,0xD3,0x2E,0x06,0xCD,0x28,0x0E,0xC1,0x1B,0x23,0xC3, + 0x14,0x21,0xCC,0x24,0x06,0xC4,0x25,0x1D,0xC8,0x11,0x2D,0xBF,0x15,0x1A,0xC9,0x25, + 0x17,0xBE,0x0C,0x34,0xD1,0x13,0x13,0xC1,0x11,0x36,0xD7,0xE2,0x3C,0xDD,0xEB,0x39, + 0xE6,0xCF,0x22,0x28,0xC9,0xF6,0x39,0xD9,0xF1,0x3A,0xD2,0xEA,0x3B,0xCD,0x01,0x35, + 0xBF,0x11,0x2B,0xBE,0x17,0x2C,0xBF,0x14,0x1D,0xC2,0x11,0x34,0xD5,0xEC,0x3E,0xD7, + 0xDB,0x3C,0xE5,0xE4,0x34,0xFF,0xC4,0x27,0x14,0xC3,0x24,0x1D,0xC5,0x03,0x38,0xD1, + 0x02,0x28,0xC4,0x15,0x1A,0xC8,0x22,0x1E,0xC2,0x1D,0x1C,0xC0,0x19,0x25,0xCD,0x02, + 0x2E,0xD6,0xEC,0x40,0xDA,0xE4,0x3C,0xCC,0x00,0x36,0xC0,0x17,0x1A,0xC6,0x2A,0xFC, + 0xD9,0x2F,0xED,0xE3,0x31,0xFC,0xC5,0x2C,0x0D,0xCA,0x38,0xF9,0xC4,0x2F,0x08,0xD3, + 0x1E,0x1E,0xC8,0xFA,0x3B,0xD8,0xF1,0x27,0xD7,0x08,0x30,0xD0,0xE4,0x3F,0xDC,0xEB, + 0x3C,0xCF,0xFC,0x37,0xCE,0xE3,0x3B,0xF7,0xE2,0x2F,0xEA,0xCE,0x33,0xF3,0xD6,0x3F, + 0xEF,0xD0,0x40,0xF6,0xD0,0x30,0xE8,0xD8,0x3C,0xF5,0xE4,0x2C,0xF0,0xC7,0x29,0x1C, + 0xC0,0x27,0x0D,0xC3,0x31,0x0E,0xCE,0x17,0x21,0xC8,0xFC,0x36,0xDB,0xDC,0x32,0x0F, + 0xC5,0x16,0x1F,0xD0,0x0E,0x22,0xCF,0xFE,0x37,0xE6,0xCA,0x28,0x16,0xC8,0x24,0x1A, + 0xC1,0x1D,0x0E,0xD1,0x35,0xF4,0xCF,0x3A,0xF8,0xD3,0x23,0x0F,0xC5,0x17,0x27,0xC6, + 0x0D,0x33,0xD8,0xDF,0x37,0xEA,0xD3,0x3A,0xF7,0xD9,0x2E,0xF4,0xDC,0x2B,0xE6,0xE5, + 0x36,0xF2,0xDE,0x2C,0xF3,0xC9,0x33,0x08,0xCC,0x1F,0x20,0xCB,0xF9,0x3A,0xDD,0xE6, + 0x30,0xF3,0xCA,0x31,0x05,0xCC,0x3F,0xEE,0xCD,0x41,0xEB,0xDA,0x35,0xFB,0xC8,0x1C, + 0x24,0xC1,0x16,0x2A,0xC3,0x11,0x24,0xD3,0xFA,0x30,0xD9,0xE5,0x3F,0xD5,0xEA,0x42, + 0xCE,0xF8,0x35,0xC8,0x0B,0x30,0xC2,0x05,0x26,0xD0,0x00,0x32,0xE0,0xE8,0x35,0xDD, + 0xE5,0x3B,0xD9,0xE7,0x43,0xD7,0xEC,0x33,0xD5,0xE9,0x36,0xFF,0xC9,0x2C,0x03,0xC7, + 0x3E,0xFC,0xCC,0x28,0x13,0xCA,0x05,0x33,0xD5,0xF0,0x31,0xED,0xCE,0x34,0x03,0xCB, + 0x35,0x0E,0xC5,0x07,0x32,0xCA,0xFF,0x39,0xCA,0xF3,0x31,0xEE,0xDA,0x37,0xF5,0xCC, + 0x40,0xE9,0xD5,0x37,0x04,0xC5,0x13,0x2C,0xC5,0x08,0x38,0xDA,0xD9,0x34,0xFF,0xCC, + 0x20,0x21,0xCD,0xFA,0x39,0xCA,0xFD,0x30,0xC6,0x13,0x2C,0xC9,0x07,0x1E,0xD1,0x07, + 0x2E,0xDA,0x00,0x23,0xCC,0x07,0x1D,0xD3,0x26,0xFD,0xDA,0x2F,0xED,0xDA,0x2A,0x13, + 0xC0,0x1C,0x25,0xC1,0x1B,0x1A,0xCA,0x0A,0x26,0xDB,0x07,0x26,0xCA,0xF5,0x39,0xED, + 0xD0,0x2C,0x0B,0xC6,0x28,0x19,0xC8,0x02,0x33,0xD6,0xEC,0x3C,0xE5,0xD3,0x2B,0x19, + 0xBF,0x25,0x13,0xBD,0x35,0xFF,0xD1,0x37,0xEE,0xD4,0x3F,0xEA,0xDC,0x3C,0xD4,0xF5, + 0x2F,0xD1,0x09,0x23,0xCB,0x0D,0x33,0xC3,0x04,0x2C,0xD1,0xF5,0x33,0xF1,0xCC,0x31, + 0x0E,0xCF,0x1C,0x0D,0xD0,0x1D,0x11,0xD2,0x1F,0x06,0xCF,0x27,0x1C,0xBF,0x1F,0x11, + 0xC4,0x2D,0x0E,0xCE,0x0F,0x35,0xD6,0xEB,0x36,0xCC,0xF2,0x34,0xE6,0xE4,0x30,0x01, + 0xC7,0x21,0x21,0xCE,0xFB,0x30,0xD3,0xE4,0x3C,0xEF,0xED,0x26,0xE8,0xD4,0x32,0x06, + 0xC7,0x2C,0x16,0xCF,0x0E,0x1C,0xCB,0x03,0x37,0xC9,0xF6,0x36,0xDC,0x04,0x22,0xD3, + 0xE9,0x3A,0xEF,0xD2,0x34,0x05,0xC6,0x11,0x30,0xC3,0x0E,0x30,0xC1,0x1A,0x21,0xC8, + 0xFC,0x2F,0xE2,0xE6,0x3A,0xD9,0xE9,0x3E,0xD3,0xF0,0x3D,0xEE,0xCA,0x25,0x1A,0xBC, + 0x14,0x29,0xD6,0x12,0x18,0xCC,0x10,0x1A,0xD1,0x1E,0xFD,0xDC,0x35,0xF5,0xD3,0x2B, + 0xF4,0xE4,0x2D,0xD6,0xFD,0x33,0xDD,0xDF,0x36,0x00,0xC3,0x3B,0xF6,0xC6,0x2F,0x0D, + 0xD1,0x18,0x29,0xC8,0xF8,0x36,0xE6,0xCE,0x37,0x06,0xC5,0x25,0x22,0xCB,0x03,0x29, + 0xCA,0x16,0x1A,0xC9,0x1F,0x0B,0xCD,0x28,0x1D,0xC0,0x1C,0x12,0xC1,0x1D,0x23,0xD5, + 0xFE,0x38,0xDB,0xD7,0x31,0xEE,0xEA,0x2E,0xEE,0xD0,0x36,0xFE,0xD9,0x2F,0xE6,0xE6, + 0x36,0xE3,0xD7,0x43,0xED,0xD3,0x34,0xEF,0xD6,0x2B,0x11,0xCE,0x23,0x11,0xBA,0x2C, + 0x15,0xBD,0x26,0x11,0xCD,0x13,0x30,0xD1,0xE6,0x3D,0xEE,0xDA,0x28,0xFE,0xC3,0x32, + 0x0C,0xC7,0x3C,0xF6,0xCB,0x38,0xFC,0xCA,0x2A,0x0E,0xD7,0x1E,0x0A,0xC4,0x1C,0x23, + 0xBD,0x23,0x1B,0xC4,0x31,0x09,0xC0,0x22,0x21,0xCD,0x04,0x20,0xCD,0x0F,0x28,0xD0, + 0x12,0x1B,0xC4,0x1A,0x28,0xBB,0x1A,0x1E,0xBE,0x2A,0x1B,0xBC,0x20,0x17,0xCE,0x18, + 0x19,0xD1,0x0A,0x28,0xC7,0x07,0x29,0xCE,0x18,0x1E,0xBD,0x0F,0x32,0xCE,0x06,0x21, + 0xD1,0xF7,0x35,0xE1,0xDD,0x45,0xE6,0xD8,0x34,0xE8,0xDF,0x2E,0xFF,0xD2,0x2B,0x03, + 0xC9,0x33,0xF3,0xE2,0x30,0xDE,0xF9,0x2C,0xD7,0xEF,0x2E,0xD9,0xF2,0x42,0xD4,0xEE, + 0x3D,0xC6,0xEE,0x38,0xE0,0xEF,0x31,0xF5,0xC5,0x2E,0x18,0xC5,0x1D,0x0B,0xD7,0x1B, + 0x16,0xCA,0x0D,0x32,0xCC,0xF8,0x34,0xE4,0xCF,0x35,0x04,0xC9,0x2A,0x1E,0xC7,0x0C, + 0x21,0xCE,0x17,0x0A,0xC9,0x2A,0x1E,0xC3,0x21,0x11,0xBD,0x2B,0x1A,0xC9,0x1D,0x0F, + 0xCA,0x0F,0x2D,0xD0,0x04,0x31,0xC7,0xF7,0x3A,0xF1,0xC4,0x2A,0x13,0xC5,0x21,0x1F, + 0xD1,0x05,0x25,0xCB,0x05,0x35,0xCC,0xF3,0x3A,0xED,0xCF,0x2F,0xFA,0xD3,0x41,0xF1, + 0xC8,0x3E,0xEB,0xDD,0x3D,0xD5,0xE6,0x46,0xDC,0xE4,0x31,0xD3,0xFE,0x3D,0xCB,0xF8, + 0x28,0xD2,0x0D,0x27,0xD3,0xEB,0x3D,0xF2,0xCA,0x2D,0x11,0xCC,0x14,0x1D,0xC2,0x1E, + 0x20,0xC3,0x2A,0x0B,0xBE,0x27,0x1C,0xCC,0xFD,0x3E,0xD9,0xDC,0x41,0xE3,0xE1,0x29, + 0x00,0xC6,0x24,0x1E,0xCA,0x2A,0x09,0xC1,0x0A,0x3A,0xD5,0xEC,0x3F,0xD1,0xE3,0x34, + 0xEC,0xE7,0x2E,0xF2,0xE6,0x29,0xE8,0xCF,0x38,0x07,0xD3,0x22,0x11,0xC7,0x00,0x39, + 0xD2,0x07,0x2D,0xBF,0x09,0x25,0xD0,0x14,0x1B,0xCF,0x02,0x37,0xD7,0xE5,0x36,0xD5, + 0xFE,0x33,0xC5,0x05,0x2C,0xCA,0x13,0x1C,0xC6,0x19,0x2A,0xCE,0xFE,0x27,0xD8,0xF2, + 0x31,0xE2,0xF3,0x32,0xD1,0xE5,0x42,0xDC,0xF1,0x38,0xCA,0xF7,0x30,0xD7,0xF1,0x2D, + 0xF2,0xD8,0x36,0x04,0xCA,0x28,0xF3,0xD3,0x28,0x1A,0xCF,0x0F,0x2C,0xBD,0x10,0x23, + 0xC1,0x28,0x16,0xBF,0x2C,0x06,0xC7,0x22,0x23,0xCE,0xF4,0x36,0xD3,0xFE,0x2F,0xC9, + 0xFF,0x34,0xE6,0xDE,0x2A,0xF2,0xD5,0x33,0xF2,0xD9,0x2E,0x18,0xCA,0x01,0x32,0xC8, + 0x08,0x2E,0xC6,0xFF,0x28,0xE0,0xEE,0x34,0x03,0xC4,0x0F,0x34,0xCB,0xFA,0x32,0xD7, + 0xE9,0x31,0xF9,0xD7,0x2D,0xED,0xDE,0x34,0xE6,0xE5,0x32,0x03,0xCC,0x13,0x29,0xC5, + 0x08,0x2B,0xC9,0x09,0x1F,0xDA,0x11,0x1C,0xD5,0xF3,0x32,0xFD,0xC8,0x18,0x27,0xCF, + 0xF0,0x37,0xFA,0xC7,0x1B,0x1D,0xD7,0x0D,0x23,0xCB,0xFB,0x32,0xDD,0xF5,0x28,0xE0, + 0xF0,0x24,0xE5,0x03,0x23,0xDC,0xE0,0x33,0xF7,0xE3,0x2C,0xE9,0xE3,0x29,0x05,0xCA, + 0x1F,0x0B,0xD5,0x2C,0xF9,0xDE,0x2E,0xF2,0xD4,0x2C,0x01,0xD0,0x20,0x19,0xD6,0x0E, + 0x11,0xCD,0x06,0x31,0xDF,0xFC,0x1D,0xD9,0x09,0x20,0xDC,0xED,0x34,0xE4,0xDC,0x37, + 0xE6,0xF0,0x2F,0xD8,0xF1,0x2B,0xDB,0xFF,0x26,0xE0,0xF0,0x29,0xEE,0xD6,0x2F,0x0B, + 0xD0,0x0E,0x25,0xD0,0x02,0x28,0xCC,0x18,0x1E,0xC7,0x0C,0x23,0xE1,0xEA,0x32,0xF9, + 0xD2,0x29,0xF5,0xE7,0x23,0xFB,0xD2,0x1B,0x1E,0xD0,0x1D,0x0F,0xCB,0x03,0x32,0xE7, + 0xE3,0x36,0xDE,0xE6,0x2D,0xF5,0xDC,0x1F,0x17,0xCD,0x1E,0x0E,0xC8,0x15,0x1D,0xDF, + 0x00,0x26,0xD9,0xF8,0x28,0xD3,0x05,0x2E,0xD6,0xF4,0x24,0xF2,0xDB,0x24,0x0A,0xD6, + 0x2C,0xF2,0xD9,0x32,0xF3,0xDB,0x1F,0xFF,0xE3,0x1F,0x04,0xDB,0x1D,0x03,0xD9,0x23, + 0xFF,0xDA,0x29,0xF7,0xE4,0x23,0xE8,0xE9,0x29,0xFF,0xD6,0x18,0x19,0xD6,0x0F,0x10, + 0xD6,0x1C,0x0E,0xCF,0x1F,0x0B,0xD7,0x26,0x05,0xD1,0x0B,0x2A,0xDD,0xF0,0x31,0xD7, + 0xF4,0x27,0xDE,0xED,0x2C,0x02,0xDE,0x23,0xF6,0xD0,0x29,0x05,0xDA,0x1B,0x0C,0xDA, + 0x0C,0x1F,0xD2,0x0A,0x24,0xCF,0x13,0x18,0xCD,0x0C,0x1E,0xE2,0xF8,0x26,0xEB,0xDB, + 0x29,0x00,0xE8,0x1F,0xF5,0xDC,0x1C,0x09,0xD9,0x23,0x0A,0xCF,0x12,0x1B,0xE1,0xF3, + 0x2C,0xE8,0xF0,0x26,0xE5,0xE2,0x23,0x0C,0xD5,0x22,0x07,0xCF,0x24,0x08,0xD8,0x1D, + 0x06,0xE2,0x17,0x04,0xD9,0x12,0x1F,0xD4,0xFD,0x27,0xEC,0xE2,0x2A,0xFF,0xD7,0x22, + 0x03,0xD9,0x0C,0x20,0xDA,0x06,0x24,0xD0,0x02,0x1F,0xDC,0x13,0x0F,0xD3,0x21,0x03, + 0xD5,0x1C,0x13,0xDB,0xFD,0x28,0xEA,0xDE,0x23,0x0E,0xD6,0x19,0x11,0xCE,0x16,0x0C, + 0xDC,0x1C,0x08,0xDC,0x13,0x0D,0xDF,0x07,0x26,0xE1,0xF0,0x1F,0xE9,0xFB,0x1C,0xEB, + 0xE5,0x28,0xF9,0xE3,0x24,0xF4,0xE0,0x1C,0x1B,0xD2,0xFC,0x21,0xE6,0xEF,0x21,0x09, + 0xD6,0x06,0x22,0xE5,0xEA,0x23,0xFF,0xDE,0x19,0x13,0xD8,0xFF,0x1D,0xE8,0xFF,0x1C, + 0xDD,0xF6,0x2B,0xEA,0xEE,0x1E,0xEA,0xF7,0x1B,0xF1,0xE5,0x1F,0x08,0xDC,0x21,0xFA, + 0xDF,0x1A,0x02,0xE1,0x09,0x1F,0xDF,0x04,0x1C,0xDE,0xEF,0x21,0x0A,0xD9,0x0A,0x1C, + 0xE3,0xEB,0x26,0x05,0xD7,0x16,0x0B,0xDB,0x0B,0x1D,0xE5,0xF5,0x22,0xF4,0xDD,0x1A, + 0x11,0xD4,0x15,0x12,0xDA,0x06,0x24,0xEB,0xE4,0x25,0xED,0xF4,0x23,0xDF,0xFC,0x22, + 0xDF,0xFF,0x1F,0xE2,0xFC,0x1C,0xE8,0xFA,0x19,0xEB,0xF3,0x25,0xF2,0xE2,0x1E,0xFE, + 0xE6,0x15,0x0B,0xDD,0x11,0x11,0xD5,0x17,0x10,0xDC,0x19,0x00,0xDF,0x14,0x10,0xE3, + 0x00,0x20,0xE1,0xF9,0x21,0xEA,0xE9,0x1E,0x0D,0xD7,0x0C,0x13,0xE6,0x0B,0x0E,0xE1, + 0xFE,0x23,0xE3,0xFB,0x1F,0xDE,0xFE,0x1B,0xEA,0xFB,0x1B,0xEC,0xF3,0x18,0xF0,0xEE, + 0x1D,0x07,0xE1,0x0A,0x0E,0xDF,0x0E,0x17,0xDD,0x0E,0x12,0xDA,0x06,0x17,0xE7,0x0A, + 0x0A,0xE2,0x0F,0x0E,0xE4,0x01,0x1B,0xEE,0xEC,0x1E,0x01,0xDA,0x10,0x15,0xE4,0xF7, + 0x20,0xF3,0xED,0x1B,0xF4,0xE8,0x1B,0x0C,0xDC,0x07,0x19,0xE9,0xEF,0x1E,0xFE,0xE5, + 0x14,0x04,0xE5,0x09,0x17,0xEA,0xEE,0x20,0xF7,0xE6,0x21,0xF7,0xE3,0x1A,0x03,0xE7, + 0x13,0x0D,0xDF,0x01,0x1D,0xEE,0xEA,0x1D,0x01,0xDF,0x0A,0x1C,0xE2,0xF9,0x1D,0xE8, + 0x02,0x15,0xE9,0xF1,0x1D,0xFA,0xE6,0x17,0x09,0xE1,0x03,0x19,0xE3,0x04,0x19,0xE0, + 0x09,0x14,0xE2,0x01,0x18,0xEC,0xF5,0x1A,0xEE,0xF7,0x1D,0xF0,0xE6,0x17,0x0F,0xE1, + 0x0E,0x0F,0xDD,0x06,0x17,0xF1,0xEB,0x14,0x11,0xE2,0xFC,0x1A,0xF2,0xEF,0x18,0xFA, + 0xE9,0x1D,0xFA,0xE7,0x15,0x06,0xE4,0x03,0x1A,0xE6,0x02,0x17,0xE6,0xF4,0x1B,0xFB, + 0xE4,0x1E,0xF9,0xE7,0x1A,0xF9,0xEA,0x13,0x11,0xE0,0x02,0x18,0xE7,0xFC,0x16,0xF2, + 0xF0,0x1A,0xF9,0xE8,0x15,0x01,0xE8,0x0F,0x0D,0xE6,0xF6,0x20,0xFB,0xE3,0x19,0xFB, + 0xE6,0x17,0x02,0xEC,0x11,0x01,0xE8,0x0F,0x06,0xE8,0x13,0x0A,0xDF,0x0B,0x0F,0xE7, + 0x05,0x17,0xEB,0xF8,0x15,0xEF,0xEF,0x19,0x04,0xE9,0x10,0x04,0xE2,0x0B,0x13,0xEC, + 0x00,0x15,0xEA,0xF8,0x19,0xEC,0xF9,0x1A,0xEF,0xF2,0x14,0xFD,0xEA,0x06,0x19,0xEE, + 0xF2,0x18,0xF6,0xEA,0x13,0x0F,0xE7,0xFB,0x1A,0xF5,0xED,0x17,0xF9,0xEA,0x14,0x07, + 0xE7,0x09,0x0E,0xE4,0x0B,0x0F,0xE4,0x0F,0x0A,0xE4,0x0C,0x09,0xEA,0x0E,0x08,0xE9, + 0x08,0x08,0xED,0xFF,0x15,0xF6,0xEC,0x16,0x05,0xE3,0x09,0x0D,0xEB,0x03,0x15,0xEC, + 0xF6,0x16,0xEF,0xF9,0x16,0xF8,0xEE,0x08,0x12,0xED,0xFE,0x0E,0xEC,0x06,0x09,0xEE, + 0x08,0x0C,0xE8,0x06,0x12,0xE7,0x00,0x15,0xF1,0xF2,0x15,0xFD,0xE9,0x14,0x03,0xEB, + 0x0D,0x00,0xEE,0x0D,0x08,0xED,0xFB,0x17,0xFB,0xE7,0x10,0x06,0xE9,0x05,0x15,0xED, + 0xF4,0x14,0xF7,0xF5,0x12,0xFD,0xE9,0x0D,0x09,0xED,0x07,0x07,0xEE,0xFA,0x14,0xFC, + 0xF1,0x10,0xF8,0xF2,0x13,0x03,0xE8,0x00,0x16,0xF7,0xED,0x10,0x04,0xE9,0x0C,0x0C, + 0xEA,0x02,0x12,0xF5,0xEE,0x0F,0x0A,0xE8,0x01,0x13,0xF2,0xF2,0x12,0x02,0xEC,0x0A, + 0x0B,0xEA,0x00,0x14,0xED,0xFD,0x12,0xEE,0xF9,0x12,0xFC,0xED,0x07,0x13,0xEE,0xF6, + 0x14,0xF8,0xEE,0x0D,0x07,0xEA,0x05,0x0E,0xEF,0x03,0x08,0xEE,0x04,0x10,0xF2,0xF0, + 0x10,0x0A,0xE9,0xFD,0x13,0xF4,0xF4,0x13,0xF9,0xF2,0x10,0x04,0xEB,0x05,0x0E,0xEE, + 0xFE,0x0E,0xF4,0xF7,0x11,0xFC,0xEF,0x0D,0x09,0xEE,0xFA,0x13,0xFB,0xEC,0x10,0x02, + 0xEA,0x04,0x12,0xF6,0xEF,0x0E,0x09,0xEC,0x02,0x0C,0xF1,0xFF,0x0D,0xF2,0xF9,0x12, + 0xF7,0xF3,0x0F,0xFF,0xEF,0x09,0x0B,0xF0,0xF8,0x12,0xFC,0xED,0x0A,0x0B,0xED,0xFF, + 0x10,0xF3,0xFC,0x0E,0xF8,0xF3,0x0E,0xFF,0xF0,0x0E,0x00,0xEF,0x01,0x0E,0xFD,0xF0, + 0x08,0x09,0xF1,0x01,0x0C,0xF0,0xFC,0x0F,0xF8,0xF2,0x0E,0x05,0xEB,0x09,0x08,0xEE, + 0x08,0x06,0xF3,0xF7,0x0C,0x07,0xEB,0x06,0x0A,0xEE,0xFC,0x0E,0x01,0xEF,0x05,0x0F, + 0xF0,0xFB,0x0C,0xF3,0xFF,0x0B,0xF4,0xFA,0x0D,0xFB,0xF3,0x0B,0x03,0xEF,0x06,0x0D, + 0xF0,0xF8,0x0F,0xFE,0xF0,0x04,0x0D,0xF3,0xFB,0x0E,0xF8,0xF3,0x0C,0x05,0xEF,0xFE, + 0x10,0xF7,0xF6,0x0E,0xFB,0xF2,0x0A,0x06,0xF1,0x03,0x0B,0xF1,0x02,0x08,0xF1,0x04, + 0x08,0xF3,0x03,0x07,0xF2,0x00,0x0D,0xF7,0xF4,0x0C,0x05,0xF1,0x02,0x0A,0xF4,0xFC, + 0x0B,0xFB,0xF3,0x09,0x0B,0xF0,0xFB,0x0D,0xF9,0xF7,0x0C,0xFC,0xF5,0x0B,0xFA,0xFA, + 0x0B,0xFA,0xF5,0x0A,0x06,0xF1,0x00,0x0A,0xF6,0xFD,0x09,0xFB,0xF6,0x06,0x0B,0xF4, + 0xF9,0x0B,0xFB,0xF7,0x0B,0xFF,0xF2,0x08,0x06,0xF4,0xFD,0x09,0xFF,0xF4,0x05,0x08, + 0xF4,0xFD,0x0B,0xFA,0xF7,0x0A,0xFF,0xF4,0x06,0x08,0xF4,0xFB,0x0C,0xFB,0xF7,0x0B, + 0xFE,0xF3,0x07,0x06,0xF4,0xFE,0x0B,0xF8,0xF9,0x09,0xFD,0xF5,0x07,0x06,0xF5,0xFC, + 0x09,0xFD,0xF5,0x08,0x04,0xF2,0x04,0x06,0xF5,0xFC,0x09,0x00,0xF5,0x03,0x09,0xF6, + 0xF8,0x0A,0x03,0xF4,0xFF,0x09,0xFB,0xF6,0x05,0x07,0xF9,0xF8,0x06,0x03,0xF7,0xFD, + 0x00 +}; + +static PROGMEM prog_uchar aliendeath_snd[2808] = { + 0x14,0x1D,0xD9,0xFE,0x19,0xE0,0xF0,0x23,0x0B,0xDC,0x06,0x15,0xE2,0x02,0x1E,0xE9, + 0xE8,0x18,0x16,0xE3,0xF6,0x1F,0xEC,0xF1,0x20,0xF4,0xE9,0x13,0x01,0xDD,0x0D,0x13, + 0xE0,0x13,0x35,0xE8,0xDC,0x0D,0xE7,0xDC,0x15,0x21,0x22,0x13,0xF6,0xC9,0xCF,0x0B, + 0xFF,0x17,0x4D,0x2B,0xD6,0xBE,0xC7,0xBE,0xFC,0x41,0x38,0x44,0x24,0xCD,0xB3,0xD0, + 0x08,0x0D,0x2B,0x4B,0x21,0xD6,0xBC,0xC6,0xC4,0xFE,0x3D,0x3A,0x44,0x2A,0xC9,0xBB, + 0xD9,0xD5,0xFF,0x35,0x43,0x36,0xF2,0xC9,0xC1,0xC3,0xFF,0x2A,0x2F,0x46,0x36,0xD8, + 0xB7,0xCB,0xC4,0xE3,0x31,0x40,0x3C,0x3A,0xED,0xB4,0xCC,0xE1,0xE4,0x20,0x41,0x3E, + 0x24,0xE4,0xBE,0xC1,0xE6,0xF1,0x17,0x42,0x43,0x1F,0xDA,0xC8,0xBA,0xD8,0x10,0x1A, + 0x34,0x4B,0x2C,0xD5,0xBE,0xC8,0xBC,0xF2,0x2F,0x33,0x3C,0x43,0x00,0xBC,0xC0,0xDE, + 0xDB,0xF4,0x32,0x3C,0x3E,0x1B,0xDF,0xC2,0xB9,0xEC,0xFA,0x07,0x3B,0x3F,0x31,0xFF, + 0xD0,0xB6,0xCF,0xF0,0xEF,0x25,0x40,0x38,0x30,0xF3,0xC1,0xB7,0xD8,0xF8,0xFB,0x2B, + 0x3F,0x3D,0x1F,0xD8,0xC3,0xBE,0xC7,0x0C,0x1D,0x21,0x40,0x44,0x14,0xC4,0xC1,0xC1, + 0xC6,0x09,0x23,0x24,0x3D,0x41,0x15,0xD7,0xC4,0xB8,0xD4,0x01,0xFF,0x2B,0x42,0x35, + 0x2F,0xF1,0xBB,0xBA,0xD2,0xE4,0xF7,0x2B,0x3E,0x37,0x42,0x0A,0xBD,0xBC,0xCB,0xCC, + 0xE6,0x1E,0x3F,0x37,0x3E,0x34,0xE0,0xB6,0xC1,0xD1,0xD5,0xF5,0x2E,0x3B,0x36,0x40, + 0x2B,0xD3,0xB6,0xC1,0xC2,0xE0,0x13,0x30,0x30,0x3D,0x43,0x0E,0xCC,0xBE,0xC3,0xBD, + 0xE8,0x20,0x1B,0x32,0x40,0x41,0x1C,0xCB,0xBE,0xC2,0xBE,0xDD,0x1D,0x26,0x22,0x3D, + 0x41,0x28,0xE6,0xBD,0xC1,0xBC,0xD0,0x12,0x17,0x17,0x3B,0x3F,0x34,0x0D,0xD8,0xC0, + 0xB8,0xCC,0xF3,0xFC,0x0D,0x30,0x3E,0x30,0x35,0x15,0xC9,0xBB,0xC0,0xC5,0xE1,0x15, + 0x20,0x1F,0x3C,0x3A,0x2A,0x0B,0xD4,0xBE,0xB7,0xCF,0xEF,0xFA,0x21,0x27,0x2B,0x3F, + 0x38,0x12,0xD9,0xC3,0xBA,0xC2,0xE8,0xF5,0x0C,0x30,0x2E,0x2D,0x3B,0x2C,0xF9,0xCC, + 0xBF,0xBA,0xCE,0xEF,0xFC,0x1C,0x26,0x25,0x3C,0x37,0x1C,0xFC,0xD3,0xBC,0xBA,0xD0, + 0xE8,0xF9,0x1D,0x2D,0x24,0x2F,0x3D,0x2A,0xFD,0xD5,0xC2,0xB8,0xC4,0xE7,0xF9,0x08, + 0x27,0x31,0x27,0x34,0x3C,0x1B,0xE4,0xC1,0xBE,0xB7,0xCE,0xF8,0x02,0x0E,0x23,0x32, + 0x2C,0x2C,0x3A,0x1E,0xE3,0xBE,0xBE,0xBA,0xC3,0xF7,0x14,0x0F,0x14,0x2A,0x33,0x26, + 0x31,0x2D,0xF9,0xCC,0xBE,0xBD,0xBA,0xDD,0x0C,0x0D,0x14,0x27,0x21,0x20,0x34,0x31, + 0x12,0xF8,0xD5,0xBA,0xBA,0xCA,0xE1,0xFA,0x16,0x26,0x13,0x12,0x30,0x2F,0x1F,0x28, + 0x12,0xD4,0xBC,0xBF,0xBC,0xCF,0x00,0x15,0x0D,0x1A,0x24,0x17,0x1B,0x2F,0x2C,0x15, + 0x04,0xE5,0xC1,0xBD,0xC0,0xCD,0xEE,0x0E,0x26,0x1D,0x10,0x20,0x1F,0x19,0x29,0x25, + 0x0B,0xF2,0xD4,0xBF,0xBC,0xCA,0xE4,0xF8,0x10,0x24,0x1C,0x10,0x1C,0x1D,0x18,0x26, + 0x21,0x0A,0xFB,0xE0,0xC5,0xBB,0xC3,0xDD,0xEF,0x08,0x22,0x1C,0x12,0x1B,0x17,0x10, + 0x1B,0x28,0x1C,0x0B,0x04,0xE3,0xC2,0xC0,0xC3,0xCD,0xE8,0x0C,0x21,0x18,0x19,0x1E, + 0x0A,0x08,0x1E,0x1F,0x17,0x1A,0x11,0xFA,0xE4,0xD0,0xC1,0xC0,0xD2,0xED,0xFD,0x10, + 0x22,0x19,0x11,0x18,0x0F,0x07,0x16,0x1F,0x15,0x12,0x15,0x03,0xE5,0xD2,0xCA,0xC3, + 0xC7,0xE3,0xFE,0x09,0x14,0x1F,0x1C,0x10,0x0F,0x10,0x07,0x0C,0x1C,0x19,0x11,0x13, + 0x09,0xF3,0xE3,0xCF,0xC1,0xCC,0xD9,0xE2,0xFB,0x14,0x17,0x17,0x1C,0x13,0x09,0x0D, + 0x0B,0x05,0x10,0x1A,0x13,0x0E,0x11,0x06,0xF7,0xEB,0xD6,0xC6,0xC8,0xD6,0xE2,0xF0, + 0x04,0x17,0x1D,0x17,0x13,0x15,0x0C,0x04,0x08,0x05,0x03,0x0E,0x16,0x11,0x0C,0x0B, + 0x08,0xFD,0xEF,0xDE,0xD5,0xCC,0xCE,0xDD,0xEA,0xF5,0x07,0x17,0x1A,0x16,0x18,0x16, + 0x0A,0x08,0x0A,0x02,0xFF,0x05,0x0A,0x0B,0x11,0x10,0x07,0x05,0x05,0xFD,0xF4,0xE9, + 0xD9,0xCF,0xD4,0xDC,0xE1,0xED,0xFF,0x0C,0x11,0x16,0x1A,0x13,0x0E,0x0F,0x0A,0x06, + 0x07,0x05,0xFF,0x01,0x06,0x05,0x08,0x10,0x0F,0x08,0x04,0x04,0xFD,0xF8,0xFA,0xF1, + 0xE2,0xDA,0xDC,0xDE,0xE2,0xED,0xF4,0xF8,0x05,0x10,0x13,0x13,0x15,0x12,0x0C,0x0A, + 0x08,0x04,0x04,0x04,0x00,0xFE,0x00,0x01,0xFE,0x00,0x04,0x06,0x08,0x09,0x06,0x00, + 0x00,0xFF,0xFC,0xF8,0xFE,0xFE,0xE7,0xCD,0xC5,0xD9,0xF5,0x0B,0x1D,0x3F,0x2F,0xF5, + 0xDA,0xED,0x2A,0x0F,0xE2,0xE4,0x1C,0x24,0xEA,0xDD,0x07,0x33,0xFD,0xD9,0xF0,0x2E, + 0x14,0xDB,0xDE,0x19,0x2B,0xE9,0xD5,0xFD,0x34,0xFF,0xD4,0xE5,0x2A,0x1E,0xDD,0xD9, + 0x0E,0x34,0xEE,0xD4,0xEF,0x33,0x11,0xD9,0xDF,0x1A,0x32,0xEA,0xD6,0xF6,0x37,0x0A, + 0xD7,0xE0,0x20,0x2D,0xE5,0xD6,0xFB,0x3B,0x04,0xD5,0xDF,0x24,0x2D,0xE1,0xD6,0xFC, + 0x3E,0x03,0xD4,0xDF,0x22,0x2E,0xE1,0xD7,0xF5,0x3B,0x08,0xD7,0xDD,0x1B,0x35,0xE4, + 0xD6,0xF2,0x3C,0x11,0xD7,0xDD,0x11,0x3B,0xED,0xD6,0xE6,0x33,0x21,0xD8,0xD8,0x04, + 0x43,0xFA,0xD5,0xE0,0x23,0x31,0xE0,0xD8,0xEF,0x3D,0x12,0xD6,0xDA,0x0D,0x41,0xF1, + 0xD7,0xE2,0x29,0x2D,0xDD,0xD8,0xF1,0x41,0x0F,0xD4,0xDC,0x0A,0x41,0xF2,0xD6,0xE0, + 0x28,0x33,0xDC,0xD9,0xED,0x39,0x1A,0xD7,0xDA,0xFF,0x45,0xFF,0xD4,0xDE,0x14,0x3D, + 0xEB,0xD8,0xE2,0x2A,0x31,0xDC,0xDA,0xEC,0x39,0x1F,0xD6,0xDB,0xF9,0x41,0x09,0xD5, + 0xDB,0x07,0x46,0xF6,0xD6,0xE0,0x15,0x3F,0xEA,0xD7,0xE2,0x26,0x35,0xDF,0xDA,0xE5, + 0x32,0x2C,0xD8,0xDC,0xEC,0x38,0x21,0xD5,0xDC,0xF4,0x3D,0x15,0xD5,0xDC,0xF9,0x42, + 0x0C,0xD4,0xDE,0xFE,0x45,0x05,0xD3,0xDF,0x02,0x45,0xFF,0xD3,0xE1,0x06,0x43,0xFC, + 0xD3,0xE1,0x09,0x42,0xFB,0xD5,0xE0,0x0A,0x41,0xFA,0xD5,0xE0,0x0A,0x42,0xFA,0xD5, + 0xDF,0x09,0x43,0xFC,0xD5,0xDF,0x05,0x45,0x01,0xD3,0xDF,0x00,0x44,0x08,0xD3,0xDF, + 0xFB,0x42,0x10,0xD3,0xDE,0xF5,0x3D,0x1A,0xD5,0xDE,0xEF,0x36,0x25,0xDA,0xDC,0xEA, + 0x2B,0x2F,0xE1,0xDA,0xE6,0x1E,0x39,0xEA,0xD7,0xE4,0x11,0x41,0xF8,0xD4,0xE1,0x02, + 0x44,0x08,0xD1,0xE1,0xF5,0x3E,0x1C,0xD3,0xE0,0xEB,0x2F,0x31,0xDC,0xDB,0xE6,0x1C, + 0x3E,0xEE,0xD5,0xE3,0x06,0x42,0x07,0xD3,0xE1,0xF5,0x3A,0x22,0xD7,0xDD,0xEA,0x24, + 0x38,0xE8,0xD7,0xE6,0x0A,0x40,0x04,0xD2,0xE2,0xF5,0x37,0x26,0xD8,0xDE,0xEA,0x1B, + 0x3C,0xF0,0xD5,0xE5,0xFF,0x3F,0x14,0xD2,0xE1,0xED,0x26,0x35,0xE6,0xD8,0xE6,0x06, + 0x40,0x0C,0xD3,0xE2,0xEF,0x2A,0x32,0xE3,0xD8,0xE6,0x08,0x3F,0x0B,0xD4,0xE2,0xEF, + 0x2A,0x35,0xE5,0xD8,0xE7,0x03,0x3D,0x11,0xD5,0xE1,0xEB,0x22,0x3A,0xED,0xD6,0xE7, + 0xFA,0x38,0x20,0xD8,0xDE,0xEA,0x11,0x3F,0x02,0xD3,0xE5,0xF2,0x28,0x33,0xE7,0xD6, + 0xE8,0xFE,0x39,0x1E,0xD7,0xDF,0xEA,0x11,0x3F,0x03,0xD2,0xE5,0xED,0x22,0x3A,0xED, + 0xD5,0xE7,0xF5,0x32,0x2C,0xDF,0xDB,0xE8,0xFF,0x3B,0x1C,0xD7,0xE0,0xEA,0x0B,0x3F, + 0x0C,0xD3,0xE4,0xEB,0x15,0x3E,0xFF,0xD2,0xE6,0xEE,0x1D,0x3B,0xF7,0xD4,0xE7,0xF1, + 0x24,0x38,0xF0,0xD4,0xE8,0xF4,0x27,0x33,0xEC,0xD6,0xEA,0xF6,0x2A,0x31,0xE8,0xD7, + 0xEB,0xF6,0x2C,0x30,0xE7,0xD7,0xEA,0xF6,0x2C,0x30,0xE8,0xD7,0xEA,0xF6,0x29,0x32, + 0xEB,0xD4,0xEA,0xF5,0x25,0x35,0xF0,0xD3,0xE9,0xF3,0x1F,0x39,0xF9,0xD2,0xE7,0xF1, + 0x15,0x3B,0x04,0xD2,0xE5,0xF0,0x0C,0x3B,0x11,0xD6,0xE0,0xEF,0x03,0x36,0x20,0xDC, + 0xDB,0xED,0xFA,0x2C,0x2F,0xE8,0xD7,0xEB,0xF3,0x1E,0x39,0xFB,0xD4,0xE6,0xF0,0x0B, + 0x3A,0x14,0xD8,0xDE,0xEE,0xFE,0x2E,0x2C,0xE6,0xD6,0xEB,0xF5,0x1A,0x3A,0x00,0xD4, + 0xE3,0xF1,0x05,0x36,0x1F,0xDD,0xDA,0xEE,0xF8,0x21,0x38,0xF6,0xD4,0xE5,0xF3,0x07, + 0x38,0x1C,0xDC,0xDA,0xED,0xF9,0x1F,0x38,0xF9,0xD5,0xE3,0xF3,0x04,0x33,0x24,0xE2, + 0xD9,0xEA,0xF8,0x14,0x3A,0x09,0xD7,0xDF,0xF1,0xFD,0x25,0x35,0xF0,0xD6,0xE5,0xF5, + 0x05,0x33,0x25,0xDF,0xDA,0xEB,0xF7,0x0E,0x3B,0x12,0xD8,0xDE,0xEF,0xFB,0x18,0x3A, + 0x02,0xD7,0xE1,0xF2,0xFD,0x20,0x37,0xF6,0xD7,0xE3,0xF5,0xFF,0x25,0x34,0xED,0xD8, + 0xE4,0xF6,0x00,0x29,0x31,0xEA,0xDA,0xE5,0xF6,0x02,0x2A,0x30,0xE9,0xD8,0xE5,0xF7, + 0x01,0x29,0x30,0xEC,0xD9,0xE3,0xF8,0x00,0x26,0x34,0xEE,0xD9,0xE2,0xF5,0x00,0x1F, + 0x39,0xF6,0xD7,0xE2,0xF2,0xFF,0x15,0x3B,0x06,0xD6,0xDF,0xEE,0xFF,0x0B,0x37,0x19, + 0xDA,0xDD,0xEA,0xFD,0x05,0x2D,0x2C,0xE6,0xDA,0xE6,0xF8,0x00,0x1C,0x3A,0xFB,0xD9, + 0xE2,0xF0,0xFF,0x0A,0x37,0x1A,0xDD,0xDE,0xE7,0xFB,0x01,0x22,0x35,0xF5,0xD7,0xE4, + 0xF2,0xFF,0x0B,0x36,0x1C,0xDC,0xDD,0xE9,0xFB,0x00,0x1C,0x38,0xFB,0xD8,0xE2,0xEF, + 0x01,0x04,0x2D,0x29,0xE6,0xDA,0xE5,0xF7,0x00,0x0D,0x36,0x15,0xDC,0xDD,0xE8,0xFC, + 0x01,0x18,0x38,0x04,0xD8,0xE0,0xEC,0xFF,0x02,0x1F,0x36,0xF9,0xD6,0xE4,0xEF,0x00, + 0x02,0x24,0x35,0xF3,0xD7,0xE5,0xF0,0x02,0x01,0x24,0x34,0xF1,0xD7,0xE6,0xEF,0x01, + 0x02,0x21,0x33,0xF6,0xD7,0xE5,0xEF,0x00,0x02,0x1D,0x35,0x00,0xD7,0xE1,0xEE,0xFE, + 0x02,0x14,0x35,0x0F,0xD9,0xDD,0xED,0xFB,0x02,0x0B,0x30,0x21,0xE2,0xD9,0xE7,0xF6, + 0x02,0x05,0x23,0x30,0xF9,0xD6,0xE1,0xEF,0xFF,0x03,0x11,0x34,0x16,0xDF,0xDC,0xE8, + 0xF7,0x04,0x04,0x21,0x34,0xF8,0xD7,0xE3,0xED,0xFD,0x04,0x09,0x2E,0x24,0xE5,0xD9, + 0xE7,0xF3,0x01,0x04,0x11,0x33,0x11,0xDC,0xDE,0xEA,0xF6,0x03,0x04,0x18,0x34,0x06, + 0xDA,0xE0,0xEC,0xFA,0x04,0x05,0x1B,0x31,0x03,0xDA,0xDE,0xED,0xFA,0x03,0x06,0x18, + 0x32,0x06,0xD9,0xDF,0xEC,0xFB,0x03,0x04,0x13,0x30,0x11,0xDD,0xDB,0xEB,0xF8,0x01, + 0x06,0x0B,0x2B,0x20,0xE7,0xD9,0xE7,0xF4,0xFF,0x07,0x05,0x1E,0x2D,0xFB,0xDA,0xE1, + 0xEF,0xFA,0x05,0x05,0x0D,0x2D,0x1A,0xE4,0xDA,0xE8,0xF6,0xFE,0x06,0x07,0x18,0x2E, + 0x06,0xDA,0xDD,0xEB,0xFC,0x02,0x05,0x07,0x20,0x2C,0xF8,0xD8,0xE1,0xEE,0xFD,0x03, + 0x06,0x08,0x22,0x2A,0xF4,0xD7,0xE2,0xF0,0xFD,0x01,0x06,0x09,0x1E,0x2C,0xF9,0xD7, + 0xE1,0xEE,0xFB,0x02,0x07,0x06,0x18,0x2E,0x04,0xDA,0xDF,0xEA,0xFA,0x01,0x06,0x07, + 0x0D,0x2A,0x19,0xE6,0xDA,0xE4,0xF4,0xFF,0x04,0x08,0x07,0x1A,0x2B,0x03,0xDA,0xDF, + 0xEC,0xF8,0x01,0x04,0x07,0x0A,0x21,0x24,0xF4,0xD8,0xE2,0xF1,0xFB,0x01,0x06,0x06, + 0x0A,0x24,0x21,0xF0,0xD8,0xE5,0xF1,0xFC,0x03,0x05,0x06,0x09,0x20,0x23,0xF4,0xD9, + 0xE3,0xEF,0xFC,0x03,0x04,0x06,0x06,0x17,0x26,0x05,0xDC,0xDE,0xED,0xF8,0x00,0x02, + 0x07,0x07,0x0B,0x21,0x1C,0xEE,0xD9,0xE4,0xF2,0xFE,0x03,0x04,0x06,0x06,0x0F,0x24, + 0x13,0xE5,0xD8,0xE8,0xF4,0xFE,0x05,0x06,0x07,0x05,0x0F,0x24,0x11,0xE5,0xDA,0xE8, + 0xF5,0xFF,0x03,0x06,0x08,0x05,0x0A,0x1F,0x1A,0xF1,0xDA,0xE2,0xF1,0xFD,0x04,0x06, + 0x07,0x06,0x04,0x13,0x22,0x0A,0xE1,0xDA,0xE9,0xF7,0x00,0x05,0x06,0x06,0x05,0x05, + 0x16,0x22,0x02,0xDE,0xDD,0xE9,0xF7,0x01,0x05,0x07,0x06,0x05,0x04,0x12,0x21,0x0A, + 0xE3,0xDB,0xE9,0xF6,0xFF,0x04,0x06,0x06,0x06,0x04,0x07,0x1B,0x1B,0xF5,0xDA,0xE1, + 0xEE,0xFA,0x03,0x06,0x06,0x05,0x05,0x03,0x09,0x1D,0x17,0xF1,0xDB,0xE2,0xEF,0xFB, + 0x03,0x05,0x06,0x05,0x04,0x04,0x07,0x15,0x1C,0x00,0xDF,0xDE,0xEC,0xF6,0x00,0x05, + 0x06,0x06,0x05,0x04,0x03,0x07,0x19,0x19,0xF7,0xDB,0xE1,0xEF,0xFA,0x01,0x05,0x06, + 0x06,0x05,0x05,0x03,0x04,0x14,0x1B,0x01,0xE1,0xDD,0xEB,0xF8,0x00,0x04,0x07,0x06, + 0x04,0x04,0x03,0x00,0x06,0x16,0x17,0xFB,0xE0,0xE0,0xED,0xF9,0x02,0x05,0x06,0x06, + 0x04,0x03,0x03,0x00,0x01,0x0E,0x1A,0x0B,0xE9,0xDC,0xE6,0xF5,0xFE,0x03,0x06,0x07, + 0x06,0x04,0x02,0x01,0x00,0x00,0x0A,0x18,0x10,0xF2,0xDE,0xE3,0xF1,0xFC,0x03,0x05, + 0x05,0x06,0x05,0x03,0x02,0x01,0xFF,0xFF,0x0A,0x18,0x0F,0xF2,0xDF,0xE3,0xF1,0xFC, + 0x03,0x06,0x07,0x05,0x04,0x02,0x01,0x00,0x00,0xFF,0x01,0x0C,0x16,0x0D,0xF2,0xE0, + 0xE4,0xF1,0xFD,0x04,0x06,0x05,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0xFE,0x01,0x0C, + 0x15,0x0D,0xF4,0xE1,0xE4,0xF0,0xFB,0x01,0x05,0x05,0x04,0x04,0x03,0x02,0x02,0x00, + 0xFF,0xFF,0xFF,0x00,0x07,0x13,0x12,0xFE,0xE7,0xE2,0xEB,0xF7,0x00,0x04,0x05,0x05, + 0x04,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0xFF,0x01,0x09,0x11,0x10,0xFD,0xE7, + 0xE1,0xEB,0xF8,0x00,0x04,0x06,0x05,0x03,0x03,0x02,0x00,0xFF,0xFF,0x00,0xFF,0xFF, + 0xFF,0x00,0x00,0x02,0x09,0x11,0x10,0xFF,0xEA,0xE2,0xE9,0xF6,0xFE,0x04,0x06,0x06, + 0x05,0x02,0x01,0x01,0x00,0x00,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0x00,0x05, + 0x0C,0x10,0x0C,0xFB,0xEA,0xE4,0xEC,0xF6,0xFE,0x03,0x05,0x06,0x05,0x04,0x03,0x01, + 0x01,0xFF,0xFF,0xFF,0xFE,0xFE,0xFD,0xFE,0xFE,0xFE,0xFF,0xFF,0xFE,0xFF,0x01,0x07, + 0x0B,0x0D,0x06,0xF6,0xEA,0xE6,0xEE,0xF8,0x02,0x05,0x06,0x06,0x04,0x04,0x01,0x01, + 0x00,0xFE,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0xFE,0xFE,0xFD,0xFE, + 0xFF,0xFF,0xFF,0xFF,0x02,0x08,0x0A,0x09,0x05,0xF9,0xF0,0xEA,0xEC,0xF7,0xFF,0x03, + 0x06,0x06,0x05,0x05,0x02,0x07,0x0E,0xF9,0xF6,0xF7,0xFD,0x09,0xF9,0xF9,0xFC,0x09, + 0x01,0xF9,0xFB,0x05,0x08,0xF8,0xFB,0xFE,0x0A,0xFB,0xF8,0xFC,0x07,0x03,0xF8,0xFB, + 0x02,0x09,0xF8,0xF9,0xFD,0x09,0xFD,0xF8,0xFB,0x06,0x05,0xF9,0xFC,0x00,0x09,0xFB, + 0xFB,0xFB,0x06,0x01,0xFA,0xFA,0xFF,0x08,0xFC,0xFB,0xFA,0x07,0x03,0xFB,0xFA,0x01, + 0x09,0xFC,0xF9,0xFB,0x0A,0x01,0xF8,0xFA,0x02,0x08,0xF9,0xFC,0xFB,0x08,0x00,0xFB, + 0xFA,0xFE,0x0A,0xFC,0xFB,0xF9,0x09,0x03,0xF8,0xFA,0xFF,0x0A,0xFB,0xFB,0xFB,0x05, + 0x04,0xFA,0xFC,0xFC,0x0B,0xFF,0xF9,0xF9,0x04,0x06,0xF9,0xFD,0xFB,0x08,0x02,0xFB, + 0xF9,0xFE,0x0A,0xFC,0xFA,0xFA,0x06,0x04,0xFA,0xFD,0xFA,0x09,0x00,0xFA,0xFA,0x00, + 0x0A,0xFA,0xFD,0xFA,0x04,0x06,0xFA,0xFB,0xFA,0x0A,0x00,0xF8,0xFC,0xFE,0x09,0xFD, + 0xFB,0xF9,0x03,0x09,0xF7,0xFC,0xFB,0x05,0x05,0xFB,0xFB,0xFC,0x0A,0xFF,0xFA,0xFC, + 0xFD,0x0A,0xFE,0xFA,0xFB,0x02,0x07,0xFB,0xFD,0xF9,0x05,0x07,0xF8,0xFD,0xFB,0x04, + 0x05,0xFA,0xFA,0xFD,0x09,0xFF,0xFB,0xFC,0xFC,0x0B,0xFE,0xFA,0xFD,0xFD,0x09,0xFE, + 0xFA,0xFB,0x00,0x07,0xFC,0xFC,0xF9,0x03,0x08,0xF9,0xFD,0xF9,0x03,0x08,0xF8,0xFD, + 0xFB,0x02,0x08,0xFA,0xFC,0xFC,0x03,0x05,0xFB,0xFB,0xFC,0x05,0x04,0xFB,0xFB,0xFB, + 0x06,0x03,0xFB,0xFC,0xFA,0x07,0x03,0xFA,0xFE,0xFA,0x06,0x04,0xF9,0xFE,0xF9,0x06, + 0x05,0xF8,0x00,0xFA,0x05,0x06,0xF8,0xFF,0xFA,0x03,0x07,0xF8,0xFF,0xFA,0x02,0x08, + 0xFA,0xFE,0xFB,0x00,0x08,0xFB,0xFD,0xFB,0xFE,0x07,0xFE,0xFD,0xFB,0xFD,0x07,0x01, + 0xFB,0xFB,0xFC,0x05,0x03,0xFB,0xFD,0xFC,0x02,0x06,0xFB,0xFC,0xFC,0xFF,0x08,0xFC, + 0xFB,0xFC,0xFD,0x08,0xFF,0xFB,0xFC,0xFD,0x06,0x01,0xFC,0xFD,0xFC,0x02,0x06,0xFC, + 0xFC,0xFC,0x00,0x08,0xFC,0xFC,0xFE,0xFC,0x07,0x00,0xFB,0xFE,0xFC,0x03,0x05,0xFC, + 0xFD,0xFC,0xFF,0x08,0xFD,0xFC,0xFD,0xFD,0x04,0x02,0xFC,0xFD,0xFC,0x01,0x06,0xFC, + 0xFC,0xFD,0xFE,0x05,0x00,0xFB,0xFD,0xFC,0x02,0x05,0xFB,0xFE,0xFC,0xFF,0x06,0xFF, + 0xFC,0xFD,0xFC,0x04,0x04,0xFB,0xFE,0xFC,0xFE,0x06,0xFF,0xFC,0xFD,0xFC,0x03,0x04, + 0xFD,0xFD,0xFD,0xFE,0x05,0x01,0xFC,0xFE,0xFD,0x01,0x04,0xFE,0xFC,0xFE,0xFE,0x03, + 0x02,0xFC,0xFE,0xFD,0xFE,0x05,0x00,0xFB,0xFE,0xFD,0x01,0x04,0xFD,0xFC,0xFE,0xFD, + 0x03,0x03,0xFC,0xFD,0xFE,0xFF,0x04,0x01,0xFB,0xFD,0xFE,0x00,0x04,0xFF,0xFB,0xFE, + 0xFE,0x01,0x03,0xFE,0xFB,0xFE,0xFE,0x01,0x03,0xFD,0xFC,0xFE,0xFF,0x03,0x02,0xFC, + 0xFD,0xFE,0xFE,0x03,0x01,0xFC,0xFE,0xFE,0xFE,0x04,0x00,0xFB,0xFE,0xFE,0x00,0x04, + 0xFE,0xFD,0xFE,0xFD,0x00,0x03,0xFE,0xFD,0xFD,0xFD,0x01,0x02,0xFE,0xFD,0xFE,0xFE, + 0x01,0x02,0xFF,0xFD,0xFE,0xFE,0x01,0x03,0xFE,0xFD,0xFE,0xFE,0x01,0x02,0xFF,0xFD, + 0xFE,0xFE,0x00,0x01,0xFF,0xFD,0xFE,0xFF,0x00,0x02,0x00,0xFD,0xFE,0xFF,0xFF,0x01, + 0x01,0xFD,0xFE,0xFF,0xFE,0x01,0x00,0xFD,0xFE,0xFF,0xFF,0x00,0x02,0xFE,0xFD,0xFF, + 0xFE,0x00,0x02,0xFE,0xFE,0xFF,0xFE,0xFF,0x01,0x00,0xFE,0xFE,0xFE,0xFF,0x01,0x01, + 0xFF,0xFE,0xFE,0xFF,0x00,0x01,0xFF,0xFE,0xFE,0xFE,0xFF,0x01,0x00,0xFE,0xFE,0xFE, + 0xFF,0x00,0x00,0xFF,0xFE,0xFE,0xFF,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x01,0x01, + 0xFF,0xFE,0xFE,0xFF,0xFF,0x01,0x00,0xFE,0xFE,0xFE,0xFE,0x00,0x00,0xFF,0xFE,0xFE, + 0xFF,0xFF,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFE,0xFF,0xFE,0xFF, + 0x01,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0x01,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0x00,0xFF, + 0xFE,0xFF,0xFE,0xFE,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFF,0xFE,0xFF, + 0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0xFF,0xFF,0xFF, + 0x00,0x00,0xFF,0xFE,0xFF,0xFE,0xFE,0xFF +}; +static PROGMEM prog_uchar playerdeath_snd[5627] = { + 0x00,0x02,0x09,0x10,0x15,0x16,0x0D,0x03,0xF9,0xEC,0xE4,0xE5,0xE9,0xEB,0xF7,0x04, + 0x05,0x04,0x09,0x12,0x14,0x0D,0x00,0xF5,0xF5,0xF7,0x02,0x09,0x03,0x03,0x08,0x12, + 0x1A,0x1C,0x1A,0x15,0x0A,0xF8,0xDF,0xC8,0xC0,0xC2,0xC5,0xCD,0xE3,0xF4,0xFE,0x03, + 0x09,0x1B,0x25,0x26,0x20,0x1A,0x1E,0x30,0x3D,0x3D,0x3D,0x3B,0x2C,0x1D,0x0C,0xEF, + 0xD6,0xD4,0xD4,0xD3,0xDA,0xD9,0xCA,0xC0,0xC0,0xC0,0xC4,0xC8,0xDA,0xFE,0x13,0x22, + 0x30,0x38,0x39,0x2F,0x21,0x0A,0xE3,0xC4,0xBF,0xC2,0xBE,0xCD,0xEF,0x03,0x17,0x2A, + 0x36,0x31,0x1A,0x0E,0x0E,0x0E,0x10,0x01,0xE1,0xCB,0xC5,0xCF,0xDE,0xF2,0x10,0x1F, + 0x25,0x1E,0x10,0x0D,0x11,0x1A,0x1A,0x10,0x0B,0x1D,0x38,0x3E,0x3C,0x3D,0x3C,0x2E, + 0x09,0xD9,0xC1,0xBE,0xCA,0xE7,0xFD,0x12,0x19,0x11,0x03,0xF5,0xE8,0xD6,0xD2,0xD5, + 0xD3,0xE4,0x02,0x0C,0xFF,0xE9,0xDE,0xE7,0xF9,0x0D,0x17,0x26,0x39,0x3A,0x22,0xF4, + 0xCB,0xBF,0xC3,0xD5,0xF9,0x1D,0x2A,0x13,0xEC,0xD7,0xD2,0xCE,0xC9,0xC6,0xCD,0xEC, + 0x20,0x3D,0x3D,0x3D,0x3B,0x3D,0x36,0x22,0xF6,0xC6,0xC0,0xC1,0xC0,0xC0,0xCF,0xE6, + 0xE3,0xE2,0xF2,0xFD,0xFD,0xFB,0x07,0x1F,0x36,0x3D,0x3C,0x3D,0x3B,0x3B,0x3C,0x3C, + 0x3D,0x22,0xF8,0xD5,0xBF,0xC1,0xBF,0xC5,0xED,0xFF,0xEF,0xD8,0xC8,0xD6,0xE6,0xEF, + 0xF2,0xF4,0xFA,0x09,0x2C,0x3D,0x3B,0x3C,0x3B,0x29,0x03,0xEC,0xF1,0x08,0x1D,0x23, + 0x0D,0xDC,0xBE,0xC1,0xBF,0xC0,0xBE,0xC8,0xF7,0x27,0x3C,0x3A,0x3B,0x33,0x16,0xFF, + 0xE1,0xC1,0xBF,0xBF,0xC0,0xBE,0xD4,0x0E,0x25,0x23,0x31,0x3B,0x3C,0x39,0x28,0x26, + 0x37,0x3B,0x3A,0x3A,0x19,0xF5,0xF5,0x08,0x1E,0x2A,0x21,0x0E,0xFD,0xF3,0xED,0xEC, + 0xF1,0xF6,0xF9,0xEA,0xCE,0xC6,0xDA,0xF1,0x01,0x09,0x15,0x30,0x3C,0x3A,0x3B,0x3A, + 0x39,0x3E,0x24,0xF1,0xD1,0xCD,0xDF,0xF7,0x14,0x2F,0x2C,0x0B,0xDD,0xC2,0xBF,0xC1, + 0xC8,0xDC,0xF9,0x08,0x0E,0x17,0x18,0x01,0xE0,0xCF,0xD1,0xD0,0xD6,0xDF,0xE0,0xE8, + 0xEC,0xE9,0xE6,0xDB,0xD5,0xDC,0xE8,0x01,0x1F,0x32,0x30,0x1D,0x09,0x05,0x06,0xFD, + 0xF0,0xEA,0xF5,0x17,0x36,0x3C,0x35,0x2C,0x22,0x11,0xFF,0xF6,0xEF,0xF1,0xFD,0x05, + 0x0A,0x0F,0x0F,0x10,0x0F,0x0B,0x0C,0x13,0x19,0x1B,0x1B,0x19,0x13,0x0F,0x07,0xFC, + 0xF4,0xF2,0xF0,0xF1,0xF4,0xF2,0xEB,0xE5,0xE3,0xE5,0xE7,0xE7,0xEF,0xFE,0x05,0x0A, + 0x12,0x17,0x16,0x12,0x0C,0x02,0xF1,0xDD,0xD0,0xCF,0xD6,0xE4,0xF4,0xFD,0x07,0x10, + 0x15,0x12,0x07,0x02,0x01,0x03,0x04,0xFB,0xEC,0xE3,0xE0,0xE4,0xEB,0xF3,0xFD,0x04, + 0x07,0x04,0x06,0x10,0x13,0x13,0x0A,0xFB,0xF6,0x00,0x17,0x2C,0x39,0x3C,0x3B,0x3A, + 0x20,0xF0,0xCA,0xC1,0xD6,0xEA,0xF2,0xFB,0xFE,0xF9,0xED,0xDE,0xD3,0xCA,0xC7,0xD0, + 0xE0,0xFE,0x1F,0x26,0x16,0x00,0xF7,0xF9,0xFF,0x04,0x07,0x10,0x1C,0x1D,0x06,0xEC, + 0xD5,0xC9,0xCF,0xDA,0xF1,0x0E,0x19,0x0B,0xF2,0xE5,0xEA,0xEE,0xE8,0xE4,0xE8,0xFF, + 0x21,0x3A,0x3C,0x35,0x2B,0x25,0x1D,0x11,0xF5,0xCE,0xC2,0xC3,0xC3,0xC3,0xD3,0xE8, + 0xE4,0xE4,0xF2,0xFB,0xFD,0xFB,0x06,0x1B,0x2F,0x3D,0x3B,0x3C,0x36,0x34,0x3B,0x39, + 0x39,0x21,0xFD,0xDA,0xBF,0xC2,0xC0,0xC7,0xEC,0xFC,0xED,0xD5,0xC8,0xD5,0xE7,0xF1, + 0xF2,0xF5,0xFA,0x08,0x2B,0x3C,0x3A,0x3B,0x3A,0x28,0x03,0xEC,0xF2,0x08,0x1D,0x23, + 0x0E,0xDF,0xC2,0xC5,0xC3,0xC4,0xC2,0xCC,0xFB,0x28,0x3C,0x3A,0x3B,0x30,0x14,0xFE, + 0xDE,0xC1,0xC0,0xC1,0xC2,0xBF,0xD6,0x10,0x27,0x24,0x32,0x3A,0x3B,0x37,0x25,0x23, + 0x34,0x37,0x37,0x37,0x16,0xF2,0xF3,0x05,0x1A,0x27,0x1E,0x0C,0xFB,0xF0,0xEB,0xE9, + 0xEC,0xF2,0xF4,0xE5,0xCC,0xC3,0xD9,0xF0,0xFE,0x08,0x14,0x2F,0x39,0x37,0x38,0x37, + 0x37,0x3A,0x23,0xF0,0xCE,0xCA,0xDB,0xF3,0x13,0x31,0x2E,0x09,0xDA,0xBF,0xBF,0xC0, + 0xC0,0xD6,0xF5,0x05,0x0C,0x15,0x17,0x00,0xDA,0xC8,0xCA,0xC9,0xD0,0xDC,0xDB,0xE2, + 0xE8,0xE5,0xE1,0xD1,0xC9,0xD4,0xE3,0x04,0x2B,0x3C,0x38,0x23,0x0C,0x07,0x06,0xF6, + 0xE4,0xDA,0xE7,0x16,0x38,0x39,0x39,0x38,0x39,0x2D,0x15,0x05,0xF5,0xF1,0xFB,0x04, + 0x08,0x06,0x04,0x04,0x02,0x01,0x02,0xFF,0x00,0x01,0x01,0x02,0x02,0x01,0x02,0x03, + 0x01,0x00,0x01,0x03,0x02,0x00,0xFF,0x00,0xFE,0xFC,0xFC,0xFA,0xFC,0xFE,0xFB,0xF8, + 0xFA,0xF9,0xF6,0xF7,0xF6,0xF8,0xF7,0xF7,0xF7,0xF6,0xF8,0xF7,0xF8,0xF5,0xF5,0xF7, + 0xF6,0xF6,0xF7,0xF6,0xF7,0xF6,0xF7,0xF8,0xF7,0xF7,0xF8,0xF7,0xF8,0xF4,0xEA,0xE6, + 0xE5,0xE5,0xF7,0x14,0x19,0x05,0xEF,0xE0,0xD8,0xDA,0xE1,0xF8,0x22,0x3B,0x39,0x3A, + 0x38,0x11,0xE5,0xE1,0xEE,0xED,0xE2,0xD6,0xCF,0xCE,0xCA,0xC7,0xC8,0xC7,0xC7,0xCE, + 0xFD,0x35,0x41,0x3F,0x3F,0x37,0x33,0x29,0x0C,0xF3,0xE5,0xDC,0xDB,0xD1,0xC5,0xD9, + 0xF7,0xFC,0xF3,0xE9,0xE2,0xE4,0xEC,0xF9,0x0B,0x1B,0x34,0x44,0x41,0x42,0x3F,0x42, + 0x2F,0xFC,0xD3,0xC6,0xC7,0xC8,0xC5,0xD2,0xF1,0xFB,0xF7,0xF4,0xEF,0xEE,0xEE,0xEE, + 0xF1,0xF3,0xF6,0xFA,0xFC,0xFC,0xFE,0xF1,0xD7,0xCB,0xCE,0xDA,0xEF,0x06,0x1A,0x2A, + 0x36,0x3B,0x40,0x3F,0x3E,0x40,0x3B,0x43,0x11,0xCC,0xC6,0xC8,0xC8,0xCE,0xF2,0x07, + 0xF6,0xE0,0xCD,0xCA,0xC9,0xCA,0xCE,0xD4,0xD7,0xCD,0xCC,0xE6,0x02,0x08,0xFE,0x01, + 0x1C,0x38,0x3D,0x2A,0x15,0x05,0xFC,0xF8,0xF7,0xF9,0xF8,0xEB,0xDA,0xD8,0xF6,0x21, + 0x31,0x26,0x19,0x1C,0x1A,0x0C,0x0B,0x13,0x14,0x17,0x29,0x34,0x30,0x31,0x2B,0x12, + 0xF7,0xE1,0xD2,0xCD,0xD0,0xD3,0xD9,0xDE,0xDA,0xDE,0xE6,0xF6,0x0E,0x12,0x0D,0x08, + 0x03,0x00,0xFF,0xFE,0xFC,0xFC,0xF4,0xF9,0x0A,0x11,0x0F,0x0C,0x0A,0x07,0x06,0x05, + 0x05,0x07,0x07,0x07,0x08,0x07,0x07,0x05,0x05,0x06,0x07,0x08,0x08,0x07,0x06,0x02, + 0xFF,0xFE,0x05,0x0C,0x0C,0x09,0x05,0x02,0x01,0xFC,0xFC,0x01,0x02,0x01,0x00,0xFF, + 0x00,0x00,0xFA,0xEB,0xE7,0xFD,0x10,0x1B,0x20,0x17,0x0C,0x03,0xFD,0xF9,0xF7,0xF6, + 0xF7,0xF9,0xF9,0xF9,0xFA,0xFC,0xFE,0xFE,0xFF,0x00,0x01,0x01,0x00,0x01,0x00,0x01, + 0xFA,0xE9,0xD8,0xDC,0xF4,0x03,0x09,0x09,0x08,0x09,0x17,0x2D,0x3A,0x3C,0x3D,0x37, + 0x24,0x0C,0xF3,0xEA,0xE5,0xDD,0xE7,0xFB,0x03,0x06,0x0C,0x02,0xED,0xDC,0xD2,0xCC, + 0xC9,0xC8,0xCB,0xD6,0xE5,0x02,0x28,0x38,0x30,0x21,0x0F,0x02,0xFB,0xF8,0xF8,0xFB, + 0xFD,0x01,0x01,0xF4,0xED,0xF5,0xF9,0xFB,0x11,0x32,0x3F,0x32,0x1F,0x19,0x16,0x10, + 0x1A,0x2C,0x2C,0x2D,0x30,0x1F,0x06,0xF1,0xE1,0xDA,0xD9,0xDC,0xE0,0xE4,0xE9,0xEC, + 0xEF,0xF2,0xF5,0xED,0xDC,0xD3,0xD2,0xDD,0xF9,0x19,0x27,0x29,0x36,0x41,0x41,0x41, + 0x43,0x35,0x21,0x12,0xF6,0xDA,0xCD,0xCA,0xCB,0xCA,0xCC,0xE0,0xF7,0xFE,0xF6,0xED, + 0xF4,0x10,0x28,0x27,0x20,0x19,0x17,0x22,0x2D,0x22,0x03,0xE0,0xD2,0xD4,0xE1,0xFF, + 0x15,0x14,0x08,0xF9,0xE9,0xE1,0xDD,0xD6,0xD2,0xD6,0xE6,0x0E,0x37,0x42,0x40,0x3F, + 0x40,0x3A,0x1F,0x06,0xF9,0xF4,0xFF,0x0F,0x0F,0x02,0xF7,0xF0,0xED,0xEC,0xF0,0xF1, + 0xF4,0xF8,0xFA,0xFC,0xFE,0x00,0x01,0x03,0x02,0xF4,0xDF,0xD4,0xD5,0xE2,0xF5,0x08, + 0x19,0x27,0x3A,0x40,0x3E,0x40,0x3F,0x41,0x24,0x03,0xFB,0xF8,0x06,0x15,0x10,0x00, + 0xE5,0xCD,0xCB,0xCC,0xCB,0xCF,0xE4,0xFD,0x0D,0x0F,0x08,0x09,0x00,0xEF,0xE4,0xDB, + 0xDC,0xDB,0xD6,0xE2,0xFD,0x0F,0x12,0x11,0x0F,0x0D,0x0C,0x0C,0x0C,0x0F,0x10,0x10, + 0x11,0x12,0x15,0x15,0x15,0x15,0x15,0x13,0x12,0x11,0x0F,0x0F,0x0D,0x0C,0x0C,0x09, + 0xFE,0xEA,0xDA,0xD6,0xDD,0xEB,0xFA,0x11,0x30,0x3E,0x3D,0x3D,0x3D,0x3B,0x23,0xFE, + 0xE5,0xE5,0xFC,0x1A,0x30,0x33,0x1B,0xEF,0xCF,0xC8,0xCA,0xC9,0xCA,0xC7,0xCE,0xF6, + 0x23,0x39,0x32,0x22,0x17,0x02,0xEF,0xE1,0xDB,0xDB,0xDF,0xE3,0xE2,0xE2,0xE2,0xE0, + 0xE3,0xF5,0x16,0x2E,0x30,0x28,0x28,0x37,0x3C,0x39,0x35,0x1E,0x05,0xFA,0xFF,0x03, + 0x05,0x0F,0x12,0x0A,0xFF,0xF5,0xF0,0xEF,0xF1,0xF4,0xF5,0xF7,0xFA,0xF8,0xFB,0x02, + 0x03,0xFC,0xF5,0xFA,0x03,0x09,0x0A,0x08,0x06,0x05,0x0A,0x10,0x17,0x1E,0x1E,0x14, + 0x0C,0x04,0xFA,0xF7,0xF7,0xF2,0xF4,0xFE,0x00,0x02,0x03,0x00,0xF8,0xF0,0xE8,0xDC, + 0xD7,0xDD,0xE5,0xE4,0xE9,0xFA,0x0C,0x13,0x0E,0x0D,0x15,0x18,0x18,0x18,0x10,0x00, + 0xEF,0xE9,0xE9,0xE7,0xEF,0xF3,0xEF,0xEE,0xF5,0x00,0x03,0xFB,0xF3,0xF5,0xFC,0x08, + 0x23,0x34,0x35,0x32,0x2D,0x1C,0x00,0xEB,0xDD,0xCD,0xC7,0xC6,0xC9,0xD1,0xE1,0xF0, + 0xF8,0xF6,0xEE,0xE7,0xE5,0xE3,0xE5,0xEE,0xFD,0x0E,0x1A,0x21,0x2C,0x37,0x32,0x2D, + 0x2B,0x1D,0x12,0x0B,0xF8,0xE3,0xD8,0xCF,0xC6,0xC6,0xD3,0xE4,0xF4,0xF9,0xF5,0xEE, + 0xF3,0x08,0x18,0x17,0x12,0x0D,0x0A,0x14,0x1B,0x15,0xFD,0xE0,0xD6,0xD5,0xDE,0xF3, + 0x05,0x06,0x01,0xFA,0xEC,0xE5,0xE0,0xD8,0xD4,0xD9,0xE8,0x08,0x28,0x36,0x39,0x31, + 0x2D,0x29,0x11,0xFD,0xF2,0xED,0xF9,0x07,0x06,0xFC,0xF2,0xEB,0xE9,0xEA,0xEA,0xED, + 0xF0,0xF2,0xF5,0xF7,0xFA,0xFC,0xFC,0xFF,0xFC,0xEE,0xDB,0xD1,0xD2,0xDD,0xEF,0x00, + 0x11,0x1F,0x31,0x37,0x36,0x37,0x36,0x37,0x1B,0xFB,0xF2,0xEF,0xFE,0x0D,0x08,0xF9, + 0xDE,0xC6,0xC4,0xC6,0xC4,0xCA,0xDF,0xF6,0x08,0x07,0x02,0x02,0xF8,0xE8,0xDD,0xD6, + 0xD6,0xD4,0xCF,0xDB,0xF6,0x05,0x08,0x08,0x06,0x03,0x02,0x03,0x05,0x08,0x09,0x09, + 0x0A,0x0C,0x0B,0x0D,0x0E,0x0D,0x0E,0x0C,0x0B,0x0A,0x08,0x08,0x05,0x05,0x04,0x02, + 0xF8,0xE4,0xD6,0xD1,0xD7,0xE6,0xF7,0x0E,0x2C,0x39,0x38,0x38,0x39,0x37,0x21,0xFB, + 0xE1,0xDF,0xF7,0x16,0x2B,0x2F,0x15,0xE6,0xC7,0xC2,0xC4,0xC3,0xC4,0xC2,0xC6,0xEF, + 0x23,0x37,0x32,0x22,0x14,0x00,0xEB,0xDA,0xD4,0xD2,0xD7,0xDC,0xD9,0xDA,0xD6,0xD6, + 0xDB,0xEE,0x18,0x35,0x38,0x2E,0x2A,0x34,0x37,0x36,0x37,0x26,0x07,0xFA,0xFF,0x02, + 0x05,0x12,0x18,0x0C,0xFC,0xEF,0xE7,0xE7,0xE7,0xEB,0xEE,0xF2,0xF6,0xF4,0xF7,0xFE, + 0x02,0x01,0x00,0x04,0x09,0x0B,0x0B,0x07,0x05,0x03,0x03,0x02,0x01,0x02,0x03,0x02, + 0x01,0x03,0x02,0x02,0x02,0x01,0x02,0x01,0x01,0x00,0xFC,0xFD,0xFD,0xFD,0xF4,0xE4, + 0xE8,0xF6,0xF6,0xEB,0xE9,0xF4,0xF9,0xF7,0xF4,0xFF,0x1E,0x33,0x36,0x37,0x30,0x11, + 0xED,0xDE,0xDC,0xE4,0xFA,0xFB,0xED,0xE7,0xDF,0xD1,0xC6,0xC5,0xC8,0xD0,0xE1,0x07, + 0x2F,0x37,0x35,0x35,0x31,0x1F,0x00,0xED,0xDB,0xC5,0xC3,0xC4,0xC6,0xC3,0xD4,0xFD, + 0x0C,0x01,0xEB,0xE8,0xFB,0x08,0x0F,0x11,0x12,0x0E,0x11,0x21,0x2A,0x1E,0x04,0xFD, + 0x02,0x00,0x07,0x10,0x0F,0x0A,0x04,0x00,0xFE,0xFF,0xFE,0xFF,0x02,0x03,0x05,0x07, + 0x07,0x0B,0x0B,0x0A,0x0A,0x07,0x07,0x07,0x07,0x06,0x05,0x04,0x01,0xFD,0xF5,0xEA, + 0xEC,0xF4,0x06,0x1A,0x1F,0x1A,0x10,0x08,0xFF,0x02,0x0F,0x12,0x08,0xF9,0xEE,0xE6, + 0xE3,0xE2,0xE1,0xE1,0xE1,0xEA,0xF1,0xF3,0xF4,0xF4,0xF2,0xF3,0xF5,0xF5,0xF7,0xF7, + 0xF8,0xF8,0xF9,0xFA,0xFA,0xFB,0xFB,0xFB,0xFB,0xFC,0xFD,0xFC,0xFC,0xFD,0x01,0xFE, + 0xF6,0xFB,0x01,0xF9,0xE8,0xDB,0xE1,0xFE,0x16,0x18,0x1A,0x24,0x26,0x16,0xFD,0xEA, + 0xDF,0xE0,0xE8,0x04,0x2C,0x3D,0x3A,0x39,0x30,0x0C,0xE6,0xD2,0xCA,0xC8,0xD6,0xEC, + 0xF8,0x05,0x0A,0x02,0xF6,0xEB,0xEE,0xF9,0xFE,0xF6,0xEB,0xE4,0xDF,0xDE,0xDC,0xD7, + 0xD2,0xCF,0xD3,0xDE,0xF0,0x11,0x2F,0x3A,0x3A,0x39,0x3B,0x3B,0x3A,0x3B,0x38,0x38, + 0x34,0x16,0xEF,0xD0,0xC5,0xCC,0xE7,0x08,0x19,0x15,0xFF,0xED,0xDD,0xCF,0xC9,0xC8, + 0xC8,0xC9,0xC7,0xCB,0xDD,0xED,0xF4,0xFE,0x10,0x26,0x37,0x3B,0x32,0x1F,0x0F,0x04, + 0x05,0x1F,0x38,0x3A,0x3A,0x36,0x16,0xED,0xCD,0xC7,0xC9,0xCB,0xEA,0x17,0x34,0x3B, + 0x2D,0x0C,0xF3,0xE8,0xD1,0xC6,0xC8,0xC7,0xC9,0xC6,0xDE,0x13,0x27,0x1F,0x1C,0x25, + 0x32,0x36,0x23,0x11,0x08,0xF0,0xDC,0xD8,0xD6,0xD3,0xD4,0xE5,0x0F,0x36,0x39,0x36, + 0x35,0x31,0x2D,0x16,0xFE,0xEC,0xDF,0xE4,0xFC,0x28,0x3B,0x38,0x37,0x38,0x2E,0x0C, + 0xE4,0xC9,0xC4,0xC9,0xDD,0x01,0x14,0x11,0x0D,0x0E,0x0F,0x05,0xE6,0xCA,0xC9,0xCF, + 0xD5,0xE6,0xFC,0x03,0xF2,0xE5,0xEF,0xF7,0xEE,0xE4,0xEB,0x0A,0x2D,0x3A,0x39,0x2F, + 0x18,0x0B,0x0C,0x03,0xF3,0xF4,0x06,0x1C,0x2C,0x29,0x12,0x02,0xF8,0xF2,0xED,0xEA, + 0xEA,0xEB,0xEF,0xF2,0xF2,0xE9,0xDA,0xE4,0xF3,0xF2,0xFA,0x10,0x28,0x2D,0x19,0x0D, + 0x11,0x0D,0xFC,0xE8,0xDB,0xDE,0xF2,0x05,0x12,0x29,0x36,0x37,0x34,0x1B,0xF3,0xDF, + 0xE0,0xEB,0x00,0x1A,0x20,0x14,0x09,0xFB,0xDC,0xC7,0xC5,0xC8,0xE2,0x03,0x11,0x09, + 0xF4,0xDE,0xD0,0xD6,0xD6,0xCB,0xC8,0xCB,0xDC,0xFC,0x19,0x28,0x2A,0x22,0x23,0x2D, + 0x36,0x37,0x31,0x1E,0x04,0xEE,0xD3,0xC6,0xC9,0xC8,0xCC,0xE1,0x0A,0x2E,0x37,0x34, + 0x2E,0x2E,0x35,0x2D,0x10,0xF1,0xDA,0xD0,0xD8,0xF3,0x1F,0x36,0x36,0x31,0x20,0x0B, + 0xF4,0xE3,0xDE,0xF2,0x15,0x2F,0x38,0x31,0x11,0xEA,0xDA,0xDD,0xEA,0xF3,0xF4,0xE4, + 0xCA,0xC5,0xC8,0xC7,0xC8,0xC7,0xD3,0xE3,0xF1,0x0F,0x28,0x32,0x30,0x2C,0x35,0x37, + 0x36,0x36,0x35,0x36,0x1B,0xEE,0xD1,0xC7,0xDE,0xFA,0x07,0x16,0x18,0x04,0xE8,0xCE, + 0xC8,0xD2,0xDC,0xEA,0x05,0x15,0x19,0x20,0x26,0x25,0x1D,0x10,0xFF,0xDE,0xCA,0xC8, + 0xC9,0xC8,0xCD,0xF3,0x0C,0x04,0xFC,0x06,0x1B,0x20,0x16,0x0F,0x1E,0x32,0x36,0x34, + 0x37,0x2F,0x1D,0x12,0x01,0xEF,0xE1,0xD9,0xE5,0xF9,0xFE,0xFD,0x01,0x0A,0x10,0x06, + 0xF7,0xE5,0xE2,0xEE,0xED,0xE2,0xD7,0xD7,0xEC,0x00,0x0D,0x21,0x2F,0x34,0x31,0x26, + 0x12,0x04,0x01,0xFE,0x0C,0x29,0x35,0x33,0x35,0x2C,0x01,0xDE,0xD2,0xC6,0xC9,0xDB, + 0xE9,0xEF,0xF9,0xF2,0xD8,0xC8,0xC7,0xD3,0xDF,0xED,0xF9,0xF6,0xF6,0xF6,0xED,0xE7, + 0xD8,0xCC,0xD2,0xD5,0xDF,0xF9,0x19,0x2A,0x2A,0x29,0x29,0x20,0x04,0xEF,0xE7,0xE8, + 0xFE,0x16,0x29,0x2F,0x20,0x0E,0x06,0x03,0xF8,0xE1,0xDC,0xE9,0xF2,0xFE,0xFE,0xFA, + 0x00,0x09,0x16,0x1B,0x15,0x0C,0x0F,0x1E,0x2D,0x37,0x35,0x34,0x34,0x34,0x30,0x19, + 0x07,0xF7,0xE5,0xE2,0xDB,0xCB,0xC6,0xD1,0xDB,0xD6,0xCC,0xC7,0xD5,0xEA,0xF7,0x07, + 0x14,0x23,0x32,0x2F,0x29,0x23,0x12,0xFF,0xEA,0xD2,0xC9,0xD0,0xD7,0xE2,0xFA,0x18, + 0x2E,0x2E,0x1B,0x03,0xEE,0xEA,0xF2,0xFB,0x00,0xF2,0xD4,0xC6,0xC7,0xC7,0xC9,0xC9, + 0xD6,0xF5,0x11,0x24,0x33,0x35,0x35,0x32,0x20,0x12,0x08,0x08,0x12,0x14,0x0B,0xFD, + 0xED,0xE6,0xDB,0xCD,0xC9,0xD3,0xF4,0x10,0x1F,0x22,0x15,0x0D,0x0A,0x0A,0x17,0x18, + 0x05,0xED,0xDB,0xD6,0xE7,0x05,0x14,0x12,0x13,0x18,0x14,0x0C,0xFC,0xE9,0xE4,0xDF, + 0xDD,0xEC,0xFD,0x04,0x02,0xFE,0xF8,0xF4,0xFB,0xFC,0xEE,0xDB,0xCC,0xC8,0xCA,0xE0, + 0x09,0x21,0x22,0x23,0x2C,0x28,0x14,0x0B,0x11,0x1A,0x21,0x1A,0x00,0xDA,0xC5,0xC7, + 0xC7,0xCB,0xEA,0x0B,0x14,0x1D,0x21,0x16,0x09,0xFE,0xFF,0xFF,0xF2,0xEA,0xE7,0xE1, + 0xDC,0xE8,0x04,0x1A,0x24,0x23,0x1E,0x14,0x03,0xF0,0xE8,0xF5,0x13,0x2D,0x2F,0x27, + 0x13,0xF9,0xF0,0xE8,0xDE,0xDD,0xF1,0x11,0x29,0x36,0x2C,0x13,0xFF,0xF6,0xE9,0xD1, + 0xC6,0xC9,0xC7,0xCF,0xF7,0x1B,0x22,0x1C,0x18,0x18,0x16,0x12,0x0B,0x02,0xF6,0xDB, + 0xC8,0xC7,0xC8,0xC9,0xCE,0xE4,0xFA,0x1B,0x34,0x36,0x34,0x2F,0x32,0x37,0x32,0x27, + 0x1F,0x12,0x08,0x09,0x03,0x01,0x11,0x22,0x23,0x16,0x03,0xE8,0xD8,0xD3,0xCD,0xD3, + 0xDB,0xDE,0xE8,0xEE,0xF1,0xF6,0xFC,0x02,0x05,0x0C,0x18,0x1B,0x0B,0xF0,0xD5,0xCB, + 0xD9,0xF6,0x08,0x09,0x06,0x01,0xFF,0xF3,0xE4,0xDC,0xDD,0xEC,0xFE,0x15,0x28,0x28, + 0x16,0x07,0x06,0x00,0xEE,0xE7,0xF0,0xF6,0xFD,0x05,0x04,0x01,0x05,0x0C,0x07,0xF4, + 0xDA,0xCA,0xD3,0xEA,0x02,0x13,0x17,0x14,0x0B,0x0C,0x18,0x1C,0x10,0x01,0xF9,0xF2, + 0xED,0xF0,0x02,0x13,0x11,0x03,0xF7,0xF6,0xF7,0xF3,0xF1,0xF8,0x0B,0x21,0x27,0x22, + 0x20,0x1E,0x1F,0x19,0x0B,0x00,0x00,0x07,0x0D,0x20,0x2B,0x2A,0x24,0x1C,0x10,0x01, + 0xFB,0xF9,0xF5,0xF4,0xE5,0xCC,0xC7,0xC8,0xC7,0xC7,0xC8,0xC7,0xCD,0xE7,0xFF,0x14, + 0x21,0x26,0x2D,0x2C,0x2A,0x2C,0x27,0x1D,0x0A,0xEC,0xD1,0xCA,0xCB,0xCC,0xDD,0xFC, + 0x1A,0x29,0x26,0x15,0x00,0xF9,0x01,0x06,0x03,0xF9,0xE6,0xD9,0xD4,0xD7,0xD9,0xDC, + 0xEA,0x01,0x19,0x25,0x2F,0x2E,0x23,0x19,0x08,0xF6,0xEA,0xEB,0xF5,0xFA,0xFE,0x04, + 0x05,0x04,0xF9,0xEC,0xEC,0xF7,0x0C,0x18,0x18,0x12,0x05,0x03,0x08,0x13,0x21,0x1E, + 0x0C,0xF5,0xE1,0xD6,0xE0,0xFA,0x0B,0x10,0x18,0x20,0x1A,0x11,0x04,0xF3,0xEC,0xE3, + 0xDC,0xE7,0xF3,0xF9,0xFC,0x00,0x01,0xFD,0x02,0x03,0xF4,0xE3,0xD5,0xCF,0xD5,0xEB, + 0x0C,0x1E,0x1D,0x1C,0x25,0x22,0x12,0x0C,0x13,0x1F,0x25,0x1F,0x08,0xE2,0xCC,0xC9, + 0xCA,0xD5,0xF1,0x0B,0x13,0x1B,0x1C,0x12,0x06,0xFD,0xFF,0x00,0xF4,0xEB,0xE9,0xE4, + 0xDE,0xE9,0x04,0x19,0x24,0x22,0x1D,0x14,0x02,0xEF,0xE8,0xF5,0x12,0x2C,0x2E,0x26, + 0x12,0xF9,0xEF,0xE8,0xDE,0xDE,0xF1,0x10,0x28,0x35,0x2B,0x11,0xFF,0xF7,0xE9,0xD3, + 0xC9,0xCC,0xCB,0xD4,0xFB,0x1D,0x24,0x1E,0x19,0x1A,0x18,0x15,0x0E,0x04,0xF8,0xDD, + 0xCB,0xC9,0xCA,0xCA,0xD0,0xE5,0xFA,0x1C,0x34,0x37,0x34,0x30,0x33,0x36,0x31,0x26, + 0x1E,0x11,0x07,0x08,0x01,0x01,0x11,0x24,0x26,0x17,0x02,0xE8,0xD9,0xD4,0xCC,0xD2, + 0xDA,0xDC,0xE7,0xEE,0xEF,0xF5,0xFC,0x03,0x06,0x0D,0x18,0x1A,0x07,0xE6,0xCF,0xCA, + 0xD3,0xF4,0x09,0x09,0x07,0xFB,0xF0,0xE2,0xD2,0xCA,0xD5,0xEB,0x04,0x23,0x35,0x33, + 0x1E,0x0C,0x0A,0x03,0xF3,0xF0,0xFB,0xFF,0x06,0x0C,0x07,0x06,0x0B,0x13,0x10,0xFC, + 0xDC,0xCA,0xD7,0xF3,0x10,0x1D,0x17,0x0A,0xFF,0x02,0x0F,0x1A,0x15,0x07,0x03,0xF9, + 0xE6,0xE1,0xEF,0x04,0x0A,0xFD,0xEF,0xEF,0xF5,0xF8,0xF9,0xFD,0x16,0x32,0x34,0x33, + 0x30,0x28,0x22,0x15,0x02,0xF4,0xF6,0xF8,0xF7,0x06,0x11,0x12,0x0B,0xFE,0xF3,0xEA, + 0xEE,0xF8,0xFE,0xFF,0xEA,0xCC,0xC7,0xC8,0xC8,0xCA,0xCB,0xCB,0xCB,0xE6,0x08,0x20, + 0x2C,0x28,0x28,0x25,0x2A,0x34,0x32,0x33,0x27,0x02,0xDA,0xC7,0xC9,0xCB,0xCA,0xD8, + 0xFB,0x1F,0x30,0x28,0x11,0x08,0x12,0x15,0x09,0x03,0xFF,0xF5,0xF9,0x08,0x0D,0x04, + 0x03,0x11,0x1F,0x24,0x1F,0x07,0xF2,0xE6,0xD1,0xC6,0xC8,0xC8,0xC9,0xC8,0xDF,0x11, + 0x30,0x34,0x32,0x2E,0x32,0x33,0x33,0x28,0x07,0xE9,0xDC,0xE5,0x03,0x25,0x34,0x2F, + 0x1E,0x03,0xE2,0xCC,0xC8,0xCD,0xDF,0xFB,0x18,0x2A,0x24,0x18,0x14,0x10,0x04,0xE7, + 0xCD,0xC9,0xC9,0xC8,0xD5,0xF5,0x14,0x1B,0x11,0x0B,0x01,0xF4,0xEB,0xE8,0xF2,0x03, + 0x03,0xF1,0xDD,0xD4,0xDF,0xF0,0xFB,0x05,0x1A,0x32,0x32,0x33,0x2E,0x1C,0x13,0x0C, + 0x13,0x21,0x22,0x15,0x0C,0xFF,0xE6,0xD5,0xD7,0xE8,0xF7,0xF6,0xE0,0xCC,0xC9,0xCA, + 0xC9,0xCC,0xD2,0xDE,0xE9,0xF8,0x18,0x33,0x35,0x33,0x28,0x1E,0x19,0x1C,0x23,0x16, + 0x01,0xF5,0xE7,0xDF,0xE7,0xF5,0xF2,0xE3,0xD5,0xCB,0xD4,0xE8,0xFC,0x0C,0x0C,0x03, + 0x03,0x13,0x29,0x33,0x28,0x10,0xF6,0xD9,0xCB,0xCD,0xCD,0xD5,0xE8,0xF3,0xF9,0x0A, + 0x23,0x33,0x28,0x13,0x05,0xFC,0x01,0x0F,0x14,0x06,0xED,0xD9,0xD8,0xEF,0x0F,0x21, + 0x18,0x0C,0x05,0xF9,0xEF,0xF4,0x0B,0x19,0x15,0x14,0x0D,0x05,0x06,0x0B,0x10,0x12, + 0x13,0x0B,0xFB,0xF2,0xF5,0xFA,0xF6,0xF6,0x02,0x09,0x0B,0x1A,0x2D,0x33,0x2D,0x10, + 0xF0,0xDD,0xCB,0xC9,0xCD,0xCF,0xDB,0xF4,0x0F,0x21,0x26,0x22,0x13,0x06,0xF5,0xD6, + 0xC9,0xCC,0xCC,0xCC,0xCB,0xCD,0xDC,0xF1,0xFB,0x09,0x1F,0x2C,0x2F,0x29,0x2B,0x34, + 0x33,0x33,0x33,0x31,0x17,0xFD,0xFB,0xF9,0xF7,0xFC,0x02,0xFB,0xEB,0xD8,0xC9,0xCA, + 0xC9,0xD4,0xEB,0xF1,0xEC,0xF1,0x01,0x13,0x18,0x0B,0x01,0xF9,0xEB,0xE9,0xEA,0xE6, + 0xEB,0xFA,0x07,0x0C,0x06,0xF7,0xF1,0xF6,0xFE,0x03,0x05,0x05,0xF7,0xE7,0xE3,0xE0, + 0xE1,0xE2,0xEB,0xFD,0x03,0x00,0xF9,0x04,0x1B,0x25,0x1F,0x18,0x1D,0x1F,0x1A,0x18, + 0x29,0x34,0x33,0x31,0x1B,0xFB,0xE6,0xDE,0xDD,0xEC,0x0B,0x2A,0x34,0x2A,0x16,0xF7, + 0xE4,0xDC,0xDC,0xE9,0xF5,0xF0,0xE6,0xD5,0xC9,0xCA,0xCD,0xCC,0xCF,0xE5,0xFA,0x04, + 0x03,0xFA,0xED,0xEC,0xF8,0x06,0x12,0x18,0x1A,0x18,0x12,0x02,0xF1,0xE4,0xDD,0xE2, + 0xF3,0x17,0x32,0x35,0x34,0x22,0x06,0xF5,0xEF,0xF6,0xF4,0xE9,0xE8,0xE7,0xE6,0xF3, + 0x0B,0x1D,0x18,0x08,0x00,0xF6,0xEB,0xEA,0xFE,0x15,0x20,0x2D,0x35,0x2F,0x21,0x17, + 0x13,0x14,0x11,0xFF,0xEC,0xDA,0xCB,0xCD,0xCC,0xD0,0xF3,0x0F,0x14,0x0F,0x0B,0x14, + 0x1E,0x1D,0x17,0x14,0x12,0x16,0x2A,0x32,0x31,0x31,0x32,0x23,0xFE,0xDB,0xC9,0xD1, + 0xE6,0xFC,0x08,0xFF,0xE2,0xCC,0xCB,0xCA,0xCC,0xCE,0xD5,0xE8,0xF3,0xFB,0x06,0x11, + 0x13,0x05,0xF7,0xF0,0xE1,0xD1,0xD3,0xE6,0xFD,0x10,0x19,0x19,0x0F,0xF9,0xED,0xEE, + 0xF5,0xFD,0x02,0x02,0xF8,0xE2,0xD3,0xDB,0xF0,0xFE,0xF9,0xFA,0x0A,0x12,0x0D,0x06, + 0x0C,0x20,0x2C,0x25,0x17,0x0D,0x07,0x07,0x0A,0x12,0x2B,0x36,0x32,0x32,0x2C,0x1B, + 0x05,0xF0,0xE1,0xE3,0xF5,0x0F,0x23,0x28,0x18,0xF4,0xD6,0xCC,0xCD,0xCF,0xCE,0xCF, + 0xCE,0xCF,0xCD,0xD6,0xE5,0xE9,0xF2,0xFB,0x07,0x19,0x26,0x29,0x17,0xFB,0xEA,0xDE, + 0xD9,0xE1,0xE8,0xEA,0xF2,0x04,0x0D,0x17,0x22,0x28,0x2E,0x25,0x16,0x13,0x20,0x30, + 0x34,0x2F,0x17,0xF4,0xDE,0xDD,0xF4,0x0D,0x13,0x13,0x15,0x09,0xF5,0xF1,0xFA,0x03, + 0x01,0xED,0xDD,0xD5,0xDB,0xF0,0x01,0x0A,0x13,0x27,0x34,0x32,0x33,0x32,0x33,0x29, + 0x07,0xE5,0xD1,0xCE,0xD2,0xE2,0xFA,0x15,0x2C,0x34,0x26,0x08,0xF7,0xF7,0xFB,0xF7, + 0xF0,0xE4,0xD5,0xCF,0xDD,0xF9,0x0E,0x0E,0x05,0x05,0x08,0x06,0x03,0xFF,0x05,0x11, + 0x17,0x1A,0x0E,0xF3,0xE3,0xE3,0xEF,0xFE,0x07,0x0A,0x07,0xF7,0xE7,0xDA,0xD7,0xE1, + 0xE7,0xEC,0xEC,0xE6,0xE3,0xE8,0xFA,0x09,0x10,0x13,0x18,0x2A,0x33,0x32,0x32,0x2C, + 0x22,0x0D,0xFA,0xF1,0xF3,0xF9,0xFD,0x00,0x02,0x01,0xFC,0xEF,0xEC,0xF6,0x03,0x08, + 0xFF,0xE6,0xD2,0xD0,0xD2,0xDE,0xED,0xF7,0xF7,0xF0,0xF7,0x00,0xFE,0xF2,0xED,0xF8, + 0x0A,0x19,0x23,0x1C,0x09,0xFF,0xF5,0xEB,0xEC,0xEB,0xE8,0xE7,0xE0,0xDC,0xE6,0xFB, + 0x0C,0x0C,0x09,0x0E,0x13,0x11,0x0F,0x1B,0x2B,0x31,0x30,0x24,0x13,0x07,0x0A,0x13, + 0x16,0x19,0x19,0x12,0x0D,0x05,0xF7,0xE4,0xDC,0xE0,0xE3,0xEC,0xFD,0x09,0x07,0xFE, + 0xF5,0xF8,0x01,0x0A,0x0E,0x0A,0x02,0x03,0x06,0x04,0x0B,0x19,0x21,0x1B,0x10,0xFE, + 0xEA,0xDA,0xD2,0xD3,0xDD,0xF7,0x13,0x23,0x21,0x16,0x0B,0x05,0x00,0xF2,0xE2,0xD6, + 0xD1,0xDC,0xF7,0x11,0x24,0x23,0x1A,0x12,0x05,0xFA,0xF9,0xFC,0xFF,0xFE,0xF3,0xDD, + 0xD4,0xD5,0xD7,0xE3,0xEF,0xF9,0x0E,0x23,0x2C,0x2E,0x2A,0x29,0x27,0x1C,0x18,0x11, + 0x01,0xF6,0xF8,0xFC,0xFD,0x04,0x0B,0x0F,0x10,0x0B,0xFC,0xEF,0xE8,0xE0,0xDB,0xD7, + 0xD3,0xD3,0xD6,0xE8,0x02,0x0F,0x0F,0x0C,0x14,0x1E,0x20,0x1E,0x17,0x10,0x06,0xF8, + 0xF5,0xF8,0xFE,0x03,0x02,0xFC,0xFB,0xFF,0xFF,0xFB,0xFF,0x0D,0x1A,0x1A,0x10,0x02, + 0xF2,0xEB,0xF1,0xFA,0x02,0x00,0xF4,0xE9,0xDB,0xD5,0xD6,0xD5,0xD9,0xE7,0xF8,0x04, + 0x0B,0x0A,0x08,0x09,0x0A,0x0D,0x0F,0x15,0x1B,0x18,0x10,0x05,0xFC,0xF7,0xEF,0xEB, + 0xE7,0xEC,0xF6,0xFF,0x0A,0x12,0x1C,0x22,0x1D,0x1A,0x19,0x12,0x03,0xF2,0xE5,0xDF, + 0xE0,0xEC,0xF9,0xFF,0x05,0x04,0x03,0x04,0x01,0x01,0x00,0x04,0x12,0x20,0x29,0x27, + 0x18,0x04,0xF7,0xEB,0xE7,0xEA,0xED,0xF3,0xFB,0xFD,0xF5,0xF1,0xF6,0xFE,0xFE,0xF8, + 0xF5,0xF3,0xF3,0xF3,0xFC,0x09,0x0B,0x05,0xFF,0x02,0x06,0x09,0x08,0x08,0x0F,0x14, + 0x13,0x10,0x0E,0x05,0xF9,0xF3,0xEF,0xF3,0xFB,0x02,0x06,0x04,0x01,0xF9,0xF3,0xF5, + 0xF8,0xFA,0xF4,0xEB,0xE6,0xE8,0xF6,0x05,0x0E,0x0E,0x0E,0x13,0x14,0x13,0x0E,0x06, + 0x00,0xF4,0xE8,0xE5,0xEA,0xF3,0xF9,0xFC,0xFF,0x04,0x07,0x00,0xFD,0x01,0x04,0x04, + 0xF8,0xE6,0xD9,0xD6,0xDB,0xE8,0xF7,0x03,0x08,0x06,0x07,0x07,0x01,0xFB,0xF6,0xFD, + 0x0A,0x14,0x17,0x0F,0x03,0xFB,0xF7,0xF4,0xF5,0xF5,0xF4,0xF2,0xEB,0xE5,0xE8,0xF5, + 0x02,0x05,0x05,0x09,0x0C,0x0C,0x0D,0x14,0x1C,0x21,0x21,0x18,0x0B,0x01,0x02,0x06, + 0x07,0x0B,0x0B,0x08,0x07,0x04,0xFC,0xF0,0xE8,0xE7,0xE8,0xED,0xF8,0x00,0xFD,0xF6, + 0xF2,0xF6,0xFF,0x07,0x0A,0x06,0x02,0x02,0x03,0x01,0x05,0x10,0x14,0x0F,0x06,0xFA, + 0xEB,0xE0,0xDC,0xDE,0xE8,0xFB,0x11,0x1D,0x1C,0x14,0x0B,0x07,0x02,0xF7,0xE9,0xDF, + 0xDD,0xE5,0xF9,0x0F,0x1D,0x1C,0x14,0x0D,0x02,0xF9,0xF9,0xFB,0xFD,0xFD,0xF4,0xE3, + 0xDA,0xDB,0xDD,0xE7,0xF2,0xFB,0x0C,0x1D,0x23,0x25,0x23,0x21,0x1E,0x17,0x14,0x0E, + 0x01,0xF8,0xFA,0xFD,0xFF,0x04,0x0A,0x0E,0x0E,0x09,0xFD,0xF2,0xEC,0xE6,0xE2,0xDE, + 0xDA,0xD9,0xDD,0xEB,0x01,0x0D,0x0C,0x0A,0x10,0x18,0x1A,0x18,0x12,0x0D,0x03,0xF8, + 0xF5,0xF8,0xFE,0x03,0x02,0xFC,0xFC,0xFE,0xFE,0xFB,0xFE,0x0A,0x14,0x14,0x0D,0x01, + 0xF2,0xEE,0xF3,0xFA,0x00,0xFF,0xF5,0xEA,0xDE,0xDB,0xDC,0xDB,0xDD,0xEA,0xF9,0x04, + 0x0A,0x08,0x07,0x08,0x09,0x0C,0x0D,0x11,0x17,0x14,0x0C,0x02,0xFA,0xF5,0xED,0xE6, + 0xE3,0xE7,0xF2,0xFF,0x0B,0x14,0x19,0x1D,0x19,0x15,0x15,0x10,0x04,0xF3,0xE6,0xDE, + 0xE0,0xEF,0xFF,0x07,0x0C,0x09,0x04,0x02,0xFE,0xFA,0xF6,0xFB,0x07,0x15,0x20,0x22, + 0x18,0x0A,0x01,0xF7,0xF0,0xEE,0xEB,0xEC,0xF0,0xEE,0xE9,0xEC,0xF6,0x00,0xFF,0xFA, + 0xF9,0xFA,0xFC,0x00,0x07,0x0D,0x0A,0x01,0xFD,0xFE,0x02,0x08,0x08,0x09,0x0F,0x11, + 0x0D,0x09,0x0B,0x09,0x01,0xF8,0xF0,0xEE,0xF4,0xFD,0x05,0x09,0x0C,0x09,0x02,0x02, + 0x04,0x01,0xF8,0xEF,0xE9,0xEA,0xF4,0x02,0x0B,0x09,0x08,0x04,0xFC,0xF9,0xF4,0xF0, + 0xEB,0xE4,0xDF,0xDF,0xE8,0xF2,0xF8,0xFC,0x01,0x09,0x12,0x11,0x0E,0x0D,0x0B,0x03, + 0xF6,0xEA,0xE3,0xE2,0xE9,0xF5,0x02,0x10,0x19,0x1C,0x19,0x0F,0x07,0x02,0x00,0x04, + 0x0B,0x0D,0x08,0x01,0xF7,0xF2,0xF6,0xFD,0x01,0x01,0x00,0xFD,0xF5,0xEC,0xE7,0xEC, + 0xF3,0xF9,0x01,0x05,0x07,0x0A,0x0C,0x0E,0x0E,0x10,0x11,0x0B,0x03,0xFE,0xF9,0xF3, + 0xF2,0xF6,0xF8,0xFC,0x03,0x0C,0x12,0x11,0x05,0xFB,0xF7,0xF6,0xF4,0xF1,0xEC,0xE9, + 0xEC,0xF6,0x04,0x0B,0x0A,0x06,0x04,0x02,0xFC,0xF8,0xF9,0xFA,0xF5,0xEC,0xE6,0xE5, + 0xE7,0xED,0xF6,0xFE,0x08,0x12,0x18,0x18,0x18,0x1D,0x1F,0x19,0x13,0x0D,0x06,0x01, + 0x04,0x04,0x04,0x04,0x00,0xFD,0xFC,0xF7,0xEE,0xE7,0xE7,0xEA,0xF0,0xF5,0xFA,0xFA, + 0xFA,0xFE,0x06,0x0A,0x07,0x07,0x06,0x03,0xFE,0xF8,0xF4,0xF1,0xEF,0xEC,0xEC,0xEF, + 0xF7,0x01,0x06,0x09,0x0E,0x16,0x19,0x15,0x12,0x12,0x0E,0x07,0x02,0xFF,0xFB,0xFD, + 0x02,0x09,0x0C,0x0A,0x02,0xFC,0xF8,0xF0,0xE8,0xE6,0xE9,0xEF,0xF6,0xFB,0x00,0x01, + 0x01,0x03,0x05,0x07,0x09,0x0C,0x0B,0x05,0x01,0xFF,0x01,0x03,0x03,0xFE,0xF8,0xF4, + 0xF1,0xF5,0xFB,0x03,0x0A,0x0B,0x07,0x04,0x06,0x0C,0x0D,0x08,0xFE,0xF6,0xF0,0xF0, + 0xF8,0x01,0x06,0x05,0x05,0x02,0xFA,0xF5,0xF6,0xF9,0xF9,0xF8,0xF6,0xEF,0xEC,0xF0, + 0xF7,0xFC,0xFD,0x00,0x05,0x0A,0x0E,0x0F,0x0C,0x07,0x02,0xFA,0xF3,0xEC,0xE7,0xE7, + 0xEB,0xF7,0x05,0x0D,0x0E,0x0C,0x0D,0x0F,0x0F,0x09,0x04,0x00,0x00,0x04,0x08,0x09, + 0x06,0x06,0x06,0x07,0x05,0xFF,0xF9,0xF8,0xF9,0xF6,0xF5,0xF7,0xF6,0xF7,0xF6,0xF7, + 0xF8,0xF9,0xFC,0x00,0x03,0x06,0x0A,0x0D,0x0B,0x0B,0x0C,0x0C,0x0B,0x08,0x02,0xFA, + 0xF3,0xED,0xEC,0xF2,0xFA,0x00,0x01,0xFF,0xFB,0xFB,0xFC,0xFD,0xFC,0xFB,0xFA,0xFA, + 0xF8,0xF9,0xFD,0x03,0x04,0x01,0xFF,0xFF,0x03,0x07,0x07,0x05,0x06,0x06,0x03,0x00, + 0xFD,0xFA,0xF8,0xF6,0xF6,0xFA,0x01,0x0A,0x0B,0x06,0xFE,0xF9,0xF9,0xFA,0xFE,0x01, + 0x01,0xFF,0xFD,0xFA,0xF8,0xF9,0xFA,0xFC,0xFE,0xFF,0xFF,0xFF,0xFD,0xFA,0xF8,0xF9, + 0x00,0x06,0x0A,0x09,0x06,0x02,0xFF,0xFB,0xF7,0xF6,0xF6,0xF7,0xFE,0x07,0x0F,0x14, + 0x11,0x0D,0x09,0x03,0xFF,0xFE,0xFD,0xFC,0xFA,0xF6,0xF2,0xF2,0xF7,0xFD,0x00,0xFF, + 0xFD,0xFF,0x02,0x05,0x09,0x09,0x08,0x0A,0x0E,0x10,0x0F,0x0A,0x03,0xFF,0xFB,0xF5, + 0xF3,0xF4,0xF6,0xFB,0xFC,0xFB,0xFC,0x00,0x02,0x02,0xFF,0xFD,0xFC,0xFD,0xFE,0xFE, + 0xFF,0xFD,0xFB,0xFC,0x01,0x06,0x08,0x06,0x03,0x00,0xFC,0xFA,0xFA,0xFD,0x03,0x03, + 0x02,0xFF,0xFB,0xF6,0xF5,0xF7,0xF9,0xFE,0x02,0x02,0x01,0xFF,0xFE,0xFD,0xFC,0xFA, + 0xF8,0xF7,0xF9,0xFE,0x04,0x07,0x07,0x06,0x05,0x03,0xFF,0xFD,0xFA,0xF7,0xF8,0xF7, + 0xF5,0xF5,0xF6,0xF9,0xFB,0xFA,0xFB,0xFC,0xFF,0x02,0x05,0x07,0x06,0x04,0x04,0x06, + 0x09,0x0C,0x0A,0x09,0x07,0x02,0xFF,0xFD,0xFC,0xFD,0xFE,0xFE,0xFC,0xFD,0xFC,0xFB, + 0xFA,0xFC,0x01,0x04,0x04,0x03,0x04,0x03,0x04,0x04,0x03,0x03,0x01,0x00,0xFF,0xFD, + 0xFA,0xFA,0xFD,0x00,0x02,0x02,0x00,0xFE,0xFC,0xFA,0xF9,0xF8,0xF7,0xF6,0xF9,0xFA, + 0xFC,0x00,0x03,0x05,0x04,0x04,0x05,0x04,0x03,0x01,0x00,0x01,0x04,0x08,0x0A,0x0B, + 0x0B,0x0A,0x05,0xFF,0xF9,0xF6,0xF8,0xFB,0xFF,0x01,0x01,0xFE,0xF9,0xF8,0xF8,0xF7, + 0xF5,0xF5,0xF8,0xFA,0xFF,0x02,0x04,0x04,0x02,0x00,0xFF,0xFE,0xFD,0xFD,0xFD,0xFC, + 0xFB,0xFA,0xF9,0xFA,0xF9,0xFB,0xFD,0x01,0x04,0x05,0x04,0x02,0x01,0x00,0x01,0x02, + 0x04,0x03,0x00,0xFD,0xFC,0xFB,0xFD,0x00,0x01,0x03,0x04,0x03,0x03,0x02,0x01,0xFF, + 0xFD,0xFD,0xFE,0x02,0x05,0x06,0x06,0x04,0xFF,0xFB,0xF7,0xF4,0xF3,0xF3,0xF6,0xF8, + 0xFB,0xFF,0x02,0x02,0x01,0xFF,0x00,0x00,0xFF,0xFD,0xFA,0xF9,0xF7,0xF5,0xF6,0xF7, + 0xF9,0xFC,0xFF,0x01,0x04,0x07,0x07,0x08,0x07,0x08,0x09,0x09,0x08,0x08,0x05,0x01, + 0xFF,0xFD,0xFB,0xFC,0xFF,0x00,0x01,0x01,0xFD,0xFB,0xFA,0xFA,0xF9,0xF7,0xF6,0xF7, + 0xF8,0xFB,0x00,0x03,0x03,0x03,0x02,0x04,0x06,0x07,0x04,0x01,0xFF,0xFB,0xF9,0xFA, + 0xFB,0xFC,0xFD,0xFE,0xFE,0xFF,0x00,0x01,0x01,0x00,0x02,0x04,0x05,0x05,0x04,0x02, + 0x02,0x01,0xFF,0xFE,0xFC,0xFB,0xFA,0xFA,0xFB,0xFB,0xFD,0xFD,0xFC,0xFC,0xFD,0xFE, + 0xFD,0xFE,0xFE,0xFF,0x00,0x01,0x03,0x04,0x04,0x05,0x04,0x03,0x01,0xFF,0xFE,0xFF, + 0xFF,0x00,0xFF,0xFE,0xFC,0xFB,0xFC,0xFE,0xFF,0xFF,0xFE,0xFD,0xFC,0xFB,0xFC,0xFE, + 0xFF,0xFD,0xFD,0xFE,0xFE,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x00, + 0xFF,0x00,0x01,0x03,0x03,0x03,0x01,0xFF,0xFE,0xFD,0xFE,0xFF,0x00,0x01,0x01,0x00, + 0xFF,0xFF,0xFE,0xFF,0x00,0xFE,0xFC,0xFA,0xF9,0xFA,0xFB,0xFC,0xFE,0xFF,0x01,0x01, + 0x02,0x04,0x03,0x02,0x00,0xFF,0xFD,0xFD,0xFC,0xFC,0xFB,0xFC,0xFE,0xFF,0x00,0x01, + 0x01,0x02,0x02,0x01,0xFF,0x00,0x02,0x02,0x03,0x02,0x01,0xFF,0xFF,0xFE,0xFF,0xFE, + 0xFF,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFE,0xFD,0xFE,0xFE,0xFD,0xFE,0xFF,0xFF,0x00, + 0x01,0x01,0x00,0x01,0x00,0xFF,0xFE,0xFD,0xFD,0xFE,0xFE,0xFD,0xFE,0xFF,0x00,0x01, + 0x00,0x01,0x00,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFE,0xFE,0xFE, + 0xFF,0xFE,0xFE,0xFD,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00, + 0x00,0xFF,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xFF,0xFE,0xFE,0xFF, + 0xFE,0xFF,0xFF,0xFF,0xFE,0xFE,0xFF,0x00,0x01,0x00,0xFF,0xFF,0xFE,0xFF,0xFF,0x00, + 0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0x00,0xFF,0xFE,0xFD,0xFC,0xFD,0xFD,0xFC,0xFD, + 0xFF,0x00,0x01,0x01,0x00,0x00,0xFF,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFC,0xFC,0xFD, + 0xFF,0xFF,0x00,0x01,0x02,0x02,0x03,0x02,0x02,0x01,0x02,0x01,0x02,0x02,0x01,0x00, + 0xFF,0xFE,0xFD,0xFE,0xFE,0xFF,0x00,0xFF,0xFF,0xFE,0xFD,0xFE,0xFD,0xFD,0xFC,0xFC, + 0xFD,0xFD,0xFF,0x00,0xFF,0x00,0xFF,0x01,0x02,0x02,0x01,0x00,0x00,0xFE,0xFD,0xFD, + 0xFE,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00,0x01,0x02,0x01,0x01,0x00, + 0x00,0xFF,0xFF,0xFE,0xFE,0xFC,0xFD,0xFD,0xFC,0xFD,0xFF,0xFF,0xFE,0xFD,0xFE,0xFF, + 0xFE,0xFF,0xFE,0xFF,0xFF,0x00,0x01,0x02,0x01,0x02,0x02,0x01,0x00,0x00,0xFF,0x00, + 0xFF,0x00,0xFF,0xFE,0xFE,0xFD,0xFE,0xFE,0xFF,0xFE,0xFF,0xFE,0xFE,0xFD,0xFE,0xFE, + 0xFF,0xFE,0xFD,0xFE,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF, + 0xFF,0x00,0x00,0x01,0x02,0x01,0x00,0xFF,0xFE,0xFE,0xFE,0xFF,0x00,0x00,0x00,0x00, + 0xFF,0xFE,0xFE,0xFF,0x00,0xFF,0xFD,0xFC,0xFB,0xFC,0xFD,0xFE,0xFE,0xFF,0x00,0x00, + 0x01,0x02,0x02,0x01,0xFF,0x00,0xFE,0xFD,0xFD,0xFE,0xFD,0xFE,0xFE,0xFF,0xFF,0x00, + 0x00,0x01,0x00,0xFF,0xFF,0x00,0x00,0x00,0x01,0x00,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE, + 0xFF,0xFF,0x00,0xFF,0x00,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFE,0xFF,0xFF,0x00,0xFF, + 0x00,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFE,0xFD,0xFE,0xFE,0xFE,0xFF,0xFE,0xFF,0x00, + 0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, + 0xFF,0x00,0xFF,0xFE,0xFF,0xFF,0xFE,0xFE,0xFE,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00, + 0xFF,0xFF,0x00,0x00,0x01,0x00,0xFF,0x00,0xFF,0x00,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF, + 0xFE,0xFF,0xFE,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFF,0x00, + 0x00,0xFF,0xFE,0xFF,0xFE,0xFE,0xFF,0xFE,0xFE,0xFF,0x00,0xFF,0x00,0xFF,0x00,0xFF, + 0x00,0xFF,0x00,0x00,0xFF,0xFF,0xFE,0xFE,0xFF,0xFE,0xFD,0xFE,0xFE,0xFF,0x00,0xFF, + 0x00,0xFF,0x00,0xFF,0x00,0x01,0x00,0xFF,0xFF,0xFE,0xFE,0xFF,0x00,0xFF,0x00,0xFF, + 0x00,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0x00,0xFF,0x00,0x00,0xFF,0x00,0xFF,0xFF, + 0xFE,0xFF,0xFE,0xFD,0xFE,0xFD,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0x00,0x00, + 0xFF,0x00,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x00,0xFF,0xFE, + 0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0x00,0xFF,0x00, + 0xFF,0xFE,0xFF,0xFE,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFF +}; +static PROGMEM prog_uchar beat1_snd[588] = { + 0xF9,0xEA,0xDA,0xCC,0xC3,0xC3,0xCB,0xD8,0xE6,0xF4,0x01,0x0E,0x1D,0x28,0x31,0x37, + 0x3B,0x3C,0x3B,0x3C,0x3C,0x3B,0x3B,0x37,0x30,0x2C,0x25,0x1F,0x1A,0x10,0x0A,0x02, + 0xFB,0xF8,0xF2,0xEB,0xE5,0xE1,0xDD,0xDA,0xDB,0xE3,0xEA,0xEA,0xED,0xEA,0xE1,0xD8, + 0xD1,0xC7,0xBE,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC, + 0xBD,0xBC,0xBE,0xC5,0xCE,0xD7,0xDE,0xE6,0xEE,0xF8,0xFD,0x04,0x0D,0x14,0x1E,0x25, + 0x2B,0x30,0x37,0x3C,0x3B,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C, + 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x34,0x2E, + 0x2D,0x28,0x20,0x1C,0x0E,0xFC,0xEB,0xDA,0xD0,0xCC,0xCE,0xD4,0xDC,0xE7,0xEF,0xF6, + 0xFC,0x01,0x05,0x0A,0x0D,0x0D,0x0E,0x0A,0x08,0x06,0x00,0xFC,0xFA,0xF4,0xEE,0xE6, + 0xE0,0xD8,0xD1,0xCC,0xC3,0xBD,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC, + 0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBD, + 0xBC,0xBD,0xBC,0xBC,0xBD,0xBC,0xBD,0xBC,0xC0,0xC9,0xD4,0xE0,0xEC,0xF8,0x01,0x0D, + 0x14,0x1D,0x29,0x32,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x3C,0x3C, + 0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C, + 0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3C,0x38,0x28,0x14,0x02,0xF4,0xED,0xEF,0xF4,0xFA, + 0x00,0x09,0x12,0x1B,0x20,0x24,0x2A,0x2D,0x2E,0x2D,0x2C,0x28,0x25,0x22,0x1C,0x16, + 0x0E,0x06,0xFF,0xF9,0xEF,0xE9,0xE2,0xDA,0xD2,0xCA,0xC6,0xBD,0xBC,0xBD,0xBC,0xBD, + 0xBC,0xBF,0xC1,0xBE,0xBD,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBC,0xBC,0xBC, + 0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBD,0xBD,0xC2,0xCB,0xD7, + 0xE0,0xE8,0xF4,0xFD,0x04,0x0C,0x16,0x1F,0x26,0x2B,0x35,0x3B,0x3B,0x3C,0x3B,0x3C, + 0x3B,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C, + 0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3A,0x35,0x31,0x2B,0x27,0x1C,0x08,0xF9,0xEA,0xDF, + 0xDD,0xDD,0xE5,0xED,0xF4,0xFC,0x04,0x0B,0x13,0x1A,0x1D,0x1F,0x1F,0x1F,0x1E,0x1C, + 0x16,0x10,0x0D,0x05,0xFE,0xFB,0xF4,0xEE,0xE5,0xDC,0xD5,0xCC,0xC8,0xC0,0xBC,0xBD, + 0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBD,0xBE,0xBD,0xBC,0xBC,0xBD,0xBC,0xBC,0xBC,0xBC, + 0xBC,0xBC,0xBC,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBD,0xBC,0xBC,0xBD,0xBC,0xC2, + 0xCE,0xD7,0xE2,0xEC,0xF4,0xFD,0x06,0x12,0x1A,0x22,0x2C,0x35,0x3B,0x3C,0x3B,0x3C, + 0x3B,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3C,0x3C,0x3C, + 0x3C,0x3C,0x3C,0x3C,0x3B,0x3C,0x3C,0x3B,0x3C,0x3B,0x3C,0x3B,0x3B,0x39,0x30,0x22, + 0x0C,0xFD,0xEF,0xE6,0xE7,0xE7,0xF1,0xFA,0xFF,0x0B,0x12,0x1A,0x22,0x25,0x28,0x2B, + 0x2D,0x28,0x23,0x1D,0x19,0x13,0x0C,0x06,0xFF,0xFB,0xF3,0xE9,0xE4,0xDC,0xD3,0xCD, + 0xC7,0xBF,0xBC,0xBD,0xBD,0xBD,0xBE,0xBD,0xBE,0xC1,0xC3,0xC3,0xBE,0xBD,0xBE,0xBD, + 0xBE,0xBE,0xBF,0xBE,0xBF,0xBF,0xC0,0xBF,0xC0,0xC0,0xC1,0xC0,0xC1,0xC2,0xC2,0xC1, + 0xC2,0xC1,0xC5,0xCE,0xD9,0xE4,0xED,0xF7,0x00,0x09,0x13,0x19,0x22,0x2D,0x34,0x3C, + 0x41,0x40,0x40,0x41,0x40,0x3F,0x3F,0x40,0x3F,0x3F,0x3E,0x3F,0x3E,0x3D,0x3E,0x3E, + 0x3D,0x3C,0x3D,0x3D,0x3C,0x3B,0x3C,0x3C,0x3B,0x3A,0x3B,0x3A,0x3B,0x3B,0x39,0x34, + 0x2E,0x29,0x26,0x21,0x1B,0x17,0x13,0x10,0x0A,0x04,0x01,0xFF +}; +static PROGMEM prog_uchar beat2_snd[527] = { + 0xFE,0xF3,0xE4,0xD5,0xCA,0xC7,0xCD,0xD6,0xE4,0xF3,0xFE,0x0C,0x1A,0x24,0x2F,0x36, + 0x3A,0x3E,0x41,0x40,0x3F,0x3D,0x3B,0x38,0x32,0x2C,0x27,0x22,0x1B,0x17,0x0F,0x08, + 0x04,0xFD,0xF8,0xF2,0xEB,0xE6,0xDF,0xDE,0xE2,0xE5,0xEB,0xF0,0xEF,0xEF,0xE9,0xE0, + 0xD9,0xD1,0xC5,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC2,0xC1,0xC2,0xC1,0xC1,0xC2,0xC1, + 0xC2,0xC1,0xC4,0xCB,0xD1,0xD9,0xE3,0xE8,0xF3,0xFD,0x02,0x09,0x13,0x1B,0x24,0x2A, + 0x2F,0x35,0x3B,0x42,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x41,0x42,0x3B,0x37,0x35, + 0x2F,0x2B,0x26,0x23,0x1F,0x18,0x14,0x0F,0x0D,0x09,0x04,0x00,0xFC,0xF9,0xF4,0xF1, + 0xEE,0xEA,0xE9,0xE5,0xE2,0xDE,0xCF,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC3, + 0xCC,0xD5,0xE2,0xEA,0xF2,0xF9,0xFC,0x01,0x02,0x01,0x02,0xFF,0xFC,0xF8,0xF5,0xF5, + 0xEF,0xEB,0xE7,0xE0,0xDA,0xD6,0xD2,0xCE,0xCB,0xC7,0xC4,0xC2,0xC1,0xC2,0xC6,0xCF, + 0xD8,0xDA,0xD9,0xD9,0xD4,0xCC,0xC6,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC1, + 0xC1,0xC1,0xC1,0xC2,0xC1,0xC6,0xCE,0xD6,0xDD,0xE6,0xF1,0xFB,0x02,0x0A,0x13,0x1E, + 0x27,0x30,0x3A,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x41,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x40,0x3A,0x39,0x32,0x2B,0x26,0x22,0x1C, + 0x16,0x12,0x0E,0x08,0x04,0x03,0x00,0xFA,0xF8,0xF5,0xEF,0xE6,0xD2,0xC3,0xC1,0xC1, + 0xC2,0xC1,0xC2,0xC1,0xC3,0xCC,0xD6,0xE1,0xEA,0xF2,0xF9,0xFB,0xFD,0xFE,0xFF,0x00, + 0xFE,0xFC,0xFA,0xF9,0xF1,0xEB,0xE8,0xE4,0xDD,0xD8,0xD4,0xCC,0xC7,0xC2,0xC1,0xC2, + 0xC1,0xC2,0xC1,0xC2,0xC2,0xC6,0xCA,0xCB,0xCB,0xC5,0xC1,0xC2,0xC1,0xC2,0xC1,0xC1, + 0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC1,0xC2,0xC1,0xC2,0xC1,0xC3,0xCB,0xD4, + 0xDE,0xE9,0xF3,0xFA,0x02,0x0C,0x14,0x1E,0x27,0x2E,0x36,0x3E,0x42,0x41,0x42,0x42, + 0x41,0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x41,0x42,0x41,0x42,0x42,0x41,0x42,0x41,0x42,0x3E,0x39,0x35,0x2F, + 0x2B,0x28,0x21,0x1C,0x1A,0x14,0x0F,0x0E,0x06,0x01,0x02,0xFD,0xFA,0xF6,0xF2,0xF1, + 0xEB,0xDC,0xCA,0xC1,0xC2,0xC1,0xC1,0xC2,0xC2,0xC7,0xD2,0xDD,0xE9,0xF2,0xF9,0x01, + 0x06,0x09,0x0D,0x0B,0x0B,0x0A,0x07,0x05,0xFF,0xFA,0xF4,0xED,0xEB,0xE6,0xDD,0xDA, + 0xD7,0xD0,0xCA,0xC8,0xC4,0xC1,0xC2,0xC1,0xC2,0xC8,0xCE,0xD5,0xD7,0xD5,0xD3,0xCC, + 0xC7,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2,0xC1,0xC2, + 0xC2,0xC8,0xD3,0xD9,0xE1,0xEC,0xF5,0xFE,0x05,0x0F,0x18,0x21,0x29,0x31,0x39,0x40, + 0x42,0x41,0x42,0x41,0x42,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42, + 0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x40,0x41,0x41,0x40,0x3F,0x40,0x40,0x40,0x3F, + 0x3C,0x36,0x31,0x2D,0x29,0x26,0x22,0x1A,0x19,0x16,0x0C,0x0B,0x05,0xFF,0x00 +}; +static PROGMEM prog_uchar beat3_snd[554] = { + 0x05,0x04,0xF7,0xE8,0xDB,0xCF,0xCB,0xD3,0xDD,0xEA,0xF9,0x05,0x11,0x1D,0x27,0x31, + 0x38,0x40,0x44,0x43,0x45,0x43,0x44,0x40,0x3C,0x37,0x30,0x2C,0x25,0x21,0x1A,0x12, + 0x0C,0x05,0x03,0xFB,0xF5,0xF0,0xE9,0xE4,0xE0,0xE4,0xEA,0xEF,0xF4,0xF5,0xF2,0xEB, + 0xE7,0xDD,0xD4,0xCB,0xC5,0xC6,0xC5,0xC6,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5, + 0xC6,0xC5,0xC6,0xCC,0xD2,0xDB,0xE3,0xE9,0xF2,0xFC,0x03,0x0A,0x12,0x1A,0x20,0x26, + 0x2E,0x36,0x3B,0x42,0x44,0x44,0x45,0x44,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x44,0x45,0x44,0x45,0x44,0x40,0x3C,0x36, + 0x33,0x2F,0x29,0x26,0x22,0x1E,0x19,0x16,0x11,0x0C,0x0C,0x07,0x05,0x02,0xFF,0xFB, + 0xF7,0xF5,0xF1,0xED,0xEB,0xE6,0xE4,0xE3,0xE1,0xDE,0xDB,0xD9,0xD7,0xD5,0xD3,0xD2, + 0xCA,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC8,0xD4,0xE1,0xEB,0xF3,0xF9, + 0x00,0x05,0x07,0x09,0x09,0x0B,0x0A,0x09,0x08,0x05,0x04,0xFE,0xFE,0xFA,0xF3,0xF2, + 0xED,0xE8,0xE5,0xE3,0xDE,0xD8,0xD6,0xD7,0xDE,0xE7,0xEE,0xF4,0xF4,0xF1,0xED,0xE7, + 0xE2,0xDB,0xD3,0xCD,0xC7,0xC5,0xC6,0xC5,0xC6,0xC5,0xC5,0xC6,0xC6,0xC9,0xCF,0xD6, + 0xDD,0xE3,0xEB,0xF4,0xFE,0x04,0x0A,0x13,0x1D,0x24,0x2C,0x34,0x3C,0x43,0x45,0x44, + 0x45,0x44,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x44,0x45, + 0x43,0x3E,0x37,0x33,0x30,0x2A,0x27,0x22,0x1E,0x18,0x11,0x0E,0x09,0x06,0x02,0x00, + 0xFB,0xF5,0xF5,0xEE,0xEA,0xEA,0xE3,0xE1,0xDE,0xDA,0xD6,0xD3,0xD3,0xD1,0xCB,0xC6, + 0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC7,0xD2,0xDE,0xE7,0xF1,0xF5,0xF8, + 0xFE,0x01,0x03,0x05,0x03,0x00,0xFF,0xFB,0xF7,0xF3,0xF0,0xEA,0xE5,0xE1,0xDE,0xDA, + 0xD5,0xD1,0xCD,0xC9,0xC6,0xC6,0xC6,0xCF,0xD6,0xDC,0xE0,0xDE,0xDC,0xD6,0xD0,0xC9, + 0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC8,0xCF, + 0xD5,0xDD,0xE5,0xEF,0xF8,0x01,0x09,0x11,0x1B,0x23,0x2B,0x34,0x3B,0x43,0x45,0x44, + 0x45,0x44,0x45,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45, + 0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x45,0x44,0x45,0x44,0x45,0x44,0x3F, + 0x39,0x37,0x32,0x2B,0x27,0x24,0x20,0x1E,0x18,0x14,0x0E,0x09,0x06,0x07,0x02,0xFD, + 0xFC,0xF6,0xF0,0xEA,0xE6,0xE4,0xE2,0xE0,0xDE,0xDC,0xDA,0xD6,0xD3,0xCD,0xC5,0xC6, + 0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC5,0xCB,0xD7,0xE4,0xEF,0xF9,0x02,0x05,0x06,0x08, + 0x0A,0x0C,0x0C,0x0C,0x0A,0x07,0x05,0x01,0xFE,0xF8,0xF3,0xF0,0xEE,0xE7,0xE1,0xDE, + 0xD9,0xD5,0xD1,0xD1,0xD0,0xD5,0xDD,0xE3,0xE6,0xE6,0xE8,0xE3,0xDD,0xD9,0xD0,0xC9, + 0xC6,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC5,0xC6,0xC6,0xC5,0xCA,0xD1,0xD8,0xDF, + 0xE8,0xF2,0xFB,0x04,0x08,0x11,0x1B,0x24,0x2D,0x31,0x38,0x41,0x44,0x43,0x43,0x42, + 0x43,0x42,0x43,0x42,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42, + 0x43,0x42,0x43,0x42,0x42,0x41,0x42,0x41,0x42,0x42,0x41,0x40,0x3C,0x38,0x31,0x2C, + 0x28,0x20,0x1D,0x1A,0x13,0x0F,0x0B,0x07,0x02,0xFF +}; +static PROGMEM prog_uchar beat4_snd[594] = { + 0x03,0x06,0x06,0x05,0x06,0xFF,0xF0,0xE2,0xD4,0xCD,0xCD,0xD6,0xE4,0xF0,0xFE,0x0C, + 0x16,0x24,0x2F,0x37,0x3D,0x41,0x44,0x43,0x43,0x44,0x42,0x40,0x3C,0x36,0x31,0x2A, + 0x25,0x1E,0x16,0x11,0x0A,0x05,0xFF,0xF9,0xF3,0xEC,0xE8,0xE3,0xE0,0xE6,0xEB,0xF2, + 0xF4,0xF2,0xF0,0xE7,0xDE,0xD6,0xCC,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC4,0xC5,0xC4, + 0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xCC,0xD6,0xDD,0xE3,0xED,0xF8,0xFE,0x04,0x0C, + 0x12,0x1A,0x23,0x29,0x31,0x37,0x3E,0x43,0x44,0x43,0x43,0x44,0x43,0x44,0x43,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x43, + 0x44,0x41,0x3C,0x3A,0x35,0x2E,0x2A,0x25,0x21,0x1D,0x19,0x13,0x10,0x0A,0x05,0x04, + 0x02,0xFF,0xF9,0xF7,0xF4,0xF1,0xED,0xE9,0xE5,0xE3,0xE1,0xDB,0xD4,0xD3,0xD1,0xD0, + 0xD0,0xCD,0xCD,0xCC,0xCB,0xC9,0xCA,0xC9,0xC8,0xC9,0xC5,0xC7,0xC9,0xC7,0xC5,0xC4, + 0xC5,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC6,0xD1,0xDF,0xED,0xFA,0x03,0x0A,0x10,0x17, + 0x1A,0x20,0x24,0x22,0x22,0x21,0x20,0x1B,0x19,0x17,0x13,0x0F,0x06,0x04,0x03,0x00, + 0xFA,0xF4,0xF3,0xEC,0xE7,0xE9,0xEF,0xF7,0xFF,0x03,0x03,0xFF,0xFB,0xF6,0xEE,0xE6, + 0xDF,0xD6,0xD4,0xD0,0xCA,0xC9,0xC6,0xC5,0xC7,0xC7,0xCC,0xCF,0xD3,0xD9,0xDE,0xE7, + 0xEE,0xF6,0xFE,0x04,0x0E,0x14,0x1D,0x24,0x2C,0x35,0x39,0x42,0x44,0x43,0x44,0x43, + 0x44,0x43,0x44,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x44,0x43,0x44,0x40,0x3A,0x34, + 0x2F,0x2B,0x26,0x23,0x1C,0x15,0x12,0x0B,0x06,0x03,0x00,0xFB,0xF5,0xF1,0xED,0xE9, + 0xE5,0xE3,0xE1,0xDC,0xDA,0xD6,0xD2,0xD2,0xCF,0xCA,0xC8,0xC6,0xC5,0xC5,0xC4,0xC5, + 0xC4,0xC5,0xC4,0xC4,0xC4,0xC4,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4, + 0xC5,0xC4,0xC5,0xCF,0xDD,0xEA,0xF5,0xFD,0x04,0x05,0x09,0x0D,0x10,0x11,0x10,0x0D, + 0x0C,0x08,0x05,0x04,0x00,0xFC,0xF8,0xF4,0xF0,0xEC,0xE8,0xE4,0xDF,0xDC,0xDA,0xD9, + 0xDF,0xE8,0xF1,0xF5,0xF5,0xF4,0xEE,0xE6,0xDF,0xD6,0xD1,0xCA,0xC4,0xC5,0xC4,0xC5, + 0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xCB,0xD1,0xD7,0xE0,0xE9,0xEF,0xF9,0x02,0x06,0x0F, + 0x19,0x21,0x29,0x33,0x3B,0x40,0x44,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x43,0x44,0x44,0x44,0x43,0x40,0x3C,0x37,0x32,0x2D,0x29,0x24,0x1F,0x1A, + 0x14,0x10,0x0D,0x09,0x05,0x03,0xFD,0xF6,0xF2,0xEE,0xEA,0xE6,0xE3,0xE2,0xDD,0xDA, + 0xD7,0xD3,0xD2,0xD0,0xCB,0xC9,0xC6,0xC5,0xC5,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5, + 0xC4,0xC4,0xC4,0xC4,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC4,0xC5,0xC4,0xCB,0xD9, + 0xE7,0xF2,0xFA,0x02,0x05,0x07,0x0C,0x0F,0x11,0x11,0x0E,0x0D,0x09,0x05,0x04,0x01, + 0xFD,0xF9,0xF5,0xF1,0xED,0xE9,0xE6,0xE1,0xDC,0xDA,0xD9,0xDD,0xE5,0xEF,0xF5,0xF5, + 0xF5,0xF0,0xE8,0xE1,0xD8,0xD3,0xCC,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5,0xC4,0xC5, + 0xC5,0xC9,0xD0,0xD5,0xDD,0xE7,0xEE,0xF6,0x00,0x05,0x0C,0x16,0x1F,0x26,0x30,0x39, + 0x3F,0x43,0x44,0x43,0x44,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, + 0x44,0x44,0x41,0x3D,0x39,0x33,0x2E,0x2B,0x26,0x20,0x1B,0x16,0x11,0x0E,0x0B,0x06, + 0x04,0x00 +}; +static PROGMEM prog_uchar saucer_snd[1266] = { + 0x0C,0x10,0x1D,0x31,0x27,0x0A,0xF2,0xE5,0xCC,0xD2,0xE9,0x05,0x12,0x17,0x2E,0x2A, + 0x10,0xF5,0xE8,0xD0,0xD0,0xE6,0x02,0x12,0x16,0x2E,0x2C,0x11,0xF7,0xE8,0xCD,0xCD, + 0xE5,0x04,0x12,0x18,0x30,0x2A,0x0F,0xF7,0xE3,0xCA,0xD1,0xEB,0x07,0x11,0x1F,0x33, + 0x24,0x07,0xF2,0xD9,0xC8,0xD9,0xF6,0x0B,0x15,0x2A,0x33,0x17,0xFA,0xE7,0xCC,0xCE, + 0xE7,0x03,0x12,0x1F,0x35,0x23,0x03,0xF1,0xD4,0xC9,0xDE,0xFB,0x0E,0x19,0x32,0x2B, + 0x0A,0xF7,0xD9,0xC8,0xD8,0xF6,0x0C,0x17,0x30,0x30,0x0E,0xF8,0xDD,0xC8,0xD5,0xF4, + 0x0A,0x17,0x31,0x2F,0x0E,0xF9,0xDA,0xC6,0xD8,0xF7,0x0A,0x1B,0x35,0x29,0x0B,0xF4, + 0xD2,0xC7,0xDE,0xFD,0x0D,0x23,0x36,0x20,0x04,0xEB,0xCA,0xCB,0xEC,0x03,0x12,0x2F, + 0x32,0x13,0xFC,0xDA,0xC6,0xD9,0xF9,0x0B,0x20,0x38,0x23,0x05,0xEA,0xC8,0xCD,0xEE, + 0x04,0x19,0x35,0x2C,0x0E,0xF3,0xCE,0xC6,0xE6,0x00,0x11,0x34,0x31,0x11,0xFA,0xD2, + 0xC6,0xE0,0xFD,0x0E,0x30,0x36,0x13,0xF9,0xD2,0xC6,0xE2,0xFC,0x10,0x35,0x33,0x11, + 0xF6,0xCF,0xC6,0xE8,0xFD,0x16,0x39,0x2B,0x0D,0xEF,0xC7,0xCD,0xF0,0x01,0x23,0x39, + 0x21,0x05,0xDE,0xC2,0xD9,0xFA,0x0B,0x32,0x32,0x13,0xF8,0xC9,0xC8,0xEB,0x00,0x21, + 0x39,0x22,0x06,0xDC,0xBF,0xDF,0xF8,0x13,0x39,0x2B,0x10,0xE9,0xC0,0xD5,0xF2,0x0B, + 0x32,0x33,0x15,0xF3,0xC7,0xCB,0xF1,0x06,0x2C,0x36,0x18,0xF9,0xC8,0xCA,0xEF,0x04, + 0x2C,0x37,0x19,0xF7,0xC6,0xCB,0xF0,0x05,0x31,0x34,0x15,0xF1,0xC2,0xD3,0xF1,0x0D, + 0x39,0x2C,0x11,0xE3,0xC0,0xDF,0xF4,0x1A,0x3C,0x23,0x06,0xD1,0xC5,0xE9,0xFD,0x2F, + 0x35,0x1A,0xEF,0xC2,0xD8,0xF0,0x15,0x39,0x27,0x07,0xD3,0xC5,0xE9,0x01,0x30,0x33, + 0x14,0xEA,0xBF,0xDD,0xF7,0x22,0x39,0x1C,0xFB,0xC3,0xD3,0xF2,0x14,0x3B,0x23,0x01, + 0xCC,0xCE,0xED,0x10,0x38,0x29,0x05,0xCB,0xD1,0xE8,0x10,0x39,0x26,0x06,0xC9,0xCF, + 0xED,0x14,0x39,0x25,0xFB,0xC7,0xD6,0xED,0x1F,0x38,0x1E,0xF1,0xC4,0xDB,0xF9,0x29, + 0x35,0x16,0xDC,0xC7,0xE5,0x07,0x35,0x2E,0x01,0xC9,0xD2,0xF2,0x1E,0x39,0x1C,0xE2, + 0xC5,0xE3,0x06,0x34,0x2E,0xFE,0xCC,0xD0,0xF7,0x22,0x36,0x15,0xDB,0xC9,0xE5,0x17, + 0x36,0x25,0xE9,0xC8,0xDF,0x05,0x35,0x2C,0xF4,0xCC,0xD4,0x03,0x2E,0x30,0xFB,0xCB, + 0xD7,0xFC,0x2A,0x34,0xFE,0xCF,0xD3,0xF9,0x30,0x33,0xFC,0xCD,0xD2,0x02,0x31,0x2E, + 0xF6,0xCA,0xD7,0x0A,0x34,0x27,0xEA,0xC7,0xE1,0x15,0x37,0x1A,0xDD,0xCB,0xEB,0x23, + 0x3A,0x03,0xCE,0xD6,0xFF,0x31,0x2E,0xE7,0xCA,0xE4,0x19,0x38,0x10,0xD4,0xCD,0xFD, + 0x32,0x2C,0xE6,0xCB,0xE7,0x20,0x35,0x05,0xCD,0xD7,0x0C,0x36,0x1E,0xD3,0xD1,0xFA, + 0x32,0x2C,0xDD,0xCE,0xEC,0x2C,0x34,0xE9,0xCF,0xE4,0x23,0x37,0xF2,0xD0,0xE1,0x1E, + 0x38,0xF4,0xCE,0xE2,0x1E,0x3B,0xF3,0xCA,0xE8,0x1F,0x38,0xF2,0xC5,0xEE,0x27,0x2D, + 0xEC,0xC9,0xF3,0x33,0x22,0xDA,0xD3,0x02,0x35,0x15,0xD0,0xD7,0x1A,0x37,0xF6,0xCC, + 0xED,0x29,0x26,0xE3,0xD0,0x03,0x37,0x0C,0xCC,0xE1,0x29,0x2C,0xE1,0xCD,0x09,0x37, + 0x02,0xCB,0xEC,0x2C,0x22,0xD8,0xD7,0x17,0x2F,0xF0,0xCC,0x03,0x33,0x07,0xCA,0xF0, + 0x2F,0x19,0xD4,0xDB,0x28,0x24,0xDF,0xD6,0x1A,0x2D,0xE2,0xD5,0x16,0x2C,0xEC,0xCE, + 0x14,0x2F,0xE7,0xD5,0x14,0x29,0xEC,0xD1,0x19,0x2B,0xDF,0xDA,0x21,0x1E,0xDB,0xE3, + 0x24,0x18,0xD5,0xEB,0x2E,0x0A,0xCC,0x00,0x31,0xEF,0xD3,0x1B,0x22,0xDA,0xE5,0x2B, + 0x0A,0xD0,0x04,0x2C,0xE9,0xDA,0x24,0x16,0xD2,0xFA,0x2E,0xEE,0xDA,0x21,0x11,0xD5, + 0x05,0x25,0xE5,0xE5,0x2A,0x00,0xD5,0x16,0x19,0xD9,0xFD,0x2A,0xDF,0xED,0x26,0xF8, + 0xDA,0x23,0x0A,0xD0,0x1D,0x0D,0xDE,0x09,0x1B,0xDC,0xFE,0x29,0xD3,0x02,0x26,0xD6, + 0x04,0x1D,0xDE,0x03,0x1A,0xE2,0x02,0x18,0xE1,0x05,0x15,0xE1,0x0B,0x0E,0xE0,0x17, + 0x01,0xE3,0x22,0xEE,0xEE,0x29,0xDD,0xFF,0x22,0xD7,0x13,0x07,0xE5,0x21,0xE3,0xFE, + 0x20,0xD6,0x17,0xFE,0xEB,0x23,0xDA,0x0F,0x0A,0xE5,0x23,0xDC,0x0F,0x06,0xE7,0x23, + 0xDC,0x18,0xF6,0xF2,0x1A,0xE0,0x1E,0xE7,0x0C,0xFF,0xF2,0x14,0xE3,0x1A,0xE9,0x0E, + 0xF8,0xFD,0x0C,0xE9,0x1C,0xE2,0x18,0xF2,0xFC,0x12,0xDF,0x23,0xE2,0x0D,0x07,0xE2, + 0x24,0xDC,0x11,0x0A,0xE1,0x22,0xE0,0x0A,0x13,0xD8,0x20,0xF4,0xF2,0x20,0xD9,0x0D, + 0x18,0xD3,0x1B,0x08,0xDD,0x20,0xF3,0xEE,0x1F,0xE8,0xFB,0x1B,0xE4,0xFF,0x1A,0xE4, + 0x00,0x1C,0xE2,0xFB,0x25,0xDB,0xF8,0x2E,0xD5,0xFA,0x26,0xE2,0xF3,0x21,0xF7,0xDC, + 0x2B,0xFE,0xD4,0x20,0x0E,0xD8,0x06,0x26,0xDB,0xEE,0x2B,0xF7,0xDA,0x1B,0x15,0xD6, + 0xFE,0x2C,0xEA,0xDA,0x25,0x14,0xD1,0xFB,0x2F,0xF0,0xD5,0x1D,0x1E,0xD7,0xEC,0x2C, + 0x05,0xCF,0x07,0x2D,0xEC,0xD3,0x1D,0x25,0xD8,0xE1,0x2B,0x15,0xD2,0xF0,0x2C,0x0A, + 0xD2,0xF4,0x31,0x07,0xC9,0xFD,0x32,0x02,0xD0,0xF7,0x31,0x07,0xC9,0xF8,0x33,0x0D, + 0xCB,0xE8,0x34,0x16,0xD4,0xDE,0x25,0x24,0xDC,0xDB,0x15,0x2E,0xEB,0xD1,0x05,0x33, + 0x05,0xCE,0xEB,0x29,0x22,0xDC,0xD7,0x0E,0x34,0xFC,0xCD,0xEC,0x2F,0x24,0xD9,0xD0, + 0x0E,0x3B,0xFE,0xC8,0xEA,0x29,0x28,0xE6,0xD0,0xF8,0x34,0x1C,0xD3,0xD4,0x11,0x36, + 0x06,0xD1,0xDA,0x1B,0x3A,0xF4,0xCB,0xE8,0x20,0x37,0xF1,0xC6,0xEC,0x23,0x34,0xF4, + 0xC5,0xEA,0x24,0x33,0xF7,0xC7,0xE6,0x1E,0x36,0x00,0xC6,0xE1,0x16,0x38,0x0E,0xCB, + 0xD7,0x07,0x3B,0x1C,0xD7,0xD0,0xF5,0x2D,0x2E,0xF1,0xC8,0xE2,0x19,0x3B,0x0D,0xCE, + 0xD3,0x00,0x34,0x29,0xEA,0xC7,0xE4,0x1A,0x3C,0x0F,0xD1,0xD3,0xF7,0x2A,0x34,0xF4, + 0xCC,0xDE,0x07,0x34,0x26,0xE5,0xC8,0xE6,0x15,0x37,0x1D,0xDA,0xCB,0xED,0x18,0x3B, + 0x16,0xD4,0xCF,0xEC,0x1E,0x3C,0x11,0xD8,0xCB,0xEA,0x22,0x39,0x15,0xD7,0xC9,0xEE, + 0x19,0x37,0x1D,0xDE,0xCB,0xE2,0x12,0x39,0x25,0xEC,0xC6,0xDD,0x01,0x31,0x31,0x00, + 0xCD,0xCE,0xF6,0x22,0x36,0x18,0xDF,0xC7,0xE2,0x0E,0x34,0x2B,0xFC,0xCA,0xD2,0xF4, + 0x26,0x36,0x1A,0xE2,0xC4,0xE1,0x07,0x32,0x2E,0x0A,0xCD,0xCB,0xED,0x13,0x39,0x27, + 0xFB,0xC4,0xD8,0xEF,0x1D,0x3B,0x1D,0xF5,0xC1,0xD9,0xF6,0x22,0x38,0x1D,0xEF,0xC0, + 0xDE,0xF3,0x23,0x37,0x1D,0xF5,0xBF,0xDC,0xF0,0x1D,0x3B,0x1D,0x00,0xC3,0xD2,0xF0, + 0x10,0x3D,0x22,0x0A,0xCF,0xC7,0xED,0x00,0x36,0x2E,0x14,0xE1,0xBE,0xE6,0xF5,0x22, + 0x39,0x1F,0xFB,0xC4,0xD2,0xF0,0x08,0x37,0x2D,0x0F,0xE4,0xBF,0xE2,0xF7,0x1D,0x3A, + 0x20,0x07,0xCC,0xC6,0xED,0xFC,0x2E,0x36,0x18,0xFA,0xC3,0xCF,0xF2,0x04,0x33,0x32, + 0x12,0xF2,0xC2,0xD3,0xF4,0x08,0x34,0x30,0x11,0xEF,0xC3,0xD4,0xF4,0x08,0x33,0x30, + 0x13,0xF2,0xC3,0xD1,0xF4,0x02,0x30,0x33,0x17,0xFB,0xC6,0xCB,0xED,0x00,0x23,0x39, + 0x21,0x01,0xD8,0xC2,0xE3,0xFB,0x13,0x3A,0x29,0x0F,0xEA,0xC1,0xD5,0xF3,0x06,0x2A, + 0x38,0x19,0x00,0xD4,0xC3,0xE5,0xFC,0x13,0x36,0x2D,0x0E,0xF1,0xC8,0xCC,0xEF,0x03, + 0x1E,0x39,0x22,0x08,0xE5,0xC3,0xD5,0xF6,0x07,0x24,0x38,0x1C,0x06,0xDD,0xC2,0xD9, + 0xF9,0x09,0x26,0x38,0x1B,0x04,0xDE,0xC3,0xD8,0xF9,0x09,0x24,0x39,0x1C,0x05,0xE2, + 0xC4,0xD3,0xF4,0x0A,0x1E,0x39,0x23,0x07,0xED,0xC8,0xCC,0xEC,0x05,0x14,0x33,0x2E, + 0x0C,0xFA,0xD4,0xC7,0xE1,0xFD,0x0C,0x25,0x38,0x1A,0x03,0xE6,0xC6,0xD0,0xEF,0x08, + 0x15,0x31,0x2F,0x0F,0xF9,0xD7,0xC6,0xD9,0xF9,0x0D,0x1B,0x34,0x28,0x08,0xF3,0xD2, + 0xC8,0xE2,0x00,0x0F,0x21,0x37,0x20,0x03,0xEC,0xCD,0xCC,0xE3,0x02,0x10,0x21,0x38, + 0x20,0x06,0xEF,0xCC,0xCB,0xE1,0x00,0x0F,0x1E,0x36,0x23,0x08,0xF3,0xD2,0xC9,0xDF, + 0xFA,0x01 +};
--- a/shield.h Sat Sep 29 13:01:42 2012 +0000 +++ b/shield.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,48 +1,48 @@ -#define ARD_D0 p27 -#define ARD_D1 p28 -#define ARD_D2 p29 -#define ARD_D3 p21 -#define ARD_D4 p30 -#define ARD_D5 p22 -#define ARD_D6 p23 -#define ARD_D7 p11 -#define ARD_D8 p12 -#define ARD_D9 p24 -#define ARD_D10 p25 -#define ARD_D11 p5 -#define ARD_D12 p6 -#define ARD_D13 p7 - -#define ARD_D14 ARD_A0 -#define ARD_D15 ARD_A1 -#define ARD_D16 ARD_A2 -#define ARD_D17 ARD_A3 -#define ARD_D18 ARD_SDA -#define ARD_D19 ARD_SCL - -#define ARD_A0 p15 -#define ARD_A1 p16 -#define ARD_A2 p17 -#define ARD_A3 p18 -#define ARD_A4 p19 -#define ARD_A5 p20 - -#define ARD_PWM0 ARD_D3 -#define ARD_PWM1 ARD_D5 -#define ARD_PWM2 ARD_D6 -#define ARD_PWM3 ARD_D9 -#define ARD_PWM4 ARD_D10 -#define ARD_PWM5 p26 - -#define ARD_RX ARD_D0 -#define ARD_TX ARD_D1 -#define ARD_SDA p9 -#define ARD_SCL p10 -#define ARD_MOSI p5 -#define ARD_MISO p6 -#define ARD_SCK p7 -/* -DigitalOut shield_d13(ARD_D13); - -AnalogIn shield_a0(ARD_A0); +#define ARD_D0 p27 +#define ARD_D1 p28 +#define ARD_D2 p29 +#define ARD_D3 p21 +#define ARD_D4 p30 +#define ARD_D5 p22 +#define ARD_D6 p23 +#define ARD_D7 p11 +#define ARD_D8 p12 +#define ARD_D9 p24 +#define ARD_D10 p25 +#define ARD_D11 p5 +#define ARD_D12 p6 +#define ARD_D13 p7 + +#define ARD_D14 ARD_A0 +#define ARD_D15 ARD_A1 +#define ARD_D16 ARD_A2 +#define ARD_D17 ARD_A3 +#define ARD_D18 ARD_SDA +#define ARD_D19 ARD_SCL + +#define ARD_A0 p15 +#define ARD_A1 p16 +#define ARD_A2 p17 +#define ARD_A3 p18 +#define ARD_A4 p19 +#define ARD_A5 p20 + +#define ARD_PWM0 ARD_D3 +#define ARD_PWM1 ARD_D5 +#define ARD_PWM2 ARD_D6 +#define ARD_PWM3 ARD_D9 +#define ARD_PWM4 ARD_D10 +#define ARD_PWM5 p26 + +#define ARD_RX ARD_D0 +#define ARD_TX ARD_D1 +#define ARD_SDA p9 +#define ARD_SCL p10 +#define ARD_MOSI p5 +#define ARD_MISO p6 +#define ARD_SCK p7 +/* +DigitalOut shield_d13(ARD_D13); + +AnalogIn shield_a0(ARD_A0); */ \ No newline at end of file
--- a/sound.cpp Sat Sep 29 13:01:42 2012 +0000 +++ b/sound.cpp Thu Dec 20 21:33:52 2012 +0000 @@ -1,89 +1,89 @@ -/*------------------------------------------------------------------ - Game sounds -------------------------------------------------------------------*/ -#include "game.h" -#include "samples.h" - - -/*------------------------------------------------------------------ - Set these flags to start a sound playing -------------------------------------------------------------------*/ -bool playerShootSound; -bool alienDeathSound; -bool playerDeathSound; -bool alienBeatSound; -bool saucerSound,stopSaucerSnd,saucerDieSound; -static byte alienBeat; - -#if SYNTHSOUNDS -SoundPlayer soundPlayer; -Sound shootSound; -#endif - -/*------------------------------------------------------------------ - Sound functions -------------------------------------------------------------------*/ -void resetGameSounds() -{ - SoundController::reset(); - playerShootSound = false; - alienDeathSound = false; - playerDeathSound = false; - alienBeatSound = false; - saucerSound = stopSaucerSnd = saucerDieSound = false; - alienBeat = 0; -} - -void updateGameSounds() -{ - if (1) { - if (playerShootSound) { - playerShootSound = false; - SoundController::playSample((prog_char*)shoot_snd, sizeof(shoot_snd),0); - } - if (alienDeathSound) { - alienDeathSound = false; - SoundController::playSample((prog_char*)aliendeath_snd, sizeof(aliendeath_snd),1); - } - if (playerDeathSound) { - playerDeathSound = false; - SoundController::playSample((prog_char*)playerdeath_snd, sizeof(playerdeath_snd),1); - } - if (saucerSound) { - saucerSound = false; - SoundController::playSample((prog_char*)saucer_snd, -sizeof(saucer_snd),2); - } - if (stopSaucerSnd) { - stopSaucerSnd = false; - SoundController::playSample((prog_char*)0,0,2); - } - if (saucerDieSound) { - saucerDieSound = false; - SoundController::playSample((prog_char*)playerdeath_snd, sizeof(playerdeath_snd),2); - } - if (alienBeatSound) { - alienBeatSound = false; - prog_char *b = 0; unsigned int n = 0; - switch (alienBeat&3) { - case 0: b = (prog_char*)beat1_snd; n = sizeof(beat1_snd); break; - case 1: b = (prog_char*)beat2_snd; n = sizeof(beat2_snd); break; - case 2: b = (prog_char*)beat3_snd; n = sizeof(beat3_snd); break; - case 3: b = (prog_char*)beat4_snd; n = sizeof(beat4_snd); break; - } - SoundController::playSample(b,n,3); - ++alienBeat; - } - SoundController::update(); - } -#if SYNTHSOUNDS - else { - if (playerShootSound) { - playerShootSound = false; - shootSound.adsr = ADSR(10,15,100,36); - soundPlayer.setVolume(200).setSound(shootSound).play(440,100); - } - SoundController::update(); - } -#endif - -} +/*------------------------------------------------------------------ + Game sounds +------------------------------------------------------------------*/ +#include "game.h" +#include "samples.h" + + +/*------------------------------------------------------------------ + Set these flags to start a sound playing +------------------------------------------------------------------*/ +bool playerShootSound; +bool alienDeathSound; +bool playerDeathSound; +bool alienBeatSound; +bool saucerSound,stopSaucerSnd,saucerDieSound; +static byte alienBeat; + +#if SYNTHSOUNDS +SoundPlayer soundPlayer; +Sound shootSound; +#endif + +/*------------------------------------------------------------------ + Sound functions +------------------------------------------------------------------*/ +void resetGameSounds() +{ + SoundController::reset(); + playerShootSound = false; + alienDeathSound = false; + playerDeathSound = false; + alienBeatSound = false; + saucerSound = stopSaucerSnd = saucerDieSound = false; + alienBeat = 0; +} + +void updateGameSounds() +{ + if (1) { + if (playerShootSound) { + playerShootSound = false; + SoundController::playSample((prog_char*)shoot_snd, sizeof(shoot_snd),0); + } + if (alienDeathSound) { + alienDeathSound = false; + SoundController::playSample((prog_char*)aliendeath_snd, sizeof(aliendeath_snd),1); + } + if (playerDeathSound) { + playerDeathSound = false; + SoundController::playSample((prog_char*)playerdeath_snd, sizeof(playerdeath_snd),1); + } + if (saucerSound) { + saucerSound = false; + SoundController::playSample((prog_char*)saucer_snd, -sizeof(saucer_snd),2); + } + if (stopSaucerSnd) { + stopSaucerSnd = false; + SoundController::playSample((prog_char*)0,0,2); + } + if (saucerDieSound) { + saucerDieSound = false; + SoundController::playSample((prog_char*)playerdeath_snd, sizeof(playerdeath_snd),2); + } + if (alienBeatSound) { + alienBeatSound = false; + prog_char *b = 0; unsigned int n = 0; + switch (alienBeat&3) { + case 0: b = (prog_char*)beat1_snd; n = sizeof(beat1_snd); break; + case 1: b = (prog_char*)beat2_snd; n = sizeof(beat2_snd); break; + case 2: b = (prog_char*)beat3_snd; n = sizeof(beat3_snd); break; + case 3: b = (prog_char*)beat4_snd; n = sizeof(beat4_snd); break; + } + SoundController::playSample(b,n,3); + ++alienBeat; + } + SoundController::update(); + } +#if SYNTHSOUNDS + else { + if (playerShootSound) { + playerShootSound = false; + shootSound.adsr = ADSR(10,15,100,36); + soundPlayer.setVolume(200).setSound(shootSound).play(440,100); + } + SoundController::update(); + } +#endif + +}
--- a/sound.h Sat Sep 29 13:01:42 2012 +0000 +++ b/sound.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,18 +1,18 @@ -/*------------------------------------------------------------------ - Game sounds -------------------------------------------------------------------*/ -// Where to put the sample playback buffer -static const unsigned int samplePlaybackBuffer = 0x7f00; - -// Reset all sounds -void resetGameSounds(); - -// Update all sounds -void updateGameSounds(); - -// Set these flags to true to play the corresponding sound -extern bool playerShootSound; -extern bool alienDeathSound; -extern bool playerDeathSound; -extern bool alienBeatSound; -extern bool saucerSound,stopSaucerSnd,saucerDieSound; +/*------------------------------------------------------------------ + Game sounds +------------------------------------------------------------------*/ +// Where to put the sample playback buffer +static const unsigned int samplePlaybackBuffer = 0x7f00; + +// Reset all sounds +void resetGameSounds(); + +// Update all sounds +void updateGameSounds(); + +// Set these flags to true to play the corresponding sound +extern bool playerShootSound; +extern bool alienDeathSound; +extern bool playerDeathSound; +extern bool alienBeatSound; +extern bool saucerSound,stopSaucerSnd,saucerDieSound;
--- a/utils.cpp Sat Sep 29 13:01:42 2012 +0000 +++ b/utils.cpp Thu Dec 20 21:33:52 2012 +0000 @@ -1,488 +1,490 @@ -//#include <SPI.h> - -#include "utils.h" -SPI spiutils(ARD_MOSI, ARD_MISO, ARD_SCK); // mosi, miso, sclk -Serial pcu(USBTX, USBRX); -/*--------------------------------------------- - Coprocessor controller ----------------------------------------------*/ -enum { - COPPERCTRL = COMM, - COPPERLISTSTART = COPPERCTRL, - SAMPLEREADPOS = COPPERCTRL+2, - SAMPLEREADPAGE = COPPERCTRL+4, - COPPERLISTPTR = COPPERCTRL+6, - YLINEECHO = COPPERCTRL+8, - DUMMYCOPPERLIST = COPPERCTRL+10 -}; - -// Available commands -enum copper_commands { - cp_halt='@', - cp_wait, - cp_write8, - cp_write16, - cp_copy -}; - -#include "j1.h" -void crash() -{ - unsigned int p; - while (1) { - GD.wr(0,p++); - } -} -static unsigned int samplePage_, listStart_; -void Coprocessor::reset(unsigned int spg) -{ - samplePage_ = spg; - GD.wr(J1_RESET, 1); // Halt the coprocessor - GD.copy(J1_CODE, copper_code, sizeof(copper_code)); - for (unsigned int i=J1_CODE; i<J1_CODE+256; i+=2) { - unsigned int w = GD.rd16(i); - if (w == 0xbf00) { GD.wr16(i,spg+0x8000); } - else if (w == COMM+0x8000) { listStart_ = i; } - } - CopperlistBuilder d; // Set up a fake copperlist - GD.wr(DUMMYCOPPERLIST,cp_halt); - GD.wr16(listStart_,DUMMYCOPPERLIST+0x8000); - GD.wr16(SAMPLEREADPAGE,samplePage_); - SoundController::reset(); - GD.wr(J1_RESET, 0); // Go! - delay(10); - SoundController::update(); -} - -void Coprocessor::setCopperlist(unsigned int addr) -{ - GD.wr(J1_RESET, 1); // Halt the coprocessor - GD.wr16(listStart_,addr+0x8000); - GD.wr(J1_RESET, 0); // Go! -} - -int Coprocessor::yline() -{ - return GD.rd16(YLINEECHO); -} -unsigned int Coprocessor::samplePage() -{ - return samplePage_; -} -byte Coprocessor::sampleReadPos() -{ - return GD.rd(SAMPLEREADPOS); -} - -// CopperlistBuilder -void CopperlistBuilder::put(byte b) -{ - GD.wr(out++,b); -} -void CopperlistBuilder::put16(unsigned int v) -{ - put(lowByte(v)); - put(highByte(v)); -} - -void CopperlistBuilder::begin(unsigned int dest) -{ - out = start = dest; -#if 0 - // Debugging... - write(0,65); - write(1,66); - write(2,67); - write(3,68); - write(4,69); - copy(0,64,4); - copy(64,128,3); - copy(128,131,5); -#endif -} -void CopperlistBuilder::wait(int line) -{ - if (line > 0) { - put(cp_wait); - put16(line); - } -} -void CopperlistBuilder::write(unsigned int addr, byte val) -{ - put(cp_write8); - put(val); - put16(addr); -} -void CopperlistBuilder::write16(unsigned int addr, unsigned int val) -{ - put(cp_write16); - put16(val); - put16(addr); -} -void CopperlistBuilder::copy(unsigned int src, unsigned int dst, unsigned int numBytes) -{ - if (numBytes > 0) { - put(cp_copy); - put16(src); - put16(dst); - put16(numBytes); - } -} -void CopperlistBuilder::end(bool executeNow) -{ - put(cp_halt); // Nice end to the list - if (executeNow) { - Coprocessor::setCopperlist(start); - } -} - -unsigned int CopperlistBuilder::position() -{ - return out; -} - -/*--------------------------------------------- - Sound ----------------------------------------------*/ -// The amount of space to leave in the buffer -#define BUFFERGAP 8 - -/*--------------------------------------------- - Sample playback ----------------------------------------------*/ -static byte sampleWritePos; -static prog_char *sampleStart0, *samplePos0, *sampleEnd0; -static prog_char *sampleStart1, *samplePos1, *sampleEnd1; -static prog_char *sampleStart2, *samplePos2, *sampleEnd2; -static prog_char *sampleStart3, *samplePos3, *sampleEnd3; -static bool repeatSample0, repeatSample1, repeatSample2, repeatSample3; - -static void writeSamples(byte num) -{ - if (num > 0) { - GD.__wstart(Coprocessor::samplePage()+sampleWritePos); - prog_char *s0=samplePos0, *se0=sampleEnd0; - prog_char *s1=samplePos1, *se1=sampleEnd1; - prog_char *s2=samplePos2, *se2=sampleEnd2; - prog_char *s3=samplePos3, *se3=sampleEnd3; - for (byte i=0; i<num; ++i) { - int val = 0; - if (s0) { - val += (char)pgm_read_byte(s0++); - if (s0 == se0) { - s0 = (repeatSample0)? sampleStart0: 0; - } - } - if (s1) { - val += (char)pgm_read_byte(s1++); - if (s1 == se1) { - s1 = (repeatSample1)? sampleStart1: 0; - } - } - if (s2) { - val += (char)pgm_read_byte(s2++); - if (s2 == se2) { - s2 = (repeatSample2)? sampleStart2: 0; - } - } - if (s3) { - val += (char)pgm_read_byte(s3++); - if (s3 == se3) { - s3 = (repeatSample3)? sampleStart3: 0; - } - } - spiutils.write(val>>2); - } - GD.__end(); - samplePos0 = s0; - samplePos1 = s1; - samplePos2 = s2; - samplePos3 = s3; - sampleWritePos += num; - } -} - -void SoundController::playSample(prog_char *s, int n, byte ch) -{ - bool repeat = (n < 0); - if (repeat) { - n = -n; - } - switch (ch) { - case 0: sampleStart0 = s; - samplePos0 = s; - sampleEnd0 = s+n; - repeatSample0 = repeat; - break; - case 1: sampleStart1 = s; - samplePos1 = s; - sampleEnd1 = s+n; - repeatSample1 = repeat; - break; - case 2: sampleStart2 = s; - samplePos2 = s; - sampleEnd2 = s+n; - repeatSample2 = repeat; - break; - case 3: sampleStart3 = s; - samplePos3 = s; - sampleEnd3 = s+n; - repeatSample3 = repeat; - break; - } -} - -#if SYNTHSOUNDS -/*--------------------------------------------- - Synthesized sounds ----------------------------------------------*/ -static SoundPlayer *soundPlayerList=0; -ADSR::ADSR(byte a, byte d, byte s, byte r) : attack(a), decay(d), sustain(s), release(r) -{ -} -byte ADSR::evaluate(unsigned int t, unsigned int r) -{ - if (t > r) { - // In release phase... - t -= r; - if (t > release) { - return 0; - } - t = sustain*(release-t); - return t/release; - } - else if (t >= (attack+decay)) { - // In sustain phase - return sustain; - } - else if (t > attack) { - // In decay phase - t -= attack; - t = (255-sustain)*t; - return 255-(t/decay); - } - else if (t > 0) { - // In attack phase - return (t*255)/attack; - } - return 0; -} - -SoundPlayer::SoundPlayer() -{ - volume = 255; - active = false; - isLinked = false; -} -SoundPlayer& SoundPlayer::setVolume(byte v) -{ - volume = v; - return *this; -} -SoundPlayer& SoundPlayer::setSound(const Sound& s) -{ - sound = s; - return *this; -} -void SoundPlayer::play(unsigned int p, unsigned int d) -{ - if (!isLinked) { - // Add me to the list of sounds to be updated - isLinked = true; - link = soundPlayerList; - soundPlayerList = this; - } - ticks = 0; - pitch = p; - duration = d; - releasing = false; - active = true; -} -void SoundPlayer::release() -{ - releasing = true; - duration = ticks; -} -void SoundPlayer::update() -{ - if (active) { - if (releasing) { - if (++ticks > (duration+sound.adsr.release)) { - stop(); - } - } - else { - if (ticks!=infinite) { - ++ticks; - } - if ((ticks==duration) and (duration!=infinite)) { - release(); - } - } - if (active) { - GD.__wstart(VOICES); - spimain.write(lowByte(pitch)); - spimain.write(highByte(pitch)); - unsigned int b = sound.adsr.evaluate(ticks,duration); - b = highByte(b*volume); - //spimain.write(b); - //spimain.write(b); - GD.__end(); - } - } -} -void SoundPlayer::stop() -{ - if (active) { - active = false; - GD.__wstart(VOICES+2); - spimain.write(0); - spimain.write(0); - GD.__end(); - } -} -#endif -/*--------------------------------------------- - SoundController object ----------------------------------------------*/ -void SoundController::reset() -{ - samplePos0 = 0; - samplePos1 = 0; - samplePos2 = 0; - samplePos3 = 0; - GD.__wstart(Coprocessor::samplePage()); - for (int i=0; i<256; ++i) { - spiutils.write(0); - } - GD.__end(); -#if SYNTHSOUNDS -SoundPlayer *p = soundPlayerList; - while (p) { - p->stop(); - p->isLinked = false; - p = p->link; - } -#endif -} - -void SoundController::update() -{ -#if SYNTHSOUNDS - { // Synthesized sounds - byte b = '0'; - SoundPlayer *p = soundPlayerList; - while (p) { - ++b; - p->update(); - p = p->link; - } - GD.wr(0,b); - } -#endif - { // Sampled sounds - unsigned int rp = Coprocessor::sampleReadPos(); - unsigned int wp = sampleWritePos; - unsigned int emptySpace = (rp-wp)&255; - if (emptySpace > BUFFERGAP) { - emptySpace -= BUFFERGAP; - if ((wp+emptySpace) > 256) { - // Write would overflow the buffer - need to split it into two - unsigned int b = 256-wp; - writeSamples(b); - writeSamples(emptySpace-b); - } - else { - // Can write a single block - writeSamples(emptySpace); - } - } - } -} - - -/*------------------------------------------------------------ - Useful little functions -------------------------------------------------------------*/ -void showNumber(int n, byte x, byte y) -{ - char temp[8]; - boolean neg = (n<0); - if (neg) { - n = -n; - } - char *o = temp; - int m = 10000; - while (m != 0) { - int d = n/m; - *o++ = d+'0'; - n -= d*m; - m /= 10; - } - *o-- = 0; - // Remove leading zeros - char *s = temp; - while ((s<o) and (*s=='0')) { - *s++ = ' '; - } - if (neg) { - *--s = '-'; - } - GD.__wstart((64*y)+x); - while (*s) { - spiutils.write(*s++); - } - GD.__end(); -} - -static void hexDigit(byte b) -{ - b = (b&0x0f)+'0'; - if (b > '9') { - b += 'a'-('9'+1); - } - spiutils.write(b); -} -static void hexPair(byte b) -{ - hexDigit(b>>4); - hexDigit(b); -} -void showHexNumber(unsigned int n, byte x, byte y) -{ - GD.__wstart((64*y)+x); - hexPair(highByte(n)); - hexPair(lowByte(n)); - GD.__end(); -} -void writeColor(int c) -{ - // Colors are five bits - encode in base 32 - c = (c&31)+'0'; - if (c > '9') { - c += 'A'-('9'+1); - } - pcu.printf("%d", c); -} -void sendScreenshot() -{ - pcu.baud(115200); - for (int i=0; i<300; ++i) { - // Ask for the line... - GD.wr16(SCREENSHOT_Y, 0x8000|i); - // Wait for it to appear - while ((GD.rd(SCREENSHOT_Y+1)&0x80)==0) { - delay(1); - } - // Send the line of pixels to the serial port - for (int x=0; x<400; ++x) { - uint16_t pixel = GD.rd16(SCREENSHOT+(x*2)); - writeColor(pixel>>10); // Red - writeColor(pixel>>5); // Green - writeColor(pixel); // Blue - } - pcu.printf("\n"); - } - // Restore sanity - GD.wr16(SCREENSHOT_Y, 0); -} +//#include <SPI.h> + +#include "utils.h" +#include "shield.h" +extern GDClass GD; +SPI spiutils(ARD_MOSI, ARD_MISO, ARD_SCK); // mosi, miso, sclk +Serial pcu(USBTX, USBRX); +/*--------------------------------------------- + Coprocessor controller +---------------------------------------------*/ +enum { + COPPERCTRL = COMM, + COPPERLISTSTART = COPPERCTRL, + SAMPLEREADPOS = COPPERCTRL+2, + SAMPLEREADPAGE = COPPERCTRL+4, + COPPERLISTPTR = COPPERCTRL+6, + YLINEECHO = COPPERCTRL+8, + DUMMYCOPPERLIST = COPPERCTRL+10 +}; + +// Available commands +enum copper_commands { + cp_halt='@', + cp_wait, + cp_write8, + cp_write16, + cp_copy +}; + +#include "j1.h" +void crash() +{ + unsigned int p; + while (1) { + GD.wr(0,p++); + } +} +static unsigned int samplePage_, listStart_; +void Coprocessor::reset(unsigned int spg) +{ + samplePage_ = spg; + GD.wr(J1_RESET, 1); // Halt the coprocessor + GD.copy(J1_CODE, copper_code, sizeof(copper_code)); + for (unsigned int i=J1_CODE; i<J1_CODE+256; i+=2) { + unsigned int w = GD.rd16(i); + if (w == 0xbf00) { GD.wr16(i,spg+0x8000); } + else if (w == COMM+0x8000) { listStart_ = i; } + } + CopperlistBuilder d; // Set up a fake copperlist + GD.wr(DUMMYCOPPERLIST,cp_halt); + GD.wr16(listStart_,DUMMYCOPPERLIST+0x8000); + GD.wr16(SAMPLEREADPAGE,samplePage_); + SoundController::reset(); + GD.wr(J1_RESET, 0); // Go! + delay(10); + SoundController::update(); +} + +void Coprocessor::setCopperlist(unsigned int addr) +{ + GD.wr(J1_RESET, 1); // Halt the coprocessor + GD.wr16(listStart_,addr+0x8000); + GD.wr(J1_RESET, 0); // Go! +} + +int Coprocessor::yline() +{ + return GD.rd16(YLINEECHO); +} +unsigned int Coprocessor::samplePage() +{ + return samplePage_; +} +byte Coprocessor::sampleReadPos() +{ + return GD.rd(SAMPLEREADPOS); +} + +// CopperlistBuilder +void CopperlistBuilder::put(byte b) +{ + GD.wr(out++,b); +} +void CopperlistBuilder::put16(unsigned int v) +{ + put(lowByte(v)); + put(highByte(v)); +} + +void CopperlistBuilder::begin(unsigned int dest) +{ + out = start = dest; +#if 0 + // Debugging... + write(0,65); + write(1,66); + write(2,67); + write(3,68); + write(4,69); + copy(0,64,4); + copy(64,128,3); + copy(128,131,5); +#endif +} +void CopperlistBuilder::wait(int line) +{ + if (line > 0) { + put(cp_wait); + put16(line); + } +} +void CopperlistBuilder::write(unsigned int addr, byte val) +{ + put(cp_write8); + put(val); + put16(addr); +} +void CopperlistBuilder::write16(unsigned int addr, unsigned int val) +{ + put(cp_write16); + put16(val); + put16(addr); +} +void CopperlistBuilder::copy(unsigned int src, unsigned int dst, unsigned int numBytes) +{ + if (numBytes > 0) { + put(cp_copy); + put16(src); + put16(dst); + put16(numBytes); + } +} +void CopperlistBuilder::end(bool executeNow) +{ + put(cp_halt); // Nice end to the list + if (executeNow) { + Coprocessor::setCopperlist(start); + } +} + +unsigned int CopperlistBuilder::position() +{ + return out; +} + +/*--------------------------------------------- + Sound +---------------------------------------------*/ +// The amount of space to leave in the buffer +#define BUFFERGAP 8 + +/*--------------------------------------------- + Sample playback +---------------------------------------------*/ +static byte sampleWritePos; +static prog_char *sampleStart0, *samplePos0, *sampleEnd0; +static prog_char *sampleStart1, *samplePos1, *sampleEnd1; +static prog_char *sampleStart2, *samplePos2, *sampleEnd2; +static prog_char *sampleStart3, *samplePos3, *sampleEnd3; +static bool repeatSample0, repeatSample1, repeatSample2, repeatSample3; + +static void writeSamples(byte num) +{ + if (num > 0) { + GD.__wstart(Coprocessor::samplePage()+sampleWritePos); + prog_char *s0=samplePos0, *se0=sampleEnd0; + prog_char *s1=samplePos1, *se1=sampleEnd1; + prog_char *s2=samplePos2, *se2=sampleEnd2; + prog_char *s3=samplePos3, *se3=sampleEnd3; + for (byte i=0; i<num; ++i) { + int val = 0; + if (s0) { + val += (char)pgm_read_byte(s0++); + if (s0 == se0) { + s0 = (repeatSample0)? sampleStart0: 0; + } + } + if (s1) { + val += (char)pgm_read_byte(s1++); + if (s1 == se1) { + s1 = (repeatSample1)? sampleStart1: 0; + } + } + if (s2) { + val += (char)pgm_read_byte(s2++); + if (s2 == se2) { + s2 = (repeatSample2)? sampleStart2: 0; + } + } + if (s3) { + val += (char)pgm_read_byte(s3++); + if (s3 == se3) { + s3 = (repeatSample3)? sampleStart3: 0; + } + } + spiutils.write(val>>2); + } + GD.__end(); + samplePos0 = s0; + samplePos1 = s1; + samplePos2 = s2; + samplePos3 = s3; + sampleWritePos += num; + } +} + +void SoundController::playSample(prog_char *s, int n, byte ch) +{ + bool repeat = (n < 0); + if (repeat) { + n = -n; + } + switch (ch) { + case 0: sampleStart0 = s; + samplePos0 = s; + sampleEnd0 = s+n; + repeatSample0 = repeat; + break; + case 1: sampleStart1 = s; + samplePos1 = s; + sampleEnd1 = s+n; + repeatSample1 = repeat; + break; + case 2: sampleStart2 = s; + samplePos2 = s; + sampleEnd2 = s+n; + repeatSample2 = repeat; + break; + case 3: sampleStart3 = s; + samplePos3 = s; + sampleEnd3 = s+n; + repeatSample3 = repeat; + break; + } +} + +#if SYNTHSOUNDS +/*--------------------------------------------- + Synthesized sounds +---------------------------------------------*/ +static SoundPlayer *soundPlayerList=0; +ADSR::ADSR(byte a, byte d, byte s, byte r) : attack(a), decay(d), sustain(s), release(r) +{ +} +byte ADSR::evaluate(unsigned int t, unsigned int r) +{ + if (t > r) { + // In release phase... + t -= r; + if (t > release) { + return 0; + } + t = sustain*(release-t); + return t/release; + } + else if (t >= (attack+decay)) { + // In sustain phase + return sustain; + } + else if (t > attack) { + // In decay phase + t -= attack; + t = (255-sustain)*t; + return 255-(t/decay); + } + else if (t > 0) { + // In attack phase + return (t*255)/attack; + } + return 0; +} + +SoundPlayer::SoundPlayer() +{ + volume = 255; + active = false; + isLinked = false; +} +SoundPlayer& SoundPlayer::setVolume(byte v) +{ + volume = v; + return *this; +} +SoundPlayer& SoundPlayer::setSound(const Sound& s) +{ + sound = s; + return *this; +} +void SoundPlayer::play(unsigned int p, unsigned int d) +{ + if (!isLinked) { + // Add me to the list of sounds to be updated + isLinked = true; + link = soundPlayerList; + soundPlayerList = this; + } + ticks = 0; + pitch = p; + duration = d; + releasing = false; + active = true; +} +void SoundPlayer::release() +{ + releasing = true; + duration = ticks; +} +void SoundPlayer::update() +{ + if (active) { + if (releasing) { + if (++ticks > (duration+sound.adsr.release)) { + stop(); + } + } + else { + if (ticks!=infinite) { + ++ticks; + } + if ((ticks==duration) and (duration!=infinite)) { + release(); + } + } + if (active) { + GD.__wstart(VOICES); + spimain.write(lowByte(pitch)); + spimain.write(highByte(pitch)); + unsigned int b = sound.adsr.evaluate(ticks,duration); + b = highByte(b*volume); + //spimain.write(b); + //spimain.write(b); + GD.__end(); + } + } +} +void SoundPlayer::stop() +{ + if (active) { + active = false; + GD.__wstart(VOICES+2); + spimain.write(0); + spimain.write(0); + GD.__end(); + } +} +#endif +/*--------------------------------------------- + SoundController object +---------------------------------------------*/ +void SoundController::reset() +{ + samplePos0 = 0; + samplePos1 = 0; + samplePos2 = 0; + samplePos3 = 0; + GD.__wstart(Coprocessor::samplePage()); + for (int i=0; i<256; ++i) { + spiutils.write(0); + } + GD.__end(); +#if SYNTHSOUNDS +SoundPlayer *p = soundPlayerList; + while (p) { + p->stop(); + p->isLinked = false; + p = p->link; + } +#endif +} + +void SoundController::update() +{ +#if SYNTHSOUNDS + { // Synthesized sounds + byte b = '0'; + SoundPlayer *p = soundPlayerList; + while (p) { + ++b; + p->update(); + p = p->link; + } + GD.wr(0,b); + } +#endif + { // Sampled sounds + unsigned int rp = Coprocessor::sampleReadPos(); + unsigned int wp = sampleWritePos; + unsigned int emptySpace = (rp-wp)&255; + if (emptySpace > BUFFERGAP) { + emptySpace -= BUFFERGAP; + if ((wp+emptySpace) > 256) { + // Write would overflow the buffer - need to split it into two + unsigned int b = 256-wp; + writeSamples(b); + writeSamples(emptySpace-b); + } + else { + // Can write a single block + writeSamples(emptySpace); + } + } + } +} + + +/*------------------------------------------------------------ + Useful little functions +------------------------------------------------------------*/ +void showNumber(int n, byte x, byte y) +{ + char temp[8]; + boolean neg = (n<0); + if (neg) { + n = -n; + } + char *o = temp; + int m = 10000; + while (m != 0) { + int d = n/m; + *o++ = d+'0'; + n -= d*m; + m /= 10; + } + *o-- = 0; + // Remove leading zeros + char *s = temp; + while ((s<o) and (*s=='0')) { + *s++ = ' '; + } + if (neg) { + *--s = '-'; + } + GD.__wstart((64*y)+x); + while (*s) { + spiutils.write(*s++); + } + GD.__end(); +} + +static void hexDigit(byte b) +{ + b = (b&0x0f)+'0'; + if (b > '9') { + b += 'a'-('9'+1); + } + spiutils.write(b); +} +static void hexPair(byte b) +{ + hexDigit(b>>4); + hexDigit(b); +} +void showHexNumber(unsigned int n, byte x, byte y) +{ + GD.__wstart((64*y)+x); + hexPair(highByte(n)); + hexPair(lowByte(n)); + GD.__end(); +} +void writeColor(int c) +{ + // Colors are five bits - encode in base 32 + c = (c&31)+'0'; + if (c > '9') { + c += 'A'-('9'+1); + } + pcu.printf("%d", c); +} +void sendScreenshot() +{ + pcu.baud(115200); + for (int i=0; i<300; ++i) { + // Ask for the line... + GD.wr16(SCREENSHOT_Y, 0x8000|i); + // Wait for it to appear + while ((GD.rd(SCREENSHOT_Y+1)&0x80)==0) { + delay(1); + } + // Send the line of pixels to the serial port + for (int x=0; x<400; ++x) { + uint16_t pixel = GD.rd16(SCREENSHOT+(x*2)); + writeColor(pixel>>10); // Red + writeColor(pixel>>5); // Green + writeColor(pixel); // Blue + } + pcu.printf("\n"); + } + // Restore sanity + GD.wr16(SCREENSHOT_Y, 0); +}
--- a/utils.h Sat Sep 29 13:01:42 2012 +0000 +++ b/utils.h Thu Dec 20 21:33:52 2012 +0000 @@ -1,232 +1,232 @@ -#ifndef COM_ARTLUM_GDUTILS_INCLUDED -#define COM_ARTLUM_GDUTILS_INCLUDED -#include "arduino.h" -#include "GD.h" -//#include "WProgram.h" - -/*--------------------------------------------------- - Coprocessor controller - makes it easy to do - raster effects (eg. split screens) without - writing any FORTH. - - The way this works is that you build a list of - instructions in memory (a "copperlist") and - the coprocessor will execute the list on every - video frame. - - Code samples: - - void setup() { - ... - // Make a copperlist to change a palette color on line 100 - // The copperlist is stored on the Gameduino at address 0x3f80 - Coprocessor::reset(); - CopperlistBuilder cp; - cp.begin(0x3f80); - cp.wait(100); - cp.write16(PALETTE4A, 0x7fff); - cp.end(); // And start using the new copperlist - } - - Modifying an existing copperlist: - - // Make a copperlist to set the horizontal scroll register - // on line 220 and modify the copperlist. - // a) Build the list - unsigned int XscrollInst; - void setup() { - ... - CopperlistBuilder cp; - cp.begin(0x3f80); - cp.wait(220); - XscrollInst = cp.position(); // Get current output location - cp.write16(SCROLL_X, 0); - cp.end(); - } - // b) Modify the list with current 'xscroll' - void loop() { - CopperlistBuilder cp; - cp.begin(XscrollInst) // Where the 'write16()' instruction is - cp.write16(SCROLL_X, xscroll); // Overwrite the previous instruction - } - - Notes: - The Coprocessor object uses the "COMM" block - of memory at 0x2980 so don't mess with it. - - The coprocessor also provides support for the - sound functions below. ----------------------------------------------------*/ -class Coprocessor { -public: - // This initializes everything and load the coprocessor code. - // You should call this in your setup() function after "GD.begin();" - // - // The sample page is the page of Gameduino memory to - // use as a buffer for sample playback. It *must* be - // on a page boundry (ie. bottom 8 bits are 0) and - // the whole page will be used so you can't use it - // for anything else. - static void reset(unsigned int samplePage=0x3f00); // Default: Use memory from 0x3f00 to 0x3fff - - // Select a copperlist. The list will start running on the next video frame. - // nb. The "CopperlistBuilder::end()" function normally calls this automatically - // (unless you tell it not to...) - static void setCopperlist(unsigned int addr); - - // Where the sample playback page is located - static unsigned int samplePage(); - - // Where the coprocessor is currently reading samples - // from in the sample page. Use this info to keep the - // page full of fresh sample data for playback - static byte sampleReadPos(); - - // A copy of the coprocessor YLINE register - static int yline(); -}; - -// This object helps you make a copperlist in memory -class CopperlistBuilder { - unsigned int out,start; - void put(byte); - void put16(unsigned int); -public: - // Available commands are: - // * Wait for a raster line - // * Write a byte to a memory location - // * Write a 16-bit word to a memory location - // * Copy a block of memory from one place to another - void begin(unsigned int dest); - void wait(int line); - void write(unsigned int addr, byte val); - void write16(unsigned int addr, unsigned int val); - void copy(unsigned int src, unsigned int dst, unsigned int numBytes); - void end(bool executeNow=true); - - // Where I'm currently outputting - unsigned int position(); -}; - - -/*------------------------------------------------------------------ - Sound functions - play synthesized sounds and sound samples - - These functions require support from the Coprocessor object - above. If you load different microcode they'll stop working... -------------------------------------------------------------------*/ - -/*------------------------------------------------------------------ - Synthesized sounds -------------------------------------------------------------------*/ -#define SYNTHSOUNDS 0 -#if SYNTHSOUNDS -// ADSR volume envelope -struct ADSR { - byte attack; // Attack time (in clock ticks) - byte decay; // Decay time (in clock ticks) - byte sustain; // Sustain level [0..255] - byte release; // Release time (in clock ticks) - ADSR(byte a=4, byte d=4, byte s=90, byte r=30); - byte evaluate(unsigned int elapsedTime, unsigned int releaseTime); -}; - -// Change pitch of a sound as it plays -struct PitchModulator { - // Vibrato - byte vibratoDelay; // Delay before vibrato starts (in clock ticks) - byte vibrato; // Amount of vibrato (percentage of note pitch) - char vibratoDelta; // Added to 'vibrato' every clock tick - // Pitch Sweep - byte sweepDelay; // Delay before sweep starts (in clock ticks) - byte sweep; - char sweepDelta; - PitchModulator() { - vibratoDelay = 0; - vibrato = 0; - vibratoDelta = 0; - } - int evaluate(int startpitch, unsigned int time); -}; - -// All the parameters for a sound -struct Sound { - ADSR adsr; - PitchModulator pm; -}; - -class SoundPlayer { - // Playback parameters - Sound sound; - byte volume; - unsigned int pitch; - unsigned int duration; - // Internal vars - unsigned int ticks; - bool active, releasing; - // Sound players form a linked list - bool isLinked; - SoundPlayer *link; - // The SoundPlayer is updated from SoundController - void update(); - friend class SoundController; - // You can't copy me... - SoundPlayer(const SoundPlayer&); - void operator=(const SoundPlayer&); -public: - SoundPlayer(); - - // Set the sound parameters - SoundPlayer& setSound(const Sound&); - - // Set playback volume in range [0..255], default = 255 - SoundPlayer& setVolume(byte); - - // Play a sound, pitch in Hz, duration in clock ticks. - // If duration is 'infinite' then the sound plays until you call 'release()' - // One "clock tick" is equivalent to one call to "SoundController::update()" - enum { infinite=0x7fff }; - void play(unsigned int pitchHz, unsigned int duration=infinite); - - // Make the current sound enter the 'release' phase - void release(); - - // Stop sound playback immediately - void stop(); -}; -#endif - -/*------------------------------------------------------------------ - Main sound controller object -------------------------------------------------------------------*/ -struct SoundController { - // Reset all sounds, return to silence - static void reset(); - - // Update all sound - call this at least once every video frame. - // The frequency at which you call this function is one "clock tick" for synthesised sounds - static void update(); - - // Play a sound sample from program memory - // Samples are eight bits and will be played at - // the system sample rate (see "Coprocessor"). - // if "numBytes" is negative, the sample will repeat until you play - // another sample on the channel (eg. pass a null pointer to "playSample()"...) - static void playSample(prog_char*, int numBytes, byte channel); -}; - - - -/*------------------------------------------------------------ - Useful little functions -------------------------------------------------------------*/ -// Show a number on screen -void showNumber(int n, byte x, byte y); -void showHexNumber(unsigned int n, byte x, byte y); - -// Send screenshot to serial port - -void sendScreenshot(); - -// COM_ARTLUM_GDUTILS_INCLUDED -#endif +#ifndef COM_ARTLUM_GDUTILS_INCLUDED +#define COM_ARTLUM_GDUTILS_INCLUDED +#include "arduino.h" +#include "GD.h" +//#include "WProgram.h" + +/*--------------------------------------------------- + Coprocessor controller - makes it easy to do + raster effects (eg. split screens) without + writing any FORTH. + + The way this works is that you build a list of + instructions in memory (a "copperlist") and + the coprocessor will execute the list on every + video frame. + + Code samples: + + void setup() { + ... + // Make a copperlist to change a palette color on line 100 + // The copperlist is stored on the Gameduino at address 0x3f80 + Coprocessor::reset(); + CopperlistBuilder cp; + cp.begin(0x3f80); + cp.wait(100); + cp.write16(PALETTE4A, 0x7fff); + cp.end(); // And start using the new copperlist + } + + Modifying an existing copperlist: + + // Make a copperlist to set the horizontal scroll register + // on line 220 and modify the copperlist. + // a) Build the list + unsigned int XscrollInst; + void setup() { + ... + CopperlistBuilder cp; + cp.begin(0x3f80); + cp.wait(220); + XscrollInst = cp.position(); // Get current output location + cp.write16(SCROLL_X, 0); + cp.end(); + } + // b) Modify the list with current 'xscroll' + void loop() { + CopperlistBuilder cp; + cp.begin(XscrollInst) // Where the 'write16()' instruction is + cp.write16(SCROLL_X, xscroll); // Overwrite the previous instruction + } + + Notes: + The Coprocessor object uses the "COMM" block + of memory at 0x2980 so don't mess with it. + + The coprocessor also provides support for the + sound functions below. +---------------------------------------------------*/ +class Coprocessor { +public: + // This initializes everything and load the coprocessor code. + // You should call this in your setup() function after "GD.begin();" + // + // The sample page is the page of Gameduino memory to + // use as a buffer for sample playback. It *must* be + // on a page boundry (ie. bottom 8 bits are 0) and + // the whole page will be used so you can't use it + // for anything else. + static void reset(unsigned int samplePage=0x3f00); // Default: Use memory from 0x3f00 to 0x3fff + + // Select a copperlist. The list will start running on the next video frame. + // nb. The "CopperlistBuilder::end()" function normally calls this automatically + // (unless you tell it not to...) + static void setCopperlist(unsigned int addr); + + // Where the sample playback page is located + static unsigned int samplePage(); + + // Where the coprocessor is currently reading samples + // from in the sample page. Use this info to keep the + // page full of fresh sample data for playback + static byte sampleReadPos(); + + // A copy of the coprocessor YLINE register + static int yline(); +}; + +// This object helps you make a copperlist in memory +class CopperlistBuilder { + unsigned int out,start; + void put(byte); + void put16(unsigned int); +public: + // Available commands are: + // * Wait for a raster line + // * Write a byte to a memory location + // * Write a 16-bit word to a memory location + // * Copy a block of memory from one place to another + void begin(unsigned int dest); + void wait(int line); + void write(unsigned int addr, byte val); + void write16(unsigned int addr, unsigned int val); + void copy(unsigned int src, unsigned int dst, unsigned int numBytes); + void end(bool executeNow=true); + + // Where I'm currently outputting + unsigned int position(); +}; + + +/*------------------------------------------------------------------ + Sound functions - play synthesized sounds and sound samples + + These functions require support from the Coprocessor object + above. If you load different microcode they'll stop working... +------------------------------------------------------------------*/ + +/*------------------------------------------------------------------ + Synthesized sounds +------------------------------------------------------------------*/ +#define SYNTHSOUNDS 0 +#if SYNTHSOUNDS +// ADSR volume envelope +struct ADSR { + byte attack; // Attack time (in clock ticks) + byte decay; // Decay time (in clock ticks) + byte sustain; // Sustain level [0..255] + byte release; // Release time (in clock ticks) + ADSR(byte a=4, byte d=4, byte s=90, byte r=30); + byte evaluate(unsigned int elapsedTime, unsigned int releaseTime); +}; + +// Change pitch of a sound as it plays +struct PitchModulator { + // Vibrato + byte vibratoDelay; // Delay before vibrato starts (in clock ticks) + byte vibrato; // Amount of vibrato (percentage of note pitch) + char vibratoDelta; // Added to 'vibrato' every clock tick + // Pitch Sweep + byte sweepDelay; // Delay before sweep starts (in clock ticks) + byte sweep; + char sweepDelta; + PitchModulator() { + vibratoDelay = 0; + vibrato = 0; + vibratoDelta = 0; + } + int evaluate(int startpitch, unsigned int time); +}; + +// All the parameters for a sound +struct Sound { + ADSR adsr; + PitchModulator pm; +}; + +class SoundPlayer { + // Playback parameters + Sound sound; + byte volume; + unsigned int pitch; + unsigned int duration; + // Internal vars + unsigned int ticks; + bool active, releasing; + // Sound players form a linked list + bool isLinked; + SoundPlayer *link; + // The SoundPlayer is updated from SoundController + void update(); + friend class SoundController; + // You can't copy me... + SoundPlayer(const SoundPlayer&); + void operator=(const SoundPlayer&); +public: + SoundPlayer(); + + // Set the sound parameters + SoundPlayer& setSound(const Sound&); + + // Set playback volume in range [0..255], default = 255 + SoundPlayer& setVolume(byte); + + // Play a sound, pitch in Hz, duration in clock ticks. + // If duration is 'infinite' then the sound plays until you call 'release()' + // One "clock tick" is equivalent to one call to "SoundController::update()" + enum { infinite=0x7fff }; + void play(unsigned int pitchHz, unsigned int duration=infinite); + + // Make the current sound enter the 'release' phase + void release(); + + // Stop sound playback immediately + void stop(); +}; +#endif + +/*------------------------------------------------------------------ + Main sound controller object +------------------------------------------------------------------*/ +struct SoundController { + // Reset all sounds, return to silence + static void reset(); + + // Update all sound - call this at least once every video frame. + // The frequency at which you call this function is one "clock tick" for synthesised sounds + static void update(); + + // Play a sound sample from program memory + // Samples are eight bits and will be played at + // the system sample rate (see "Coprocessor"). + // if "numBytes" is negative, the sample will repeat until you play + // another sample on the channel (eg. pass a null pointer to "playSample()"...) + static void playSample(prog_char*, int numBytes, byte channel); +}; + + + +/*------------------------------------------------------------ + Useful little functions +------------------------------------------------------------*/ +// Show a number on screen +void showNumber(int n, byte x, byte y); +void showHexNumber(unsigned int n, byte x, byte y); + +// Send screenshot to serial port + +void sendScreenshot(); + +// COM_ARTLUM_GDUTILS_INCLUDED +#endif