LCD 开发指导_Rev1.0
LCD开发指导
1 修订记录
版本 |
日期 |
作者 |
审核 |
修订内容 |
|---|---|---|---|---|
1.0 |
2023-12-7 |
Chenhz |
zlc |
创建文档 |
1.1 |
2024-03-25 |
sxx |
更改文档名称 |
|
1.2 |
2024-03-28 |
Chenhz |
文档新增SPI接口参数介绍、新增refresh API描述、API描述更新、预置LCD更新 |
|
1.3 |
2024-11-15 |
zw |
更改文档格式,删除demo |
|
1.4 |
2026-04-29 |
zxq |
根据底包分离最新代码修改 |
2 简介
本文档介绍 LTE-EC71X LCD 接口 API 情况, API 接口位于 LSDK/components/kernel/lierda_api/liot_lcd/liot_lcd.h 文件声明。
LTE-EC71X 系列模组支持LCD进行显示。
2.1 LCD接口介绍
LTE-EC71X系列模组支持通过多种接口(当前开放LSPI接口、SPI接口)驱动LCD进行显示,其中包括为LCD驱动专门优化的LSPI接口,其最大速度可支持到51Mhz,并且支持3-line-spi与2-data-lane模式,可以满足多种LCD开发需求。
LSPI接口由USP1和USP2复用,详情参考:
请至钉钉文档查看附件《Lierda NT26-FCN OpenCPU 引脚复用表.xlsx》。
在设置USP1为Camera,设置USP2为LSPI时,可以实现摄像头在LCD屏的加速预览。
2.2 LCD显示定义
LCD可以进行旋转显示等,为了更好地进行开发,OpenCPU LCD API对LCD的方向坐标作出如下定义:
在LCD默认状态下,LCD横向像素数量定义为width,纵向像素数量定义为height。该值在LCD驱动中需要进行设置,详见
在LCD当前显示的方向下,LCD横向定义为X轴,纵向定义为Y轴,原点为于屏幕左上角(因屏而异)
竖屏模式:
横屏模式:
3 API 函数概览
函数 |
说明 |
|---|---|
liot_lcd_init() |
LCD初始化 |
liot_lcd_clear_screen() |
LCD全屏刷新 |
liot_lcd_draw_point() |
LCD画点 |
liot_lcd_draw_line() |
LCD画线 |
liot_lcd_draw_rectangle() |
LCD画矩形 |
liot_lcd_draw_circle() |
LCD画圆 |
liot_lcd_write() |
LCD显示图片 |
liot_lcd_set_brightness() |
LCD设置亮度 |
liot_lcd_display_on() |
LCD开启显示 |
liot_lcd_display_off() |
LCD关闭显示 |
liot_lcd_sleep_in() |
LCD进入休眠 |
liot_lcd_sleep_out() |
LCD退出休眠 |
4 类型说明
4.1 liot_lcd_errcode_e
LCD API 执行结果错误码。
声明
typedef enum {
LIOT_LCD_OK = 0,
LIOT_LCD_ERROR,
LIOT_LCD_NO_MEM,
LIOT_LCD_INVALID_PARAM,
LIOT_LCD_INVALID_HANDLE,
LIOT_LCD_INVALID_INTERFACE,
LIOT_LCD_LOCATION_OVERFLOW,
}liot_lcd_errcode_e;
参数
LIOT_LCD_OK :执行成功
LIOT_LCD_ERROR:未知错误
LIOT_LCD_NO_MEM:内存不足
LIOT_LCD_INVALID_PARAM:无效参数
LIOT_LCD_INVALID_HANDLE:无效句柄
LIOT_LCD_INVALID_INTERFACE:无效接口
LIOT_LCD_LOCATION_OVERFLOW:位置越界
5 API 函数详解
5.1 liot_lcd_init
该函数用于初始化LCD屏幕。
声明
liot_lcd_handle_t liot_lcd_init(liot_lcd_config_t *config);
参数
config:[in] LCD配置参数;
返回值
liot_lcd_handle_t LCD句柄
5.1.1 liot_lcd_config_t
LCD配置参数结构体定义
typedef liot_hal_lcd_config_t liot_lcd_config_t;
typedef struct{
liot_hal_lcd_interface_t interface;
liot_hal_lcdDev_t *lcdDev;
}liot_hal_lcd_config_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
liot_hal_lcd_interface_t |
interface |
LCD接口配置 |
liot_hal_lcdDev_t |
lcdDev |
LCD驱动,所使用的LCD驱动接口由此设置 |
5.1.2 liot_lcd_interface_t
LCD接口配置结构体定义
typedef struct{
liot_hal_lcd_interface_type_e type;
union
{
liot_hal_lcd_interface_lspi_t lspi;
liot_hal_lcd_interface_spi_t spi;
liot_hal_lcd_interface_i2c_t i2c;
liot_hal_lcd_interface_8080_t l8080;
liot_hal_lcd_interface_8080_t l6800;
};
liot_hal_lcd_blk_t blk;
int8_t rst_pin;
}liot_hal_lcd_interface_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
liot_hal_lcd_interface_type_e |
interface |
LCD接口类型 |
liot_hal_lcd_interface_lspi_t |
lspi |
LSPI配置项 |
liot_hal_lcd_interface_spi_t |
spi |
SPI配置项,支持,暂不完善 |
liot_hal_lcd_interface_i2c_t |
i2c |
I2C配置项,暂不支持 |
liot_hal_lcd_interface_8080_t |
l8080 |
8080配置项,暂不支持 |
liot_hal_lcd_interface_6800_t |
l6800 |
6800配置项,暂不支持 |
liot_hal_lcd_blk_t |
blk |
背光BLK配置项 |
int8_t |
rst_pin |
LCD复位引脚 |
5.1.3 liot_lcd_interface_lspi_t
LCD接口配置结构体定义
typedef struct{
liot_lspi_port_e num;
bool lcd_3_line_spi;
bool lcd_2_data_lane;
liot_hal_lspi_busspeed_e speed;
bool sync;
liot_lspi_cs_e cs;
liot_hal_lcd_event_cb cb;
}liot_hal_lcd_interface_lspi_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
liot_lspi_port_e |
num |
lspi编号 |
bool |
lcd_3_line_spi |
lspi是否启用3线模式,该影响DCX引脚是否使用 |
bool |
lcd_2_data_lane |
lspi是否启用2-data-lane,启用该项需启用DCX引脚 |
liot_hal_lspi_busspeed_e |
speed |
lspi总线速度 |
bool |
sync |
是否开启异步模式 |
liot_lspi_cs_e |
cs |
lspi cs引脚,718M特定引脚支持 |
liot_hal_lcd_event_cb |
cb |
lspi事件回调,LSPI完成一次传输会触发一次 |
5.1.4 liot_lcd_interface_spi_t
LCD接口配置结构体定义
typedef struct{
liot_spi_port_e num;
liot_spi_cpol_pol_e cpol;
liot_spi_cpha_pol_e cpha;
int8_t lcd_dc;
int8_t cs;
liot_spi_clk_e speed;
bool dma_en;
liot_hal_lcd_event_cb cb;
}liot_hal_lcd_interface_spi_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
liot_spi_port_e |
num |
SPI编号 |
liot_spi_cpol_pol_e |
cpol |
SPI极性 |
liot_spi_cpha_pol_e |
cpha |
SPI相位 |
int8_t |
lcd_dc |
LCD命令/数据引脚 |
cs |
cs |
SPI片选引脚 |
liot_spi_clk_e |
speed |
SPI总线速度 |
bool |
dma_en |
SPI的dma是否启用,不完善 |
liot_hal_lcd_event_cb |
cb |
SPI事件回调,SPI配合dma完成一次传输会触发一次 |
5.1.5 liot_lcd_blk_t
LCD BLK背光配置结构体定义
typedef struct{
liot_hal_lcd_blk_type_e type;
int8_t pin;
liot_pwm_sel_e pwm_num;
}liot_hal_lcd_blk_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
liot_hal_lcd_blk_type_e |
type |
背光BLK类型 |
int8_t |
pin |
背光BLK引脚 |
liot_pwm_sel_e |
pwm_num |
若背光类型设置为PWM,则指定PWM通道 |
5.1.6 liot_lcdDev_t
LCD 驱动配置结构体,具体使用详见LCD驱动新增指导
typedef struct{
liot_hal_lcdDev_func_t func;
liot_hal_lcdDev_info_t info;
}liot_hal_lcdDev_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
liot_hal_lcdDev_func_t |
func |
LCD驱动函数 |
liot_hal_lcdDev_info_t |
info |
LCD驱动配置信息 |
5.2 liot_lcd_clear_screen
该函数用于LCD全屏刷新
该接口最终导向liot_hal_lcdDev_func_t中的full接口
声明
liot_lcd_errcode_e liot_lcd_clear_screen(liot_lcd_handle_t handle,
uint16_t color);
参数
handle:[in] LCD句柄;
color:[in] 颜色;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.3 liot_lcd_draw_point
该函数用于LCD画点
声明
liot_lcd_errcode_e liot_lcd_draw_point(liot_lcd_handle_t handle,
uint32_t x,
uint32_t y,
uint16_t color);
参数
handle:[in] LCD句柄;
x: [in] X轴坐标;
y: [in] Y轴坐标;
color:[in] 颜色;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.4 liot_lcd_draw_line
该函数用于LCD画线
声明
liot_lcd_errcode_e liot_lcd_draw_line(liot_lcd_handle_t handle,
uint16_t sx,
uint16_t sy,
uint16_t ex,
uint16_t ey,
uint16_t color);
参数
handle:[in] LCD句柄;
sx:[in] X轴起始坐标;
sy:[in] Y轴起始坐标;
ex:[in] X轴终止坐标;
ey:[in] Y轴终止坐标;
color:[in]颜色;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.5 liot_lcd_draw_rectangle
该函数用于LCD画矩形
声明
liot_lcd_errcode_e liot_lcd_draw_rectangle(liot_lcd_handle_t handle,
uint16_t sx,
uint16_t sy,
uint16_t ex,
uint16_t ey,
uint16_t color);
参数
handle:[in] LCD句柄;
sx:[in] X轴起始坐标;
sy:[in] Y轴起始坐标;
ex:[in] X轴终止坐标;
ey:[in] Y轴终止坐标;
color:[in]颜色;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.6 liot_lcd_draw_circle
该函数用于LCD显示图片
声明
liot_lcd_errcode_e liot_lcd_draw_circle(liot_lcd_handle_t handle,
uint16_t sx,
uint16_t sy,
uint16_t r,
uint16_t color);
参数
handle:[in] LCD句柄;
sx:[in] 圆心X轴坐标;
sy:[in] 圆心Y轴坐标;
r:[in] 半径;
color:[in]颜色;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.7 liot_lcd_write
该函数用于LCD显示图片
该接口最终导向liot_hal_lcdDev_func_t中的fill接口
声明
liot_lcd_errcode_e liot_lcd_write(liot_lcd_handle_t handle,
uint16_t sx,
uint16_t sy,
uint16_t ex,
uint16_t ey,
uint8_t *buf);
参数
handle:[in] LCD句柄;
sx:[in] X轴起始坐标;
sy:[in] Y轴起始坐标;
ex:[in] X轴终止坐标;
ey:[in] Y轴终止坐标;
buf:[in]图像数据存放地址;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.8 liot_lcd_set_brightness
该函数用于LCD设置亮度
当LCD配置背光类型为 LIOT_LCD_BACKLIGHT_PWM 时,背光亮度等级可设置0-100
当LCD配置背光类型为 LIOT_LCD_BACKLIGHT_GPIO 时,背光亮度仅可设置0-1即关或开,超过1的数均视为1
当LCD配置背光类型为 LIOT_LCD_NO_BACKLIGHT 时,该配置项无效
声明
liot_lcd_errcode_e liot_lcd_set_brightness(liot_lcd_handle_t handle,
uint8_t level);
参数
handle:[in] LCD句柄;
level:[in] 亮度等级 0-100
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.9 liot_lcd_display_on
该函数用于LCD开启显示
该接口最终导向liot_hal_lcdDev_func_t中的display_on接口
声明
liot_lcd_errcode_e liot_lcd_display_on(liot_lcd_handle_t handle);
参数
handle:[in] LCD句柄;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.10 liot_lcd_display_off
该函数用于LCD关闭显示
该接口最终导向liot_hal_lcdDev_func_t中的display_on接口
声明
liot_lcd_errcode_e liot_lcd_display_off(liot_lcd_handle_t handle);
参数
handle:[in] LCD句柄;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.11 liot_lcd_sleep_in
该函数用于LCD进入休眠
该接口最终导向liot_hal_lcdDev_func_t中的sleep_in接口
声明
liot_lcd_errcode_e liot_lcd_sleep_in(liot_lcd_handle_t handle);
参数
handle:[in] LCD句柄;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.12 liot_lcd_sleep_out
该函数用于LCD退出休眠
该接口最终导向liot_hal_lcdDev_func_t中的sleep_in接口
声明
liot_lcd_errcode_e liot_lcd_sleep_out(liot_lcd_handle_t handle);
参数
handle:[in] LCD句柄;
返回值
liot_lcd_errcode_e:错误码,详见4.1
5.13 liot_lcd_refresh
该函数用于LCD刷新显示,非必要接口,适用于需要手动刷新的LCD屏幕,例如创建了buffer的SSD1306
该接口最终导向liot_hal_lcdDev_func_t中的refresh接口
声明
liot_lcd_errcode_e liot_lcd_refresh(liot_lcd_handle_t handle);
参数
handle:[in] LCD句柄;
返回值
liot_lcd_errcode_e:错误码,详见4.1
六、LCD驱动新增指导
为了更好地满足用户对于LCD开发,LTE-EC71X系列模组OpenCPU SDK内已预置部分常用LCD的驱动。为了满足用户对于自定义LCD屏幕的开发需求,LTE-EC71X系列模组OpenCPU SDK支持添加自定义的LCD驱动。
6.1 预置的LCD驱动
LTE-EC71X系列模组OpenCPU SDK预置LCD驱动路径为LSDK/components/driver/lcd/src/,当前已预置的LCD驱动如表所示,其中各项均为开发测试数据,请以实际开发为准:
LCD驱动芯片 |
LCD接口支持 |
颜色格式 |
分辨率 |
|---|---|---|---|
ST7789 |
LSPI/SPI |
RGB565 |
320*240 |
GC9A01 |
LSPI/SPI |
RGB565 |
240*240 |
ST7735 |
LSPI/SPI |
RGB565 |
160*128 |
SSD1306 |
SPI |
单色 |
128*64 |
GC9D01 |
LSPI/SPI |
RGB565 |
160*160 |
ST7567 |
LSPI/SPI |
单色 |
128*64 |
6.2 新增LCD驱动
6.2.1 新增LCD驱动源码文件
用户需要创建LCD驱动源码文件,可以存放在预置LCD驱动路径,也可以存放在用户工程文件夹中,无论哪种方式,都需要在对应文件夹的Makefile文件中进行声明,以确保LCD驱动源码文件能被顺利编译。
以预置LCD驱动路径LSDK/components/driver/lcd/src/为例,用户将对应的Custom_lcd.c放在该目录下后,需要在管理该目录的Makefile文件LSDK/components/driver/lcd/Makefile中添加该文件的编译目标文件Custom_lcd.o
C++LCDDRV_DIR := $(DRIVER_DIR)/lcd
LCDDRV_SRC := $(LCDDRV_DIR)/src
CFLAGS_INC += -I $(TOP)/$(LCDDRV_DIR)/inc
LCDDRV_COBJS += $(LCDDRV_SRC)/liot_lcdDev_GC9A01.o
LCDDRV_COBJS += $(LCDDRV_SRC)/liot_lcdDev_GC9D01.o
LCDDRV_COBJS += $(LCDDRV_SRC)/liot_lcdDev_SSD1306.o
LCDDRV_COBJS += $(LCDDRV_SRC)/liot_lcdDev_ST7567.o
LCDDRV_COBJS += $(LCDDRV_SRC)/liot_lcdDev_ST7735.o
LCDDRV_COBJS += $(LCDDRV_SRC)/liot_lcdDev_ST7789.o
LCDDRV_COBJS += $(LCDDRV_SRC)/Custom_lcd.o
LCDDRV_COBJS := $(addprefix $(BUILDDIR)/, $(LCDDRV_COBJS))
ifeq ($(TOOLCHAIN),GCC)
libusr-y += lib_lcddrv.a
$(BUILDDIR)/lib/libusr/lib_lcddrv.a: $(LCDDRV_COBJS)
@mkdir -p $(dir $@)
$(ECHO) AR $@
$(Q)$(AR) -cr $@ $^
endif
6.2.2 建立LCD驱动结构体
LCD驱动配置通过liot_hal_lcdDev_t结构体来管理其各项接口与参数
6.2.2.1 liot_hal_lcdDev_t
LCD 驱动配置结构体
该结构体分为两个部分,分别是LCD驱动函数与LCD驱动信息。其中LCD驱动函数定义了配置控制LCD的函数,LCD驱动信息记录了该LCD的分辨率、显示方向等信息。
typedef struct{
liot_hal_lcdDev_func_t func;
liot_hal_lcdDev_info_t info;
}liot_hal_lcdDev_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
liot_hal_lcdDev_func_t |
func |
LCD驱动函数 |
liot_hal_lcdDev_info_t |
info |
LCD驱动配置信息 |
6.2.2.2 liot_hal_lcdDev_info_t
LCD 驱动信息结构体
LCD在程序运行后显示的分辨率、方向、颜色等,均由该结构体中对应的值来控制
typedef struct{
uint16_t id;
uint32_t interface;
uint32_t width;
uint32_t height;
liot_hal_lcdDev_dir_e direction;
liot_hal_lcdDev_color_depth_e color_depth;
}liot_hal_lcdDev_info_t;
参数
类型 |
参数 |
描述 |
|---|---|---|
uint16_t |
id |
LCD驱动id |
uint32_t |
interface |
LCD所支持的接口,通过位或来记录支持的LCD接口 |
uint32_t |
width |
LCD在初始默认状态下横向像素数 |
uint32_t |
height |
LCD在初始默认状态下纵向像素数 |
liot_hal_lcdDev_dir_e |
direction |
LCD显示逆时针旋转的方向 |
liot_hal_lcdDev_color_depth_e |
color_depth |
LCD色深 |
6.2.2.3 liot_hal_lcdDev_func_t
LCD 驱动函数结构体
为保证自定义LCD能够正常使用,用户需要在该结构体内定义必要的函数。其中各类I2C接口的LCD屏幕的命令/数据的传输方式不尽相同,所以预留出接口来提供用户自定义。
typedef struct{
int (*init)(liot_hal_lcd_handle_t handle);
int (*addrSet)(liot_hal_lcd_handle_t handle,uint16_t sx, uint16_t sy,
uint16_t ex, uint16_t ey);
int (*fill)(liot_hal_lcd_handle_t handle, uint16_t sx, uint16_t sy,
uint16_t ex, uint16_t ey, void* buf);
int (*full)(liot_hal_lcd_handle_t handle, uint16_t sx, uint16_t sy,
uint16_t ex, uint16_t ey, uint16_t color);
int (*strWrite)(liot_hal_lcd_handle_t handle, uint16_t sx, uint16_t sy,
uint16_t ex, uint16_t ey, char* str);
int (*display_on)(liot_hal_lcd_handle_t handle, bool on);
int (*sleep_in)(liot_hal_lcd_handle_t handle, bool in);
int (*refresh)(liot_hal_lcd_handle_t handle);
// 以下为I2C类LCD用户自定义接口,若不为NULL,将取代程序内原有接口执行
int (*custom_i2c_cmd_send)(liot_hal_lcd_handle_t handle, uint8_t *cmd,
uint32_t len);
int (*custom_i2c_data_send)(liot_hal_lcd_handle_t handle,
uint8_t *data, uint32_t len);
}liot_hal_lcdDev_func_t;
参数
类型 |
必要性 |
描述 |
|---|---|---|
int (*init) |
必要 |
LCD驱动初始化函数,用于初始化配置LCD寄存器 |
int (*addrSet) |
必要 |
LCD设置显示坐标 |
int (*fill) |
必要 |
LCD指定区域显示图片 |
int (*full) |
必要 |
LCD指定区域显示一种颜色 |
int (*strWrite) |
非必要 |
LCD指定区域显示文字,该接口适用于自带字库的LCD屏幕 |
int (*display_on) |
非必要 |
LCD开启/关闭显示 |
int (*sleep_in) |
非必要 |
LCD进入/离开休眠 |
int (*refresh) |
非必要 |
LCD刷新显示,该接口适用于带buffer的屏幕,例如SSD1306 |
int (*custom_i2c_cmd_send) |
非必要 |
I2C类LCD用户自定义命令发送接口 |
int (*custom_i2c_data_send) |
非必要 |
I2C类LCD用户自定义数据发送接口 |
6.2.2.4 新增LCD驱动结构体信息补全
以预置的ST7789驱动为例,根据实际所使用的LCD屏幕补全驱动信息与驱动函数
liot_hal_lcdDev_t liot_st7789_dev = {
.func = {
.init = liot_st7789_init,
.addrSet = liot_st7789_addrset,
.fill = liot_st7789_fill,
.full = liot_st7789_full,
.strWrite = NULL,
.display_on = liot_st7789_display_on,
.sleep_in = liot_st7789_sleep_in,
.refresh = NULL,
},
.info = {
.id = 0x7789,
.interface = LIOT_LCD_INTERFACE_LSPI |
LIOT_LCD_INTERFACE_SPI |
LIOT_LCD_INTERFACE_8080,
.width = 240,
.height = 320,
.direction = LIOT_LCD_DIR_90_ANGLE,
.color_depth = LIOT_LCD_COLOR_RGB565,
},
};
6.2.3 LCD驱动函数编写
在 liot_hal_lcdDev_func_t 中定义LCD驱动所需要的函数,此处定义的函数将在用户执行liot_lcd_init、liot_lcd_write等函数时进行引用。
以预置的ST7789驱动为例,其init函数如下,其中 liot_hal_lcd_write_cmd、liot_hal_lcd_transmit_cmd为HAL LCD API,在LSDK/components/driver/lcd/inc/liot_lcdDev.h中定义。
static int liot_st7789_init(liot_hal_lcd_handle_t handle)
{
liot_hal_lcd_write_cmd(handle, 0x11, 0x00);
switch(liot_st7789_dev.info.direction)
{
case LIOT_LCD_DIR_0_ANGLE:
liot_hal_lcd_write_cmd(handle, 0x36, 0x00); break;
case LIOT_LCD_DIR_90_ANGLE:
liot_hal_lcd_write_cmd(handle, 0x36, 0x70); break;
case LIOT_LCD_DIR_180_ANGLE:
liot_hal_lcd_write_cmd(handle, 0x36, 0xA0); break;
case LIOT_LCD_DIR_270_ANGLE:
liot_hal_lcd_write_cmd(handle, 0x36, 0xC0); break;
default: liot_hal_lcd_write_cmd(handle, 0x36, 0x00); break;
}
if(((liot_hal_lcd_config_t*)handle)->interface.type == LIOT_LCD_INTERFACE_LSPI &&
((liot_hal_lcd_config_t*)handle)->interface.lspi.lcd_2_data_lane == true)
{
liot_hal_lcd_write_cmd(handle, 0xE7, 0x10);
}
// liot_hal_lcd_write_cmd(handle, 0x20, 0x00);
liot_hal_lcd_write_cmd(handle, 0x21, 0x00);
liot_hal_lcd_write_cmd(handle, 0x3A, 0x05);
uint8_t set_rate_cmd[] = {0x0c,0x0c,0x00,0x33,0x33};
liot_hal_lcd_transmit_cmd(handle, 0xB2, set_rate_cmd, sizeof(set_rate_cmd));
liot_hal_lcd_write_cmd(handle, 0xB7, 0x35);
liot_hal_lcd_write_cmd(handle, 0xBB, 0x20);
liot_hal_lcd_write_cmd(handle, 0xC0, 0x2C);
liot_hal_lcd_write_cmd(handle, 0xC2, 0x01);
liot_hal_lcd_write_cmd(handle, 0xC3, 0x0B);
liot_hal_lcd_write_cmd(handle, 0xC4, 0x20);
liot_hal_lcd_write_cmd(handle, 0xC6, 0x0F);
uint8_t reg_PWCTRL1[] = {0xa4,0xa1};
liot_hal_lcd_transmit_cmd(handle, 0xD0, reg_PWCTRL1, sizeof(reg_PWCTRL1));
uint8_t reg_PVGAMCTRL[] = {0xd0,0x03,0x09,0x0e,0x11,0x3d,0x47,0x55,
0x53,0x1a,0x16,0x14,0x1f,0x22}; //Positive voltage gamma
liot_hal_lcd_transmit_cmd(handle, 0xE0, reg_PVGAMCTRL, sizeof(reg_PVGAMCTRL));
uint8_t reg_NVGAMCTRL[] = {0xd0,0x02,0x08,0x0d,0x12,0x2c,0x43,0x55,
0x53,0x1e,0x1b,0x19,0x20,0x22}; //Negative voltage gamma
liot_hal_lcd_transmit_cmd(handle, 0xE1, reg_NVGAMCTRL, sizeof(reg_NVGAMCTRL));
liot_hal_lcd_write_cmd(handle, 0x29, 0x00);
return 0;
}
6.2.4 声明LCD驱动结构体并引用
在LCD驱动结构体创建完毕并填充对应的信息后,需要在用户工程中声明该结构体
LIOT_ADD_DISPLAY(liot_st7789_dev);
使用liot_lcd_init初始化时在多定义的liot_lcd_config_t的lcdDev成员设置为所声明的LCD驱动结构体
liot_lcd_config_t cfg = {
.interface = {
.type = LIOT_LCD_INTERFACE_LSPI,
.lspi.num = LIOT_LSPI_PORT2,
.lspi.lcd_3_line_spi = false,
.lspi.lcd_2_data_lane = false,
.lspi.speed = LIOT_LSPI_51MHZ,
.lspi.cb = lcd_event_callback,
.blk.type = LIOT_LCD_BACKLIGHT_PWM,
.blk.pin = 102,
.blk.pwm_num = LIOT_PWM_3,
.rst_pin = 49,
},
.lcdDev = liot_st7789_dev,
};
liot_lcd_handle_t lcd = liot_lcd_init(&cfg);
至此,新增LCD驱动已创建完毕,可以使用LCD API在LCD屏幕上进行显示
七、Demo示例
7.1 demo源码
/**
* @File Name: liot_lcd_demo.c
* @brief LCD显示demo, 演示liot_lcd框架的完整使用流程
* @Author : Chenhz
* @Email : ciot_iot_support@lierda.com
* @Version : 1.0
* @Creat Date : 2023-11-29
*
* @copyright Copyright (c) 2023 Lierda Science & Technology Group Co., Ltd.
*
* 使用流程:
* 1. 用LIOT_ADD_DISPLAY宏声明LCD驱动
* 2. 构造liot_lcd_config_t配置 (接口类型/引脚/背光/复位等)
* 3. liot_lcd_init初始化LCD
* 4. 调用绘图API (clear_screen/draw_line/draw_circle/write等)
* 5. liot_lcd_refresh刷新到屏幕
*/
#include <stdio.h>
#include <string.h>
#include "cmsis_os2.h"
#include "stdlib.h"
#include "lierda_app_main.h"
#include "liot_os.h"
#include "liot_gpio.h"
#include "slpman.h"
#include "fastmath.h"
#include "liot_lcd.h"
/* Lierda Logo图片数据, 格式: RGB565, 尺寸: 100x60像素
* 由图像取模工具生成, 每2字节表示1个像素(R5-G6-B5)
* 总大小 = 100 * 60 * 2 = 12000 字节
*/
// 100*60
const uint8_t Lierda_logo[12000] = { /* 0X10,0X10,0X00,0X64,0X00,0X3C,0X01,0X39, */
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X11,0XF6,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X11,0XF6,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8E,0XED,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XFE,0X20,0XFD,0X20,0XFD,0X20,0XFD,
0X20,0XFD,0X57,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X3A,0XFF,0XA9,0XE4,0XA9,0XE4,0XA9,0XE4,0XA9,0XE4,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XA8,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X8F,0XFE,0X20,0XFD,0X20,0XFD,0X20,0XFD,0X20,0XFD,0XDD,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XD0,0XED,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA9,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X24,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X6E,0XFE,0X20,0XFD,0X20,0XFD,0X20,0XFD,
0X20,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XD0,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA9,0XE4,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XE8,0XFD,0X20,0XFD,0X20,0XFD,0X20,0XFD,0X42,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X4C,0XED,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X4C,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X79,0XFF,0X57,0XFF,0X57,0XFF,0X57,0XFF,
0X79,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA9,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XD0,0XED,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X7B,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X67,0XE4,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X12,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X39,0XFF,0XF7,0XF6,
0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,
0X7B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0X53,0XF6,
0XA8,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XEA,0XE4,0X53,0XF6,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8E,0XED,0XA8,0XE4,0XA8,0XE4,
0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0X8E,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X7C,0XFF,0X8E,0XED,0X25,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0X67,0XE4,0X54,0XF6,0XFF,0XFF,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XF8,0XF6,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7C,0XFF,0X4C,0XED,0X25,0XE4,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X67,0XE4,0X54,0XF6,0XFF,0XFF,0XA9,0XE4,0XA9,0XE4,
0XA9,0XE4,0XA9,0XE4,0X3A,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X95,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X95,0XF6,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X95,0XF6,0X24,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0XA8,0XE4,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XE2,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X8E,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XD0,0XED,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X4C,0XED,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XF8,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XD0,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0X0B,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X7C,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X53,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X4C,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XBE,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X4C,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0X95,0XF6,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XE2,0XDB,0XA8,0XE4,0X66,0XE4,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X53,0XF6,0XFF,0XFF,0XFF,0XFF,
0XBD,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X53,0XF6,0XFF,0XFF,0XFF,0XFF,0XD0,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XD0,0XED,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEA,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X39,0XFF,0XFF,0XFF,0XBD,0XFF,0X24,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XE2,0XDB,
0X95,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0XE2,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X24,0XE4,0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X66,0XE4,0XA8,0XE4,0XA8,0XE4,0X39,0XFF,0XFF,0XFF,0X7C,0XFF,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XD0,0XED,0X7C,0XFF,0XFF,0XFF,0XBE,0XFF,
0XD0,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X25,0XE4,0XFF,0XFF,
0XFF,0XFF,0X7C,0XFF,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XE3,0XE3,0XD0,0XED,
0X7C,0XFF,0XFF,0XFF,0XBE,0XFF,0XD0,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA9,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XA8,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XED,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X7B,0XFF,0XFF,0XFF,
0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X4C,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X3A,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X96,0XF6,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA9,0XE4,0XFF,0XFF,0XFF,0XFF,0X4C,0XED,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XE3,0XE3,0X3A,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X54,0XF6,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA9,0XE4,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X24,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X4C,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X24,0XE4,0XCF,0XED,
0XCF,0XED,0XCF,0XED,0XCF,0XED,0XCF,0XED,0XCF,0XED,0XCF,0XED,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE3,0XE3,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XD0,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X25,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA9,0XE4,0XFF,0XFF,
0XFF,0XFF,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XD0,0XED,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X25,0XE4,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0X8E,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X66,0XE4,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,
0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X3A,0XFF,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X7C,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA9,0XE4,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XD0,0XED,0XFF,0XFF,0XF8,0XF6,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XBE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XA9,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XD0,0XED,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X4C,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X66,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XA8,0XE4,
0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X39,0XFF,0XFF,0XFF,0X4C,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XF6,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XA9,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XD0,0XED,0XFF,0XFF,
0XF8,0XF6,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X67,0XE4,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0X12,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X4C,0XED,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,
0XA8,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X66,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XF8,0XF6,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7C,0XFF,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0X96,0XF6,0XFF,0XFF,0XF8,0XF6,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X7C,0XFF,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XF8,0XF6,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X11,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,
0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X66,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0XF6,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0X54,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X0B,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XF8,0XF6,0XFF,0XFF,
0XF8,0XF6,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X54,0XF6,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X0B,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XF8,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X11,0XF6,0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,
0XF7,0XF6,0XF7,0XF6,0XF7,0XF6,0X7B,0XFF,0XFF,0XFF,0XFF,0XFF,0X39,0XFF,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0XE2,0XDB,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X7B,0XFF,0X66,0XE4,0X4C,0XED,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X4C,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XE3,0XE3,0XF8,0XF6,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBE,0XFF,0X0B,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0X3A,0XFF,0XFF,0XFF,0XBE,0XFF,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XE3,0XE3,0XF8,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7C,0XFF,0X0B,0XED,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,
0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,
0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0XEA,0XE4,0XCF,0XED,0XCF,0XED,0XEA,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XE2,0XDB,
0X11,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X4C,0XED,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X67,0XE4,0XA9,0XE4,0XA9,0XE4,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X0B,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X67,0XE4,
0XA9,0XE4,0XA9,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X8E,0XED,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X53,0XF6,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X66,0XE4,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X4C,0XED,0XFF,0XFF,0XFF,0XFF,0X39,0XFF,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X7C,0XFF,0XE3,0XE3,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X3A,0XFF,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X25,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,
0XFF,0XFF,0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XBD,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBD,0XFF,0X66,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X96,0XF6,
0XE3,0XE3,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XE3,0XE3,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA9,0XE4,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X54,0XF6,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X67,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,
0XA9,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XED,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XCF,0XED,0X24,0XE4,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0XEA,0XE4,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X3A,0XFF,0XA9,0XE4,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X25,0XE4,0X96,0XF6,0XD0,0XED,0XA1,0XDB,0XA1,0XDB,
0XA1,0XDB,0XA9,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X3A,0XFF,
0XA9,0XE4,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X67,0XE4,0XF8,0XF6,
0XD0,0XED,0XA1,0XDB,0XA1,0XDB,0XA1,0XDB,0X0B,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X39,0XFF,
0XF7,0XF6,0X11,0XF6,0X95,0XF6,0XF7,0XF6,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X7C,0XFF,0XF8,0XF6,0XD0,0XED,0XF8,0XF6,0X3A,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7C,0XFF,0XF8,0XF6,0X12,0XF6,
0XF8,0XF6,0X7C,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X7B,0XFF,0XCF,0XED,0XCF,0XED,0XCF,0XED,0XCF,0XED,0XCF,0XED,0XCF,0XED,
0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0XCF,0XED,0X7B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7B,0XFF,0XCF,0XED,
0X53,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0XCF,0XED,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XCF,0XED,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X53,0XF6,0XA8,0XE4,0XCF,0XED,0X80,0XDB,
0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X11,0XF6,0X80,0XDB,0XE2,0XDB,0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,
0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0X53,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEA,0XE4,0X80,0XDB,
0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,
0XA8,0XE4,0XE2,0XDB,0XEA,0XE4,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X66,0XE4,0X80,0XDB,
0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0X24,0XE4,0X80,0XDB,
0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X39,0XFF,0XF7,0XF6,0X95,0XF6,0XCF,0XED,0XCF,0XED,0XCF,0XED,
0X80,0XDB,0X24,0XE4,0XCF,0XED,0XCF,0XED,0XCF,0XED,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X66,0XE4,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0XA8,0XE4,0XA8,0XE4,0XA8,0XE4,0X80,0XDB,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X7B,0XFF,0X80,0XDB,0X24,0XE4,0XFF,0XFF,0XFF,0XFF,0X8E,0XED,0XA8,0XE4,
0X39,0XFF,0XFF,0XFF,0XEA,0XE4,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,
0X4C,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XCF,0XED,0XCF,0XED,0XA8,0XE4,0X80,0XDB,0X4C,0XED,0XCF,0XED,0XCF,0XED,
0XE2,0XDB,0XA8,0XE4,0X24,0XE4,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X95,0XF6,0XA8,0XE4,0X11,0XF6,
0XFF,0XFF,0XFF,0XFF,0XA8,0XE4,0X80,0XDB,0X39,0XFF,0XFF,0XFF,0X8E,0XED,0XA8,0XE4,
0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X24,0XE4,
0X80,0XDB,0XA8,0XE4,0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X4C,0XED,0X80,0XDB,0X66,0XE4,
0X80,0XDB,0XCF,0XED,0X80,0XDB,0XF7,0XF6,0X80,0XDB,0X8E,0XED,0X80,0XDB,0X66,0XE4,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0XCF,0XED,0X7B,0XFF,0XFF,0XFF,0X66,0XE4,0X80,0XDB,
0XFF,0XFF,0X7B,0XFF,0XCF,0XED,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0XA8,0XE4,
0XFF,0XFF,0XFF,0XFF,0X11,0XF6,0X80,0XDB,0XE2,0XDB,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X66,0XE4,0X24,0XE4,0XA8,0XE4,0X80,0XDB,0XCF,0XED,0X80,0XDB,0X95,0XF6,
0X80,0XDB,0XCF,0XED,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE2,0XDB,0X80,0XDB,
0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X80,0XDB,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0XCF,0XED,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X7B,0XFF,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XBD,0XFF,0XE2,0XDB,0X80,0XDB,
0XF7,0XF6,0XE2,0XDB,0X80,0XDB,0X7B,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0XEA,0XE4,0XE2,0XDB,
0X80,0XDB,0XCF,0XED,0X80,0XDB,0XCF,0XED,0X80,0XDB,0XEA,0XE4,0X80,0XDB,0XEA,0XE4,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X39,0XFF,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0X66,0XE4,
0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X4C,0XED,
0XFF,0XFF,0XCF,0XED,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X4C,0XED,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XF7,0XF6,0X80,0XDB,0XCF,0XED,0X80,0XDB,0XE2,0XDB,0XCF,0XED,0X80,0XDB,0XCF,0XED,
0X80,0XDB,0XCF,0XED,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X11,0XF6,0X80,0XDB,0XCF,0XED,
0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0XA8,0XE4,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X95,0XF6,0X80,0XDB,0XCF,0XED,0X7B,0XFF,0X80,0XDB,0X80,0XDB,0X7B,0XFF,
0XFF,0XFF,0X7B,0XFF,0X80,0XDB,0XE2,0XDB,0XBD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0X80,0XDB,0X95,0XF6,0X80,0XDB,
0XA8,0XE4,0XCF,0XED,0X80,0XDB,0XCF,0XED,0XCF,0XED,0X8E,0XED,0X80,0XDB,0XCF,0XED,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XA8,0XE4,0X80,0XDB,0X39,0XFF,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0X4C,0XED,
0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0XA8,0XE4,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X11,0XF6,
0XF7,0XF6,0XCF,0XED,0X53,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X53,0XF6,0XCF,0XED,
0X39,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0X8E,0XED,0X80,0XDB,0X95,0XF6,0X80,0XDB,0XA8,0XE4,0XCF,0XED,0X80,0XDB,0XFF,0XFF,
0X8E,0XED,0X24,0XE4,0X80,0XDB,0XF7,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0XDB,0XE2,0XDB,0XFF,0XFF,
0XE2,0XDB,0X80,0XDB,0X80,0XDB,0XCF,0XED,0XFF,0XFF,0XF7,0XF6,0X80,0XDB,0XA8,0XE4,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XCF,0XED,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,
0X80,0XDB,0X80,0XDB,0X80,0XDB,0X80,0XDB,0X53,0XF6,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
};
/* ================= LCD驱动声明 =================
* LIOT_ADD_DISPLAY宏: 将LCD驱动实例注册到框架, 框架会自动链接对应的驱动代码
* 可同时声明多个驱动, 运行时通过lcdDev指针选择使用哪一个
* 每个驱动对应一种LCD控制IC, 如:
* liot_st7789_dev - ST7789 (常用1.3寸/1.54寸彩屏)
* liot_gc9a01_dev - GC9A01 (常用1.28寸圆形屏)
* liot_st7735_dev - ST7735 (常用0.96寸/1.8寸彩屏)
* liot_ssd1306_12864_dev - SSD1306 (0.96寸单色OLED, 128x64)
* liot_gc9d01_dev - GC9D01 (小尺寸彩屏)
* liot_st7567_dev - ST7567 (单色LCD)
* liot_gc9307_dev - GC9307 (常用2.4寸彩屏)
*/
LIOT_ADD_DISPLAY(liot_st7789_dev); //添加LCD驱动
LIOT_ADD_DISPLAY(liot_gc9a01_dev); //添加LCD驱动
LIOT_ADD_DISPLAY(liot_st7735_dev); //添加LCD驱动
LIOT_ADD_DISPLAY(liot_ssd1306_12864_dev); //添加LCD驱动
LIOT_ADD_DISPLAY(liot_gc9d01_dev); //添加LCD驱动
LIOT_ADD_DISPLAY(liot_st7567_dev); //添加LCD驱动
LIOT_ADD_DISPLAY(liot_gc9307_dev);
/* ================= 接口和硬件配置 =================
* LIOT_LCD_DEMO_TEST_LSPI: 使用LSPI接口(Low-Speed SPI, EC718专用LCD接口, 支持DMA2D加速)
* LIOT_LCD_DEMO_TEST_SPI: 使用普通SPI接口(通用性更好, 但速度较慢)
* 两者只能选一个, 通过1/0切换
* 注意: EC716系列不支持LSPI, 必须用SPI
*/
#define LIOT_LCD_DEMO_TEST_LSPI 1 // 使用LSPI接口驱动LCD,716系列不支持LSPI
#define LIOT_LCD_DEMO_TEST_SPI 0 // 使用SPI接口驱动LCD
/* LCD数量: 1=单屏, 2=双屏(双屏目前仅支持LSPI接口)
* 双屏时需准备第二份cfg1配置, 并取消代码中 #if LIOT_LCD_DEMO_NUM >= 2 的分支
*/
#define LIOT_LCD_DEMO_NUM 1 // 驱动LCD数量,1或2,双屏目前仅支持LSPI
/* LSPI传输完成回调函数 (DMA异步传输结束时触发)
* 当前为空实现, 如需在传输完成后做处理可在此添加
* 注意: 此函数在中断上下文中执行, 不可做耗时操作
*/
static void lcd_event_callback(void)
{
}
void liot_lcd_demo_thread(void *argv)
{
uint16_t i = 0, j = 0, k = 0;
uint32_t lcdticks = 0;
uint32_t width = 0, height = 0;
/* ====== 第1步: 选择LCD驱动 ======
* 指向上面LIOT_ADD_DISPLAY声明的某个驱动实例
* 不同IC的初始化序列/分辨率/方向不同, 驱动内部会处理
* 切换屏幕只需改这一行即可
*/
liot_hal_lcdDev_t *lcdDev = &liot_gc9307_dev;
/* ====== 第2步: 构造LCD配置 ======
* interface: 通信接口配置
* .type - 接口类型: LIOT_LCD_INTERFACE_LSPI(高速) 或 LIOT_LCD_INTERFACE_SPI(通用)
* .lspi.num - LSPI端口号: EC718支持LSPI_PORT0/PORT1/PORT2, 需与硬件引脚对应
* .lspi.lcd_3_line_spi - 3线SPI模式(无DC引脚, 用9bit命令), false=4线(有DC引脚)
* .lspi.lcd_2_data_lane - 双数据通道(需硬件支持), false=单通道
* .lspi.speed - LSPI时钟频率: LIOT_LSPI_25MHZ等, 越高刷屏越快, 但需屏IC支持
* .lspi.sync - true=同步传输(等完成才返回), false=异步(DMA, 需配合回调)
* .lspi.cb - 异步传输完成回调, sync=false时有效
* .lspi.cs - 片选: LIOT_LSPI_CS0/CS1, 双屏时第二个屏用CS1
* blk: 背光配置
* .type - LIOT_LCD_BACKLIGHT_PWM(PWM调光) 或 LIOT_LCD_BACKLIGHT_GPIO(开关)
* .pin - 背光控制引脚号
* .pwm_num - PWM通道号(type=PWM时有效)
* rst: 复位配置
* .pin - RST引脚号
* .delay - 复位后延时(ms), 等待LCD IC稳定
*/
liot_lcd_config_t cfg = {
.interface = {
.type = LIOT_LCD_INTERFACE_LSPI,
.lspi.num = LIOT_LSPI_PORT2,
.lspi.lcd_3_line_spi = false,
.lspi.lcd_2_data_lane = false,
.lspi.speed = LIOT_LSPI_25MHZ,
.lspi.sync = true,
.lspi.cb = lcd_event_callback,
.lspi.cs = LIOT_LSPI_CS0,
.blk.type = LIOT_LCD_BACKLIGHT_PWM,
.blk.pin = 100,
.blk.pwm_num = LIOT_PWM_0,
.rst.pin = 49,
.rst.delay = 100,
},
.lcdDev = lcdDev,
};
/* ====== 第3步: 上电等待 + 电源配置 ======
* osDelay(5000): 等待系统稳定, 确保各外设初始化完成
* liot_aon_power_on(): 开启AON(Always-On)域供电, 部分模组LCD由AON供电
* liot_gpio_set_voltage: 设置GPIO电压3.3V, 需与LCD IO电平匹配
* slpManSetPmuSleepMode: 关闭深度休眠, 避免LCD刷新过程中MCU意外休眠
*/
osDelay(5000);
liot_aon_power_on();
liot_gpio_set_voltage(LIOT_VOL_3_30V);
slpManSetPmuSleepMode(true, SLP_ACTIVE_STATE, false);
/* ====== 第4步: 初始化LCD ======
* liot_lcd_init: 根据cfg配置初始化接口+复位+背光+发送IC初始化命令
* 返回lcd句柄, 后续所有绘图API都通过此句柄操作
*/
liot_lcd_handle_t lcd = liot_lcd_init(&cfg);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_handle_t lcd1 = liot_lcd_init(&cfg1);
#endif
/* ====== 第5步: 获取屏幕有效分辨率 ======
* 根据屏幕旋转方向(0°/90°/180°/270°)调整宽高
* 0°/180°: 原始宽高; 90°/270°: 宽高互换
* 后续绘图坐标基于此width/height计算
*/
if(lcdDev->info.direction == LIOT_LCD_DIR_0_ANGLE || lcdDev->info.direction == LIOT_LCD_DIR_180_ANGLE)
{
width = lcdDev->info.width;
height = lcdDev->info.height;
}
else
{
width = lcdDev->info.height;
height = lcdDev->info.width;
}
/* ====== 第6步: 背光亮度渐变测试 ======
* liot_lcd_set_brightness: 设置背光亮度(0~100), 需背光类型为PWM才有效
* 依次设置 100→80→60→40→20, 每次间隔1s, 观察亮度渐变
*/
// 背光亮度测试
liot_lcd_set_brightness(lcd, 100);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd, 80);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd, 60);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd, 40);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd, 20);
liot_rtos_task_sleep_ms(1000);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_set_brightness(lcd1, 100);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd1, 80);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd1, 60);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd1, 40);
liot_rtos_task_sleep_ms(1000);
liot_lcd_set_brightness(lcd1, 20);
liot_rtos_task_sleep_ms(1000);
#endif
/* ====== 第7步: 全屏清色测试 ======
* liot_lcd_clear_screen: 将帧缓冲填充为指定颜色(不立即刷新到屏幕)
* liot_lcd_refresh: 将帧缓冲数据通过LSPI/SPI发送到LCD显存, 屏幕才会更新
* 依次显示 红→绿→蓝→白, 验证RGB三通道是否正常
* 颜色定义在liot_lcd.h中: RED=0xF800, GREEN=0x07E0, BLUE=0x001F, WHITE=0xFFFF
*/
// 全屏颜色刷屏测试
liot_lcd_clear_screen(lcd, RED);
liot_lcd_refresh(lcd);
liot_rtos_task_sleep_ms(1000);
liot_lcd_clear_screen(lcd, GREEN);
liot_lcd_refresh(lcd);
liot_rtos_task_sleep_ms(1000);
liot_lcd_clear_screen(lcd, BLUE);
liot_lcd_refresh(lcd);
liot_rtos_task_sleep_ms(1000);
liot_lcd_clear_screen(lcd, WHITE);
liot_lcd_refresh(lcd);
liot_rtos_task_sleep_ms(1000);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_clear_screen(lcd1, GREEN);
liot_lcd_refresh(lcd1);
liot_rtos_task_sleep_ms(1000);
liot_lcd_clear_screen(lcd1, BLUE);
liot_lcd_refresh(lcd1);
liot_rtos_task_sleep_ms(1000);
liot_lcd_clear_screen(lcd1, RED);
liot_lcd_refresh(lcd1);
liot_rtos_task_sleep_ms(1000);
liot_lcd_clear_screen(lcd1, WHITE);
liot_lcd_refresh(lcd1);
liot_rtos_task_sleep_ms(1000);
#endif
/* ====== 第8步: 画线测试 ======
* liot_lcd_draw_line: 在帧缓冲中画一条线(起点到终点, 指定颜色)
* 这里画了两条线: 水平中线 + 垂直中线, 将屏幕分为四象限
*/
// 画线
liot_lcd_draw_line(lcd, 0, height / 2, width, height / 2, BLUE);
liot_lcd_draw_line(lcd, width / 2, 0, width / 2, height, BLUE);
liot_lcd_refresh(lcd);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_draw_line(lcd1, 0, height / 2, width, height / 2, BLUE);
liot_lcd_draw_line(lcd1, width / 2, 0, width / 2, height, BLUE);
liot_lcd_refresh(lcd1);
#endif
/* ====== 第9步: 显示图片 ======
* liot_lcd_write: 将RGB565格式的图片数据写入帧缓冲指定区域
* 参数: (handle, 起始x, 起始y, 结束x, 结束y, 图片数据指针)
* 坐标范围: 0~(宽/高-1), 即100x60的图片, x范围0~99, y范围0~59
* SSD1306是单色屏, RGB565图片不适用, 所以跳过
*/
// 显示图片
if(lcdDev != &liot_ssd1306_12864_dev)
liot_lcd_write(lcd, 0, 0, 100-1, 60-1, (uint8_t *)Lierda_logo);
#if LIOT_LCD_DEMO_NUM >= 2
if(lcdDev != &liot_ssd1306_12864_dev)
liot_lcd_write(lcd1, 0, 0, 100-1, 60-1, (uint8_t *)Lierda_logo);
#endif
/* ====== 第10步: 正弦曲线绘制 ======
* 逐点计算正弦函数y值并画线连接, 形成动态正弦波动画
* 公式: y = (height/2)*sin(1/(width/4)*π*i) + height/2
* sin函数参数为弧度, 3.14近似π, width/4控制波形周期数
* 每画一个点延时10ms, 形成从左到右逐步绘制的效果
* k保存上一次y值, 用于连线
*/
// 画点 点与点之间连线
for(i = 0; i < width; i++)
{
j = ( (float)((height) / 2) * (float)sin((float)( (float)1 / (float)(width / 4) ) * 3.14 * i)) + ((height) / 2);
if(i != 0) liot_lcd_draw_point(lcd, i, j, BLUE);
#if LIOT_LCD_DEMO_NUM >= 2
if(i != 0) liot_lcd_draw_point(lcd1, i, j, RED);
#endif
liot_lcd_draw_line(lcd, i, k, i, j, BLUE);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_draw_line(lcd1, i, k, i, j, RED);
#endif
k = j;
liot_lcd_refresh(lcd);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_refresh(lcd1);
#endif
osDelay(10);
}
/* ====== 第11步: 画圆和矩形 ======
* liot_lcd_draw_circle: 画空心圆 (圆心x, 圆心y, 半径, 颜色)
* liot_lcd_draw_rectangle: 画空心矩形 (左上x, 左上y, 右下x, 右下y, 颜色)
* 以屏幕中心为基准, 画两组同心圆(半径30和60)和矩形(30x30和60x60)
*/
// 画圆形/矩形
liot_lcd_draw_circle(lcd, width / 2, height / 2, 30, GREEN);
liot_lcd_draw_circle(lcd, width / 2, height / 2, 60, GREEN);
liot_lcd_draw_rectangle(lcd, (width / 2) - 30, (height / 2) - 30, (width / 2) + 30, (height / 2) + 30, BLACK);
liot_lcd_draw_rectangle(lcd, (width / 2) - 60, (height / 2) - 60, (width / 2) + 60, (height / 2) + 60, BLACK);
liot_lcd_refresh(lcd);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_draw_circle(lcd1, width / 2, height / 2, 30, BLUE);
liot_lcd_draw_circle(lcd1, width / 2, height / 2, 60, BLUE);
liot_lcd_draw_rectangle(lcd1, (width / 2) - 30, (height / 2) - 30, (width / 2) + 30, (height / 2) + 30, BLACK);
liot_lcd_draw_rectangle(lcd1, (width / 2) - 60, (height / 2) - 60, (width / 2) + 60, (height / 2) + 60, BLACK);
liot_lcd_refresh(lcd1);
#endif
liot_rtos_task_sleep_ms(3000);
/* ====== 第12步: 帧率测试 ======
* 循环 红→绿→蓝 刷屏, 测量每帧耗时和FPS
* liot_rtos_get_running_time: 获取系统运行时间(ms)
* FPS = 1000 / 单帧耗时(ms)
* 注意: 刷屏会闪烁, 调试时注意
* 影响帧率的因素: LSPI时钟频率/是否双通道/屏幕分辨率/同步vs异步
*/
// 刷屏帧率测试(屏闪注意)
while (1)
{
for(i = 0; i < 3; i++)
{
lcdticks = liot_rtos_get_running_time();
if(i == 0)
{
liot_lcd_clear_screen(lcd, RED);
liot_lcd_refresh(lcd);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_clear_screen(lcd1, GREEN);
liot_lcd_refresh(lcd1);
#endif
}
else if(i == 1)
{
liot_lcd_clear_screen(lcd, GREEN);
liot_lcd_refresh(lcd);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_clear_screen(lcd1, BLUE);
liot_lcd_refresh(lcd1);
#endif
}
else if(i == 2)
{
liot_lcd_clear_screen(lcd, BLUE);
liot_lcd_refresh(lcd);
#if LIOT_LCD_DEMO_NUM >= 2
liot_lcd_clear_screen(lcd1, RED);
liot_lcd_refresh(lcd1);
#endif
}
lcdticks = liot_rtos_get_running_time() - lcdticks;
liot_trace("LCD loop %dms, %dFPS", lcdticks, lcdticks == 0 ? 0 : 1000/lcdticks);
}
}
}
7.2 demo效果
demo正常运行之后,会有如下过程显示:
7.2.1 亮度测试
背光亮度从 100% 逐级递减至 20%
每级持续 1 秒:100% → 80% → 60% → 40% → 20%
7.2.2 十字线显示
清屏白色
屏幕中心绘制蓝色十字线
刷新显示
7.2.3 Logo 与几何图形
左上角显示 Lierda Logo(100×60)
中心绘制两个绿色同心圆(半径 30、60)
绘制两个黑色同心矩形
刷新显示,保持 3 秒
7.2.4 循环颜色测试
每 1 秒切换全屏颜色
顺序:红 → 绿 → 蓝 → 白 → 循环

