Adjust to HSV

This commit is contained in:
Miloslav Číž 2018-09-27 12:55:03 +02:00
parent 23685a022a
commit b4958c4295
4 changed files with 1088 additions and 1258 deletions

View file

@ -38,9 +38,6 @@ Player player;
Sprite sprites[SPRITES]; Sprite sprites[SPRITES];
unsigned char floorGradient[15];
unsigned char ceilGradient[15];
/// For each level square says the texture index. /// For each level square says the texture index.
const unsigned char levelTexture[] = const unsigned char levelTexture[] =
{ {
@ -1002,16 +999,6 @@ int16_t intensity;
uint8_t color; uint8_t color;
/*
RCL_Unit depth = pixel->depth - RCL_UNITS_PER_SQUARE * 3;
depth = depth > 0 ? depth : 1;
intensity = 0;//32 - (depth * 32) / (RCL_UNITS_PER_SQUARE * 4);
if (intensity < 0)
intensity = 0;
*/
intensity = 8 - pixel->depth / (RCL_UNITS_PER_SQUARE / 2); intensity = 8 - pixel->depth / (RCL_UNITS_PER_SQUARE / 2);
if (pixel->isWall) if (pixel->isWall)
@ -1019,9 +1006,6 @@ int16_t intensity;
if ((pixel->hit.direction == 0 || pixel->hit.direction == 2)) if ((pixel->hit.direction == 0 || pixel->hit.direction == 2))
intensity -= 2; intensity -= 2;
// if (intensity < 0)
// intensity = 0;
#if RCL_COMPUTE_WALL_TEXCOORDS == 1 #if RCL_COMPUTE_WALL_TEXCOORDS == 1
color = sampleImage(textures[pixel->hit.type],pixel->texCoords.x,pixel->texCoords.y); color = sampleImage(textures[pixel->hit.type],pixel->texCoords.x,pixel->texCoords.y);
#else #else
@ -1029,18 +1013,14 @@ int16_t intensity;
#endif #endif
color = addIntensity(color,intensity); color = addIntensity(color,intensity);
// color = addIntensity(color,intensity - 3);
} }
else else
{ {
intensity = 8 - pixel->depth / (RCL_UNITS_PER_SQUARE / 2); intensity = 8 - pixel->depth / (RCL_UNITS_PER_SQUARE / 2);
color = pixel->isFloor ? color = pixel->isFloor ?
addIntensity(186,intensity): addIntensity(40,intensity):
addIntensity(135,intensity); addIntensity(18,intensity);
//floorGradient[RCL_clamp(intensity,0,14)] :
//ceilGradient[RCL_clamp(intensity,0,14)];
} }
putSubsampledPixel(pixel->position.x,pixel->position.y,color); putSubsampledPixel(pixel->position.x,pixel->position.y,color);
@ -1048,25 +1028,6 @@ int16_t intensity;
void draw() void draw()
{ {
/*
uint16_t count = 0;
for (uint8_t y = 0; y < 22; ++y)
for (uint8_t x = 0; x < 16; ++x)
{
if (count > 255)
break;
for (uint8_t i = 0; i < 4; ++i)
for (uint8_t j = 0; j < 4; ++j)
pokitto.display.drawPixel(x * 4 + i,y * 4 + j,count);
count++;
}
return;
*/
RCL_renderComplex(player.mCamera,floorHeightAt,ceilingHeightAt,textureAt,defaultConstraints); RCL_renderComplex(player.mCamera,floorHeightAt,ceilingHeightAt,textureAt,defaultConstraints);
RCL_Unit previousDepth; RCL_Unit previousDepth;
@ -1130,9 +1091,6 @@ int main()
{ {
initGeneral(); initGeneral();
initGradient(floorGradient,rgbToIndex(3,7,0));
initGradient(ceilGradient,rgbToIndex(6,2,1));
defaultConstraints.maxHits = 8; defaultConstraints.maxHits = 8;
defaultConstraints.maxSteps = 15; defaultConstraints.maxSteps = 15;

1379
demo2.cpp

File diff suppressed because it is too large Load diff

725
demo3.cpp
View file

@ -65,9 +65,6 @@ int16_t editCounter = 0;
#define SQUARE_COLORS 4 #define SQUARE_COLORS 4
uint8_t squareColors[SQUARE_COLORS]; uint8_t squareColors[SQUARE_COLORS];
unsigned char floorGradient[15];
unsigned char wallGradients[SQUARE_COLORS][15];
#define HEIGHT_PROFILE_LENGTH 256 #define HEIGHT_PROFILE_LENGTH 256
/// Used for terrain generation. /// Used for terrain generation.
@ -84,352 +81,352 @@ const int8_t heightProfile[] = {
const unsigned char imageBackground[] = const unsigned char imageBackground[] =
{ 110, 44 // width, height { 110, 44 // width, height
,0xef,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x2f,0x2f ,0x7f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x7d,0x7d,0x0f,0x0f,0x2f,0x2f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf ,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xdd,0xda,0x38,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9
,0xaf,0xaf,0xef,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0x0f,0x0f ,0xa9,0xa9,0x7f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x7d,0x7d,0x0f,0x0f
,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf ,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0x38,0xa9,0xa9,0xa9,0xa9,0xa9
,0xaf,0xaf,0xaf,0xaf,0xef,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xef,0xef ,0xa9,0xa9,0xa9,0xa9,0x7f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x7d,0x7d
,0x0f,0x0f,0x2f,0x2f,0x0b,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf ,0x0f,0x0f,0x2f,0x2f,0x08,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf ,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0x38,0xa9,0xa9,0xa9
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f ,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0x7f,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f
,0xef,0xef,0x0f,0x0f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7d,0x0f,0x0f,0x2f,0x2f,0x2f,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf ,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0x38,0xa9
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x0f,0x0f,0x0f,0x2f,0x2f ,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0x7f,0x0f,0x0f,0x0f,0x2f,0x2f
,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef ,0x2f,0x2f,0x7d,0x7d,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x6c,0xee,0xee,0xee
,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x0f,0x0f ,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9,0x7f,0x2f,0x0f,0x0f
,0x2f,0x2f,0x2f,0x2f,0xef,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xef,0xef ,0x2f,0x2f,0x2f,0x2f,0x7d,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xee,0x6c
,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd
,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x0f ,0xda,0xda,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0x7f,0x0f
,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xef,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f ,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x7d,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f
,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
,0xef,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0xef,0x2f,0x0f,0x0f,0x0f,0x2f ,0x7f,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x7d,0x2f,0x0f,0x0f,0x0f,0x2f
,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
,0xaf,0xaf,0xef,0x2f,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f,0x0b,0x2f,0x0f,0x0f ,0xaa,0xaa,0x7f,0x2f,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f,0x7d,0x2f,0x0f,0x0f
,0x0f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf ,0x0f,0x2f,0x2f,0x2f,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f ,0xaa,0xaa,0xaa,0xaa,0x7f,0x2f,0x0f,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f
,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf ,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf ,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xaa,0xab,0xaa,0xab
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f ,0xaa,0xab,0xaa,0xab,0xaa,0xab,0x7f,0x2f,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f
,0x2f,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xdf ,0x2f,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0x6c,0xee,0xee,0xee,0xee,0xec
,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf ,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xab,0xaa
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x0f,0x0f,0x2f,0x2f ,0xab,0xaa,0xab,0xaa,0xab,0xaa,0xab,0xaa,0x7f,0x2f,0x0f,0x0f,0x2f,0x2f
,0x2f,0x2f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xef,0xef,0xef,0xef ,0x2f,0x2f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xee,0x6c,0xee,0xee
,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x0f,0x2f ,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0x7f,0x2f,0x0f,0x2f
,0x2f,0x2f,0x0f,0x2f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xef,0xef ,0x2f,0x2f,0x0f,0x2f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x6c,0xee
,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x2f ,0xdd,0xda,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0x7f,0x2f
,0x0f,0x2f,0x2f,0x2f,0x0f,0x0f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f ,0x0f,0x2f,0x2f,0x2f,0x0f,0x0f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f
,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd
,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xda,0xda,0xac,0xab,0xac,0xab,0xac,0xab,0xac,0xab,0xac,0xab
,0xef,0x2f,0x0f,0x2f,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f ,0x7f,0x2f,0x0f,0x2f,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f,0x0f,0x0f,0x0f,0x0f
,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xab,0xac,0xab,0xac,0xab,0xac,0xab,0xac
,0xaf,0xaf,0xef,0x2f,0x2f,0x2f,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f,0x0f,0x0f ,0xab,0xac,0x7f,0x2f,0x2f,0x2f,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f,0x0f,0x0f
,0x0f,0x0f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf ,0x0f,0x0f,0x2f,0x2f,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0xaf,0x9f,0xaf,0x9f,0xaf ,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xac,0xac,0xac,0xac,0xac,0xac
,0x9f,0xaf,0x9f,0xaf,0xef,0x2f,0x0f,0x2f,0xef,0x0f,0x0f,0x0f,0x2f,0x0f ,0xac,0xac,0xac,0xac,0x7f,0x2f,0x0f,0x2f,0x7f,0x0f,0x0f,0x0f,0x2f,0x0f
,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf ,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0xaf,0x9f ,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0x38,0xac,0xac,0xac
,0xaf,0x9f,0xaf,0x9f,0xaf,0x9f,0xef,0x2f,0x2f,0x2f,0xef,0x0f,0x0f,0x0f ,0xac,0xac,0xac,0xac,0xac,0xac,0x7f,0x2f,0x2f,0x2f,0x7f,0x0f,0x0f,0x0f
,0x0f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef ,0x0f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xee,0x6c,0xee,0xee,0xee,0xee
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f ,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0x38,0xad
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0x2f,0x0f,0x2f,0xef,0x0f ,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0xad,0x7f,0x2f,0x0f,0x2f,0x7f,0x0f
,0x0f,0x0f,0x2f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xef,0xef,0xef,0xef ,0x0f,0x0f,0x2f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x6c,0xee,0xee,0xee
,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda
,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0x2f,0x2f,0x2f ,0x38,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0x7f,0x2f,0x2f,0x2f
,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xef,0xef ,0x7f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xee,0x6c
,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd
,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0x2f ,0xda,0xda,0x38,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0x7f,0x2f
,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f ,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x2f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f
,0x0b,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x08,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xda,0xdd,0xda,0xda,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad
,0xef,0x2f,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f ,0x7f,0x2f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f
,0x2f,0x2f,0x0b,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0x08,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xad,0xae,0xad,0xae,0xad,0xae,0xad
,0x9f,0x9f,0xef,0xef,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x2f,0x0f,0x0f,0x0f ,0xae,0xad,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x2f,0x0f,0x0f,0x0f
,0x2f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf ,0x2f,0x2f,0x2f,0x2f,0x2f,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xae,0xad,0xae,0xad,0xae
,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x0f,0x0f ,0xad,0xae,0xad,0xae,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x0f,0x0f
,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf ,0x0f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x6c,0xee,0xee,0xee,0xee,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f ,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xae,0xae,0xae
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0x2f,0xef,0xef,0x0f,0x0f ,0xae,0xae,0xae,0xae,0xae,0xae,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f
,0x0f,0x0f,0xef,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x0b,0xef,0xef,0xef,0xdf ,0x0f,0x0f,0x7d,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x08,0xee,0xee,0xee,0xec
,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0x2f,0xef,0xef ,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f
,0x0f,0x0f,0x0f,0x0f,0xef,0xef,0x2f,0x2f,0x2f,0x2f,0x2f,0x0b,0xef,0xef ,0x0f,0x0f,0x0f,0x0f,0x7d,0x7d,0x2f,0x2f,0x2f,0x2f,0x2f,0x08,0xee,0xee
,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda
,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0x2f ,0xda,0xda,0xae,0xaf,0xae,0xaf,0xae,0xaf,0xae,0xaf,0x7f,0x7f,0x2f,0x2f
,0xef,0xef,0x0f,0x0f,0x0f,0x2f,0xef,0xef,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f ,0x7f,0x7f,0x0f,0x0f,0x0f,0x2f,0x7d,0x6c,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f
,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef ,0xdd,0xda,0xda,0xda,0xaf,0xae,0xaf,0xae,0xaf,0xae,0xaf,0xae,0x7f,0x7f
,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x0f,0x2f,0xef,0xef,0x2f,0x2f,0x2f,0x2f ,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x0f,0x2f,0x7d,0x7d,0x2f,0x2f,0x2f,0x2f
,0x2f,0x2f,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xdd,0xda,0xda,0xda,0xda,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf
,0xef,0xef,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x2f,0x2f,0xef,0xef,0x2f,0x2f ,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x2f,0x2f,0x7d,0x6c,0x2f,0x2f
,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0x2f,0x2f,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda,0x38,0xaf,0x2f,0xaf,0x2f,0xaf
,0x9f,0x9f,0xef,0xef,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x2f,0x2f,0xef,0xef ,0x2f,0xaf,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x2f,0x2f,0x7d,0x7d
,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f ,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda,0x38,0x2f,0xaf,0x2f
,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0x2f,0xef,0xef,0x0f,0x0f,0x2f,0x2f ,0xaf,0x2f,0xaf,0x2f,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f,0x2f,0x2f
,0xef,0xef,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xdf,0xef,0xdf ,0x7d,0x6c,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xee,0xee,0xee,0xec,0xee,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f ,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda,0x38,0x2f
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0x2f,0xef,0xef,0x0f,0x0f ,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x0f,0x0f
,0x2f,0x0b,0xef,0xef,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef ,0x2f,0x7d,0x7d,0x7d,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0xee,0xee,0xee,0xee
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda
,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0xef,0xef,0xef ,0x38,0x1f,0x2f,0x1f,0x2f,0x1f,0x2f,0x1f,0x7f,0x7f,0x2f,0x7f,0x7f,0x7f
,0x0f,0x0f,0x2f,0xef,0xef,0xef,0xef,0x2f,0x2f,0x2f,0x2f,0x2f,0xef,0xef ,0x0f,0x0f,0x2f,0x7d,0x7d,0x6c,0x7d,0x2f,0x2f,0x2f,0x2f,0x2f,0xee,0xee
,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0x2f,0xef ,0xda,0xda,0x38,0x2f,0x1f,0x2f,0x1f,0x2f,0x1f,0x2f,0x7f,0x7f,0x2f,0x7f
,0xef,0xef,0x0f,0x0f,0x2f,0xef,0xef,0xef,0xef,0x2f,0x2f,0x2f,0x2f,0x2f ,0x7f,0x7f,0x0f,0x0f,0x2f,0x7d,0x7d,0x7d,0x6c,0x2f,0x2f,0x2f,0x2f,0x2f
,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd
,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef ,0xda,0xda,0xda,0xda,0x38,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0x0f,0x0f,0xef,0xef,0xef,0xef,0xef,0xef,0x2f,0x2f ,0x7f,0x7f,0x7f,0x7f,0x0f,0x0f,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x2f,0x2f
,0x2f,0x0b,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x2f,0x08,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xda,0xdd,0xda,0xda,0xda,0x38,0xaf,0x2f,0xaf,0x2f,0xaf,0x2f,0xaf
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x0f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c
,0x2f,0x2f,0x2f,0x0b,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x2f,0x2f,0x2f,0x08,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda,0x38,0x2f,0xaf,0x2f,0xaf,0x2f
,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0xef,0xef,0xef,0xef ,0xaf,0x2f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x0f,0x7d,0x7d,0x7d,0x6c
,0xef,0xef,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf ,0x7d,0x6c,0x2f,0x2f,0x2f,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f ,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda,0x38,0xaf,0xaf,0xaf
,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0xef,0xef ,0xaf,0xaf,0xaf,0xaf,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x0f,0x7d,0x7d
,0xef,0xef,0xef,0xef,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf ,0x7d,0x7d,0x6c,0x6c,0x2f,0x2f,0x2f,0x6c,0xee,0xee,0xee,0xee,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f ,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda,0x38,0xaf
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xae,0xaf,0xae,0xaf,0xae,0xaf,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xdf ,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x2f,0x2f,0x2f,0xee,0xee,0xee,0xee,0xec
,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda
,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef ,0x38,0xae,0xaf,0xae,0xaf,0xae,0xaf,0xae,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x2f,0x2f,0x2f,0xef,0xef,0xef ,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x2f,0x2f,0x2f,0x6c,0xee,0xee
,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda
,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef ,0xda,0xda,0x38,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x2f,0x0b,0xef ,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x2f,0x08,0xee
,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef ,0xdd,0xda,0xda,0xda,0x38,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xdd,0xda,0xda,0xda,0xda,0x38,0xad,0xae,0xad,0xae,0xad,0xae,0xad
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf ,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f ,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda,0x38,0xae,0xad,0xae,0xad,0xae
,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xad,0xae,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf ,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f ,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda,0x38,0xad,0xad,0xad
,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xad,0xad,0xad,0xad,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf ,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f ,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda,0xad,0xad
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xad,0xad,0xad,0xad,0xad,0xad,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda
,0xaf,0x9f,0xaf,0x9f,0xaf,0x9f,0xaf,0x9f,0xef,0xef,0xef,0xef,0xef,0xef ,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0xad,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee
,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0x9f,0xaf,0x9f,0xaf,0x9f,0xaf,0x9f,0xaf,0xef,0xef,0xef,0xef ,0xda,0xda,0xad,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c
,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd
,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef ,0xda,0xda,0xda,0x38,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xda,0x38,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0x38,0xac,0xab,0xac,0xab,0xac,0xab
,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xac,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf ,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf ,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0x38,0xab,0xac,0xab,0xac
,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xab,0xac,0xab,0xac,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf ,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf ,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0x38,0xab,0xab
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xab,0xab,0xab,0xab,0xab,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf ,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec
,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf ,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xab
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef ,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee
,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda
,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef ,0xda,0xab,0xaa,0xab,0xaa,0xab,0xaa,0xab,0xaa,0xab,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee
,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef ,0xdd,0xda,0xda,0xaa,0xab,0xaa,0xab,0xaa,0xab,0xaa,0xab,0xaa,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xda,0xda,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0xdf,0x2f,0x0b,0xdf ,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0xec,0x2f,0x08,0xec
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xdd,0xda,0x38,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xaa,0xaa,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0xdf,0x2f ,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0xec,0x2f
,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf ,0x2f,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0x38,0xaa,0xaa,0xaa,0xaa,0xaa
,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xaa,0xaa,0xaa,0xaa,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf ,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec
,0x0b,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf ,0x08,0x2f,0x2f,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0x38,0xa9,0xaa,0xa9
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee
,0xdf,0xdf,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf ,0xec,0xec,0x2f,0x2f,0x2f,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0x38,0xaa
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef ,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee
,0xef,0xdf,0xef,0xdf,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0xee,0xec,0x2f,0x2f,0x2f,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda
,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef ,0x38,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c
,0xef,0xef,0xef,0xef,0xdf,0xdf,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xee,0xec,0xec,0x2f,0x2f,0x2f,0xdd,0xdd,0xdd,0xdd,0xdd
,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef ,0xda,0xda,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0x2f,0x2f,0x2f,0x2f,0xdf,0xdf ,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0x2f,0x2f,0x2f,0x2f,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0x2f,0x2f,0x2f,0x2f ,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0x2f,0x2f,0x2f,0x2f
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9
,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xa9,0xa9,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0x2f,0x2f ,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0x2f,0x2f
,0x2f,0x2f,0x0b,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0x2f,0x2f,0x08,0xda,0xdd,0xda,0xdd,0xda,0xaa,0xa9,0xaa,0xa9,0xaa,0xa9
,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xaa,0xa9,0xaa,0xa9,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf ,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec
,0x2f,0x2f,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf ,0x2f,0x2f,0x2f,0x2f,0x2f,0xdd,0xdd,0xdd,0xda,0xda,0xa9,0xaa,0xa9,0xaa
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xa9,0xaa,0xa9,0xaa,0xa9,0xaa,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf ,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec
,0xef,0x0b,0x2f,0x2f,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf ,0xee,0x08,0x2f,0x2f,0x2f,0x2f,0x2f,0xda,0xdd,0xda,0xdd,0xda,0xaa,0xaa
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef ,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee
,0xef,0xef,0xdf,0x2f,0x2f,0x2f,0x2f,0x2f,0x0b,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xec,0x2f,0x2f,0x2f,0x2f,0x2f,0x08,0xdd,0xdd,0xdd,0xda,0xda
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef ,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee
,0xef,0xef,0xef,0xdf,0x2f,0x2f,0x0f,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xec,0x2f,0x2f,0x0f,0x2f,0x2f,0x2f,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef ,0xdd,0xda,0xaa,0xab,0xaa,0xab,0xaa,0xab,0xaa,0xab,0xaa,0xab,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0x2f,0x2f,0x0f,0x0f,0x2f,0x2f,0xdf,0xdf ,0xee,0x6c,0xee,0xee,0xee,0xee,0x2f,0x2f,0x0f,0x0f,0x2f,0x2f,0xdd,0xdd
,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xda,0xda,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f ,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0x2f,0x0f,0x0f,0x0f,0x2f,0x2f
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xdd,0xda,0x38,0xab,0xab,0xab,0xab,0xab,0xab,0xab
,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xab,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x2f,0x0f,0x0f,0x0f ,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0x2f,0x0f,0x0f,0x0f
,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf ,0x2f,0x2f,0x2f,0xdd,0xdd,0xdd,0xda,0xda,0x38,0xab,0xac,0xab,0xac,0xab
,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xac,0xab,0xac,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0x0f,0x0f ,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0x0f,0x0f
,0x0f,0x0f,0x0f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf ,0x0f,0x0f,0x0f,0x2f,0x2f,0xdd,0xdd,0xda,0xdd,0xda,0x38,0xac,0xac,0xac
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xac,0xac,0xac,0xac,0xac,0xac,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee
,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x0b,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf ,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x08,0xdd,0xdd,0xda,0xda,0x38,0xac
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef ,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0xac,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee
,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf ,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xdd,0xda,0xdd,0xda
,0xbb,0x9f,0xaf,0x9f,0xaf,0x9f,0xaf,0x9f,0xaf,0x9f,0xef,0xef,0xef,0xef ,0x38,0xad,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0xad,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c
,0xef,0xef,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x0b,0xdf ,0xee,0xee,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x08,0xdd
,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef ,0xda,0xda,0xda,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0xad,0xac,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f ,0x6c,0xee,0xee,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f
,0x0b,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0x08,0xda,0xdd,0xda,0xda,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad,0xad
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f ,0x6c,0x6c,0xee,0x6c,0xee,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f
,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0x2f,0x2f,0x2f,0xdd,0xda,0xda,0xda,0xad,0xae,0xad,0xae,0xad,0xae,0xad
,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xae,0xad,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f ,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f
,0x0f,0x0f,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f ,0x0f,0x0f,0x2f,0x2f,0x2f,0xda,0xdd,0xda,0xda,0xae,0xad,0xae,0xad,0xae
,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xad,0xae,0xad,0xae,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0x0f,0x0f,0x0f ,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0x0f,0x0f,0x0f,0x0f
,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f ,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0x2f,0xdd,0xda,0xda,0xda,0xae,0xae,0xae
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xae,0xae,0xae,0xae,0xae,0xae,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0x0f,0x0f ,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0x0f,0x0f,0x0f
,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xdf,0xdf,0xdf,0xdf,0xbb ,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xda,0xdd,0xda,0xda,0x38
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef ,0xae,0xaf,0xae,0xaf,0xae,0xaf,0xae,0xaf,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f ,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0x0f
,0x0f,0x0f,0xdf,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xdf,0xdf,0xdf ,0x0f,0x0f,0xec,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xdd,0xda,0xda
,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef ,0xda,0x38,0xaf,0xae,0xaf,0xae,0xaf,0xae,0xaf,0xae,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee
,0xef,0x0f,0x0f,0xdf,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xdf ,0xee,0x0f,0x0f,0xec,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0x2f,0xda
,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef ,0xdd,0xda,0xda,0x38,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0x0f,0x0f,0xef,0xdf,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f ,0xee,0x6c,0xee,0x0f,0x0f,0xee,0xec,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f
,0x2f,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0x2f,0xdd,0xda,0xda,0xda,0x38,0xaf,0x2f,0xaf,0x2f,0xaf,0x2f,0xaf,0x2f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0x0f,0x0f,0xdf,0xef,0x0f,0x0f,0x0f,0x0f,0x0f ,0x6c,0x6c,0x6c,0xee,0xee,0x0f,0x0f,0xec,0xee,0x0f,0x0f,0x0f,0x0f,0x0f
,0x0f,0x0f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0x0f,0x0f,0x2f,0xda,0xdd,0xda,0xda,0xda,0x2f,0xaf,0x2f,0xaf,0x2f,0xaf
,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x2f,0xaf,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0x0f,0x0f ,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0x0f,0x0f
,0x0f,0x0f,0x0f,0x0f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f ,0x0f,0x0f,0x0f,0x0f,0x2f,0xdd,0xda,0xda,0xda,0xda,0x2f,0x1f,0x2f,0x1f
,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x2f,0x1f,0x2f,0x1f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf ,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec
,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f ,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x2f,0xda,0xdd,0xda,0xda,0xda,0xaf,0x2f
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xaf,0x2f,0xaf,0x2f,0xaf,0x2f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee
,0xdf,0xdf,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf ,0xec,0xec,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdd,0xda,0xda,0xda,0xda
,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef ,0xda,0xaf,0x2f,0xaf,0x2f,0xaf,0x2f,0xaf,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee
,0xef,0xdf,0xef,0xdf,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf ,0xee,0xec,0xee,0xec,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xda,0xdd,0xda
,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef ,0xda,0xda,0xda,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c
,0xef,0xef,0xef,0xef,0xdf,0xdf,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdf ,0xee,0xee,0xee,0xee,0xec,0xec,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef ,0xda,0xda,0xda,0xda,0xda,0xaf,0xae,0xaf,0xae,0xaf,0xae,0xaf,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f ,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f
,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f ,0x0f,0xda,0xdd,0xda,0xda,0xda,0xda,0xae,0xaf,0xae,0xaf,0xae,0xaf,0xae
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0x0f,0x0f,0x0f,0x0f ,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0x0f,0x0f,0x0f,0x0f
,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0x9f,0x9f,0x9f,0x9f,0x9f ,0x0f,0x0f,0x0f,0xdd,0xda,0xda,0xda,0xda,0xda,0xae,0xae,0xae,0xae,0xae
,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xae,0xae,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0x0f,0x0f ,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0x0f,0x0f
,0x0f,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f ,0x0f,0x0f,0x0f,0x0f,0x0f,0xda,0xdd,0xda,0xda,0xda,0xda,0x38,0xae,0xad
,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xae,0xad,0xae,0xad,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0x0f ,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0x0f
,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb ,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdd,0xda,0xda,0xda,0xda,0xda,0x38
,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xad,0xae,0xad,0xae,0xad,0xae,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf ,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec
,0xef,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdd,0xda,0xdd,0xda,0xda,0xda
,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef,0xef,0xef ,0xda,0x38,0xad,0xad,0xad,0xad,0xad,0xad,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee
,0xef,0xef,0xdf,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xec,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xdd,0xdd,0xda,0xda
,0xdf,0xdf,0xdf,0xbb,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0xef,0xef,0xef,0xef ,0xda,0xda,0xda,0x38,0xac,0xad,0xac,0xad,0xac,0xad,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee
,0xef,0xef,0xef,0xdf,0xef,0x0f,0x0f,0x0f,0xdf,0x0f,0x0f,0x0f,0xdf,0xdf ,0xee,0xee,0xee,0xec,0xee,0x0f,0x0f,0x0f,0xdd,0x0f,0x0f,0x0f,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0x9f,0xaf,0x9f,0xaf,0x9f,0xaf,0xef,0xef ,0xdd,0xda,0xda,0xda,0xda,0x38,0xad,0xac,0xad,0xac,0xad,0xac,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0x0f,0x0f,0x0f,0xdf,0x0f,0x0f,0x0f ,0xee,0x6c,0xee,0xee,0xee,0xee,0x0f,0x0f,0x0f,0x0f,0xec,0x0f,0x0f,0x0f
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xda,0xda,0xda,0xda,0xda,0x38,0xac,0xac,0xac,0xac,0xac,0xac
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0x0f,0x0f,0x0f,0x0f,0xdf,0x0f ,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0x0f,0x0f,0x0f,0x0f,0xdd,0x0f
,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf ,0x0f,0x0f,0xdd,0xda,0xdd,0xda,0xda,0xda,0xda,0x38,0xac,0xab,0xac,0xab
,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xac,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0x0f,0x0f,0x0f,0x0f ,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0x0f,0x0f,0x0f,0x0f
,0xdf,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf ,0xec,0x0f,0x0f,0x0f,0xdd,0xdd,0xda,0xda,0xda,0xda,0xda,0x38,0xab,0xac
,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xab,0xac,0xab,0xac,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0x0f,0x0f ,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0x0f,0x0f
,0x0f,0x0f,0xdf,0xdf,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf ,0x0f,0x0f,0xdd,0xec,0x0f,0x0f,0xdd,0xda,0xdd,0xda,0xda,0xda,0xda,0xab
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xab,0xab,0xab,0xab,0xab,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee
,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0x0f,0x0f,0x0f,0x0f,0xec,0xdd,0x0f,0x0f,0xdd,0xdd,0xda,0xda,0xda,0xda
,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef,0xef,0xef ,0xda,0xab,0xaa,0xab,0xaa,0xab,0xaa,0xab,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee
,0xef,0xdf,0x0f,0x0f,0x0f,0x0f,0xdf,0xdf,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xec,0x0f,0x0f,0x0f,0x0f,0xdd,0xec,0x0f,0xda,0xdd,0xda,0xdd,0xda
,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef,0xef,0xef ,0xda,0xda,0xda,0xaa,0xab,0xaa,0xab,0xaa,0xab,0xaa,0x7f,0x7f,0x7f,0x7f
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c,0x6c,0x6c,0xee,0x6c
,0xef,0xef,0xef,0xef,0xdf,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xee,0xee,0xec,0x0f,0x0f,0x0f,0xec,0xdd,0xdd,0xdd,0xdd,0xdd
,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0xef ,0xda,0xda,0xda,0xda,0x38,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x7f,0x7f
,0xef,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x2f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x7d,0x6c,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0x0f,0x0f,0x0f,0xdf,0xdf,0xdf,0xdf ,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0x0f,0x0f,0x0f,0xdd,0xec,0xdd,0xda
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xda,0xdd,0xda,0xda,0xda,0x38,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa
,0xef,0xef,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0x7f,0x7f,0x2f,0x2f,0x7f,0x7f,0x7d,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c,0x6c
,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf,0x0f,0x0f,0xdf,0xdf ,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec,0x0f,0x0f,0xec,0xdd
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda,0x38,0xa9,0xaa,0xa9,0xaa,0xa9
,0xaf,0xaf,0xef,0xef,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xef ,0xaa,0xa9,0x7f,0x7f,0x2f,0x2f,0x2f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7d,0x6c
,0x0f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xef,0xdf,0x0f,0x0f ,0x0f,0x6c,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec,0xee,0xec,0x0f,0x0f
,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf,0xaf,0xaf ,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0xda,0xa9,0xaa,0xa9,0xaa
,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x2f,0x2f,0x2f,0x2f,0xef,0xef,0xef,0xef ,0xa9,0xaa,0xa9,0xaa,0x7f,0x2f,0x2f,0x2f,0x2f,0x2f,0x7d,0x7f,0x7d,0x7d
,0xef,0x0f,0x0f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf,0xdf ,0x7d,0x0f,0x0f,0x2f,0x6c,0x6c,0xee,0x6c,0xee,0xee,0xee,0xee,0xec,0xec
,0x0f,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xaf,0xaf ,0x0f,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda,0xda,0xda,0xa9,0xa9
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x2f,0x0f,0x0f,0x2f,0x2f,0xef,0xef ,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0x7f,0x2f,0x0f,0x0f,0x2f,0x2f,0x7f,0x7d
,0xef,0xef,0xef,0x0f,0x0f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef,0xef,0xdf ,0x7d,0x7d,0x7d,0x0f,0x0f,0x2f,0x6c,0x6c,0x6c,0xee,0xee,0xee,0xee,0xec
,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xbb ,0xee,0xec,0xec,0xec,0xdd,0xec,0xdd,0xda,0xdd,0xda,0xdd,0xda,0xda,0x38
,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xef,0x0f,0x0f,0x0f,0x2f,0x2f ,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0x7f,0x0f,0x0f,0x0f,0x2f,0x2f
,0x2f,0xef,0xef,0xef,0xef,0x0f,0x2f,0x2f,0xef,0xef,0xef,0xef,0xef,0xef ,0x2f,0x7f,0x7d,0x7d,0x7d,0x0f,0x2f,0x2f,0x6c,0x6c,0xee,0x6c,0xee,0xee
,0xef,0xef,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf,0xdf ,0xee,0xee,0xec,0xec,0xec,0xec,0xec,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xda
,0xdf,0xbb,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf,0xaf ,0xda,0x38,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9
}; };
RCL_Unit floorHeightAt(int16_t x, int16_t y) RCL_Unit floorHeightAt(int16_t x, int16_t y)
@ -473,22 +470,21 @@ inline void pixelFunc(RCL_PixelInfo *pixel)
{ {
if (pixel->hit.square.x != selectedSquare.x || pixel->hit.square.y != selectedSquare.y || (editing && pokitto.frameCount % 2) == 0) if (pixel->hit.square.x != selectedSquare.x || pixel->hit.square.y != selectedSquare.y || (editing && pokitto.frameCount % 2) == 0)
{ {
intensity = pixel->depth / (RCL_UNITS_PER_SQUARE * 2); intensity = pixel->depth / (RCL_UNITS_PER_SQUARE * 2) +
intensity += pixel->hit.direction % 2 == 0 ? 2 : 0; ((pixel->hit.direction == 0 || pixel->hit.direction == 2) ? 4 : 0);
color = addIntensity(squareColors[pixel->hit.type],intensity - 6); color = addIntensity(squareColors[pixel->hit.type],intensity);
// color = wallGradients[pixel->hit.type][RCL_clamp(7 + intensity,0,14)];
} }
else else
color = 30; color = 30;
} }
else if (pixel->isFloor) else if (pixel->isFloor)
{ {
if (!pixel->isHorizon) if (!pixel->isHorizon)
intensity = pixel->depth / RCL_UNITS_PER_SQUARE; intensity = pixel->depth / RCL_UNITS_PER_SQUARE;
color = addIntensity(floorColor,intensity - 3); color = addIntensity(floorColor,intensity);
// color = floorGradient[RCL_clamp(7 + intensity,0,14)];
} }
else else
{ {
@ -514,10 +510,10 @@ void draw()
if (flyBy && (pokitto.frameCount >> 3) % 3 != 0) if (flyBy && (pokitto.frameCount >> 3) % 3 != 0)
{ {
pokitto.display.setColor(255); pokitto.display.setColor(15);
pokitto.display.fillRect(22,3,66,10); pokitto.display.fillRect(22,3,66,10);
pokitto.display.setCursor(25,5); pokitto.display.setCursor(25,5);
pokitto.display.setColor(rgbToIndex(1,0,0)); pokitto.display.setColor(31);
pokitto.display.invisiblecolor = 0; pokitto.display.invisiblecolor = 0;
pokitto.display.print("press any key"); pokitto.display.print("press any key");
} }
@ -559,19 +555,12 @@ int main()
defaultConstraints.maxHits = 6; defaultConstraints.maxHits = 6;
defaultConstraints.maxSteps = 20; defaultConstraints.maxSteps = 20;
// floorColor = rgbToIndex(4,2,0); floorColor = 166;
floorColor = 32; squareColors[0] = 179;
squareColors[1] = 147;
squareColors[0] = rgbToIndex(0,0,3); squareColors[2] = 130;
squareColors[1] = rgbToIndex(7,0,0); squareColors[3] = 210;
squareColors[2] = rgbToIndex(0,7,0);
squareColors[3] = rgbToIndex(4,4,0);
initGradient(floorGradient,floorColor);
for (uint8_t i = 0; i < SQUARE_COLORS; ++i)
initGradient(wallGradients[i],squareColors[i]);
player.setPositionSquare(4,5); player.setPositionSquare(4,5);
player.mCamera.height = floorHeightAt(4,5); player.mCamera.height = floorHeightAt(4,5);

View file

@ -98,10 +98,6 @@ inline void putSubsampledPixel(int32_t x, int32_t y, uint8_t color)
} }
#endif #endif
uint8_t encodeHSV(uint8_t hue, uint8_t saturation, uint8_t value) uint8_t encodeHSV(uint8_t hue, uint8_t saturation, uint8_t value)
{ {
if (value > 15) if (value > 15)
@ -144,10 +140,10 @@ void convertHSVtoRGB(uint8_t hue, uint8_t saturation, uint8_t value,
uint8_t *red, uint8_t *green, uint8_t *blue) uint8_t *red, uint8_t *green, uint8_t *blue)
{ {
#define M 16 #define M 16
// ^ adds precision
int32_t chroma = (value * saturation) / 256; int32_t chroma = (value * saturation) / 256;
int32_t h = (hue * M) / 42; int32_t h = (hue * M) / 42;
int32_t a = (h % (2 * M)) - M; int32_t a = (h % (2 * M)) - M;
@ -172,29 +168,6 @@ else
#undef M #undef M
/* int16_t h = hue / 42;
int16_t a = (h % 2) - 1;
a = a < 0 ? -a : a; // abs
int16_t x = chroma * (1 - a);
if (h <= 1)
{ *red = chroma; *green = x; *blue = 0; }
else if (h <= 2)
{ *red = x; *green = chroma; *blue = 0; }
else if (h <= 3)
{ *red = 0; *green = chroma; *blue = x; }
else if (h <= 4)
{ *red = 0; *green = x; *blue = chroma; }
else if (h <= 5)
{ *red = x; *green = 0; *blue = chroma; }
else if (h <= 6)
{ *red = chroma; *green = 0; *blue = x; }
else
{ *red = 0; *green = 0; *blue = 0; }
*/
int32_t m = value - chroma; int32_t m = value - chroma;
*red += m; *red += m;
@ -202,54 +175,20 @@ else
*blue += m; *blue += m;
} }
/**
Gets (the index of) color by specified RGB components.
@param r red, 3 bits (0 to 7)
@param g green, 3 bits (0 to 7)
@param b blue, 2 bits (0 to 3)
@return palette index of the color
*/
inline uint8_t rgbToIndex(uint8_t r, uint8_t g, uint8_t b)
{
return (r & 0b00000111) | ((g & 0b00000111) << 3) | ((b & 0b00000011) << 6);
}
/** /**
Inits and loads a general 256 color palette. Inits and loads a general 256 color palette.
*/ */
void initPalette() void initPalette()
{ {
/* /* the palette is HSV-basedm because it makes brightness addition fast, which
for (uint8_t r = 0; r < 8; ++r) is important for fog/shadow diminishing */
for (uint8_t g = 0; g < 8; ++g)
for (uint8_t b = 0; b < 4; ++b)
palette[rgbToIndex(r,g,b)] =
pokitto.display.RGBto565(36 * r, 36 * g, 85 * b);
*/
for (uint16_t i = 0; i < 256; ++i) for (uint16_t i = 0; i < 256; ++i)
{ {
uint8_t h,s,v,r,g,b; uint8_t h,s,v,r,g,b;
decodeHSV(i,&h,&s,&v); decodeHSV(i,&h,&s,&v);
convertHSVtoRGB(h,s,v,&r,&g,&b); convertHSVtoRGB(h,s,v,&r,&g,&b);
printf("%d: %d %d %d: %d\n",i,r,g,b,pokitto.display.RGBto565(r,g,b));
palette[i] = palette[i] =
pokitto.display.RGBto565(r,g,b); pokitto.display.RGBto565(r,g,b);
} }
@ -266,71 +205,15 @@ printf("%d: %d %d %d: %d\n",i,r,g,b,pokitto.display.RGBto565(r,g,b));
*/ */
inline uint8_t addIntensity(uint8_t color, int16_t intensity) inline uint8_t addIntensity(uint8_t color, int16_t intensity)
{ {
int16_t newValue = (color & 0b00001111) + intensity; // value as in HSV
int16_t newValue = (color & 0b00001111) + intensity;
if (newValue <= 0) if (newValue <= 0)
return 0; // black return 0; // black
if (newValue >= 16) if (newValue >= 16)
return 15; // white newValue = 15;
return (color & 0b11110000) | newValue; return (color & 0b11110000) | newValue;
//return (color & 0b11110000) | RCL_clamp((color & 0b00001111) + intensity,0,15);
/*
uint8_t r = color & 0b00000111;
uint8_t g = (color & 0b00111000) >> 3;
uint8_t b = (color & 0b11000000) >> 6;
if (intensity >= 0)
{
r += intensity;
r = r > 7 ? 7 : r;
g += intensity;
g = g > 7 ? 7 : g;
b += intensity / 2;
b = b > 3 ? 3 : b;
}
else
{
intensity *= -1;
r = (intensity > r) ? 0 : r - intensity;
g = (intensity > g) ? 0 : g - intensity;
intensity /= 2;
b = intensity > b ? 0 : b - intensity;
}
return rgbToIndex(r,g,b);
*/
}
inline uint8_t addRGB(uint8_t color, int16_t red, int16_t green, int16_t blue)
{
int8_t r = color & 0b00000111;
int8_t g = (color & 0b00111000) >> 3;
int8_t b = (color & 0b11000000) >> 6;
r = RCL_clamp(r + red,0,7);
g = RCL_clamp(g + green,0,7);
b = RCL_clamp(b + blue,0,3);
return rgbToIndex(r,g,b);
}
/**
Inits a color gradient from darkest (0, -7 intensity) to brightest
(14, +7 intensity). Index 7 will have the base color.
*/
void initGradient(unsigned char dest[15], unsigned char baseColor)
{
for (int8_t i = 0; i < 15; ++i)
dest[i] = addIntensity(baseColor, i - 7);
} }
/** /**
@ -339,8 +222,6 @@ void initGradient(unsigned char dest[15], unsigned char baseColor)
*/ */
inline uint8_t sampleImage(const unsigned char *image, RCL_Unit x, RCL_Unit y) inline uint8_t sampleImage(const unsigned char *image, RCL_Unit x, RCL_Unit y)
{ {
// TODO: optimize
x = RCL_wrap(x,RCL_UNITS_PER_SQUARE); x = RCL_wrap(x,RCL_UNITS_PER_SQUARE);
y = RCL_wrap(y,RCL_UNITS_PER_SQUARE); y = RCL_wrap(y,RCL_UNITS_PER_SQUARE);
@ -575,19 +456,22 @@ void initGeneral()
*/ */
unsigned char computeAverageColor(const unsigned char *texture) unsigned char computeAverageColor(const unsigned char *texture)
{ {
uint32_t sumR = 0; uint8_t h,s,v;
uint32_t sumG = 0; uint32_t sumH = 0;
uint32_t sumB = 0; uint32_t sumS = 0;
uint32_t sumV = 0;
uint32_t pixels = texture[0] * texture[1]; uint32_t pixels = texture[0] * texture[1];
for (uint16_t i = 0; i < pixels; ++i) for (uint16_t i = 0; i < pixels; ++i)
{ {
sumR += texture[2 + i] & 0b00000111; decodeHSV(texture[2 + i],&h,&s,&v);
sumG += (texture[2 + i] & 0b00111000) >> 3;
sumB += (texture[2 + i] & 0b11000000) >> 6; sumH += h;
sumS += s;
sumV += v;
} }
return rgbToIndex(sumR / pixels,sumG / pixels,sumB / pixels); return encodeHSV(sumH / pixels,sumS / pixels, sumV / pixels);
} }
#endif #endif