animation embedded in sprite class itself

This commit is contained in:
wgroeneveld 2018-08-05 16:51:59 +02:00
parent 65c0912500
commit 49f20b3248
12 changed files with 669 additions and 102 deletions

BIN
lama.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -2,7 +2,7 @@ SET(CMAKE_C_COMPILER arm-none-eabi-gcc)
SET(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set_property(SOURCE engine/gba/sin_lut.s PROPERTY LANGUAGE C)
add_executable(${PROJECT_NAME}.elf main.cpp engine/sprites/sprite_manager.cpp engine/sprites/sprite_manager.h engine/gba/tonc_memmap.h engine/gba/tonc_core.h engine/gba/tonc_memdef.h engine/gba/tonc_types.h engine/sprites/sprite.cpp engine/sprites/sprite.h kul.h engine/palette/palette_manager.cpp engine/palette/palette_manager.h engine/palette/combined_palette.cpp engine/palette/combined_palette.h engine/allocator.cpp engine/allocator.h engine/gba/tonc_oam.h engine/gba/tonc_math.h engine/gba/sin_lut.s engine/Scene.cpp engine/Scene.h engine/sprites/sprite_builder.cpp engine/sprites/sprite_builder.h engine/sprites/affine_sprite.cpp engine/sprites/affine_sprite.h flying_stuff_scene.cpp flying_stuff_scene.h engine/gba_engine.cpp engine/gba_engine.h engine/background/text_stream.cpp engine/background/text_stream.h engine/background/background.cpp engine/background/background.h engine/background/text.h sample_start_scene.cpp sample_start_scene.h engine/sprites/animated_sprite.cpp engine/sprites/animated_sprite.h engine/effects/fade_out_scene.cpp engine/effects/fade_out_scene.h engine/gba/tonc_core_stub.h engine/effects/scene_effect.h)
add_executable(${PROJECT_NAME}.elf main.cpp engine/sprites/sprite_manager.cpp engine/sprites/sprite_manager.h engine/gba/tonc_memmap.h engine/gba/tonc_core.h engine/gba/tonc_memdef.h engine/gba/tonc_types.h engine/sprites/sprite.cpp engine/sprites/sprite.h kul.h engine/palette/palette_manager.cpp engine/palette/palette_manager.h engine/palette/combined_palette.cpp engine/palette/combined_palette.h engine/allocator.cpp engine/allocator.h engine/gba/tonc_oam.h engine/gba/tonc_math.h engine/gba/sin_lut.s engine/Scene.cpp engine/Scene.h engine/sprites/sprite_builder.cpp engine/sprites/sprite_builder.h engine/sprites/affine_sprite.cpp engine/sprites/affine_sprite.h flying_stuff_scene.cpp flying_stuff_scene.h engine/gba_engine.cpp engine/gba_engine.h engine/background/text_stream.cpp engine/background/text_stream.h engine/background/background.cpp engine/background/background.h engine/background/text.h sample_start_scene.cpp sample_start_scene.h engine/effects/fade_out_scene.cpp engine/effects/fade_out_scene.h engine/gba/tonc_core_stub.h engine/effects/scene_effect.h lama.h)
add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -v -O binary ${PROJECT_NAME}.elf ${PROJECT_NAME}.gba

View File

@ -25,7 +25,7 @@ public:
void setAffineIndex(int index) { this->affIndex = index; }
void identity();
void rotate(u16 alpha);
AffineSprite(const u32 *imgData, int imgSize, int xC, int yC, SpriteSize spriteSize) : Sprite(imgData, imgSize, xC, yC, spriteSize), affIndex(0) {
AffineSprite(const void* imgData, int imgSize, int xC, int yC, SpriteSize spriteSize) : Sprite(imgData, imgSize, xC, yC, spriteSize), affIndex(0) {
}
friend class SpriteManager;

View File

@ -1,43 +0,0 @@
//
// Created by Wouter Groeneveld on 03/08/18.
//
#include <engine/gba/tonc_memdef.h>
#include "animated_sprite.h"
AnimatedSprite::AnimatedSprite(const void *imageData, int imageSize, int x, int y, SpriteSize size, int frameTileSize, int delay)
: Sprite(imageData, imageSize, x, y, size), frameTileSize(frameTileSize), frame(0), counter(0), delay(delay) {}
void AnimatedSprite::flipHorizontally(bool flip) {
if(flip) {
oam.get()->attr1 |= ATTR1_HFLIP;
} else {
oam.get()->attr1 &= FLIP_HORIZONTAL_CLEAR;
}
}
void AnimatedSprite::flipVertically(bool flip) {
if(flip) {
oam.get()->attr1 |= ATTR1_VFLIP;
} else {
oam.get()->attr1 &= FLIP_VERTICAL_CLEAR;
}
}
void AnimatedSprite::update() {
counter++;
if(counter > delay) {
frame += frameTileSize;
if(frame > frameTileSize) {
frame = 0;
}
updateTileOffsetInOam();
counter = 0;
}
}
void AnimatedSprite::updateTileOffsetInOam() {
oam.get()->attr2 &= OAM_TILE_OFFSET_CLEAR;
oam.get()->attr2 |= (frame & OAM_TILE_OFFSET_NEW);
}

View File

@ -1,34 +0,0 @@
//
// Created by Wouter Groeneveld on 03/08/18.
//
#ifndef GBA_SPRITE_ENGINE_ANIMATED_SPRITE_H
#define GBA_SPRITE_ENGINE_ANIMATED_SPRITE_H
#include "sprite.h"
#define FLIP_VERTICAL_CLEAR 0xdfff
#define FLIP_HORIZONTAL_CLEAR 0xefff
#define OAM_TILE_OFFSET_CLEAR 0xfc00
#define OAM_TILE_OFFSET_NEW 0x03ff
class AnimatedSprite : public Sprite {
private:
int delay;
int frame, frameTileSize;
int counter;
void updateTileOffsetInOam();
public:
AnimatedSprite(const void *imageData, int imageSize, int x, int y, SpriteSize size, int frameTileSize, int delay);
void flipVertically(bool flip);
void flipHorizontally(bool flip);
void update();
};
#endif //GBA_SPRITE_ENGINE_ANIMATED_SPRITE_H

View File

@ -4,10 +4,12 @@
#include <cstdlib>
#include <engine/gba/tonc_memdef.h>
#include <engine/background/text_stream.h>
#include "sprite.h"
Sprite::Sprite(const void *imageData, int imageSize, int x, int y, SpriteSize size)
: x(x), y(y), data(imageData), imageSize(imageSize) {
: x(x), y(y), data(imageData), imageSize(imageSize),
animationDelay(0), amountOfFrames(0), currentFrame(0), animationCounter(0) {
setAttributesBasedOnSize(size);
}
@ -17,14 +19,62 @@ void Sprite::moveTo(int x, int y) {
syncOam();
}
void Sprite::syncOam() {
void Sprite::flipHorizontally(bool flip) {
if(flip) {
oam->attr1 |= ATTR1_HFLIP;
} else {
oam->attr1 &= FLIP_HORIZONTAL_CLEAR;
}
}
void Sprite::flipVertically(bool flip) {
if(flip) {
oam->attr1 |= ATTR1_VFLIP;
} else {
oam->attr1 &= FLIP_VERTICAL_CLEAR;
}
}
void Sprite::syncVelocity() {
oam->attr0 = (oam->attr0 & ~ATTR0_Y_MASK) | (y & ATTR0_Y_MASK);
oam->attr1 = (oam->attr1 & ~ATTR1_X_MASK) | (x & ATTR1_X_MASK);
}
void Sprite::move() {
void Sprite::syncAnimation() {
if(amountOfFrames == 0) return;
int newTileIndex = this->tileIndex + (currentFrame * w);
oam->attr2 &= OAM_TILE_OFFSET_CLEAR;
oam->attr2 |= (newTileIndex & OAM_TILE_OFFSET_NEW);
}
void Sprite::syncOam() {
syncVelocity();
syncAnimation();
}
void Sprite::updateVelocity() {
this->x += this->dx;
this-> y += this->dy;
}
void Sprite::updateAnimation() {
if(amountOfFrames == 0) return;
animationCounter++;
if(animationCounter > animationDelay) {
currentFrame++;
if(currentFrame > (amountOfFrames - 1)) {
currentFrame = 0;
}
animationCounter = 0;
}
}
void Sprite::update() {
updateVelocity();
updateAnimation();
syncOam();
}
@ -56,6 +106,7 @@ bool Sprite::collidesWith(const Sprite &o) {
void Sprite::buildOam(int tileIndex) {
this->tileIndex = tileIndex;
this->oam = std::unique_ptr<OBJ_ATTR>(new OBJ_ATTR());
this->oam->attr0 = ATTR0_Y(this->y) |
@ -73,4 +124,4 @@ void Sprite::buildOam(int tileIndex) {
this->oam->attr2 = ATTR2_ID(tileIndex) |
ATTR2_PRIO(priority) |
ATTR2_PALBANK(0);
}
}

View File

@ -6,6 +6,7 @@
#define GBA_SPRITE_ENGINE_SPRITE_H
#include <engine/gba/tonc_types.h>
#include <engine/background/text_stream.h>
#include <memory>
#define COLOR_MODE_16 0
@ -16,6 +17,11 @@
#define HORIZONTAL_FLIP_FLAG 0
#define VERTICAL_FLIP_FLAG 0
#define FLIP_VERTICAL_CLEAR 0xdfff
#define FLIP_HORIZONTAL_CLEAR 0xefff
#define OAM_TILE_OFFSET_CLEAR 0xfc00
#define OAM_TILE_OFFSET_NEW 0x03ff
enum SpriteSize {
SIZE_8_8,
SIZE_16_16,
@ -34,11 +40,18 @@ enum SpriteSize {
class SpriteManager;
class Sprite {
private:
void updateVelocity();
void updateAnimation();
void syncVelocity();
void syncAnimation();
protected:
const void *data;
int x, y, priority, dx, dy;
int w, h, size_bits, shape_bits;
int imageSize;
int imageSize, tileIndex;
int animationDelay, amountOfFrames, currentFrame, animationCounter;
std::unique_ptr<OBJ_ATTR> oam;
@ -48,15 +61,24 @@ protected:
public:
Sprite(const void *imageData, int imageSize, int x, int y, SpriteSize size);
virtual ~Sprite() {}
void makeAnimated(int amountOfFrames, int animationDelay) {
this->amountOfFrames = amountOfFrames;
this->animationDelay = animationDelay;
}
void setVelocity(int dx, int dy) {
this->dx = dx;
this->dy = dy;
}
void move();
void update();
void moveTo(int x, int y);
bool collidesWith(const Sprite &other);
void flipVertically(bool flip);
void flipHorizontally(bool flip);
int getX() { return x; }
int getHeight() { return h; }
int getWidth() { return w; }

View File

@ -10,17 +10,22 @@
template<typename T> class SpriteBuilder {
private:
int imageSize;
const u32 *imageData;
const void *imageData;
int x, y, dx, dy;
int numberOfFrames, animationDelay;
SpriteSize size;
void reset() {
imageSize = x = y = dx = dy = 0;
imageSize = x = y = dx = dy = numberOfFrames = animationDelay = 0;
imageData = nullptr;
size = SIZE_16_16;
}
public:
SpriteBuilder& withData(const u32 imageData[], int imageSize) {
SpriteBuilder() {
reset();
}
SpriteBuilder& withData(const void* imageData, int imageSize) {
this->imageData = imageData;
this->imageSize = imageSize;
return *this;
@ -30,6 +35,7 @@ public:
this->dy = dy;
return *this;
}
SpriteBuilder& withLocation(int x, int y) {
this->x = x;
this->y = y;
@ -39,6 +45,11 @@ public:
this->size = size;
return *this;
}
SpriteBuilder& withAnimated(int numberOfFrames, int delay) {
this->numberOfFrames = numberOfFrames;
this->animationDelay = delay;
return *this;
}
T build();
std::unique_ptr<T> buildPtr();
};
@ -46,6 +57,9 @@ public:
template<typename T> std::unique_ptr<T> SpriteBuilder<T>::buildPtr() {
auto s = new T(this->imageData, this->imageSize, this->x, this->y, this->size);
s->setVelocity(this->dx, this->dy);
if(this->numberOfFrames > 0) {
s->makeAnimated(this->numberOfFrames, this->animationDelay);
}
reset();
return std::unique_ptr<T>(s);
@ -54,6 +68,9 @@ template<typename T> std::unique_ptr<T> SpriteBuilder<T>::buildPtr() {
template<typename T> T SpriteBuilder<T>::build() {
T s(this->imageData, this->imageSize, this->x, this->y, this->size);
s.setVelocity(this->dx, this->dy);
if(this->numberOfFrames > 0) {
s.makeAnimated(this->numberOfFrames, this->animationDelay);
}
reset();
return s;

View File

@ -48,7 +48,7 @@ void SpriteManager::copyOverSpriteOAMToVRAM() {
if(affineIndex > MAX_AFFINE_SIZE) {
throw std::runtime_error("max amount of sprites with affine matriches reached");
}
sprite->move();
sprite->update();
auto oam = sprite->oam.get();
oam_mem[i] = *oam;

549
src/lama.h Normal file
View File

@ -0,0 +1,549 @@
const unsigned char lama_data [] = {
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02,
0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x05, 0x05,
0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x04, 0x04,
0x02, 0x02, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x02, 0x02, 0x06, 0x06,
0x07, 0x07, 0x06, 0x06, 0x02, 0x02, 0x08, 0x08, 0x06, 0x06, 0x03, 0x03,
0x02, 0x02, 0x08, 0x08, 0x06, 0x06, 0x03, 0x03, 0x02, 0x02, 0x09, 0x09,
0x03, 0x03, 0x07, 0x07, 0x02, 0x02, 0x09, 0x09, 0x03, 0x03, 0x07, 0x07,
0x05, 0x05, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x02, 0x02, 0x0B, 0x0B, 0x07, 0x07, 0x09, 0x09, 0x02, 0x02, 0x0B, 0x0B,
0x07, 0x07, 0x09, 0x09, 0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x04, 0x04,
0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x04, 0x04, 0x02, 0x02, 0x0B, 0x0B,
0x0C, 0x0C, 0x04, 0x04, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x04, 0x04,
0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x04, 0x04, 0x02, 0x02, 0x0B, 0x0B,
0x0C, 0x0C, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x0D, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F, 0x02, 0x02,
0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F, 0x02, 0x02, 0x10, 0x10, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10,
0x11, 0x11, 0x10, 0x10, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x13, 0x13,
0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x13, 0x13, 0x12, 0x12, 0x0C, 0x0C,
0x0C, 0x0C, 0x13, 0x13, 0x12, 0x12, 0x0C, 0x0C, 0x0C, 0x0C, 0x13, 0x13,
0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11,
0x13, 0x13, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x04, 0x04,
0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x04, 0x04, 0x14, 0x14, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x14, 0x14, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03,
0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02,
0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x05, 0x05,
0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x04, 0x04,
0x02, 0x02, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x02, 0x02, 0x06, 0x06,
0x07, 0x07, 0x06, 0x06, 0x02, 0x02, 0x08, 0x08, 0x06, 0x06, 0x03, 0x03,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x05, 0x05, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x05, 0x05, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x08, 0x08, 0x06, 0x06, 0x03, 0x03, 0x02, 0x02, 0x09, 0x09,
0x03, 0x03, 0x07, 0x07, 0x02, 0x02, 0x09, 0x09, 0x03, 0x03, 0x07, 0x07,
0x02, 0x02, 0x0B, 0x0B, 0x07, 0x07, 0x09, 0x09, 0x02, 0x02, 0x0B, 0x0B,
0x07, 0x07, 0x09, 0x09, 0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x04, 0x04,
0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x04, 0x04, 0x02, 0x02, 0x0B, 0x0B,
0x0C, 0x0C, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0D, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0D, 0x0D,
0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F, 0x02, 0x02,
0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F, 0x02, 0x02, 0x10, 0x10, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x04, 0x04,
0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x04, 0x04, 0x02, 0x02, 0x0B, 0x0B,
0x0C, 0x0C, 0x04, 0x04, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x13, 0x13,
0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x13, 0x13, 0x12, 0x12, 0x0C, 0x0C,
0x0C, 0x0C, 0x13, 0x13, 0x12, 0x12, 0x0C, 0x0C, 0x0C, 0x0C, 0x13, 0x13,
0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13, 0x13, 0x03, 0x03, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x14, 0x14, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x14, 0x14, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03,
0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10,
0x11, 0x11, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11,
0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x15, 0x15, 0x16, 0x16,
0x17, 0x17, 0x16, 0x16, 0x15, 0x15, 0x16, 0x16, 0x17, 0x17, 0x16, 0x16,
0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x18, 0x18, 0x11, 0x11, 0x11, 0x11,
0x13, 0x13, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x04, 0x04,
0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x04, 0x04, 0x10, 0x10, 0x11, 0x11,
0x14, 0x14, 0x04, 0x04, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x04, 0x04,
0x0B, 0x0B, 0x15, 0x15, 0x0B, 0x0B, 0x16, 0x16, 0x0B, 0x0B, 0x15, 0x15,
0x0B, 0x0B, 0x16, 0x16, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15, 0x18, 0x18,
0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0B, 0x0B, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x15, 0x15, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x04, 0x02, 0x04, 0x04, 0x05,
0x05, 0x02, 0x02, 0x04, 0x01, 0x02, 0x02, 0x06, 0x06, 0x07, 0x07, 0x06,
0x01, 0x02, 0x02, 0x06, 0x06, 0x07, 0x07, 0x06, 0x01, 0x02, 0x02, 0x08,
0x08, 0x06, 0x06, 0x03, 0x01, 0x02, 0x02, 0x08, 0x08, 0x06, 0x06, 0x03,
0x01, 0x02, 0x02, 0x09, 0x09, 0x03, 0x03, 0x07, 0x01, 0x02, 0x02, 0x09,
0x09, 0x03, 0x03, 0x07, 0x04, 0x05, 0x05, 0x02, 0x02, 0x01, 0x01, 0x01,
0x04, 0x05, 0x05, 0x02, 0x02, 0x01, 0x01, 0x01, 0x06, 0x02, 0x02, 0x01,
0x01, 0x01, 0x01, 0x01, 0x06, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02, 0x02, 0x01,
0x01, 0x01, 0x01, 0x01, 0x07, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
0x07, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x07, 0x07, 0x09,
0x01, 0x02, 0x02, 0x0B, 0x0B, 0x07, 0x07, 0x09, 0x01, 0x02, 0x02, 0x0B,
0x0B, 0x0B, 0x0B, 0x04, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x04,
0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x04, 0x01, 0x02, 0x02, 0x0B,
0x0B, 0x0C, 0x0C, 0x04, 0x0A, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x04,
0x0A, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x04, 0x09, 0x02, 0x02, 0x01,
0x01, 0x01, 0x01, 0x01, 0x09, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x02, 0x02, 0x01,
0x01, 0x01, 0x01, 0x01, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01,
0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x03, 0x03, 0x01,
0x01, 0x01, 0x01, 0x01, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x0A, 0x0D, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D,
0x0A, 0x0D, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x0F, 0x0C,
0x0C, 0x0F, 0x0F, 0x02, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F, 0x02,
0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11,
0x11, 0x11, 0x11, 0x11, 0x0A, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10,
0x0A, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10, 0x0D, 0x02, 0x02, 0x12,
0x12, 0x0C, 0x0C, 0x13, 0x0D, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x13,
0x02, 0x12, 0x12, 0x0C, 0x0C, 0x0C, 0x0C, 0x13, 0x02, 0x12, 0x12, 0x0C,
0x0C, 0x0C, 0x0C, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13,
0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x13, 0x10, 0x11, 0x11, 0x11,
0x11, 0x13, 0x13, 0x04, 0x10, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x04,
0x13, 0x14, 0x14, 0x02, 0x02, 0x01, 0x01, 0x01, 0x13, 0x14, 0x14, 0x02,
0x02, 0x01, 0x01, 0x01, 0x13, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01,
0x13, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x13, 0x04, 0x04, 0x0B,
0x0B, 0x01, 0x01, 0x01, 0x13, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01,
0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x03, 0x03, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0B, 0x10, 0x10, 0x11,
0x11, 0x10, 0x10, 0x11, 0x0B, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11,
0x01, 0x15, 0x15, 0x16, 0x16, 0x17, 0x17, 0x16, 0x01, 0x15, 0x15, 0x16,
0x16, 0x17, 0x17, 0x16, 0x01, 0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x18,
0x01, 0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x18, 0x01, 0x15, 0x15, 0x19,
0x19, 0x15, 0x15, 0x1A, 0x01, 0x15, 0x15, 0x19, 0x19, 0x15, 0x15, 0x1A,
0x11, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14, 0x04, 0x11, 0x10, 0x10, 0x11,
0x11, 0x14, 0x14, 0x04, 0x16, 0x0B, 0x0B, 0x15, 0x15, 0x0B, 0x0B, 0x16,
0x16, 0x0B, 0x0B, 0x15, 0x15, 0x0B, 0x0B, 0x16, 0x18, 0x15, 0x15, 0x01,
0x01, 0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15, 0x18,
0x1A, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15, 0x1A, 0x1A, 0x15, 0x15, 0x01,
0x01, 0x15, 0x15, 0x1A, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01,
0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x16, 0x15, 0x15, 0x01,
0x01, 0x01, 0x01, 0x01, 0x16, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x01,
0x18, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x15, 0x15, 0x01,
0x01, 0x01, 0x01, 0x01, 0x1A, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x01,
0x1A, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02,
0x01, 0x01, 0x02, 0x02, 0x06, 0x06, 0x07, 0x07, 0x01, 0x01, 0x02, 0x02,
0x06, 0x06, 0x07, 0x07, 0x01, 0x01, 0x02, 0x02, 0x08, 0x08, 0x06, 0x06,
0x01, 0x01, 0x02, 0x02, 0x08, 0x08, 0x06, 0x06, 0x01, 0x01, 0x02, 0x02,
0x09, 0x09, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x09, 0x09, 0x03, 0x03,
0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x07, 0x07, 0x04, 0x04, 0x05, 0x05,
0x02, 0x02, 0x01, 0x01, 0x06, 0x06, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x06, 0x06, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x07, 0x07, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x07, 0x07, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x09, 0x09, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
0x0A, 0x0A, 0x0D, 0x0E, 0x0D, 0x0D, 0x0D, 0x0D, 0x01, 0x01, 0x02, 0x02,
0x0B, 0x0B, 0x07, 0x07, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x0B,
0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x0B, 0x01, 0x01, 0x02, 0x02,
0x0B, 0x0B, 0x0C, 0x0C, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C,
0x0A, 0x0A, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0C, 0x0A, 0x0A, 0x02, 0x02,
0x0B, 0x0B, 0x0C, 0x0C, 0x0D, 0x0D, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C,
0x09, 0x09, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x02, 0x02,
0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03,
0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x13, 0x13, 0x14, 0x14,
0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0A, 0x0D, 0x0E,
0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F,
0x0D, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0F, 0x11, 0x11, 0x10, 0x10,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
0x0A, 0x0A, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x0A, 0x0A, 0x11, 0x11,
0x10, 0x10, 0x11, 0x11, 0x0B, 0x0B, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10,
0x0D, 0x0D, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x02, 0x02, 0x12, 0x12,
0x0C, 0x0C, 0x0C, 0x0C, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x0C, 0x0C,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x13, 0x13, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13,
0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x13, 0x13, 0x11, 0x11, 0x10, 0x10,
0x11, 0x11, 0x14, 0x14, 0x13, 0x13, 0x14, 0x14, 0x02, 0x02, 0x01, 0x01,
0x13, 0x13, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x13, 0x13, 0x04, 0x04,
0x03, 0x03, 0x01, 0x01, 0x13, 0x13, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01,
0x13, 0x13, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03,
0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01,
0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x0B, 0x0B, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x01, 0x01, 0x15, 0x15,
0x16, 0x16, 0x17, 0x17, 0x01, 0x01, 0x15, 0x15, 0x16, 0x16, 0x17, 0x17,
0x01, 0x01, 0x15, 0x15, 0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15,
0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15, 0x19, 0x19, 0x15, 0x15,
0x01, 0x01, 0x15, 0x15, 0x19, 0x19, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01,
0x15, 0x15, 0x15, 0x15, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x14, 0x14,
0x16, 0x16, 0x0B, 0x0B, 0x15, 0x15, 0x0B, 0x0B, 0x16, 0x16, 0x0B, 0x0B,
0x15, 0x15, 0x0B, 0x0B, 0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15,
0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15, 0x1A, 0x1A, 0x15, 0x15,
0x01, 0x01, 0x15, 0x15, 0x1A, 0x1A, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15,
0x15, 0x15, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15, 0x04, 0x04, 0x0B, 0x0B,
0x01, 0x01, 0x01, 0x01, 0x16, 0x16, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01,
0x16, 0x16, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x18, 0x18, 0x15, 0x15,
0x01, 0x01, 0x01, 0x01, 0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01,
0x1A, 0x1A, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01, 0x1A, 0x1A, 0x15, 0x15,
0x01, 0x01, 0x01, 0x01, 0x15, 0x15, 0x15, 0x15, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
0x02, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02,
0x01, 0x02, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x01, 0x01, 0x01, 0x02,
0x02, 0x06, 0x06, 0x07, 0x01, 0x01, 0x01, 0x02, 0x02, 0x06, 0x06, 0x07,
0x01, 0x01, 0x01, 0x02, 0x02, 0x08, 0x08, 0x06, 0x01, 0x01, 0x01, 0x02,
0x02, 0x08, 0x08, 0x06, 0x01, 0x01, 0x01, 0x02, 0x02, 0x09, 0x09, 0x03,
0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x02, 0x04, 0x04, 0x05,
0x05, 0x02, 0x02, 0x01, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x01,
0x07, 0x06, 0x06, 0x02, 0x02, 0x01, 0x01, 0x01, 0x07, 0x06, 0x06, 0x02,
0x02, 0x01, 0x01, 0x01, 0x06, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01,
0x06, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x01, 0x03, 0x07, 0x07, 0x02,
0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x02, 0x02, 0x09, 0x09, 0x03, 0x01, 0x01, 0x01, 0x02,
0x02, 0x0B, 0x0B, 0x07, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x07,
0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x02,
0x02, 0x0B, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0C,
0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x0C, 0x0A, 0x0A, 0x0A, 0x02,
0x02, 0x0B, 0x0B, 0x0C, 0x03, 0x07, 0x07, 0x02, 0x02, 0x01, 0x01, 0x01,
0x07, 0x09, 0x09, 0x02, 0x02, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09, 0x02,
0x02, 0x01, 0x01, 0x01, 0x0B, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01,
0x0B, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x0C, 0x04, 0x04, 0x03,
0x03, 0x01, 0x01, 0x01, 0x0C, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01,
0x0C, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x0A, 0x0A, 0x0D,
0x0E, 0x0D, 0x0D, 0x0D, 0x01, 0x0A, 0x0A, 0x0D, 0x0E, 0x0D, 0x0D, 0x0D,
0x0A, 0x0D, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C, 0x0F, 0x0A, 0x0D, 0x0D, 0x0F,
0x0F, 0x0C, 0x0C, 0x0F, 0x0B, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11,
0x0B, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x01, 0x0A, 0x0A, 0x11,
0x11, 0x10, 0x10, 0x11, 0x0A, 0x0A, 0x0A, 0x02, 0x02, 0x0B, 0x0B, 0x0C,
0x0D, 0x0D, 0x0D, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0D, 0x0D, 0x0D, 0x02,
0x02, 0x12, 0x12, 0x0C, 0x0F, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x0C,
0x0F, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x0C, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13,
0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x13, 0x0C, 0x04, 0x04, 0x03,
0x03, 0x01, 0x01, 0x01, 0x0C, 0x13, 0x13, 0x14, 0x14, 0x02, 0x02, 0x01,
0x0C, 0x13, 0x13, 0x14, 0x14, 0x02, 0x02, 0x01, 0x0C, 0x13, 0x13, 0x04,
0x04, 0x03, 0x03, 0x01, 0x0C, 0x13, 0x13, 0x04, 0x04, 0x03, 0x03, 0x01,
0x13, 0x13, 0x13, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x13, 0x13, 0x13, 0x04,
0x04, 0x0B, 0x0B, 0x01, 0x13, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0A, 0x11, 0x11, 0x10, 0x10, 0x11,
0x01, 0x0B, 0x0B, 0x10, 0x10, 0x11, 0x11, 0x10, 0x01, 0x0B, 0x0B, 0x10,
0x10, 0x11, 0x11, 0x10, 0x01, 0x01, 0x01, 0x15, 0x15, 0x16, 0x16, 0x17,
0x01, 0x01, 0x01, 0x15, 0x15, 0x16, 0x16, 0x17, 0x01, 0x01, 0x01, 0x15,
0x15, 0x18, 0x18, 0x15, 0x01, 0x01, 0x01, 0x15, 0x15, 0x18, 0x18, 0x15,
0x01, 0x01, 0x01, 0x15, 0x15, 0x19, 0x19, 0x15, 0x11, 0x10, 0x10, 0x11,
0x11, 0x11, 0x11, 0x13, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x14,
0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x14, 0x17, 0x16, 0x16, 0x0B,
0x0B, 0x15, 0x15, 0x0B, 0x17, 0x16, 0x16, 0x0B, 0x0B, 0x15, 0x15, 0x0B,
0x15, 0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x15, 0x15, 0x18, 0x18, 0x15,
0x15, 0x01, 0x01, 0x15, 0x15, 0x1A, 0x1A, 0x15, 0x15, 0x01, 0x01, 0x15,
0x13, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x01, 0x14, 0x04, 0x04, 0x0B,
0x0B, 0x01, 0x01, 0x01, 0x14, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01,
0x0B, 0x16, 0x16, 0x15, 0x15, 0x01, 0x01, 0x01, 0x0B, 0x16, 0x16, 0x15,
0x15, 0x01, 0x01, 0x01, 0x15, 0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x01,
0x15, 0x18, 0x18, 0x15, 0x15, 0x01, 0x01, 0x01, 0x15, 0x1A, 0x1A, 0x15,
0x15, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03,
0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x05, 0x05, 0x01, 0x01, 0x02, 0x02,
0x04, 0x04, 0x05, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02,
0x02, 0x02, 0x04, 0x04, 0x05, 0x05, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x06, 0x06,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x06, 0x06, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x08, 0x08, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x08, 0x08,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x09, 0x09, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x09, 0x09, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x07, 0x07, 0x06, 0x06,
0x02, 0x02, 0x01, 0x01, 0x07, 0x07, 0x06, 0x06, 0x02, 0x02, 0x01, 0x01,
0x06, 0x06, 0x03, 0x03, 0x02, 0x02, 0x01, 0x01, 0x06, 0x06, 0x03, 0x03,
0x02, 0x02, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x02, 0x02, 0x01, 0x01,
0x03, 0x03, 0x07, 0x07, 0x02, 0x02, 0x01, 0x01, 0x07, 0x07, 0x09, 0x09,
0x02, 0x02, 0x01, 0x01, 0x07, 0x07, 0x09, 0x09, 0x02, 0x02, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0A,
0x0A, 0x0A, 0x0A, 0x0A, 0x01, 0x01, 0x0A, 0x0A, 0x0D, 0x0E, 0x0D, 0x0D,
0x01, 0x01, 0x0A, 0x0A, 0x0D, 0x0E, 0x0D, 0x0D, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B,
0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01,
0x02, 0x02, 0x0B, 0x0B, 0x01, 0x0A, 0x0A, 0x0A, 0x02, 0x02, 0x0B, 0x0B,
0x0A, 0x0A, 0x0A, 0x0A, 0x02, 0x02, 0x0B, 0x0B, 0x0D, 0x0D, 0x0D, 0x0D,
0x02, 0x02, 0x12, 0x12, 0x0D, 0x0D, 0x0D, 0x0D, 0x02, 0x02, 0x12, 0x12,
0x0B, 0x0B, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x0B, 0x0B, 0x04, 0x04,
0x02, 0x02, 0x01, 0x01, 0x0C, 0x0C, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01,
0x0C, 0x0C, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x0C, 0x0C, 0x04, 0x04,
0x03, 0x03, 0x01, 0x01, 0x0C, 0x0C, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01,
0x0C, 0x0C, 0x13, 0x13, 0x14, 0x14, 0x02, 0x02, 0x0C, 0x0C, 0x13, 0x13,
0x14, 0x14, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0A, 0x0A, 0x0D, 0x0D,
0x0F, 0x0F, 0x0C, 0x0C, 0x0A, 0x0A, 0x0D, 0x0D, 0x0F, 0x0F, 0x0C, 0x0C,
0x0B, 0x0B, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x0B, 0x0B, 0x11, 0x11,
0x10, 0x10, 0x11, 0x11, 0x01, 0x01, 0x0A, 0x0A, 0x11, 0x11, 0x10, 0x10,
0x01, 0x01, 0x0A, 0x0A, 0x11, 0x11, 0x10, 0x10, 0x01, 0x01, 0x0B, 0x0B,
0x10, 0x10, 0x11, 0x11, 0x01, 0x01, 0x0B, 0x0B, 0x10, 0x10, 0x11, 0x11,
0x0F, 0x0F, 0x02, 0x02, 0x12, 0x12, 0x0C, 0x0C, 0x0F, 0x0F, 0x02, 0x02,
0x12, 0x12, 0x0C, 0x0C, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x11, 0x11,
0x10, 0x10, 0x11, 0x11, 0x0C, 0x0C, 0x13, 0x13, 0x04, 0x04, 0x03, 0x03,
0x0C, 0x0C, 0x13, 0x13, 0x04, 0x04, 0x03, 0x03, 0x13, 0x13, 0x13, 0x13,
0x04, 0x04, 0x0B, 0x0B, 0x13, 0x13, 0x13, 0x13, 0x04, 0x04, 0x0B, 0x0B,
0x13, 0x13, 0x04, 0x04, 0x03, 0x03, 0x01, 0x01, 0x13, 0x13, 0x04, 0x04,
0x03, 0x03, 0x01, 0x01, 0x14, 0x14, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01,
0x14, 0x14, 0x04, 0x04, 0x0B, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
};
const unsigned short lama_palette [] = {
0x7c1f, 0x0000, 0x0489, 0x08cb, 0x22bd, 0x1a5a, 0x1add, 0x379e, 0x04cb,
0x231f, 0x08ca, 0x0532, 0x161a, 0x333d, 0x331d, 0x123c, 0x1578, 0x1592,
0x11b6, 0x123a, 0x12bd, 0x0c85, 0x08ab, 0x150e, 0x1d8c, 0x1dce, 0x25ef,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000
};

View File

@ -8,31 +8,28 @@
#include <engine/gba_engine.h>
#include <engine/effects/fade_out_scene.h>
#include "sample_start_scene.h"
#include "kul.h"
#include "flying_stuff_scene.h"
#include "kul.h"
#include "lama.h"
std::vector<Background *> SampleStartScene::backgrounds() {
return {};
}
std::vector<Sprite *> SampleStartScene::sprites() {
return { smiley.get(), logo.get() };
return { animation.get() };
}
void SampleStartScene::load() {
foregroundPalette = std::unique_ptr<ForegroundPaletteManager>(new ForegroundPaletteManager(sharedPal, sizeof(sharedPal)));
foregroundPalette = std::unique_ptr<ForegroundPaletteManager>(new ForegroundPaletteManager(lama_palette, sizeof(lama_palette)));
SpriteBuilder<Sprite> builder;
smiley = builder
.withData(piskelTiles, sizeof(piskelTiles))
.withSize(SIZE_16_16)
.withLocation(10, 10)
.buildPtr();
logo = builder
.withData(kulTiles, sizeof(kulTiles))
.withSize(SIZE_64_32)
animation = builder
.withData(lama_data, sizeof(lama_data))
.withSize(SIZE_32_32)
.withAnimated(6, 3)
.withLocation(50, 50)
.buildPtr();
@ -44,5 +41,13 @@ void SampleStartScene::tick(u16 keys) {
TextStream::instance() << "entered: starting next scene";
engine->transitionIntoScene(new FlyingStuffScene(), new FadeOutScene(2));
} else if(keys & KEY_LEFT) {
animation->flipHorizontally(true);
} else if(keys & KEY_RIGHT) {
animation->flipHorizontally(false);
} else if(keys & KEY_UP) {
animation->flipVertically(true);
} else if(keys & KEY_DOWN) {
animation->flipVertically(false);
}
}

View File

@ -9,7 +9,7 @@
class SampleStartScene : public Scene {
private:
std::unique_ptr<Sprite> logo;
std::unique_ptr<Sprite> animation;
std::unique_ptr<Sprite> smiley;
public: