Library for MI0283QT-2 LCD
Revision 0:7ad454fed160, committed 2012-05-23
- Comitter:
- clemente
- Date:
- Wed May 23 06:25:31 2012 +0000
- Commit message:
Changed in this revision
diff -r 000000000000 -r 7ad454fed160 MI0283QTlib.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MI0283QTlib.cpp Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,1332 @@ +/* mbed Graphics LCD library. Library for MI0283QT-2 screen. + + Copyright (c) 2011 NXP 3803 + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "MI0283QTlib.h" +#include "mbed.h" +#include "Terminal24x12.h" +#include "Terminal12x6.h" + +#ifdef _USE_FILE +#include "SDFileSystem.h" +#endif + +/* GLCD definition and functions. */ +#define LCD_MODE_262K 5 // 5=65K, 6=262K colors. + +/* */ +#define LCD_FAST_SPEED 40000000 +#define LCD_SLOW_SPEED 3000000 +// +#define LCD_ID (0) +#define LCD_DATA ((0x72)|(LCD_ID<<2)) +#define LCD_REGISTER ((0x70)|(LCD_ID<<2)) +// +#define LCD_WIDTH (320) +#define LCD_HEIGHT (240) + +#if ( LCD_MODE_262K==6 ) + #define RGB(r,g,b) (((r&0xFC)<<16)|((g&0xFC)<<8)|((b&0xFC))) //6 red | 6 green | 6 blue +#else + #define RGB(r,g,b) (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue + #endif + +#define LCD_RST_DISABLE() _rst = 1; +#define LCD_RST_ENABLE() _rst = 0; +#define LCD_CS_DISABLE() _cs = 1; +#define LCD_CS_ENABLE() _cs = 0; + +//MODDMA dma; + +GLCD::GLCD( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rst, PinName bklgh) : _spi( mosi, miso, sclk), _cs( cs), _rst( rst), _bklgh( bklgh) { + // deselect the device + LCD_CS_DISABLE(); + LCD_RST_ENABLE(); + // defaults params + SPIClkSpeed=LCD_FAST_SPEED; + SPISlowClkSpeed=LCD_SLOW_SPEED; + SPIMode=3; + LCDBkLight=0.5; + // + BackGroundColor=LCD_BLACK; + // +#if 0 +struct _FONTINFO { + unsigned char *pText; + unsigned int h_size; + unsigned int v_size; + unsigned int h_line; +}; +#endif + + FontInfo[0].pText=(unsigned char*)&Text12x6[0]; + FontInfo[0].h_size=6; + FontInfo[0].v_size=12; + FontInfo[0].h_line=1; + + FontInfo[1].pText=(unsigned char*)&Text24x12[0]; + FontInfo[1].h_size=12; + FontInfo[1].v_size=24; + FontInfo[1].h_line=2; + + FontIdx=0; +} + +void GLCD::backlighton( void) +{ + backlightset( 1); +} + +void GLCD::backlightoff( void) +{ + backlightset( 0); +} + +void GLCD::backlightset( double val) +{ + LCDBkLight=val; + _bklgh = LCDBkLight; +} + +void GLCD::lcd_init( void) +{ + _spi.format(8,SPIMode); + _spi.frequency( SPIClkSpeed); + _bklgh = LCDBkLight; + + lcd_reset(); + +} + +void GLCD::lcd_init( unsigned int speedf) +{ + _spi.format(8,SPIMode); + _spi.frequency( speedf); + SPIClkSpeed=speedf; + _bklgh = LCDBkLight; + + lcd_reset(); + +} + +void GLCD::lcd_init( unsigned int speedf, unsigned int speeds) +{ + _spi.format(8,SPIMode); + _spi.frequency( speedf); + SPIClkSpeed=speedf; + SPISlowClkSpeed=speeds; + _bklgh = LCDBkLight; + + lcd_reset(); + +} + +void GLCD::lcd_setfontsmall( void) +{ + FontIdx=0; +} + +void GLCD::lcd_setfontbig( void) +{ + FontIdx=1; +} + +void GLCD::lcd_setbackgroundcolor( unsigned int color) { + BackGroundColor=color; +} + +void GLCD::lcd_drawstr(char *__putstr, unsigned int xpos, unsigned int ypos, unsigned int color) +{ + char __ps; + unsigned int xp,yp; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + xp=xpos; yp=ypos; + + while((__ps = *__putstr)) + { + __putstr++; + if (__ps== 0) break; + lcd_drawch(__ps,xp,yp, color); + xp+=FontInfo[FontIdx].h_size; // la dimensione del font per adesso è impostata manualmente. + } + /* Reset to slow speed. */ + _spi.frequency( SPISlowClkSpeed); +} + +void GLCD::lcd_drawch( unsigned ch, unsigned int xpos, unsigned int ypos, unsigned int color) +{ + unsigned int H_Line, H_Size, V_Size, SrcInc; + unsigned char *pSrc; + unsigned int i, j, txtcolor; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + // per adesso imposto i valori di queste grandezze manualmente + H_Line=FontInfo[FontIdx].h_line; + H_Size=FontInfo[FontIdx].h_size; + V_Size=FontInfo[FontIdx].v_size; + + // + lcd_area(xpos, ypos, (H_Size-1)+xpos, (V_Size-1)+ypos); + // printf("Programmo area: xpos=%d, ypos=%d, Hs=%d, Vs=%d\r\n", xpos,ypos,(H_Size-1)+xpos, (V_Size-1)+ypos); + // wait( 1); + // + pSrc=(unsigned char*)&FontInfo[FontIdx].pText[0]+(H_Line*V_Size*ch); + // printf("Carico il puntatore @ Text[%d]\r\n", (H_Line*V_Size*ch)); + // wait( 1); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + // + for ( i=0; i<V_Size; i++) { + SrcInc=H_Line; + for ( j=0; j<H_Size; j++) { + txtcolor=(*pSrc & (1UL<<(j&0x07)))?color:BackGroundColor; +#if (LCD_MODE_262K==6 ) + _spi.write( (txtcolor&0x00FC0000)>>18 ); + _spi.write( (txtcolor&0x0000FC00)>>10 ); + _spi.write( (txtcolor&0x000000FC)>>2); +#else + lcd_draw( txtcolor); +#endif // + if ((j&0x07) == 7) { + ++pSrc; + --SrcInc; + } + } + pSrc += SrcInc; + } + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); +} + +void GLCD::lcd_draw(unsigned int color) +{ + _spi.write(color>>8); + _spi.write(color); + + return; +} + + +void GLCD::lcd_drawstop(void) +{ + LCD_CS_DISABLE(); + + return; +} + + +void GLCD::lcd_drawstart(void) +{ + LCD_CS_ENABLE(); + _spi.write(LCD_REGISTER); + _spi.write(0x22); + LCD_CS_DISABLE(); + + LCD_CS_ENABLE(); + _spi.write(LCD_DATA); + + return; +} + +inline void GLCD::lcd_cmd(unsigned int reg, unsigned int param) +{ + LCD_CS_ENABLE(); + _spi.write( LCD_REGISTER); + _spi.write( reg); + LCD_CS_DISABLE(); + + LCD_CS_ENABLE(); + _spi.write( LCD_DATA); + _spi.write( param); + LCD_CS_DISABLE(); + + return; +} + + +void GLCD::lcd_data(unsigned int c) +{ + LCD_CS_ENABLE(); + _spi.write(LCD_DATA); + _spi.write(c>>8); + _spi.write(c); + LCD_CS_DISABLE(); + + return; +} + +void GLCD::lcd_area(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1) +{ + lcd_cmd(0x03, (x0>>0)); //set x0 + lcd_cmd(0x02, (x0>>8)); //set x0 + lcd_cmd(0x05, (x1>>0)); //set x1 + lcd_cmd(0x04, (x1>>8)); //set x1 + lcd_cmd(0x07, (y0>>0)); //set y0 + lcd_cmd(0x06, (y0>>8)); //set y0 + lcd_cmd(0x09, (y1>>0)); //set y1 + lcd_cmd(0x08, (y1>>8)); //set y1 + + return; +} + +void GLCD::lcd_setverticalarea( unsigned int topf, unsigned int height, unsigned int butf) +{ + if ( (topf+height+butf) > 320) + return; + + lcd_cmd( 0x0F, (topf>>0)); + lcd_cmd( 0x0E, (topf>>8)); + lcd_cmd( 0x11, (height>>0)); + lcd_cmd( 0x10, (height>>8)); + lcd_cmd( 0x13, (butf>>0)); + lcd_cmd( 0x12, (butf>>8)); +} + +void GLCD::lcd_scrollstartadd( unsigned int ssa) +{ + lcd_cmd( 0x15, (ssa>>0)); + lcd_cmd( 0x14, (ssa>>8)); +} + +void GLCD::lcd_scrollstart( void) +{ + lcd_cmd( 0x01, 0x0008); +} + +void GLCD::lcd_scrollstop( void) +{ + lcd_cmd( 0x01, 0x0000); +} + +unsigned int GLCD::lcd_RGB( unsigned int color) +{ + + return ( RGB( (( color&0x00FF0000)>>16), ( ( color&0x0000FF00)>>8), ( color&0x000000FF)) ); + +} + +unsigned int GLCD::lcd_RGB( unsigned int r, unsigned int g, unsigned int b) +{ + return ( RGB( r, g, b)); +} + + +void GLCD::lcd_clear(unsigned int color) +{ + unsigned int i; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1)); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); + _spi.frequency( SPIClkSpeed); +#endif + + for(i=(LCD_WIDTH*LCD_HEIGHT); i!=0; i--) + { +#if (LCD_MODE_262K==6 ) + _spi.write( (color&0x00FC0000)>>18 ); + _spi.write( (color&0x0000FC00)>>10 ); + _spi.write( (color&0x000000FC)>>2); +#else + lcd_draw( color); +#endif + } + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); + _spi.frequency( SPIClkSpeed); +#endif + lcd_drawstop(); + + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + return; +} + +void GLCD::lcd_clear(unsigned int x0, unsigned int y0, unsigned int w, unsigned int h, unsigned int color) +{ + unsigned int i; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(x0, y0, (w-1)+x0, (h-1)+y0); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); + _spi.frequency( SPIClkSpeed); +#endif + + for(i=(w*h); i!=0; i--) + { +#if (LCD_MODE_262K==6 ) + _spi.write( (color&0x00FC0000)>>18 ); + _spi.write( (color&0x0000FC00)>>10 ); + _spi.write( (color&0x000000FC)>>2); +#else + lcd_draw( color); +#endif + } + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); + _spi.frequency( SPIClkSpeed); +#endif + lcd_drawstop(); + + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + return; +} + + +#ifdef _USE_FILE +unsigned int GLCD::lcd_drawimage(char *fname) +{ + unsigned int i; + unsigned char r, g, b; + + FILE *fp; + + if ( (fp=fopen( fname, "r")) == NULL ) { + return 0; + } + + lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1)); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,3); +#endif + + for(i=(LCD_WIDTH*LCD_HEIGHT); i!=0; i--) + { + // + r=fgetc( fp); + g=fgetc( fp); + b=fgetc( fp); + // +#if ( LCD_MODE_262K==6 ) + _spi.write( (r&0xFC)>>2 ); + _spi.write( (g&0xFC)>>2 ); + _spi.write( (b&0xFC)>>2 ); +#else + lcd_draw( RGB( r, g, b)); +#endif + // + if ( feof( fp)) { + fclose( fp); + break; + } + } + // + if ( fp) + fclose( fp); + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,3); +#endif + lcd_drawstop(); + + return 1; +} +#endif + + +#ifdef _USE_FILE + +unsigned int GLCD::lcd_drawimagebuff(char *fname) +{ + unsigned int i; + unsigned char r, g, b; + unsigned char buffer[320*BUFFER_LINE*3]; + unsigned int size, idx, y=0; + + FILE *fp; + + if ( (fp=fopen( fname, "r")) == NULL ) { + return 0; + } + + size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp); + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1)); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + idx=0; + for(i=(LCD_WIDTH*LCD_HEIGHT); i!=0; i--) + { + // + r=buffer[idx++]; + g=buffer[idx++]; + b=buffer[idx++]; + // +#if ( LCD_MODE_262K==6 ) + _spi.write( (r&0xFC)>>2 ); + _spi.write( (g&0xFC)>>2 ); + _spi.write( (b&0xFC)>>2 ); +#else + lcd_draw( RGB( r, g, b)); +#endif + // + if ( idx>=size){ +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + lcd_drawstop(); + // + if ( feof( fp)) { + fclose( fp); + break; + } + // + size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp); + idx=0; + y+=BUFFER_LINE; + lcd_area(0, y, (LCD_WIDTH-1), (LCD_HEIGHT-1)); + lcd_drawstart(); +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + } + } + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + // + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + // + if ( fp) + fclose( fp); + + return 1; +} +#endif + +#ifdef _USE_FILE +unsigned int GLCD::lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum, unsigned int xstart, unsigned int ystart, unsigned int scale) +{ + unsigned int i, idx; + unsigned char r, g, b; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(xstart, lnum+ystart, ((LCD_WIDTH/scale)-1)+xstart, lnum+ystart); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + idx=0; + for(i=LCD_WIDTH/scale; i!=0; i--) + { + // + r=buffer[idx]; + g=buffer[idx+1]; + b=buffer[idx+2]; + // + idx+=(scale*3); + // +#if ( LCD_MODE_262K==6 ) + _spi.write( (r&0xFC)>>2 ); + _spi.write( (g&0xFC)>>2 ); + _spi.write( (b&0xFC)>>2 ); +#else + lcd_draw( RGB( r, g, b)); +#endif + } + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + // + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + + return 1; +} +#endif + +#ifdef _USE_FILE +unsigned int GLCD::lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum) +{ + unsigned int i, idx; + unsigned char r, g, b; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(0, lnum, (LCD_WIDTH-1), lnum); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + idx=0; + for(i=LCD_WIDTH; i!=0; i--) + { + // + r=buffer[idx++]; + g=buffer[idx++]; + b=buffer[idx++]; + // +#if ( LCD_MODE_262K==6 ) + _spi.write( (r&0xFC)>>2 ); + _spi.write( (g&0xFC)>>2 ); + _spi.write( (b&0xFC)>>2 ); +#else + lcd_draw( RGB( r, g, b)); +#endif + } + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + // + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + + return 1; +} +#endif + +#ifdef _USE_FILE + +unsigned int GLCD::lcd_drawmovie(char *fname, unsigned int x_start, unsigned int y_start) +{ + unsigned int i; + unsigned char r, g, b; + + FILE *fp; + + if ( (fp=fopen( fname, "r")) == NULL ) { + return 0; + } + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_drawstop(); + // lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1)); + lcd_area(x_start, y_start, (80-1)+x_start, (60-1)+y_start); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + while( 1) + { + // + r=fgetc( fp); + g=fgetc( fp); + b=fgetc( fp); + // +#if ( LCD_MODE_262K==6 ) + _spi.write( (r&0xFC)>>2 ); + _spi.write( (g&0xFC)>>2 ); + _spi.write( (b&0xFC)>>2 ); +#else + lcd_draw( RGB( r, g, b)); +#endif + // + if ( feof( fp)) { + fclose( fp); + break; + } + } + // + if ( fp) + fclose( fp); + // +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + lcd_drawstop(); + + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + + return 1; +} +#endif + +#ifdef _USE_FILE +#if ( LCD_MODE_262K==5 ) + +// I will use a portion of memory proportional to a defined number of rows. +#define cLINE_NUMBER 40 + +// Ping-pong buffer. The buffer are proportional to the number of pixel per row (160), to the +// numeber of line I want to read and to the number of byte for each pixel. In this case I have +// a ready-made file with each pixel defined with 16bit (RGB==565bit) +unsigned char buffer[160*cLINE_NUMBER*2] __attribute((section("AHBSRAM1"),aligned)); +unsigned char buffer1[160*cLINE_NUMBER*2] __attribute((section("AHBSRAM0"),aligned)); + +/** DMA_IRQHandler Called by DMA. + * Please to learn more read: http://mbed.org/users/AjK/programs/SOWB/lg489e/docs/flash__read_8c_source.html + */ +volatile int DMA_flag; +extern "C" void DMA_IRQHandler(void) __irq { + if (LPC_GPDMA->DMACIntStat & 1) { + if (LPC_GPDMA->DMACIntTCStat & 1) { + DMA_flag=1; + LPC_GPDMA->DMACIntTCClear = 1; + } + if (LPC_GPDMA->DMACIntErrStat & 1) { + LPC_GPDMA->DMACIntErrClr = 1; + } + } +} + +/** Linked List structure. I use this structure to send with one shot 3x3200 byte to the GLCD. + */ +typedef struct { + uint32_t SrcAddr; /* Source Address */ + uint32_t DstAddr; /* Destination address */ + uint32_t NextLLI; /* Next LLI address, otherwise set to '0' */ + uint32_t Control; /* GPDMA Control Register of this LLI. Reflect the content of LPC_GPDMACH0->DMACCControl */ +} GPDMA_LLI; + +/* Let declare the 3 linked list. The first LLI address will be programmed inside the DMA registers. */ +GPDMA_LLI LLI0, LLI1, LLI2; + +#define DMA_CHANNEL_ENABLE 1 +#define DMA_TRANSFER_TYPE_M2P (1UL << 11) +#define DMA_CHANNEL_TCIE (1UL << 31) +#define DMA_CHANNEL_SRC_INC (1UL << 26) +#define DMA_MASK_IE (1UL << 14) +#define DMA_MASK_ITC (1UL << 15) +#define DMA_CHANNEL_SRC_PERIPHERAL_SSP0_RX (1UL << 1) +#define DMA_CHANNEL_SRC_PERIPHERAL_SSP0_TX (0UL << 1) +#define DMA_CHANNEL_DST_PERIPHERAL_SSP0_RX (1UL << 6) +#define DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX (0UL << 6) + +/** Display a movie file. The file is ready made to speed up the entire process. + * + * @param the name file. + * + */ +unsigned int GLCD::lcd_drawmoviebuff(char *fname, unsigned int x_start, unsigned int y_start) +{ + unsigned int i; + unsigned char r, g, b; + unsigned int size, idx, y=0; + unsigned char *pframe; + FILE *fp; + + LPC_SSP0->DMACR=2; + + /* Load the content to the LLI */ + /* The LLI are chained, so I load the address to the corrispondent LLI*/ + LLI0.NextLLI=(uint32_t)&LLI1; + LLI1.NextLLI=(uint32_t)&LLI2; + LLI2.NextLLI=0; // The last is NULL to stop the chain. + + /* The dimension of the buffer are fixed. So each LLI have a fixed pointer to the owned block of memory */ + /* Each buffer is 16KB long but I use fixed chunk following this rule: */ + /* The image is 160x120x2 = 38400 byte big. I have divided this amount by three so that it can */ + /* use the two memory buffer. Each chunk is now 12800 byte. But the DMA can only transfer 4KB of RAM, */ + /* so I divided this amount of memory by four, 3200 byte, and use three LLI to let the DMA to send the entire buffer all at once. */ + /* The LLI are three because the DMA is programmed with the first chund of buffer. At the end of this operation, the DMA load the LLI */ + /* and sends the remaining buffers. */ + LLI0.SrcAddr=(uint32_t)&buffer[3200]; + LLI1.SrcAddr=(uint32_t)&buffer[3200+3200]; + LLI2.SrcAddr=(uint32_t)&buffer[3200+3200+3200]; + /* OK, the destination address is the same for all LLI. Please change if you use a different SPI. */ + LLI0.DstAddr=(uint32_t)&LPC_SSP0->DR; + LLI1.DstAddr=(uint32_t)&LPC_SSP0->DR; + LLI2.DstAddr=(uint32_t)&LPC_SSP0->DR; + /* This is the control register. */ + LLI0.Control= DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200; + LLI1.Control= DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200; + LLI2.Control= DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200; + /* ****************************************************** */ + + /* Power up the GPDMA. */ + LPC_SC->PCONP |= (1UL << 29); + LPC_GPDMA->DMACConfig = 1; + LPC_GPDMA->DMACIntTCClear = 0x1; + // LPC_GPDMA->DMACSoftSReq = 0xC; + LPC_GPDMA->DMACSoftSReq = 0x3; + + /* Enable the IRQ */ + NVIC_EnableIRQ(DMA_IRQn); + + /* Open the file */ + if ( (fp=fopen( fname, "rb")) == NULL ) { + return 0; + } + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + _spi.format(8,SPIMode); + /* Define a fixed area to display the movie. */ + lcd_area(x_start, y_start, (160-1)+x_start, (120-1)+y_start); + lcd_drawstart(); + + /* read the first buffer... */ + size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp); + + /* Loop untile the whole file is read. */ + while( 1) { + pframe=&buffer[0]; + /* set the source buffer... */ + LLI0.SrcAddr=(uint32_t)&pframe[3200]; + LLI1.SrcAddr=(uint32_t)&pframe[3200+3200]; + LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200]; + + /* configure the DMA channell... */ + LPC_GPDMACH0->DMACCSrcAddr = (uint32_t)pframe; + LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR; + LPC_GPDMACH0->DMACCLLI = (uint32_t)&LLI0; + LPC_GPDMACH0->DMACCControl = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200; + + DMA_flag=0; + /* Fire GPDMA Channel0 */ + LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | + DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX | + DMA_TRANSFER_TYPE_M2P | + DMA_MASK_IE | + DMA_MASK_ITC; + + if ( feof( fp)) { + fclose( fp); + break; + } + /* Read the second chunk of the frame... */ + size=fread( &buffer1[0], sizeof(buffer1[0]), sizeof(buffer1)/sizeof(buffer1[0]), fp); + /* OK, the buffer from the SDCar is read but now we must check if the DMA it's work... */ + while( !DMA_flag); + DMA_flag=0; + /* At this point I check if I'm at end of the file. */ + if ( feof( fp) || size != sizeof(buffer1)/sizeof(buffer1[0]) ) { + // + LPC_SSP0->IMSC = (1UL << 3); + + LPC_GPDMACH0->DMACCConfig = 0; + LPC_GPDMA->DMACIntTCClear = 1; + + fclose( fp); + while(LPC_SSP0->SR & (1UL << 2)) { + /* This loop ensures we read the last byte in the + RX FIFO and test that. */ + int sr = LPC_SSP0->DR; + } + + // lcd_drawstop(); + NVIC_DisableIRQ(DMA_IRQn); + LPC_GPDMA->DMACIntTCClear = 1; + LPC_SSP0->DMACR=0; + LPC_GPDMA->DMACConfig = 0; + LPC_GPDMA->DMACIntTCClear = 0x1; + LPC_GPDMA->DMACSoftSReq = 0; + LPC_SC->PCONP &= ~(1UL << 29); + LPC_GPDMA->DMACIntTCClear = 1; + // + lcd_drawstop(); + break; + } + /* Now I have a buffer full with new data and the DMA stopped. I can start it again. */ + pframe=&buffer1[0]; + /* I set the new buffer inside the LLI... */ + LLI0.SrcAddr=(uint32_t)&pframe[3200]; + LLI1.SrcAddr=(uint32_t)&pframe[3200+3200]; + LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200]; + /* DMA configuration. */ + LPC_GPDMACH0->DMACCSrcAddr = (uint32_t)pframe; + LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR; + LPC_GPDMACH0->DMACCLLI = (uint32_t)&LLI0; + LPC_GPDMACH0->DMACCControl = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200; + /* Fire GPDMA Channel0 */ + LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | + DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX | + DMA_TRANSFER_TYPE_M2P | + DMA_MASK_IE | + DMA_MASK_ITC; + + if ( feof( fp)) { + fclose( fp); + break; + } + /* A new read from the SDCad... */ + size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp); + /* just wait is the DMA it's working... */ + while( !DMA_flag); + DMA_flag=0; + /* At this point I check if I'm at end of the file. */ + if ( feof( fp) || size != sizeof(buffer)/sizeof(buffer[0]) ) { + fclose( fp); + break; + } + /* */ + pframe=&buffer[0]; + /* programmo nella LLI il nvuovo buffer... */ + LLI0.SrcAddr=(uint32_t)&pframe[3200]; + LLI1.SrcAddr=(uint32_t)&pframe[3200+3200]; + LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200]; + /* programmo il DMA */ + LPC_GPDMACH0->DMACCSrcAddr = (uint32_t)pframe; + LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR; + LPC_GPDMACH0->DMACCLLI = (uint32_t)&LLI0; + LPC_GPDMACH0->DMACCControl = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200; + /* Fire GPDMA Channel0 */ + LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | + DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX | + DMA_TRANSFER_TYPE_M2P | + DMA_MASK_IE | + DMA_MASK_ITC; + if ( feof( fp)) { + fclose( fp); + break; + } + /* */ + size=fread( &buffer1[0], sizeof(buffer1[0]), sizeof(buffer1)/sizeof(buffer1[0]), fp); + /* Aspetto che il DMA completi l'ultimo transfer... */ + while( !DMA_flag); + DMA_flag=0; + /* At this point I check if I'm at end of the file. */ + if ( feof( fp) || size != sizeof(buffer1)/sizeof(buffer1[0]) ) { + fclose( fp); + break; + } + /* */ + pframe=&buffer1[0]; + /* At this point I reset the display area resending the xy value*/ + lcd_drawstop(); + LPC_SSP0->DMACR=0; + /* Invio un nuovo comando di lcd_area */ + lcd_area(x_start, y_start, (160-1)+x_start, (120-1)+y_start); + lcd_drawstart(); + /* */ + LPC_SSP0->DMACR=2; + + /* programmo nella LLI il nvuovo buffer... */ + LLI0.SrcAddr=(uint32_t)&pframe[3200]; + LLI1.SrcAddr=(uint32_t)&pframe[3200+3200]; + LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200]; + /* programmo il DMA */ + LPC_GPDMACH0->DMACCSrcAddr = (uint32_t)pframe; + LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR; + LPC_GPDMACH0->DMACCLLI = (uint32_t)&LLI0; + LPC_GPDMACH0->DMACCControl = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200; + /* Fire GPDMA Channel0 */ + LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | + DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX | + DMA_TRANSFER_TYPE_M2P | + DMA_MASK_IE | + DMA_MASK_ITC; + + if ( feof( fp)) { + fclose( fp); + break; + } + /* Ultima lettura del buffer da SDCard... */ + size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp); + /* Aspetto che il DMA completi il transfer... */ + while( !DMA_flag); + DMA_flag=0; + /* At this point I check if I'm at end of the file. */ + if ( feof( fp) || size != sizeof(buffer)/sizeof(buffer[0]) ) { + fclose( fp); + break; + } + } + // + LPC_SSP0->IMSC = (1UL << 3); + while(LPC_SSP0->SR & (1UL << 2)) { + /* This loop ensures we read the last byte in the + RX FIFO and test that. */ + int sr = LPC_SSP0->DR; + } + + LPC_GPDMACH0->DMACCConfig = 0; + LPC_SSP0->DMACR=0; + LPC_GPDMA->DMACConfig = 0; + LPC_GPDMA->DMACIntTCClear = 0x1; + LPC_GPDMA->DMACSoftSReq = 0; + LPC_SC->PCONP &= ~(1UL << 29); + // + lcd_drawstop(); + // + LPC_SSP0->DMACR=0; + LPC_GPDMA->DMACConfig = 0; + LPC_GPDMA->DMACIntTCClear = 0x1; + LPC_GPDMA->DMACSoftSReq = 0; + LPC_SC->PCONP &= ~(1UL << 29); + // + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + _spi.format(8,SPIMode); + // + lcd_drawstop(); + + lcd_area(0, 0, (320-1), (240-1)); + + /* Disable the IRQ */ + NVIC_DisableIRQ(DMA_IRQn); + return 1; +} +#endif // #if ( LCD_MODE_262K==5 ) +#endif // #ifdef _USE_FILE + +void GLCD::lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int size) +{ + unsigned int i; + unsigned char r, g, b; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(x, y, ((size-1)+x), ((size-1)+y)); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + for(i=(size*size); i!=0; i--) + { + r=*icon++; + g=*icon++; + b=*icon++; + +#if ( LCD_MODE_262K==6 ) + _spi.write( (r&0xFC)>>2 ); + _spi.write( (g&0xFC)>>2 ); + _spi.write( (b&0xFC)>>2); +#else + lcd_draw( RGB( r, g, b ) ); +#endif + } +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + return; +} + +void GLCD::lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int xsize, unsigned int ysize) +{ + unsigned int i; + unsigned char r, g, b; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(x, y, ((xsize-1)+x), ((ysize-1)+y)); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + for(i=(xsize*ysize); i!=0; i--) + { + r=*icon++; + g=*icon++; + b=*icon++; + +#if ( LCD_MODE_262K==6 ) + _spi.write( (r&0xFC)>>2 ); + _spi.write( (g&0xFC)>>2 ); + _spi.write( (b&0xFC)>>2); +#else + lcd_draw( RGB( r, g, b ) ); +#endif + } +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + return; +} + + +void GLCD::lcd_drawicon( const unsigned int *icon, unsigned int x, unsigned int y, unsigned int size) +{ + unsigned int i, tmp; + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area(x, y, ((size-1)+x), ((size-1)+y)); + + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); +#endif + + for(i=(size*size); i!=0; i--) + { + tmp = *icon++; +#if ( LCD_MODE_262K==6 ) + _spi.write( (tmp&0x00FC0000)>>18 ); + _spi.write( (tmp&0x0000FC00)>>10 ); + _spi.write( (tmp&0x000000FC)>>2); +#else + lcd_draw( RGB( (( tmp&0x00FF0000)>>16), ( ( tmp&0x0000FF00)>>8), ( tmp&0x000000FF)) ); +#endif + } +#if ( LCD_MODE_262K==6 ) + _spi.format(8,SPIMode); +#endif + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + return; +} + +void GLCD::lcd_drawpixel(unsigned int x0, unsigned int y0, unsigned int color) { + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area( x0, y0, x0, y0); + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); + _spi.write( (color&0x00FC0000)>>18 ); + _spi.write( (color&0x0000FC00)>>10 ); + _spi.write( (color&0x000000FC)>>2); + _spi.format(8,SPIMode); +#else + lcd_draw(color); +#endif + + lcd_drawstop(); + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); + +} + +void GLCD::lcd_drawline(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color) { + // + // pInt32U pData = ((pInt32U) LCD_VRAM_BASE_ADDR) + x0 + (y0 * LCD_HEIGHT); + // pInt32U pData = ((pInt32U) pCurrFrmBuff) + x0 + (y0 * LCD_HEIGHT); + + int dy = y1 - y0; + int dx = x1 - x0; + int stepx, stepy; + + if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; } + if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; } + + dy <<= 1; // dy is now 2*dy + dx <<= 1; // dx is now 2*dx + + /* Set the fast SPI speed. */ + _spi.frequency( SPIClkSpeed); + + lcd_area( x0, y0, x0, y0); + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); + _spi.write( (color&0x00FC0000)>>18 ); + _spi.write( (color&0x0000FC00)>>10 ); + _spi.write( (color&0x000000FC)>>2); + _spi.format(8,SPIMode); +#else + lcd_draw(color); +#endif + + lcd_drawstop(); + + // *(pData)= color; + + if (dx > dy) { + int fraction = dy - (dx >> 1); // same as 2*dy - dx + while (x0 != x1) { + if (fraction >= 0) { + y0 += stepy; + fraction -= dx; // same as fraction -= 2*dx + } + x0 += stepx; + fraction += dy; // same as fraction -= 2*dy + // pData = ((pInt32U) LCD_VRAM_BASE_ADDR) + x0 + (y0 * C_GLCD_H_SIZE); + // pData = ((pInt32U) pCurrFrmBuff) + x0 + (y0 * C_GLCD_H_SIZE); + // *(pData)= color; + lcd_area( x0, y0, x0, y0); + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); + _spi.write( (color&0x00FC0000)>>18 ); + _spi.write( (color&0x0000FC00)>>10 ); + _spi.write( (color&0x000000FC)>>2); + _spi.format(8,SPIMode); +#else + lcd_draw(color); +#endif + + lcd_drawstop(); + + } + } else { + int fraction = dx - (dy >> 1); + while (y0 != y1) { + if (fraction >= 0) { + x0 += stepx; + fraction -= dy; + } + y0 += stepy; + fraction += dx; + // pData = ((pInt32U) LCD_VRAM_BASE_ADDR) + x0 + (y0 * C_GLCD_H_SIZE); + // pData = ((pInt32U) pCurrFrmBuff) + x0 + (y0 * C_GLCD_H_SIZE); + // *(pData)= color; + lcd_area( x0, y0, x0, y0); + lcd_drawstart(); + +#if ( LCD_MODE_262K==6 ) + _spi.format(6,SPIMode); + _spi.write( (color&0x00FC0000)>>18 ); + _spi.write( (color&0x0000FC00)>>10 ); + _spi.write( (color&0x000000FC)>>2); + _spi.format(8,SPIMode); +#else + lcd_draw(color); +#endif + + lcd_drawstop(); + } + } + /* Reset to the slow SPI speed. */ + _spi.frequency( SPISlowClkSpeed); +} + +void GLCD::lcd_reset(void) +{ + //reset + LCD_CS_DISABLE(); + LCD_RST_ENABLE(); + wait_ms(50); + LCD_RST_DISABLE(); + wait_ms(50); + + //driving ability + lcd_cmd(0xEA, 0x0000); + lcd_cmd(0xEB, 0x0020); + lcd_cmd(0xEC, 0x000C); + lcd_cmd(0xED, 0x00C4); + lcd_cmd(0xE8, 0x0040); + lcd_cmd(0xE9, 0x0038); + lcd_cmd(0xF1, 0x0001); + lcd_cmd(0xF2, 0x0010); + lcd_cmd(0x27, 0x00A3); + + //power voltage + lcd_cmd(0x1B, 0x001B); + lcd_cmd(0x1A, 0x0001); + lcd_cmd(0x24, 0x002F); + lcd_cmd(0x25, 0x0057); + + //VCOM offset + lcd_cmd(0x23, 0x008D); //for flicker adjust + + //power on + lcd_cmd(0x18, 0x0036); + lcd_cmd(0x19, 0x0001); //start osc + lcd_cmd(0x01, 0x0000); //wakeup + lcd_cmd(0x1F, 0x0088); + wait_ms(5); + lcd_cmd(0x1F, 0x0080); + wait_ms(5); + lcd_cmd(0x1F, 0x0090); + wait_ms(5); + lcd_cmd(0x1F, 0x00D0); + wait_ms(5); + + //color selection + lcd_cmd(0x17, LCD_MODE_262K); //0x0005=65k, 0x0006=262k + + //panel characteristic + lcd_cmd(0x36, 0x0000); + + //display on + lcd_cmd(0x28, 0x0038); + wait_ms(40); + lcd_cmd(0x28, 0x003C); + + //display options +#ifdef LCD_MIRROR + lcd_cmd(0x16, 0x0068); //MY=0 MX=1 MV=1 ML=0 BGR=1 +#else + lcd_cmd(0x16, 0x00A8); //MY=1 MX=0 MV=1 ML=0 BGR=1 +#endif + + lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1)); + + return; +} +
diff -r 000000000000 -r 7ad454fed160 MI0283QTlib.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MI0283QTlib.h Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,363 @@ + /* mbed Graphics LCD library. Library for MI0283QT-2 screen. + + Copyright (c) 2011 NXP 3803 + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef __MBED_GLCDLIB_H +#define __MBED_GLCDLIB_H + +// Comment out if file system functions are not used. +#define _USE_FILE + +#ifdef _USE_FILE +#define BUFFER_LINE 10 +#endif + +// +#define LCD_BLACK (0) +#define LCD_WHITE ( (255<<16)|(255<<8)|(255<<0) ) +#define LCD_RED ( (255<<16)|(0<<8)|(0<<0) ) +#define LCD_GREEN ( (0<<16)|(255<<8)|(0<<0) ) +#define LCD_BLUE ( (0<<16)|(0<<8)|(255<<0) ) +// +#define SCALE_320x240 1 +#define SCALE_160x120 2 +// +#include "mbed.h" + +struct _FONTINFO { + unsigned char *pText; + unsigned int h_size; + unsigned int v_size; + unsigned int h_line; +}; + + +/** Graphic LCD Library for MI0283QT-2 LCD +* +* Image Format. +* About image format, I choose the way to make the library capable to read the simple RGB format. +* That's: a file with RGB bytes written. This format is very simple to obtain, using the convert.exe software. +* This program is inside the "Imagemagick" installation software. You can download the portable versio for windows +* at this link: http://www.imagemagick.org/download/binaries/ImageMagick-6.6.7-Q16-windows.zip +* +* Icone Format. +* I use some free icons from Internet. I use the bin2h utility to convert this file to .h format. +* (http://www.deadnode.org/sw/bin2h/) +* +* Example: +* @code +* // Init code... +* #include "mbed.h" +* #include "GLCDlib.h" +* +* // Configure the GLCD pin: +* // mosi, miso, clk, cs, rst, bklgh +* GLCD lcd( p11, p12, p13, p14, p17, p26); +* +* int main() { +* +* lcd.lcd_init(); +* lcd.backlightoff(); +* //... do somethings... +* lcd.lcd_clear( LCD_WHITE); +* lcd.backlighton(); +* //... the LCD is ON +* } +* @endcode + +*/ + +class GLCD { + +public: + /** Create the GLCD Object and initlaize the I/O pins + * + * @param pin mosi, pin miso, pin sclk, pin cs, pin LCD_reset, pin LCD_backlight + */ + GLCD( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rst, PinName bklgh); + + /** Configure the SPI port with default parameters. + * + * @param none + */ + void lcd_init( void); + + /** Initialize the LCD with an optional SPI freq. Used as FastSpeed + * + * @param clock speed in Hz + */ + void lcd_init( unsigned speedf); + + /** Initialize the LCD with two optionals SPI freq: fast and slow speed. + * + * @param speedf The fast freq. used to drive the GLCD + * @param speeds The freq. at wich the SPI is configured after the use. + * + */ + void lcd_init( unsigned int speedf, unsigned int speeds); + + /** Clear the entire screen with color + * + * #param color The color we want to use to fill the screen + */ + void lcd_clear(unsigned int color); + + /** Clear a specified screen region. Like as a rectangle fill + * @param x0 start x position + * @param y0 start y position + * @param w rectangle width + * @param h rectangle hight + * @param color The color we use to fill the area. + * + */ + void lcd_clear(unsigned int x0, unsigned int y0, unsigned int w, unsigned int h, unsigned int color); + +#ifdef _USE_FILE + /** Draw an RGB image file (320x240) starting at x=0, y=0 + * The image is read byte per byte. So use this function if you don't care about speed + * + * @param fname The file name we want to display + */ + unsigned int lcd_drawimage(char *fname); + + /** Draw an RGB image file (320x240) starting at x=0, y=0 + * The image is read using a buffer. You can set the buffer using the define: BUFFER_LINE + * This procedure speedup the draw of the image. At the cost of more RAM. + * The defaullt buffer size is: 320*BUFFER_LINE*3 + * + * @param fname The file name we want to display + */ + unsigned int lcd_drawimagebuff(char *fname); + + /** Draw an image file (320x240) staring at x=0, y=0 + * The image is displayed line-by-line so the main program can do other jobs between the call. + * The buffer size is equivalent to a LCD line, so must be: 320x3 bytes. + * + * @param buffer The pointer at the data to be displayed + * @param lnum The number of the line to display. From 0 to 239. + */ + unsigned int lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum); + + /** Draw an image file (less then 320x240) specifying the x and y position and the scale value. + * The image is displayed line-by-line so the main program can do other job during the call. + * It is possible to specify a x and y starting position and a scale value. + * The buffer size is equivalent to a LCD line, so must be: 320x3 bytes. + * + * @param buffer The pointer at the data to be displayed + * @param lnum The number of the line to display. From 0 to 239. + * @param xstart x position + * @param ystart y position + * @param scale Scale factor value. There are two value defined: SCALE_320x240 and SCALE_160x120 + * Using the second value it's possible to draw, from a 320x240 image, a 160x120 image. + * at the xy specified. This is the only value supported for now. + */ + unsigned int lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum, unsigned int xstart, unsigned int ystart, unsigned int scale); + + /** Play a movie file 80x60 pixel. + * The file is a ready-made array of pictures extracted from a movie, resized to 80x60 and converted to RGB format. + * I use this procedure in a Ubuntu Linux PC: + * + * @code + * mplayer -endpos 10 -nosound -vo png:z=0 perla.avi + * mogrify -resize 80x60 *.png + * mogrify -format rgb *.png + * cat *.rgb > unico_80x60.bin + * @endcode + * + * First I convert 10 sec of my avi files with mplayer, then I use mogrify to resize the 150 images to 80x60 pixel. + * The next step is to convert the PNG format to RGB. At this point I create a single file using a simple cat command. + * With this little format there is enough speed to play the movie at 15fps. + */ + unsigned int lcd_drawmovie(char *fname, unsigned int x_start, unsigned int y_start); + + /** Play a 160x120 pixel ready made movie file. + * The file is a ready-made array of pictures extracted from a movie, resized to 160x120 pixel and converted to RGB format. + * I use this procedure in a Ubuntu Linux PC: + * + * @code + * mplayer -endpos 10 -nosound -vo png:z=0 perla.avi + * mogrify -resize 160x120 *.png + * mogrify -format rgb *.png + * cat *.rgb > unico_160x120.bin + * RGBconv_tst unico_160x120.bin unico_160x120_lcd.bin + * @endcode + * + * First I convert 10 sec of my avi files with mplayer, then I use mogrify to resize the 150 images generated to 160x120 pixel. + * The next step is to convert the PNG format to RGB. At this point I create a single file using a simple cat command. + * To speed up the playing procedure, I convert the RGB 24bit file to the LCD format RGB 565bit using a simple programm + * I create. + * The procedure use the USB and Ethernet memory area as a ping pong buffer. The buffer loaded from the SDCard is send to the LCD using the DMA. + * During this time another buffer is read and stored to the second buffer. The single DMA transfer is too short for me and I use 3 linked list + * to chain 3 buffer of memory and send simultaneously more then 12KB if data. + * + * @param fname the file name to display + * @param x_start and y_start, the x and y position where to display the movie. + */ + unsigned int lcd_drawmoviebuff(char *fname, unsigned int x_start, unsigned int y_start); + +#endif // End of: #ifdef _USE_FILE + + /** Draw an RGB icon at x, y. The size is specified for width and hight. + * + * @param *icon pointer at the array with the RGB value in integer format. That is: 0x00RRGGBB + * @param x x position + * @param y y position + * @param size the width and height + */ + void lcd_drawicon( const unsigned int *icon, unsigned int x, unsigned int y, unsigned int size); + + /** Draw an RGB icon at x, y. The size is specified for width and hight. + * + * @param *icon pointer at the array with the RGB value in byte format. That is: 0xRR, 0xGG, 0xBB + * @param x x position + * @param y y position + * @param size the width and height + */ + void lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int size); + + /** Draw an RGB icon at x, y. The size is specified for width and hight. + * + * @param *icon pointer at the array with the RGB value in byte format. That is: 0xRR, 0xGG, 0xBB + * @param x x position + * @param y y position + * @param xsize the width + * @param ysize the height + */ + void lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int xsize, unsigned int ysize); + + /** Draw a color line from xy to xy + * + * @param x0 x position + * @param y0 y position + * @param x1 x position + * @param y1 y position + * @param color color to use + */ + void lcd_drawline(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color); + + /** Draw a single pixel + * + * @param x0 x position + * @param y0 y position + * @param color color to use + */ + void lcd_drawpixel(unsigned int x0, unsigned int y0, unsigned int color); + + /** Draw a character at xy position. + * + * @param ch the character to draw + * @param xpos x position + * @param ypos y position + * @param color the color to use + */ + void lcd_drawch( unsigned ch, unsigned int xpos, unsigned int ypos, unsigned int color); + + /** Draw a string at xy position + * + * @param *putstr the string to draw + * @param xpos x position + * @param ypos y position + * @param color the color to use + */ + void lcd_drawstr(char *__putstr, unsigned int xpos, unsigned int ypos, unsigned int color); + + /** Set the font type to small: 12x6 + */ + void lcd_setfontsmall( void); + + /** Set the font type to big: 24x12 + */ + void lcd_setfontbig( void); + + /** Return the color value use by the LCD. There are two form: 666 and 565 + * + * @param color the color in the format: 0x00RRGGBB + * @return the color in the format: 666 or 565 + */ + unsigned int lcd_RGB( unsigned int color); + + /** Return the color value use by the LCD. There are two form: 666 and 565 + * + * @param r the Red color value + * @param g the Green color value + * @param b the Blue color value + * @return the color in the format: 666 or 565 + */ + unsigned int lcd_RGB( unsigned int r, unsigned int g, unsigned int b); + + /** Set the background color + * + * @param color the color of the background + */ + void lcd_setbackgroundcolor( unsigned int color); + + /** Function to start the automated scroll of the screen + */ + void lcd_setverticalarea( unsigned int topf, unsigned int height, unsigned int butf); + void lcd_scrollstartadd( unsigned int ssa); + void lcd_scrollstart( void); + void lcd_scrollstop( void); + + /** Set the backlight ON + * + */ + void backlighton( void); + + /** Set the backlight OFF + * + */ + void backlightoff( void); + + /** Set the backlight at a particular value. + * + * @param val backlight value to set. + */ + void backlightset( double val); + +protected: + void lcd_draw(unsigned int color); + void lcd_drawstop(void); + void lcd_drawstart(void); + void lcd_cmd(unsigned int reg, unsigned int param); + void lcd_data(unsigned int c); + void lcd_area(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1); + void lcd_reset(void); + + // default value for SPIClock speed, SPI mode and backlight freq. + unsigned int SPIClkSpeed; + unsigned int SPISlowClkSpeed; + unsigned int SPIMode; + double LCDBkLight; + // default value for background color + unsigned int BackGroundColor; + // + unsigned char FontIdx; + _FONTINFO FontInfo[2]; + + SPI _spi; + DigitalOut _cs; + DigitalOut _rst; + PwmOut _bklgh; + +}; + +#endif \ No newline at end of file
diff -r 000000000000 -r 7ad454fed160 Terminal12x6.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Terminal12x6.h Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,386 @@ +const unsigned char Text12x6[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0e, 0x11, 0x11, 0x1b, + 0x11, 0x11, 0x1b, 0x15, 0x11, 0x0e, 0x00, 0x00, + 0x0e, 0x1f, 0x1f, 0x15, 0x1f, 0x1f, 0x15, 0x1b, + 0x1f, 0x0e, 0x00, 0x00, 0x00, 0x0a, 0x1b, 0x1f, + 0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x04, 0x04, 0x00, + 0x04, 0x04, 0x0e, 0x0e, 0x1f, 0x1f, 0x1f, 0x0e, + 0x0e, 0x04, 0x04, 0x00, 0x04, 0x0e, 0x0e, 0x0e, + 0x04, 0x1f, 0x1f, 0x0e, 0x04, 0x0e, 0x00, 0x00, + 0x04, 0x04, 0x0e, 0x0e, 0x1f, 0x1f, 0x1f, 0x0e, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x19, 0x19, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x0a, 0x0a, 0x0e, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x1f, 0x1f, 0x1f, 0x11, 0x15, 0x15, 0x11, + 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x1c, 0x18, + 0x14, 0x06, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x06, 0x09, 0x09, 0x09, 0x06, 0x02, 0x02, + 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0c, + 0x0c, 0x04, 0x04, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x0c, 0x0a, 0x0e, 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, + 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x0e, 0x11, 0x0e, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x07, 0x03, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, + 0x0e, 0x0f, 0x0e, 0x0c, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x0e, 0x15, 0x04, 0x04, 0x04, 0x15, + 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x00, 0x0a, 0x0a, 0x00, 0x00, + 0x00, 0x0e, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a, + 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x09, 0x01, + 0x06, 0x09, 0x06, 0x08, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x15, + 0x04, 0x04, 0x04, 0x15, 0x0e, 0x04, 0x1f, 0x00, + 0x00, 0x04, 0x0e, 0x15, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x15, 0x0e, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x04, 0x0f, 0x04, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x02, 0x0f, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, + 0x0a, 0x1f, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x04, 0x0e, 0x0e, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x0e, 0x0e, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, + 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x1f, + 0x0a, 0x0a, 0x1f, 0x0a, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x06, 0x09, 0x01, 0x02, 0x04, 0x08, + 0x09, 0x06, 0x04, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x04, 0x02, 0x02, 0x02, 0x0d, 0x0d, 0x00, 0x00, + 0x00, 0x02, 0x05, 0x05, 0x05, 0x02, 0x15, 0x09, + 0x09, 0x16, 0x00, 0x00, 0x0c, 0x0c, 0x08, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, + 0x02, 0x04, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x0e, 0x0e, 0x15, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x04, 0x1f, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x06, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x06, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, + 0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x0e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x04, 0x06, 0x05, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x0f, 0x00, 0x00, + 0x00, 0x06, 0x09, 0x09, 0x08, 0x04, 0x02, 0x01, + 0x01, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x09, 0x08, + 0x08, 0x06, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x08, 0x0c, 0x0a, 0x0a, 0x09, 0x0f, 0x08, + 0x08, 0x08, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01, + 0x01, 0x07, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x0c, 0x02, 0x01, 0x07, 0x09, 0x09, 0x09, + 0x09, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x08, + 0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x00, 0x00, + 0x00, 0x06, 0x09, 0x09, 0x09, 0x06, 0x09, 0x09, + 0x09, 0x06, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x09, 0x09, 0x0e, 0x08, 0x04, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, + 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x04, 0x02, + 0x00, 0x00, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, + 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x08, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x08, 0x04, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, + 0x00, 0x06, 0x09, 0x09, 0x09, 0x0d, 0x0d, 0x01, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x09, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x09, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x01, 0x01, 0x01, 0x01, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01, + 0x01, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x00, 0x00, + 0x00, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x01, 0x01, 0x0d, 0x09, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, + 0x05, 0x02, 0x00, 0x00, 0x00, 0x09, 0x09, 0x05, + 0x05, 0x03, 0x05, 0x05, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, + 0x01, 0x0f, 0x00, 0x00, 0x00, 0x09, 0x09, 0x0f, + 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x0b, 0x0b, 0x0d, 0x0d, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x06, 0x04, 0x08, + 0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x03, 0x05, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x01, 0x06, 0x08, 0x09, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x0f, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x09, 0x06, 0x06, 0x06, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, + 0x0a, 0x0a, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, + 0x00, 0x0f, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, + 0x01, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x02, 0x02, + 0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, + 0x08, 0x08, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00, + 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, + 0x06, 0x06, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x08, 0x0e, 0x09, 0x09, 0x0e, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x01, 0x01, 0x01, 0x01, 0x0e, 0x00, 0x00, + 0x00, 0x08, 0x08, 0x08, 0x0e, 0x09, 0x09, 0x09, + 0x09, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x09, 0x0f, 0x01, 0x0e, 0x00, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x07, 0x02, 0x02, 0x02, + 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x06, + 0x00, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x05, 0x02, 0x00, 0x01, 0x01, 0x01, + 0x09, 0x05, 0x03, 0x03, 0x05, 0x09, 0x00, 0x00, + 0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x09, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x09, 0x09, + 0x09, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x02, 0x02, + 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x02, 0x04, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x02, 0x07, 0x02, 0x02, 0x02, + 0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x0a, 0x0a, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x06, 0x06, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x04, 0x02, + 0x01, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x02, 0x01, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00, + 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04, + 0x04, 0x08, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x00, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0a, + 0x0a, 0x11, 0x11, 0x11, 0x11, 0x1f, 0x00, 0x00, + 0x00, 0x0e, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01, + 0x01, 0x07, 0x09, 0x09, 0x09, 0x07, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x09, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01, + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x0c, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x1f, 0x11, 0x00, 0x00, 0x0f, 0x01, 0x01, + 0x01, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x00, 0x00, + 0x00, 0x15, 0x15, 0x15, 0x15, 0x0e, 0x15, 0x15, + 0x15, 0x15, 0x00, 0x00, 0x00, 0x06, 0x09, 0x08, + 0x08, 0x06, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x09, 0x0d, 0x0d, 0x0b, 0x0b, + 0x09, 0x09, 0x00, 0x00, 0x06, 0x09, 0x09, 0x09, + 0x0d, 0x0d, 0x0b, 0x0b, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x05, 0x05, 0x03, 0x05, 0x05, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x0f, 0x0f, 0x09, 0x09, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, + 0x09, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x06, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x01, 0x01, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, + 0x01, 0x01, 0x01, 0x01, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, + 0x09, 0x0e, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x04, 0x0e, 0x15, 0x15, 0x15, 0x15, 0x0e, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, + 0x06, 0x06, 0x06, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x1f, 0x10, 0x10, 0x00, 0x09, 0x09, 0x09, + 0x09, 0x0e, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, + 0x15, 0x1f, 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x1f, 0x10, 0x10, + 0x00, 0x03, 0x03, 0x02, 0x02, 0x0e, 0x12, 0x12, + 0x12, 0x0e, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, + 0x09, 0x0b, 0x0d, 0x0d, 0x0d, 0x0b, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x06, 0x09, 0x08, + 0x08, 0x0e, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x09, 0x15, 0x15, 0x15, 0x17, 0x15, 0x15, + 0x15, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x09, + 0x09, 0x0e, 0x0c, 0x0a, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x0e, 0x09, + 0x09, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06, + 0x01, 0x07, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x07, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x0a, 0x0a, + 0x0a, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x09, 0x0f, 0x01, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x0e, 0x15, + 0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x09, 0x04, 0x08, 0x09, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x0d, 0x0b, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x09, 0x09, 0x0d, 0x0b, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x05, 0x03, 0x03, + 0x05, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x0f, 0x09, 0x09, + 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x0f, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, 0x09, + 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x15, 0x00, 0x00, 0x0a, 0x00, 0x00, + 0x15, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x15, + 0x00, 0x0a, 0x00, 0x15, 0x00, 0x0a, 0x00, 0x15, + 0x0a, 0x15, 0x0a, 0x15, 0x0a, 0x15, 0x0a, 0x15, + 0x0a, 0x15, 0x0a, 0x15, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x07, 0x04, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0b, 0x08, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x08, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x08, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x04, 0x04, 0x07, 0x04, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x1c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x1c, 0x04, 0x1c, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x1a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x1a, 0x02, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1e, 0x02, 0x1a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x1b, 0x00, 0x1f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x1b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x1a, 0x02, 0x1a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x0a, 0x0a, 0x0a, 0x1b, 0x00, 0x1b, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x04, 0x04, 0x04, 0x04, + 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x1f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1f, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x04, 0x04, 0x1c, 0x04, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1c, 0x04, 0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0a, 0x0a, + 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x0a, 0x1b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, + 0x04, 0x04, 0x04, 0x04, 0x1f, 0x00, 0x1f, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x04, + 0x04, 0x04, 0x04, 0x04, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, + 0x1f, 0x1f, 0x1f, 0x1f, 0x07, 0x07, 0x07, 0x07, + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, + 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x1f, 0x1f, + 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x09, 0x09, + 0x09, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x01, 0x01, 0x01, 0x01, 0x0e, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x04, 0x04, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x15, 0x15, + 0x15, 0x0e, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x06, 0x06, 0x09, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x09, + 0x09, 0x1f, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x09, 0x0e, 0x08, 0x08, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, + 0x15, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x15, 0x15, 0x15, 0x15, 0x15, 0x1f, 0x10, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x06, 0x0a, + 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x09, 0x0b, 0x0d, 0x0d, 0x0b, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x09, + 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x0e, 0x08, 0x08, 0x07, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x15, 0x17, 0x15, + 0x15, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x09, 0x09, 0x0e, 0x09, 0x09, 0x00, 0x00, + 0x09, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x01, 0x01, + 0x01, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, + 0x06, 0x09, 0x09, 0x0f, 0x01, 0x0e, 0x00, 0x00, + 0x00, 0x06, 0x09, 0x01, 0x01, 0x07, 0x01, 0x01, + 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x01, 0x07, 0x01, 0x01, 0x0e, 0x00, 0x00, + 0x11, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x04, 0x0e, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00, + 0x06, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00, + 0x06, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x08, + 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x07, + 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x04, + 0x04, 0x04, 0x05, 0x05, 0x06, 0x04, 0x00, 0x00, + 0x00, 0x1d, 0x1d, 0x05, 0x05, 0x1f, 0x07, 0x05, + 0x05, 0x05, 0x00, 0x00, 0x00, 0x09, 0x06, 0x09, + 0x09, 0x09, 0x09, 0x09, 0x06, 0x09, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +};
diff -r 000000000000 -r 7ad454fed160 Terminal24x12.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Terminal24x12.h Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,1538 @@ +const unsigned char Text24x12[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0xcf, 0x03, 0xcf, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0xcf, 0x03, 0xcf, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x03, 0x03, 0x03, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0x33, 0x03, 0x33, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xcf, 0x03, 0xcf, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcf, 0x03, 0xcf, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xc3, 0x03, 0xc3, 0x03, + 0xc3, 0x03, 0xc3, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x03, 0x03, 0x03, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0xc0, 0x03, 0xc0, 0x03, + 0x30, 0x03, 0x30, 0x03, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xf0, 0x00, 0xf0, 0x00, + 0xf0, 0x00, 0xf0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x03, 0x03, 0x03, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xf0, 0x00, 0xf0, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xff, 0x03, 0xff, 0x03, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x33, 0x03, 0x33, 0x03, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x03, 0x3c, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xf3, 0x00, 0xf3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xf3, 0x00, 0xf3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x0f, 0x00, 0x0f, 0x00, 0x33, 0x00, 0x33, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x33, 0x00, 0x33, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x33, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x03, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x0f, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x0c, 0x00, 0x0c, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x0c, 0x03, 0x0c, 0x03, 0x0c, 0x03, 0x0c, 0x03, + 0x0c, 0x03, 0x0c, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x3f, 0x03, 0x3f, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0xff, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, + 0x33, 0x00, 0x33, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xf0, 0x03, 0xf0, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xf0, 0x03, 0xf0, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x03, 0xcc, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x03, 0xcc, 0x03, 0x0c, 0x00, 0x0c, 0x00, + 0xfc, 0x03, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x03, 0xfc, 0x03, 0x0c, 0x00, 0x0c, 0x00, + 0xcc, 0x03, 0xcc, 0x03, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcf, 0x03, 0xcf, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xcf, 0x03, 0xcf, 0x03, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x03, 0xcc, 0x03, 0x0c, 0x00, 0x0c, 0x00, + 0xcc, 0x03, 0xcc, 0x03, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcf, 0x03, 0xcf, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xcf, 0x03, 0xcf, 0x03, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xfc, 0x03, 0xfc, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcf, 0x03, 0xcf, 0x03, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xf0, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, + 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, + 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, + 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, + 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, + 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0x03, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03, + 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x0c, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xcf, 0x00, 0xcf, 0x00, 0xf3, 0x00, 0xf3, 0x00, + 0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x33, 0x03, 0x33, 0x03, + 0x3f, 0x03, 0x3f, 0x03, 0x33, 0x03, 0x33, 0x03, + 0x33, 0x03, 0x33, 0x03, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x3f, 0x00, 0x3f, 0x00, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x03, 0x03, 0x03, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00, + 0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xf0, 0x03, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xf3, 0x03, 0xf3, 0x03, + 0xf3, 0x03, 0xf3, 0x03, 0x33, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x33, 0x00, 0xff, 0x03, 0xff, 0x03, + 0x3f, 0x00, 0x3f, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; \ No newline at end of file
diff -r 000000000000 -r 7ad454fed160 Touchlib.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Touchlib.c Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,286 @@ +/* mbed TouchScreen ADS7846 library. + + Copyright (c) 2011 NXP 3803 + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "mbed.h" +#include "string.h" +#include "Touchlib.h" +#include "calibrate.h" +#include "crocino.h" + +/* */ +unsigned char TSCmd[cTS_CMDSIZE] = { + cTS_GETY, 0x00, cTS_GETY, 0x00, /* y */ + cTS_GETZ1, 0x00, cTS_GETZ1, 0x00, /* z1 */ + cTS_GETZ2, 0x00, cTS_GETZ2, 0x00, /* z2 */ + cTS_GETX, 0x00, cTS_END, 0x00, 0x00 /* x */ +}; + +#define cTS_SAMPLE 8 +#define MODE12 0 + +POINT crocino_coord[3] = { + {80,120}, + {240,60}, + {240,180} +}; + +MATRIX TS_Matrix; + +unsigned char TSValue[cTS_CMDSIZE]; +unsigned int tap_debounce; + +DigitalOut TS_DBG_LED(LED4); + +TOUCHS::TOUCHS( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName penirq) : _spi( mosi, miso, sclk), _cs( cs), _penirq( penirq) { + // defaults params + +} + +unsigned int TOUCHS::setcalibration( _TS_COORD *ts) +{ + POINT screen[3]; + /* from struct TS_COORD to struct POINT. */ + screen[0].x=ts[0].x; + screen[0].y=ts[0].y; + screen[1].x=ts[1].x; + screen[1].y=ts[1].y; + screen[2].x=ts[2].x; + screen[2].y=ts[2].y; + /* Now start the calibration process. */ + ts_val.calibration_done=!setCalibrationMatrix( &crocino_coord[0], &screen[0], &TS_Matrix); + /* Return the result. */ + return( ts_val.calibration_done); +} + +unsigned int TOUCHS::calibrate( void) +{ + POINT ts_tmp, coord; + + coord.x=ts_val.coord.x; + coord.y=ts_val.coord.y; + // see calibrate.c + getDisplayPoint( &ts_tmp, &coord, &TS_Matrix); + // + ts_val.coord.x = ts_tmp.x; + ts_val.coord.y = ts_tmp.y; + + return 0; +} + +unsigned int TOUCHS::crocino_size( void) +{ + return( cTS_CROCINO); +} + +unsigned int TOUCHS::getcrocino_x( unsigned char idx) +{ + if ( idx > 3) + idx=3; + + return ( crocino_coord[idx].x); +} + +unsigned int TOUCHS::getcrocino_y( unsigned char idx) +{ + if ( idx > 3) + idx=3; + + return ( crocino_coord[idx].y); +} + +unsigned int TOUCHS::gettsmatrixsize( void) +{ + return( sizeof( TS_Matrix)); +} + +void TOUCHS::gettsmatrix( unsigned char *pmatrix) +{ + + *pmatrix++=((unsigned char*)&TS_Matrix.An)[0]; + *pmatrix++=((unsigned char*)&TS_Matrix.An)[1]; + *pmatrix++=((unsigned char*)&TS_Matrix.An)[2]; + *pmatrix++=((unsigned char*)&TS_Matrix.An)[3]; + *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[0]; + *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[1]; + *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[2]; + *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[3]; + *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[0]; + *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[1]; + *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[2]; + *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[3]; + *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[0]; + *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[1]; + *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[2]; + *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[3]; + *pmatrix++=((unsigned char*)&TS_Matrix.En)[0]; + *pmatrix++=((unsigned char*)&TS_Matrix.En)[1]; + *pmatrix++=((unsigned char*)&TS_Matrix.En)[2]; + *pmatrix++=((unsigned char*)&TS_Matrix.En)[3]; + *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[0]; + *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[1]; + *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[2]; + *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[3]; + *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[0]; + *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[1]; + *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[2]; + *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[3]; + +} + +void TOUCHS::settsmatrix( unsigned char *pmatrix) +{ + + ((unsigned char*)&TS_Matrix.An)[0]=*pmatrix++; + ((unsigned char*)&TS_Matrix.An)[1]=*pmatrix++; + ((unsigned char*)&TS_Matrix.An)[2]=*pmatrix++; + ((unsigned char*)&TS_Matrix.An)[3]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Bn)[0]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Bn)[1]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Bn)[2]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Bn)[3]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Cn)[0]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Cn)[1]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Cn)[2]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Cn)[3]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Dn)[0]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Dn)[1]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Dn)[2]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Dn)[3]=*pmatrix++; + ((unsigned char*)&TS_Matrix.En)[0]=*pmatrix++; + ((unsigned char*)&TS_Matrix.En)[1]=*pmatrix++; + ((unsigned char*)&TS_Matrix.En)[2]=*pmatrix++; + ((unsigned char*)&TS_Matrix.En)[3]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Fn)[0]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Fn)[1]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Fn)[2]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Fn)[3]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Divider)[0]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Divider)[1]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Divider)[2]=*pmatrix++; + ((unsigned char*)&TS_Matrix.Divider)[3]=*pmatrix++; + + ts_val.calibration_done=1; + +} + +void TOUCHS::init( void) +{ + _spi.format( 8, BUS_MODE); + _spi.frequency( TS_SPEED); + +} + + +void TOUCHS::do_tap( void) +{ + unsigned int i, x, y; + + if ( TOUCHS::pressure() && ts_val.touched==0) { + printf("press: %d\r\n", tap_debounce ); + tap_debounce++; + if ( tap_debounce>= cTS_DEBOUNCE) { + tap_debounce=0; + ts_val.touched=1; + for ( i=4, x=0,y=0; i!=0; i--) { + TOUCHS::read( &ts_val.coord); + x+=ts_val.coord.x; + y+=ts_val.coord.y; + } + ts_val.coord.x=x>>2; + ts_val.coord.y=y>>2; + // If the calibration process was successful complited... + if ( ts_val.calibration_done) { + // ...run the convertion from touch to screen coord. + TOUCHS::calibrate(); + } + } + } +} + +unsigned int TOUCHS::pressure( void) +{ + unsigned char pressure; + unsigned char iZ2, iZ1; + + _spi.frequency( TS_SPEED); + + _cs = 0; /* Seleziono il CS del TS */ + + _spi.write( 0xB0); + iZ1 = _spi.write( 0x00); + // + _spi.write( 0xC0); + iZ2 = 127-_spi.write( 0x00); + _cs = 1; /* De-Seleziono il CS del TS */ + + pressure=iZ1+iZ2; + + if ( pressure > 3) { + // ts_val.touched=1; + return( 1); + } else { + // ts_val.touched=0; + return( 0); + } + +} + +/* Read the value from the touch. Write the raw value inside the struct TS_COORD. */ +void TOUCHS::read( _TS_COORD *ts) +{ + unsigned int i, idx; + unsigned int iZ1, iZ2; + + _spi.frequency( TS_SPEED); + + idx=0; + while( 1) { + // + i=0; + _cs = 0; /* Assert the CS */ + + while ( i<cTS_CMDSIZE) { + TSValue[i] = _spi.write( TSCmd[i]); + /* */ + i++; + } + + _cs = 1; /* Deasser the CS */ + + /* */ + ts->x = ((unsigned int)TSValue[15]<<5) | (TSValue[16]>>3); + ts->y = ((unsigned int)TSValue[3]<<5) | (TSValue[4]>>3); + iZ2 = ((unsigned int)TSValue[11]<<5) | (TSValue[12]>>3); + iZ1 = ((unsigned int)TSValue[7]<<5) | (TSValue[8]>>3); + ts->z = (int)(330.0 * (((double)ts->x)/4096.0)*((((double)iZ2)/((double)iZ1))-1.0)); + + /* Reduce the value to 10bit */ + ts->y = (ts->y >> MODE12); + ts->x = (ts->x >> MODE12); + + idx++; + if ( ts->z < 10000 || idx>10) + break; + } +} +
diff -r 000000000000 -r 7ad454fed160 Touchlib.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Touchlib.h Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,201 @@ +/* mbed TouchScreen ADS7846 library. + + Copyright (c) 2011 NXP 3803 + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#ifndef __TOOUCH_H +#define __TOOUCH_H + +#include "mbed.h" +#include "calibrate.h" + +/* Define per la compilazione del codice di gestione del PENIRQ */ +#define SW_PENIRQ +/* */ +#define cTS_STARTBIT 0x80 +#define cTS_MODE 0x00 +#define cTS_SERDFR 0x00 /* SER/DFR =1 -> 0x04, */ +#define cTS_PWRUP 0x03 /* Device is powered ON, PENIRQ OFF */ +#define cTS_PWRDWN 0x00 /* Device is powered OFF, PENIRQ ON */ +/* */ +#define cTS_GETY (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x10) +#define cTS_GETX (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x50) +#define cTS_GETZ1 (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x30) +#define cTS_GETZ2 (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x40) +#define cTS_VBAT (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x20) +#define cTS_END (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRDWN|0x50) +/* */ +#define cTS_CMDSIZE 17 +#define cTS_CROCINO 16 +/* */ +#define cTS_DEBOUNCE 2 /* 3ms di debounce x la pressione del touch */ +/* FSM per la lettura del touch */ +#define cTS_INIT 6 +#define cTS_START 1 +#define cTS_READ 2 +#define cTS_RELEASING 3 +#define cTS_RELEASED 4 +#define cTS_STOP 5 + +#define TS_SPEED 1000000 /* 1Mbit */ +#define BUS_MODE 3 + +/* We read the sample MAX_SAMPLES times*/ +#define MAX_SAMPLES 8 + + +/* Data structure: x, y and pressure */ +struct _TS_COORD { + unsigned int x; + unsigned int y; + int z; +}; + +/* Collection of data about the touch... */ +struct _TS_VALUE { + _TS_COORD coord; /* tap's coord. */ + volatile unsigned char touched; /* == 1 pen down. */ + unsigned char calibration_done; /* calibration done. */ +}; + +/** TouchScreen ADS7846 Library + * From the DS: + * The ADS7846 is a classic successive approximation register + * (SAR) analog-to-digital converter (ADC). The architecture is + * based on capacitive redistribution which inherently includes + * a sample-and-hold function. The converter is fabricated on a + * 0.6μm CMOS process. + * + * The device features an internal 2.5V reference and an + * external clock. Operation is maintained from a single supply + * of 2.7V to 5.25V. The internal reference can be overdriven + * with an external, low impedance source between 1V and + * +VCC. The value of the reference voltage directly sets the + * input range of the converter. + * The analog input (X-, Y-, and Z-position coordinates, auxiliary + * input, battery voltage, and chip temperature) to the + * converter is provided via a multiplexer. A unique configuration + * of low on-resistance touch panel driver switches allows + * an unselected ADC input channel to provide power and its + * accompanying pin to provide ground for an external device, + * such as a touch screen + * + * Example: + * @code + * // Please the main.c code as an elabora example. + * + * @endcode + */ + +// +class TOUCHS { + +public: + + /** Create the touch object + * + * @param pin mosi, pin miso, pin sclk, pin chip select and pin penirq + */ + TOUCHS( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName penirq); + + /** Initalize the touchscreen chip. + * + * @param none + */ + void init( void); + + /** This function computes a matrix of data to be used for the conversion from touch to screen coord. + * + * @param the coord of each crocino tapped by the user. + */ + unsigned int setcalibration( _TS_COORD *ts); + + /** I use a pool metod to read the touch. Each time I need to read the touch I loop until this function + * set a flag. It's also possible to configure this fuction as an handle of a Ticker class, checkin for + * the flag inside the main loop. + */ + void do_tap( void); + + /** Get the x coord of the crocino speicifyed by idx. There are three crocino defined inside the crocino.h header file + * + * @param idx One of the three crocino. + * @return the x coord. + */ + unsigned int getcrocino_x( unsigned char idx); + + /** Get the y coord of the crocino speicifyed by idx. There are three crocino defined inside the crocino.h header file + * + * @param idx One of the three crocino. + * @return the x coord. + */ + unsigned int getcrocino_y( unsigned char idx); + + /** Get the pixel size of the crocino. + * + * @return the pixel size of the crocino. + */ + unsigned int crocino_size( void); + + /** Return the size of the TS_Matrix size. + * + * @return the size of the TS_Matrix + */ + unsigned int gettsmatrixsize( void); + + /** Get the TS_Matrix + * + * @param pmatrix Pointer to an area of RAM where the function store the content of the TS_Matrix + */ + void gettsmatrix( unsigned char *pmatrix); + + /** Set the TS_Matrix with the content of the buffer. + * + * @param pmatrix Pointer to a buffer + */ + void settsmatrix( unsigned char *pmatrix); + + // + _TS_VALUE ts_val; + +protected: + /** + */ + unsigned int pressure( void); + + /** This function convert from touch to screen coord. + * The value are stored inside the struct ts_val + */ + unsigned int calibrate( void); + + /** Read the raw coordinate from the touchscreen + * + * @param struct ts that will old the data. + */ + void read( _TS_COORD *ts); + + _TS_VALUE TS_value; + _TS_COORD TS_coord; + SPI _spi; + DigitalOut _cs; + InterruptIn _penirq; +}; + +#endif \ No newline at end of file
diff -r 000000000000 -r 7ad454fed160 calibrate.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calibrate.c Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,363 @@ +/* + * + * Copyright (c) 2001, Carlos E. Vidales. All rights reserved. + * + * This sample program was written and put in the public domain + * by Carlos E. Vidales. The program is provided "as is" + * without warranty of any kind, either expressed or implied. + * If you choose to use the program within your own products + * you do so at your own risk, and assume the responsibility + * for servicing, repairing or correcting the program should + * it prove defective in any manner. + * You may copy and distribute the program's source code in any + * medium, provided that you also include in each copy an + * appropriate copyright notice and disclaimer of warranty. + * You may also modify this program and distribute copies of + * it provided that you include prominent notices stating + * that you changed the file(s) and the date of any change, + * and that you do not charge any royalties or licenses for + * its use. + * + * + * + * File Name: calibrate.c + * + * + * This file contains functions that implement calculations + * necessary to obtain calibration factors for a touch screen + * that suffers from multiple distortion effects: namely, + * translation, scaling and rotation. + * + * The following set of equations represent a valid display + * point given a corresponding set of touch screen points: + * + * + * /- -\ + * /- -\ /- -\ | | + * | | | | | Xs | + * | Xd | | A B C | | | + * | | = | | * | Ys | + * | Yd | | D E F | | | + * | | | | | 1 | + * \- -/ \- -/ | | + * \- -/ + * + * + * where: + * + * (Xd,Yd) represents the desired display point + * coordinates, + * + * (Xs,Ys) represents the available touch screen + * coordinates, and the matrix + * + * /- -\ + * |A,B,C| + * |D,E,F| represents the factors used to translate + * \- -/ the available touch screen point values + * into the corresponding display + * coordinates. + * + * + * Note that for practical considerations, the utilitities + * within this file do not use the matrix coefficients as + * defined above, but instead use the following + * equivalents, since floating point math is not used: + * + * A = An/Divider + * B = Bn/Divider + * C = Cn/Divider + * D = Dn/Divider + * E = En/Divider + * F = Fn/Divider + * + * + * + * The functions provided within this file are: + * + * setCalibrationMatrix() - calculates the set of factors + * in the above equation, given + * three sets of test points. + * getDisplayPoint() - returns the actual display + * coordinates, given a set of + * touch screen coordinates. + * translateRawScreenCoordinates() - helper function to transform + * raw screen points into values + * scaled to the desired display + * resolution. + * + * + */ + + +#define _CALIBRATE_C_ + + + +/****************************************************/ +/* */ +/* Included files */ +/* */ +/****************************************************/ + +#include "calibrate.h" + + + +/****************************************************/ +/* */ +/* Local Definitions and macros */ +/* */ +/****************************************************/ + + + +/****************************************************/ +/* */ +/* Global variables */ +/* */ +/****************************************************/ + + + +/****************************************************/ +/* */ +/* Forward Declaration of local functions */ +/* */ +/****************************************************/ + + + + + + +/********************************************************************** + * + * Function: setCalibrationMatrix() + * + * Description: Calling this function with valid input data + * in the display and screen input arguments + * causes the calibration factors between the + * screen and display points to be calculated, + * and the output argument - matrixPtr - to be + * populated. + * + * This function needs to be called only when new + * calibration factors are desired. + * + * + * Argument(s): displayPtr (input) - Pointer to an array of three + * sample, reference points. + * screenPtr (input) - Pointer to the array of touch + * screen points corresponding + * to the reference display points. + * matrixPtr (output) - Pointer to the calibration + * matrix computed for the set + * of points being provided. + * + * + * From the article text, recall that the matrix coefficients are + * resolved to be the following: + * + * + * Divider = (Xs0 - Xs2)*(Ys1 - Ys2) - (Xs1 - Xs2)*(Ys0 - Ys2) + * + * + * + * (Xd0 - Xd2)*(Ys1 - Ys2) - (Xd1 - Xd2)*(Ys0 - Ys2) + * A = --------------------------------------------------- + * Divider + * + * + * (Xs0 - Xs2)*(Xd1 - Xd2) - (Xd0 - Xd2)*(Xs1 - Xs2) + * B = --------------------------------------------------- + * Divider + * + * + * Ys0*(Xs2*Xd1 - Xs1*Xd2) + + * Ys1*(Xs0*Xd2 - Xs2*Xd0) + + * Ys2*(Xs1*Xd0 - Xs0*Xd1) + * C = --------------------------------------------------- + * Divider + * + * + * (Yd0 - Yd2)*(Ys1 - Ys2) - (Yd1 - Yd2)*(Ys0 - Ys2) + * D = --------------------------------------------------- + * Divider + * + * + * (Xs0 - Xs2)*(Yd1 - Yd2) - (Yd0 - Yd2)*(Xs1 - Xs2) + * E = --------------------------------------------------- + * Divider + * + * + * Ys0*(Xs2*Yd1 - Xs1*Yd2) + + * Ys1*(Xs0*Yd2 - Xs2*Yd0) + + * Ys2*(Xs1*Yd0 - Xs0*Yd1) + * F = --------------------------------------------------- + * Divider + * + * + * Return: OK - the calibration matrix was correctly + * calculated and its value is in the + * output argument. + * NOT_OK - an error was detected and the + * function failed to return a valid + * set of matrix values. + * The only time this sample code returns + * NOT_OK is when Divider == 0 + * + * + * + * NOTE! NOTE! NOTE! + * + * setCalibrationMatrix() and getDisplayPoint() will do fine + * for you as they are, provided that your digitizer + * resolution does not exceed 10 bits (1024 values). Higher + * resolutions may cause the integer operations to overflow + * and return incorrect values. If you wish to use these + * functions with digitizer resolutions of 12 bits (4096 + * values) you will either have to a) use 64-bit signed + * integer variables and math, or b) judiciously modify the + * operations to scale results by a factor of 2 or even 4. + * + * + */ +unsigned char setCalibrationMatrix( POINT * displayPtr, + POINT * screenPtr, + MATRIX * matrixPtr) +{ + + unsigned char retValue = OK ; + + + + matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - + ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ; + + if( matrixPtr->Divider == 0 ) + { + retValue = NOT_OK ; + } + else + { + matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - + ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ; + + matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) - + ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ; + + matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y + + (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y + + (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ; + + matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) - + ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ; + + matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) - + ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ; + + matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y + + (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y + + (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ; + } + + return( retValue ) ; + +} /* end of setCalibrationMatrix() */ + + + +/********************************************************************** + * + * Function: getDisplayPoint() + * + * Description: Given a valid set of calibration factors and a point + * value reported by the touch screen, this function + * calculates and returns the true (or closest to true) + * display point below the spot where the touch screen + * was touched. + * + * + * + * Argument(s): displayPtr (output) - Pointer to the calculated + * (true) display point. + * screenPtr (input) - Pointer to the reported touch + * screen point. + * matrixPtr (input) - Pointer to calibration factors + * matrix previously calculated + * from a call to + * setCalibrationMatrix() + * + * + * The function simply solves for Xd and Yd by implementing the + * computations required by the translation matrix. + * + * /- -\ + * /- -\ /- -\ | | + * | | | | | Xs | + * | Xd | | A B C | | | + * | | = | | * | Ys | + * | Yd | | D E F | | | + * | | | | | 1 | + * \- -/ \- -/ | | + * \- -/ + * + * It must be kept brief to avoid consuming CPU cycles. + * + * + * Return: OK - the display point was correctly calculated + * and its value is in the output argument. + * NOT_OK - an error was detected and the function + * failed to return a valid point. + * + * + * + * NOTE! NOTE! NOTE! + * + * setCalibrationMatrix() and getDisplayPoint() will do fine + * for you as they are, provided that your digitizer + * resolution does not exceed 10 bits (1024 values). Higher + * resolutions may cause the integer operations to overflow + * and return incorrect values. If you wish to use these + * functions with digitizer resolutions of 12 bits (4096 + * values) you will either have to a) use 64-bit signed + * integer variables and math, or b) judiciously modify the + * operations to scale results by a factor of 2 or even 4. + * + * + */ +unsigned char getDisplayPoint( POINT * displayPtr, + POINT * screenPtr, + MATRIX * matrixPtr ) +{ + unsigned char retValue = OK ; + + + if( matrixPtr->Divider != 0 ) + { + + /* Operation order is important since we are doing integer */ + /* math. Make sure you add all terms together before */ + /* dividing, so that the remainder is not rounded off */ + /* prematurely. */ + + displayPtr->x = ( (matrixPtr->An * screenPtr->x) + + (matrixPtr->Bn * screenPtr->y) + + matrixPtr->Cn + ) / matrixPtr->Divider ; + + displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) + + (matrixPtr->En * screenPtr->y) + + matrixPtr->Fn + ) / matrixPtr->Divider ; + } + else + { + retValue = NOT_OK ; + } + + return( retValue ) ; + +} /* end of getDisplayPoint() */ +
diff -r 000000000000 -r 7ad454fed160 calibrate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calibrate.h Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,117 @@ +/* + * + * Copyright (c) 2001, Carlos E. Vidales. All rights reserved. + * + * This sample program was written and put in the public domain + * by Carlos E. Vidales. The program is provided "as is" + * without warranty of any kind, either expressed or implied. + * If you choose to use the program within your own products + * you do so at your own risk, and assume the responsibility + * for servicing, repairing or correcting the program should + * it prove defective in any manner. + * You may copy and distribute the program's source code in any + * medium, provided that you also include in each copy an + * appropriate copyright notice and disclaimer of warranty. + * You may also modify this program and distribute copies of + * it provided that you include prominent notices stating + * that you changed the file(s) and the date of any change, + * and that you do not charge any royalties or licenses for + * its use. + * + * + * File Name: calibrate.h + * + * + * Definition of constants and structures, and declaration of functions + * in Calibrate.c + * + */ + +#ifndef _CALIBRATE_H_ + +#define _CALIBRATE_H_ + +/****************************************************/ +/* */ +/* Included files */ +/* */ +/****************************************************/ + +#include <math.h> + + +/****************************************************/ +/* */ +/* Definitions */ +/* */ +/****************************************************/ + +#ifndef _CALIBRATE_C_ + #define EXTERN extern +#else + #define EXTERN +#endif + + + +#ifndef OK + #define OK 0 + #define NOT_OK 1 +#endif + + + +#define INT32 long + + + + +/****************************************************/ +/* */ +/* Structures */ +/* */ +/****************************************************/ + + +typedef struct Point { + INT32 x, + y ; + } POINT ; + + + +typedef struct Matrix { + /* This arrangement of values facilitates + * calculations within getDisplayPoint() + */ + INT32 An, /* A = An/Divider */ + Bn, /* B = Bn/Divider */ + Cn, /* C = Cn/Divider */ + Dn, /* D = Dn/Divider */ + En, /* E = En/Divider */ + Fn, /* F = Fn/Divider */ + Divider ; + } MATRIX ; + + + + +/****************************************************/ +/* */ +/* Function declarations */ +/* */ +/****************************************************/ + + +EXTERN unsigned char setCalibrationMatrix( POINT * display, + POINT * screen, + MATRIX * matrix) ; + + +EXTERN unsigned char getDisplayPoint( POINT * display, + POINT * screen, + MATRIX * matrix ) ; + + +#endif /* _CALIBRATE_H_ */ +
diff -r 000000000000 -r 7ad454fed160 crocino.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crocino.h Wed May 23 06:25:31 2012 +0000 @@ -0,0 +1,48 @@ +const unsigned int crocino[]= +{ + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF, + + 0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000, + + 0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF, + 0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000 +}; + \ No newline at end of file