www.pudn.com > uC-GUI-V3-98.zip > NEC_PingPong.c


/* 
********************************************************************************************************* 
*                                                uC/GUI 
*                        Universal graphic software for embedded applications 
* 
*                       (c) Copyright 2002, Micrium Inc., Weston, FL 
*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH 
* 
*              µC/GUI is protected by international copyright laws. Knowledge of the 
*              source code may not be used to write a similar product. This file may 
*              only be used in accordance with a license and should not be redistributed 
*              in any way. We appreciate your understanding and fairness. 
* 
---------------------------------------------------------------------- 
File        : NEC_PingPong.c 
Purpose     : NEC-Ping-Pong-Speed-Game 
---------------------------END-OF-HEADER------------------------------ 
*/ 
 
#include  
#include  
#include  
#include "GUI.h" 
#include "WM.h" 
#include "BUTTON.h" 
 
/********************************************************************* 
* 
*       Static const data 
* 
********************************************************************** 
*/ 
/********************************************************************* 
* 
*       NEC_Logo 
*/ 
static const GUI_COLOR _ColorsLogoNEC[] = { 
   0x000000,0xA60000,0xB10000,0xAB0000 
  ,0xB90000,0xC00000,0xC80000,0xCD0000 
  ,0xDC2323,0xD21919,0xC50000,0xBC0000 
  ,0xD92020,0xCA0000,0xD70000,0xB40000 
}; 
 
static const GUI_LOGPALETTE _PalLogoNEC = { 
  16,	/* number of entries */ 
  1, 	/* No transparency */ 
  &_ColorsLogoNEC[0] 
}; 
 
static const unsigned char _acLogoNEC[] = { 
  0x01, 0x22, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x21, 0x00, 0x32, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x24, 0x56, 0x77, 0x88, 0x88, 0x97, 0x76, 0xAB, 0x30, 
  0x02, 0xCC, 0xCC, 0xCC, 0xC8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC7, 0x00, 0x00, 0x00, 0x2A, 0x9C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x50, 
  0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCD, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC7, 0x00, 0x00, 0x27, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xE8, 0x8E, 0xCC, 0xCC, 0x50, 
  0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x87, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x7A, 0x00, 0x0F, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0xA4, 0x30, 0x00, 0x00, 0x03, 0x24, 0x20, 
  0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xCC, 0xCC, 0xCC, 0xCC, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x50, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCB, 0x00, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xCC, 0xCC, 0xCC, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xC6, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x17, 0xCC, 0xCC, 0xCC, 0xCC, 0xC2, 0x00, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x74, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x30, 0x06, 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x01, 0x9C, 0xCC, 0xCC, 0xCC, 0xCE, 0x30, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x07, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x83, 0x00, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x08, 0xCC, 0xCC, 0xCC, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0x03, 0xEC, 0xCC, 0xCC, 0xCC, 0xC9, 0xF0, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0x95, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x30, 0x09, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x2C, 0xCC, 0xCC, 0xCC, 0xCC, 0x71, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xCC, 0xCC, 0xCC, 0xCC, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x0F, 0xCC, 0xCC, 0xCC, 0xCC, 0xCD, 0x08, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xCC, 0xCC, 0xCC, 0xCC, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0xBC, 0xCC, 0xCC, 0xCC, 0xCC, 0x68, 0xCC, 0xC3, 0x00, 0x7C, 0xCC, 0xCC, 0xCC, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xCC, 0xCC, 0xCC, 0xCC, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x05, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0xDC, 0xCC, 0xCC, 0xCC, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xEC, 0xCC, 0xCC, 0xCC, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0xAC, 0xCC, 0xCC, 0xCC, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xCC, 0xCC, 0xCC, 0xCC, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0x4C, 0xCC, 0xCC, 0xCC, 0xCC, 0x65, 0xB4, 0x44, 0x44, 0x44, 0x44, 0x4B, 0x00, 0x07, 0xCC, 0xCC, 0xCC, 0xCC, 0xC8, 0x52, 0x10, 0x00, 0x00, 0x03, 0x24, 0x40, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0x19, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x01, 0xAC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0x88, 0x8E, 0xCC, 0xCC, 0x70, 
  0x02, 0xCC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0xCC, 0xCC, 0xCC, 0xCC, 0xC3, 0x00, 0x03, 0x7C, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x03, 0xAE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x70, 
  0x03, 0xAA, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xAA, 0xAA, 0xAA, 0xA1, 0x00, 0x00, 0x02, 0xB6, 0x77, 0x79, 0x88, 0x88, 0x88, 0x88, 0x77, 0x77, 0x6A, 0x00, 0x00, 0x00, 0x01, 0xF5, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC8, 0xA0, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x32, 0x22, 0x22, 0x22, 0x33, 0x00, 0x00 
}; 
 
static const GUI_BITMAP _LogoNEC = { 
 82, /* XSize */ 
 22, /* YSize */ 
 41, /* BytesPerLine */ 
  4, /* BitsPerPixel */ 
 _acLogoNEC,   /* Pointer to picture data (indices) */ 
 &_PalLogoNEC  /* Pointer to palette */ 
}; 
 
/********************************************************************* 
* 
*       Micrium_Logo 
*/ 
/*   Palette 
The following are the entries of the palette table. 
Every entry is a 32-bit value (of which 24 bits are actually used) 
the lower   8 bits represent the Red component, 
the middle  8 bits represent the Green component, 
the highest 8 bits (of the 24 bits used) represent the Blue component 
as follows:   0xBBGGRR 
*/ 
 
static GUI_CONST_STORAGE GUI_COLOR ColorsMicriumLogo[] = { 
     0x000000,0x000080,0x008000,0x008080 
    ,0x800000,0x800080,0x808000,0x808080 
    ,0xC0C0C0,0x0000FF,0x00FF00,0x00FFFF 
    ,0xFF0000,0xFF00FF,0xFFFF00,0xFFFFFF 
}; 
 
static GUI_CONST_STORAGE GUI_LOGPALETTE PalMicriumLogo = { 
  16,	/* number of entries */ 
  0, 	/* No transparency */ 
  &ColorsMicriumLogo[0] 
}; 
 
static GUI_CONST_STORAGE unsigned char acMicriumLogo[] = { 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x00, 0x00, 0x0F,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xFF, 0xFF, 0x70, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7, 0x00, 0x00, 0x0F,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x8F, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x88, 0x88, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x88, 0x88, 0xFF, 0xFF, 0xFF, 0x88, 0x88, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x70, 0x00, 0x08, 0xFF, 0xF7, 0x00, 0x07, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x78, 0xFF, 0xFF, 0xFF, 0x70, 0x00, 0x08, 0x80, 0x00, 0x07, 0xF7, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x08, 0xFF, 0xF7, 0x00, 0x00, 0x7F, 0x87, 0x00, 0x00, 0x07, 0xFF, 0x87, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x87, 0x00, 0x07, 0xFF, 0x80, 0x00, 0x08, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0x70, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x87, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x0F, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x88, 0x00, 0x00, 0x8F, 0x70, 0x00, 0x0F, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x07, 0x77, 0x00, 0x00, 0x00, 0x8F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x7F, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x8F, 0xFF, 0x70, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x07, 0x88, 0x8F, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x00, 0x78, 0x70, 0x00, 0x00, 0x00, 0x78, 0x80, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x8F, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x08, 0xFF, 0xFF, 0xF7, 0x77, 0x8F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0x70, 0x00, 0x07, 0x00, 0x00, 0x8F, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x8F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0x80, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0xF0, 0x00, 0x00, 0x00, 0x07, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0xF7, 0x00, 0x00, 0x00, 0x08, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF8, 0x88, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x0F, 0xFF, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0xF7, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x07, 0xFF, 0xF0, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0xFF, 0x70, 0x00, 0x00, 0x8F, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0xFF, 0x70, 0x00, 0x00, 0x8F, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF0, 0x00, 0x00, 0x8F, 0xFF, 0x70, 0x00, 0x00, 0xFF, 0xFF, 0x70, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xFF, 0xFF, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x0F,  
        0xFF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xF7, 0x00, 0x00, 0x08, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x00, 0x07, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xF7, 0x77, 0x77, 0x8F, 0xFF, 0xF7, 0x77, 0x77, 0xFF, 0xFF, 0x77, 0x77, 0x77, 0xFF, 0xFF, 0x77, 0x77, 0x77, 0xFF, 0xFF, 0xFF, 0xF8, 0x77, 0x70, 0x00, 0x77, 0x8F, 0xFF, 0xFF, 0xFF, 0x77, 0x77, 0x77, 0xFF, 0xFF, 0xFF, 0xF7, 0x77, 0x77, 0x7F,  
        0xFF, 0xF7, 0x00, 0x00, 0x78, 0x70, 0x78, 0x77, 0x77, 0x78, 0xFF, 0xF8, 0x77, 0x77, 0x7F, 0xFF, 0xF8, 0x77, 0x77, 0x78, 0xFF, 0xF8, 0x77, 0x77, 0x77, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xF7, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xF0, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xF8, 0x77, 0x77, 0x8F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,  
        0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 
}; 
 
GUI_CONST_STORAGE GUI_BITMAP _MicriumLogo = { 
  138, /* XSize */ 
  64, /* YSize */ 
  69, /* BytesPerLine */ 
  4, /* BitsPerPixel */ 
  acMicriumLogo,  /* Pointer to picture data (indices) */ 
  &PalMicriumLogo  /* Pointer to palette */ 
}; 
 
 
/********************************************************************* 
* 
*       Defines 
* 
********************************************************************** 
*/ 
 
#define LOGOMULX                400 
#define LOGOMULY                400 
 
#define PI2                     6.2831853f 
 
#define RPM                     10 
#define UPS                     25 
#define LOGO_WAITTIME           (1000 / UPS) 
#define SCREENSAVER_WAITTIME    7000 
 
#define MIN(a, b)       ((a < b) ? a : b) 
#define MAX(a, b)       ((a > b) ? a : b) 
#define MIN3(a, b, c)   ((a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c)) 
#define MAX3(a, b, c)   ((a < b) ? ((b < c) ? c : b) : ((a < c) ? c : a)) 
 
#define WINNER(a, b, c) ((a <= b) ? ((a <= c) ? 0 : 2) : ((b <= c) ? 1 : 2)) 
 
#define ID_BUTTON_START         (GUI_ID_USER+0) 
 
/********************************************************************* 
* 
*       Types 
* 
********************************************************************** 
*/ 
 
typedef enum { 
  NO_INIT, 
  SHOW_MENU, 
  SHOW_REDLIGHT, 
  SHOW_YELLOWLIGHT, 
  SHOW_GREENLIGHT, 
  SHOW_STOPWATCH, 
  SHOW_WINNER, 
  SHOW_STATISTICS 
} GAME_STATE; 
 
/********************************************************************* 
* 
*       Static data 
* 
********************************************************************** 
*/ 
 
static WM_HWIN      _hWinScreenSaver; 
static int          _ScreenSaverPrevTime; 
 
static GAME_STATE   _GameState; 
static GAME_STATE   _NewGameState; 
static int          _IsGameOver; 
static int          _GameWaitTime; 
static int          _StopWatchTime; 
static int          _GameCount; 
static int          _GameHalt; 
 
static int          _NECLogoPrevTime; 
static int          _NECLogoX  = 160; 
static int          _NECLogoY  = 120; 
static int          _NECLogoDX = 3; 
static int          _NECLogoDY = -2; 
 
static int          _MicriumLogoPrevTime; 
static int          _MicriumLogoMulX; 
static int          _MicriumLogoPrevMulX; 
static float        _MicriumLogoDivisor; 
static float        _MicriumLogoAngle; 
 
static int          _PlayerTime[3]; 
static int          _PlayerState[3]; 
 
/********************************************************************* 
* 
*       Function declarations 
* 
********************************************************************** 
*/ 
 
static void _cbScreenSaver(WM_MESSAGE* pMsg); 
 
/********************************************************************* 
* 
*       Static code 
* 
********************************************************************** 
*/ 
/********************************************************************* 
* 
*       _InvalidateRect 
*/ 
static void _InvalidateRect(WM_HWIN hWin, int x, int y, int w, int h) { 
  GUI_RECT r; 
  r.x0 = x; 
  r.y0 = y; 
  r.x1 = x + w - 1; 
  r.y1 = y + h - 1; 
  WM_InvalidateRect(hWin, &r); 
} 
 
/********************************************************************* 
* 
*       _HandleCompanyLogo 
*/ 
static void _HandleCompanyLogo(void) { 
  if (_hWinScreenSaver) { 
    if ((GUI_GetTime() - _NECLogoPrevTime) >= 50) { 
      _NECLogoPrevTime = GUI_GetTime(); 
      _InvalidateRect(_hWinScreenSaver, _NECLogoX, _NECLogoY, _LogoNEC.XSize, _LogoNEC.YSize); 
      _NECLogoX += _NECLogoDX; 
      if (_NECLogoX < 0) { 
        _NECLogoX  = 0; 
        _NECLogoDX = -_NECLogoDX; 
      } else if (_NECLogoX > (LCD_GetXSize() - _LogoNEC.XSize)) { 
        _NECLogoX  = LCD_GetXSize() - _LogoNEC.XSize - 1; 
        _NECLogoDX = -_NECLogoDX; 
      } 
      _NECLogoY += _NECLogoDY; 
      if (_NECLogoY < 0) { 
        _NECLogoY  = 0; 
        _NECLogoDY = -_NECLogoDY; 
      } else if (_NECLogoY > (LCD_GetYSize() - _LogoNEC.YSize)) { 
        _NECLogoY  = LCD_GetYSize() - _LogoNEC.YSize - 1; 
        _NECLogoDY = -_NECLogoDY; 
      } 
      _InvalidateRect(_hWinScreenSaver, _NECLogoX, _NECLogoY, _LogoNEC.XSize, _LogoNEC.YSize); 
    } 
  } 
  if ((GUI_GetTime() - _MicriumLogoPrevTime) >= LOGO_WAITTIME) { 
    _MicriumLogoDivisor  = 60000 / RPM / PI2; 
    _MicriumLogoAngle   += (GUI_GetTime() - _MicriumLogoPrevTime) / _MicriumLogoDivisor; 
    _MicriumLogoPrevTime = GUI_GetTime(); 
    _MicriumLogoMulX     = cos(_MicriumLogoAngle) * LOGOMULX; 
    if (_MicriumLogoMulX != _MicriumLogoPrevMulX) { 
      int x, y, w, h; 
      _MicriumLogoPrevMulX = _MicriumLogoMulX; 
      w = (_MicriumLogo.XSize * LOGOMULX / 1000) + 1; 
      h = (_MicriumLogo.YSize * LOGOMULY / 1000) + 1; 
      x = LCD_GetXSize() - w - 6; 
      y = LCD_GetYSize() - h - 6; 
      if (_hWinScreenSaver) { 
        _InvalidateRect(_hWinScreenSaver, x, y, w, h); 
      } else { 
        _InvalidateRect(WM_HBKWIN, x, y, w, h); 
      } 
    } 
  } 
} 
 
/********************************************************************* 
* 
*       _ScreenSaverOn 
*/ 
static void _ScreenSaverOn(void) { 
  if (_hWinScreenSaver == 0) { 
    _hWinScreenSaver = WM_CreateWindow(0, 0, LCD_GetXSize(), LCD_GetYSize(), 
                                       WM_CF_SHOW | WM_CF_STAYONTOP, &_cbScreenSaver, 0); 
    WM_SetFocus(_hWinScreenSaver); 
  } 
} 
 
/********************************************************************* 
* 
*       _ScreenSaverOff 
*/ 
static void _ScreenSaverOff(void) { 
  if (_hWinScreenSaver) { 
    WM_DeleteWindow(_hWinScreenSaver); 
    WM_SetFocus(WM_HBKWIN); 
    _hWinScreenSaver = 0; 
    WM_SelectWindow(WM_HBKWIN); 
    GUI_SetBkColor(GUI_BLACK); 
    GUI_Clear(); 
  } 
  _ScreenSaverPrevTime = GUI_GetTime(); 
} 
 
/********************************************************************* 
* 
*       _HandleScreenSaver 
*/ 
static void _HandleScreenSaver(void) { 
  if ((_hWinScreenSaver == 0) && (_GameState == SHOW_MENU)) { 
    if ((GUI_GetTime() - _ScreenSaverPrevTime) >= SCREENSAVER_WAITTIME) { 
      if (_ScreenSaverPrevTime != 0) { 
        _ScreenSaverOn(); 
      } 
      _ScreenSaverPrevTime = GUI_GetTime(); 
    } 
  } 
} 
 
/********************************************************************* 
* 
*       _InitStep 
*/ 
static void _InitStep(void) { 
  if (_GameState != _NewGameState) { 
    _GameState = _NewGameState; 
    WM_InvalidateWindow(WM_HBKWIN); 
    _ScreenSaverOff(); 
  } 
} 
 
/********************************************************************* 
* 
*       _NextStep 
*/ 
static void _NextStep(unsigned Delay) { 
  if (_NewGameState < SHOW_STATISTICS) { 
    _NewGameState++; 
  } else { 
    _NewGameState = SHOW_MENU; 
  } 
  _GameWaitTime = GUI_GetTime() + Delay; 
  _GameHalt = 0; 
} 
 
/********************************************************************* 
* 
*       _Delay 
*/ 
static void _Delay(unsigned Delay) { 
  _GameWaitTime = GUI_GetTime() + Delay; 
} 
 
/********************************************************************* 
* 
*       _Halt 
*/ 
static void _Halt(void) { 
  _GameHalt = 1; 
} 
 
/********************************************************************* 
* 
*       _StartGame 
*/ 
static void _StartGame(void) { 
  _GameCount++; 
  _StopWatchTime = GUI_GetTime(); 
  /* TBD: Start game */ 
} 
 
/********************************************************************* 
* 
*       _EndGame 
*/ 
static void _EndGame(void) { 
  _GameState = SHOW_MENU; 
  WM_InvalidateWindow(WM_HBKWIN); 
} 
 
/********************************************************************* 
* 
*       _HandleGame 
*/ 
static void _HandleGame(void) { 
  if (_hWinScreenSaver == 0) { 
    if ((GUI_GetTime() >= _GameWaitTime) && !_GameHalt) { 
      _InitStep(); 
      switch (_NewGameState) { 
      case NO_INIT: 
        _NextStep(0); 
        break; 
      case SHOW_MENU: 
        { 
          WM_HWIN hWin; 
          hWin = BUTTON_CreateEx(270, 270, 100, 30, WM_HBKWIN, WM_CF_SHOW, 0, ID_BUTTON_START); 
          BUTTON_SetText(hWin, "Start Game"); 
          _Halt(); 
        } 
        break; 
      case SHOW_REDLIGHT: 
        WM_DeleteWindow(WM_GetDialogItem(WM_HBKWIN, ID_BUTTON_START)); 
        _NextStep(2250); 
        break; 
      case SHOW_YELLOWLIGHT: 
        _NextStep(2250); 
        break; 
      case SHOW_GREENLIGHT: 
        _NextStep(1000); 
        _StartGame(); 
        break; 
      case SHOW_STOPWATCH: 
        //if (_IsGameOver) { 
        if ((GUI_GetTime() - _StopWatchTime) > 5000) { 
          _NextStep(0); 
        } else { 
          WM_InvalidateWindow(WM_HBKWIN); 
          _Delay(20); 
        } 
        break; 
      case SHOW_WINNER: 
        _NextStep(4000); 
        break; 
      case SHOW_STATISTICS: 
        _NextStep(4000); 
        break; 
      } 
    } 
  } 
} 
 
/********************************************************************* 
* 
*       Static code, drawing functions 
* 
********************************************************************** 
*/ 
/********************************************************************* 
* 
*       _DrawRoundRect 
*/ 
static void _DrawRoundRect(int x, int y, int w, int h, int r) { 
  GUI_COLOR Color; 
  if ((w < (r << 2)) || (h < (r << 2))) { 
    r = (w < h) ? (w >> 2) : (h >> 2); 
  } 
  Color = GUI_GetColor(); 
  GUI_SetColor(GUI_GetBkColor()); 
  GUI_FillCircle(x + r,         y + r, r); 
  GUI_FillCircle(x + w - r - 1, y + r, r); 
  GUI_FillCircle(x + r,         y + h - r - 1, r); 
  GUI_FillCircle(x + w - r - 1, y + h - r - 1, r); 
  GUI_SetColor(Color); 
  GUI_DrawCircle(x + r,         y + r, r); 
  GUI_DrawCircle(x + w - r - 1, y + r, r); 
  GUI_DrawCircle(x + r,         y + h - r - 1, r); 
  GUI_DrawCircle(x + w - r - 1, y + h - r - 1, r); 
  GUI_DrawHLine(y, x + r, x + w - r - 1); 
  GUI_DrawVLine(x, y + r, y + h - r - 1); 
  GUI_DrawVLine(x + w - 1, y + r, y + h - r - 1); 
  GUI_DrawHLine(y + h - 1, x + r, x + w - r - 1); 
  GUI_ClearRect(x + r, y + 1, x + w - r - 1, y + r - 1); 
  GUI_ClearRect(x + 1, y + r, x + w - 2, y + h - r - 1); 
  GUI_ClearRect(x + r, y + h - r, x + w - r - 1, y + h - 2); 
} 
 
/********************************************************************* 
* 
*       _DrawStopLight 
*/ 
static void _DrawStopLight(int x, int y, int w, int h, int State) { 
  int Border, i, xL, yL, r; 
  Border = w / 11; 
  GUI_SetBkColor(0xE0E0E0); 
  GUI_SetColor(GUI_BLACK); 
  _DrawRoundRect(x, y, w, h, 2 * Border); 
  GUI_SetBkColor(0x686868); 
  _DrawRoundRect(x + Border, y + Border, w - (2 * Border), h - (2 * Border), Border * 8 / 5); 
  xL = x + (w >> 1); 
  r  = (h - (2 * Border)) / 6; 
  for (i = 0; i < 3; i++) { 
    yL = y + Border + ((h - (2 * Border)) * ((i << 1) + 1) / 6); 
    GUI_SetColor(GUI_BLACK); 
    GUI_FillCircle(xL, yL, r - 3); 
    if ((State >> i) & 1) { 
      if (i == 0) { 
        GUI_SetColor(0x0040FF); 
      } else if (i == 1) { 
        GUI_SetColor(0x00E0FF); 
      } else { 
        GUI_SetColor(0x00FF60); 
      } 
    } else { 
      GUI_SetColor(0x383838); 
    } 
    GUI_FillCircle(xL, yL, r - 6); 
  } 
} 
 
/********************************************************************* 
* 
*       _DrawSeggerLogo 
*/ 
static void _DrawMicriumLogo(void) { 
  int x, y, w, h; 
  w = (_MicriumLogo.XSize * LOGOMULX / 1000) + 1; 
  h = (_MicriumLogo.YSize * LOGOMULY / 1000) + 1; 
  x = LCD_GetXSize() - w - 6; 
  y = LCD_GetYSize() - h - 6; 
  GUI_SetBkColor(GUI_BLACK); 
  GUI_ClearRect(x, y, x + w - 1, y + h - 1); 
  GUI_DrawBitmapEx(&_MicriumLogo, x + w / 2, y + h / 2, 
                   (_MicriumLogo.XSize / 2) - 1, (_MicriumLogo.YSize / 2) - 1, _MicriumLogoMulX, LOGOMULY); 
} 
 
/********************************************************************* 
* 
*       Static code, callbacks 
* 
********************************************************************** 
*/ 
/********************************************************************* 
* 
*       _OnPaintBkWin 
*/ 
static void _OnPaintBkWin(void) { 
  char ac[32]; 
  int  Time, Winner; 
  _DrawMicriumLogo(); 
 
  GUI_SetBkColor(GUI_BLACK); 
  GUI_SetColor(GUI_YELLOW); 
  GUI_SetFont(&GUI_Font32_ASCII); 
  GUI_DispStringHCenterAt("Speed Ball", LCD_GetXSize() * 5 / 6, 8); 
 
  GUI_SetFont(&GUI_Font32B_ASCII); 
  GUI_SetColor(GUI_WHITE); 
  switch (_GameState) { 
  case SHOW_MENU: 
    GUI_ClearRect(0, 40, 639, 439); 
    GUI_DispStringHCenterAt("Menu", 320, 200); 
    break; 
  case SHOW_REDLIGHT: 
    GUI_ClearRect(260, 80, 500, 400); 
    GUI_DispStringHCenterAt("On Your Marks !", 380, 200); 
    _DrawStopLight(40, 40, 180, 400, 1); 
    break; 
  case SHOW_YELLOWLIGHT: 
    GUI_ClearRect(260, 160, 500, 240); 
    GUI_DispStringHCenterAt("SET..!", 380, 200); 
    _DrawStopLight(40, 40, 180, 400, 2); 
    break; 
  case SHOW_GREENLIGHT: 
    GUI_ClearRect(260, 160, 500, 240); 
    GUI_DispStringHCenterAt("GO !", 380, 200); 
    _DrawStopLight(40, 40, 180, 400, 4); 
    break; 
  case SHOW_STOPWATCH: 
    Time = GUI_GetTime() - _StopWatchTime; 
    sprintf(ac, "Time: %.2d:%.2d.%.2d", Time / 60000, (Time / 1000) % 60, (Time / 10) % 100); 
    GUI_ClearRect(0, 40, 639, 439); 
    GUI_DispStringHCenterAt(ac, 320, 200); 
    break; 
  case SHOW_WINNER: 
    Winner = WINNER(_PlayerTime[0], _PlayerTime[1], _PlayerTime[2]); 
    GUI_ClearRect(0, 40, 639, 439); 
    GUI_DispStringHCenterAt("!! WINNER !!", 320, 200); 
    sprintf(ac, "Player %d", Winner + 1); 
    GUI_DispStringHCenterAt(ac, 320, 240); 
    break; 
  case SHOW_STATISTICS: 
    GUI_ClearRect(0, 40, 639, 439); 
    GUI_DispStringHCenterAt("Statistics", 320, 200); 
    GUI_DispStringAt("1.   Player 1     Time: 00:15.63", 120, 250); 
    GUI_DispStringAt("2.   Player 3     Time: 00:18.22", 120, 290); 
    GUI_DispStringAt("3.   Player 2     Time: 00:21.95", 120, 330); 
    break; 
  } 
 
} 
 
/********************************************************************* 
* 
*       _cbBkWindow 
*/ 
static void _cbBkWindow(WM_MESSAGE* pMsg) { 
  switch (pMsg->MsgId) { 
  case WM_PAINT: 
    _OnPaintBkWin(); 
    break; 
  case WM_NOTIFY_PARENT: 
    if (pMsg->Data.v == WM_NOTIFICATION_RELEASED) { 
      int Id = WM_GetId(pMsg->hWinSrc); 
      if (Id == ID_BUTTON_START) { 
        _NextStep(0); 
      } 
    } 
    break; 
  case WM_KEY: 
  case WM_TOUCH: 
  case WM_PID_STATE_CHANGED: 
#if GUI_SUPPORT_MOUSE 
  case WM_MOUSEOVER: 
#endif 
    _ScreenSaverOff(); 
    break; 
  default: 
    WM_DefaultProc(pMsg); 
  } 
} 
 
/********************************************************************* 
* 
*       _cbScreenSaver 
*/ 
static void _cbScreenSaver(WM_MESSAGE* pMsg) { 
  switch (pMsg->MsgId) { 
  case WM_PAINT: 
    GUI_SetBkColor(GUI_BLACK); 
    GUI_Clear(); 
    _DrawMicriumLogo(); 
    GUI_DrawBitmap(&_LogoNEC, _NECLogoX, _NECLogoY); 
    break; 
  case WM_KEY: 
  case WM_TOUCH: 
  case WM_PID_STATE_CHANGED: 
#if GUI_SUPPORT_MOUSE 
  case WM_MOUSEOVER: 
#endif 
    _ScreenSaverOff(); 
    break; 
  default: 
    WM_DefaultProc(pMsg); 
  } 
} 
 
/********************************************************************* 
* 
*       Public code 
* 
********************************************************************** 
*/ 
/********************************************************************* 
* 
*       MainTask 
*/ 
void MainTask(void); 
void MainTask(void) { 
  GUI_Init(); 
  WM_SetCallback(WM_HBKWIN, &_cbBkWindow); 
  //_GameState = SHOW_MENU; 
  GUI_Clear(); 
  while (1) { 
    _HandleCompanyLogo(); 
    _HandleScreenSaver(); 
    _HandleGame(); 
    GUI_Delay(5); 
  } 
} 
 
/*************************** End of file ****************************/