chore: checkpoint 第一版
ci / verify (push) Canceled after 0s

This commit is contained in:
Codex Local
2026-09-06 17:04:11 +08:00
parent a8cdec98d1
commit 0c2151ace9
659 changed files with 185855 additions and 554 deletions
@@ -0,0 +1,27 @@
cmake_minimum_required(VERSION 3.16)
message(STATUS "................. ${CMAKE_SYSTEM_NAME}")
if("${CMAKE_SYSTEM_NAME}" MATCHES "(Rtos|rtos|RTOS)+")
set(PLATFORM_RTOS TRUE)
add_compile_definitions(PLATFORM_RTOS)
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "(Linux|linux|LINUX)+")
set(PLATFORM_LINUX TRUE)
add_compile_definitions(PLATFORM_LINUX)
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "(android|Android|ANDROID)+")
set(PLATFORM_ANDROID TRUE)
add_compile_definitions(PLATFORM_ANDROID)
elseif("${CMAKE_SYSTEM_NAME}" MATCHES "(Darwin|darwin|MACOSX|macosx|MACOS|macos)+")
set(PLATFORM_MACOS TRUE)
add_compile_definitions(PLATFORM_MACOS)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/common.cmake)
if(ESP_PLATFORM)
message(STATUS "ESP_PLATFORM is defined, including esp.cmake")
include(${CMAKE_CURRENT_LIST_DIR}/cmake/espressif.cmake)
return()
elseif(PLATFORM_MACOS)
message(STATUS "PLATFORM_MACOS is defined, including macos.cmake")
include(${CMAKE_CURRENT_LIST_DIR}/cmake/macos.cmake)
return()
endif()
@@ -0,0 +1,734 @@
# `application` 代码梳理
> 说明:本文档由 AI 在阅读当前目录代码后生成,目标是帮助读者快速理解代码结构、模块职责与主要运行流程,作为代码导读使用。
## 1. 目录定位
`application` 不是单一的业务文件夹,而是一套面向设备侧 AI 对话场景的“应用层组件”:
- `framework/` 提供事件驱动框架,解决不同业务模块之间的通信问题。
- `platform/` 提供硬件抽象层 HAL,屏蔽板级和外设细节。
- `service/` 提供 AI 对话业务拆分后的多个服务模块。
- `cmake/` 负责把 framework、platform、service 组装成一个 ESP-IDF 组件。
结合各子目录 `README_zh.md` 的设计说明,可以把这套代码理解为:
- `volc_conv_ai` 是底层云连接 SDK。
- `application` 则是建立在该 SDK 之上的业务应用框架。
也就是说,`application` 关注的是“设备如何组织业务逻辑、如何和硬件协作、如何把 AI 对话跑起来”,而不是连接协议本身。
## 2. 总体分层
整个目录可以概括成 3 层:
### 2.1 Framework 层
职责是让不同业务模块通过事件 `pub/sub` 通信,不直接相互调用。
核心文件:
- `framework/inc/aios.h`
- `framework/inc/aios_def.h`
- `framework/src/aios.c`
这是整个应用层的“调度内核”。
### 2.2 Platform 层
职责是为 AI 对话场景提供硬件抽象:
- 音频采集
- 音频播放
- 屏幕显示
- 按键
- 文件系统
- 全局硬件上下文
核心文件:
- `platform/inc/volc_hal.h`
- `platform/inc/volc_hal_*.h`
- `platform/src/espressif/*.c`
从当前实现看,`platform/src/espressif` 是主实现平台,明显以 ESP32/ESP-IDF 为目标。
### 2.3 Service 层
职责是把 AI 对话业务拆成几个相互解耦的服务:
- `conv_service`
- 负责 AI 对话的建立、运行、退出。
- `function_call_service`
- 负责处理智能体触发的 function call。
- `local_logic_service`
- 负责本地预设逻辑,不依赖大模型理解。
- `service/src/volc_manager_service.c`
- 负责接收高层业务入口事件,并拉起对应 service。
这与 `service/README_zh.md` 的描述是一致的。
## 3. 这个目录不是完整 App Main
单看 `application` 目录,本身**没有完整的 `main/app_main`**。
它更像是一个“可复用的应用组件库”。真正的组装顺序出现在仓库里的示例,例如:
- `examples/high_quality_solution/espressif/main/conv_ai_embedded_kit.c`
该示例展示了应用启动的标准顺序:
1. `volc_hal_init()`
2. `volc_hal_display_create()`
3. 初始化网络、时间同步等系统能力
4. `aios_init(VOLC_SERVICE_EVENT_MAX)`
5. 初始化各 service:
- `volc_service_manager_init()`
- `volc_conv_service_manager_init()`
- `function_call_service_init()`
- `local_logic_service_init()`
6. `aios_run()`
7. 在 wakeup 回调中发布 `VOLC_SERVICE_AI_CONVERSATION` 事件
因此,`application` 目录的代码更应该被理解成“主程序可直接引用的一套模块化应用骨架”。
## 4. Framework:AIOS 事件框架
### 4.1 AIOS 是什么
`framework` 的 README_zh 说明得很直白:它是为了让不同业务模块通过 `sub/pub event` 进行通信。
`aios.c` 的实现表明,这实际上是一个:
- 单线程事件循环
- 状态机驱动
- 带优先级的 session 调度器
- 带定时器能力的轻量运行时
### 4.2 核心概念
#### 1. `aios_session_t`
表示一个业务状态机实例,包含:
- 优先级
- 是否启用
- 当前状态函数
应用中的每个 service 基本都对应一个 session。
#### 2. `aios_event_t`
表示一个事件,包含:
- 事件 ID
- 当前尚未消费它的订阅者位图
- 事件数据
- 数据释放回调
#### 3. 状态函数
每个 session 都由状态函数驱动,签名是:
```c
aios_ret_t (*aios_state_handler)(struct aios_session *const me, aios_event_t const * const e);
```
返回值可以表示:
- 已处理
- 未处理
- 状态迁移
### 4.3 调度方式
`aios_run()` 会不断调用 `aios_once()`。
`aios_once()` 的主逻辑是:
1. 处理到期定时器,定时器会转化为普通事件。
2. 如果当前没有事件,则进入可中断睡眠。
3. 从高优先级到低优先级寻找“当前有订阅事件待处理”的 session。
4. 找出这个 session 最早应该消费的事件。
5. 调用 session 的当前状态函数处理事件。
6. 如果该事件没有剩余订阅者,则释放它。
这套机制的重点是:
- 事件是共享的,但每个订阅者只消费一次。
- 调度按 session 优先级进行。
- 不同 service 之间完全依赖事件通信。
### 4.4 为什么适合这个项目
这套框架特别适合当前项目,因为这里的业务是典型的“多模块协作”:
- 唤醒触发 AI 对话
- AI 对话过程中收到字幕
- 字幕再触发本地逻辑
- function call 消息再触发本地动作
如果全部互相直接调用,耦合会很高;用 AIOS 后,模块只需要关心自己订阅和发布什么事件。
## 5. Service 层:业务模块划分
`service/README_zh.md` 已给出分工,源码进一步明确了具体职责。
### 5.1 公共事件定义
`service/inc/volc_service_common.h` 是业务总线的关键头文件,定义了:
- 事件 ID
- session 优先级
主要事件包括:
- `VOLC_SERVICE_AI_CONVERSATION`
- 请求进入 AI 对话
- `VOLC_SERVICE_AI_CONVERSATION_START`
- 真正启动 AI 对话线程
- `VOLC_SERVICE_AI_CONVERSATION_QUIT`
- 退出 AI 对话
- `VOLC_SERVICE_AI_CONVERSATION_OVER`
- AI 对话线程结束后的通知
- `VOLC_FUNCTION_CALL_EXEC`
- 执行 function call
- `VOLC_FUNCTION_CALL_TRIGGER`
- function call 被智能体触发
- `VOLC_LOCAL_LOGIC_PLAY_WELCOME`
- 播放欢迎音
- `VOLC_LOCAL_LOGIC_PROCESS_SUBTITLE`
- 本地处理字幕
优先级定义为:
- AI 对话服务优先级最低编号 `0`
- 然后是 function call
- 然后是 local logic
- app manager 优先级最高编号 `3`
在 `aios.c` 中,高优先级 session 会先被选中执行。
## 6. `volc_manager_service`:业务入口管理
文件:
- `service/src/volc_manager_service.c`
这是最上层的“应用业务入口控制器”。
### 6.1 它做了什么
它订阅两个顶层事件:
- `VOLC_SERVICE_NETWORK_CONFIG`
- `VOLC_SERVICE_AI_CONVERSATION`
当前代码里真正有效的是:
- 收到 `VOLC_SERVICE_AI_CONVERSATION`
- 再发布 `VOLC_SERVICE_AI_CONVERSATION_START`
因此它的本质是:
- 作为“业务启动总入口”
- 把更粗粒度的用户/系统动作转换成具体 service 执行动作
### 6.2 作用
这一层让“谁要求启动 AI 对话”和“AI 对话服务怎么起线程”分离开了。
## 7. `conv_service`:核心 AI 对话服务
这是整个目录最关键的业务模块。
相关文件:
- `service/conv_service/src/volc_conv_service.c`
- `service/conv_service/src/volc_conv.c`
两者分工明显:
- `volc_conv_service.c`
- service 管理器,负责事件响应与线程管理
- `volc_conv.c`
- AI 对话线程的真正业务实现
### 7.1 `volc_conv_service_manager.c` 的职责
`volc_conv_service_manager_init()` 会注册一个 session,并订阅:
- `VOLC_SERVICE_AI_CONVERSATION_START`
- `VOLC_SERVICE_AI_CONVERSATION_INTERRUPT`
- `VOLC_SERVICE_AI_CONVERSATION_QUIT`
- `VOLC_SERVICE_AI_CONVERSATION_OVER`
收到不同事件后的行为:
- `START`
- 创建 `conv_ai_service_task` 线程
- `QUIT`
- 调用 `conv_ai_service_task_stop()`
- `OVER`
- 清空线程句柄
也就是说,这一层负责“线程生命周期管理”,而不是 AI 对话本身。
### 7.2 `volc_conv.c` 的职责
这个文件是 AI 对话业务主实现。
它做了 5 件关键事情:
#### 1. 构造 `volc_conv_ai` 配置
通过 `CONV_AI_CONFIG_FORMAT` 拼出连接云端 SDK 所需的 JSON,包含:
- IoT 配置
- RTC 配置
- 编解码参数
- RTC 参数扩展
然后在 `conv_ai_service_init()` 里调用:
- `volc_create()`
这说明 `application` 这一层直接把底层 SDK 当成对话引擎使用。
#### 2. 建立采集与播放
`conv_ai_service_task()` 启动时会:
- 创建或复用音频采集对象
- 切换采集模式到 `VOLC_AUDIO_MODE_CAPTURE`
- 创建或复用音频播放器
- 启动播放器
其中:
- 采集回调 `__audio_capture_cb()`
- 采集到音频后立即调用 `volc_send_audio_data()`
- 音频回调 `__on_volc_audio_data()`
- 收到智能体返回的音频后用 `volc_hal_player_play_data()` 播放
这就形成了一个完整的音频闭环:
- 麦克风采集 -> 发送到云端
- 云端返回语音 -> 喇叭播放
#### 3. 处理会话状态并驱动 UI
`__on_volc_conversation_status()` 会根据 SDK 回调状态更新显示层:
- `LISTENING`
- 状态栏显示“智能体聆听中”
- `THINKING`
- 主画面切到思考表情
- 状态栏显示“智能体思考中”
- `ANSWERING`
- 主画面切到开心表情
- 状态栏显示“智能体说话中”
- `INTERRUPTED`
- 状态栏显示“智能体被打断”
- `ANSWER_FINISH`
- 状态栏显示“智能体说话完成”
这表明 UI 与对话状态是强绑定的。
#### 4. 处理消息数据
`__on_volc_message_data()` 会解析从底层 SDK 收到的二进制消息头:
- `subv`
- 字幕消息
- `tool`
- function call 执行消息
- `info`
- function call 触发提示消息
随后:
- 字幕消息交给 `__on_subtitle_message_received()`
- `tool` 发布 `VOLC_FUNCTION_CALL_EXEC`
- `info` 发布 `VOLC_FUNCTION_CALL_TRIGGER`
所以 `conv_service` 其实是“AI 中枢”,它把底层 SDK 输出的不同类别消息重新分发给其他 service。
#### 5. 管理对话生命周期
线程主体会:
1. 启动采集与播放
2. 调用 `volc_start()`
3. 进入循环等待,按秒累加 `wait_time`
4. 超时或被要求退出时:
- `volc_stop()`
- 发布 `VOLC_SERVICE_AI_CONVERSATION_OVER`
- 停止采集、停止播放、销毁播放对象
- 重启唤醒模式采集
- 恢复待机 UI
这里的设计非常关键:
- AI 对话期间使用 `CAPTURE` 模式持续采音
- AI 对话结束后恢复 `WAKEUP` 模式等待下一次唤醒
这体现了“待机态/对话态”双模式切换。
## 8. `function_call_service`:函数调用桥接层
文件:
- `service/function_call_service/src/volc_function_call_service.c`
- `service/function_call_service/src/volc_local_function_list.c`
### 8.1 作用
这个 service 专门处理智能体下发的 function call。
当前代码里只实现了一个本地函数:
- `adjust_audio_val`
### 8.2 两类消息
#### 1. 触发提示消息 `VOLC_FUNCTION_CALL_TRIGGER`
收到后,会判断是否是 `adjust_audio_val`,如果是就先调用:
- `volc_send_text_to_agent(..., "别着急,我来给你调整音量", VOLC_AGENT_TYPE_TTS, 2)`
这相当于先让智能体“说一句回应”,再执行工具。
#### 2. 执行消息 `VOLC_FUNCTION_CALL_EXEC`
收到真正的 `tool_calls` JSON 后:
- 解析函数名
- 解析参数
- 如果是 `adjust_audio_val`
- 调用本地音量调整逻辑
- 再构造带 `func` 头的结果消息
- 调用 `volc_send_message()` 把执行结果回传给智能体
### 8.3 本地函数实现
`volc_local_function_list.c` 中实现了:
- 调大音量
- 调小音量
它通过 HAL 获取当前播放器句柄,再调用:
- `volc_hal_get_audio_player_volume()`
- `volc_hal_set_audio_player_volume()`
所以 function call 服务的本质是:
- 把模型侧工具调用,映射为设备本地硬件动作
## 9. `local_logic_service`:本地规则逻辑
文件:
- `service/local_logic_service/src/local_logic_service.c`
### 9.1 它与 function call 的区别
README_zh 已经说明了区别:
- `function_call_service`
- 处理智能体明确发起的工具调用
- `local_logic_service`
- 处理设备本地预设逻辑,不依赖智能体工具协议
### 9.2 当前实现的两个能力
#### 1. 播放欢迎音
收到 `VOLC_LOCAL_LOGIC_PLAY_WELCOME` 事件时:
- 从 `/sdcard/wel.pcm` 读取 PCM 数据
- 逐块送入播放器播放
#### 2. 解析字幕并触发退出逻辑
收到 `VOLC_LOCAL_LOGIC_PROCESS_SUBTITLE` 事件时:
- 检查字幕中是否包含“退下吧”或“拜拜”
- 如果命中,则发送一条 `TTS` 给智能体:“好的拜拜”
- 当后续字幕中真的出现“好的拜拜”时,再发布:
- `VOLC_SERVICE_AI_CONVERSATION_QUIT`
这个逻辑很有代表性,它说明:
- 本地逻辑可以直接基于字幕内容快速决策
- 不必走 function call,也不必重新交给云端理解
## 10. Platform:硬件抽象层
`platform/README_zh.md` 说明了整体设计原则:
- 接口正交,尽量屏蔽硬件细节
- 但为了 AI 对话场景易用性,允许一定“场景定制化”
核心思想是:
- 不追求绝对通用
- 优先服务“AI 对话设备”这个具体场景
### 10.1 `volc_hal.h`:全局 HAL 上下文
`platform/inc/volc_hal.h` 定义了全局结构 `volc_hal_context_t`,里面集中保存:
- 按键句柄
- 音频/视频采集句柄
- 显示句柄
- 音频/视频播放器句柄
- 设备名
`volc_hal_init()` 只做必要初始化,不要求把所有外设一次性拉起。
### 10.2 `volc_hal.c`:ESP 平台 HAL 根初始化
当前 `espressif/volc_hal.c` 会完成:
- 分配全局 HAL context
- 调用 `basic_board_init()` 完成板级外设探测与初始化
- 初始化文件系统
- 根据 MAC 生成设备名
其中 `basic_board.c` 又做了:
- 查询板型
- 绑定播放设备、录音设备、LCD 设备
- 配置采样率、位宽、通道数、mic layout
- 打开 codec 设备
所以 `volc_hal_init()` 实际上是整个硬件层的入口。
## 11. 平台子模块
### 11.1 音频采集 `volc_hal_capture`
头文件:
- `platform/inc/volc_hal_capture.h`
实现:
- `platform/src/espressif/volc_hal_capture.c`
这个模块的重要特点有两个:
#### 1. 回调式采集
不是业务主动 `read()`,而是内部线程采集后异步回调一帧帧音频数据。
这与 README_zh 的设计说明完全一致。
#### 2. 支持两种音频模式
- `VOLC_AUDIO_MODE_WAKEUP`
- `VOLC_AUDIO_MODE_CAPTURE`
当前实现里:
- `WAKEUP`
- 打开带唤醒能力的 AFE/Recorder
- `CAPTURE`
- 打开正常语音采集
但底层仍然复用同一套采集模块,只是内部 pipeline 模式不同。
这也是 README_zh 中“唤醒和采集属于同一音频采集范畴”的具体落地。
### 11.2 音频播放 `volc_hal_player`
头文件:
- `platform/inc/volc_hal_player.h`
实现:
- `platform/src/espressif/volc_hal_player.c`
当前重点支持音频播放:
- 创建时初始化 feeder
- `start()` 启动喂音流程
- `play_data()` 将数据送入播放链路
- 支持音量获取和设置
业务层基本不需要关心具体解码器或采样参数,因为这些在编译期和平台层已经固化。
### 11.3 显示 `volc_hal_display`
头文件:
- `platform/inc/volc_hal_display.h`
实现有两套:
- `platform/src/espressif/volc_hal_display.c`
- `platform/src/espressif/volc_hal_display_lvgl.c`
README_zh 提到,显示层不是让业务任意创建区域,而是预先划分屏幕区域。接口中也确实体现了这一点。
预定义区域包括:
- `VOLC_DISPLAY_OBJ_STATUS`
- `VOLC_DISPLAY_OBJ_MAIN`
- `VOLC_DISPLAY_OBJ_SUBTITLE`
当前主实现 `volc_hal_display.c` 更偏向:
- 通过 `gfx/mmap_assets` 渲染 EAF 动画表情
- 叠加状态文字
- 根据状态切换不同动画
这使 UI 能直接表现智能体当前情绪和状态。
### 11.4 按键 `volc_hal_button`
头文件:
- `platform/inc/volc_hal_button.h`
实现:
- `platform/src/espressif/volc_hal_button.c`
这个模块本质是对底层 `iot_button` 的适配:
- 统一按钮事件枚举
- 注册回调
- 在回调中把底层事件转成 HAL 事件
### 11.5 文件 `volc_hal_file`
头文件:
- `platform/inc/volc_hal_file.h`
实现:
- `platform/src/espressif/volc_hal_file.c`
这层很薄,基本是 ANSI C 文件接口的简单包装:
- `open/read/write/seek/close`
当前主要被 `local_logic_service` 用来播放欢迎音频。
## 12. `application` 与 `volc_conv_ai` 的关系
这个目录与上层云端对话 SDK 的连接点,主要就在 `service/conv_service/src/volc_conv.c`。
对接方式是:
1. 用 `volc_create()` 创建对话引擎
2. 用 `volc_start()` 启动 RTC 模式对话
3. 采集到的音频通过 `volc_send_audio_data()` 上送
4. 收到的音频通过 `volc_hal_player_play_data()` 播放
5. 收到的消息按 `subv/tool/info` 分类再转给其他 service
6. 本地业务通过:
- `volc_send_message()`
- `volc_send_text_to_agent()`
继续和智能体交互
所以可以把 `application` 看成:
- 向下对接 `volc_conv_ai`
- 向上对接硬件和本地业务
是一个“设备侧 AI 对话编排层”。
## 13. 关键运行链路
从实际运行角度,主链路可以总结为:
### 13.1 待机态
1. HAL 初始化
2. 创建显示层
3. 启动 AIOS
4. 初始化各个 service
5. 启动 wakeup 模式音频采集
6. 屏幕提示“请说 hi 乐鑫,启动ai对话”
### 13.2 唤醒后进入对话
1. 唤醒回调发布 `VOLC_SERVICE_AI_CONVERSATION`
2. `volc_manager_service` 转发为 `VOLC_SERVICE_AI_CONVERSATION_START`
3. `conv_service_manager` 创建 `conv_ai_service_task`
4. 采集模块切换到 `CAPTURE` 模式
5. 启动播放器
6. 调用 `volc_start()` 建立云端对话
### 13.3 对话中
1. 本地采集音频并上传
2. 智能体返回音频并播放
3. 状态回调刷新 UI
4. 字幕消息更新显示
5. 字幕触发本地逻辑
6. 工具调用消息触发 function call 服务
### 13.4 对话结束
1. 超时、退出指令或其他条件触发结束
2. `volc_stop()`
3. 停止采集/播放
4. 恢复 wakeup 模式采集
5. UI 回到待机提示
## 14. 目录级总结
### 14.1 `framework/`
是一个轻量事件驱动状态机框架,负责 service 之间的解耦通信。
### 14.2 `platform/`
是面向 AI 对话设备场景定制的 HAL,不追求绝对通用,但强调对业务简单易用。
### 14.3 `service/`
是具体业务编排层:
- `volc_manager_service`
- 业务入口与事件分发
- `conv_service`
- AI 对话主流程
- `function_call_service`
- 工具调用桥接
- `local_logic_service`
- 本地规则逻辑
### 14.4 `cmake/`
负责把上述模块连成一个 ESP-IDF component,并依赖底层 `volc_conv_ai` 组件。
## 15. 一句话总结
`application` 目录本质上是一套“设备侧 AI 对话应用框架”:
- `framework` 解决模块通信
- `platform` 解决硬件适配
- `service` 解决业务编排
- `conv_service` 作为核心中枢把 `volc_conv_ai`、音频设备、显示设备、本地逻辑和 function call 串起来
如果后续继续深入阅读,推荐顺序如下:
1. `service/inc/volc_service_common.h`
2. `framework/src/aios.c`
3. `service/src/volc_manager_service.c`
4. `service/conv_service/src/volc_conv_service.c`
5. `service/conv_service/src/volc_conv.c`
6. `service/function_call_service/src/volc_function_call_service.c`
7. `service/local_logic_service/src/local_logic_service.c`
8. `platform/src/espressif/volc_hal.c`
9. `platform/src/espressif/volc_hal_capture.c`
10. `platform/src/espressif/volc_hal_player.c`
11. `platform/src/espressif/volc_hal_display.c`
@@ -0,0 +1,25 @@
set(VOLC_FRAMEWORK_SRCS "${CMAKE_CURRENT_LIST_DIR}/../framework/src/aios.c"
CACHE INTERNAL "ConversationalAI-Embedded-Kit-2.0 framework src file")
set(VOLC_FRAMEWORK_INCS "${CMAKE_CURRENT_LIST_DIR}/../framework/inc"
CACHE INTERNAL "ConversationalAI-Embedded-Kit-2.0 framework include dir")
set(VOLC_PLATFORM_INCS "${CMAKE_CURRENT_LIST_DIR}/../platform/inc"
CACHE INTERNAL "ConversationalAI-Embedded-Kit-2.0 platform include dir")
set(VOLC_SERVICE_INCS "${CMAKE_CURRENT_LIST_DIR}/../service/inc"
"${CMAKE_CURRENT_LIST_DIR}/../service/conv_service/inc"
"${CMAKE_CURRENT_LIST_DIR}/../service/function_call_service/inc"
"${CMAKE_CURRENT_LIST_DIR}/../service/local_logic_service/inc"
CACHE INTERNAL "ConversationalAI-Embedded-Kit-2.0 service include dir")
set(VOLC_SERVICE_SRCS "${CMAKE_CURRENT_LIST_DIR}/../service/src/volc_manager_service.c"
"${CMAKE_CURRENT_LIST_DIR}/../service/conv_service/src/volc_conv_service.c"
"${CMAKE_CURRENT_LIST_DIR}/../service/conv_service/src/volc_conv.c"
"${CMAKE_CURRENT_LIST_DIR}/../service/function_call_service/src/volc_function_call_service.c"
"${CMAKE_CURRENT_LIST_DIR}/../service/function_call_service/src/volc_local_function_list.c"
"${CMAKE_CURRENT_LIST_DIR}/../service/local_logic_service/src/local_logic_service.c"
CACHE INTERNAL "ConversationalAI-Embedded-Kit-2.0 service src file")
set(VOLC_UTIL_INCS "${CMAKE_CURRENT_LIST_DIR}/../utils"
CACHE INTERNAL "ConversationalAI-Embedded-Kit-2.0 util include dir")
@@ -0,0 +1,55 @@
# Copyright (2025) Beijing Volcano Engine Technology Ltd.
# SPDX-License-Identifier: Apache-2.0
# ConversationalAI SDK ESP-IDF component configuration
# Converted from standard CMake to ESP-IDF component format
# Source files
set(VOLC_ESP_SRCS "${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/volc_hal.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/volc_hal_button.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/volc_hal_capture.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/volc_hal_display.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/volc_hal_file.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/volc_hal_led.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/volc_hal_player.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/basic_board.c"
)
set(VOLC_ESP_DISPLAY_SRCS "${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/lvgl_source/echoear_font.c"
"${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/lvgl_source/img_app_aiPhone.c"
)
set(VOLC_APP_SRCS ${VOLC_FRAMEWORK_SRCS}
${VOLC_SERVICE_SRCS}
${VOLC_ESP_SRCS}
${VOLC_ESP_DISPLAY_SRCS}
)
set(VOLC_LVGL_SOURCE_INCS "${CMAKE_CURRENT_LIST_DIR}/../platform/src/espressif/lvgl_source/")
set(VOLC_ASSETS_SOURCE_INCS "${CMAKE_CURRENT_LIST_DIR}/../../../main/")
set(VOLC_APP_INCS ${VOLC_FRAMEWORK_INCS}
${VOLC_PLATFORM_INCS}
${VOLC_SERVICE_INCS}
${VOLC_UTIL_INCS}
${VOLC_LVGL_SOURCE_INCS}
${VOLC_ASSETS_SOURCE_INCS}
)
idf_component_register(
SRCS ${VOLC_APP_SRCS}
INCLUDE_DIRS ${VOLC_APP_INCS}
REQUIRES volc_conv_ai
PRIV_REQUIRES lvgl button av_processor esp_board_manager hw_init esp_mmap_assets esp_emote_gfx esp_vocat_base_control
)
# Compiler flags
target_compile_options(${COMPONENT_LIB} PRIVATE
-w
-Os
-ffunction-sections
-fdata-sections
)
# Export the library for use by other components
set(VOLC_CONV_APP_LIBRARIES ${COMPONENT_LIB} PARENT_SCOPE)
set(VOLC_CONV_APP_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../framework/inc PARENT_SCOPE)
@@ -0,0 +1,6 @@
# Copyright (2025) Beijing Volcano Engine Technology Ltd.
# SPDX-License-Identifier: Apache License 2.0
set(FRAMEWORK_SRCS ${CMAKE_CURRENT_LIST_DIR}/src/aios.c)
set(FRAMEWORK_INC ${CMAKE_CURRENT_LIST_DIR}/inc)
@@ -0,0 +1,5 @@
# framework
## brief introduction
This directory is designed to facilitate communication between different business modules (functional modules). The main communication method is subscribing to (sub) and publishing (pub) events, and the externally provided interface files are located in the `inc` directory.
@@ -0,0 +1,5 @@
# framework
## 目录简介
本目录是为了方便不用业务模块(功能模块)相互间进行通信使用的,主要的方式是sub和pub event事件,对外提供的接口文件在inc。
@@ -0,0 +1,125 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef AIOS_H_
#define AIOS_H_
/* include ------------------------------------------------------------------ */
#include "aios_config.h"
#include "volc_list.h"
#include <unistd.h>
#ifdef __cplusplus
extern "C" {
#endif
/* default configuration ---------------------------------------------------- */
#ifndef AIOS_MAX_ACTORS
#define AIOS_MAX_ACTORS 8 // 默认最多8个Actor
#endif
#ifndef AIOS_USE_ASSERT
#define AIOS_USE_ASSERT 1 // 默认打开断言
#endif
#include "aios_def.h"
/* data struct -------------------------------------------------------------- */
// 状态返回值的定义
typedef enum aios_ret {
AIOS_Ret_Null = 0, // 无效值
AIOS_Ret_Handled, // 已处理,不产生跳转
AIOS_Ret_NotHandled, // 未处理,不产生跳转
AIOS_Ret_Tran, // 跳转
} aios_ret_t;
// 事件类
struct aios_event;
typedef void (*aios_event_free_handler)(const void *data);
typedef struct aios_event {
volc_list_head_t node;
uint32_t sub; // 订阅者
aios_event_id_t id; // 事件主题
void *data; // 事件数据
aios_event_free_handler free_handler; // 事件数据释放函数
} aios_event_t;
// 数据结构 - 行为树相关 --------------------------------------------------------
// 状态函数句柄的定义
struct aios_session;
typedef aios_ret_t (* aios_state_handler)(struct aios_session *const me, aios_event_t const * const e);
// 状态机类
typedef struct aios_session {
uint32_t priority : 5; // 优先级,0-31,数值越大优先级越高
uint32_t enabled : 1; // 是否使能
uint32_t reserve : 1; // 保留位
volatile aios_state_handler state;
} aios_session_t;
// api -------------------------------------------------------------------------
// 对框架进行初始化,在各状态机初始化之前调用。
void aios_init(int event_size);
// 启动框架,放在main函数的末尾。
void aios_run(void);
// 停止框架的运行(不常用)
// 停止框架后,框架会在执行完当前状态机的当前事件后,清空各状态机事件队列,清空事件池,
// 不再执行任何功能,直至框架被再次启动。
void aios_stop(void);
// 关于状态机 -----------------------------------------------
// 状态机初始化函数
void aios_session_init( aios_session_t * const me,
uint8_t priority,
void const * const parameter);
void aios_session_start(aios_session_t * const me, aios_state_handler state_init);
aios_ret_t aios_tran(aios_session_t * const me, aios_state_handler state);
#define AIOS_TRAN(target) aios_tran((aios_session_t * )me, (aios_state_handler)target)
#define AIOS_STATE_CAST(state) ((aios_state_handler)(state))
// 关于事件 -------------------------------------------------
// 事件订阅
void aios_event_sub(aios_session_t * const me, aios_event_id_t id);
// 事件取消订阅
void aios_event_unsub(aios_session_t * const me, aios_event_id_t id);
// 事件订阅宏定义
#define AIOS_EVENT_SUB(_evt) aios_event_sub(&(me->super), _evt)
// 事件取消订阅宏定义
#define AIOS_EVENT_UNSUB(_evt) aios_event_unsub(&(me->super), _evt)
// 发布事件(携带数据)
int aios_event_pub(aios_event_id_t id, void *data, aios_event_free_handler free_handler);
// 发布周期性或延时事件
void* aios_event_time_pub(aios_event_id_t id, uint32_t timeout_ms, uint32_t period_ms);
// 取消延时事件或者周期事件的发布
void aios_event_time_cancel(void** timer);
/* port --------------------------------------------------------------------- */
// void* aios_malloc(uint32_t size);
// void aios_free(void* ptr);
// void* aios_mutex_create(void);
// void aios_mutex_lock(void* mutex);
// void aios_mutex_unlock(void* mutex);
// void aios_mutex_destroy(void** mutex);
void aios_port_assert(uint32_t error_id);
/* hook --------------------------------------------------------------------- */
// 结束AIOS Nano的运行的时候,所调用的回调函数。
void aios_hook_stop(void);
// 启动AIOS Nano的时候,所调用的回调函数
void aios_hook_start(void);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,15 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef AIOS_CONFIG_H__
#define AIOS_CONFIG_H__
/* AIOS General Configuration --------------------------------------- */
#define AIOS_MCU_TYPE 32
#define AIOS_MAX_ACTORS 4
#define AIOS_TEST_PLATFORM 64
#define AIOS_USE_MAGIC 0
/* Assert Configuration ----------------------------------------------------- */
#define AIOS_USE_ASSERT 1
#endif
@@ -0,0 +1,21 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef AIOS_DEF_H__
#define AIOS_DEF_H__
#include "aios_config.h"
#define AIOS_MAX_SLEEP_MS (1000 * 10)
typedef enum aios_event_id {
// 系统事件
Event_Null = 0,
Event_Enter,
Event_Exit,
// 用户事件
Event_User,
} aios_event_id_t;
#endif
@@ -0,0 +1,255 @@
/* Copyright (c) 2013, Ben Noordhuis <info@bnoordhuis.nl>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef UV_SRC_HEAP_H_
#define UV_SRC_HEAP_H_
#include <stddef.h> /* NULL */
#if defined(__GNUC__)
# define HEAP_EXPORT(declaration) __attribute__((unused)) static declaration
#else
# define HEAP_EXPORT(declaration) static declaration
#endif
struct heap_node {
struct heap_node* left;
struct heap_node* right;
struct heap_node* parent;
};
/* A binary min heap. The usual properties hold: the root is the lowest
* element in the set, the height of the tree is at most log2(nodes) and
* it's always a complete binary tree.
*
* The heap function try hard to detect corrupted tree nodes at the cost
* of a minor reduction in performance. Compile with -DNDEBUG to disable.
*/
struct heap {
struct heap_node* min;
unsigned int nelts;
};
/* Return non-zero if a < b. */
typedef int (*heap_compare_fn)(const struct heap_node* a,
const struct heap_node* b);
/* Public functions. */
HEAP_EXPORT(void heap_init(struct heap* heap));
HEAP_EXPORT(struct heap_node* heap_min(const struct heap* heap));
HEAP_EXPORT(void heap_insert(struct heap* heap,
struct heap_node* newnode,
heap_compare_fn less_than));
HEAP_EXPORT(void heap_remove(struct heap* heap,
struct heap_node* node,
heap_compare_fn less_than));
HEAP_EXPORT(void heap_dequeue(struct heap* heap, heap_compare_fn less_than));
/* Implementation follows. */
HEAP_EXPORT(void heap_init(struct heap* heap)) {
heap->min = NULL;
heap->nelts = 0;
}
HEAP_EXPORT(void heap_node_init(struct heap_node* hnode)) {
hnode->left = 0;
hnode->parent = 0;
hnode->right = 0;
}
HEAP_EXPORT(int heap_node_is_empty(struct heap_node* hnode)) {
return (hnode->left == 0 && hnode->parent == 0 && hnode->right == 0);
}
HEAP_EXPORT(struct heap_node* heap_min(const struct heap* heap)) {
return heap->min;
}
/* Swap parent with child. Child moves closer to the root, parent moves away. */
static void heap_node_swap(struct heap* heap,
struct heap_node* parent,
struct heap_node* child) {
struct heap_node* sibling;
struct heap_node t;
t = *parent;
*parent = *child;
*child = t;
parent->parent = child;
if (child->left == child) {
child->left = parent;
sibling = child->right;
} else {
child->right = parent;
sibling = child->left;
}
if (sibling != NULL)
sibling->parent = child;
if (parent->left != NULL)
parent->left->parent = parent;
if (parent->right != NULL)
parent->right->parent = parent;
if (child->parent == NULL)
heap->min = child;
else if (child->parent->left == parent)
child->parent->left = child;
else
child->parent->right = child;
}
HEAP_EXPORT(void heap_insert(struct heap* heap,
struct heap_node* newnode,
heap_compare_fn less_than)) {
struct heap_node** parent;
struct heap_node** child;
unsigned int path;
unsigned int n;
unsigned int k;
newnode->left = NULL;
newnode->right = NULL;
newnode->parent = NULL;
/* Calculate the path from the root to the insertion point. This is a min
* heap so we always insert at the left-most free node of the bottom row.
*/
path = 0;
for (k = 0, n = 1 + heap->nelts; n >= 2; k += 1, n /= 2)
path = (path << 1) | (n & 1);
/* Now traverse the heap using the path we calculated in the previous step. */
parent = child = &heap->min;
while (k > 0) {
parent = child;
if (path & 1)
child = &(*child)->right;
else
child = &(*child)->left;
path >>= 1;
k -= 1;
}
/* Insert the new node. */
newnode->parent = *parent;
*child = newnode;
heap->nelts += 1;
/* Walk up the tree and check at each node if the heap property holds.
* It's a min heap so parent < child must be true.
*/
while (newnode->parent != NULL && less_than(newnode, newnode->parent))
heap_node_swap(heap, newnode->parent, newnode);
}
HEAP_EXPORT(void heap_remove(struct heap* heap,
struct heap_node* node,
heap_compare_fn less_than)) {
struct heap_node* smallest;
struct heap_node** max;
struct heap_node* child;
unsigned int path;
unsigned int k;
unsigned int n;
if (heap->nelts == 0)
return;
/* Calculate the path from the min (the root) to the max, the left-most node
* of the bottom row.
*/
path = 0;
for (k = 0, n = heap->nelts; n >= 2; k += 1, n /= 2)
path = (path << 1) | (n & 1);
/* Now traverse the heap using the path we calculated in the previous step. */
max = &heap->min;
while (k > 0) {
if (path & 1)
max = &(*max)->right;
else
max = &(*max)->left;
path >>= 1;
k -= 1;
}
heap->nelts -= 1;
/* Unlink the max node. */
child = *max;
*max = NULL;
if (child == node) {
/* We're removing either the max or the last node in the tree. */
if (child == heap->min) {
heap->min = NULL;
}
return;
}
/* Replace the to be deleted node with the max node. */
child->left = node->left;
child->right = node->right;
child->parent = node->parent;
if (child->left != NULL) {
child->left->parent = child;
}
if (child->right != NULL) {
child->right->parent = child;
}
if (node->parent == NULL) {
heap->min = child;
} else if (node->parent->left == node) {
node->parent->left = child;
} else {
node->parent->right = child;
}
/* Walk down the subtree and check at each node if the heap property holds.
* It's a min heap so parent < child must be true. If the parent is bigger,
* swap it with the smallest child.
*/
for (;;) {
smallest = child;
if (child->left != NULL && less_than(child->left, smallest))
smallest = child->left;
if (child->right != NULL && less_than(child->right, smallest))
smallest = child->right;
if (smallest == child)
break;
heap_node_swap(heap, child, smallest);
}
/* Walk up the subtree and check that each parent is less than the node
* this is required, because `max` node is not guaranteed to be the
* actual maximum in tree
*/
while (child->parent != NULL && less_than(child, child->parent))
heap_node_swap(heap, child->parent, child);
}
HEAP_EXPORT(void heap_dequeue(struct heap* heap, heap_compare_fn less_than)) {
heap_remove(heap, heap->min, less_than);
}
#undef HEAP_EXPORT
#endif /* UV_SRC_HEAP_H_ */
@@ -0,0 +1,79 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __CONV_AI_SRC_UTIL_VOLC_LIST_H__
#define __CONV_AI_SRC_UTIL_VOLC_LIST_H__
// #include <stdio.h>
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct volc_list_head_t
{
struct volc_list_head_t *next, *prev;
} volc_list_head_t;
#define __LIST_ADD(entry, before, after) \
{ \
volc_list_head_t *new_ = (entry), *prev = (before), *next = (after); \
(next)->prev = (new_); \
(new_)->next = (next); \
(new_)->prev = (prev); \
(prev)->next = (new_); \
}
#define volc_list_init(entry) \
do \
{ \
(entry)->next = (entry); \
(entry)->prev = (entry); \
} while (0)
#define volc_list_add(entry, base) \
do \
{ \
__LIST_ADD((entry), (base), (base)->next); \
} while (0)
#define volc_list_add_after(entry, base) \
do \
{ \
__LIST_ADD((entry), (base), (base)->next); \
} while (0)
#define volc_list_add_before(entry, base) \
do \
{ \
__LIST_ADD((entry), (base)->prev, (base)); \
} while (0)
#define volc_list_add_head(entry, head) volc_list_add_after(entry, head)
#define volc_list_add_tail(entry, head) volc_list_add_before(entry, head)
#define volc_list_del(entry) \
do \
{ \
(entry)->prev->next = (entry)->next; \
(entry)->next->prev = (entry)->prev; \
(entry)->next = (entry)->prev = (entry); \
} while (0)
#define volc_list_empty(head) ((head)->next == (head))
#define volc_list_get_head(head) (volc_list_empty(head) ? (volc_list_head_t *)NULL : (head)->next)
#define volc_list_get_tail(head) (volc_list_empty(head) ? (volc_list_head_t *)NULL : (head)->prev)
#define volc_list_is_head(entry, head) ((entry)->prev == head)
#define volc_list_is_tail(entry, head) ((entry)->next == head)
#define volc_list_entry(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))
#define volc_list_for_each(h, head) for (h = (head)->next; h != (head); h = h->next)
#define volc_list_for_each_safe(h, n, head) for (h = (head)->next, n = h->next; h != (head); h = n, n = h->next)
#define volc_list_for_each_entry(p, head, type, member) \
for (p = volc_list_entry((head)->next, type, member); &p->member != (head); \
p = volc_list_entry(p->member.next, type, member))
#define volc_list_for_each_entry_safe(p, t, head, type, member) \
for (p = volc_list_entry((head)->next, type, member), t = volc_list_entry(p->member.next, type, member); \
&p->member != (head); p = t, t = volc_list_entry(t->member.next, type, member))
#define volc_list_get_head_entry(head, type, member) \
(volc_list_empty(head) ? (type *)NULL : volc_list_entry(((head)->next), type, member))
#define volc_list_get_tail_entry(head, type, member) \
(volc_list_empty(head) ? (type *)NULL : volc_list_entry(((head)->prev), type, member))
#ifdef __cplusplus
}
#endif
#endif /* #define __CONV_AI_SRC_UTIL_VOLC_LIST_H__ */
@@ -0,0 +1,646 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
// include ---------------------------------------------------------------------
#include "../inc/aios.h"
#include <string.h>
#include <stdbool.h>
#include "heap-inl.h"
//socket
#include <sys/socket.h>
#include <fcntl.h>
#include <unistd.h>
#include <netinet/in.h>
// time
#include <sys/time.h>
#include "volc_osal.h"
#ifdef __cplusplus
extern "C" {
#endif
/* assert ------------------------------------------------------------------- */
#if (AIOS_USE_ASSERT != 0)
#define AIOS_ASSERT(test_) do { if (!(test_)) { \
aios_hook_stop(); \
aios_port_assert(__LINE__); \
} } while (0)
#else
#define AIOS_ASSERT(test_) ((void)0)
#endif
// aios define ------------------------------------------------------------------
// **aios** ---------------------------------------------------------------------
enum {
EosRun_OK = 0,
EosRun_NotEnabled,
EosRun_NoEvent,
EosRun_NoActor,
EosRun_NoActorSub,
// Timer
EosTimer_Empty,
EosTimer_NotTimeout,
EosTimer_ChangeToEmpty,
EosRunErr_NotInitEnd = -1,
EosRunErr_ActorNotSub = -2,
EosRunErr_MallocFail = -3,
EosRunErr_SubTableNull = -4,
EosRunErr_InvalidEventData = -5,
EosRunErr_HeapMemoryNotEnough = -6,
EosRunErr_TimerRepeated = -7,
};
typedef struct timer_item {
struct heap_node node;
aios_event_id_t id;
int64_t timeout_ms;
uint32_t period_ms;
} aios_timer_t;
typedef struct aios_tag {
uint32_t *sub_table; // event sub table
uint32_t session_exist;
uint32_t session_enabled;
aios_session_t * sessions[AIOS_MAX_ACTORS];
uint32_t sub_general;
void* event_mutex;
volc_list_head_t event_list;
uint32_t time;
void* timer_mutex;
struct heap timer_heap;
int fd[2];
uint8_t enabled : 1;
uint8_t running : 1;
uint8_t init_end : 1;
uint8_t reserved : 5;
} aios_t;
static aios_t aios;
// data ------------------------------------------------------------------------
static const aios_event_t aios_event_table[Event_User] = {
{{ 0 }, 0, Event_Null, 0, NULL},
{{ 0 }, 0, Event_Enter, 0, NULL},
{{ 0 }, 0, Event_Exit, 0, NULL},
};
// macro -----------------------------------------------------------------------
#define HSM_TRIG_(state_, topic_) \
((*(state_))(me, &aios_event_table[topic_]))
// static function -------------------------------------------------------------
static void aios_session_dispath(aios_session_t * const me, aios_event_t const * const e);
#ifndef VOLC_OFFSET
#define VOLC_OFFSET(type, member) ((size_t) &((type *)0)->member)
#endif
#ifndef VOLC_CONTAINER_OF
#define VOLC_CONTAINER_OF(ptr, type, member) \
((type *)((char *)(ptr) - VOLC_OFFSET(type, member)))
#endif
static int __heap_node_less(const struct heap_node* a, const struct heap_node* b) {
aios_timer_t* item_a = VOLC_CONTAINER_OF(a, aios_timer_t, node);
aios_timer_t* item_b = VOLC_CONTAINER_OF(b, aios_timer_t, node);
if (item_a->timeout_ms < item_b->timeout_ms) {
return 1;
}
if (item_a->timeout_ms > item_b->timeout_ms) {
return 0;
}
return item_a->id > item_b->id;
}
static int __set_block_mode(int sockfd, int block) {
int flags = fcntl(sockfd, F_GETFL);
if (flags < 0) {
return -1;
}
if (block) {
if ((flags & O_NONBLOCK) != 0) {
flags ^= O_NONBLOCK;
}
} else {
flags |= O_NONBLOCK;
}
if (fcntl(sockfd, F_SETFL, flags) < 0) {
return -1;
}
return 0;
}
static int __pipe(int fds[2]) {
int ret = 0;
fds[0] = -1;
fds[1] = -1;
int err = 0,opt = 0,write_fd = -1,read_fd = -1;
read_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (read_fd < 0) {
ret = -1;
goto err_out_label;
}
struct sockaddr_in servaddr;
uint32_t addr_len = sizeof(servaddr);
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
servaddr.sin_port = 0;
if (bind(read_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) {
ret = -1;
goto err_out_label;
}
// get port bind by system
if (getsockname(read_fd, (struct sockaddr*)&servaddr, &addr_len) < 0) {
ret = -1;
goto err_out_label;
}
if(servaddr.sin_addr.s_addr == htonl(INADDR_ANY))
servaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
write_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
int conn_ret = connect(write_fd, (struct sockaddr*)&servaddr, addr_len);
__set_block_mode(write_fd, 0);
__set_block_mode(read_fd, 0);
fds[0] = read_fd;
fds[1] = write_fd;
err_out_label:
if(ret < 0) {
if (read_fd > 0) {
close(read_fd);
}
if (write_fd > 0) {
close(write_fd);
}
}
return ret;
}
static int __interruptable_init(void) {
if (__pipe(aios.fd) < 0) {
return -1;
}
return 0;
}
static int __interruptable_deinit(void) {
close(aios.fd[0]);
close(aios.fd[1]);
return 0;
}
static int __interruptable_sleep(int64_t sleep_ms) {
int ret = 0;
char buf[64] = { 0 };
fd_set readfds = { 0 };
struct timeval tv = { 0 };
if (sleep_ms < 0) {
sleep_ms = AIOS_MAX_SLEEP_MS;
}
tv.tv_sec = sleep_ms / 1000;
tv.tv_usec = (sleep_ms % 1000) * 1000;
FD_ZERO(&readfds);
FD_SET(aios.fd[0], &readfds);
ret = select(aios.fd[0] + 1, &readfds, NULL, NULL, &tv);
if (ret < 0) {
return -1;
}
if (FD_ISSET(aios.fd[0], &readfds)) {
if ((ret = read(aios.fd[0], buf, sizeof(buf))) < 0) {
return -1;
}
}
return 0;
}
static int __interruptable_break(void) {
char c[1] = { 0x5A};
return (write(aios.fd[1], c, sizeof(c)) ? 0 : -1);
}
static int64_t aios_get_time(void)
{
struct timeval time_crt;
gettimeofday(&time_crt, (void *)0);
int64_t time_crt_ms = time_crt.tv_sec * 1000 + time_crt.tv_usec / 1000;
return time_crt_ms;
}
void aios_init(int event_size)
{
aios.enabled = true;
aios.running = false;
aios.session_exist = 0;
aios.session_enabled = 0;
aios.sub_table = NULL;
heap_init(&aios.timer_heap);
if (__interruptable_init() < 0) {
printf("aios_init: __interruptable_init fail\n");
return;
}
aios.sub_general = 0;
volc_list_init(&aios.event_list);
aios.event_mutex = volc_osal_mutex_create();
if (NULL == aios.event_mutex) {
printf("aios_init: event_mutex create fail\n");
return;
}
// printf("event: %p\n", aios.event_mutex);
aios.init_end = 1;
aios.time = 0;
aios.timer_mutex = volc_osal_mutex_create();
if (NULL == aios.timer_mutex) {
printf("aios_init: timer_mutex create fail\n");
return;
}
// printf("timer: %p\n", aios.timer_mutex);
aios.sub_table = (uint32_t *)volc_osal_malloc(sizeof(uint32_t) * event_size);
if (NULL == aios.sub_table) {
printf("aios_init: sub_table create fail\n");
return;
}
}
void aios_deinit(void)
{
volc_osal_mutex_destroy(&aios.event_mutex);
volc_osal_mutex_destroy(&aios.timer_mutex);
__interruptable_deinit();
}
void aios_sub_init(uint32_t *flag_sub, aios_event_id_t topic_max)
{
aios.sub_table = flag_sub;
for (int i = 0; i < topic_max; i ++) {
aios.sub_table[i] = 0;
}
}
int64_t aios_evttimer(void)
{
int64_t system_time = aios_get_time();
volc_osal_mutex_lock(aios.timer_mutex);
if (aios.timer_heap.nelts == 0) {
volc_osal_mutex_unlock(aios.timer_mutex);
return -1;
}
aios_timer_t* item = VOLC_CONTAINER_OF(heap_min(&aios.timer_heap), aios_timer_t, node);
if (item->timeout_ms > system_time) {
volc_osal_mutex_unlock(aios.timer_mutex);
return item->timeout_ms - system_time;
}
while (item->timeout_ms <= system_time) {
heap_remove(&aios.timer_heap, &item->node, __heap_node_less);
aios_event_pub(item->id, NULL, NULL);
if (item->period_ms == 0) {
continue;
}
item->timeout_ms += item->period_ms;
heap_insert(&aios.timer_heap, &item->node, __heap_node_less);
item = VOLC_CONTAINER_OF(heap_min(&aios.timer_heap), aios_timer_t, node);
}
volc_osal_mutex_unlock(aios.timer_mutex);
return 0;
}
void *aios_event_get_block(uint8_t priority);
void aios_event_gc(void *data);
int aios_once(void)
{
int64_t timeout_ms = -1;
if (aios.init_end == 0) {
return (int)EosRunErr_NotInitEnd;
}
if (aios.sub_table == NULL) {
return (int)EosRunErr_SubTableNull;
}
if (aios.enabled == false) {
return (int)EosRun_NotEnabled;
}
// 检查是否有状态机的注册
if (aios.session_exist == 0 || aios.session_enabled == 0) {
return (int)EosRun_NoActor;
}
timeout_ms = aios_evttimer();
if (volc_list_empty(&aios.event_list)) {
__interruptable_sleep(timeout_ms);
return (int)EosRun_NoEvent;
}
// 寻找到优先级最高,且有事件需要处理的Actor
aios_session_t *session = NULL;
uint8_t priority = AIOS_MAX_ACTORS;
for (int i = (int)(AIOS_MAX_ACTORS - 1); i >= 0; i --) {
if ((aios.session_exist & (1 << i)) == 0)
continue;
if ((aios.sub_general & (1 << i)) == 0)
continue;
session = aios.sessions[i];
priority = i;
break;
}
// 如果没有找到,返回
if (priority == AIOS_MAX_ACTORS) {
__interruptable_sleep(AIOS_MAX_SLEEP_MS);
return (int)EosRun_NoActorSub;
}
// 寻找当前Actor的最老的事件
volc_osal_mutex_lock(aios.event_mutex);
aios_event_t * e = aios_event_get_block(priority);
AIOS_ASSERT(e != NULL);
volc_osal_mutex_unlock(aios.event_mutex);
// 对事件进行执行
if ((aios.sub_table[e->id] & (1 << session->priority)) != 0)
{
// 执行状态的转换
aios_session_dispath(session, e);
}
else {
__interruptable_sleep(AIOS_MAX_SLEEP_MS);
return (int)EosRunErr_ActorNotSub;
}
// 销毁过期事件与其携带的参数
volc_osal_mutex_lock(aios.event_mutex);
aios_event_gc(e);
volc_osal_mutex_unlock(aios.event_mutex);
volc_osal_mutex_lock(aios.timer_mutex);
if (aios.timer_heap.nelts == 0) {
volc_osal_mutex_unlock(aios.timer_mutex);
// __interruptable_sleep(AIOS_MAX_SLEEP_MS);
} else {
aios_timer_t* item = VOLC_CONTAINER_OF(heap_min(&aios.timer_heap), aios_timer_t, node);
volc_osal_mutex_unlock(aios.timer_mutex);
int sleep_ms = item->timeout_ms - aios_get_time();
__interruptable_sleep(sleep_ms);
}
return (int)EosRun_OK;
}
void aios_run(void)
{
aios_hook_start();
AIOS_ASSERT(aios.enabled == true);
AIOS_ASSERT(aios.sub_table != 0);
aios.running = true;
while (aios.enabled) {
int ret = aios_once();
AIOS_ASSERT(ret >= 0);
if (ret == EosRun_NotEnabled) {
break;
}
}
}
void aios_hook_start(void)
{
}
void aios_hook_stop(void)
{
}
void aios_port_assert(uint32_t error_id)
{
printf("------------------------------------\n");
printf("ASSERT >>> Module: EventOS Nano, ErrorId: %d.\n", (int)error_id);
printf("------------------------------------\n");
while (1) {
usleep(100000);
}
}
void aios_stop(void)
{
aios.enabled = false;
// TODO: release resource
aios_hook_stop();
}
// state machine ---------------------------------------------------------------
void aios_session_init( aios_session_t * const me,
uint8_t priority,
void const * const parameter)
{
// 框架需要先启动起来
AIOS_ASSERT(aios.enabled == true);
AIOS_ASSERT(aios.running == false);
AIOS_ASSERT(aios.sub_table != NULL);
// 参数检查
AIOS_ASSERT(me != (aios_session_t *)0);
AIOS_ASSERT(priority < AIOS_MAX_ACTORS);
// 防止二次启动
if (me->enabled == true)
return;
// 检查优先级的重复注册
AIOS_ASSERT((aios.session_exist & (1 << priority)) == 0);
// 注册到框架里
aios.session_exist |= (1 << priority);
aios.sessions[priority] = me;
// 状态机
me->priority = priority;
me->state = NULL;
}
void aios_session_start(aios_session_t * const me, aios_state_handler state_init)
{
aios_state_handler t;
me->state = state_init;
me->enabled = true;
aios.session_enabled |= (1 << me->priority);
// 进入初始状态,执行TRAN动作。这也意味着,进入初始状态,必须无条件执行Tran动作。
t = me->state;
aios_ret_t ret = t(me, &aios_event_table[Event_Null]);
AIOS_ASSERT(ret == AIOS_Ret_Tran);
ret = me->state(me, &aios_event_table[Event_Enter]);
AIOS_ASSERT(ret != AIOS_Ret_Tran);
}
// event -----------------------------------------------------------------------
int aios_event_pub(aios_event_id_t id, void *data, aios_event_free_handler free_handler)
{
if (aios.init_end == 0) {
return EosRunErr_NotInitEnd;
}
if (aios.sub_table == NULL) {
return EosRunErr_SubTableNull;
}
// 保证框架已经运行
if (aios.enabled == 0) {
return EosRun_NotEnabled;
}
if (aios.session_exist == 0) {
return EosRun_NoActor;
}
// 没有状态机使能,返回
if (aios.session_enabled == 0) {
return EosRun_NotEnabled;
}
// 没有状态机订阅,返回
if (aios.sub_table[id] == 0) {
return EosRun_NoActorSub;
}
// 申请事件空间
aios_event_t *e = (aios_event_t *)volc_osal_malloc(sizeof(aios_event_t));
if (e == NULL) {
return EosRunErr_MallocFail;
}
e->id = id;
e->sub = aios.sub_table[e->id];
aios.sub_general |= e->sub;
e->data = data;
e->free_handler = free_handler;
volc_osal_mutex_lock(aios.event_mutex);
volc_list_add_tail(&e->node, &aios.event_list);
volc_osal_mutex_unlock(aios.event_mutex);
__interruptable_break();
return EosRun_OK;
}
void aios_event_sub(aios_session_t * const me, aios_event_id_t id)
{
aios.sub_table[id] |= (1 << me->priority);
}
void aios_event_unsub(aios_session_t * const me, aios_event_id_t id)
{
aios.sub_table[id] &= ~(1 << me->priority);
}
void* aios_event_time_pub(aios_event_id_t id, uint32_t time_ms, uint32_t period_ms)
{
aios_timer_t* item = (aios_timer_t *)volc_osal_malloc(sizeof(aios_timer_t));
AIOS_ASSERT(item != NULL);
memset(item, 0, sizeof(aios_timer_t));
item->id = id;
item->timeout_ms = aios_get_time() + time_ms;
item->period_ms = period_ms;
volc_osal_mutex_lock(aios.timer_mutex);
heap_insert(&aios.timer_heap, &item->node, __heap_node_less);
volc_osal_mutex_unlock(aios.timer_mutex);
return (void *)item;
}
void aios_event_time_cancel(void** timer)
{
if (timer == NULL || NULL == *timer) {
return;
}
aios_timer_t* item = (aios_timer_t *)*timer;
volc_osal_mutex_lock(aios.timer_mutex);
heap_remove(&aios.timer_heap, &item->node, __heap_node_less);
volc_osal_mutex_unlock(aios.timer_mutex);
volc_osal_free(item);
*timer = NULL;
}
// state tran ------------------------------------------------------------------
aios_ret_t aios_tran(aios_session_t * const me, aios_state_handler state)
{
me->state = state;
return AIOS_Ret_Tran;
}
// static function -------------------------------------------------------------
static void aios_session_dispath(aios_session_t * const me, aios_event_t const * const e)
{
aios_ret_t r;
AIOS_ASSERT(e != (aios_event_t *)0);
aios_state_handler s = me->state;
aios_state_handler t;
r = s(me, e);
if (r == AIOS_Ret_Tran) {
t = me->state;
r = s(me, &aios_event_table[Event_Exit]);
AIOS_ASSERT(r == AIOS_Ret_Handled || r == AIOS_Ret_NotHandled);
r = t(me, &aios_event_table[Event_Enter]);
AIOS_ASSERT(r == AIOS_Ret_Handled || r == AIOS_Ret_NotHandled);
me->state = t;
}
else {
me->state = s;
}
}
/* heap library ------------------------------------------------------------- */
void aios_event_gc(void *data)
{
aios_event_t * e = (aios_event_t *)data;
if (e->sub == 0) {
volc_list_del(&e->node);
if (e->free_handler != NULL) {
e->free_handler(e->data);
}
volc_osal_free(e);
}
aios.sub_general = 0;
volc_list_for_each_entry(e, &aios.event_list, aios_event_t, node) {
aios.sub_general |= e->sub;
}
}
void *aios_event_get_block(uint8_t priority)
{
aios_event_t * e = NULL;
volc_list_for_each_entry(e, &aios.event_list, aios_event_t, node) {
if ((e->sub & (1 << priority)) == 0) {
continue;
}
e->sub &=~ (1 << priority);
break;
}
return (void *)e;
}
#ifdef __cplusplus
}
#endif
@@ -0,0 +1,49 @@
# Platform
## brief introduction
This directory serves as the software abstraction layer for the Hardware Conversational AI Agent Development Kit, built around the business characteristic of AI conversation. Its purpose is to shield hardware details, enabling users to focus on software development and business implementation.
Among this directory:
- inc: Contains header files
- src: Contains specific implementations for different hardware platforms
## principles
As a Hardware Abstraction Layer (HAL), we typically expect capabilities to be atomized, interfaces to be orthogonal, and high flexibility to be maintained. However, excessive pursuit of atomization and flexibility often reduces interface usability and impairs business development efficiency. These two aspects are often mutually exclusive. // Nevertheless, this development platform focuses on AI conversation scenarios; therefore, given the relatively fixed business scenarios, we can make trade-offs with greater engineering practical value. // Our core design principles are as follows:
1. Orthogonal interfaces to reduce coupling and shield hardware details.
2. Interface design takes certain business characteristics into account:
some implementations and configuration parameters are implicitly implemented according to business requirements,and not all software configurable items are retained.This prevents upper-layer business development from being bogged down in endless detailed configuration and parameter tuning. For example: we enable the Acoustic Echo Cancellation (AEC) module by default for audio capture,instead of requiring upper-layer business to configure aec_enabled in the config file;thus, many interface designs at this layer do not make complete sense.For detailed explanations and trade-offs, refer to the implementation details.Interface design takes certain business characteristics into account: ails.
## implementation
### volc_hal
volc_hal_init() Do the necessary actions after the hardware is powered on, it is not necessary to initialize all the hardware modules, but it is necessary to set the device name.
volc_get_global_hal_context() ithis function could help you get the hal context everywhere. Do not Modify the return value
### volc_hal_player
We do not specify specific media configurations (e.g., encoding format, sampling rate, or resolution).This is because we expect all the aforementioned parameters to be uniquely determined and immutable across all scenarios.Therefore, these values must be fixed at compile time; if your device supports multiple parameters,macros should be used to select the desired ones at compile time.This design adheres to Principle 2.
for volc_hal_player_play_data(),We have not specified whether this function is sync or async. However, it is strongly recommended to implement this function as non-blocking with a certain internal buffer, ensuring that the caller of the function does not need to overly consider the function's call frequency. For example, the function can be called every 1 second to play 1.2 seconds of audio or video data.
### volc_hal_capture
We do not specify specific media configurations (e.g., encoding format, sampling rate, or resolution).This is because we expect all the aforementioned parameters to be uniquely determined and immutable across all scenarios.Therefore, these values must be fixed at compile time; if your device supports multiple parameters,macros should be used to select the desired ones at compile time.This design adheres to Principle 2.
To ensure a uniform rate for media capture data, we adopt the callback function approach: frame-by-frame audio and video data is delivered asynchronously via callbacks, instead of providing an active capture interface. Therefore, during the function implementation, a capture thread needs to be created to asynchronously callback the data out.
We consider both voice wake-up and voice data capture to fall under the category of audio capture, differing only in mode (internal pipeline). For this reason, we do not redesign a separate module for voice wake-up; instead, we add an additional mode specifically for voice wake-up.
Finally, note that acoustic echo cancellation (AEC) must be implemented for audio capture.
### volc_hal_display
Typically, a set of screen display interfaces allows upper-layer callers to independently create and destroy regions for display purposes.However, to minimize the development effort of upper-layer business logic,we do not allow the business side to create and manage different screen regions on their own.Instead, different screen regions are divided and created during the execution of volc_hal_display_create().The business layer can only obtain different render layer objects,pass data to them, and perform rendering operations. For example, we divide the screen into a status bar(VOLC_DISPLAY_OBJ_STATUS), main screen(VOLC_DISPLAY_OBJ_MAIN), and subtitle display bar(VOLC_DISPLAY_OBJ_SUBTITLE).You may define your own divisions, as all these codes are open-source and modifiable.
### volc_hal_file
File systems may have different implementations on different devices,but we generally adhere to the ANSI C style.For devices without a file system, these interfaces may be left unimplemented as this is not mandatory.
@@ -0,0 +1,45 @@
# Platform
## 目录简介
本目录是硬件对话智能体开发套件基于ai对话这一业务特性,进行的软件抽象层,目的是屏蔽硬件细节,使用户专注软件开发与业务实现。其中inc是header,src是不同硬件平台的具体实现。
## 设计原则
作为硬件抽象层往往期待,能力原子化,接口正交,且保持高度的灵活性。但是过分追求原子化和灵活性,往往会降低接口易用性,降低业务开发的效率。这两者往往不可兼得。不过本开发平台专注于ai对话场景,因此在业务场景相对固定的情况下,还是能做成一些更有工程实践价值的trade off的。我们设计的基本原则如下:
1 接口正交,减少耦合且屏蔽硬件细节
2 接口设计考虑一定的业务特点,某些实现和配置参数会按照业务要求隐式实现,不会保留所有的软件可配置项,避免上层业务开发陷入无穷无尽的细节配置和调参上。这里举一个例子: 我们默认音频采集都会打开回声消除(aec)模块,而不是让上层业务去config里配置 aec_enabled;因此,这一层不少的接口设计并不百分百的make sense,详细的说明和取舍见实现细节。
## 部分实现思路
### volc_hal
volc_hal_init() 只实现硬件上电后必要的初始化动作,例如设置gpid,联网等;音视频采播等模块可以在其他子模块中init
volc_get_global_hal_context() 方便拿到全局唯一的硬件context,但不要修改该返回值
### volc_hal_player
请注意该模块的接口设计上,我们没有给定一些具体的媒体配置,例如编码格式,采样率或者分辨率;这是因为我们期待上述的所有参数在全场景都是唯一确定且不能改变的。所以这些值需要在编译时就确定好,如果你的设备支持多种参数,那么也应该在编译时用宏做以选择。这一设计遵循原则2;
对于volc_hal_player_play_data()接口,我们并未规定该函数是同步的还是异步的,但是还是强烈建议你讲该函数实现为非阻塞的,且内部有一定缓存,确保函数的调用者不用过分考虑函数的调用频次;例如,可以1s中调用该函数play 1.2s的audio或video数据
### volc_hal_capture
请注意该模块的接口设计上,我们没有给定一些具体的媒体配置,例如编码格式,采样率或者分辨率;这是因为我们期待上述的所有参数在全场景都是唯一确定且不能改变的。所以这些值需要在编译时就确定好,如果你的设备支持多种参数,那么也应该在编译时用宏做以选择。这一设计遵循原则2;
为了确保媒体采集数据的速率均匀,我们采取回调函数的方式,异步的回调出一帧一帧的音视频数据,而非主动给一个capture接口。所以需要在函数实现的过程中,创建一个采集线程,异步的将数据回调出来。
请注意,我们认为语音唤醒和语音数据采集都属于音频采集的范畴,只是模式(内部pipeline)不同,所以我们并未重新设计一套语音唤醒的模块,而是多设计了一个语音唤醒的mode
最后,需要注意,音频的采集需要做aec和ns等模块,这一设计遵循原则2;
### volc_hal_display
通常情况下一套屏幕显示的接口,会允许上层调用者自行创建和销毁一块用于显示的区域;但是根据原则2,为了最简化上层业务的开发,我们不允许业务侧去自行创建和管理屏幕的不同区域;而是在volc\_hal\_display\_create就将不同的屏幕区域划分且创建好。然后业务层只能拿到不同的渲染层obj,传递数据并进行渲染。例如,我们将屏幕分为状态栏、主屏幕和字幕显示栏。你也可以有自己的划分,因为这些代码都是开源可修改的
### volc_hal_file
不同的设备上文件系统可能有不同的实现,但是我们总体上遵循ANSI C style。对于没有文件系统的设备,这些接口可以不做实现,这并不是必须的
@@ -0,0 +1,92 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_H__
#define __VOLC_HAL_H__
#include "volc_hal_button.h"
#include "volc_hal_capture.h"
#include "volc_hal_display.h"
#include "volc_hal_player.h"
#ifdef __cplusplus
extern "C" {
#endif
#define VOLC_DEVICE_NAME_LENGTH 32
typedef enum {
VOLC_HAL_CAPTURE_AUDIO = 0, // audio capture
VOLC_HAL_CAPTURE_VIDEO, // video capture
VOLC_HAL_CAPTURE_MAX, // Maximum capture count
} volc_hal_capture_e;
typedef enum {
VOLC_HAL_PLAYER_AUDIO = 0, // audio player
VOLC_HAL_PLAYER_VIDEO, // video player
VOLC_HAL_PLAYER_MAX, // Maximum player count
} volc_hal_player_e;
/**
* @brief All hardware resources handle and context
* @details generally,this structure should be singleton
* you can get the Instance by volc_get_global_hal_context()
* And, you just set the value when the hardware submodule be inited
* the function volc_hal_init() just do some necessary initialization actions
* such as, malloc the volc_hal_context_t mem and set the device_name
*/
typedef struct {
/**
* @brief the button handle pointer
* @details It should be set value when the volc_hal_button_create() is called
*/
volc_hal_button_t button_handle;
/**
* @brief the capture pointer array, include audio_capture and video_capture
* @details It should be set value when the volc_hal_capture_create() is called
*/
volc_hal_capture_t capture_handle[VOLC_HAL_CAPTURE_MAX];
/**
* @brief the display pointer
* @details It should be set value when the volc_hal_display_create() is called
*/
volc_hal_display_t display_handle;
/**
* @brief the player pointer array, include audio_player and video_player
* @details It should be set value when the volc_hal_player_create() is called
*/
volc_hal_player_t player_handle[VOLC_HAL_PLAYER_MAX];
/**
* @brief the device name, in most cases, it is a mac address
* @details It should be set a value when the volc_hal_init() is called
*/
char device_name[VOLC_DEVICE_NAME_LENGTH];
} volc_hal_context_t;
/**
* @brief Initialize the HAL module
* @details Do the necessary actions after the hardware is powered on
* it is not necessary to initialize all the hardware modules
* but it is necessary to set the device name
*
* @return int 0 if success, otherwise error code
*/
int volc_hal_init(void);
/**
* @brief return global hal context
* @details you can get the singleton Instance volc_hal_context_t by volc_get_global_hal_context()
* this function could help you get the hal context everywhere
* please be carefully, Do not Modify the return value
*/
volc_hal_context_t* volc_get_global_hal_context();
/**
* @brief Deinitialize the HAL module
*/
void volc_hal_fini(void);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,59 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_BUTTON_H__
#define __VOLC_HAL_BUTTON_H__
#ifdef __cplusplus
extern "C" {
#endif
typedef void* volc_hal_button_t;
typedef enum {
VOLC_BUTTON_PRESS_DOWN = 0, // Button press down event
VOLC_BUTTON_PRESS_UP, // Button press up event
VOLC_BUTTON_PRESS_REPEAT, // Button press repeat event
VOLC_BUTTON_PRESS_REPEAT_DONE, // Button press repeat done event
VOLC_BUTTON_SINGLE_CLICK, // Button single click event
VOLC_BUTTON_DOUBLE_CLICK, // Button double click event
VOLC_BUTTON_MULTIPLE_CLICK, // Button multiple click event
VOLC_BUTTON_LONG_PRESS_START, // Button long press start event
VOLC_BUTTON_LONG_PRESS_HOLD, // Button long press hold event
VOLC_BUTTON_LONG_PRESS_UP, // Button long press up event
VOLC_BUTTON_PRESS_END, // Button press end event
VOLC_BUTTON_EVENT_MAX, // Maximum number of button events
} volc_hal_button_event_e;
typedef void (*volc_hal_button_event_cb_t)(volc_hal_button_t button, volc_hal_button_event_e event, void* user_data);
typedef struct volc_hal_button_config {
int gpio_num; // GPIO number of the button
int active_level; // Active level of the button (0 or 1)
int long_press_ms; // Long press threshold in milliseconds
int short_press_ms; // Short press threshold in milliseconds
int enable_power_save; // Whether to enable power save mode (0 or 1)
void* user_data; // User data pointer
volc_hal_button_event_cb_t event_cb; // Button event callback function
} volc_hal_button_config_t;
/**
* @brief Create a button instance
*
* @param config Button configuration
* @return volc_hal_button_t Button instance pointer
*/
volc_hal_button_t volc_hal_button_create(volc_hal_button_config_t* config);
/**
* @brief Destroy a button instance
*
* @param button Button instance pointer
*/
void volc_hal_button_destroy(volc_hal_button_t button);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,98 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_CAPTURE_H__
#define __VOLC_HAL_CAPTURE_H__
#include "volc_hal_type.h"
#ifdef __cplusplus
extern "C" {
#endif
/*
* @brief Capture instance pointer
*/
typedef void* volc_hal_capture_t;
typedef struct {
volc_audio_data_type_e data_type; // Audio data type
void* user_data; // User data pointer
} volc_hal_frame_info_t;
typedef enum {
VOLC_AUDIO_MODE_WAKEUP = 0,
VOLC_AUDIO_MODE_CAPTURE,
} volc_hal_audio_capture_mode_e;
typedef void (*volc_hal_capture_data_cb_t)(volc_hal_capture_t capture, const void* data, int len, volc_hal_frame_info_t* frame_info);
typedef void (*volc_hal_audio_wakeup_cb_t)(void *event, void *user_data);
typedef struct volc_hal_capture_config {
volc_media_type_e media_type; // Media type
volc_hal_capture_data_cb_t data_cb; // Data callback function
volc_hal_audio_wakeup_cb_t audio_wakeup_cb; // audio wakeup cb
void* user_data; // User data pointer
} volc_hal_capture_config_t;
/**
* @brief Create a capture instance
* @details To ensure a uniform rate for media capture data, we adopt the callback function approach:
* frame-by-frame audio and video data is delivered asynchronously via callbacks,
* instead of providing an active capture interface.
* Therefore, during the function implementation, a capture thread needs to be created
* to asynchronously callback the data out.
* @note We do not specify specific media configurations (e.g., encoding format, sampling rate, or resolution).
* This is because we expect all the aforementioned parameters to be uniquely determined and immutable across all scenarios.
* Therefore, these values must be fixed at compile time; if your device supports multiple parameters,
* macros should be used to select the desired ones at compile time.
* We consider both voice wake-up and voice data capture to fall under the category of audio capture,
* differing only in mode (internal pipeline).
* For this reason, we do not redesign a separate module for voice wake-up;
* instead, we add an additional mode specifically for voice wake-up.
* Finally, note that acoustic echo cancellation (AEC) must be implemented for audio capture.
*
* @param config Capture configuration pointer
* @return volc_hal_capture_t Capture instance pointer
*/
volc_hal_capture_t volc_hal_capture_create(volc_hal_capture_config_t* config);
/**
* @brief Destroy a capture instance
*
* @param capture Capture instance pointer
*/
void volc_hal_capture_destroy(volc_hal_capture_t capture);
/**
* @brief Start a capture instance
*
* @param capture Capture instance pointer
* @return int 0 if success, otherwise error code
*/
int volc_hal_capture_start(volc_hal_capture_t capture,volc_hal_audio_capture_mode_e mode);
/**
* @brief Stop a capture instance
* @details you should start your capture thread within this function.
*
* @param capture Capture instance pointer
* @return int 0 if success, otherwise error code
*/
int volc_hal_capture_stop(volc_hal_capture_t capture);
/**
* @brief Update audio capture configuration
* @note this function could help you update the capture config
* Please check if it is thread-safe or not;
*
* @param capture Capture instance pointer
* @param config Capture configuration pointer
* @return int 0 if success, otherwise error code
*/
int volc_hal_capture_update_config(volc_hal_capture_t capture, volc_hal_capture_config_t* config);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,85 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_DISPLAY_H__
#define __VOLC_HAL_DISPLAY_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Display instance pointer
*/
typedef void* volc_hal_display_t;
/** This enumeration exists to map to distinct regions of the screen.
* Note: Typically, a set of screen display interfaces allows upper-layer callers
* to independently create and destroy regions for display purposes.
* However, to minimize the development effort of upper-layer business logic,
* we do not allow the business side to create and manage different screen regions on their own.
* Instead, different screen regions are divided and created during the execution of volc_hal_display_create().
* The business layer can only obtain different render layer objects,
* pass data to them, and perform rendering operations.
* For example, we divide the screen into a status bar(VOLC_DISPLAY_OBJ_STATUS),
* main screen(VOLC_DISPLAY_OBJ_MAIN), and subtitle display bar(VOLC_DISPLAY_OBJ_SUBTITLE).
* You may define your own divisions, as all these codes are open-source and modifiable.
*/
typedef enum {
VOLC_DISPLAY_OBJ_STATUS = 0, // Status display object
VOLC_DISPLAY_OBJ_MAIN,
VOLC_DISPLAY_OBJ_SUBTITLE, // Subtitle display object
// VOLC_DISPLAY_OBJ_EMOJI, // Emoji display object
VOLC_DISPLAY_OBJ_MAX, // Maximum display object count
} volc_hal_display_obj_e;
typedef enum {
VOLC_DISPLAY_TEXT = 0, // Text display type
VOLC_DISPLAY_IMAGE, // Image display type
VOLC_DISPLAY_EMOJI // Emoji display type
} volc_hal_display_type_e;
typedef struct volc_hal_display_config {
int width; // Width of the display
int height; // Height of the display
} volc_hal_display_config_t;
/**
* @brief Create a Display instance
*
* @param config Display configuration
* @return volc_hal_display_t Display instance pointer
*/
volc_hal_display_t volc_hal_display_create(volc_hal_display_config_t* config);
/**
* @brief set brightness
*
* @param display Display instance pointer
* @param brightness the brightness value [0,100]
* @return volc_hal_display_t Display instance pointer
*/
int volc_hal_display_set_brightness(volc_hal_display_t display, int brightness);
/**
* @brief Destroy a Display instance
*
* @param display Display instance pointer
*/
void volc_hal_display_destroy(volc_hal_display_t display);
/**
* @brief Set the display emotion
*
* @param display Display instance pointer
* @param type Display type (VOLC_DISPLAY_TEXT, VOLC_DISPLAY_IMAGE, or VOLC_DISPLAY_EMOJI)
* @param content Content to be displayed (string for text, image pointer for image, emoji string for emoji)
* @return int 0 if success, otherwise error code
*/
int volc_hal_display_set_content(volc_hal_display_t display, volc_hal_display_obj_e obj, volc_hal_display_type_e type, const void* content);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,83 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_FILE_H__
#define __VOLC_HAL_FILE_H__
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* File systems may have different implementations on different devices,
* but we generally adhere to the ANSI C style.
* For devices without a file system, these interfaces may be left unimplemented
* as this is not mandatory.
*/
/**
* @brief file instance pointer
*/
typedef void* volc_hal_file_t;
/**
* @brief init the file system
* @return int 0 if success, otherwise error code
*/
int volc_hal_file_system_init();
/**
* @brief open a file instance
* @param file_name the file name
* @param mode openmode, just follow ANSI C style(fopen)
* @return volc_hal_file_t file instance pointer
*/
volc_hal_file_t volc_hal_file_open(char* file_name, char* mode);
/**
* @brief read the data from the file
* @param file the file instance pointer
* @param data the data pointer
* @param size the data size
* @return return the real read data size
*/
uint64_t volc_hal_file_read(volc_hal_file_t file, void *data, uint64_t size);
/**
* @brief write the data from the file
* @param file the file instance pointer
* @param data the data pointer
* @param size the data size
* @return return the real writed data size
*/
uint64_t volc_hal_file_write(volc_hal_file_t file, void *data, uint64_t size);
/**
* @brief get the file size
* @param file the file instance pointer
* @return return the file size
*/
uint64_t volc_hal_file_get_size(volc_hal_file_t file);
/**
* @brief get the file size
* @param file the file instance pointer
* @param offset the file offset (start is 0)
* @return int 0 if success, otherwise error code
*/
int volc_hal_file_seek(volc_hal_file_t file,uint64_t offset);
/**
* @brief close a file instance
* @param mode openmode, just follow ANSI C style(fopen)
* @return volc_hal_file_t file instance pointer
*/
int volc_hal_file_close(volc_hal_file_t file);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,56 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_LED_H__
#define __VOLC_HAL_LED_H__
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief LED instance pointer
*/
typedef void* volc_led_t;
/**
* @brief LED state enumeration
*/
typedef enum {
VOLC_LED_OFF = 0, // LED off state
VOLC_LED_ON, // LED on state
} volc_led_state_e;
typedef struct volc_led_config {
int gpio_num; // GPIO number of the LED
int active_level; // Active level of the LED (0 or 1)
} volc_led_config_t;
/**
* @brief Create a LED instance
*
* @param config LED configuration
* @return volc_led_t LED instance pointer
*/
volc_led_t volc_led_create(volc_led_config_t* config);
/**
* @brief Destroy a LED instance
*
* @param led LED instance pointer
*/
void volc_led_destroy(volc_led_t led);
/**
* @brief Set the LED state
*
* @param led LED instance pointer
* @param state LED state (VOLC_LED_OFF, VOLC_LED_ON, or VOLC_LED_BLINK)
*/
void volc_led_set_state(volc_led_t led, volc_led_state_e state);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,98 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_PLAYER_H__
#define __VOLC_HAL_PLAYER_H__
#include "volc_hal_type.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Player instance pointer
*/
typedef void* volc_hal_player_t;
typedef struct volc_hal_player_config {
volc_media_type_e media_type; // Media type
} volc_hal_player_config_t;
/**
* @brief Create a player instance
* @details this function shoudle set the player_handle value in the volc_hal_context_t structure.
* @note We do not specify specific media configurations (e.g., encoding format, sampling rate, or resolution).
* This is because we expect all the aforementioned parameters to be uniquely determined and immutable across all scenarios.
* Therefore, these values must be fixed at compile time; if your device supports multiple parameters,
* macros should be used to select the desired ones at compile time.
*
* @param config Player configuration
* @return volc_hal_player_t Player instance pointer
*/
volc_hal_player_t volc_hal_player_create(volc_hal_player_config_t* config);
/**
* @brief set audio player volume
*
* @param player Player instance pointer (audio)
* @param volume the volume [0,100]
* @return int 0 if success
*/
int volc_hal_set_audio_player_volume(volc_hal_player_t player, int volume);
/**
* @brief get audio player volume
*
* @param player Player instance pointer (audio)
* @return the volume
*/
int volc_hal_get_audio_player_volume(volc_hal_player_t player);
/**
* @brief Destroy a player instance
* @details this function shoudle set the player_handle to NULL in the volc_hal_context_t structure.
*
* @param player Player instance pointer
*/
void volc_hal_player_destroy(volc_hal_player_t player);
/**
* @brief Start a player instance
*
* @param player Player instance pointer
* @return int 0 if success, otherwise error code
*/
int volc_hal_player_start(volc_hal_player_t player);
/**
* @brief Stop a player instance
*
* @param player Player instance pointer
* @return int 0 if success, otherwise error code
*/
int volc_hal_player_stop(volc_hal_player_t player);
/**
* @brief Play data with a player instance
* @note We have not specified whether this function is sync or async.
* However, it is strongly recommended to implement this function as non-blocking
* with a certain internal buffer, ensuring that the caller of the function
* does not need to overly consider the function's call frequency.
* For example, the function can be called every 1 second to play 1.2 seconds of audio or video data.
*
* @param player Player instance pointer
* @param data Data to play
* @param len Data length
* @return int 0 if success, otherwise error code
*/
int volc_hal_player_play_data(volc_hal_player_t player, const void* data, int len);
void volc_hal_player_discard_pending(volc_hal_player_t player);
/* Allow a fully received short response to start without filling the prebuffer. */
void volc_hal_player_finish_segment(volc_hal_player_t player);
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,26 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef __VOLC_HAL_TYPE_H__
#define __VOLC_HAL_TYPE_H__
#include "volc_conv_ai.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Media type enumeration
*/
typedef enum volc_media_type {
VOLC_MEDIA_TYPE_AUDIO = 0, // Audio media type
VOLC_MEDIA_TYPE_VIDEO, // Video media type
VOLC_MEDIA_TYPE_MAX, // Maximum media type count
} volc_media_type_e;
#ifdef __cplusplus
}
#endif
#endif
@@ -0,0 +1,225 @@
/**
* ESPRESSIF MIT License
*
* Copyright (c) 2025 <ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD>
*
* Permission is hereby granted for use on all ESPRESSIF SYSTEMS products, in which case,
* it is free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#include <string.h>
#include <stdbool.h>
#include <stdint.h>
#include "esp_log.h"
#include "esp_err.h"
#include "esp_board_manager.h"
#include "dev_audio_codec.h"
#include "dev_display_lcd_spi.h"
#include "basic_board.h"
static const char *TAG = "BASIC_BOARD";
typedef struct {
const char *name;
const char *mic_layout;
uint32_t sample_rate;
uint8_t sample_bits;
uint8_t channels;
} board_config_t;
static const board_config_t supported_boards[] = {
{"echoear_core_board_v1_2", "RMNM", 16000, 32, 2},
{"esp32_s3_korvo2_v3", "RMNM", 16000, 32, 2},
{"esp_vocat_board_v1_2", "RMNM", 16000, 32, 2},
{"esp_box_3", "RMNM", 16000, 32, 2},
{"ESP32_S3_Korvo_2L", "MR", 16000, 16, 2},
};
static const size_t supported_boards_count = sizeof(supported_boards) / sizeof(supported_boards[0]);
#define DEFAULT_PLAY_VOLUME 30
#define DEFAULT_REC_GAIN 32.0
#define DEFAULT_REC_CHANNEL_GAIN 32.0
#define REC_CHANNEL_MASK BIT(2)
static inline bool is_board_name(const char *board_name, const char *target_name)
{
ESP_LOGI(TAG, "board_name: %s, target_name: %s", board_name, target_name);
return strcmp(board_name, target_name) == 0;
}
static dev_audio_codec_handles_t *play_dev_handles2 = NULL;
static dev_audio_codec_handles_t *rec_dev_handles2 = NULL;
static esp_err_t setup_board_devices(basic_board_periph_t *periph)
{
esp_err_t ret = ESP_OK;
dev_audio_codec_handles_t *play_dev_handles = NULL;
dev_audio_codec_handles_t *rec_dev_handles = NULL;
void *lcd_handle = NULL;
esp_board_manager_init();
// esp_board_manager_print();
ret = esp_board_device_init_all();
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to initialize board devices: %s", esp_err_to_name(ret));
return ret;
}
esp_board_device_show("fs_sdcard");
ret = esp_board_manager_get_device_handle("audio_dac", (void **)&play_dev_handles);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to get audio_dac handle: %s", esp_err_to_name(ret));
return ret;
}
ret = esp_board_manager_get_device_handle("audio_adc", (void **)&rec_dev_handles);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to get audio_adc handle: %s", esp_err_to_name(ret));
return ret;
}
periph->play_dev = play_dev_handles->codec_dev;
periph->rec_dev = rec_dev_handles->codec_dev;
play_dev_handles2 = play_dev_handles;
rec_dev_handles2 = rec_dev_handles;
ret = esp_board_manager_get_device_handle("display_lcd", &lcd_handle);
if (ret == ESP_OK && lcd_handle) {
dev_display_lcd_spi_handles_t *lcd_handles = (dev_display_lcd_spi_handles_t *)lcd_handle;
periph->lcd_pannel = lcd_handles->panel_handle;
ESP_LOGI(TAG, "LCD panel handle: %p", periph->lcd_pannel);
} else {
ESP_LOGW(TAG, "Failed to get LCD device handle: %s", esp_err_to_name(ret));
}
if (periph->play_dev) {
ret = esp_codec_dev_set_out_vol(periph->play_dev, DEFAULT_PLAY_VOLUME);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to set playback volume: %s", esp_err_to_name(ret));
return ret;
}
ESP_LOGI(TAG, "Playback device configured with volume: %d", DEFAULT_PLAY_VOLUME);
}
if (periph->rec_dev) {
ret = esp_codec_dev_set_in_gain(periph->rec_dev, DEFAULT_REC_GAIN);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to set recording gain: %s", esp_err_to_name(ret));
return ret;
}
// ret = esp_codec_dev_set_in_channel_gain(periph->rec_dev, REC_CHANNEL_MASK, DEFAULT_REC_CHANNEL_GAIN);
// if (ret != ESP_OK) {
// ESP_LOGE(TAG, "Failed to set recording channel gain: %s", esp_err_to_name(ret));
// // return ret;
// }
ESP_LOGI(TAG, "Recording device configured with gain: %.1f", DEFAULT_REC_GAIN);
}
return ESP_OK;
}
static esp_err_t configure_board_settings(basic_board_periph_t *periph)
{
const board_config_t *config = NULL;
for (size_t i = 0; i < supported_boards_count; i++) {
ESP_LOGI(TAG, "g_esp_board_info.name: %s, supported_boards[i].name: %s", g_esp_board_info.name, supported_boards[i].name);
if (is_board_name(g_esp_board_info.name, supported_boards[i].name)) {
config = &supported_boards[i];
break;
}
}
if (config == NULL) {
ESP_LOGE(TAG, "Unsupported board: %s", g_esp_board_info.name);
ESP_LOGE(TAG, "Supported boards:");
for (size_t i = 0; i < supported_boards_count; i++) {
ESP_LOGE(TAG, " - %s", supported_boards[i].name);
}
return ESP_ERR_NOT_SUPPORTED;
}
strcpy(periph->mic_layout, config->mic_layout);
periph->sample_rate = config->sample_rate;
periph->sample_bits = config->sample_bits;
periph->channels = config->channels;
ESP_LOGI(TAG, "Board: %s", g_esp_board_info.name);
ESP_LOGI(TAG, "Mic layout: %s", periph->mic_layout);
ESP_LOGI(TAG, "Sample rate: %d Hz", periph->sample_rate);
ESP_LOGI(TAG, "Sample bits: %d", periph->sample_bits);
ESP_LOGI(TAG, "Channels: %d", periph->channels);
return ESP_OK;
}
esp_err_t basic_board_init(basic_board_periph_t *periph)
{
esp_err_t ret = ESP_OK;
if (periph == NULL) {
ESP_LOGE(TAG, "Invalid parameter: periph is NULL");
return ESP_ERR_INVALID_ARG;
}
memset(periph, 0, sizeof(basic_board_periph_t));
ret = setup_board_devices(periph);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to setup board devices");
return ret;
}
ret = configure_board_settings(periph);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to configure board settings");
return ret;
}
ESP_LOGI(TAG, "Basic board initialization completed successfully");
esp_codec_dev_sample_info_t fs = {
.sample_rate = periph->sample_rate,
.channel = periph->channels,
.bits_per_sample = periph->sample_bits,
};
ESP_LOGI(TAG, "sample_rate: %d, channel: %d, bits: %d", fs.sample_rate, fs.channel, fs.bits_per_sample);
if (periph->play_dev) {
ret = esp_codec_dev_open(periph->play_dev, &fs);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to open audio dac <%p>", periph->play_dev);
return ret;
}
}
if (periph->rec_dev) {
ret = esp_codec_dev_open(periph->rec_dev, &fs);
if (ret != ESP_OK) {
ESP_LOGE(TAG, "Failed to open audio_adc <%p>", periph->rec_dev);
return ret;
}
}
return ESP_OK;
}
@@ -0,0 +1,44 @@
/**
* ESPRESSIF MIT License
*
* Copyright (c) 2025 <ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD>
*
* Permission is hereby granted for use on all ESPRESSIF SYSTEMS products, in which case,
* it is free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
typedef struct {
void *play_dev;
void *rec_dev;
void *lcd_pannel;
int sample_rate;
char sample_bits;
char channels;
char mic_layout[8];
} basic_board_periph_t;
int basic_board_init(basic_board_periph_t *periph);
#ifdef __cplusplus
}
#endif /* __cplusplus */
@@ -0,0 +1,146 @@
#ifdef __has_include
#if __has_include("lvgl.h")
#ifndef LV_LVGL_H_INCLUDE_SIMPLE
#define LV_LVGL_H_INCLUDE_SIMPLE
#endif
#endif
#endif
#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif
#ifndef LV_ATTRIBUTE_IMAGE_OUTPUT_112X112
#define LV_ATTRIBUTE_IMAGE_OUTPUT_112X112
#endif
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMAGE_OUTPUT_112X112 uint8_t output_112x112_map[] = {
0xfd, 0xfd, 0xf8, 0xff, 0xfd, 0xfd, 0xf7, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xf8, 0xf5, 0xff, 0xfd, 0xf8, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xf8, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xf8, 0xf4, 0xff, 0xfc, 0xf8, 0xf4, 0xff, 0xfc, 0xf8, 0xf4, 0xff, 0xfd, 0xf8, 0xf5, 0xff, 0xfd, 0xf8, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xf9, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xf9, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xfe, 0xfe, 0xf9, 0xff,
0xfd, 0xfd, 0xf7, 0xff, 0xfd, 0xfd, 0xf7, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfb, 0xf7, 0xf3, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf3, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xfe, 0xfe, 0xf8, 0xff,
0xfd, 0xfd, 0xf7, 0xff, 0xfd, 0xfd, 0xf7, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfa, 0xf8, 0xf5, 0xff, 0xf9, 0xf7, 0xf4, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfe, 0xfb, 0xf6, 0xff,
0xfd, 0xfd, 0xf7, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfa, 0xfb, 0xf6, 0xff, 0xf8, 0xf9, 0xf5, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf9, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfe, 0xfb, 0xf6, 0xff,
0xfd, 0xfd, 0xf6, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xf9, 0xfa, 0xf6, 0xff, 0xf8, 0xf9, 0xf5, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf4, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf1, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfe, 0xfc, 0xf8, 0xff,
0xfc, 0xfc, 0xf7, 0xff, 0xfb, 0xfc, 0xf6, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf4, 0xf1, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf6, 0xf5, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfe, 0xfd, 0xf8, 0xff,
0xfc, 0xfc, 0xf6, 0xff, 0xfb, 0xfc, 0xf6, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xf7, 0xf9, 0xf5, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf5, 0xf4, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfe, 0xfc, 0xf7, 0xff,
0xfc, 0xfc, 0xf6, 0xff, 0xfb, 0xfc, 0xf6, 0xff, 0xf9, 0xfa, 0xf6, 0xff, 0xf8, 0xf9, 0xf5, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf8, 0xf9, 0xf3, 0xff, 0xf8, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf7, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfc, 0xfd, 0xf7, 0xff, 0xfb, 0xfc, 0xf6, 0xff, 0xf9, 0xfb, 0xf5, 0xff, 0xf8, 0xfa, 0xf5, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfe, 0xfc, 0xf7, 0xff,
0xfc, 0xfc, 0xf6, 0xff, 0xfb, 0xfc, 0xf6, 0xff, 0xfa, 0xfb, 0xf6, 0xff, 0xf8, 0xfa, 0xf5, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf6, 0xf8, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfe, 0xfc, 0xf7, 0xff,
0xfc, 0xfc, 0xf6, 0xff, 0xfb, 0xfc, 0xf6, 0xff, 0xf9, 0xfb, 0xf6, 0xff, 0xf8, 0xfa, 0xf5, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfe, 0xfb, 0xf7, 0xff,
0xfc, 0xfc, 0xf6, 0xff, 0xfb, 0xfc, 0xf6, 0xff, 0xf9, 0xfa, 0xf6, 0xff, 0xf8, 0xf9, 0xf5, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf5, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfe, 0xfb, 0xf7, 0xff,
0xfc, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf6, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xfb, 0xf7, 0xff,
0xfc, 0xfb, 0xf6, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfe, 0xfb, 0xf7, 0xff,
0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf9, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf0, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xf9, 0xfa, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf9, 0xf7, 0xf1, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff,
0xfd, 0xfb, 0xf5, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf5, 0xf4, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff,
0xfd, 0xfb, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfb, 0xfa, 0xf7, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf7, 0xff, 0xfa, 0xfa, 0xf7, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xfb, 0xfb, 0xf8, 0xff, 0xfb, 0xfb, 0xf8, 0xff, 0xfc, 0xfb, 0xf9, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfb, 0xfb, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfc, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf7, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xfa, 0xfa, 0xf8, 0xff, 0xfa, 0xfa, 0xf8, 0xff, 0xfa, 0xfa, 0xf8, 0xff, 0xfa, 0xfa, 0xf7, 0xff, 0xfb, 0xf9, 0xf6, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf5, 0xff, 0xf6, 0xf6, 0xf5, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf5, 0xf6, 0xf5, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff,
0xfe, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xfa, 0xff, 0xfd, 0xfe, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xfc, 0xfa, 0xf2, 0xff, 0xfb, 0xf8, 0xe6, 0xff, 0xfb, 0xf6, 0xe2, 0xff, 0xfb, 0xf6, 0xe3, 0xff, 0xfb, 0xf6, 0xe2, 0xff, 0xfb, 0xf5, 0xe3, 0xff, 0xfb, 0xf5, 0xe3, 0xff, 0xfb, 0xf6, 0xe3, 0xff, 0xfb, 0xf6, 0xe3, 0xff, 0xfc, 0xf7, 0xe3, 0xff, 0xfc, 0xf7, 0xe3, 0xff, 0xfc, 0xf7, 0xe4, 0xff, 0xfc, 0xf7, 0xe3, 0xff, 0xfc, 0xf7, 0xe4, 0xff, 0xfb, 0xf6, 0xe3, 0xff, 0xfc, 0xf6, 0xe3, 0xff, 0xfc, 0xf7, 0xe3, 0xff, 0xfc, 0xf7, 0xe3, 0xff, 0xfb, 0xf7, 0xe4, 0xff, 0xfc, 0xf7, 0xe4, 0xff, 0xfc, 0xf7, 0xe3, 0xff, 0xfc, 0xf6, 0xe3, 0xff, 0xfc, 0xf7, 0xe3, 0xff, 0xfb, 0xf7, 0xe2, 0xff, 0xfb, 0xf6, 0xe3, 0xff, 0xfb, 0xf6, 0xe3, 0xff, 0xfb, 0xf6, 0xe3, 0xff, 0xfc, 0xf6, 0xe2, 0xff, 0xfb, 0xf7, 0xe2, 0xff, 0xfb, 0xf6, 0xe2, 0xff, 0xfb, 0xf6, 0xe1, 0xff, 0xfa, 0xf5, 0xe0, 0xff, 0xfa, 0xf6, 0xe2, 0xff, 0xfb, 0xf9, 0xed, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfb, 0xfd, 0xff, 0xff, 0xfa, 0xfc, 0xfc, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf5, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf6, 0xf5, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfc, 0xf6, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf4, 0xf4, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfb, 0xfb, 0xf9, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0xfc, 0xf5, 0xda, 0xff, 0xfc, 0xe4, 0x8e, 0xff, 0xfc, 0xd4, 0x4f, 0xff, 0xfc, 0xca, 0x2c, 0xff, 0xfc, 0xc5, 0x19, 0xff, 0xfc, 0xc5, 0x14, 0xff, 0xfc, 0xc5, 0x15, 0xff, 0xfc, 0xc6, 0x15, 0xff, 0xfc, 0xc6, 0x16, 0xff, 0xfc, 0xc6, 0x16, 0xff, 0xfc, 0xc5, 0x16, 0xff, 0xfc, 0xc5, 0x16, 0xff, 0xfc, 0xc5, 0x16, 0xff, 0xfc, 0xc5, 0x16, 0xff, 0xfc, 0xc6, 0x15, 0xff, 0xfc, 0xc7, 0x15, 0xff, 0xfc, 0xc7, 0x16, 0xff, 0xfc, 0xc6, 0x17, 0xff, 0xfc, 0xc6, 0x17, 0xff, 0xfc, 0xc6, 0x17, 0xff, 0xfb, 0xc7, 0x17, 0xff, 0xfc, 0xc6, 0x18, 0xff, 0xfc, 0xc6, 0x18, 0xff, 0xfc, 0xc8, 0x17, 0xff, 0xfc, 0xc7, 0x17, 0xff, 0xfc, 0xc4, 0x16, 0xff, 0xfb, 0xc3, 0x15, 0xff, 0xfc, 0xc3, 0x15, 0xff, 0xfc, 0xc6, 0x16, 0xff, 0xfd, 0xc6, 0x17, 0xff, 0xfc, 0xc5, 0x15, 0xff, 0xfc, 0xc5, 0x15, 0xff, 0xfc, 0xc5, 0x15, 0xff, 0xfc, 0xc4, 0x14, 0xff, 0xfb, 0xc3, 0x13, 0xff, 0xfb, 0xc3, 0x16, 0xff, 0xfb, 0xc8, 0x24, 0xff, 0xfc, 0xd0, 0x3e, 0xff, 0xfb, 0xdc, 0x74, 0xff, 0xfb, 0xed, 0xbd, 0xff, 0xfa, 0xfb, 0xf6, 0xff, 0xfa, 0xfc, 0xfe, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf6, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0xfc, 0xf6, 0xe1, 0xff, 0xfb, 0xda, 0x6d, 0xff, 0xfc, 0xc3, 0x0f, 0xff, 0xfd, 0xba, 0x00, 0xff, 0xfd, 0xbb, 0x00, 0xff, 0xfd, 0xbc, 0x00, 0xff, 0xfd, 0xbd, 0x00, 0xff, 0xfd, 0xbe, 0x00, 0xff, 0xfd, 0xbd, 0x00, 0xff, 0xfd, 0xbd, 0x00, 0xff, 0xfd, 0xbe, 0x00, 0xff, 0xfd, 0xbf, 0x00, 0xff, 0xfe, 0xbf, 0x00, 0xff, 0xfe, 0xc0, 0x00, 0xff, 0xfd, 0xbf, 0x00, 0xff, 0xfe, 0xbf, 0x00, 0xff, 0xfd, 0xc1, 0x00, 0xff, 0xfd, 0xc1, 0x00, 0xff, 0xfd, 0xc0, 0x00, 0xff, 0xfe, 0xbf, 0x00, 0xff, 0xfd, 0xbf, 0x00, 0xff, 0xfd, 0xbf, 0x00, 0xff, 0xfd, 0xc0, 0x01, 0xff, 0xfd, 0xbf, 0x01, 0xff, 0xfd, 0xbf, 0x00, 0xff, 0xfd, 0xbf, 0x00, 0xff, 0xfd, 0xbe, 0x00, 0xff, 0xfe, 0xbe, 0x00, 0xff, 0xfe, 0xbe, 0x00, 0xff, 0xfe, 0xbe, 0x00, 0xff, 0xfd, 0xbf, 0x00, 0xff, 0xfe, 0xbf, 0x00, 0xff, 0xfd, 0xbd, 0x00, 0xff, 0xfd, 0xbe, 0x00, 0xff, 0xfe, 0xbe, 0x00, 0xff, 0xfe, 0xbf, 0x00, 0xff, 0xfd, 0xbd, 0x00, 0xff, 0xfc, 0xbb, 0x00, 0xff, 0xfd, 0xbb, 0x00, 0xff, 0xfd, 0xbc, 0x00, 0xff, 0xfd, 0xbb, 0x00, 0xff, 0xfc, 0xbb, 0x00, 0xff, 0xfb, 0xcc, 0x3b, 0xff, 0xfb, 0xec, 0xb4, 0xff, 0xfc, 0xfd, 0xfe, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0xfc, 0xeb, 0xb6, 0xff, 0xfc, 0xc4, 0x1f, 0xff, 0xfd, 0xba, 0x00, 0xff, 0xfd, 0xbc, 0x00, 0xff, 0xfd, 0xbd, 0x02, 0xff, 0xfd, 0xbd, 0x03, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbe, 0x02, 0xff, 0xfd, 0xbe, 0x03, 0xff, 0xfd, 0xbf, 0x02, 0xff, 0xfd, 0xbe, 0x03, 0xff, 0xfd, 0xbe, 0x03, 0xff, 0xfd, 0xbf, 0x04, 0xff, 0xfd, 0xbf, 0x05, 0xff, 0xfe, 0xbf, 0x05, 0xff, 0xfe, 0xbe, 0x06, 0xff, 0xfe, 0xbf, 0x05, 0xff, 0xfd, 0xc0, 0x05, 0xff, 0xfd, 0xc1, 0x06, 0xff, 0xfd, 0xbf, 0x07, 0xff, 0xfe, 0xbe, 0x06, 0xff, 0xfe, 0xbf, 0x05, 0xff, 0xfd, 0xbe, 0x05, 0xff, 0xfe, 0xbe, 0x04, 0xff, 0xfe, 0xbf, 0x03, 0xff, 0xfd, 0xbe, 0x03, 0xff, 0xfd, 0xbe, 0x04, 0xff, 0xfe, 0xbe, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbe, 0x05, 0xff, 0xfd, 0xbf, 0x04, 0xff, 0xfd, 0xbe, 0x04, 0xff, 0xfd, 0xbe, 0x04, 0xff, 0xfc, 0xbd, 0x03, 0xff, 0xfd, 0xbd, 0x02, 0xff, 0xfd, 0xbd, 0x02, 0xff, 0xfd, 0xbb, 0x00, 0xff, 0xfd, 0xbb, 0x00, 0xff, 0xfd, 0xbe, 0x00, 0xff, 0xfb, 0xdb, 0x6d, 0xff, 0xfd, 0xfb, 0xf4, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xfd, 0xff, 0xff, 0xfc, 0xe6, 0xa2, 0xff, 0xfc, 0xbd, 0x05, 0xff, 0xfd, 0xba, 0x00, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbe, 0x05, 0xff, 0xfd, 0xbe, 0x06, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbe, 0x06, 0xff, 0xfd, 0xc0, 0x07, 0xff, 0xfd, 0xbf, 0x08, 0xff, 0xfd, 0xbe, 0x08, 0xff, 0xfd, 0xbe, 0x07, 0xff, 0xfd, 0xbe, 0x07, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbc, 0x04, 0xff, 0xfd, 0xbc, 0x04, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbe, 0x06, 0xff, 0xfd, 0xbe, 0x05, 0xff, 0xfe, 0xbe, 0x05, 0xff, 0xfd, 0xbe, 0x05, 0xff, 0xfd, 0xbd, 0x04, 0xff, 0xfd, 0xbc, 0x04, 0xff, 0xfd, 0xbc, 0x04, 0xff, 0xfd, 0xbc, 0x03, 0xff, 0xfd, 0xbd, 0x03, 0xff, 0xfd, 0xbd, 0x00, 0xff, 0xfc, 0xb9, 0x00, 0xff, 0xfb, 0xd1, 0x4f, 0xff, 0xfd, 0xfb, 0xf3, 0xff, 0xfc, 0xfb, 0xf8, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf6, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf3, 0xff, 0xfd, 0xfc, 0xfe, 0xff, 0xfc, 0xed, 0xba, 0xff, 0xfc, 0xc0, 0x06, 0xff, 0xfd, 0xbc, 0x00, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfd, 0xbb, 0x07, 0xff, 0xfd, 0xbb, 0x05, 0xff, 0xfd, 0xbc, 0x04, 0xff, 0xfd, 0xbc, 0x05, 0xff, 0xfd, 0xbd, 0x05, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfe, 0xbc, 0x09, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfe, 0xbd, 0x08, 0xff, 0xfd, 0xbd, 0x09, 0xff, 0xfd, 0xbe, 0x09, 0xff, 0xfd, 0xbf, 0x0a, 0xff, 0xfe, 0xbf, 0x0b, 0xff, 0xfd, 0xbf, 0x0a, 0xff, 0xfd, 0xbe, 0x0a, 0xff, 0xfd, 0xbd, 0x0a, 0xff, 0xfe, 0xbd, 0x09, 0xff, 0xfe, 0xbd, 0x08, 0xff, 0xfd, 0xbd, 0x07, 0xff, 0xfd, 0xbd, 0x07, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbb, 0x05, 0xff, 0xfe, 0xbd, 0x07, 0xff, 0xfd, 0xbe, 0x07, 0xff, 0xfd, 0xbe, 0x08, 0xff, 0xfd, 0xbf, 0x06, 0xff, 0xfd, 0xbe, 0x06, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbc, 0x05, 0xff, 0xfd, 0xbc, 0x05, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbc, 0x05, 0xff, 0xfd, 0xbb, 0x03, 0xff, 0xfd, 0xb8, 0x00, 0xff, 0xfc, 0xd7, 0x63, 0xff, 0xfd, 0xfd, 0xfc, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf7, 0xff, 0xfd, 0xf8, 0xe8, 0xff, 0xfc, 0xc7, 0x28, 0xff, 0xfd, 0xbc, 0x00, 0xff, 0xfd, 0xbe, 0x06, 0xff, 0xfd, 0xbc, 0x05, 0xff, 0xfd, 0xbb, 0x05, 0xff, 0xfd, 0xbb, 0x04, 0xff, 0xfd, 0xbb, 0x05, 0xff, 0xfd, 0xbb, 0x07, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfd, 0xbc, 0x07, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfe, 0xbb, 0x08, 0xff, 0xfd, 0xba, 0x07, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfe, 0xbc, 0x0a, 0xff, 0xfe, 0xbc, 0x0a, 0xff, 0xfd, 0xbd, 0x0a, 0xff, 0xfd, 0xbd, 0x0a, 0xff, 0xfd, 0xbd, 0x0b, 0xff, 0xfd, 0xbd, 0x0b, 0xff, 0xfd, 0xbe, 0x0b, 0xff, 0xfd, 0xbd, 0x0b, 0xff, 0xfd, 0xbd, 0x0b, 0xff, 0xfd, 0xbc, 0x0a, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbc, 0x0c, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbc, 0x0a, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xbc, 0x07, 0xff, 0xfd, 0xbc, 0x07, 0xff, 0xfd, 0xbd, 0x09, 0xff, 0xfd, 0xbd, 0x09, 0xff, 0xfd, 0xbd, 0x09, 0xff, 0xfd, 0xbd, 0x07, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfd, 0xbc, 0x07, 0xff, 0xfd, 0xbc, 0x05, 0xff, 0xfd, 0xbd, 0x06, 0xff, 0xfd, 0xbc, 0x06, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfd, 0xbb, 0x06, 0xff, 0xfd, 0xba, 0x02, 0xff, 0xfc, 0xb7, 0x00, 0xff, 0xfb, 0xe6, 0xa3, 0xff, 0xfc, 0xfd, 0xff, 0xff, 0xfb, 0xf9, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfe, 0xfb, 0xf6, 0xff,
0xfd, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfd, 0xfd, 0xff, 0xff, 0xfc, 0xde, 0x85, 0xff, 0xfd, 0xb9, 0x00, 0xff, 0xfd, 0xbd, 0x07, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xba, 0x06, 0xff, 0xfd, 0xba, 0x05, 0xff, 0xfd, 0xba, 0x07, 0xff, 0xfd, 0xba, 0x09, 0xff, 0xfd, 0xba, 0x08, 0xff, 0xfd, 0xba, 0x09, 0xff, 0xfd, 0xbb, 0x09, 0xff, 0xfd, 0xbc, 0x0a, 0xff, 0xfe, 0xbc, 0x0a, 0xff, 0xfe, 0xbb, 0x0a, 0xff, 0xfd, 0xbb, 0x09, 0xff, 0xfd, 0xbb, 0x09, 0xff, 0xfd, 0xba, 0x09, 0xff, 0xfe, 0xba, 0x08, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xbb, 0x0a, 0xff, 0xfe, 0xbc, 0x0c, 0xff, 0xfd, 0xbc, 0x0c, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbd, 0x0a, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbc, 0x0a, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbc, 0x0c, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbc, 0x0c, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfe, 0xbb, 0x0d, 0xff, 0xfd, 0xbb, 0x0b, 0xff, 0xfe, 0xbb, 0x0a, 0xff, 0xfd, 0xbc, 0x0a, 0xff, 0xfd, 0xbd, 0x0b, 0xff, 0xfd, 0xbd, 0x0c, 0xff, 0xfd, 0xbc, 0x0c, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfe, 0xbc, 0x0a, 0xff, 0xfd, 0xbb, 0x09, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xbc, 0x07, 0xff, 0xfd, 0xbc, 0x08, 0xff, 0xfe, 0xbc, 0x09, 0xff, 0xfd, 0xbb, 0x08, 0xff, 0xfd, 0xba, 0x05, 0xff, 0xfd, 0xb6, 0x00, 0xff, 0xfc, 0xc3, 0x29, 0xff, 0xfd, 0xfa, 0xef, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfe, 0xfb, 0xf6, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xfd, 0xf7, 0xec, 0xff, 0xfc, 0xc4, 0x27, 0xff, 0xfd, 0xbb, 0x00, 0xff, 0xfe, 0xbc, 0x0a, 0xff, 0xfd, 0xba, 0x09, 0xff, 0xfd, 0xba, 0x09, 0xff, 0xfd, 0xb9, 0x08, 0xff, 0xfd, 0xb9, 0x08, 0xff, 0xfd, 0xb9, 0x0a, 0xff, 0xfe, 0xb9, 0x0a, 0xff, 0xfd, 0xb9, 0x0a, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb9, 0x0a, 0xff, 0xfd, 0xba, 0x0c, 0xff, 0xfd, 0xba, 0x0b, 0xff, 0xfd, 0xba, 0x0b, 0xff, 0xfd, 0xba, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb9, 0x09, 0xff, 0xfd, 0xb9, 0x09, 0xff, 0xfe, 0xba, 0x0b, 0xff, 0xfe, 0xbb, 0x0d, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfd, 0xbc, 0x0d, 0xff, 0xfd, 0xbd, 0x0d, 0xff, 0xfd, 0xbc, 0x0d, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfd, 0xbb, 0x0c, 0xff, 0xfe, 0xba, 0x0c, 0xff, 0xfe, 0xba, 0x0c, 0xff, 0xfd, 0xba, 0x0b, 0xff, 0xfe, 0xbb, 0x0c, 0xff, 0xfe, 0xbb, 0x0c, 0xff, 0xfe, 0xbc, 0x0c, 0xff, 0xfd, 0xbc, 0x0d, 0xff, 0xfd, 0xbc, 0x0d, 0xff, 0xfd, 0xbc, 0x0c, 0xff, 0xfd, 0xbd, 0x0d, 0xff, 0xfd, 0xbc, 0x0e, 0xff, 0xfd, 0xbc, 0x0e, 0xff, 0xfd, 0xbc, 0x0e, 0xff, 0xfd, 0xbb, 0x0e, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfe, 0xbb, 0x0c, 0xff, 0xfe, 0xbb, 0x0b, 0xff, 0xfe, 0xbc, 0x0a, 0xff, 0xfe, 0xbd, 0x0a, 0xff, 0xfd, 0xbd, 0x0a, 0xff, 0xfd, 0xbb, 0x07, 0xff, 0xfd, 0xba, 0x04, 0xff, 0xfc, 0xb4, 0x00, 0xff, 0xfc, 0xe6, 0xab, 0xff, 0xfd, 0xfe, 0xff, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xff, 0xfe, 0xf9, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xfe, 0xfe, 0xf8, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfe, 0xfb, 0xf6, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfd, 0xfa, 0xfb, 0xff, 0xfc, 0xe9, 0xb9, 0xff, 0xfc, 0xb8, 0x00, 0xff, 0xfd, 0xba, 0x06, 0xff, 0xfd, 0xbb, 0x0b, 0xff, 0xfd, 0xba, 0x0b, 0xff, 0xfd, 0xb9, 0x0a, 0xff, 0xfd, 0xb8, 0x09, 0xff, 0xfd, 0xb8, 0x09, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb7, 0x0c, 0xff, 0xfd, 0xb6, 0x0c, 0xff, 0xfd, 0xb6, 0x0c, 0xff, 0xfd, 0xb7, 0x0c, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb8, 0x09, 0xff, 0xfd, 0xb7, 0x0a, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xba, 0x0c, 0xff, 0xfd, 0xba, 0x0d, 0xff, 0xfd, 0xba, 0x0e, 0xff, 0xfd, 0xba, 0x0e, 0xff, 0xfe, 0xba, 0x0d, 0xff, 0xfd, 0xb9, 0x0d, 0xff, 0xfd, 0xb8, 0x0c, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb6, 0x0a, 0xff, 0xfd, 0xb7, 0x0a, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xba, 0x0c, 0xff, 0xfe, 0xbb, 0x0c, 0xff, 0xfd, 0xbb, 0x0c, 0xff, 0xfe, 0xbb, 0x0c, 0xff, 0xfd, 0xbb, 0x0c, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfd, 0xbb, 0x0d, 0xff, 0xfd, 0xbb, 0x0e, 0xff, 0xfd, 0xbb, 0x0e, 0xff, 0xfe, 0xba, 0x0e, 0xff, 0xfd, 0xb9, 0x0d, 0xff, 0xfd, 0xb9, 0x0d, 0xff, 0xfd, 0xbb, 0x0c, 0xff, 0xfe, 0xbb, 0x0c, 0xff, 0xfe, 0xbb, 0x0c, 0xff, 0xfe, 0xbb, 0x0b, 0xff, 0xfd, 0xbc, 0x0b, 0xff, 0xfd, 0xbb, 0x0b, 0xff, 0xfd, 0xb9, 0x07, 0xff, 0xfd, 0xb2, 0x00, 0xff, 0xfc, 0xce, 0x5e, 0xff, 0xfd, 0xfe, 0xff, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xef, 0xec, 0xff, 0xda, 0xce, 0xcb, 0xff, 0xc1, 0xaa, 0xa5, 0xff, 0xae, 0x8d, 0x88, 0xff, 0x9d, 0x74, 0x6e, 0xff, 0x90, 0x63, 0x5d, 0xff, 0x8a, 0x59, 0x53, 0xff, 0x87, 0x55, 0x50, 0xff, 0x89, 0x57, 0x52, 0xff, 0x91, 0x63, 0x5e, 0xff, 0xa0, 0x79, 0x74, 0xff, 0xb2, 0x95, 0x91, 0xff, 0xca, 0xb7, 0xb3, 0xff, 0xe5, 0xdb, 0xd8, 0xff, 0xfb, 0xfb, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf9, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfe, 0xfb, 0xf6, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xfb, 0xf6, 0xf1, 0xff, 0xfd, 0xfa, 0xfc, 0xff, 0xfc, 0xda, 0x88, 0xff, 0xfd, 0xb5, 0x00, 0xff, 0xfd, 0xb9, 0x08, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfe, 0xba, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb8, 0x0a, 0xff, 0xfd, 0xb8, 0x0a, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb5, 0x0c, 0xff, 0xfd, 0xb5, 0x0c, 0xff, 0xfd, 0xb5, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb3, 0x0d, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb6, 0x0c, 0xff, 0xfc, 0xb6, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb6, 0x0a, 0xff, 0xfd, 0xb7, 0x0c, 0xff, 0xfd, 0xb7, 0x0e, 0xff, 0xfd, 0xb6, 0x0e, 0xff, 0xfd, 0xb6, 0x0e, 0xff, 0xfd, 0xb6, 0x0d, 0xff, 0xfd, 0xb6, 0x0c, 0xff, 0xfd, 0xb6, 0x0b, 0xff, 0xfd, 0xb5, 0x0a, 0xff, 0xfd, 0xb5, 0x09, 0xff, 0xfd, 0xb5, 0x09, 0xff, 0xfd, 0xb6, 0x0a, 0xff, 0xfd, 0xb7, 0x0a, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb9, 0x0c, 0xff, 0xfe, 0xba, 0x0d, 0xff, 0xfd, 0xb9, 0x0d, 0xff, 0xfd, 0xb7, 0x0d, 0xff, 0xfd, 0xb7, 0x0c, 0xff, 0xfd, 0xb7, 0x0c, 0xff, 0xfd, 0xb8, 0x0c, 0xff, 0xfd, 0xb8, 0x0c, 0xff, 0xfd, 0xb9, 0x0c, 0xff, 0xfd, 0xb9, 0x0b, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb8, 0x09, 0xff, 0xfd, 0xb4, 0x00, 0xff, 0xfc, 0xc1, 0x31, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xf8, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xff, 0xfe, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xdf, 0xd4, 0xd0, 0xff, 0xad, 0x8f, 0x8b, 0xff, 0x7e, 0x4d, 0x48, 0xff, 0x62, 0x22, 0x1c, 0xff, 0x52, 0x0b, 0x02, 0xff, 0x4b, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff, 0x4b, 0x01, 0x00, 0xff, 0x4e, 0x03, 0x00, 0xff, 0x4e, 0x03, 0x00, 0xff, 0x4c, 0x02, 0x00, 0xff, 0x4b, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff, 0x4c, 0x02, 0x00, 0xff, 0x59, 0x11, 0x0a, 0xff, 0x70, 0x33, 0x2e, 0xff, 0x9a, 0x6f, 0x6d, 0xff, 0xd2, 0xbe, 0xbb, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf8, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfe, 0xfd, 0xf6, 0xff,
0xfd, 0xfb, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf9, 0xf6, 0xf0, 0xff, 0xfc, 0xf5, 0xef, 0xff, 0xfd, 0xf9, 0xf8, 0xff, 0xfc, 0xd0, 0x68, 0xff, 0xfd, 0xb3, 0x00, 0xff, 0xfd, 0xb7, 0x0a, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfc, 0xb7, 0x0b, 0xff, 0xfd, 0xb5, 0x0b, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb2, 0x0d, 0xff, 0xfd, 0xb1, 0x0e, 0xff, 0xfd, 0xb1, 0x0c, 0xff, 0xfd, 0xb2, 0x0c, 0xff, 0xfd, 0xb3, 0x0d, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb4, 0x0b, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0b, 0xff, 0xfd, 0xb4, 0x0a, 0xff, 0xfd, 0xb5, 0x0b, 0xff, 0xfd, 0xb5, 0x0c, 0xff, 0xfd, 0xb4, 0x0d, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0a, 0xff, 0xfd, 0xb4, 0x08, 0xff, 0xfd, 0xb3, 0x09, 0xff, 0xfd, 0xb3, 0x0b, 0xff, 0xfd, 0xb4, 0x0a, 0xff, 0xfd, 0xb6, 0x0b, 0xff, 0xfd, 0xb6, 0x0c, 0xff, 0xfd, 0xb7, 0x0c, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb8, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb7, 0x0c, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb6, 0x0b, 0xff, 0xfd, 0xb6, 0x0c, 0xff, 0xfd, 0xb5, 0x0d, 0xff, 0xfd, 0xb5, 0x0c, 0xff, 0xfd, 0xb5, 0x0c, 0xff, 0xfd, 0xb6, 0x0c, 0xff, 0xfc, 0xb7, 0x0b, 0xff, 0xfd, 0xb7, 0x0b, 0xff, 0xfd, 0xb6, 0x0a, 0xff, 0xfd, 0xb4, 0x03, 0xff, 0xfc, 0xbb, 0x1c, 0xff, 0xfd, 0xf6, 0xe7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf8, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xc1, 0xa8, 0xa2, 0xff, 0x7f, 0x49, 0x41, 0xff, 0x54, 0x0f, 0x05, 0xff, 0x49, 0x00, 0x00, 0xff, 0x4b, 0x02, 0x00, 0xff, 0x52, 0x07, 0x00, 0xff, 0x54, 0x0c, 0x00, 0xff, 0x55, 0x0d, 0x02, 0xff, 0x54, 0x0d, 0x03, 0xff, 0x54, 0x0d, 0x03, 0xff, 0x54, 0x0e, 0x02, 0xff, 0x55, 0x0f, 0x03, 0xff, 0x55, 0x0f, 0x04, 0xff, 0x54, 0x0e, 0x03, 0xff, 0x54, 0x0d, 0x03, 0xff, 0x55, 0x0c, 0x01, 0xff, 0x55, 0x0c, 0x01, 0xff, 0x56, 0x0b, 0x01, 0xff, 0x55, 0x09, 0x00, 0xff, 0x51, 0x03, 0x00, 0xff, 0x4c, 0x00, 0x00, 0xff, 0x4e, 0x04, 0x00, 0xff, 0x6e, 0x32, 0x2b, 0xff, 0xb5, 0x96, 0x91, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfe, 0xfd, 0xf7, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf0, 0xff, 0xfc, 0xf5, 0xed, 0xff, 0xfe, 0xf7, 0xf5, 0xff, 0xfc, 0xcc, 0x5d, 0xff, 0xfd, 0xb3, 0x00, 0xff, 0xfd, 0xb5, 0x09, 0xff, 0xfd, 0xb5, 0x0b, 0xff, 0xfd, 0xb6, 0x0b, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb2, 0x0c, 0xff, 0xfd, 0xb1, 0x0d, 0xff, 0xfd, 0xb0, 0x0d, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xb0, 0x0c, 0xff, 0xfd, 0xb1, 0x0d, 0xff, 0xfd, 0xb1, 0x0d, 0xff, 0xfd, 0xb1, 0x0c, 0xff, 0xfd, 0xb1, 0x0c, 0xff, 0xfd, 0xb1, 0x0c, 0xff, 0xfd, 0xb1, 0x0b, 0xff, 0xfd, 0xb2, 0x0b, 0xff, 0xfd, 0xb3, 0x0b, 0xff, 0xfd, 0xb2, 0x0d, 0xff, 0xfd, 0xb2, 0x0d, 0xff, 0xfd, 0xb2, 0x0c, 0xff, 0xfd, 0xb2, 0x0d, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb2, 0x0b, 0xff, 0xfd, 0xb1, 0x0b, 0xff, 0xfd, 0xb0, 0x0d, 0xff, 0xfd, 0xb1, 0x0d, 0xff, 0xfd, 0xb3, 0x0d, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0b, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb4, 0x0b, 0xff, 0xfd, 0xb4, 0x0b, 0xff, 0xfd, 0xb3, 0x0b, 0xff, 0xfd, 0xb4, 0x0d, 0xff, 0xfd, 0xb3, 0x0d, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb3, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb4, 0x0c, 0xff, 0xfd, 0xb2, 0x05, 0xff, 0xfc, 0xb8, 0x19, 0xff, 0xfc, 0xf6, 0xe3, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfb, 0xf5, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0xb4, 0xaf, 0xff, 0x72, 0x36, 0x2e, 0xff, 0x4c, 0x00, 0x00, 0xff, 0x4f, 0x02, 0x00, 0xff, 0x55, 0x0b, 0x00, 0xff, 0x55, 0x0e, 0x02, 0xff, 0x55, 0x0f, 0x03, 0xff, 0x57, 0x0f, 0x03, 0xff, 0x56, 0x10, 0x04, 0xff, 0x57, 0x10, 0x05, 0xff, 0x58, 0x10, 0x05, 0xff, 0x58, 0x10, 0x05, 0xff, 0x58, 0x10, 0x04, 0xff, 0x58, 0x10, 0x04, 0xff, 0x57, 0x10, 0x04, 0xff, 0x57, 0x0f, 0x04, 0xff, 0x57, 0x0e, 0x04, 0xff, 0x57, 0x0e, 0x02, 0xff, 0x57, 0x0d, 0x03, 0xff, 0x57, 0x0d, 0x04, 0xff, 0x57, 0x0d, 0x03, 0xff, 0x57, 0x0c, 0x02, 0xff, 0x57, 0x0b, 0x01, 0xff, 0x55, 0x0a, 0x00, 0xff, 0x4e, 0x02, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff, 0x69, 0x2d, 0x27, 0xff, 0xc8, 0xb0, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf9, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfe, 0xfd, 0xf7, 0xff,
0xfc, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xfa, 0xf5, 0xef, 0xff, 0xfc, 0xf4, 0xec, 0xff, 0xfd, 0xf5, 0xf4, 0xff, 0xfc, 0xcb, 0x5d, 0xff, 0xfd, 0xb0, 0x00, 0xff, 0xfd, 0xb2, 0x0b, 0xff, 0xfe, 0xb2, 0x0b, 0xff, 0xfd, 0xb3, 0x0b, 0xff, 0xfd, 0xb1, 0x0c, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xaf, 0x0c, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xae, 0x0d, 0xff, 0xfd, 0xae, 0x0d, 0xff, 0xfd, 0xad, 0x0d, 0xff, 0xfd, 0xae, 0x0d, 0xff, 0xfd, 0xae, 0x0d, 0xff, 0xfe, 0xaf, 0x0c, 0xff, 0xfd, 0xae, 0x0c, 0xff, 0xfe, 0xaf, 0x0c, 0xff, 0xfd, 0xaf, 0x0b, 0xff, 0xfe, 0xaf, 0x0a, 0xff, 0xfe, 0xaf, 0x0a, 0xff, 0xfd, 0xaf, 0x0a, 0xff, 0xfd, 0xaf, 0x0a, 0xff, 0xfd, 0xb0, 0x0b, 0xff, 0xfd, 0xaf, 0x0c, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb1, 0x0e, 0xff, 0xfd, 0xb0, 0x0d, 0xff, 0xfc, 0xaf, 0x0d, 0xff, 0xfd, 0xaf, 0x0d, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb0, 0x0d, 0xff, 0xfd, 0xaf, 0x0c, 0xff, 0xfd, 0xb0, 0x0c, 0xff, 0xfd, 0xb0, 0x0b, 0xff, 0xfe, 0xb0, 0x0b, 0xff, 0xfd, 0xb0, 0x0a, 0xff, 0xfd, 0xb0, 0x0c, 0xff, 0xfd, 0xb0, 0x0d, 0xff, 0xfd, 0xb1, 0x0e, 0xff, 0xfd, 0xb2, 0x0d, 0xff, 0xfd, 0xb2, 0x0c, 0xff, 0xfd, 0xb1, 0x0e, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb1, 0x0e, 0xff, 0xfd, 0xaf, 0x06, 0xff, 0xfc, 0xb6, 0x19, 0xff, 0xfd, 0xf5, 0xe4, 0xff, 0xfc, 0xfa, 0xf7, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf1, 0xeb, 0xff, 0x91, 0x65, 0x5d, 0xff, 0x4d, 0x03, 0x00, 0xff, 0x4e, 0x03, 0x00, 0xff, 0x55, 0x0c, 0x01, 0xff, 0x56, 0x0e, 0x02, 0xff, 0x56, 0x0f, 0x03, 0xff, 0x57, 0x10, 0x05, 0xff, 0x58, 0x11, 0x05, 0xff, 0x58, 0x11, 0x06, 0xff, 0x58, 0x11, 0x07, 0xff, 0x58, 0x11, 0x07, 0xff, 0x59, 0x11, 0x07, 0xff, 0x59, 0x11, 0x07, 0xff, 0x59, 0x10, 0x06, 0xff, 0x58, 0x10, 0x05, 0xff, 0x58, 0x0f, 0x04, 0xff, 0x57, 0x0e, 0x01, 0xff, 0x54, 0x0d, 0x00, 0xff, 0x51, 0x0b, 0x00, 0xff, 0x4f, 0x0a, 0x00, 0xff, 0x4e, 0x09, 0x00, 0xff, 0x4d, 0x08, 0x00, 0xff, 0x4d, 0x08, 0x00, 0xff, 0x4e, 0x08, 0x00, 0xff, 0x52, 0x0a, 0x00, 0xff, 0x54, 0x09, 0x00, 0xff, 0x53, 0x09, 0x00, 0xff, 0x4c, 0x01, 0x00, 0xff, 0x4c, 0x03, 0x00, 0xff, 0x9a, 0x6f, 0x68, 0xff, 0xfb, 0xf7, 0xf3, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfd, 0xfd, 0xf8, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf5, 0xef, 0xff, 0xfa, 0xf4, 0xed, 0xff, 0xfb, 0xf2, 0xeb, 0xff, 0xfc, 0xf4, 0xf2, 0xff, 0xfc, 0xc7, 0x5d, 0xff, 0xfd, 0xaa, 0x00, 0xff, 0xfd, 0xae, 0x0c, 0xff, 0xfc, 0xaf, 0x0d, 0xff, 0xfc, 0xaf, 0x0d, 0xff, 0xfd, 0xae, 0x0d, 0xff, 0xfd, 0xad, 0x0c, 0xff, 0xfd, 0xad, 0x0c, 0xff, 0xfd, 0xad, 0x0c, 0xff, 0xfd, 0xab, 0x0b, 0xff, 0xfd, 0xac, 0x0c, 0xff, 0xfd, 0xad, 0x0d, 0xff, 0xfd, 0xad, 0x0d, 0xff, 0xfd, 0xad, 0x0d, 0xff, 0xfd, 0xad, 0x0c, 0xff, 0xfd, 0xae, 0x0c, 0xff, 0xfd, 0xae, 0x0c, 0xff, 0xfd, 0xad, 0x0c, 0xff, 0xfd, 0xad, 0x0c, 0xff, 0xfd, 0xab, 0x06, 0xff, 0xfd, 0xa9, 0x00, 0xff, 0xfd, 0xaa, 0x00, 0xff, 0xfd, 0xa9, 0x00, 0xff, 0xfd, 0xa9, 0x00, 0xff, 0xfd, 0xa9, 0x00, 0xff, 0xfd, 0xac, 0x08, 0xff, 0xfd, 0xae, 0x0d, 0xff, 0xfc, 0xaf, 0x0e, 0xff, 0xfd, 0xaf, 0x0f, 0xff, 0xfd, 0xaf, 0x0f, 0xff, 0xfd, 0xaf, 0x0e, 0xff, 0xfc, 0xae, 0x0e, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfc, 0xae, 0x0e, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfd, 0xae, 0x09, 0xff, 0xfd, 0xab, 0x00, 0xff, 0xfd, 0xab, 0x00, 0xff, 0xfe, 0xaa, 0x00, 0xff, 0xfd, 0xa9, 0x00, 0xff, 0xfd, 0xac, 0x04, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb1, 0x0f, 0xff, 0xfc, 0xb2, 0x0f, 0xff, 0xfd, 0xb2, 0x0f, 0xff, 0xfd, 0xb0, 0x0f, 0xff, 0xfd, 0xaf, 0x0e, 0xff, 0xfc, 0xae, 0x0e, 0xff, 0xfd, 0xaf, 0x0e, 0xff, 0xfd, 0xaf, 0x0f, 0xff, 0xfd, 0xae, 0x08, 0xff, 0xfc, 0xb5, 0x1a, 0xff, 0xfd, 0xf5, 0xe4, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xdb, 0xd6, 0xff, 0x6f, 0x36, 0x2e, 0xff, 0x46, 0x00, 0x00, 0xff, 0x51, 0x09, 0x00, 0xff, 0x55, 0x0d, 0x03, 0xff, 0x57, 0x0e, 0x03, 0xff, 0x58, 0x10, 0x05, 0xff, 0x58, 0x11, 0x06, 0xff, 0x58, 0x11, 0x07, 0xff, 0x58, 0x12, 0x07, 0xff, 0x58, 0x12, 0x07, 0xff, 0x59, 0x12, 0x08, 0xff, 0x59, 0x12, 0x08, 0xff, 0x5a, 0x11, 0x08, 0xff, 0x5a, 0x10, 0x07, 0xff, 0x58, 0x0f, 0x04, 0xff, 0x52, 0x0c, 0x00, 0xff, 0x4e, 0x09, 0x00, 0xff, 0x5e, 0x0d, 0x06, 0xff, 0x78, 0x15, 0x1c, 0xff, 0x91, 0x1e, 0x32, 0xff, 0xa0, 0x24, 0x3e, 0xff, 0xa5, 0x27, 0x41, 0xff, 0xa3, 0x25, 0x3d, 0xff, 0x96, 0x20, 0x31, 0xff, 0x79, 0x16, 0x1d, 0xff, 0x5c, 0x0c, 0x07, 0xff, 0x4d, 0x06, 0x00, 0xff, 0x4d, 0x07, 0x00, 0xff, 0x51, 0x09, 0x01, 0xff, 0x4f, 0x07, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff, 0x7b, 0x46, 0x41, 0xff, 0xf2, 0xed, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf9, 0xf4, 0xed, 0xff, 0xfa, 0xf2, 0xeb, 0xff, 0xfb, 0xf1, 0xea, 0xff, 0xfc, 0xf2, 0xf1, 0xff, 0xfb, 0xc4, 0x5d, 0xff, 0xfd, 0xa8, 0x00, 0xff, 0xfd, 0xad, 0x0d, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfd, 0xad, 0x0d, 0xff, 0xfd, 0xad, 0x0d, 0xff, 0xfd, 0xac, 0x0d, 0xff, 0xfd, 0xac, 0x0d, 0xff, 0xfd, 0xaa, 0x0d, 0xff, 0xfd, 0xa9, 0x0c, 0xff, 0xfd, 0xa9, 0x0c, 0xff, 0xfd, 0xaa, 0x0e, 0xff, 0xfd, 0xac, 0x0e, 0xff, 0xfd, 0xad, 0x0f, 0xff, 0xfd, 0xad, 0x0e, 0xff, 0xfd, 0xad, 0x0e, 0xff, 0xfd, 0xad, 0x0f, 0xff, 0xfd, 0xac, 0x0e, 0xff, 0xfd, 0xaa, 0x07, 0xff, 0xfb, 0xb6, 0x27, 0xff, 0xfb, 0xca, 0x60, 0xff, 0xfc, 0xc9, 0x5e, 0xff, 0xfc, 0xc9, 0x5e, 0xff, 0xfc, 0xcb, 0x63, 0xff, 0xfc, 0xca, 0x60, 0xff, 0xfc, 0xb1, 0x1b, 0xff, 0xfd, 0xab, 0x09, 0xff, 0xfd, 0xad, 0x0f, 0xff, 0xfd, 0xae, 0x10, 0xff, 0xfd, 0xaf, 0x10, 0xff, 0xfd, 0xae, 0x10, 0xff, 0xfc, 0xae, 0x0f, 0xff, 0xfc, 0xae, 0x0f, 0xff, 0xfc, 0xae, 0x0e, 0xff, 0xfd, 0xae, 0x0e, 0xff, 0xfd, 0xad, 0x0e, 0xff, 0xfd, 0xac, 0x0a, 0xff, 0xfc, 0xb5, 0x1d, 0xff, 0xfc, 0xce, 0x65, 0xff, 0xfc, 0xcd, 0x66, 0xff, 0xfc, 0xcc, 0x66, 0xff, 0xfc, 0xcd, 0x6a, 0xff, 0xfc, 0xc5, 0x4e, 0xff, 0xfd, 0xb0, 0x0e, 0xff, 0xfd, 0xb0, 0x0f, 0xff, 0xfd, 0xb0, 0x11, 0xff, 0xfd, 0xb0, 0x0f, 0xff, 0xfd, 0xaf, 0x0f, 0xff, 0xfc, 0xae, 0x0f, 0xff, 0xfc, 0xae, 0x0f, 0xff, 0xfc, 0xae, 0x0f, 0xff, 0xfd, 0xae, 0x0f, 0xff, 0xfd, 0xac, 0x09, 0xff, 0xfc, 0xb3, 0x1a, 0xff, 0xfd, 0xf4, 0xe3, 0xff, 0xfc, 0xfa, 0xf7, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xda, 0xd5, 0xff, 0x61, 0x24, 0x1c, 0xff, 0x48, 0x00, 0x00, 0xff, 0x52, 0x0c, 0x02, 0xff, 0x54, 0x0e, 0x04, 0xff, 0x57, 0x0f, 0x05, 0xff, 0x58, 0x10, 0x05, 0xff, 0x59, 0x11, 0x07, 0xff, 0x59, 0x12, 0x07, 0xff, 0x59, 0x12, 0x07, 0xff, 0x5a, 0x12, 0x07, 0xff, 0x59, 0x13, 0x06, 0xff, 0x5a, 0x12, 0x06, 0xff, 0x5a, 0x11, 0x07, 0xff, 0x5a, 0x10, 0x05, 0xff, 0x56, 0x0e, 0x02, 0xff, 0x52, 0x0a, 0x00, 0xff, 0x76, 0x16, 0x1b, 0xff, 0xb6, 0x2c, 0x4e, 0xff, 0xd5, 0x35, 0x6a, 0xff, 0xcc, 0x33, 0x68, 0xff, 0xb9, 0x2b, 0x56, 0xff, 0xa8, 0x25, 0x44, 0xff, 0x9e, 0x23, 0x3b, 0xff, 0xa1, 0x24, 0x3c, 0xff, 0xb2, 0x2a, 0x47, 0xff, 0xc8, 0x36, 0x56, 0xff, 0xd4, 0x3b, 0x5a, 0xff, 0xc0, 0x32, 0x49, 0xff, 0x80, 0x18, 0x1d, 0xff, 0x4d, 0x07, 0x00, 0xff, 0x49, 0x05, 0x00, 0xff, 0x4f, 0x07, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff, 0x73, 0x3b, 0x36, 0xff, 0xf5, 0xf2, 0xef, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf4, 0xed, 0xff, 0xfb, 0xf2, 0xea, 0xff, 0xfb, 0xf0, 0xe8, 0xff, 0xfc, 0xf1, 0xef, 0xff, 0xfc, 0xc2, 0x5d, 0xff, 0xfd, 0xa7, 0x03, 0xff, 0xfd, 0xac, 0x0f, 0xff, 0xfd, 0xad, 0x0f, 0xff, 0xfd, 0xac, 0x0e, 0xff, 0xfd, 0xac, 0x0f, 0xff, 0xfd, 0xaa, 0x0e, 0xff, 0xfd, 0xaa, 0x0e, 0xff, 0xfd, 0xa9, 0x0e, 0xff, 0xfd, 0xa8, 0x0f, 0xff, 0xfd, 0xa7, 0x0e, 0xff, 0xfd, 0xa8, 0x0f, 0xff, 0xfd, 0xa9, 0x10, 0xff, 0xfd, 0xab, 0x10, 0xff, 0xfe, 0xad, 0x12, 0xff, 0xfd, 0xad, 0x13, 0xff, 0xfd, 0xab, 0x11, 0xff, 0xfd, 0xa9, 0x0f, 0xff, 0xfd, 0xaa, 0x0d, 0xff, 0xfb, 0xea, 0xc2, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xfe, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xdc, 0x9a, 0xff, 0xfd, 0xa7, 0x01, 0xff, 0xfd, 0xab, 0x0d, 0xff, 0xfd, 0xad, 0x11, 0xff, 0xfc, 0xad, 0x12, 0xff, 0xfd, 0xad, 0x11, 0xff, 0xfd, 0xad, 0x11, 0xff, 0xfd, 0xae, 0x10, 0xff, 0xfc, 0xae, 0x10, 0xff, 0xfd, 0xae, 0x10, 0xff, 0xfd, 0xad, 0x10, 0xff, 0xfd, 0xa8, 0x02, 0xff, 0xfc, 0xce, 0x6d, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xf9, 0xec, 0xff, 0xfc, 0xb5, 0x22, 0xff, 0xfd, 0xad, 0x0b, 0xff, 0xfd, 0xaf, 0x10, 0xff, 0xfc, 0xae, 0x10, 0xff, 0xfd, 0xae, 0x10, 0xff, 0xfd, 0xad, 0x11, 0xff, 0xfd, 0xad, 0x11, 0xff, 0xfd, 0xad, 0x10, 0xff, 0xfd, 0xad, 0x0f, 0xff, 0xfd, 0xaa, 0x09, 0xff, 0xfc, 0xb0, 0x1b, 0xff, 0xfd, 0xf4, 0xe2, 0xff, 0xfb, 0xfa, 0xf7, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xf2, 0xed, 0xe8, 0xff, 0x6b, 0x31, 0x2a, 0xff, 0x48, 0x00, 0x00, 0xff, 0x52, 0x0c, 0x02, 0xff, 0x54, 0x0e, 0x04, 0xff, 0x55, 0x10, 0x06, 0xff, 0x58, 0x11, 0x07, 0xff, 0x59, 0x12, 0x07, 0xff, 0x5a, 0x13, 0x08, 0xff, 0x5a, 0x13, 0x08, 0xff, 0x5a, 0x13, 0x08, 0xff, 0x5b, 0x13, 0x08, 0xff, 0x5b, 0x12, 0x07, 0xff, 0x5b, 0x11, 0x05, 0xff, 0x5a, 0x10, 0x04, 0xff, 0x54, 0x0c, 0x00, 0xff, 0x6b, 0x11, 0x0e, 0xff, 0xc0, 0x2e, 0x52, 0xff, 0xd2, 0x36, 0x64, 0xff, 0x98, 0x21, 0x38, 0xff, 0x62, 0x0d, 0x10, 0xff, 0x4d, 0x05, 0x00, 0xff, 0x49, 0x03, 0x00, 0xff, 0x49, 0x01, 0x00, 0xff, 0x49, 0x01, 0x00, 0xff, 0x47, 0x00, 0x00, 0xff, 0x48, 0x01, 0x00, 0xff, 0x4f, 0x03, 0x00, 0xff, 0x62, 0x0c, 0x09, 0xff, 0x8c, 0x1e, 0x26, 0xff, 0xc9, 0x34, 0x4a, 0xff, 0xcb, 0x32, 0x4a, 0xff, 0x78, 0x14, 0x17, 0xff, 0x49, 0x05, 0x00, 0xff, 0x50, 0x07, 0x00, 0xff, 0x47, 0x00, 0x00, 0xff, 0x83, 0x4f, 0x4a, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xfa, 0xf4, 0xed, 0xff, 0xfb, 0xf2, 0xea, 0xff, 0xfb, 0xef, 0xe7, 0xff, 0xfd, 0xef, 0xec, 0xff, 0xfc, 0xc1, 0x5d, 0xff, 0xfd, 0xa6, 0x06, 0xff, 0xfd, 0xaa, 0x11, 0xff, 0xfd, 0xab, 0x12, 0xff, 0xfd, 0xab, 0x11, 0xff, 0xfc, 0xaa, 0x11, 0xff, 0xfd, 0xa8, 0x10, 0xff, 0xfd, 0xa8, 0x10, 0xff, 0xfd, 0xa7, 0x10, 0xff, 0xfc, 0xa5, 0x0f, 0xff, 0xfc, 0xa5, 0x0f, 0xff, 0xfd, 0xa5, 0x10, 0xff, 0xfd, 0xa7, 0x11, 0xff, 0xfd, 0xa8, 0x12, 0xff, 0xfd, 0xab, 0x13, 0xff, 0xfd, 0xab, 0x15, 0xff, 0xfd, 0xa9, 0x14, 0xff, 0xfd, 0xa5, 0x0a, 0xff, 0xfb, 0xbd, 0x46, 0xff, 0xfb, 0xfd, 0xfa, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xfb, 0xff, 0xfd, 0xf6, 0xe7, 0xff, 0xfc, 0xb1, 0x23, 0xff, 0xfd, 0xa8, 0x09, 0xff, 0xfd, 0xaa, 0x11, 0xff, 0xfd, 0xaa, 0x13, 0xff, 0xfd, 0xab, 0x13, 0xff, 0xfc, 0xac, 0x13, 0xff, 0xfd, 0xac, 0x14, 0xff, 0xfd, 0xad, 0x14, 0xff, 0xfd, 0xad, 0x14, 0xff, 0xfd, 0xab, 0x12, 0xff, 0xfd, 0xa6, 0x03, 0xff, 0xfc, 0xd0, 0x75, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfd, 0xfe, 0xfc, 0xff, 0xfd, 0xf9, 0xea, 0xff, 0xfc, 0xb5, 0x26, 0xff, 0xfd, 0xac, 0x0c, 0xff, 0xfc, 0xad, 0x11, 0xff, 0xfd, 0xac, 0x12, 0xff, 0xfd, 0xac, 0x12, 0xff, 0xfe, 0xab, 0x12, 0xff, 0xfd, 0xac, 0x11, 0xff, 0xfd, 0xad, 0x12, 0xff, 0xfd, 0xad, 0x11, 0xff, 0xfd, 0xaa, 0x0a, 0xff, 0xfc, 0xb1, 0x1b, 0xff, 0xfd, 0xf4, 0xe2, 0xff, 0xfb, 0xfa, 0xf7, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0x5d, 0x56, 0xff, 0x47, 0x00, 0x00, 0xff, 0x53, 0x0d, 0x03, 0xff, 0x54, 0x0e, 0x04, 0xff, 0x56, 0x10, 0x06, 0xff, 0x57, 0x12, 0x07, 0xff, 0x59, 0x13, 0x08, 0xff, 0x5a, 0x13, 0x09, 0xff, 0x5b, 0x14, 0x09, 0xff, 0x5a, 0x15, 0x08, 0xff, 0x5a, 0x14, 0x09, 0xff, 0x5b, 0x14, 0x08, 0xff, 0x5c, 0x13, 0x06, 0xff, 0x5c, 0x10, 0x04, 0xff, 0x51, 0x0b, 0x00, 0xff, 0x81, 0x18, 0x1f, 0xff, 0xde, 0x38, 0x64, 0xff, 0x9d, 0x23, 0x3c, 0xff, 0x52, 0x06, 0x02, 0xff, 0x48, 0x03, 0x00, 0xff, 0x49, 0x01, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff, 0x4f, 0x02, 0x00, 0xff, 0x5d, 0x11, 0x00, 0xff, 0x66, 0x1d, 0x01, 0xff, 0x69, 0x20, 0x01, 0xff, 0x64, 0x18, 0x01, 0xff, 0x5a, 0x09, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff, 0x4d, 0x04, 0x00, 0xff, 0x82, 0x18, 0x1d, 0xff, 0xd6, 0x35, 0x4c, 0xff, 0xae, 0x24, 0x31, 0xff, 0x55, 0x06, 0x00, 0xff, 0x51, 0x05, 0x00, 0xff, 0x4b, 0x00, 0x00, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xfa, 0xf4, 0xef, 0xff, 0xfb, 0xf3, 0xec, 0xff, 0xfb, 0xf1, 0xe9, 0xff, 0xfc, 0xee, 0xe6, 0xff, 0xfd, 0xee, 0xeb, 0xff, 0xfb, 0xbf, 0x5f, 0xff, 0xfd, 0xa4, 0x08, 0xff, 0xfd, 0xa7, 0x12, 0xff, 0xfd, 0xa8, 0x13, 0xff, 0xfd, 0xa8, 0x13, 0xff, 0xfd, 0xa7, 0x12, 0xff, 0xfc, 0xa6, 0x12, 0xff, 0xfd, 0xa5, 0x12, 0xff, 0xfd, 0xa4, 0x12, 0xff, 0xfd, 0xa4, 0x12, 0xff, 0xfc, 0xa4, 0x12, 0xff, 0xfc, 0xa4, 0x12, 0xff, 0xfd, 0xa5, 0x13, 0xff, 0xfd, 0xa6, 0x13, 0xff, 0xfd, 0xa8, 0x15, 0xff, 0xfd, 0xa8, 0x15, 0xff, 0xfd, 0xa7, 0x15, 0xff, 0xfc, 0xa2, 0x08, 0xff, 0xfb, 0xdd, 0xa2, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xcb, 0x76, 0xff, 0xfd, 0xa3, 0x04, 0xff, 0xfd, 0xa7, 0x11, 0xff, 0xfd, 0xa7, 0x13, 0xff, 0xfd, 0xa8, 0x15, 0xff, 0xfd, 0xa9, 0x16, 0xff, 0xfd, 0xaa, 0x16, 0xff, 0xfd, 0xab, 0x15, 0xff, 0xfd, 0xab, 0x15, 0xff, 0xfd, 0xaa, 0x14, 0xff, 0xfd, 0xa4, 0x04, 0xff, 0xfc, 0xce, 0x74, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfd, 0xfb, 0xff, 0xfd, 0xf9, 0xe9, 0xff, 0xfc, 0xb4, 0x25, 0xff, 0xfd, 0xab, 0x0b, 0xff, 0xfd, 0xad, 0x13, 0xff, 0xfd, 0xac, 0x15, 0xff, 0xfd, 0xab, 0x14, 0xff, 0xfe, 0xab, 0x13, 0xff, 0xfd, 0xac, 0x14, 0xff, 0xfd, 0xad, 0x14, 0xff, 0xfd, 0xac, 0x14, 0xff, 0xfd, 0xaa, 0x0e, 0xff, 0xfc, 0xb0, 0x1d, 0xff, 0xfd, 0xf3, 0xe1, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xaf, 0xaa, 0xff, 0x4a, 0x03, 0x00, 0xff, 0x50, 0x0b, 0x01, 0xff, 0x54, 0x0e, 0x05, 0xff, 0x55, 0x10, 0x06, 0xff, 0x57, 0x11, 0x07, 0xff, 0x58, 0x12, 0x08, 0xff, 0x5a, 0x13, 0x08, 0xff, 0x5b, 0x14, 0x09, 0xff, 0x5c, 0x15, 0x09, 0xff, 0x5c, 0x16, 0x09, 0xff, 0x5c, 0x15, 0x09, 0xff, 0x5c, 0x13, 0x07, 0xff, 0x5b, 0x12, 0x05, 0xff, 0x54, 0x0e, 0x00, 0xff, 0x88, 0x1c, 0x26, 0xff, 0xdf, 0x3b, 0x6a, 0xff, 0x74, 0x14, 0x1c, 0xff, 0x46, 0x04, 0x00, 0xff, 0x4c, 0x03, 0x00, 0xff, 0x4c, 0x00, 0x00, 0xff, 0x72, 0x24, 0x01, 0xff, 0xad, 0x64, 0x02, 0xff, 0xcf, 0x91, 0x02, 0xff, 0xd5, 0x9e, 0x03, 0xff, 0xd2, 0x9c, 0x02, 0xff, 0xd1, 0x9a, 0x02, 0xff, 0xd5, 0x9b, 0x03, 0xff, 0xd6, 0x97, 0x03, 0xff, 0xc2, 0x7e, 0x03, 0xff, 0x8f, 0x45, 0x02, 0xff, 0x5a, 0x0b, 0x01, 0xff, 0x45, 0x00, 0x00, 0xff, 0x54, 0x05, 0x03, 0xff, 0xbe, 0x2c, 0x3f, 0xff, 0xc3, 0x2c, 0x3f, 0xff, 0x55, 0x05, 0x00, 0xff, 0x4f, 0x04, 0x00, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf0, 0xff, 0xfa, 0xf4, 0xed, 0xff, 0xfb, 0xf3, 0xec, 0xff, 0xfb, 0xf0, 0xe8, 0xff, 0xfb, 0xed, 0xe5, 0xff, 0xfd, 0xed, 0xea, 0xff, 0xfc, 0xbe, 0x5f, 0xff, 0xfd, 0xa2, 0x09, 0xff, 0xfc, 0xa5, 0x13, 0xff, 0xfd, 0xa6, 0x15, 0xff, 0xfd, 0xa6, 0x16, 0xff, 0xfd, 0xa6, 0x16, 0xff, 0xfd, 0xa5, 0x17, 0xff, 0xfd, 0xa4, 0x17, 0xff, 0xfd, 0xa4, 0x16, 0xff, 0xfd, 0xa3, 0x15, 0xff, 0xfd, 0xa3, 0x15, 0xff, 0xfd, 0xa3, 0x16, 0xff, 0xfd, 0xa4, 0x16, 0xff, 0xfd, 0xa5, 0x17, 0xff, 0xfd, 0xa6, 0x18, 0xff, 0xfd, 0xa6, 0x18, 0xff, 0xfd, 0xa3, 0x11, 0xff, 0xfc, 0xae, 0x2a, 0xff, 0xfb, 0xf7, 0xea, 0xff, 0xfc, 0xfc, 0xfa, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xfb, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfc, 0xfe, 0xfd, 0xff, 0xfd, 0xeb, 0xcc, 0xff, 0xfc, 0xa4, 0x13, 0xff, 0xfd, 0xa5, 0x10, 0xff, 0xfd, 0xa5, 0x14, 0xff, 0xfd, 0xa5, 0x16, 0xff, 0xfd, 0xa6, 0x18, 0xff, 0xfd, 0xa7, 0x17, 0xff, 0xfd, 0xa8, 0x17, 0xff, 0xfd, 0xa8, 0x19, 0xff, 0xfd, 0xa8, 0x17, 0xff, 0xfd, 0xa2, 0x06, 0xff, 0xfc, 0xcd, 0x74, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfd, 0xf9, 0xeb, 0xff, 0xfc, 0xb4, 0x27, 0xff, 0xfd, 0xa9, 0x0c, 0xff, 0xfd, 0xab, 0x15, 0xff, 0xfc, 0xab, 0x16, 0xff, 0xfd, 0xaa, 0x16, 0xff, 0xfd, 0xaa, 0x15, 0xff, 0xfc, 0xab, 0x16, 0xff, 0xfd, 0xab, 0x17, 0xff, 0xfd, 0xab, 0x17, 0xff, 0xfd, 0xa8, 0x10, 0xff, 0xfc, 0xaf, 0x1e, 0xff, 0xfd, 0xf3, 0xe2, 0xff, 0xfc, 0xfa, 0xf7, 0xff, 0xfa, 0xf8, 0xf1, 0xff, 0xf8, 0xf8, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0x6d, 0x35, 0x2d, 0xff, 0x4d, 0x04, 0x00, 0xff, 0x53, 0x0e, 0x04, 0xff, 0x54, 0x10, 0x06, 0xff, 0x57, 0x11, 0x07, 0xff, 0x57, 0x12, 0x08, 0xff, 0x58, 0x12, 0x09, 0xff, 0x5a, 0x13, 0x09, 0xff, 0x5d, 0x15, 0x09, 0xff, 0x5d, 0x15, 0x09, 0xff, 0x5c, 0x15, 0x09, 0xff, 0x5c, 0x14, 0x08, 0xff, 0x5d, 0x13, 0x06, 0xff, 0x58, 0x0f, 0x02, 0xff, 0x73, 0x14, 0x12, 0xff, 0xe1, 0x3c, 0x66, 0xff, 0x72, 0x14, 0x19, 0xff, 0x48, 0x04, 0x00, 0xff, 0x4a, 0x00, 0x00, 0xff, 0x70, 0x20, 0x01, 0xff, 0xc6, 0x7a, 0x02, 0xff, 0xd7, 0x99, 0x03, 0xff, 0xa4, 0x6a, 0x02, 0xff, 0x77, 0x33, 0x01, 0xff, 0x60, 0x17, 0x01, 0xff, 0x58, 0x0d, 0x01, 0xff, 0x55, 0x0b, 0x01, 0xff, 0x59, 0x10, 0x01, 0xff, 0x6a, 0x23, 0x01, 0xff, 0x92, 0x4f, 0x03, 0xff, 0xc8, 0x8b, 0x03, 0xff, 0xda, 0x9b, 0x03, 0xff, 0x96, 0x4d, 0x02, 0xff, 0x4c, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff, 0xb7, 0x28, 0x3d, 0xff, 0xba, 0x26, 0x3c, 0xff, 0x4a, 0x02, 0x00, 0xff,
0xfd, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfb, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xfa, 0xf4, 0xed, 0xff, 0xfb, 0xf3, 0xec, 0xff, 0xfc, 0xf1, 0xe9, 0xff, 0xfc, 0xed, 0xe6, 0xff, 0xfd, 0xed, 0xe9, 0xff, 0xfc, 0xbd, 0x60, 0xff, 0xfd, 0xa1, 0x0c, 0xff, 0xfd, 0xa4, 0x16, 0xff, 0xfd, 0xa5, 0x19, 0xff, 0xfd, 0xa4, 0x1a, 0xff, 0xfd, 0xa4, 0x1a, 0xff, 0xfd, 0xa4, 0x19, 0xff, 0xfc, 0xa3, 0x18, 0xff, 0xfd, 0xa3, 0x17, 0xff, 0xfd, 0xa3, 0x18, 0xff, 0xfd, 0xa3, 0x18, 0xff, 0xfd, 0xa3, 0x19, 0xff, 0xfd, 0xa2, 0x19, 0xff, 0xfc, 0xa3, 0x19, 0xff, 0xfd, 0xa4, 0x1a, 0xff, 0xfd, 0xa4, 0x19, 0xff, 0xfd, 0x9d, 0x08, 0xff, 0xfb, 0xcc, 0x7b, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfe, 0xfc, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfb, 0xba, 0x51, 0xff, 0xfd, 0xa0, 0x0a, 0xff, 0xfd, 0xa4, 0x15, 0xff, 0xfd, 0xa3, 0x16, 0xff, 0xfd, 0xa3, 0x17, 0xff, 0xfd, 0xa4, 0x18, 0xff, 0xfd, 0xa5, 0x18, 0xff, 0xfd, 0xa5, 0x19, 0xff, 0xfd, 0xa5, 0x18, 0xff, 0xfd, 0x9f, 0x08, 0xff, 0xfc, 0xcb, 0x77, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xf9, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfc, 0xff, 0xfd, 0xf9, 0xeb, 0xff, 0xfc, 0xb2, 0x28, 0xff, 0xfd, 0xa7, 0x0f, 0xff, 0xfd, 0xa9, 0x18, 0xff, 0xfd, 0xa8, 0x1a, 0xff, 0xfd, 0xa8, 0x19, 0xff, 0xfd, 0xa8, 0x19, 0xff, 0xfd, 0xa8, 0x1b, 0xff, 0xfc, 0xa8, 0x1b, 0xff, 0xfd, 0xa9, 0x1b, 0xff, 0xfd, 0xa7, 0x13, 0xff, 0xfc, 0xaf, 0x20, 0xff, 0xfc, 0xf3, 0xe2, 0xff, 0xfc, 0xfa, 0xf7, 0xff, 0xfa, 0xf8, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xae, 0xa8, 0xff, 0x49, 0x02, 0x00, 0xff, 0x53, 0x0d, 0x02, 0xff, 0x54, 0x0f, 0x05, 0xff, 0x56, 0x11, 0x06, 0xff, 0x57, 0x12, 0x08, 0xff, 0x58, 0x12, 0x09, 0xff, 0x5a, 0x12, 0x09, 0xff, 0x5b, 0x13, 0x0a, 0xff, 0x5c, 0x14, 0x0a, 0xff, 0x5b, 0x15, 0x09, 0xff, 0x5a, 0x14, 0x09, 0xff, 0x5b, 0x13, 0x08, 0xff, 0x5c, 0x11, 0x05, 0xff, 0x5a, 0x0e, 0x03, 0xff, 0xcc, 0x32, 0x4b, 0xff, 0x91, 0x1f, 0x28, 0xff, 0x47, 0x03, 0x00, 0xff, 0x4b, 0x00, 0x00, 0xff, 0x97, 0x46, 0x02, 0xff, 0xe5, 0x97, 0x03, 0xff, 0x9a, 0x55, 0x02, 0xff, 0x53, 0x0f, 0x01, 0xff, 0x49, 0x00, 0x01, 0xff, 0x50, 0x05, 0x01, 0xff, 0x54, 0x08, 0x01, 0xff, 0x56, 0x0a, 0x02, 0xff, 0x56, 0x0a, 0x02, 0xff, 0x53, 0x08, 0x01, 0xff, 0x51, 0x05, 0x00, 0xff, 0x4d, 0x01, 0x00, 0xff, 0x4e, 0x02, 0x01, 0xff, 0x77, 0x2c, 0x02, 0xff, 0xd0, 0x8b, 0x02, 0xff, 0xc6, 0x7e, 0x03, 0xff, 0x56, 0x0c, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff, 0xc8, 0x2a, 0x46, 0xff, 0x9a, 0x1a, 0x2c, 0xff,
0xfd, 0xfa, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfb, 0xf6, 0xf0, 0xff, 0xfc, 0xf5, 0xee, 0xff, 0xfc, 0xf3, 0xec, 0xff, 0xfc, 0xf1, 0xe9, 0xff, 0xfd, 0xed, 0xe6, 0xff, 0xfd, 0xec, 0xe9, 0xff, 0xfc, 0xbc, 0x61, 0xff, 0xfd, 0x9e, 0x0f, 0xff, 0xfd, 0xa2, 0x1b, 0xff, 0xfd, 0xa3, 0x1d, 0xff, 0xfd, 0xa3, 0x1e, 0xff, 0xfd, 0xa2, 0x1f, 0xff, 0xfd, 0xa2, 0x1d, 0xff, 0xfd, 0xa1, 0x1a, 0xff, 0xfd, 0xa1, 0x19, 0xff, 0xfd, 0xa1, 0x1a, 0xff, 0xfd, 0xa1, 0x1b, 0xff, 0xfc, 0xa1, 0x1b, 0xff, 0xfd, 0xa1, 0x1c, 0xff, 0xfd, 0xa1, 0x1b, 0xff, 0xfd, 0xa1, 0x1c, 0xff, 0xfd, 0x9f, 0x17, 0xff, 0xfc, 0xa1, 0x17, 0xff, 0xfc, 0xed, 0xd1, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfd, 0xfc, 0xf8, 0xff, 0xfc, 0xf8, 0xf0, 0xff, 0xfa, 0xe8, 0xc9, 0xff, 0xfc, 0xfd, 0xfb, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xdd, 0xa8, 0xff, 0xfc, 0x9e, 0x0a, 0xff, 0xfd, 0xa2, 0x15, 0xff, 0xfd, 0xa2, 0x15, 0xff, 0xfd, 0xa2, 0x17, 0xff, 0xfd, 0xa3, 0x18, 0xff, 0xfd, 0xa4, 0x19, 0xff, 0xfd, 0xa4, 0x19, 0xff, 0xfd, 0xa4, 0x18, 0xff, 0xfd, 0x9d, 0x09, 0xff, 0xfc, 0xca, 0x79, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfc, 0xfe, 0xfe, 0xff, 0xfd, 0xf9, 0xeb, 0xff, 0xfc, 0xb0, 0x2b, 0xff, 0xfd, 0xa5, 0x11, 0xff, 0xfd, 0xa6, 0x1a, 0xff, 0xfd, 0xa5, 0x1b, 0xff, 0xfd, 0xa5, 0x1a, 0xff, 0xfd, 0xa6, 0x1a, 0xff, 0xfd, 0xa6, 0x1b, 0xff, 0xfd, 0xa7, 0x1b, 0xff, 0xfd, 0xa8, 0x1b, 0xff, 0xfd, 0xa5, 0x14, 0xff, 0xfc, 0xae, 0x23, 0xff, 0xfc, 0xf3, 0xe2, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xfb, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x84, 0x55, 0x4f, 0xff, 0x4a, 0x01, 0x00, 0xff, 0x54, 0x0e, 0x04, 0xff, 0x55, 0x10, 0x05, 0xff, 0x57, 0x11, 0x07, 0xff, 0x57, 0x12, 0x08, 0xff, 0x58, 0x12, 0x08, 0xff, 0x59, 0x13, 0x09, 0xff, 0x5a, 0x14, 0x0a, 0xff, 0x5a, 0x14, 0x0a, 0xff, 0x5a, 0x14, 0x09, 0xff, 0x5a, 0x13, 0x0a, 0xff, 0x5c, 0x13, 0x08, 0xff, 0x57, 0x0f, 0x03, 0xff, 0x7a, 0x1b, 0x15, 0xff, 0xd3, 0x3e, 0x45, 0xff, 0x49, 0x03, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff, 0xa6, 0x55, 0x03, 0xff, 0xdc, 0x8c, 0x03, 0xff, 0x6c, 0x22, 0x02, 0xff, 0x4b, 0x03, 0x01, 0xff, 0x54, 0x0b, 0x01, 0xff, 0x58, 0x0d, 0x01, 0xff, 0x58, 0x0d, 0x01, 0xff, 0x59, 0x0d, 0x01, 0xff, 0x59, 0x0d, 0x02, 0xff, 0x58, 0x0c, 0x02, 0xff, 0x56, 0x0b, 0x01, 0xff, 0x56, 0x0b, 0x01, 0xff, 0x59, 0x0b, 0x01, 0xff, 0x5a, 0x0b, 0x00, 0xff, 0x53, 0x05, 0x00, 0xff, 0x53, 0x05, 0x01, 0xff, 0xa8, 0x5d, 0x02, 0xff, 0xd6, 0x88, 0x03, 0xff, 0x54, 0x0c, 0x00, 0xff, 0x56, 0x03, 0x06, 0xff, 0xde, 0x32, 0x55, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfa, 0xf6, 0xf1, 0xff, 0xfb, 0xf5, 0xee, 0xff, 0xfb, 0xf3, 0xec, 0xff, 0xfc, 0xf0, 0xe9, 0xff, 0xfd, 0xed, 0xe6, 0xff, 0xfd, 0xed, 0xe9, 0xff, 0xfc, 0xba, 0x62, 0xff, 0xfd, 0x9b, 0x10, 0xff, 0xfd, 0xa0, 0x1d, 0xff, 0xfd, 0xa1, 0x20, 0xff, 0xfd, 0xa1, 0x20, 0xff, 0xfd, 0xa0, 0x20, 0xff, 0xfd, 0x9f, 0x1f, 0xff, 0xfd, 0x9f, 0x1e, 0xff, 0xfd, 0x9f, 0x1d, 0xff, 0xfd, 0xa0, 0x1e, 0xff, 0xfd, 0xa0, 0x1e, 0xff, 0xfd, 0xa1, 0x1f, 0xff, 0xfd, 0xa1, 0x1e, 0xff, 0xfd, 0xa1, 0x1d, 0xff, 0xfd, 0x9f, 0x1d, 0xff, 0xfd, 0x9a, 0x12, 0xff, 0xfc, 0xba, 0x57, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe4, 0xc2, 0xff, 0xf9, 0xa6, 0x3a, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfb, 0xfd, 0xfa, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfd, 0xfb, 0xff, 0xfc, 0xf8, 0xed, 0xff, 0xfc, 0xa9, 0x32, 0xff, 0xfd, 0x9e, 0x0e, 0xff, 0xfd, 0xa0, 0x14, 0xff, 0xfd, 0x9f, 0x17, 0xff, 0xfd, 0xa1, 0x18, 0xff, 0xfc, 0xa1, 0x19, 0xff, 0xfc, 0xa2, 0x18, 0xff, 0xfd, 0xa1, 0x18, 0xff, 0xfd, 0x9a, 0x0b, 0xff, 0xfc, 0xc8, 0x7b, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfd, 0xff, 0xfd, 0xf8, 0xec, 0xff, 0xfc, 0xaf, 0x2f, 0xff, 0xfd, 0xa3, 0x13, 0xff, 0xfd, 0xa3, 0x1b, 0xff, 0xfd, 0xa3, 0x1b, 0xff, 0xfd, 0xa3, 0x19, 0xff, 0xfd, 0xa4, 0x1a, 0xff, 0xfd, 0xa4, 0x1d, 0xff, 0xfd, 0xa5, 0x1c, 0xff, 0xfd, 0xa6, 0x1a, 0xff, 0xfd, 0xa3, 0x15, 0xff, 0xfc, 0xaa, 0x23, 0xff, 0xfc, 0xf2, 0xe0, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xff, 0xfd, 0xf9, 0xff, 0xec, 0xe5, 0xe1, 0xff, 0x5a, 0x1a, 0x12, 0xff, 0x50, 0x09, 0x00, 0xff, 0x54, 0x0f, 0x04, 0xff, 0x56, 0x10, 0x06, 0xff, 0x57, 0x11, 0x07, 0xff, 0x57, 0x11, 0x08, 0xff, 0x57, 0x12, 0x08, 0xff, 0x58, 0x13, 0x09, 0xff, 0x59, 0x14, 0x09, 0xff, 0x59, 0x14, 0x09, 0xff, 0x5a, 0x13, 0x0a, 0xff, 0x5a, 0x13, 0x09, 0xff, 0x5b, 0x13, 0x08, 0xff, 0x58, 0x10, 0x05, 0xff, 0x6a, 0x17, 0x0d, 0xff, 0xdd, 0x4d, 0x2f, 0xff, 0x71, 0x17, 0x0a, 0xff, 0x91, 0x41, 0x02, 0xff, 0xdf, 0x88, 0x05, 0xff, 0x62, 0x16, 0x03, 0xff, 0x50, 0x08, 0x02, 0xff, 0x57, 0x0e, 0x03, 0xff, 0x57, 0x0f, 0x03, 0xff, 0x58, 0x0e, 0x02, 0xff, 0x58, 0x0e, 0x02, 0xff, 0x58, 0x0e, 0x02, 0xff, 0x57, 0x0d, 0x01, 0xff, 0x53, 0x0a, 0x00, 0xff, 0x4f, 0x07, 0x00, 0xff, 0x4d, 0x06, 0x00, 0xff, 0x51, 0x07, 0x00, 0xff, 0x56, 0x09, 0x00, 0xff, 0x5a, 0x0b, 0x00, 0xff, 0x58, 0x0a, 0x00, 0xff, 0x4e, 0x00, 0x01, 0xff, 0xa7, 0x55, 0x02, 0xff, 0xcc, 0x7b, 0x03, 0xff, 0x47, 0x02, 0x00, 0xff, 0x73, 0x11, 0x16, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xfa, 0xf4, 0xef, 0xff, 0xfa, 0xf2, 0xed, 0xff, 0xfc, 0xef, 0xe9, 0xff, 0xfd, 0xed, 0xe5, 0xff, 0xfd, 0xee, 0xe9, 0xff, 0xfc, 0xba, 0x64, 0xff, 0xfd, 0x9a, 0x11, 0xff, 0xfd, 0x9e, 0x1e, 0xff, 0xfd, 0x9e, 0x21, 0xff, 0xfd, 0x9e, 0x22, 0xff, 0xfd, 0x9d, 0x21, 0xff, 0xfd, 0x9c, 0x21, 0xff, 0xfd, 0x9c, 0x20, 0xff, 0xfd, 0x9e, 0x1f, 0xff, 0xfd, 0x9e, 0x1f, 0xff, 0xfd, 0x9e, 0x20, 0xff, 0xfd, 0x9f, 0x21, 0xff, 0xfd, 0x9f, 0x20, 0xff, 0xfd, 0x9f, 0x20, 0xff, 0xfd, 0x9d, 0x20, 0xff, 0xfc, 0x99, 0x15, 0xff, 0xfb, 0xdd, 0xaf, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xf9, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xc5, 0x80, 0xff, 0xfc, 0x8b, 0x03, 0xff, 0xfc, 0xe5, 0xc5, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfc, 0xf7, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xc9, 0x82, 0xff, 0xfd, 0x97, 0x09, 0xff, 0xfd, 0x9c, 0x16, 0xff, 0xfd, 0x9d, 0x18, 0xff, 0xfd, 0x9f, 0x1b, 0xff, 0xfc, 0x9f, 0x1c, 0xff, 0xfd, 0x9f, 0x1b, 0xff, 0xfd, 0x9e, 0x1a, 0xff, 0xfd, 0x97, 0x0d, 0xff, 0xfc, 0xc7, 0x7b, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfb, 0xfe, 0xfd, 0xff, 0xfd, 0xf8, 0xee, 0xff, 0xfc, 0xac, 0x31, 0xff, 0xfd, 0xa0, 0x14, 0xff, 0xfd, 0xa1, 0x1c, 0xff, 0xfd, 0xa1, 0x1c, 0xff, 0xfd, 0xa1, 0x19, 0xff, 0xfd, 0xa2, 0x1b, 0xff, 0xfd, 0xa2, 0x1d, 0xff, 0xfd, 0xa2, 0x1d, 0xff, 0xfd, 0xa2, 0x1b, 0xff, 0xfd, 0xa0, 0x16, 0xff, 0xfc, 0xa8, 0x25, 0xff, 0xfd, 0xf1, 0xe0, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xb4, 0xb0, 0xff, 0x4b, 0x03, 0x00, 0xff, 0x54, 0x0d, 0x02, 0xff, 0x55, 0x0f, 0x05, 0xff, 0x56, 0x11, 0x06, 0xff, 0x57, 0x11, 0x07, 0xff, 0x57, 0x12, 0x08, 0xff, 0x58, 0x12, 0x08, 0xff, 0x59, 0x14, 0x08, 0xff, 0x59, 0x14, 0x08, 0xff, 0x5a, 0x14, 0x09, 0xff, 0x5b, 0x14, 0x09, 0xff, 0x5a, 0x14, 0x09, 0xff, 0x5b, 0x14, 0x09, 0xff, 0x5b, 0x13, 0x07, 0xff, 0x54, 0x0d, 0x03, 0xff, 0x83, 0x24, 0x0f, 0xff, 0xe1, 0x63, 0x18, 0xff, 0xda, 0x75, 0x07, 0xff, 0x6f, 0x20, 0x04, 0xff, 0x53, 0x0a, 0x03, 0xff, 0x5a, 0x10, 0x04, 0xff, 0x59, 0x10, 0x04, 0xff, 0x5a, 0x10, 0x04, 0xff, 0x5a, 0x0f, 0x03, 0xff, 0x59, 0x0e, 0x02, 0xff, 0x52, 0x0a, 0x00, 0xff, 0x55, 0x0a, 0x00, 0xff, 0x6f, 0x17, 0x07, 0xff, 0x8a, 0x25, 0x0e, 0xff, 0x94, 0x29, 0x10, 0xff, 0x86, 0x21, 0x0e, 0xff, 0x67, 0x10, 0x06, 0xff, 0x50, 0x06, 0x00, 0xff, 0x52, 0x08, 0x00, 0xff, 0x57, 0x09, 0x01, 0xff, 0x51, 0x02, 0x01, 0xff, 0xc7, 0x70, 0x03, 0xff, 0xa3, 0x50, 0x03, 0xff, 0x3b, 0x00, 0x00, 0xff,
0xfd, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0xf9, 0xf5, 0xf1, 0xff, 0xf9, 0xf4, 0xef, 0xff, 0xf9, 0xf2, 0xed, 0xff, 0xfc, 0xef, 0xe9, 0xff, 0xfd, 0xec, 0xe5, 0xff, 0xfd, 0xed, 0xe9, 0xff, 0xfc, 0xba, 0x67, 0xff, 0xfd, 0x99, 0x15, 0xff, 0xfd, 0x9b, 0x20, 0xff, 0xfd, 0x9b, 0x21, 0xff, 0xfd, 0x9b, 0x22, 0xff, 0xfd, 0x9a, 0x22, 0xff, 0xfd, 0x9a, 0x22, 0xff, 0xfd, 0x9a, 0x21, 0xff, 0xfd, 0x9a, 0x21, 0xff, 0xfd, 0x9b, 0x21, 0xff, 0xfd, 0x9c, 0x22, 0xff, 0xfd, 0x9d, 0x22, 0xff, 0xfc, 0x9d, 0x22, 0xff, 0xfd, 0x9d, 0x22, 0xff, 0xfd, 0x99, 0x1b, 0xff, 0xfc, 0xa8, 0x3d, 0xff, 0xfc, 0xf9, 0xf0, 0xff, 0xfc, 0xfd, 0xfb, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfd, 0xfe, 0xfb, 0xff, 0xfd, 0xfa, 0xf3, 0xff, 0xfa, 0xa3, 0x3b, 0xff, 0xfd, 0x8b, 0x04, 0xff, 0xfc, 0xc2, 0x7a, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfc, 0xff, 0xfe, 0xff, 0xfd, 0xed, 0xd5, 0xff, 0xfc, 0x9c, 0x1d, 0xff, 0xfd, 0x9a, 0x16, 0xff, 0xfd, 0x9c, 0x1a, 0xff, 0xfd, 0x9d, 0x1d, 0xff, 0xfd, 0x9e, 0x1e, 0xff, 0xfd, 0x9d, 0x1e, 0xff, 0xfd, 0x9c, 0x1d, 0xff, 0xfd, 0x96, 0x0f, 0xff, 0xfc, 0xc6, 0x7d, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfd, 0xff, 0xfd, 0xf8, 0xef, 0xff, 0xfc, 0xaa, 0x33, 0xff, 0xfd, 0x9d, 0x18, 0xff, 0xfd, 0xa0, 0x1e, 0xff, 0xfd, 0xa0, 0x1e, 0xff, 0xfc, 0xa0, 0x1e, 0xff, 0xfd, 0xa1, 0x1d, 0xff, 0xfd, 0xa1, 0x1c, 0xff, 0xfd, 0xa1, 0x1c, 0xff, 0xfd, 0xa0, 0x1c, 0xff, 0xfd, 0x9d, 0x18, 0xff, 0xfc, 0xa7, 0x29, 0xff, 0xfc, 0xf1, 0xe0, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf7, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xfa, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0x85, 0x81, 0xff, 0x49, 0x00, 0x00, 0xff, 0x55, 0x0d, 0x03, 0xff, 0x56, 0x0f, 0x05, 0xff, 0x58, 0x11, 0x07, 0xff, 0x56, 0x12, 0x07, 0xff, 0x57, 0x12, 0x07, 0xff, 0x59, 0x13, 0x07, 0xff, 0x59, 0x14, 0x08, 0xff, 0x5a, 0x15, 0x08, 0xff, 0x5c, 0x14, 0x09, 0xff, 0x5d, 0x15, 0x09, 0xff, 0x5d, 0x15, 0x09, 0xff, 0x5d, 0x14, 0x08, 0xff, 0x5d, 0x13, 0x07, 0xff, 0x5d, 0x11, 0x05, 0xff, 0x57, 0x0c, 0x03, 0xff, 0x6b, 0x19, 0x07, 0xff, 0x65, 0x16, 0x06, 0xff, 0x56, 0x0c, 0x04, 0xff, 0x5b, 0x11, 0x05, 0xff, 0x5b, 0x11, 0x05, 0xff, 0x5c, 0x10, 0x04, 0xff, 0x5c, 0x10, 0x04, 0xff, 0x5a, 0x0f, 0x03, 0xff, 0x53, 0x0a, 0x01, 0xff, 0x82, 0x20, 0x0a, 0xff, 0xd8, 0x4a, 0x1b, 0xff, 0xfb, 0x5f, 0x24, 0xff, 0xf4, 0x5f, 0x26, 0xff, 0xed, 0x5c, 0x28, 0xff, 0xf6, 0x5a, 0x2c, 0xff, 0xf6, 0x53, 0x2c, 0xff, 0xc5, 0x39, 0x20, 0xff, 0x71, 0x14, 0x0a, 0xff, 0x50, 0x07, 0x00, 0xff, 0x53, 0x06, 0x00, 0xff, 0x6c, 0x17, 0x01, 0xff, 0xde, 0x81, 0x04, 0xff, 0x57, 0x0f, 0x02, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf8, 0xf3, 0xef, 0xff, 0xfa, 0xf2, 0xec, 0xff, 0xfb, 0xef, 0xe9, 0xff, 0xfd, 0xed, 0xe5, 0xff, 0xfd, 0xed, 0xea, 0xff, 0xfc, 0xb6, 0x69, 0xff, 0xfd, 0x95, 0x18, 0xff, 0xfd, 0x98, 0x22, 0xff, 0xfd, 0x97, 0x23, 0xff, 0xfd, 0x97, 0x24, 0xff, 0xfd, 0x96, 0x25, 0xff, 0xfd, 0x96, 0x24, 0xff, 0xfd, 0x97, 0x24, 0xff, 0xfd, 0x97, 0x24, 0xff, 0xfd, 0x97, 0x23, 0xff, 0xfd, 0x99, 0x24, 0xff, 0xfd, 0x9b, 0x24, 0xff, 0xfd, 0x9b, 0x24, 0xff, 0xfd, 0x9a, 0x23, 0xff, 0xfd, 0x92, 0x16, 0xff, 0xfc, 0xcc, 0x8e, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xe0, 0xbe, 0xff, 0xfb, 0x8f, 0x17, 0xff, 0xfd, 0x90, 0x14, 0xff, 0xfc, 0x9e, 0x33, 0xff, 0xfd, 0xf8, 0xf0, 0xff, 0xfc, 0xfe, 0xfe, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfc, 0xfd, 0xf9, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfc, 0xb7, 0x5e, 0xff, 0xfd, 0x95, 0x10, 0xff, 0xfd, 0x9a, 0x1b, 0xff, 0xfd, 0x9b, 0x1d, 0xff, 0xfd, 0x9b, 0x1f, 0xff, 0xfd, 0x9b, 0x20, 0xff, 0xfd, 0x9b, 0x1f, 0xff, 0xfd, 0x95, 0x12, 0xff, 0xfc, 0xc6, 0x7f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfc, 0xff, 0xfd, 0xf8, 0xed, 0xff, 0xfc, 0xa8, 0x34, 0xff, 0xfd, 0x9c, 0x1b, 0xff, 0xfd, 0x9e, 0x20, 0xff, 0xfd, 0x9e, 0x1f, 0xff, 0xfd, 0x9f, 0x21, 0xff, 0xfd, 0x9f, 0x20, 0xff, 0xfd, 0x9f, 0x20, 0xff, 0xfd, 0x9f, 0x1f, 0xff, 0xfd, 0x9f, 0x1f, 0xff, 0xfd, 0x9c, 0x1a, 0xff, 0xfc, 0xa5, 0x2d, 0xff, 0xfd, 0xf2, 0xe1, 0xff, 0xfd, 0xf9, 0xf5, 0xff, 0xfb, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0x61, 0x5b, 0xff, 0x4b, 0x00, 0x00, 0xff, 0x55, 0x0d, 0x02, 0xff, 0x56, 0x10, 0x05, 0xff, 0x57, 0x12, 0x07, 0xff, 0x58, 0x13, 0x07, 0xff, 0x59, 0x15, 0x07, 0xff, 0x5b, 0x15, 0x06, 0xff, 0x5d, 0x16, 0x07, 0xff, 0x5f, 0x17, 0x07, 0xff, 0x60, 0x17, 0x08, 0xff, 0x61, 0x17, 0x08, 0xff, 0x60, 0x16, 0x08, 0xff, 0x60, 0x16, 0x08, 0xff, 0x60, 0x14, 0x08, 0xff, 0x5f, 0x12, 0x07, 0xff, 0x5d, 0x11, 0x06, 0xff, 0x5a, 0x0f, 0x04, 0xff, 0x59, 0x0f, 0x05, 0xff, 0x5a, 0x11, 0x05, 0xff, 0x5a, 0x11, 0x05, 0xff, 0x5d, 0x12, 0x05, 0xff, 0x5d, 0x11, 0x05, 0xff, 0x5b, 0x0f, 0x03, 0xff, 0x58, 0x0c, 0x02, 0xff, 0xac, 0x37, 0x14, 0xff, 0xff, 0x63, 0x25, 0xff, 0xd5, 0x49, 0x1a, 0xff, 0x86, 0x20, 0x08, 0xff, 0x62, 0x0d, 0x01, 0xff, 0x5c, 0x09, 0x01, 0xff, 0x61, 0x0b, 0x01, 0xff, 0x85, 0x1c, 0x0c, 0xff, 0xd9, 0x3e, 0x29, 0xff, 0xfc, 0x47, 0x3a, 0xff, 0x93, 0x1d, 0x18, 0xff, 0x50, 0x06, 0x00, 0xff, 0x54, 0x05, 0x00, 0xff, 0x78, 0x25, 0x02, 0xff, 0x5d, 0x0d, 0x01, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf8, 0xf3, 0xee, 0xff, 0xfa, 0xf1, 0xec, 0xff, 0xfb, 0xef, 0xe9, 0xff, 0xfd, 0xed, 0xe6, 0xff, 0xfd, 0xed, 0xea, 0xff, 0xfc, 0xb5, 0x6a, 0xff, 0xfd, 0x93, 0x1b, 0xff, 0xfd, 0x96, 0x24, 0xff, 0xfd, 0x95, 0x25, 0xff, 0xfe, 0x95, 0x27, 0xff, 0xfd, 0x95, 0x28, 0xff, 0xfd, 0x94, 0x28, 0xff, 0xfd, 0x94, 0x28, 0xff, 0xfe, 0x94, 0x28, 0xff, 0xfd, 0x95, 0x28, 0xff, 0xfd, 0x96, 0x28, 0xff, 0xfd, 0x97, 0x28, 0xff, 0xfd, 0x97, 0x27, 0xff, 0xfd, 0x95, 0x22, 0xff, 0xfc, 0x9a, 0x2c, 0xff, 0xfd, 0xf1, 0xdd, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfc, 0xfd, 0xf9, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xba, 0x74, 0xff, 0xfd, 0x8c, 0x15, 0xff, 0xfd, 0x92, 0x1f, 0xff, 0xfc, 0x8d, 0x14, 0xff, 0xfb, 0xdb, 0xb4, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xdd, 0xb7, 0xff, 0xfc, 0x92, 0x15, 0xff, 0xfd, 0x96, 0x1d, 0xff, 0xfd, 0x97, 0x1f, 0xff, 0xfd, 0x97, 0x21, 0xff, 0xfd, 0x98, 0x22, 0xff, 0xfd, 0x99, 0x22, 0xff, 0xfd, 0x92, 0x16, 0xff, 0xfc, 0xc5, 0x82, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xf9, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfe, 0xfb, 0xff, 0xfd, 0xf7, 0xeb, 0xff, 0xfc, 0xa6, 0x34, 0xff, 0xfd, 0x9a, 0x1a, 0xff, 0xfd, 0x9c, 0x21, 0xff, 0xfd, 0x9c, 0x23, 0xff, 0xfd, 0x9c, 0x23, 0xff, 0xfd, 0x9d, 0x24, 0xff, 0xfd, 0x9c, 0x24, 0xff, 0xfd, 0x9c, 0x22, 0xff, 0xfc, 0x9c, 0x22, 0xff, 0xfd, 0x9a, 0x1c, 0xff, 0xfc, 0xa4, 0x30, 0xff, 0xfd, 0xf2, 0xe2, 0xff, 0xfc, 0xf8, 0xf4, 0xff, 0xfb, 0xf7, 0xf1, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xfd, 0xff, 0x81, 0x4c, 0x46, 0xff, 0x4e, 0x01, 0x00, 0xff, 0x56, 0x0d, 0x01, 0xff, 0x58, 0x10, 0x04, 0xff, 0x5a, 0x14, 0x07, 0xff, 0x5d, 0x16, 0x07, 0xff, 0x5e, 0x17, 0x07, 0xff, 0x60, 0x19, 0x06, 0xff, 0x62, 0x1a, 0x07, 0xff, 0x64, 0x1a, 0x07, 0xff, 0x65, 0x1b, 0x08, 0xff, 0x65, 0x1a, 0x08, 0xff, 0x63, 0x19, 0x08, 0xff, 0x64, 0x18, 0x08, 0xff, 0x63, 0x17, 0x08, 0xff, 0x60, 0x15, 0x08, 0xff, 0x5e, 0x13, 0x06, 0xff, 0x5c, 0x12, 0x06, 0xff, 0x5b, 0x11, 0x06, 0xff, 0x5a, 0x11, 0x05, 0xff, 0x5a, 0x11, 0x05, 0xff, 0x5c, 0x11, 0x05, 0xff, 0x5e, 0x0f, 0x04, 0xff, 0x55, 0x0b, 0x02, 0xff, 0xa8, 0x36, 0x15, 0xff, 0xff, 0x67, 0x28, 0xff, 0xa7, 0x31, 0x13, 0xff, 0x5f, 0x0a, 0x00, 0xff, 0x8f, 0x1f, 0x10, 0xff, 0xc7, 0x38, 0x2b, 0xff, 0xd5, 0x39, 0x3b, 0xff, 0xc6, 0x2b, 0x3e, 0xff, 0x8c, 0x17, 0x23, 0xff, 0x51, 0x03, 0x00, 0xff, 0x9e, 0x21, 0x1c, 0xff, 0xff, 0x43, 0x4a, 0xff, 0x8c, 0x18, 0x19, 0xff, 0x52, 0x06, 0x00, 0xff, 0x56, 0x05, 0x00, 0xff, 0x5e, 0x09, 0x01, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf7, 0xf1, 0xff, 0xf9, 0xf5, 0xef, 0xff, 0xf8, 0xf3, 0xee, 0xff, 0xfb, 0xf1, 0xeb, 0xff, 0xfc, 0xef, 0xe9, 0xff, 0xfd, 0xec, 0xe6, 0xff, 0xfd, 0xed, 0xea, 0xff, 0xfc, 0xb3, 0x6c, 0xff, 0xfd, 0x91, 0x1e, 0xff, 0xfd, 0x94, 0x27, 0xff, 0xfd, 0x93, 0x28, 0xff, 0xfd, 0x92, 0x28, 0xff, 0xfd, 0x91, 0x29, 0xff, 0xfd, 0x91, 0x2a, 0xff, 0xfd, 0x91, 0x2a, 0xff, 0xfd, 0x91, 0x2b, 0xff, 0xfd, 0x92, 0x2c, 0xff, 0xfd, 0x93, 0x2b, 0xff, 0xfd, 0x94, 0x2a, 0xff, 0xfd, 0x95, 0x2a, 0xff, 0xfd, 0x8f, 0x1d, 0xff, 0xfb, 0xb8, 0x6d, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xf7, 0xeb, 0xff, 0xfb, 0x98, 0x36, 0xff, 0xfd, 0x8e, 0x1f, 0xff, 0xfd, 0x91, 0x24, 0xff, 0xfd, 0x8b, 0x17, 0xff, 0xfb, 0xb3, 0x66, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfd, 0xfa, 0xf2, 0xff, 0xfb, 0xa1, 0x40, 0xff, 0xfd, 0x90, 0x19, 0xff, 0xfd, 0x94, 0x22, 0xff, 0xfd, 0x95, 0x23, 0xff, 0xfd, 0x95, 0x24, 0xff, 0xfd, 0x96, 0x25, 0xff, 0xfd, 0x8f, 0x17, 0xff, 0xfc, 0xc4, 0x81, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xf8, 0xff, 0xfb, 0xfc, 0xf7, 0xff, 0xfb, 0xfd, 0xfa, 0xff, 0xfd, 0xf7, 0xeb, 0xff, 0xfd, 0xa3, 0x35, 0xff, 0xfd, 0x96, 0x1b, 0xff, 0xfd, 0x98, 0x22, 0xff, 0xfd, 0x98, 0x24, 0xff, 0xfd, 0x99, 0x25, 0xff, 0xfd, 0x99, 0x24, 0xff, 0xfd, 0x9a, 0x24, 0xff, 0xfd, 0x9a, 0x25, 0xff, 0xfd, 0x9a, 0x24, 0xff, 0xfd, 0x98, 0x1e, 0xff, 0xfc, 0xa3, 0x32, 0xff, 0xfd, 0xf2, 0xe2, 0xff, 0xfd, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf2, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfd, 0xfb, 0xf5, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x7b, 0x43, 0x3e, 0xff, 0x4e, 0x01, 0x00, 0xff, 0x56, 0x0d, 0x01, 0xff, 0x59, 0x11, 0x04, 0xff, 0x5d, 0x16, 0x06, 0xff, 0x61, 0x19, 0x07, 0xff, 0x65, 0x1b, 0x07, 0xff, 0x67, 0x1d, 0x07, 0xff, 0x6a, 0x1f, 0x07, 0xff, 0x6d, 0x20, 0x06, 0xff, 0x6e, 0x21, 0x07, 0xff, 0x6c, 0x20, 0x07, 0xff, 0x6a, 0x1f, 0x08, 0xff, 0x67, 0x1c, 0x08, 0xff, 0x65, 0x1a, 0x08, 0xff, 0x63, 0x17, 0x07, 0xff, 0x60, 0x15, 0x07, 0xff, 0x5d, 0x13, 0x07, 0xff, 0x5a, 0x11, 0x07, 0xff, 0x5a, 0x11, 0x06, 0xff, 0x5a, 0x11, 0x06, 0xff, 0x5b, 0x10, 0x04, 0xff, 0x58, 0x0b, 0x02, 0xff, 0x7d, 0x1f, 0x0b, 0xff, 0xff, 0x68, 0x29, 0xff, 0xb3, 0x37, 0x17, 0xff, 0x65, 0x0a, 0x04, 0xff, 0xc7, 0x39, 0x1d, 0xff, 0xff, 0x4f, 0x39, 0xff, 0xed, 0x40, 0x3c, 0xff, 0xd8, 0x33, 0x38, 0xff, 0xd7, 0x30, 0x3f, 0xff, 0xf3, 0x3b, 0x5e, 0xff, 0xcd, 0x2e, 0x4d, 0xff, 0x58, 0x02, 0x01, 0xff, 0xad, 0x22, 0x2a, 0xff, 0xef, 0x3b, 0x5a, 0xff, 0x66, 0x0c, 0x08, 0xff, 0x5a, 0x08, 0x00, 0xff, 0x5f, 0x0a, 0x01, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf8, 0xf5, 0xef, 0xff, 0xf9, 0xf4, 0xee, 0xff, 0xfb, 0xf2, 0xec, 0xff, 0xfc, 0xef, 0xea, 0xff, 0xfd, 0xec, 0xe6, 0xff, 0xfd, 0xec, 0xe9, 0xff, 0xfc, 0xaf, 0x6d, 0xff, 0xfd, 0x8c, 0x22, 0xff, 0xfe, 0x91, 0x2a, 0xff, 0xfe, 0x90, 0x2a, 0xff, 0xfd, 0x8f, 0x2b, 0xff, 0xfe, 0x8f, 0x2c, 0xff, 0xfd, 0x8e, 0x2c, 0xff, 0xfd, 0x8e, 0x2c, 0xff, 0xfd, 0x8f, 0x2e, 0xff, 0xfd, 0x90, 0x2e, 0xff, 0xfd, 0x91, 0x2e, 0xff, 0xfd, 0x91, 0x2c, 0xff, 0xfd, 0x91, 0x29, 0xff, 0xfc, 0x8e, 0x21, 0xff, 0xfb, 0xe0, 0xbf, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfb, 0xfc, 0xf9, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xd7, 0xb4, 0xff, 0xfc, 0x86, 0x1d, 0xff, 0xfd, 0x8d, 0x26, 0xff, 0xfd, 0x8f, 0x27, 0xff, 0xfd, 0x8c, 0x22, 0xff, 0xfc, 0x90, 0x2e, 0xff, 0xfc, 0xef, 0xe1, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xc7, 0x8f, 0xff, 0xfc, 0x8a, 0x17, 0xff, 0xfd, 0x91, 0x25, 0xff, 0xfd, 0x92, 0x26, 0xff, 0xfe, 0x93, 0x27, 0xff, 0xfd, 0x93, 0x27, 0xff, 0xfd, 0x8c, 0x18, 0xff, 0xfc, 0xc1, 0x80, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfd, 0xf6, 0xeb, 0xff, 0xfd, 0x9e, 0x37, 0xff, 0xfd, 0x92, 0x1d, 0xff, 0xfd, 0x95, 0x25, 0xff, 0xfd, 0x96, 0x27, 0xff, 0xfd, 0x96, 0x27, 0xff, 0xfd, 0x97, 0x27, 0xff, 0xfd, 0x97, 0x26, 0xff, 0xfd, 0x98, 0x27, 0xff, 0xfd, 0x99, 0x27, 0xff, 0xfd, 0x96, 0x21, 0xff, 0xfc, 0x9f, 0x33, 0xff, 0xfd, 0xf1, 0xe2, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf2, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x78, 0x3e, 0x39, 0xff, 0x4e, 0x01, 0x00, 0xff, 0x56, 0x0e, 0x01, 0xff, 0x5a, 0x13, 0x04, 0xff, 0x60, 0x18, 0x07, 0xff, 0x66, 0x1d, 0x08, 0xff, 0x6d, 0x22, 0x06, 0xff, 0x73, 0x25, 0x05, 0xff, 0x78, 0x28, 0x05, 0xff, 0x7b, 0x2a, 0x05, 0xff, 0x7c, 0x2a, 0x05, 0xff, 0x7a, 0x28, 0x05, 0xff, 0x75, 0x25, 0x06, 0xff, 0x6d, 0x21, 0x07, 0xff, 0x69, 0x1c, 0x08, 0xff, 0x65, 0x19, 0x08, 0xff, 0x61, 0x16, 0x08, 0xff, 0x5d, 0x14, 0x08, 0xff, 0x5b, 0x12, 0x08, 0xff, 0x5a, 0x12, 0x07, 0xff, 0x59, 0x10, 0x07, 0xff, 0x5a, 0x0f, 0x06, 0xff, 0x56, 0x0a, 0x03, 0xff, 0xca, 0x4a, 0x1b, 0xff, 0xec, 0x5a, 0x22, 0xff, 0x72, 0x0f, 0x09, 0xff, 0xbc, 0x37, 0x1d, 0xff, 0xff, 0x53, 0x38, 0xff, 0xf1, 0x3a, 0x40, 0xff, 0xe8, 0x33, 0x40, 0xff, 0xea, 0x32, 0x40, 0xff, 0xe0, 0x2e, 0x39, 0xff, 0xc4, 0x26, 0x2f, 0xff, 0xeb, 0x38, 0x5c, 0xff, 0xc5, 0x2b, 0x4c, 0xff, 0x52, 0x01, 0x00, 0xff, 0xea, 0x3a, 0x63, 0xff, 0xa5, 0x20, 0x34, 0xff, 0x55, 0x06, 0x00, 0xff, 0x5d, 0x09, 0x01, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf8, 0xf3, 0xee, 0xff, 0xfa, 0xf1, 0xed, 0xff, 0xfc, 0xef, 0xea, 0xff, 0xfd, 0xec, 0xe6, 0xff, 0xfd, 0xec, 0xe9, 0xff, 0xfc, 0xac, 0x6d, 0xff, 0xfd, 0x89, 0x25, 0xff, 0xfd, 0x8e, 0x2f, 0xff, 0xfd, 0x8d, 0x2e, 0xff, 0xfd, 0x8c, 0x2d, 0xff, 0xfd, 0x8c, 0x2f, 0xff, 0xfd, 0x8b, 0x2f, 0xff, 0xfd, 0x8b, 0x2e, 0xff, 0xfd, 0x8b, 0x2f, 0xff, 0xfd, 0x8c, 0x2f, 0xff, 0xfd, 0x8d, 0x2f, 0xff, 0xfe, 0x8f, 0x2e, 0xff, 0xfe, 0x8b, 0x26, 0xff, 0xfb, 0xa3, 0x4f, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfa, 0xa5, 0x5e, 0xff, 0xfd, 0x7f, 0x15, 0xff, 0xfd, 0x85, 0x20, 0xff, 0xfd, 0x86, 0x20, 0xff, 0xfd, 0x84, 0x20, 0xff, 0xfd, 0x7a, 0x11, 0xff, 0xfa, 0xc5, 0x99, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfd, 0xfe, 0xfc, 0xff, 0xfd, 0xec, 0xdc, 0xff, 0xfc, 0x91, 0x2c, 0xff, 0xfd, 0x8c, 0x23, 0xff, 0xfd, 0x8e, 0x27, 0xff, 0xfd, 0x8f, 0x29, 0xff, 0xfd, 0x8f, 0x2a, 0xff, 0xfd, 0x88, 0x1b, 0xff, 0xfc, 0xc0, 0x82, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfc, 0xf5, 0xec, 0xff, 0xfc, 0x99, 0x39, 0xff, 0xfd, 0x8f, 0x20, 0xff, 0xfd, 0x93, 0x27, 0xff, 0xfd, 0x93, 0x29, 0xff, 0xfd, 0x93, 0x2a, 0xff, 0xfd, 0x94, 0x2a, 0xff, 0xfc, 0x94, 0x2a, 0xff, 0xfd, 0x95, 0x2a, 0xff, 0xfd, 0x96, 0x2a, 0xff, 0xfd, 0x94, 0x25, 0xff, 0xfc, 0x9c, 0x37, 0xff, 0xfd, 0xf1, 0xe3, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf8, 0xf2, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf4, 0xff, 0xfe, 0xfd, 0xf8, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0x77, 0x3c, 0x37, 0xff, 0x50, 0x03, 0x00, 0xff, 0x5a, 0x10, 0x01, 0xff, 0x5e, 0x15, 0x04, 0xff, 0x64, 0x1b, 0x06, 0xff, 0x6d, 0x22, 0x07, 0xff, 0x77, 0x29, 0x05, 0xff, 0x80, 0x2e, 0x04, 0xff, 0x86, 0x32, 0x05, 0xff, 0x89, 0x32, 0x05, 0xff, 0x89, 0x31, 0x05, 0xff, 0x86, 0x30, 0x04, 0xff, 0x7f, 0x2c, 0x05, 0xff, 0x75, 0x26, 0x07, 0xff, 0x6c, 0x20, 0x07, 0xff, 0x67, 0x1b, 0x08, 0xff, 0x62, 0x18, 0x08, 0xff, 0x5e, 0x15, 0x08, 0xff, 0x5b, 0x13, 0x08, 0xff, 0x5a, 0x12, 0x08, 0xff, 0x5b, 0x11, 0x07, 0xff, 0x57, 0x0e, 0x05, 0xff, 0x69, 0x15, 0x08, 0xff, 0xf7, 0x67, 0x26, 0xff, 0xb9, 0x39, 0x18, 0xff, 0x8e, 0x1c, 0x14, 0xff, 0xfa, 0x5e, 0x38, 0xff, 0xfd, 0x47, 0x46, 0xff, 0xf5, 0x35, 0x4c, 0xff, 0xf7, 0x39, 0x4d, 0xff, 0xfb, 0x3a, 0x4e, 0xff, 0xfe, 0x39, 0x4f, 0xff, 0xf3, 0x33, 0x47, 0xff, 0xc8, 0x23, 0x38, 0xff, 0xf1, 0x39, 0x6b, 0xff, 0x6d, 0x0b, 0x16, 0xff, 0x9e, 0x1f, 0x3a, 0xff, 0xda, 0x34, 0x62, 0xff, 0x59, 0x07, 0x00, 0xff, 0x5a, 0x09, 0x00, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf3, 0xee, 0xff, 0xfa, 0xf1, 0xec, 0xff, 0xfc, 0xef, 0xea, 0xff, 0xfd, 0xec, 0xe7, 0xff, 0xfd, 0xed, 0xea, 0xff, 0xfc, 0xab, 0x6f, 0xff, 0xfd, 0x85, 0x27, 0xff, 0xfd, 0x89, 0x32, 0xff, 0xfd, 0x89, 0x31, 0xff, 0xfd, 0x89, 0x31, 0xff, 0xfd, 0x89, 0x32, 0xff, 0xfd, 0x89, 0x32, 0xff, 0xfd, 0x89, 0x32, 0xff, 0xfd, 0x89, 0x31, 0xff, 0xfd, 0x89, 0x31, 0xff, 0xfd, 0x8a, 0x30, 0xff, 0xfd, 0x8b, 0x30, 0xff, 0xfd, 0x86, 0x23, 0xff, 0xfb, 0xcd, 0xa0, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfb, 0xfd, 0xfa, 0xff, 0xfb, 0xf6, 0xee, 0xff, 0xfa, 0xb3, 0x7a, 0xff, 0xfc, 0xae, 0x6f, 0xff, 0xfc, 0xb0, 0x74, 0xff, 0xfc, 0xb0, 0x74, 0xff, 0xfb, 0xaf, 0x73, 0xff, 0xfb, 0xaa, 0x6c, 0xff, 0xf9, 0xc5, 0x9d, 0xff, 0xfb, 0xfd, 0xfb, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfb, 0xad, 0x6b, 0xff, 0xfd, 0x84, 0x1e, 0xff, 0xfd, 0x8b, 0x2a, 0xff, 0xfd, 0x8d, 0x2b, 0xff, 0xfd, 0x8d, 0x2c, 0xff, 0xfd, 0x86, 0x1f, 0xff, 0xfc, 0xbf, 0x85, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfd, 0xf5, 0xec, 0xff, 0xfc, 0x95, 0x3a, 0xff, 0xfd, 0x8b, 0x20, 0xff, 0xfd, 0x8f, 0x29, 0xff, 0xfd, 0x90, 0x2c, 0xff, 0xfd, 0x91, 0x2f, 0xff, 0xfd, 0x92, 0x2f, 0xff, 0xfd, 0x93, 0x2f, 0xff, 0xfd, 0x93, 0x2f, 0xff, 0xfd, 0x93, 0x2f, 0xff, 0xfd, 0x91, 0x29, 0xff, 0xfc, 0x9a, 0x3a, 0xff, 0xfd, 0xf0, 0xe4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfe, 0xfd, 0xf8, 0xff, 0xfe, 0xfe, 0xf9, 0xff, 0x74, 0x39, 0x33, 0xff, 0x52, 0x03, 0x00, 0xff, 0x5b, 0x11, 0x01, 0xff, 0x62, 0x18, 0x04, 0xff, 0x69, 0x1f, 0x05, 0xff, 0x74, 0x28, 0x05, 0xff, 0x82, 0x30, 0x03, 0xff, 0x8d, 0x33, 0x03, 0xff, 0x9c, 0x41, 0x04, 0xff, 0xae, 0x57, 0x02, 0xff, 0xb1, 0x5f, 0x02, 0xff, 0x97, 0x3f, 0x03, 0xff, 0x87, 0x32, 0x04, 0xff, 0x7c, 0x2b, 0x06, 0xff, 0x6f, 0x23, 0x08, 0xff, 0x67, 0x1d, 0x08, 0xff, 0x62, 0x18, 0x07, 0xff, 0x5e, 0x15, 0x08, 0xff, 0x5c, 0x13, 0x08, 0xff, 0x5a, 0x12, 0x08, 0xff, 0x5a, 0x11, 0x07, 0xff, 0x55, 0x0c, 0x04, 0xff, 0x7f, 0x22, 0x0d, 0xff, 0xff, 0x73, 0x2c, 0xff, 0xa7, 0x28, 0x1a, 0xff, 0xb6, 0x33, 0x23, 0xff, 0xff, 0x6a, 0x41, 0xff, 0xfc, 0x3f, 0x53, 0xff, 0xfa, 0x38, 0x55, 0xff, 0xfc, 0x3b, 0x55, 0xff, 0xfd, 0x3c, 0x55, 0xff, 0xfd, 0x3c, 0x54, 0xff, 0xff, 0x3b, 0x55, 0xff, 0xe0, 0x2a, 0x45, 0xff, 0xe3, 0x2f, 0x5e, 0xff, 0xa5, 0x21, 0x43, 0xff, 0x6c, 0x0e, 0x1a, 0xff, 0xec, 0x40, 0x7c, 0xff, 0x64, 0x0a, 0x08, 0xff, 0x57, 0x07, 0x00, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf3, 0xee, 0xff, 0xfb, 0xf1, 0xed, 0xff, 0xfd, 0xf0, 0xea, 0xff, 0xfe, 0xec, 0xe6, 0xff, 0xfd, 0xec, 0xe9, 0xff, 0xfc, 0xa9, 0x71, 0xff, 0xfd, 0x81, 0x2a, 0xff, 0xfd, 0x86, 0x33, 0xff, 0xfd, 0x86, 0x33, 0xff, 0xfd, 0x87, 0x34, 0xff, 0xfd, 0x88, 0x35, 0xff, 0xfd, 0x89, 0x34, 0xff, 0xfd, 0x88, 0x34, 0xff, 0xfd, 0x88, 0x34, 0xff, 0xfd, 0x88, 0x33, 0xff, 0xfd, 0x87, 0x32, 0xff, 0xfd, 0x84, 0x2e, 0xff, 0xfc, 0x8d, 0x38, 0xff, 0xfc, 0xf1, 0xe3, 0xff, 0xfc, 0xfe, 0xfb, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xf9, 0xfd, 0xfd, 0xff, 0xf9, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xd9, 0xbd, 0xff, 0xfd, 0x82, 0x25, 0xff, 0xfd, 0x88, 0x2b, 0xff, 0xfd, 0x8a, 0x2e, 0xff, 0xfd, 0x8a, 0x30, 0xff, 0xfc, 0x84, 0x24, 0xff, 0xfc, 0xbe, 0x87, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfb, 0xff, 0xfd, 0xf5, 0xed, 0xff, 0xfc, 0x93, 0x3c, 0xff, 0xfd, 0x87, 0x23, 0xff, 0xfd, 0x8c, 0x2d, 0xff, 0xfd, 0x8d, 0x30, 0xff, 0xfd, 0x8f, 0x32, 0xff, 0xfd, 0x8f, 0x32, 0xff, 0xfd, 0x90, 0x32, 0xff, 0xfd, 0x91, 0x32, 0xff, 0xfd, 0x91, 0x32, 0xff, 0xfd, 0x8f, 0x2c, 0xff, 0xfc, 0x98, 0x3b, 0xff, 0xfc, 0xf0, 0xe4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0x80, 0x4b, 0x45, 0xff, 0x50, 0x01, 0x00, 0xff, 0x5e, 0x12, 0x01, 0xff, 0x64, 0x18, 0x03, 0xff, 0x6d, 0x20, 0x04, 0xff, 0x7a, 0x2b, 0x04, 0xff, 0x8d, 0x36, 0x02, 0xff, 0xc8, 0x83, 0x02, 0xff, 0xf0, 0xc4, 0x01, 0xff, 0xfa, 0xdb, 0x01, 0xff, 0xff, 0xe6, 0x01, 0xff, 0xdb, 0xa8, 0x02, 0xff, 0x8f, 0x39, 0x05, 0xff, 0x80, 0x2e, 0x05, 0xff, 0x72, 0x25, 0x07, 0xff, 0x68, 0x1d, 0x08, 0xff, 0x62, 0x18, 0x07, 0xff, 0x5e, 0x16, 0x07, 0xff, 0x5c, 0x13, 0x07, 0xff, 0x5b, 0x12, 0x08, 0xff, 0x5a, 0x11, 0x08, 0xff, 0x54, 0x0a, 0x04, 0xff, 0x8c, 0x2a, 0x10, 0xff, 0xff, 0x75, 0x2e, 0xff, 0xa8, 0x25, 0x20, 0xff, 0xc6, 0x40, 0x2b, 0xff, 0xff, 0x74, 0x45, 0xff, 0xfd, 0x3d, 0x5f, 0xff, 0xfd, 0x3b, 0x5f, 0xff, 0xfd, 0x3d, 0x5e, 0xff, 0xfd, 0x3d, 0x5e, 0xff, 0xfd, 0x3d, 0x5e, 0xff, 0xff, 0x3c, 0x5d, 0xff, 0xee, 0x30, 0x51, 0xff, 0xdf, 0x2c, 0x5d, 0xff, 0xbb, 0x2d, 0x5d, 0xff, 0x61, 0x09, 0x12, 0xff, 0xeb, 0x44, 0x81, 0xff, 0x66, 0x0c, 0x0d, 0xff, 0x53, 0x06, 0x00, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xef, 0xff, 0xf9, 0xf3, 0xee, 0xff, 0xfa, 0xf1, 0xec, 0xff, 0xfd, 0xef, 0xe8, 0xff, 0xfe, 0xeb, 0xe5, 0xff, 0xfd, 0xec, 0xe9, 0xff, 0xfc, 0xa6, 0x74, 0xff, 0xfc, 0x7d, 0x2c, 0xff, 0xfd, 0x82, 0x35, 0xff, 0xfd, 0x83, 0x37, 0xff, 0xfd, 0x84, 0x38, 0xff, 0xfd, 0x85, 0x39, 0xff, 0xfd, 0x86, 0x3a, 0xff, 0xfd, 0x86, 0x3a, 0xff, 0xfd, 0x85, 0x38, 0xff, 0xfc, 0x85, 0x36, 0xff, 0xfd, 0x83, 0x35, 0xff, 0xfd, 0x7c, 0x27, 0xff, 0xfb, 0xaf, 0x78, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfd, 0xf9, 0xff, 0xfb, 0xfd, 0xf9, 0xff, 0xfb, 0xfc, 0xf9, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfa, 0xfa, 0xf7, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfd, 0xf9, 0xf4, 0xff, 0xfb, 0x96, 0x4f, 0xff, 0xfd, 0x81, 0x28, 0xff, 0xfd, 0x86, 0x31, 0xff, 0xfd, 0x87, 0x33, 0xff, 0xfd, 0x81, 0x27, 0xff, 0xfc, 0xbc, 0x89, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfc, 0xff, 0xfd, 0xf5, 0xed, 0xff, 0xfd, 0x91, 0x3f, 0xff, 0xfd, 0x85, 0x27, 0xff, 0xfd, 0x89, 0x30, 0xff, 0xfd, 0x8b, 0x34, 0xff, 0xfd, 0x8c, 0x35, 0xff, 0xfd, 0x8d, 0x35, 0xff, 0xfd, 0x8d, 0x35, 0xff, 0xfd, 0x8e, 0x35, 0xff, 0xfd, 0x8e, 0x33, 0xff, 0xfd, 0x8c, 0x2d, 0xff, 0xfc, 0x95, 0x3d, 0xff, 0xfc, 0xef, 0xe4, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xbd, 0xb8, 0xff, 0x56, 0x0d, 0x02, 0xff, 0x5d, 0x10, 0x00, 0xff, 0x65, 0x18, 0x03, 0xff, 0x6e, 0x21, 0x04, 0xff, 0x7a, 0x28, 0x03, 0xff, 0xab, 0x5e, 0x02, 0xff, 0xff, 0xe3, 0x01, 0xff, 0xff, 0xe3, 0x00, 0xff, 0xfe, 0xe1, 0x00, 0xff, 0xff, 0xe6, 0x00, 0xff, 0xf4, 0xd1, 0x01, 0xff, 0x97, 0x43, 0x04, 0xff, 0x80, 0x2d, 0x06, 0xff, 0x73, 0x25, 0x07, 0xff, 0x68, 0x1d, 0x07, 0xff, 0x62, 0x19, 0x08, 0xff, 0x5e, 0x16, 0x07, 0xff, 0x5e, 0x14, 0x07, 0xff, 0x5c, 0x12, 0x08, 0xff, 0x5a, 0x11, 0x08, 0xff, 0x54, 0x0b, 0x04, 0xff, 0x84, 0x26, 0x0e, 0xff, 0xff, 0x76, 0x2d, 0xff, 0xaf, 0x29, 0x25, 0xff, 0xc2, 0x39, 0x2f, 0xff, 0xff, 0x84, 0x46, 0xff, 0xfd, 0x42, 0x6a, 0xff, 0xfd, 0x3e, 0x6b, 0xff, 0xfd, 0x3e, 0x69, 0xff, 0xfd, 0x3e, 0x69, 0xff, 0xfd, 0x3e, 0x69, 0xff, 0xff, 0x3c, 0x68, 0xff, 0xef, 0x2f, 0x55, 0xff, 0xea, 0x32, 0x6b, 0xff, 0xac, 0x29, 0x56, 0xff, 0x66, 0x0d, 0x19, 0xff, 0xe6, 0x41, 0x81, 0xff, 0x5d, 0x09, 0x07, 0xff, 0x52, 0x03, 0x00, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf4, 0xef, 0xff, 0xf9, 0xf3, 0xee, 0xff, 0xf9, 0xf0, 0xeb, 0xff, 0xfb, 0xed, 0xe6, 0xff, 0xfd, 0xeb, 0xe4, 0xff, 0xfd, 0xeb, 0xe8, 0xff, 0xfc, 0xa5, 0x76, 0xff, 0xfd, 0x78, 0x2f, 0xff, 0xfd, 0x7e, 0x38, 0xff, 0xfd, 0x80, 0x3a, 0xff, 0xfc, 0x81, 0x3c, 0xff, 0xfd, 0x82, 0x3d, 0xff, 0xfd, 0x82, 0x3e, 0xff, 0xfd, 0x82, 0x3e, 0xff, 0xfc, 0x82, 0x3c, 0xff, 0xfd, 0x82, 0x3a, 0xff, 0xfd, 0x7e, 0x36, 0xff, 0xfc, 0x7c, 0x30, 0xff, 0xfc, 0xdf, 0xc9, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfb, 0xfe, 0xfb, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xfd, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xc5, 0x9f, 0xff, 0xfd, 0x7b, 0x26, 0xff, 0xfd, 0x83, 0x33, 0xff, 0xfc, 0x84, 0x34, 0xff, 0xfd, 0x7d, 0x29, 0xff, 0xfc, 0xb9, 0x8b, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfb, 0xff, 0xfd, 0xf5, 0xed, 0xff, 0xfd, 0x8f, 0x43, 0xff, 0xfd, 0x82, 0x2b, 0xff, 0xfd, 0x87, 0x33, 0xff, 0xfd, 0x88, 0x35, 0xff, 0xfd, 0x89, 0x37, 0xff, 0xfd, 0x8a, 0x38, 0xff, 0xfd, 0x8a, 0x39, 0xff, 0xfd, 0x8b, 0x38, 0xff, 0xfd, 0x8a, 0x37, 0xff, 0xfe, 0x88, 0x32, 0xff, 0xfc, 0x93, 0x40, 0xff, 0xfc, 0xef, 0xe4, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfe, 0xfc, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x67, 0x5f, 0xff, 0x57, 0x07, 0x00, 0xff, 0x64, 0x17, 0x02, 0xff, 0x6f, 0x20, 0x02, 0xff, 0x7a, 0x27, 0x03, 0xff, 0xa2, 0x51, 0x02, 0xff, 0xfa, 0xd3, 0x01, 0xff, 0xff, 0xe2, 0x00, 0xff, 0xfe, 0xdb, 0x01, 0xff, 0xf8, 0xd1, 0x01, 0xff, 0xc6, 0x86, 0x03, 0xff, 0x8c, 0x35, 0x05, 0xff, 0x7f, 0x2c, 0x06, 0xff, 0x72, 0x23, 0x07, 0xff, 0x68, 0x1d, 0x08, 0xff, 0x63, 0x18, 0x07, 0xff, 0x60, 0x15, 0x08, 0xff, 0x5f, 0x14, 0x06, 0xff, 0x5c, 0x12, 0x07, 0xff, 0x59, 0x11, 0x07, 0xff, 0x56, 0x0c, 0x03, 0xff, 0x70, 0x17, 0x07, 0xff, 0xfa, 0x72, 0x29, 0xff, 0xc2, 0x38, 0x29, 0xff, 0xac, 0x1c, 0x2e, 0xff, 0xfb, 0x89, 0x46, 0xff, 0xfe, 0x5d, 0x69, 0xff, 0xfd, 0x3d, 0x76, 0xff, 0xfd, 0x41, 0x75, 0xff, 0xfd, 0x40, 0x74, 0xff, 0xfd, 0x40, 0x73, 0xff, 0xfe, 0x3d, 0x6f, 0xff, 0xeb, 0x29, 0x58, 0xff, 0xf5, 0x3b, 0x89, 0xff, 0x73, 0x12, 0x29, 0xff, 0x8e, 0x21, 0x3d, 0xff, 0xd2, 0x3d, 0x76, 0xff, 0x4a, 0x00, 0x00, 0xff, 0x6e, 0x1f, 0x03, 0xff,
0xfd, 0xf9, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf4, 0xee, 0xff, 0xfa, 0xf1, 0xea, 0xff, 0xfb, 0xec, 0xe6, 0xff, 0xfd, 0xea, 0xe4, 0xff, 0xfd, 0xeb, 0xe7, 0xff, 0xfc, 0xa2, 0x79, 0xff, 0xfd, 0x75, 0x33, 0xff, 0xfd, 0x7b, 0x3b, 0xff, 0xfd, 0x7b, 0x3c, 0xff, 0xfd, 0x7d, 0x3e, 0xff, 0xfd, 0x7f, 0x41, 0xff, 0xfd, 0x7f, 0x41, 0xff, 0xfd, 0x7f, 0x41, 0xff, 0xfd, 0x7f, 0x40, 0xff, 0xfd, 0x7d, 0x3e, 0xff, 0xfd, 0x76, 0x33, 0xff, 0xfb, 0x97, 0x60, 0xff, 0xfc, 0xfe, 0xfa, 0xff, 0xfc, 0xfe, 0xfa, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfb, 0xfd, 0xfa, 0xff, 0xfb, 0xf0, 0xe7, 0xff, 0xfc, 0xe8, 0xdc, 0xff, 0xfc, 0xe8, 0xdd, 0xff, 0xfc, 0xe8, 0xde, 0xff, 0xfc, 0xe8, 0xdf, 0xff, 0xfc, 0xe9, 0xe0, 0xff, 0xfc, 0xe9, 0xdf, 0xff, 0xfc, 0xe9, 0xdf, 0xff, 0xfc, 0xea, 0xdf, 0xff, 0xfc, 0xe9, 0xdd, 0xff, 0xfc, 0xf7, 0xf1, 0xff, 0xfc, 0xfe, 0xfb, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfe, 0xfb, 0xff, 0xfc, 0xf0, 0xe4, 0xff, 0xfc, 0x86, 0x40, 0xff, 0xfd, 0x7e, 0x32, 0xff, 0xfd, 0x80, 0x36, 0xff, 0xfd, 0x79, 0x2b, 0xff, 0xfc, 0xb8, 0x8e, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xf9, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfe, 0xfb, 0xff, 0xfd, 0xf4, 0xed, 0xff, 0xfc, 0x8b, 0x46, 0xff, 0xfd, 0x7d, 0x2f, 0xff, 0xfd, 0x82, 0x36, 0xff, 0xfd, 0x84, 0x38, 0xff, 0xfd, 0x84, 0x39, 0xff, 0xfd, 0x85, 0x3b, 0xff, 0xfd, 0x86, 0x3c, 0xff, 0xfd, 0x86, 0x3d, 0xff, 0xfd, 0x86, 0x3c, 0xff, 0xfd, 0x84, 0x36, 0xff, 0xfc, 0x8f, 0x44, 0xff, 0xfc, 0xf0, 0xe4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0xb4, 0xae, 0xff, 0x57, 0x08, 0x00, 0xff, 0x62, 0x16, 0x02, 0xff, 0x6e, 0x1f, 0x03, 0xff, 0x79, 0x29, 0x04, 0xff, 0x87, 0x30, 0x04, 0xff, 0xac, 0x5a, 0x03, 0xff, 0xc2, 0x78, 0x03, 0xff, 0xb6, 0x64, 0x03, 0xff, 0xa5, 0x4e, 0x03, 0xff, 0x90, 0x39, 0x04, 0xff, 0x85, 0x31, 0x05, 0xff, 0x7a, 0x28, 0x06, 0xff, 0x6e, 0x20, 0x07, 0xff, 0x66, 0x1a, 0x08, 0xff, 0x62, 0x17, 0x08, 0xff, 0x61, 0x15, 0x07, 0xff, 0x5f, 0x13, 0x06, 0xff, 0x5d, 0x11, 0x05, 0xff, 0x5a, 0x10, 0x04, 0xff, 0x59, 0x0d, 0x02, 0xff, 0x57, 0x08, 0x00, 0xff, 0xd6, 0x5b, 0x20, 0xff, 0xea, 0x5d, 0x2a, 0xff, 0x9a, 0x0b, 0x27, 0xff, 0xd8, 0x4f, 0x41, 0xff, 0xff, 0x88, 0x64, 0xff, 0xfd, 0x4e, 0x79, 0xff, 0xfd, 0x43, 0x7c, 0xff, 0xfd, 0x43, 0x7b, 0xff, 0xfc, 0x40, 0x76, 0xff, 0xf4, 0x34, 0x6c, 0xff, 0xfb, 0x38, 0x86, 0xff, 0xe8, 0x46, 0x71, 0xff, 0x54, 0x0b, 0x00, 0xff, 0xd8, 0x45, 0x84, 0xff, 0xa1, 0x29, 0x4c, 0xff, 0x42, 0x00, 0x00, 0xff, 0x9c, 0x52, 0x03, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xfb, 0xf4, 0xee, 0xff, 0xfb, 0xf2, 0xeb, 0xff, 0xfa, 0xed, 0xe7, 0xff, 0xfc, 0xea, 0xe4, 0xff, 0xfd, 0xeb, 0xe7, 0xff, 0xfb, 0x9f, 0x7a, 0xff, 0xfd, 0x72, 0x37, 0xff, 0xfd, 0x78, 0x3f, 0xff, 0xfd, 0x78, 0x40, 0xff, 0xfd, 0x7a, 0x42, 0xff, 0xfd, 0x7c, 0x44, 0xff, 0xfd, 0x7b, 0x44, 0xff, 0xfd, 0x7b, 0x44, 0xff, 0xfd, 0x7a, 0x43, 0xff, 0xfd, 0x78, 0x41, 0xff, 0xfc, 0x6f, 0x33, 0xff, 0xfc, 0xc6, 0xab, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfd, 0xfc, 0xf8, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xf9, 0x8e, 0x65, 0xff, 0xfc, 0x72, 0x40, 0xff, 0xfc, 0x75, 0x44, 0xff, 0xfc, 0x75, 0x44, 0xff, 0xfc, 0x75, 0x43, 0xff, 0xfc, 0x75, 0x43, 0xff, 0xfc, 0x75, 0x42, 0xff, 0xfc, 0x76, 0x41, 0xff, 0xfc, 0x77, 0x40, 0xff, 0xfc, 0x6f, 0x35, 0xff, 0xfa, 0xaf, 0x8d, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xaa, 0x7f, 0xff, 0xfd, 0x76, 0x2f, 0xff, 0xfd, 0x7d, 0x3a, 0xff, 0xfd, 0x76, 0x2f, 0xff, 0xfc, 0xb6, 0x90, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xf9, 0xff, 0xfb, 0xfc, 0xf8, 0xff, 0xfb, 0xfe, 0xfc, 0xff, 0xfd, 0xf4, 0xed, 0xff, 0xfc, 0x89, 0x48, 0xff, 0xfd, 0x7a, 0x32, 0xff, 0xfd, 0x7e, 0x3a, 0xff, 0xfd, 0x80, 0x3c, 0xff, 0xfd, 0x81, 0x3d, 0xff, 0xfd, 0x81, 0x3d, 0xff, 0xfd, 0x82, 0x3f, 0xff, 0xfd, 0x83, 0x40, 0xff, 0xfd, 0x83, 0x3f, 0xff, 0xfd, 0x80, 0x3a, 0xff, 0xfc, 0x8a, 0x47, 0xff, 0xfd, 0xee, 0xe4, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xac, 0xa7, 0xff, 0x52, 0x06, 0x00, 0xff, 0x61, 0x14, 0x02, 0xff, 0x6b, 0x1d, 0x05, 0xff, 0x74, 0x25, 0x06, 0xff, 0x7e, 0x2c, 0x05, 0xff, 0x89, 0x30, 0x04, 0xff, 0x8f, 0x33, 0x04, 0xff, 0x91, 0x36, 0x04, 0xff, 0x8e, 0x36, 0x04, 0xff, 0x86, 0x32, 0x05, 0xff, 0x7d, 0x2a, 0x05, 0xff, 0x74, 0x22, 0x06, 0xff, 0x6a, 0x1c, 0x07, 0xff, 0x65, 0x18, 0x07, 0xff, 0x62, 0x15, 0x07, 0xff, 0x5f, 0x13, 0x06, 0xff, 0x5e, 0x11, 0x06, 0xff, 0x5c, 0x0f, 0x05, 0xff, 0x5b, 0x0e, 0x03, 0xff, 0x59, 0x0d, 0x02, 0xff, 0x4c, 0x04, 0x00, 0xff, 0x87, 0x28, 0x0e, 0xff, 0xff, 0x77, 0x2b, 0xff, 0xbd, 0x2f, 0x27, 0xff, 0x9e, 0x0a, 0x28, 0xff, 0xe3, 0x53, 0x52, 0xff, 0xff, 0x75, 0x7c, 0xff, 0xff, 0x5a, 0x90, 0xff, 0xff, 0x4a, 0x8e, 0xff, 0xfe, 0x43, 0x8d, 0xff, 0xff, 0x46, 0x9b, 0xff, 0xdd, 0x36, 0x85, 0xff, 0xcf, 0x7e, 0x0e, 0xff, 0xdf, 0x78, 0x41, 0xff, 0xe6, 0x46, 0x98, 0xff, 0x5f, 0x0a, 0x0b, 0xff, 0x4c, 0x00, 0x00, 0xff, 0xcf, 0x8f, 0x03, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf8, 0xf5, 0xef, 0xff, 0xf9, 0xf3, 0xee, 0xff, 0xfb, 0xf1, 0xeb, 0xff, 0xfb, 0xed, 0xe8, 0xff, 0xfd, 0xea, 0xe5, 0xff, 0xfd, 0xeb, 0xe8, 0xff, 0xfb, 0x9e, 0x7e, 0xff, 0xfd, 0x71, 0x3b, 0xff, 0xfd, 0x76, 0x42, 0xff, 0xfd, 0x76, 0x43, 0xff, 0xfd, 0x77, 0x46, 0xff, 0xfd, 0x79, 0x47, 0xff, 0xfc, 0x79, 0x48, 0xff, 0xfd, 0x78, 0x48, 0xff, 0xfd, 0x76, 0x46, 0xff, 0xfd, 0x72, 0x40, 0xff, 0xfc, 0x7e, 0x4d, 0xff, 0xfd, 0xf0, 0xe7, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfb, 0xd9, 0xcb, 0xff, 0xfc, 0x6c, 0x3e, 0xff, 0xfd, 0x6f, 0x40, 0xff, 0xfd, 0x6f, 0x41, 0xff, 0xfd, 0x6f, 0x42, 0xff, 0xfd, 0x70, 0x42, 0xff, 0xfd, 0x70, 0x42, 0xff, 0xfd, 0x71, 0x41, 0xff, 0xfd, 0x72, 0x40, 0xff, 0xfd, 0x72, 0x3f, 0xff, 0xfd, 0x6d, 0x38, 0xff, 0xfc, 0x7e, 0x4e, 0xff, 0xfd, 0xf5, 0xef, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xdb, 0xca, 0xff, 0xfc, 0x76, 0x38, 0xff, 0xfd, 0x7a, 0x3b, 0xff, 0xfd, 0x73, 0x32, 0xff, 0xfc, 0xb4, 0x8f, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfc, 0xfd, 0xf9, 0xff, 0xfd, 0xfe, 0xfc, 0xff, 0xfd, 0xf4, 0xed, 0xff, 0xfc, 0x85, 0x4b, 0xff, 0xfd, 0x78, 0x35, 0xff, 0xfd, 0x7b, 0x3d, 0xff, 0xfd, 0x7c, 0x3e, 0xff, 0xfd, 0x7e, 0x40, 0xff, 0xfd, 0x7e, 0x41, 0xff, 0xfc, 0x7f, 0x42, 0xff, 0xfc, 0x7f, 0x43, 0xff, 0xfd, 0x80, 0x43, 0xff, 0xfd, 0x7d, 0x3e, 0xff, 0xfc, 0x88, 0x4b, 0xff, 0xfc, 0xee, 0xe4, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x98, 0x6f, 0x69, 0xff, 0x4e, 0x02, 0x00, 0xff, 0x5e, 0x13, 0x03, 0xff, 0x66, 0x19, 0x05, 0xff, 0x6e, 0x1f, 0x06, 0xff, 0x75, 0x25, 0x07, 0xff, 0x7d, 0x2b, 0x07, 0xff, 0x81, 0x2e, 0x07, 0xff, 0x83, 0x2f, 0x07, 0xff, 0x80, 0x2d, 0x07, 0xff, 0x7b, 0x2a, 0x06, 0xff, 0x74, 0x24, 0x05, 0xff, 0x6c, 0x1e, 0x07, 0xff, 0x66, 0x1a, 0x07, 0xff, 0x64, 0x17, 0x06, 0xff, 0x61, 0x14, 0x06, 0xff, 0x5f, 0x12, 0x06, 0xff, 0x5c, 0x10, 0x05, 0xff, 0x59, 0x0e, 0x03, 0xff, 0x59, 0x0c, 0x03, 0xff, 0x52, 0x07, 0x00, 0xff, 0x66, 0x13, 0x03, 0xff, 0x53, 0x07, 0x01, 0xff, 0xbf, 0x48, 0x1b, 0xff, 0xff, 0x6b, 0x30, 0xff, 0xb3, 0x23, 0x28, 0xff, 0x9d, 0x06, 0x23, 0xff, 0xc4, 0x26, 0x45, 0xff, 0xdf, 0x41, 0x74, 0xff, 0xe8, 0x49, 0x88, 0xff, 0xda, 0x3e, 0x7e, 0xff, 0xa6, 0x20, 0x49, 0xff, 0x5b, 0x01, 0x07, 0xff, 0x8b, 0x22, 0x2e, 0xff, 0xff, 0x5b, 0x9e, 0xff, 0x88, 0x1d, 0x36, 0xff, 0x45, 0x00, 0x00, 0xff, 0x79, 0x2a, 0x02, 0xff, 0xe2, 0x9e, 0x04, 0xff,
0xfd, 0xfb, 0xf5, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfa, 0xf8, 0xf2, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf3, 0xee, 0xff, 0xfb, 0xf1, 0xec, 0xff, 0xfc, 0xee, 0xe9, 0xff, 0xfd, 0xeb, 0xe6, 0xff, 0xfd, 0xeb, 0xe9, 0xff, 0xfc, 0x9c, 0x81, 0xff, 0xfd, 0x6d, 0x3f, 0xff, 0xfd, 0x72, 0x46, 0xff, 0xfd, 0x73, 0x48, 0xff, 0xfd, 0x74, 0x4b, 0xff, 0xfd, 0x76, 0x4c, 0xff, 0xfd, 0x76, 0x4c, 0xff, 0xfd, 0x75, 0x4b, 0xff, 0xfd, 0x74, 0x49, 0xff, 0xfd, 0x6a, 0x3c, 0xff, 0xfb, 0xab, 0x8c, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf7, 0xff, 0xfe, 0xfd, 0xf8, 0xff, 0xfd, 0xfd, 0xfa, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfb, 0xa5, 0x8c, 0xff, 0xfd, 0x66, 0x3b, 0xff, 0xfd, 0x70, 0x45, 0xff, 0xfd, 0x70, 0x45, 0xff, 0xfd, 0x70, 0x47, 0xff, 0xfd, 0x70, 0x48, 0xff, 0xfd, 0x71, 0x48, 0xff, 0xfd, 0x71, 0x48, 0xff, 0xfd, 0x72, 0x47, 0xff, 0xfd, 0x72, 0x45, 0xff, 0xfd, 0x70, 0x44, 0xff, 0xfc, 0x68, 0x39, 0xff, 0xfc, 0xcd, 0xba, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfd, 0xfe, 0xfa, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xfc, 0x90, 0x65, 0xff, 0xfd, 0x73, 0x3a, 0xff, 0xfd, 0x70, 0x35, 0xff, 0xfc, 0xb3, 0x92, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfa, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfd, 0xf5, 0xee, 0xff, 0xfc, 0x82, 0x4e, 0xff, 0xfd, 0x73, 0x39, 0xff, 0xfd, 0x77, 0x3f, 0xff, 0xfd, 0x79, 0x42, 0xff, 0xfd, 0x7a, 0x43, 0xff, 0xfd, 0x7b, 0x45, 0xff, 0xfd, 0x7c, 0x45, 0xff, 0xfd, 0x7d, 0x45, 0xff, 0xfc, 0x7c, 0x46, 0xff, 0xfd, 0x7a, 0x41, 0xff, 0xfc, 0x86, 0x50, 0xff, 0xfd, 0xef, 0xe6, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf1, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfe, 0xfb, 0xf7, 0xff, 0xfa, 0xf7, 0xf3, 0xff, 0x6d, 0x31, 0x2a, 0xff, 0x51, 0x07, 0x00, 0xff, 0x5b, 0x12, 0x03, 0xff, 0x60, 0x16, 0x05, 0xff, 0x67, 0x1b, 0x07, 0xff, 0x6d, 0x1f, 0x08, 0xff, 0x71, 0x23, 0x08, 0xff, 0x74, 0x25, 0x08, 0xff, 0x76, 0x26, 0x07, 0xff, 0x74, 0x25, 0x07, 0xff, 0x71, 0x22, 0x07, 0xff, 0x6b, 0x1e, 0x07, 0xff, 0x66, 0x1a, 0x07, 0xff, 0x64, 0x17, 0x07, 0xff, 0x61, 0x15, 0x06, 0xff, 0x5f, 0x12, 0x05, 0xff, 0x5e, 0x0f, 0x04, 0xff, 0x5a, 0x0d, 0x03, 0xff, 0x54, 0x09, 0x02, 0xff, 0x4e, 0x05, 0x01, 0xff, 0x93, 0x2b, 0x0c, 0xff, 0xca, 0x4a, 0x13, 0xff, 0x5b, 0x0d, 0x02, 0xff, 0x54, 0x08, 0x01, 0xff, 0xca, 0x4c, 0x25, 0xff, 0xff, 0x67, 0x3f, 0xff, 0xce, 0x36, 0x38, 0xff, 0xa0, 0x0f, 0x21, 0xff, 0x8b, 0x03, 0x11, 0xff, 0x81, 0x01, 0x0c, 0xff, 0x72, 0x00, 0x05, 0xff, 0x72, 0x07, 0x12, 0xff, 0xb4, 0x2d, 0x56, 0xff, 0xf7, 0x4d, 0x96, 0xff, 0x98, 0x23, 0x43, 0xff, 0x49, 0x01, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff, 0xcf, 0x87, 0x03, 0xff, 0xa6, 0x56, 0x07, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xfa, 0xf3, 0xef, 0xff, 0xfb, 0xf1, 0xed, 0xff, 0xfc, 0xef, 0xea, 0xff, 0xfd, 0xec, 0xe7, 0xff, 0xfd, 0xec, 0xe9, 0xff, 0xfc, 0x9a, 0x83, 0xff, 0xfd, 0x69, 0x43, 0xff, 0xfd, 0x70, 0x4a, 0xff, 0xfd, 0x72, 0x4c, 0xff, 0xfd, 0x72, 0x4f, 0xff, 0xfd, 0x72, 0x50, 0xff, 0xfd, 0x73, 0x4f, 0xff, 0xfd, 0x72, 0x4d, 0xff, 0xfd, 0x6f, 0x4a, 0xff, 0xfc, 0x71, 0x4b, 0xff, 0xfc, 0xe7, 0xda, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xf5, 0xf1, 0xff, 0xfb, 0x77, 0x57, 0xff, 0xfd, 0x69, 0x44, 0xff, 0xfd, 0x6d, 0x48, 0xff, 0xfd, 0x6d, 0x48, 0xff, 0xfd, 0x6d, 0x49, 0xff, 0xfd, 0x6e, 0x4a, 0xff, 0xfd, 0x6e, 0x4b, 0xff, 0xfd, 0x6f, 0x4b, 0xff, 0xfd, 0x6f, 0x4b, 0xff, 0xfd, 0x6f, 0x49, 0xff, 0xfd, 0x6e, 0x49, 0xff, 0xfd, 0x66, 0x3e, 0xff, 0xfb, 0x96, 0x78, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfc, 0xcb, 0xb7, 0xff, 0xfc, 0x6f, 0x3c, 0xff, 0xfd, 0x6c, 0x38, 0xff, 0xfc, 0xb4, 0x98, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfb, 0x80, 0x51, 0xff, 0xfd, 0x70, 0x3c, 0xff, 0xfd, 0x75, 0x43, 0xff, 0xfd, 0x76, 0x45, 0xff, 0xfd, 0x77, 0x47, 0xff, 0xfd, 0x79, 0x48, 0xff, 0xfd, 0x7a, 0x49, 0xff, 0xfd, 0x7b, 0x49, 0xff, 0xfd, 0x7b, 0x49, 0xff, 0xfd, 0x77, 0x44, 0xff, 0xfd, 0x84, 0x53, 0xff, 0xfc, 0xef, 0xe7, 0xff, 0xfc, 0xf8, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd7, 0xc7, 0xc3, 0xff, 0x52, 0x09, 0x00, 0xff, 0x56, 0x0c, 0x00, 0xff, 0x59, 0x11, 0x03, 0xff, 0x5d, 0x15, 0x06, 0xff, 0x61, 0x18, 0x08, 0xff, 0x66, 0x1a, 0x08, 0xff, 0x69, 0x1c, 0x08, 0xff, 0x6a, 0x1d, 0x08, 0xff, 0x69, 0x1d, 0x08, 0xff, 0x69, 0x1d, 0x08, 0xff, 0x67, 0x1b, 0x08, 0xff, 0x65, 0x19, 0x07, 0xff, 0x63, 0x17, 0x07, 0xff, 0x60, 0x15, 0x06, 0xff, 0x5e, 0x12, 0x05, 0xff, 0x5c, 0x0f, 0x04, 0xff, 0x59, 0x0d, 0x03, 0xff, 0x4f, 0x06, 0x01, 0xff, 0x59, 0x0d, 0x02, 0xff, 0xb8, 0x48, 0x0e, 0xff, 0xbe, 0x48, 0x14, 0xff, 0x60, 0x10, 0x03, 0xff, 0x53, 0x08, 0x00, 0xff, 0x52, 0x08, 0x00, 0xff, 0x55, 0x08, 0x02, 0xff, 0xa2, 0x31, 0x21, 0xff, 0xf1, 0x58, 0x4e, 0xff, 0xfd, 0x56, 0x66, 0xff, 0xea, 0x44, 0x68, 0xff, 0xde, 0x3d, 0x6a, 0xff, 0xe5, 0x42, 0x7a, 0xff, 0xf6, 0x4c, 0x91, 0xff, 0xe0, 0x44, 0x7f, 0xff, 0x7f, 0x17, 0x29, 0xff, 0x48, 0x01, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff, 0x9e, 0x52, 0x01, 0xff, 0xdb, 0x95, 0x06, 0xff, 0x6b, 0x10, 0x04, 0xff,
0xfe, 0xfb, 0xf6, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfa, 0xf6, 0xf2, 0xff, 0xf9, 0xf4, 0xef, 0xff, 0xfa, 0xf3, 0xee, 0xff, 0xfb, 0xf1, 0xed, 0xff, 0xfc, 0xef, 0xea, 0xff, 0xfd, 0xec, 0xe7, 0xff, 0xfd, 0xec, 0xe8, 0xff, 0xfc, 0x98, 0x85, 0xff, 0xfd, 0x65, 0x46, 0xff, 0xfd, 0x6c, 0x4e, 0xff, 0xfe, 0x6f, 0x50, 0xff, 0xfd, 0x70, 0x52, 0xff, 0xfd, 0x6f, 0x52, 0xff, 0xfd, 0x6e, 0x51, 0xff, 0xfd, 0x6e, 0x4f, 0xff, 0xfd, 0x6a, 0x4c, 0xff, 0xfc, 0x72, 0x55, 0xff, 0xfc, 0xcb, 0xbe, 0xff, 0xfc, 0xd9, 0xcf, 0xff, 0xfc, 0xd7, 0xcd, 0xff, 0xfc, 0xd8, 0xcf, 0xff, 0xfc, 0xdd, 0xd5, 0xff, 0xfb, 0xa7, 0x97, 0xff, 0xfd, 0x63, 0x46, 0xff, 0xfd, 0x6a, 0x4c, 0xff, 0xfd, 0x6a, 0x4b, 0xff, 0xfd, 0x69, 0x4b, 0xff, 0xfd, 0x6a, 0x4c, 0xff, 0xfd, 0x6b, 0x4e, 0xff, 0xfd, 0x6b, 0x50, 0xff, 0xfd, 0x6c, 0x50, 0xff, 0xfd, 0x6b, 0x4f, 0xff, 0xfd, 0x6c, 0x4f, 0xff, 0xfd, 0x6c, 0x4e, 0xff, 0xfd, 0x69, 0x4a, 0xff, 0xfc, 0x6c, 0x4b, 0xff, 0xfb, 0xc5, 0xb6, 0xff, 0xfb, 0xd9, 0xcf, 0xff, 0xfc, 0xd6, 0xcb, 0xff, 0xfc, 0xd6, 0xcb, 0xff, 0xfc, 0xdd, 0xd2, 0xff, 0xfc, 0xb9, 0xa5, 0xff, 0xfc, 0x6d, 0x43, 0xff, 0xfd, 0x6b, 0x40, 0xff, 0xfc, 0x8b, 0x6b, 0xff, 0xfc, 0xd9, 0xcb, 0xff, 0xfc, 0xd9, 0xcb, 0xff, 0xfc, 0xd8, 0xcb, 0xff, 0xfc, 0xdd, 0xd1, 0xff, 0xfc, 0xc2, 0xb0, 0xff, 0xfc, 0x72, 0x49, 0xff, 0xfd, 0x70, 0x44, 0xff, 0xfd, 0x72, 0x47, 0xff, 0xfd, 0x74, 0x49, 0xff, 0xfd, 0x74, 0x4b, 0xff, 0xfd, 0x75, 0x4c, 0xff, 0xfd, 0x76, 0x4d, 0xff, 0xfd, 0x78, 0x4e, 0xff, 0xfd, 0x78, 0x4d, 0xff, 0xfd, 0x73, 0x47, 0xff, 0xfc, 0x80, 0x55, 0xff, 0xfd, 0xef, 0xe8, 0xff, 0xfc, 0xf8, 0xf4, 0xff, 0xfb, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0x7d, 0x78, 0xff, 0x4a, 0x00, 0x00, 0xff, 0x57, 0x0d, 0x01, 0xff, 0x59, 0x10, 0x04, 0xff, 0x5c, 0x13, 0x07, 0xff, 0x5f, 0x15, 0x08, 0xff, 0x62, 0x17, 0x07, 0xff, 0x63, 0x18, 0x08, 0xff, 0x64, 0x19, 0x08, 0xff, 0x64, 0x19, 0x07, 0xff, 0x62, 0x18, 0x07, 0xff, 0x62, 0x18, 0x07, 0xff, 0x61, 0x17, 0x07, 0xff, 0x5e, 0x14, 0x07, 0xff, 0x5c, 0x12, 0x06, 0xff, 0x5b, 0x10, 0x03, 0xff, 0x59, 0x0d, 0x02, 0xff, 0x4d, 0x04, 0x01, 0xff, 0x7a, 0x26, 0x03, 0xff, 0xd3, 0x66, 0x0a, 0xff, 0x9b, 0x39, 0x09, 0xff, 0x4f, 0x07, 0x01, 0xff, 0x52, 0x09, 0x01, 0xff, 0x57, 0x0b, 0x02, 0xff, 0x58, 0x0b, 0x03, 0xff, 0x57, 0x0b, 0x02, 0xff, 0x50, 0x06, 0x00, 0xff, 0x61, 0x0e, 0x07, 0xff, 0x8c, 0x20, 0x22, 0xff, 0xb1, 0x2e, 0x42, 0xff, 0xb9, 0x31, 0x51, 0xff, 0xa5, 0x29, 0x46, 0xff, 0x7b, 0x16, 0x25, 0xff, 0x50, 0x04, 0x01, 0xff, 0x46, 0x01, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff, 0x88, 0x3b, 0x01, 0xff, 0xe9, 0xa4, 0x04, 0xff, 0x7d, 0x24, 0x05, 0xff, 0x7c, 0x2a, 0x20, 0xff,
0xfe, 0xfb, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfa, 0xf6, 0xf2, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xfa, 0xf2, 0xee, 0xff, 0xfb, 0xf1, 0xed, 0xff, 0xfc, 0xef, 0xea, 0xff, 0xfd, 0xeb, 0xe6, 0xff, 0xfd, 0xec, 0xe8, 0xff, 0xfc, 0x95, 0x87, 0xff, 0xfd, 0x62, 0x4a, 0xff, 0xfd, 0x6a, 0x52, 0xff, 0xfd, 0x6b, 0x54, 0xff, 0xfe, 0x6d, 0x55, 0xff, 0xfd, 0x6d, 0x55, 0xff, 0xfd, 0x6b, 0x53, 0xff, 0xfd, 0x6a, 0x52, 0xff, 0xfd, 0x69, 0x51, 0xff, 0xfd, 0x66, 0x4e, 0xff, 0xfd, 0x62, 0x4b, 0xff, 0xfc, 0x63, 0x4c, 0xff, 0xfd, 0x62, 0x4c, 0xff, 0xfc, 0x62, 0x4b, 0xff, 0xfc, 0x62, 0x4c, 0xff, 0xfd, 0x61, 0x4b, 0xff, 0xfd, 0x67, 0x50, 0xff, 0xfd, 0x68, 0x4f, 0xff, 0xfd, 0x69, 0x4f, 0xff, 0xfd, 0x68, 0x50, 0xff, 0xfd, 0x68, 0x50, 0xff, 0xfd, 0x6a, 0x52, 0xff, 0xfd, 0x6b, 0x53, 0xff, 0xfd, 0x6b, 0x54, 0xff, 0xfd, 0x6b, 0x54, 0xff, 0xfd, 0x6a, 0x52, 0xff, 0xfd, 0x6a, 0x51, 0xff, 0xfd, 0x6a, 0x4f, 0xff, 0xfd, 0x66, 0x4b, 0xff, 0xfd, 0x62, 0x45, 0xff, 0xfc, 0x63, 0x47, 0xff, 0xfd, 0x62, 0x47, 0xff, 0xfd, 0x62, 0x47, 0xff, 0xfc, 0x64, 0x48, 0xff, 0xfc, 0x67, 0x48, 0xff, 0xfd, 0x6c, 0x4c, 0xff, 0xfd, 0x6d, 0x4c, 0xff, 0xfd, 0x68, 0x46, 0xff, 0xfc, 0x66, 0x44, 0xff, 0xfc, 0x67, 0x45, 0xff, 0xfc, 0x67, 0x47, 0xff, 0xfc, 0x68, 0x47, 0xff, 0xfd, 0x67, 0x47, 0xff, 0xfd, 0x6c, 0x4b, 0xff, 0xfd, 0x6f, 0x4a, 0xff, 0xfd, 0x70, 0x4b, 0xff, 0xfd, 0x71, 0x4d, 0xff, 0xfd, 0x72, 0x4f, 0xff, 0xfd, 0x73, 0x50, 0xff, 0xfd, 0x74, 0x51, 0xff, 0xfd, 0x75, 0x51, 0xff, 0xfd, 0x74, 0x50, 0xff, 0xfd, 0x6f, 0x4a, 0xff, 0xfc, 0x7b, 0x57, 0xff, 0xfd, 0xf0, 0xe8, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfe, 0xfc, 0xf8, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0x6d, 0x34, 0x2e, 0xff, 0x4d, 0x03, 0x00, 0xff, 0x56, 0x0d, 0x01, 0xff, 0x59, 0x0f, 0x03, 0xff, 0x5b, 0x12, 0x06, 0xff, 0x5c, 0x14, 0x07, 0xff, 0x5d, 0x15, 0x08, 0xff, 0x5f, 0x16, 0x09, 0xff, 0x5f, 0x16, 0x09, 0xff, 0x5f, 0x16, 0x08, 0xff, 0x5f, 0x16, 0x08, 0xff, 0x5d, 0x15, 0x08, 0xff, 0x5c, 0x13, 0x07, 0xff, 0x5b, 0x12, 0x06, 0xff, 0x59, 0x10, 0x04, 0xff, 0x54, 0x0a, 0x02, 0xff, 0x54, 0x08, 0x01, 0xff, 0xa3, 0x4b, 0x03, 0xff, 0xd6, 0x73, 0x04, 0xff, 0x75, 0x25, 0x03, 0xff, 0x46, 0x02, 0x00, 0xff, 0x53, 0x0a, 0x02, 0xff, 0x56, 0x0c, 0x02, 0xff, 0x57, 0x0c, 0x03, 0xff, 0x58, 0x0c, 0x03, 0xff, 0x58, 0x0b, 0x03, 0xff, 0x55, 0x09, 0x01, 0xff, 0x4f, 0x06, 0x00, 0xff, 0x4f, 0x04, 0x00, 0xff, 0x51, 0x03, 0x00, 0xff, 0x50, 0x02, 0x00, 0xff, 0x4c, 0x02, 0x00, 0xff, 0x4a, 0x03, 0x00, 0xff, 0x49, 0x02, 0x00, 0xff, 0x47, 0x00, 0x01, 0xff, 0x94, 0x43, 0x01, 0xff, 0xeb, 0x9f, 0x03, 0xff, 0x8c, 0x34, 0x08, 0xff, 0x6e, 0x14, 0x0f, 0xff, 0xd8, 0xba, 0xb1, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf7, 0xf3, 0xff, 0xfa, 0xf6, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf3, 0xee, 0xff, 0xfa, 0xf1, 0xec, 0xff, 0xfc, 0xef, 0xe9, 0xff, 0xfe, 0xeb, 0xe6, 0xff, 0xfd, 0xeb, 0xe9, 0xff, 0xfc, 0x92, 0x89, 0xff, 0xfd, 0x5e, 0x4e, 0xff, 0xfd, 0x66, 0x55, 0xff, 0xfd, 0x67, 0x56, 0xff, 0xfd, 0x69, 0x57, 0xff, 0xfd, 0x69, 0x58, 0xff, 0xfd, 0x68, 0x56, 0xff, 0xfd, 0x67, 0x55, 0xff, 0xfd, 0x65, 0x54, 0xff, 0xfd, 0x63, 0x54, 0xff, 0xfe, 0x63, 0x53, 0xff, 0xfd, 0x64, 0x54, 0xff, 0xfd, 0x65, 0x55, 0xff, 0xfd, 0x66, 0x54, 0xff, 0xfd, 0x65, 0x54, 0xff, 0xfd, 0x66, 0x54, 0xff, 0xfd, 0x66, 0x54, 0xff, 0xfd, 0x65, 0x54, 0xff, 0xfd, 0x66, 0x55, 0xff, 0xfd, 0x66, 0x55, 0xff, 0xfd, 0x66, 0x55, 0xff, 0xfd, 0x68, 0x56, 0xff, 0xfd, 0x6a, 0x58, 0xff, 0xfd, 0x6b, 0x59, 0xff, 0xfd, 0x6b, 0x57, 0xff, 0xfd, 0x6a, 0x55, 0xff, 0xfd, 0x6a, 0x54, 0xff, 0xfd, 0x69, 0x53, 0xff, 0xfd, 0x68, 0x51, 0xff, 0xfd, 0x67, 0x51, 0xff, 0xfd, 0x68, 0x51, 0xff, 0xfd, 0x68, 0x51, 0xff, 0xfd, 0x67, 0x50, 0xff, 0xfd, 0x69, 0x50, 0xff, 0xfd, 0x6b, 0x52, 0xff, 0xfd, 0x6b, 0x53, 0xff, 0xfd, 0x6b, 0x52, 0xff, 0xfd, 0x6b, 0x51, 0xff, 0xfd, 0x6a, 0x50, 0xff, 0xfd, 0x6a, 0x50, 0xff, 0xfd, 0x6a, 0x51, 0xff, 0xfd, 0x6b, 0x50, 0xff, 0xfd, 0x6b, 0x51, 0xff, 0xfd, 0x6c, 0x51, 0xff, 0xfd, 0x6d, 0x50, 0xff, 0xfd, 0x6e, 0x51, 0xff, 0xfd, 0x6f, 0x53, 0xff, 0xfe, 0x6f, 0x54, 0xff, 0xfd, 0x6f, 0x55, 0xff, 0xfd, 0x70, 0x55, 0xff, 0xfd, 0x71, 0x54, 0xff, 0xfd, 0x71, 0x53, 0xff, 0xfd, 0x6c, 0x4c, 0xff, 0xfc, 0x77, 0x59, 0xff, 0xfd, 0xf0, 0xe8, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xc3, 0xbe, 0xff, 0x4c, 0x06, 0x00, 0xff, 0x51, 0x09, 0x00, 0xff, 0x56, 0x0c, 0x03, 0xff, 0x58, 0x0e, 0x02, 0xff, 0x58, 0x10, 0x04, 0xff, 0x59, 0x12, 0x08, 0xff, 0x5b, 0x13, 0x09, 0xff, 0x5d, 0x14, 0x09, 0xff, 0x5d, 0x14, 0x09, 0xff, 0x5d, 0x14, 0x0a, 0xff, 0x5c, 0x14, 0x09, 0xff, 0x5a, 0x13, 0x09, 0xff, 0x59, 0x11, 0x07, 0xff, 0x58, 0x0f, 0x05, 0xff, 0x50, 0x06, 0x01, 0xff, 0x66, 0x19, 0x02, 0xff, 0xc8, 0x75, 0x03, 0xff, 0xba, 0x66, 0x03, 0xff, 0x58, 0x0f, 0x01, 0xff, 0x4a, 0x05, 0x01, 0xff, 0x52, 0x0a, 0x02, 0xff, 0x55, 0x0c, 0x03, 0xff, 0x57, 0x0c, 0x03, 0xff, 0x58, 0x0c, 0x03, 0xff, 0x58, 0x0c, 0x03, 0xff, 0x50, 0x09, 0x00, 0xff, 0x91, 0x1c, 0x23, 0xff, 0xc6, 0x2b, 0x40, 0xff, 0x64, 0x0b, 0x09, 0xff, 0x51, 0x05, 0x00, 0xff, 0x53, 0x05, 0x00, 0xff, 0x4c, 0x04, 0x00, 0xff, 0x44, 0x01, 0x00, 0xff, 0x64, 0x10, 0x04, 0xff, 0xc3, 0x67, 0x03, 0xff, 0xe4, 0x8a, 0x05, 0xff, 0x88, 0x25, 0x06, 0xff, 0x63, 0x01, 0x00, 0xff, 0xa2, 0x68, 0x5e, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xf9, 0xf1, 0xec, 0xff, 0xfc, 0xee, 0xe9, 0xff, 0xfd, 0xeb, 0xe6, 0xff, 0xfd, 0xeb, 0xe9, 0xff, 0xfc, 0x8e, 0x8a, 0xff, 0xfd, 0x58, 0x50, 0xff, 0xfe, 0x60, 0x58, 0xff, 0xfd, 0x62, 0x58, 0xff, 0xfd, 0x64, 0x59, 0xff, 0xfd, 0x64, 0x5a, 0xff, 0xfd, 0x64, 0x59, 0xff, 0xfd, 0x63, 0x59, 0xff, 0xfe, 0x61, 0x57, 0xff, 0xfd, 0x61, 0x58, 0xff, 0xfd, 0x61, 0x58, 0xff, 0xfd, 0x63, 0x5a, 0xff, 0xfd, 0x65, 0x5a, 0xff, 0xfd, 0x65, 0x59, 0xff, 0xfd, 0x63, 0x59, 0xff, 0xfd, 0x63, 0x59, 0xff, 0xfd, 0x63, 0x58, 0xff, 0xfd, 0x63, 0x59, 0xff, 0xfd, 0x63, 0x59, 0xff, 0xfd, 0x64, 0x5a, 0xff, 0xfd, 0x64, 0x59, 0xff, 0xfd, 0x65, 0x5a, 0xff, 0xfd, 0x67, 0x5b, 0xff, 0xfd, 0x69, 0x5b, 0xff, 0xfd, 0x68, 0x5a, 0xff, 0xfd, 0x67, 0x59, 0xff, 0xfd, 0x66, 0x58, 0xff, 0xfd, 0x66, 0x57, 0xff, 0xfd, 0x66, 0x56, 0xff, 0xfd, 0x65, 0x56, 0xff, 0xfd, 0x66, 0x57, 0xff, 0xfd, 0x67, 0x57, 0xff, 0xfd, 0x68, 0x57, 0xff, 0xfd, 0x69, 0x57, 0xff, 0xfd, 0x69, 0x58, 0xff, 0xfe, 0x6a, 0x58, 0xff, 0xfd, 0x6a, 0x57, 0xff, 0xfd, 0x69, 0x57, 0xff, 0xfd, 0x69, 0x56, 0xff, 0xfd, 0x69, 0x56, 0xff, 0xfd, 0x69, 0x56, 0xff, 0xfd, 0x6a, 0x55, 0xff, 0xfd, 0x6b, 0x55, 0xff, 0xfe, 0x6b, 0x56, 0xff, 0xfe, 0x6b, 0x56, 0xff, 0xfd, 0x6b, 0x56, 0xff, 0xfd, 0x6b, 0x57, 0xff, 0xfd, 0x6c, 0x57, 0xff, 0xfd, 0x6c, 0x57, 0xff, 0xfd, 0x6d, 0x57, 0xff, 0xfd, 0x6f, 0x57, 0xff, 0xfd, 0x6e, 0x55, 0xff, 0xfd, 0x69, 0x4f, 0xff, 0xfc, 0x76, 0x5e, 0xff, 0xfd, 0xf0, 0xe9, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x7f, 0x7b, 0xff, 0x43, 0x00, 0x00, 0xff, 0x53, 0x0b, 0x01, 0xff, 0x54, 0x0c, 0x03, 0xff, 0x56, 0x0d, 0x03, 0xff, 0x57, 0x0f, 0x05, 0xff, 0x58, 0x11, 0x07, 0xff, 0x5a, 0x12, 0x08, 0xff, 0x5a, 0x12, 0x09, 0xff, 0x5b, 0x13, 0x0a, 0xff, 0x5b, 0x13, 0x0a, 0xff, 0x5a, 0x12, 0x09, 0xff, 0x5a, 0x11, 0x08, 0xff, 0x59, 0x10, 0x06, 0xff, 0x52, 0x07, 0x04, 0xff, 0x87, 0x34, 0x03, 0xff, 0xdb, 0x87, 0x03, 0xff, 0x92, 0x49, 0x02, 0xff, 0x48, 0x03, 0x01, 0xff, 0x4e, 0x08, 0x01, 0xff, 0x54, 0x0c, 0x03, 0xff, 0x55, 0x0d, 0x04, 0xff, 0x56, 0x0d, 0x04, 0xff, 0x57, 0x0d, 0x04, 0xff, 0x59, 0x0c, 0x04, 0xff, 0x58, 0x0b, 0x02, 0xff, 0x53, 0x09, 0x00, 0xff, 0xd2, 0x33, 0x4a, 0xff, 0xfd, 0x41, 0x64, 0xff, 0x5a, 0x08, 0x09, 0xff, 0x48, 0x02, 0x00, 0xff, 0x5c, 0x08, 0x05, 0xff, 0x7c, 0x14, 0x10, 0xff, 0xb4, 0x2b, 0x1c, 0xff, 0xd6, 0x49, 0x17, 0xff, 0xb1, 0x4c, 0x07, 0xff, 0x79, 0x0f, 0x04, 0xff, 0x9d, 0x50, 0x4d, 0xff, 0x89, 0x40, 0x35, 0xff, 0x9f, 0x6d, 0x64, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf8, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf7, 0xf3, 0xee, 0xff, 0xf9, 0xf1, 0xed, 0xff, 0xfc, 0xee, 0xe9, 0xff, 0xfd, 0xea, 0xe6, 0xff, 0xfd, 0xeb, 0xe9, 0xff, 0xfc, 0x91, 0x92, 0xff, 0xfd, 0x52, 0x54, 0xff, 0xfd, 0x5b, 0x5b, 0xff, 0xfd, 0x5d, 0x5c, 0xff, 0xfd, 0x5f, 0x5d, 0xff, 0xfd, 0x60, 0x5e, 0xff, 0xfd, 0x60, 0x5d, 0xff, 0xfd, 0x5f, 0x5d, 0xff, 0xfd, 0x5e, 0x5c, 0xff, 0xfd, 0x5e, 0x5c, 0xff, 0xfd, 0x5e, 0x5c, 0xff, 0xfd, 0x5f, 0x5d, 0xff, 0xfd, 0x61, 0x5e, 0xff, 0xfd, 0x62, 0x5f, 0xff, 0xfd, 0x61, 0x5f, 0xff, 0xfd, 0x60, 0x5f, 0xff, 0xfd, 0x60, 0x5e, 0xff, 0xfd, 0x61, 0x5e, 0xff, 0xfd, 0x62, 0x5e, 0xff, 0xfd, 0x63, 0x5e, 0xff, 0xfd, 0x63, 0x5d, 0xff, 0xfd, 0x64, 0x5e, 0xff, 0xfd, 0x65, 0x5f, 0xff, 0xfd, 0x66, 0x5f, 0xff, 0xfd, 0x65, 0x5e, 0xff, 0xfd, 0x64, 0x5c, 0xff, 0xfc, 0x64, 0x5b, 0xff, 0xfd, 0x64, 0x5b, 0xff, 0xfc, 0x64, 0x5a, 0xff, 0xfd, 0x64, 0x5a, 0xff, 0xfd, 0x64, 0x5b, 0xff, 0xfd, 0x65, 0x5a, 0xff, 0xfd, 0x65, 0x5b, 0xff, 0xfd, 0x66, 0x5c, 0xff, 0xfd, 0x67, 0x5d, 0xff, 0xfd, 0x68, 0x5c, 0xff, 0xfd, 0x67, 0x5c, 0xff, 0xfd, 0x67, 0x5c, 0xff, 0xfd, 0x67, 0x5b, 0xff, 0xfd, 0x65, 0x5a, 0xff, 0xfd, 0x66, 0x59, 0xff, 0xfd, 0x66, 0x58, 0xff, 0xfd, 0x68, 0x59, 0xff, 0xfd, 0x68, 0x59, 0xff, 0xfd, 0x68, 0x5a, 0xff, 0xfd, 0x69, 0x59, 0xff, 0xfd, 0x67, 0x58, 0xff, 0xfd, 0x67, 0x58, 0xff, 0xfd, 0x67, 0x59, 0xff, 0xfd, 0x69, 0x59, 0xff, 0xfd, 0x6a, 0x59, 0xff, 0xfd, 0x69, 0x58, 0xff, 0xfd, 0x64, 0x53, 0xff, 0xfc, 0x78, 0x6a, 0xff, 0xfc, 0xf3, 0xee, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfb, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd1, 0xc0, 0xbc, 0xff, 0x57, 0x17, 0x10, 0xff, 0x48, 0x00, 0x00, 0xff, 0x53, 0x0a, 0x01, 0xff, 0x55, 0x0e, 0x04, 0xff, 0x56, 0x0f, 0x05, 0xff, 0x56, 0x11, 0x07, 0xff, 0x57, 0x11, 0x07, 0xff, 0x58, 0x11, 0x09, 0xff, 0x59, 0x12, 0x09, 0xff, 0x59, 0x12, 0x0a, 0xff, 0x59, 0x12, 0x09, 0xff, 0x5a, 0x10, 0x07, 0xff, 0x56, 0x0a, 0x06, 0xff, 0x89, 0x35, 0x04, 0xff, 0xd7, 0x85, 0x03, 0xff, 0x6d, 0x26, 0x02, 0xff, 0x47, 0x02, 0x02, 0xff, 0x52, 0x0a, 0x02, 0xff, 0x53, 0x0c, 0x03, 0xff, 0x54, 0x0e, 0x05, 0xff, 0x57, 0x0f, 0x06, 0xff, 0x58, 0x0f, 0x07, 0xff, 0x58, 0x0f, 0x07, 0xff, 0x5a, 0x0d, 0x05, 0xff, 0x58, 0x0a, 0x00, 0xff, 0x66, 0x0d, 0x09, 0xff, 0xf2, 0x41, 0x66, 0xff, 0xe4, 0x37, 0x56, 0xff, 0x90, 0x13, 0x19, 0xff, 0xbe, 0x20, 0x2e, 0xff, 0xd0, 0x2c, 0x38, 0xff, 0xc4, 0x2c, 0x2f, 0xff, 0x95, 0x1d, 0x16, 0xff, 0x5b, 0x06, 0x01, 0xff, 0x6c, 0x0f, 0x0e, 0xff, 0xbd, 0x83, 0x7f, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x7d, 0x42, 0x38, 0xff, 0xac, 0x85, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf0, 0xff, 0xf8, 0xf3, 0xee, 0xff, 0xf9, 0xf1, 0xec, 0xff, 0xfb, 0xed, 0xe8, 0xff, 0xfd, 0xe9, 0xe4, 0xff, 0xfe, 0xea, 0xe8, 0xff, 0xfc, 0x9e, 0xa3, 0xff, 0xfd, 0x4c, 0x55, 0xff, 0xfd, 0x57, 0x5d, 0xff, 0xfd, 0x58, 0x5f, 0xff, 0xfd, 0x5a, 0x61, 0xff, 0xfd, 0x5c, 0x62, 0xff, 0xfd, 0x5c, 0x62, 0xff, 0xfc, 0x5c, 0x62, 0xff, 0xfd, 0x5c, 0x61, 0xff, 0xfd, 0x5b, 0x61, 0xff, 0xfd, 0x5b, 0x61, 0xff, 0xfd, 0x5c, 0x61, 0xff, 0xfd, 0x5d, 0x61, 0xff, 0xfd, 0x5f, 0x63, 0xff, 0xfd, 0x5f, 0x64, 0xff, 0xfd, 0x5e, 0x63, 0xff, 0xfd, 0x5e, 0x62, 0xff, 0xfd, 0x5f, 0x63, 0xff, 0xfc, 0x5f, 0x64, 0xff, 0xfd, 0x60, 0x63, 0xff, 0xfd, 0x60, 0x63, 0xff, 0xfd, 0x61, 0x62, 0xff, 0xfd, 0x62, 0x62, 0xff, 0xfd, 0x62, 0x62, 0xff, 0xfd, 0x62, 0x60, 0xff, 0xfd, 0x61, 0x60, 0xff, 0xfd, 0x61, 0x5f, 0xff, 0xfd, 0x63, 0x5e, 0xff, 0xfd, 0x63, 0x5e, 0xff, 0xfd, 0x62, 0x5f, 0xff, 0xfd, 0x63, 0x5f, 0xff, 0xfd, 0x63, 0x5e, 0xff, 0xfd, 0x63, 0x5e, 0xff, 0xfd, 0x63, 0x5e, 0xff, 0xfd, 0x64, 0x5f, 0xff, 0xfd, 0x65, 0x5f, 0xff, 0xfd, 0x65, 0x5f, 0xff, 0xfd, 0x64, 0x5f, 0xff, 0xfd, 0x64, 0x5d, 0xff, 0xfd, 0x64, 0x5d, 0xff, 0xfd, 0x64, 0x5c, 0xff, 0xfd, 0x63, 0x5b, 0xff, 0xfd, 0x63, 0x5b, 0xff, 0xfd, 0x64, 0x5c, 0xff, 0xfd, 0x64, 0x5c, 0xff, 0xfd, 0x64, 0x5b, 0xff, 0xfd, 0x63, 0x5a, 0xff, 0xfd, 0x63, 0x5a, 0xff, 0xfd, 0x63, 0x5b, 0xff, 0xfd, 0x63, 0x5a, 0xff, 0xfd, 0x64, 0x5a, 0xff, 0xfd, 0x64, 0x5b, 0xff, 0xfd, 0x5d, 0x54, 0xff, 0xfc, 0x82, 0x7c, 0xff, 0xfd, 0xfa, 0xf6, 0xff, 0xfd, 0xf9, 0xf4, 0xff, 0xfc, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xea, 0xe1, 0xdd, 0xff, 0xa0, 0x77, 0x72, 0xff, 0x54, 0x0d, 0x05, 0xff, 0x53, 0x0c, 0x02, 0xff, 0x55, 0x0f, 0x05, 0xff, 0x57, 0x10, 0x06, 0xff, 0x57, 0x11, 0x07, 0xff, 0x57, 0x11, 0x08, 0xff, 0x58, 0x12, 0x09, 0xff, 0x58, 0x11, 0x09, 0xff, 0x58, 0x11, 0x08, 0xff, 0x5a, 0x10, 0x06, 0xff, 0x53, 0x08, 0x04, 0xff, 0xc1, 0x6d, 0x04, 0xff, 0x7a, 0x34, 0x02, 0xff, 0x47, 0x02, 0x01, 0xff, 0x54, 0x0c, 0x02, 0xff, 0x55, 0x0d, 0x03, 0xff, 0x56, 0x0e, 0x05, 0xff, 0x56, 0x0f, 0x07, 0xff, 0x57, 0x10, 0x08, 0xff, 0x58, 0x10, 0x08, 0xff, 0x57, 0x10, 0x08, 0xff, 0x59, 0x0e, 0x05, 0xff, 0x54, 0x08, 0x00, 0xff, 0x83, 0x18, 0x1f, 0xff, 0xff, 0x4c, 0x7d, 0xff, 0xa2, 0x24, 0x3c, 0xff, 0x44, 0x03, 0x03, 0xff, 0x66, 0x0a, 0x0c, 0xff, 0x59, 0x07, 0x05, 0xff, 0x50, 0x03, 0x00, 0xff, 0x55, 0x05, 0x00, 0xff, 0x52, 0x00, 0x00, 0xff, 0xa8, 0x7c, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0x72, 0x68, 0xff, 0x6f, 0x34, 0x2b, 0xff, 0xee, 0xe6, 0xe0, 0xff, 0xff, 0xff, 0xfd, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xf9, 0xf1, 0xed, 0xff, 0xfb, 0xed, 0xe8, 0xff, 0xfd, 0xe9, 0xe4, 0xff, 0xfd, 0xe8, 0xe6, 0xff, 0xfc, 0xba, 0xbf, 0xff, 0xfc, 0x4a, 0x5c, 0xff, 0xfd, 0x51, 0x5e, 0xff, 0xfd, 0x53, 0x60, 0xff, 0xfd, 0x55, 0x63, 0xff, 0xfd, 0x57, 0x65, 0xff, 0xfd, 0x58, 0x65, 0xff, 0xfd, 0x59, 0x66, 0xff, 0xfd, 0x5a, 0x65, 0xff, 0xfd, 0x59, 0x65, 0xff, 0xfd, 0x59, 0x65, 0xff, 0xfd, 0x59, 0x65, 0xff, 0xfd, 0x59, 0x65, 0xff, 0xfd, 0x5b, 0x66, 0xff, 0xfd, 0x5c, 0x65, 0xff, 0xfd, 0x5c, 0x64, 0xff, 0xfd, 0x5c, 0x64, 0xff, 0xfd, 0x5d, 0x65, 0xff, 0xfd, 0x5e, 0x66, 0xff, 0xfd, 0x5e, 0x66, 0xff, 0xfd, 0x5e, 0x65, 0xff, 0xfd, 0x5e, 0x66, 0xff, 0xfd, 0x5e, 0x66, 0xff, 0xfd, 0x5f, 0x66, 0xff, 0xfd, 0x5f, 0x65, 0xff, 0xfd, 0x5f, 0x65, 0xff, 0xfd, 0x5f, 0x64, 0xff, 0xfd, 0x60, 0x64, 0xff, 0xfd, 0x61, 0x64, 0xff, 0xfd, 0x60, 0x65, 0xff, 0xfd, 0x60, 0x64, 0xff, 0xfd, 0x60, 0x63, 0xff, 0xfd, 0x60, 0x63, 0xff, 0xfd, 0x60, 0x63, 0xff, 0xfd, 0x60, 0x63, 0xff, 0xfd, 0x60, 0x62, 0xff, 0xfd, 0x60, 0x62, 0xff, 0xfd, 0x60, 0x62, 0xff, 0xfd, 0x61, 0x61, 0xff, 0xfd, 0x62, 0x60, 0xff, 0xfd, 0x62, 0x5f, 0xff, 0xfd, 0x61, 0x5e, 0xff, 0xfd, 0x60, 0x5f, 0xff, 0xfd, 0x60, 0x5f, 0xff, 0xfd, 0x61, 0x5e, 0xff, 0xfd, 0x61, 0x5e, 0xff, 0xfd, 0x60, 0x5d, 0xff, 0xfd, 0x60, 0x5d, 0xff, 0xfd, 0x5f, 0x5d, 0xff, 0xfd, 0x5f, 0x5d, 0xff, 0xfd, 0x5f, 0x5d, 0xff, 0xfd, 0x5f, 0x5d, 0xff, 0xfd, 0x54, 0x53, 0xff, 0xfc, 0x9e, 0x9c, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfd, 0xf8, 0xf3, 0xff, 0xfb, 0xf7, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x84, 0x50, 0x4b, 0xff, 0x4d, 0x03, 0x00, 0xff, 0x56, 0x0e, 0x04, 0xff, 0x57, 0x10, 0x06, 0xff, 0x58, 0x11, 0x08, 0xff, 0x57, 0x11, 0x08, 0xff, 0x57, 0x12, 0x09, 0xff, 0x58, 0x12, 0x09, 0xff, 0x57, 0x11, 0x08, 0xff, 0x57, 0x0f, 0x07, 0xff, 0x52, 0x08, 0x04, 0xff, 0xbf, 0x68, 0x04, 0xff, 0x70, 0x26, 0x04, 0xff, 0x4e, 0x08, 0x02, 0xff, 0x56, 0x0d, 0x03, 0xff, 0x57, 0x0e, 0x04, 0xff, 0x57, 0x0f, 0x06, 0xff, 0x57, 0x10, 0x07, 0xff, 0x57, 0x10, 0x08, 0xff, 0x57, 0x10, 0x08, 0xff, 0x57, 0x0f, 0x07, 0xff, 0x58, 0x0c, 0x04, 0xff, 0x50, 0x05, 0x00, 0xff, 0xad, 0x28, 0x40, 0xff, 0xff, 0x4f, 0x85, 0xff, 0x64, 0x12, 0x1f, 0xff, 0x22, 0x00, 0x00, 0xff, 0x55, 0x07, 0x06, 0xff, 0xa3, 0x1c, 0x1f, 0xff, 0x53, 0x06, 0x01, 0xff, 0x46, 0x01, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff, 0x99, 0x73, 0x72, 0xff, 0xae, 0x87, 0x7f, 0xff, 0x7e, 0x47, 0x3b, 0xff, 0xec, 0xe5, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf9, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf4, 0xef, 0xff, 0xf9, 0xf1, 0xed, 0xff, 0xfb, 0xed, 0xe8, 0xff, 0xfd, 0xe9, 0xe5, 0xff, 0xfd, 0xe5, 0xe2, 0xff, 0xfd, 0xd8, 0xd9, 0xff, 0xfc, 0x5d, 0x71, 0xff, 0xfd, 0x48, 0x5c, 0xff, 0xfd, 0x4d, 0x62, 0xff, 0xfd, 0x4f, 0x64, 0xff, 0xfd, 0x51, 0x66, 0xff, 0xfd, 0x53, 0x67, 0xff, 0xfd, 0x54, 0x68, 0xff, 0xfd, 0x55, 0x68, 0xff, 0xfd, 0x55, 0x68, 0xff, 0xfd, 0x55, 0x68, 0xff, 0xfd, 0x56, 0x68, 0xff, 0xfd, 0x55, 0x69, 0xff, 0xfd, 0x55, 0x69, 0xff, 0xfd, 0x56, 0x68, 0xff, 0xfd, 0x57, 0x67, 0xff, 0xfd, 0x57, 0x68, 0xff, 0xfd, 0x58, 0x68, 0xff, 0xfd, 0x58, 0x68, 0xff, 0xfd, 0x59, 0x68, 0xff, 0xfd, 0x5a, 0x68, 0xff, 0xfd, 0x5b, 0x69, 0xff, 0xfd, 0x5b, 0x69, 0xff, 0xfd, 0x5b, 0x69, 0xff, 0xfd, 0x5c, 0x68, 0xff, 0xfd, 0x5d, 0x67, 0xff, 0xfd, 0x5e, 0x67, 0xff, 0xfd, 0x5e, 0x67, 0xff, 0xfd, 0x5e, 0x68, 0xff, 0xfd, 0x5e, 0x67, 0xff, 0xfd, 0x5e, 0x66, 0xff, 0xfc, 0x5e, 0x66, 0xff, 0xfd, 0x5d, 0x65, 0xff, 0xfd, 0x5d, 0x65, 0xff, 0xfd, 0x5e, 0x64, 0xff, 0xfd, 0x5d, 0x64, 0xff, 0xfd, 0x5d, 0x64, 0xff, 0xfd, 0x5d, 0x65, 0xff, 0xfd, 0x5e, 0x65, 0xff, 0xfc, 0x5f, 0x64, 0xff, 0xfc, 0x5f, 0x64, 0xff, 0xfd, 0x5e, 0x63, 0xff, 0xfd, 0x5d, 0x63, 0xff, 0xfd, 0x5d, 0x62, 0xff, 0xfd, 0x5d, 0x62, 0xff, 0xfd, 0x5c, 0x61, 0xff, 0xfd, 0x5c, 0x60, 0xff, 0xfd, 0x5c, 0x61, 0xff, 0xfd, 0x5b, 0x61, 0xff, 0xfd, 0x5b, 0x61, 0xff, 0xfd, 0x5b, 0x61, 0xff, 0xfd, 0x59, 0x61, 0xff, 0xfc, 0x53, 0x5a, 0xff, 0xfc, 0xcb, 0xc9, 0xff, 0xfd, 0xfe, 0xf8, 0xff, 0xfc, 0xf8, 0xf3, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa2, 0x7c, 0x77, 0xff, 0x4a, 0x00, 0x00, 0xff, 0x56, 0x0d, 0x03, 0xff, 0x57, 0x0f, 0x05, 0xff, 0x57, 0x11, 0x07, 0xff, 0x58, 0x12, 0x09, 0xff, 0x58, 0x13, 0x0a, 0xff, 0x58, 0x13, 0x09, 0xff, 0x56, 0x12, 0x09, 0xff, 0x56, 0x10, 0x07, 0xff, 0x50, 0x08, 0x04, 0xff, 0xbb, 0x61, 0x06, 0xff, 0x74, 0x27, 0x05, 0xff, 0x4f, 0x08, 0x03, 0xff, 0x56, 0x0d, 0x04, 0xff, 0x58, 0x0e, 0x05, 0xff, 0x56, 0x0f, 0x07, 0xff, 0x56, 0x10, 0x08, 0xff, 0x57, 0x10, 0x08, 0xff, 0x58, 0x10, 0x08, 0xff, 0x57, 0x0f, 0x07, 0xff, 0x58, 0x0b, 0x03, 0xff, 0x55, 0x06, 0x00, 0xff, 0xd9, 0x3b, 0x65, 0xff, 0xf1, 0x45, 0x78, 0xff, 0x3c, 0x04, 0x08, 0xff, 0x41, 0x02, 0x00, 0xff, 0x7f, 0x13, 0x13, 0xff, 0xca, 0x2c, 0x34, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x46, 0x09, 0x09, 0xff, 0x3a, 0x00, 0x00, 0xff, 0x7e, 0x4b, 0x48, 0xff, 0xf6, 0xf0, 0xe9, 0xff, 0xfc, 0xfa, 0xf4, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xfe, 0xfc, 0xf6, 0xff, 0xfe, 0xfe, 0xf9, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xfa, 0xf0, 0xec, 0xff, 0xfa, 0xed, 0xe8, 0xff, 0xfc, 0xe9, 0xe5, 0xff, 0xfd, 0xe4, 0xe0, 0xff, 0xfd, 0xe5, 0xe3, 0xff, 0xfc, 0x91, 0xa1, 0xff, 0xfc, 0x3f, 0x5c, 0xff, 0xfd, 0x49, 0x63, 0xff, 0xfd, 0x4a, 0x66, 0xff, 0xfd, 0x4c, 0x68, 0xff, 0xfd, 0x4d, 0x69, 0xff, 0xfd, 0x4f, 0x6a, 0xff, 0xfd, 0x50, 0x6b, 0xff, 0xfd, 0x50, 0x6b, 0xff, 0xfd, 0x51, 0x6b, 0xff, 0xfd, 0x52, 0x6c, 0xff, 0xfd, 0x52, 0x6c, 0xff, 0xfd, 0x51, 0x6c, 0xff, 0xfd, 0x52, 0x6b, 0xff, 0xfd, 0x53, 0x6b, 0xff, 0xfe, 0x53, 0x6c, 0xff, 0xfd, 0x54, 0x6b, 0xff, 0xfd, 0x53, 0x6b, 0xff, 0xfd, 0x54, 0x6c, 0xff, 0xfd, 0x55, 0x6c, 0xff, 0xfd, 0x56, 0x6c, 0xff, 0xfd, 0x57, 0x6b, 0xff, 0xfd, 0x56, 0x6a, 0xff, 0xfd, 0x57, 0x69, 0xff, 0xfd, 0x58, 0x6a, 0xff, 0xfd, 0x5a, 0x6b, 0xff, 0xfd, 0x5a, 0x6a, 0xff, 0xfd, 0x59, 0x6a, 0xff, 0xfd, 0x5a, 0x6a, 0xff, 0xfc, 0x5c, 0x6a, 0xff, 0xfd, 0x5a, 0x69, 0xff, 0xfd, 0x59, 0x69, 0xff, 0xfd, 0x59, 0x68, 0xff, 0xfd, 0x5a, 0x68, 0xff, 0xfd, 0x5b, 0x67, 0xff, 0xfd, 0x5a, 0x68, 0xff, 0xfd, 0x59, 0x68, 0xff, 0xfd, 0x5a, 0x67, 0xff, 0xfd, 0x5c, 0x67, 0xff, 0xfd, 0x5c, 0x66, 0xff, 0xfd, 0x5b, 0x66, 0xff, 0xfd, 0x5c, 0x66, 0xff, 0xfd, 0x5b, 0x65, 0xff, 0xfd, 0x5a, 0x65, 0xff, 0xfd, 0x59, 0x64, 0xff, 0xfd, 0x57, 0x64, 0xff, 0xfd, 0x57, 0x64, 0xff, 0xfd, 0x58, 0x65, 0xff, 0xfd, 0x58, 0x64, 0xff, 0xfd, 0x57, 0x63, 0xff, 0xfd, 0x50, 0x5e, 0xff, 0xfb, 0x74, 0x80, 0xff, 0xfd, 0xf3, 0xf0, 0xff, 0xfc, 0xf8, 0xf3, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xa9, 0xa4, 0xff, 0x4a, 0x00, 0x00, 0xff, 0x55, 0x0c, 0x03, 0xff, 0x55, 0x0d, 0x04, 0xff, 0x57, 0x10, 0x06, 0xff, 0x58, 0x12, 0x09, 0xff, 0x58, 0x13, 0x0a, 0xff, 0x59, 0x13, 0x09, 0xff, 0x56, 0x12, 0x08, 0xff, 0x55, 0x10, 0x07, 0xff, 0x51, 0x08, 0x04, 0xff, 0xbb, 0x59, 0x09, 0xff, 0x75, 0x25, 0x07, 0xff, 0x4f, 0x08, 0x03, 0xff, 0x55, 0x0d, 0x04, 0xff, 0x56, 0x0e, 0x06, 0xff, 0x56, 0x10, 0x07, 0xff, 0x56, 0x10, 0x08, 0xff, 0x57, 0x10, 0x08, 0xff, 0x58, 0x10, 0x08, 0xff, 0x58, 0x0f, 0x06, 0xff, 0x55, 0x0a, 0x01, 0xff, 0x6b, 0x0f, 0x13, 0xff, 0xfc, 0x4b, 0x86, 0xff, 0xce, 0x36, 0x61, 0xff, 0x46, 0x01, 0x00, 0xff, 0x59, 0x07, 0x04, 0xff, 0x67, 0x0f, 0x10, 0xff, 0xc6, 0x2c, 0x35, 0xff, 0x39, 0x00, 0x00, 0xff, 0x8c, 0x60, 0x5f, 0xff, 0x52, 0x19, 0x19, 0xff, 0x64, 0x28, 0x27, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfe, 0xfd, 0xf7, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf6, 0xf3, 0xee, 0xff, 0xf8, 0xf0, 0xec, 0xff, 0xf9, 0xed, 0xe9, 0xff, 0xfc, 0xe9, 0xe5, 0xff, 0xfd, 0xe5, 0xe1, 0xff, 0xfd, 0xe2, 0xde, 0xff, 0xfc, 0xd0, 0xd3, 0xff, 0xfc, 0x54, 0x74, 0xff, 0xfd, 0x40, 0x63, 0xff, 0xfd, 0x48, 0x6a, 0xff, 0xfd, 0x4a, 0x6b, 0xff, 0xfd, 0x4b, 0x6b, 0xff, 0xfd, 0x4c, 0x6c, 0xff, 0xfd, 0x4e, 0x6d, 0xff, 0xfd, 0x4e, 0x6d, 0xff, 0xfd, 0x4e, 0x6e, 0xff, 0xfd, 0x4f, 0x6e, 0xff, 0xfd, 0x50, 0x6f, 0xff, 0xfd, 0x50, 0x6f, 0xff, 0xfd, 0x50, 0x6e, 0xff, 0xfd, 0x51, 0x6d, 0xff, 0xfd, 0x51, 0x6d, 0xff, 0xfd, 0x50, 0x6e, 0xff, 0xfd, 0x51, 0x6e, 0xff, 0xfd, 0x51, 0x6e, 0xff, 0xfd, 0x51, 0x6e, 0xff, 0xfd, 0x52, 0x6e, 0xff, 0xfd, 0x52, 0x6d, 0xff, 0xfd, 0x52, 0x6c, 0xff, 0xfd, 0x53, 0x6c, 0xff, 0xfd, 0x53, 0x6d, 0xff, 0xfd, 0x54, 0x6d, 0xff, 0xfd, 0x54, 0x6d, 0xff, 0xfd, 0x54, 0x6d, 0xff, 0xfd, 0x55, 0x6e, 0xff, 0xfd, 0x57, 0x6d, 0xff, 0xfd, 0x56, 0x6d, 0xff, 0xfd, 0x55, 0x6c, 0xff, 0xfd, 0x55, 0x6d, 0xff, 0xfd, 0x56, 0x6b, 0xff, 0xfd, 0x56, 0x6b, 0xff, 0xfd, 0x57, 0x6b, 0xff, 0xfd, 0x56, 0x69, 0xff, 0xfd, 0x55, 0x69, 0xff, 0xfd, 0x57, 0x69, 0xff, 0xfd, 0x58, 0x69, 0xff, 0xfd, 0x57, 0x69, 0xff, 0xfd, 0x57, 0x68, 0xff, 0xfd, 0x57, 0x68, 0xff, 0xfd, 0x56, 0x68, 0xff, 0xfd, 0x54, 0x68, 0xff, 0xfd, 0x54, 0x68, 0xff, 0xfd, 0x54, 0x67, 0xff, 0xfd, 0x54, 0x66, 0xff, 0xfd, 0x54, 0x65, 0xff, 0xfd, 0x51, 0x63, 0xff, 0xfc, 0x4a, 0x5f, 0xff, 0xfb, 0xc1, 0xc6, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfb, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xe8, 0xdf, 0xdb, 0xff, 0x58, 0x15, 0x10, 0xff, 0x52, 0x07, 0x00, 0xff, 0x54, 0x0c, 0x03, 0xff, 0x56, 0x0e, 0x06, 0xff, 0x56, 0x11, 0x08, 0xff, 0x57, 0x12, 0x09, 0xff, 0x57, 0x12, 0x09, 0xff, 0x56, 0x11, 0x08, 0xff, 0x55, 0x10, 0x07, 0xff, 0x50, 0x09, 0x04, 0xff, 0xbc, 0x55, 0x0d, 0xff, 0x75, 0x23, 0x09, 0xff, 0x4f, 0x08, 0x03, 0xff, 0x54, 0x0c, 0x04, 0xff, 0x55, 0x0e, 0x06, 0xff, 0x57, 0x10, 0x07, 0xff, 0x58, 0x10, 0x07, 0xff, 0x59, 0x10, 0x08, 0xff, 0x59, 0x10, 0x07, 0xff, 0x5a, 0x0d, 0x05, 0xff, 0x4f, 0x07, 0x00, 0xff, 0x97, 0x22, 0x3a, 0xff, 0xff, 0x55, 0x9a, 0xff, 0xa0, 0x27, 0x45, 0xff, 0x37, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff, 0x56, 0x0b, 0x0d, 0xff, 0xcb, 0x2f, 0x3a, 0xff, 0x38, 0x00, 0x00, 0xff, 0x9f, 0x79, 0x76, 0xff, 0x67, 0x34, 0x34, 0xff, 0x4d, 0x0c, 0x0b, 0xff, 0xee, 0xe5, 0xe1, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfe, 0xfd, 0xf6, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf7, 0xf3, 0xee, 0xff, 0xf8, 0xf0, 0xec, 0xff, 0xf9, 0xed, 0xe9, 0xff, 0xfb, 0xe9, 0xe6, 0xff, 0xfd, 0xe5, 0xe2, 0xff, 0xfd, 0xe0, 0xde, 0xff, 0xfd, 0xe2, 0xe0, 0xff, 0xfc, 0xaa, 0xb8, 0xff, 0xfc, 0x3f, 0x69, 0xff, 0xfd, 0x42, 0x6c, 0xff, 0xfd, 0x46, 0x6e, 0xff, 0xfd, 0x47, 0x6f, 0xff, 0xfd, 0x47, 0x70, 0xff, 0xfd, 0x49, 0x71, 0xff, 0xfd, 0x49, 0x70, 0xff, 0xfd, 0x49, 0x71, 0xff, 0xfd, 0x4b, 0x71, 0xff, 0xfd, 0x4c, 0x73, 0xff, 0xfd, 0x4d, 0x72, 0xff, 0xfd, 0x4d, 0x71, 0xff, 0xfd, 0x4e, 0x70, 0xff, 0xfd, 0x4e, 0x70, 0xff, 0xfd, 0x4e, 0x71, 0xff, 0xfd, 0x4e, 0x72, 0xff, 0xfd, 0x4e, 0x73, 0xff, 0xfd, 0x4f, 0x71, 0xff, 0xfd, 0x4f, 0x6f, 0xff, 0xfd, 0x4e, 0x6e, 0xff, 0xfc, 0x4e, 0x6d, 0xff, 0xfd, 0x4f, 0x6e, 0xff, 0xfd, 0x51, 0x6e, 0xff, 0xfd, 0x50, 0x6f, 0xff, 0xfd, 0x50, 0x6f, 0xff, 0xfd, 0x50, 0x6f, 0xff, 0xfd, 0x51, 0x70, 0xff, 0xfd, 0x52, 0x71, 0xff, 0xfd, 0x53, 0x71, 0xff, 0xfd, 0x52, 0x70, 0xff, 0xfd, 0x51, 0x6f, 0xff, 0xfd, 0x51, 0x6e, 0xff, 0xfd, 0x52, 0x6e, 0xff, 0xfd, 0x53, 0x6f, 0xff, 0xfd, 0x53, 0x6d, 0xff, 0xfd, 0x53, 0x6c, 0xff, 0xfd, 0x53, 0x6b, 0xff, 0xfd, 0x53, 0x6a, 0xff, 0xfd, 0x53, 0x6a, 0xff, 0xfd, 0x53, 0x6a, 0xff, 0xfd, 0x53, 0x6a, 0xff, 0xfd, 0x52, 0x6b, 0xff, 0xfd, 0x50, 0x6a, 0xff, 0xfd, 0x4f, 0x6a, 0xff, 0xfd, 0x4f, 0x69, 0xff, 0xfd, 0x4f, 0x67, 0xff, 0xfd, 0x4f, 0x65, 0xff, 0xfd, 0x44, 0x5e, 0xff, 0xfb, 0x8d, 0x9b, 0xff, 0xfc, 0xf7, 0xf2, 0xff, 0xfb, 0xf5, 0xf1, 0xff, 0xfa, 0xf6, 0xf1, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x7e, 0x4c, 0x49, 0xff, 0x4c, 0x00, 0x00, 0xff, 0x54, 0x0b, 0x03, 0xff, 0x54, 0x0e, 0x05, 0xff, 0x56, 0x10, 0x07, 0xff, 0x57, 0x11, 0x09, 0xff, 0x56, 0x11, 0x09, 0xff, 0x55, 0x11, 0x08, 0xff, 0x56, 0x0f, 0x07, 0xff, 0x50, 0x09, 0x04, 0xff, 0xbc, 0x4f, 0x0f, 0xff, 0x75, 0x20, 0x09, 0xff, 0x4f, 0x09, 0x03, 0xff, 0x54, 0x0c, 0x04, 0xff, 0x56, 0x0d, 0x05, 0xff, 0x57, 0x0e, 0x05, 0xff, 0x57, 0x0f, 0x06, 0xff, 0x58, 0x0f, 0x06, 0xff, 0x58, 0x0d, 0x03, 0xff, 0x50, 0x07, 0x00, 0xff, 0x61, 0x0b, 0x0c, 0xff, 0xe4, 0x43, 0x7d, 0xff, 0xff, 0x51, 0x98, 0xff, 0x5a, 0x10, 0x1d, 0xff, 0x2c, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff, 0x71, 0x13, 0x19, 0xff, 0xc8, 0x30, 0x3c, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xa5, 0x84, 0x81, 0xff, 0x81, 0x55, 0x54, 0xff, 0x3c, 0x00, 0x00, 0xff, 0xd8, 0xc8, 0xc5, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfe, 0xfc, 0xf6, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf8, 0xf1, 0xed, 0xff, 0xf8, 0xee, 0xea, 0xff, 0xfa, 0xea, 0xe7, 0xff, 0xfc, 0xe5, 0xe3, 0xff, 0xfd, 0xe1, 0xde, 0xff, 0xfd, 0xdc, 0xdb, 0xff, 0xfd, 0xde, 0xdd, 0xff, 0xfb, 0x91, 0xa9, 0xff, 0xfc, 0x3a, 0x6d, 0xff, 0xfd, 0x3d, 0x6f, 0xff, 0xfd, 0x42, 0x72, 0xff, 0xfd, 0x43, 0x72, 0xff, 0xfd, 0x44, 0x73, 0xff, 0xfd, 0x43, 0x73, 0xff, 0xfd, 0x45, 0x72, 0xff, 0xfd, 0x47, 0x74, 0xff, 0xfd, 0x48, 0x76, 0xff, 0xfd, 0x49, 0x76, 0xff, 0xfd, 0x49, 0x75, 0xff, 0xfd, 0x49, 0x74, 0xff, 0xfd, 0x49, 0x74, 0xff, 0xfd, 0x49, 0x75, 0xff, 0xfd, 0x49, 0x75, 0xff, 0xfd, 0x4b, 0x74, 0xff, 0xfd, 0x4b, 0x74, 0xff, 0xfd, 0x4b, 0x72, 0xff, 0xfd, 0x4a, 0x72, 0xff, 0xfd, 0x4a, 0x71, 0xff, 0xfd, 0x4b, 0x71, 0xff, 0xfd, 0x4d, 0x70, 0xff, 0xfd, 0x4e, 0x71, 0xff, 0xfd, 0x4e, 0x70, 0xff, 0xfd, 0x4d, 0x71, 0xff, 0xfd, 0x4d, 0x72, 0xff, 0xfd, 0x4e, 0x74, 0xff, 0xfd, 0x4e, 0x73, 0xff, 0xfe, 0x50, 0x72, 0xff, 0xfd, 0x51, 0x72, 0xff, 0xfd, 0x51, 0x70, 0xff, 0xfd, 0x50, 0x71, 0xff, 0xfe, 0x51, 0x71, 0xff, 0xfd, 0x51, 0x70, 0xff, 0xfd, 0x51, 0x6e, 0xff, 0xfd, 0x50, 0x6d, 0xff, 0xfd, 0x4f, 0x6c, 0xff, 0xfd, 0x4f, 0x6c, 0xff, 0xfd, 0x4f, 0x6c, 0xff, 0xfd, 0x4f, 0x6c, 0xff, 0xfd, 0x4d, 0x6b, 0xff, 0xfd, 0x4c, 0x6a, 0xff, 0xfd, 0x4a, 0x6a, 0xff, 0xfd, 0x4a, 0x69, 0xff, 0xfd, 0x47, 0x68, 0xff, 0xfd, 0x3e, 0x61, 0xff, 0xfb, 0x7e, 0x92, 0xff, 0xfc, 0xee, 0xea, 0xff, 0xfc, 0xf5, 0xf0, 0xff, 0xfa, 0xf5, 0xf0, 0xff, 0xfa, 0xf6, 0xf1, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfb, 0xf8, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x9a, 0x97, 0xff, 0x49, 0x00, 0x00, 0xff, 0x54, 0x0b, 0x02, 0xff, 0x55, 0x0d, 0x04, 0xff, 0x54, 0x0f, 0x07, 0xff, 0x55, 0x11, 0x08, 0xff, 0x55, 0x11, 0x08, 0xff, 0x54, 0x10, 0x07, 0xff, 0x55, 0x0e, 0x06, 0xff, 0x50, 0x09, 0x03, 0xff, 0xbc, 0x49, 0x13, 0xff, 0x76, 0x1e, 0x09, 0xff, 0x50, 0x08, 0x02, 0xff, 0x56, 0x0b, 0x03, 0xff, 0x56, 0x0c, 0x04, 0xff, 0x56, 0x0c, 0x04, 0xff, 0x54, 0x0b, 0x01, 0xff, 0x4e, 0x08, 0x00, 0xff, 0x55, 0x08, 0x02, 0xff, 0x89, 0x1b, 0x2e, 0xff, 0xe3, 0x41, 0x7d, 0xff, 0xff, 0x55, 0xa4, 0xff, 0xaa, 0x2f, 0x5a, 0xff, 0x2f, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff, 0x66, 0x0f, 0x18, 0xff, 0xd9, 0x35, 0x4d, 0xff, 0x62, 0x0f, 0x14, 0xff, 0x38, 0x00, 0x00, 0xff, 0xb5, 0x8d, 0x89, 0xff, 0x9f, 0x7c, 0x7b, 0xff, 0x31, 0x00, 0x00, 0xff, 0xb9, 0xa1, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfe, 0xfc, 0xf6, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf8, 0xf2, 0xed, 0xff, 0xf8, 0xef, 0xeb, 0xff, 0xf8, 0xeb, 0xe8, 0xff, 0xfb, 0xe6, 0xe4, 0xff, 0xfd, 0xe1, 0xde, 0xff, 0xfd, 0xdc, 0xdb, 0xff, 0xfd, 0xd9, 0xd9, 0xff, 0xfc, 0xda, 0xda, 0xff, 0xfb, 0x96, 0xaf, 0xff, 0xfc, 0x3f, 0x75, 0xff, 0xfd, 0x35, 0x6f, 0xff, 0xfd, 0x3d, 0x73, 0xff, 0xfc, 0x40, 0x74, 0xff, 0xfd, 0x40, 0x74, 0xff, 0xfd, 0x41, 0x74, 0xff, 0xfd, 0x43, 0x75, 0xff, 0xfd, 0x45, 0x76, 0xff, 0xfd, 0x45, 0x76, 0xff, 0xfd, 0x44, 0x76, 0xff, 0xfd, 0x45, 0x76, 0xff, 0xfd, 0x45, 0x76, 0xff, 0xfd, 0x45, 0x77, 0xff, 0xfd, 0x45, 0x76, 0xff, 0xfd, 0x46, 0x75, 0xff, 0xfd, 0x47, 0x75, 0xff, 0xfd, 0x46, 0x74, 0xff, 0xfd, 0x45, 0x73, 0xff, 0xfd, 0x45, 0x73, 0xff, 0xfd, 0x46, 0x73, 0xff, 0xfd, 0x46, 0x72, 0xff, 0xfd, 0x48, 0x72, 0xff, 0xfd, 0x49, 0x71, 0xff, 0xfd, 0x47, 0x72, 0xff, 0xfd, 0x47, 0x73, 0xff, 0xfd, 0x48, 0x74, 0xff, 0xfd, 0x49, 0x74, 0xff, 0xfd, 0x4b, 0x74, 0xff, 0xfd, 0x4d, 0x73, 0xff, 0xfd, 0x4d, 0x72, 0xff, 0xfd, 0x4d, 0x72, 0xff, 0xfd, 0x4e, 0x72, 0xff, 0xfd, 0x4e, 0x72, 0xff, 0xfd, 0x4d, 0x71, 0xff, 0xfd, 0x4e, 0x70, 0xff, 0xfd, 0x4d, 0x6f, 0xff, 0xfd, 0x4c, 0x6f, 0xff, 0xfd, 0x4b, 0x6f, 0xff, 0xfd, 0x4a, 0x6e, 0xff, 0xfd, 0x49, 0x6c, 0xff, 0xfd, 0x48, 0x6b, 0xff, 0xfd, 0x46, 0x6b, 0xff, 0xfd, 0x3f, 0x67, 0xff, 0xfc, 0x43, 0x6a, 0xff, 0xfb, 0x8e, 0xa1, 0xff, 0xfc, 0xeb, 0xe8, 0xff, 0xfc, 0xf5, 0xef, 0xff, 0xfb, 0xf4, 0xee, 0xff, 0xfa, 0xf6, 0xf0, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfc, 0xf8, 0xf4, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xea, 0xe1, 0xdd, 0xff, 0x59, 0x15, 0x0f, 0xff, 0x52, 0x07, 0x00, 0xff, 0x55, 0x0c, 0x03, 0xff, 0x56, 0x0e, 0x05, 0xff, 0x54, 0x10, 0x07, 0xff, 0x53, 0x10, 0x07, 0xff, 0x53, 0x0f, 0x07, 0xff, 0x55, 0x0d, 0x05, 0xff, 0x50, 0x08, 0x03, 0xff, 0xba, 0x41, 0x15, 0xff, 0x75, 0x1b, 0x0a, 0xff, 0x50, 0x08, 0x01, 0xff, 0x55, 0x0a, 0x02, 0xff, 0x51, 0x09, 0x00, 0xff, 0x4b, 0x06, 0x00, 0xff, 0x5a, 0x0a, 0x06, 0xff, 0x93, 0x1d, 0x33, 0xff, 0xdf, 0x3c, 0x72, 0xff, 0xff, 0x50, 0x9a, 0xff, 0xf5, 0x48, 0x8d, 0xff, 0x97, 0x26, 0x4e, 0xff, 0x44, 0x06, 0x0d, 0xff, 0x34, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff, 0x8b, 0x1e, 0x2e, 0xff, 0x66, 0x0f, 0x1c, 0xff, 0x42, 0x03, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff, 0xa9, 0x89, 0x87, 0xff, 0xc0, 0xa7, 0xa3, 0xff, 0x2f, 0x00, 0x00, 0xff, 0x96, 0x72, 0x71, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfd, 0xfc, 0xf7, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xf7, 0xf2, 0xed, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf9, 0xe7, 0xe5, 0xff, 0xfb, 0xe2, 0xdf, 0xff, 0xfd, 0xdc, 0xdb, 0xff, 0xfd, 0xd7, 0xd8, 0xff, 0xfc, 0xd5, 0xd5, 0xff, 0xfd, 0xd7, 0xd7, 0xff, 0xfc, 0xaf, 0xbf, 0xff, 0xfc, 0x5e, 0x8e, 0xff, 0xfd, 0x35, 0x74, 0xff, 0xfd, 0x32, 0x71, 0xff, 0xfd, 0x37, 0x74, 0xff, 0xfd, 0x39, 0x76, 0xff, 0xfd, 0x3b, 0x77, 0xff, 0xfd, 0x3d, 0x77, 0xff, 0xfd, 0x3d, 0x78, 0xff, 0xfd, 0x3c, 0x78, 0xff, 0xfd, 0x3d, 0x77, 0xff, 0xfd, 0x3e, 0x76, 0xff, 0xfd, 0x3d, 0x77, 0xff, 0xfd, 0x3e, 0x77, 0xff, 0xfd, 0x3f, 0x76, 0xff, 0xfd, 0x41, 0x75, 0xff, 0xfd, 0x40, 0x74, 0xff, 0xfd, 0x40, 0x73, 0xff, 0xfd, 0x40, 0x74, 0xff, 0xfd, 0x40, 0x74, 0xff, 0xfd, 0x40, 0x72, 0xff, 0xfd, 0x40, 0x73, 0xff, 0xfd, 0x41, 0x73, 0xff, 0xfd, 0x41, 0x72, 0xff, 0xfd, 0x42, 0x72, 0xff, 0xfd, 0x42, 0x73, 0xff, 0xfd, 0x43, 0x75, 0xff, 0xfd, 0x45, 0x75, 0xff, 0xfd, 0x46, 0x75, 0xff, 0xfd, 0x46, 0x74, 0xff, 0xfd, 0x47, 0x74, 0xff, 0xfd, 0x47, 0x73, 0xff, 0xfd, 0x48, 0x73, 0xff, 0xfd, 0x49, 0x72, 0xff, 0xfd, 0x49, 0x72, 0xff, 0xfd, 0x49, 0x73, 0xff, 0xfd, 0x49, 0x72, 0xff, 0xfd, 0x48, 0x72, 0xff, 0xfd, 0x46, 0x71, 0xff, 0xfd, 0x42, 0x6e, 0xff, 0xfc, 0x39, 0x68, 0xff, 0xfc, 0x41, 0x6d, 0xff, 0xfc, 0x6d, 0x8c, 0xff, 0xfc, 0xbd, 0xc5, 0xff, 0xfd, 0xf1, 0xea, 0xff, 0xfd, 0xf2, 0xeb, 0xff, 0xfc, 0xf2, 0xed, 0xff, 0xfa, 0xf4, 0xef, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0x4e, 0x4a, 0xff, 0x4b, 0x00, 0x00, 0xff, 0x55, 0x0c, 0x03, 0xff, 0x55, 0x0d, 0x04, 0xff, 0x54, 0x0f, 0x06, 0xff, 0x53, 0x0f, 0x07, 0xff, 0x54, 0x0e, 0x07, 0xff, 0x54, 0x0d, 0x05, 0xff, 0x50, 0x08, 0x02, 0xff, 0xb8, 0x36, 0x15, 0xff, 0x72, 0x17, 0x09, 0xff, 0x4b, 0x05, 0x00, 0xff, 0x4a, 0x05, 0x00, 0xff, 0x5e, 0x0b, 0x0a, 0xff, 0xa1, 0x21, 0x3d, 0xff, 0xec, 0x3e, 0x79, 0xff, 0xff, 0x4b, 0x95, 0xff, 0xe3, 0x40, 0x7d, 0xff, 0x8f, 0x22, 0x42, 0xff, 0x3d, 0x06, 0x0d, 0xff, 0x36, 0x02, 0x07, 0xff, 0xb4, 0x1f, 0x4a, 0xff, 0x38, 0x00, 0x00, 0xff, 0x36, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff, 0x7c, 0x29, 0x01, 0xff, 0x75, 0x23, 0x04, 0xff, 0x33, 0x00, 0x00, 0xff, 0xab, 0x88, 0x85, 0xff, 0xdd, 0xcf, 0xca, 0xff, 0x37, 0x00, 0x00, 0xff, 0x78, 0x48, 0x47, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf8, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xfe, 0xfd, 0xf8, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf1, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf8, 0xed, 0xea, 0xff, 0xf8, 0xe9, 0xe6, 0xff, 0xf9, 0xe4, 0xe2, 0xff, 0xfb, 0xde, 0xdd, 0xff, 0xfc, 0xd9, 0xd9, 0xff, 0xfc, 0xd5, 0xd5, 0xff, 0xfd, 0xd2, 0xd3, 0xff, 0xfc, 0xd4, 0xd4, 0xff, 0xfd, 0xce, 0xd2, 0xff, 0xfd, 0xa4, 0xba, 0xff, 0xfc, 0x6e, 0x9a, 0xff, 0xfc, 0x4b, 0x85, 0xff, 0xfc, 0x3b, 0x7c, 0xff, 0xfd, 0x35, 0x78, 0xff, 0xfd, 0x32, 0x77, 0xff, 0xfd, 0x32, 0x78, 0xff, 0xfc, 0x35, 0x78, 0xff, 0xfc, 0x36, 0x77, 0xff, 0xfd, 0x35, 0x76, 0xff, 0xfd, 0x34, 0x75, 0xff, 0xfd, 0x34, 0x75, 0xff, 0xfd, 0x36, 0x76, 0xff, 0xfc, 0x37, 0x74, 0xff, 0xfd, 0x37, 0x72, 0xff, 0xfd, 0x37, 0x73, 0xff, 0xfc, 0x39, 0x75, 0xff, 0xfc, 0x38, 0x73, 0xff, 0xfd, 0x37, 0x72, 0xff, 0xfd, 0x36, 0x73, 0xff, 0xfd, 0x37, 0x71, 0xff, 0xfc, 0x38, 0x71, 0xff, 0xfc, 0x38, 0x71, 0xff, 0xfd, 0x39, 0x73, 0xff, 0xfd, 0x3a, 0x75, 0xff, 0xfd, 0x3c, 0x76, 0xff, 0xfd, 0x3e, 0x75, 0xff, 0xfc, 0x3d, 0x74, 0xff, 0xfd, 0x3a, 0x72, 0xff, 0xfd, 0x3f, 0x73, 0xff, 0xfd, 0x43, 0x72, 0xff, 0xfd, 0x44, 0x72, 0xff, 0xfd, 0x44, 0x73, 0xff, 0xfd, 0x45, 0x74, 0xff, 0xfd, 0x46, 0x73, 0xff, 0xfd, 0x45, 0x73, 0xff, 0xfd, 0x42, 0x70, 0xff, 0xfc, 0x43, 0x72, 0xff, 0xfc, 0x8a, 0xa2, 0xff, 0xfc, 0xc2, 0xc7, 0xff, 0xfd, 0xe6, 0xe1, 0xff, 0xfd, 0xee, 0xe7, 0xff, 0xfd, 0xed, 0xe7, 0xff, 0xfc, 0xf1, 0xea, 0xff, 0xfb, 0xf3, 0xed, 0xff, 0xf9, 0xf4, 0xef, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf5, 0xf5, 0xf0, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0x96, 0x92, 0xff, 0x49, 0x00, 0x00, 0xff, 0x55, 0x0a, 0x02, 0xff, 0x55, 0x0c, 0x03, 0xff, 0x54, 0x0d, 0x05, 0xff, 0x54, 0x0e, 0x06, 0xff, 0x54, 0x0d, 0x06, 0xff, 0x54, 0x0b, 0x04, 0xff, 0x4e, 0x06, 0x01, 0xff, 0xb4, 0x30, 0x13, 0xff, 0x68, 0x13, 0x06, 0xff, 0x62, 0x0a, 0x0d, 0xff, 0xad, 0x22, 0x3f, 0xff, 0xf6, 0x3e, 0x77, 0xff, 0xff, 0x45, 0x88, 0xff, 0xcb, 0x33, 0x66, 0xff, 0x72, 0x16, 0x2d, 0xff, 0x33, 0x02, 0x04, 0xff, 0x22, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff, 0x46, 0x06, 0x0f, 0xff, 0xbd, 0x1e, 0x4f, 0xff, 0x3c, 0x03, 0x01, 0xff, 0x50, 0x08, 0x02, 0xff, 0x57, 0x03, 0x02, 0xff, 0xcd, 0x82, 0x03, 0xff, 0x85, 0x48, 0x01, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xa6, 0x84, 0x81, 0xff, 0xf4, 0xef, 0xea, 0xff, 0x46, 0x0b, 0x0b, 0xff, 0x5b, 0x1f, 0x1f, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfe, 0xfe, 0xf8, 0xff, 0xfe, 0xff, 0xf8, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf3, 0xef, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf7, 0xef, 0xec, 0xff, 0xf7, 0xeb, 0xe8, 0xff, 0xf9, 0xe7, 0xe4, 0xff, 0xfa, 0xe1, 0xdf, 0xff, 0xfb, 0xdc, 0xdb, 0xff, 0xfc, 0xd8, 0xd8, 0xff, 0xfd, 0xd6, 0xd6, 0xff, 0xfc, 0xd3, 0xd4, 0xff, 0xfd, 0xd1, 0xd3, 0xff, 0xfd, 0xd4, 0xd4, 0xff, 0xfd, 0xd3, 0xd3, 0xff, 0xfc, 0xc7, 0xcd, 0xff, 0xfc, 0xb6, 0xc3, 0xff, 0xfd, 0xa9, 0xbb, 0xff, 0xfc, 0xa3, 0xb7, 0xff, 0xfc, 0xa3, 0xb8, 0xff, 0xfc, 0xa5, 0xb9, 0xff, 0xfc, 0xa5, 0xb8, 0xff, 0xfc, 0xa7, 0xb9, 0xff, 0xfc, 0xa8, 0xbb, 0xff, 0xfd, 0xa8, 0xbb, 0xff, 0xfd, 0xa9, 0xbc, 0xff, 0xfc, 0xa9, 0xbc, 0xff, 0xfc, 0xa9, 0xba, 0xff, 0xfc, 0xaa, 0xbb, 0xff, 0xfc, 0xab, 0xbb, 0xff, 0xfd, 0xaa, 0xbb, 0xff, 0xfd, 0xa8, 0xb9, 0xff, 0xfd, 0xa7, 0xb8, 0xff, 0xfd, 0xa7, 0xb8, 0xff, 0xfd, 0xa8, 0xb9, 0xff, 0xfc, 0xa8, 0xb9, 0xff, 0xfc, 0xa8, 0xb9, 0xff, 0xfc, 0xa9, 0xba, 0xff, 0xfc, 0xaa, 0xba, 0xff, 0xfc, 0xad, 0xbb, 0xff, 0xfc, 0xb2, 0xbe, 0xff, 0xfc, 0x84, 0xa4, 0xff, 0xfc, 0x38, 0x72, 0xff, 0xfd, 0x39, 0x6e, 0xff, 0xfd, 0x3f, 0x72, 0xff, 0xfd, 0x40, 0x73, 0xff, 0xfd, 0x42, 0x74, 0xff, 0xfd, 0x42, 0x73, 0xff, 0xfd, 0x41, 0x73, 0xff, 0xfd, 0x3e, 0x71, 0xff, 0xfc, 0x44, 0x74, 0xff, 0xfc, 0xd6, 0xd5, 0xff, 0xfd, 0xed, 0xe5, 0xff, 0xfd, 0xe8, 0xe3, 0xff, 0xfd, 0xeb, 0xe5, 0xff, 0xfc, 0xef, 0xe9, 0xff, 0xfa, 0xf2, 0xec, 0xff, 0xf8, 0xf4, 0xee, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf5, 0xf4, 0xef, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xdf, 0xd2, 0xce, 0xff, 0x4f, 0x0a, 0x05, 0xff, 0x51, 0x06, 0x00, 0xff, 0x53, 0x0a, 0x02, 0xff, 0x54, 0x0b, 0x03, 0xff, 0x53, 0x0b, 0x03, 0xff, 0x51, 0x0a, 0x02, 0xff, 0x4b, 0x06, 0x00, 0xff, 0x49, 0x02, 0x00, 0xff, 0xba, 0x28, 0x25, 0xff, 0xd3, 0x2b, 0x4a, 0xff, 0xf4, 0x2d, 0x65, 0xff, 0xf3, 0x30, 0x69, 0xff, 0xad, 0x26, 0x4b, 0xff, 0x56, 0x0d, 0x1a, 0xff, 0x2a, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff, 0x2e, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff, 0x48, 0x06, 0x10, 0xff, 0xc7, 0x21, 0x50, 0xff, 0x60, 0x0d, 0x06, 0xff, 0x50, 0x08, 0x02, 0xff, 0x3e, 0x00, 0x00, 0xff, 0xbe, 0x83, 0x02, 0xff, 0x85, 0x4a, 0x01, 0xff, 0x2e, 0x00, 0x00, 0xff, 0xa2, 0x80, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x61, 0x2d, 0x2c, 0xff, 0x43, 0x00, 0x00, 0xff, 0xe3, 0xd5, 0xd0, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xfe, 0xfd, 0xf7, 0xff, 0xfe, 0xff, 0xf8, 0xff,
0xfe, 0xfb, 0xf6, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf8, 0xf0, 0xec, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf8, 0xe9, 0xe5, 0xff, 0xf9, 0xe4, 0xe2, 0xff, 0xfa, 0xe0, 0xde, 0xff, 0xfb, 0xdc, 0xdc, 0xff, 0xfc, 0xd9, 0xd9, 0xff, 0xfd, 0xd7, 0xd7, 0xff, 0xfc, 0xd3, 0xd5, 0xff, 0xfc, 0xd1, 0xd3, 0xff, 0xfd, 0xd0, 0xd2, 0xff, 0xfd, 0xcf, 0xd1, 0xff, 0xfd, 0xd0, 0xd1, 0xff, 0xfd, 0xd2, 0xd0, 0xff, 0xfd, 0xd3, 0xd0, 0xff, 0xfd, 0xd3, 0xd0, 0xff, 0xfe, 0xd4, 0xd1, 0xff, 0xfe, 0xd4, 0xd2, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd3, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd4, 0xd2, 0xff, 0xfd, 0xd4, 0xd3, 0xff, 0xfd, 0xd5, 0xd3, 0xff, 0xfd, 0xd5, 0xd3, 0xff, 0xfd, 0xd5, 0xd3, 0xff, 0xfd, 0xd5, 0xd2, 0xff, 0xfd, 0xd5, 0xd2, 0xff, 0xfd, 0xd6, 0xd3, 0xff, 0xfe, 0xd8, 0xd5, 0xff, 0xfd, 0xdb, 0xd7, 0xff, 0xfc, 0xa4, 0xb6, 0xff, 0xfc, 0x44, 0x78, 0xff, 0xfd, 0x33, 0x6b, 0xff, 0xfd, 0x3b, 0x74, 0xff, 0xfd, 0x3c, 0x76, 0xff, 0xfd, 0x3c, 0x75, 0xff, 0xfd, 0x3d, 0x73, 0xff, 0xfd, 0x3c, 0x71, 0xff, 0xfd, 0x33, 0x6a, 0xff, 0xfc, 0xb3, 0xc0, 0xff, 0xfd, 0xef, 0xe8, 0xff, 0xfd, 0xea, 0xe5, 0xff, 0xfc, 0xed, 0xe8, 0xff, 0xfa, 0xf0, 0xeb, 0xff, 0xf8, 0xf2, 0xed, 0xff, 0xf8, 0xf3, 0xef, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf4, 0xf4, 0xef, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xff, 0xfe, 0xf9, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0x65, 0x27, 0x25, 0xff, 0x41, 0x00, 0x00, 0xff, 0x4b, 0x07, 0x00, 0xff, 0x4b, 0x06, 0x00, 0xff, 0x48, 0x05, 0x00, 0xff, 0x54, 0x08, 0x03, 0xff, 0x88, 0x12, 0x1f, 0xff, 0xcc, 0x1f, 0x46, 0xff, 0xf4, 0x26, 0x5e, 0xff, 0xec, 0x35, 0x67, 0xff, 0xd0, 0x5f, 0x79, 0xff, 0xd2, 0xab, 0xae, 0xff, 0x51, 0x3c, 0x39, 0xff, 0x19, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x30, 0x01, 0x00, 0xff, 0x31, 0x01, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff, 0x3d, 0x03, 0x01, 0xff, 0x77, 0x10, 0x1d, 0xff, 0xc9, 0x24, 0x53, 0xff, 0x49, 0x03, 0x00, 0xff, 0x45, 0x05, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff, 0xbc, 0x86, 0x02, 0xff, 0x86, 0x4c, 0x01, 0xff, 0x30, 0x00, 0x00, 0xff, 0xa1, 0x7f, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x56, 0x53, 0xff, 0x31, 0x00, 0x00, 0xff, 0xc1, 0xa9, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf7, 0xff, 0xfe, 0xff, 0xf8, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf2, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xee, 0xff, 0xf7, 0xf1, 0xec, 0xff, 0xf7, 0xee, 0xea, 0xff, 0xf7, 0xeb, 0xe7, 0xff, 0xf8, 0xe8, 0xe4, 0xff, 0xf9, 0xe4, 0xe1, 0xff, 0xfa, 0xe0, 0xdf, 0xff, 0xfb, 0xde, 0xdc, 0xff, 0xfb, 0xdb, 0xda, 0xff, 0xfc, 0xd8, 0xd8, 0xff, 0xfb, 0xd6, 0xd5, 0xff, 0xfb, 0xd3, 0xd4, 0xff, 0xfb, 0xd2, 0xd3, 0xff, 0xfb, 0xd1, 0xd2, 0xff, 0xfc, 0xd1, 0xd1, 0xff, 0xfc, 0xd1, 0xd1, 0xff, 0xfc, 0xd1, 0xd0, 0xff, 0xfc, 0xd1, 0xd0, 0xff, 0xfc, 0xd2, 0xd1, 0xff, 0xfb, 0xd2, 0xd1, 0xff, 0xfb, 0xd2, 0xd1, 0xff, 0xfc, 0xd1, 0xd0, 0xff, 0xfc, 0xd1, 0xd0, 0xff, 0xfd, 0xd1, 0xd0, 0xff, 0xfc, 0xd2, 0xd1, 0xff, 0xfc, 0xd3, 0xd1, 0xff, 0xfd, 0xd3, 0xd2, 0xff, 0xfc, 0xd3, 0xd2, 0xff, 0xfa, 0xd3, 0xd2, 0xff, 0xfb, 0xd3, 0xd2, 0xff, 0xfc, 0xd3, 0xd2, 0xff, 0xfd, 0xd3, 0xd2, 0xff, 0xfc, 0xd3, 0xd3, 0xff, 0xfc, 0xd3, 0xd2, 0xff, 0xfd, 0xd2, 0xd2, 0xff, 0xfd, 0xd2, 0xd1, 0xff, 0xfd, 0xd3, 0xd1, 0xff, 0xfd, 0xd3, 0xd2, 0xff, 0xfd, 0xd5, 0xd3, 0xff, 0xfd, 0xdc, 0xd8, 0xff, 0xfc, 0xbe, 0xc6, 0xff, 0xfc, 0x58, 0x86, 0xff, 0xfd, 0x2e, 0x6e, 0xff, 0xfd, 0x37, 0x75, 0xff, 0xfd, 0x37, 0x75, 0xff, 0xfd, 0x37, 0x74, 0xff, 0xfd, 0x39, 0x72, 0xff, 0xfd, 0x2d, 0x69, 0xff, 0xfc, 0x8e, 0xa9, 0xff, 0xfd, 0xf5, 0xee, 0xff, 0xfc, 0xee, 0xe9, 0xff, 0xfa, 0xef, 0xeb, 0xff, 0xf9, 0xf1, 0xec, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x9d, 0x9c, 0xff, 0x87, 0x09, 0x11, 0xff, 0x70, 0x00, 0x08, 0xff, 0x7a, 0x06, 0x11, 0xff, 0xa5, 0x0e, 0x28, 0xff, 0xde, 0x1b, 0x49, 0xff, 0xf9, 0x31, 0x64, 0xff, 0xeb, 0x5b, 0x7c, 0xff, 0xdf, 0x9b, 0xa5, 0xff, 0xe7, 0xda, 0xd7, 0xff, 0xf9, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x64, 0x52, 0x52, 0xff, 0x1d, 0x00, 0x00, 0xff, 0x2d, 0x01, 0x00, 0xff, 0x31, 0x01, 0x00, 0xff, 0x30, 0x00, 0x00, 0xff, 0x82, 0x10, 0x28, 0xff, 0x6e, 0x0b, 0x15, 0xff, 0x59, 0x08, 0x14, 0xff, 0xc5, 0x28, 0x5a, 0xff, 0x48, 0x04, 0x00, 0xff, 0x48, 0x06, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff, 0xbd, 0x8a, 0x02, 0xff, 0x88, 0x4d, 0x01, 0xff, 0x32, 0x00, 0x00, 0xff, 0xa1, 0x7e, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa9, 0x8e, 0x8b, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x97, 0x72, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf7, 0xff, 0xff, 0xff, 0xf8, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf0, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xf7, 0xf2, 0xed, 0xff, 0xf6, 0xf0, 0xeb, 0xff, 0xf6, 0xed, 0xe9, 0xff, 0xf7, 0xeb, 0xe7, 0xff, 0xf9, 0xe8, 0xe5, 0xff, 0xf9, 0xe5, 0xe2, 0xff, 0xf9, 0xe2, 0xe0, 0xff, 0xf9, 0xdf, 0xde, 0xff, 0xfa, 0xdd, 0xdc, 0xff, 0xfa, 0xdb, 0xda, 0xff, 0xf9, 0xd9, 0xd9, 0xff, 0xf9, 0xd7, 0xd7, 0xff, 0xfa, 0xd6, 0xd6, 0xff, 0xf9, 0xd6, 0xd5, 0xff, 0xf9, 0xd5, 0xd5, 0xff, 0xf9, 0xd5, 0xd4, 0xff, 0xf9, 0xd5, 0xd4, 0xff, 0xf9, 0xd6, 0xd5, 0xff, 0xfa, 0xd7, 0xd5, 0xff, 0xfa, 0xd6, 0xd4, 0xff, 0xfa, 0xd6, 0xd5, 0xff, 0xfb, 0xd7, 0xd5, 0xff, 0xfa, 0xd7, 0xd5, 0xff, 0xfb, 0xd8, 0xd6, 0xff, 0xfc, 0xd8, 0xd7, 0xff, 0xfb, 0xd8, 0xd7, 0xff, 0xfb, 0xd9, 0xd7, 0xff, 0xfb, 0xd9, 0xd7, 0xff, 0xfb, 0xd9, 0xd7, 0xff, 0xfb, 0xd8, 0xd7, 0xff, 0xfa, 0xd8, 0xd6, 0xff, 0xfa, 0xd7, 0xd6, 0xff, 0xfa, 0xd7, 0xd6, 0xff, 0xfb, 0xd7, 0xd6, 0xff, 0xfb, 0xd7, 0xd6, 0xff, 0xfc, 0xd7, 0xd5, 0xff, 0xfc, 0xd6, 0xd5, 0xff, 0xfd, 0xd7, 0xd5, 0xff, 0xfd, 0xd6, 0xd4, 0xff, 0xfd, 0xdc, 0xd8, 0xff, 0xfd, 0xd2, 0xd4, 0xff, 0xfb, 0x73, 0x9b, 0xff, 0xfd, 0x2d, 0x70, 0xff, 0xfd, 0x31, 0x73, 0xff, 0xfd, 0x34, 0x74, 0xff, 0xfd, 0x37, 0x73, 0xff, 0xfd, 0x2f, 0x6b, 0xff, 0xfc, 0x67, 0x90, 0xff, 0xfd, 0xf3, 0xef, 0xff, 0xfd, 0xf2, 0xee, 0xff, 0xfa, 0xf2, 0xee, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xbf, 0xc7, 0xff, 0xfa, 0x6a, 0x8b, 0xff, 0xfd, 0x4d, 0x79, 0xff, 0xff, 0x5e, 0x8a, 0xff, 0xfb, 0x97, 0xb0, 0xff, 0xf2, 0xd3, 0xd7, 0xff, 0xf8, 0xfc, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xfe, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x5b, 0x5a, 0xff, 0x29, 0x00, 0x00, 0xff, 0x31, 0x01, 0x00, 0xff, 0x38, 0x01, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff, 0xb3, 0x1d, 0x4c, 0xff, 0x6d, 0x0d, 0x20, 0xff, 0x50, 0x08, 0x12, 0xff, 0xc7, 0x2e, 0x63, 0xff, 0x48, 0x03, 0x00, 0xff, 0x49, 0x05, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff, 0xbf, 0x8a, 0x02, 0xff, 0x87, 0x4b, 0x01, 0xff, 0x32, 0x00, 0x00, 0xff, 0xa7, 0x84, 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0x78, 0x75, 0xff, 0x35, 0x00, 0x00, 0xff, 0x6f, 0x3d, 0x3c, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xf9, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf7, 0xf3, 0xee, 0xff, 0xf6, 0xf2, 0xed, 0xff, 0xf6, 0xef, 0xeb, 0xff, 0xf7, 0xed, 0xe9, 0xff, 0xf7, 0xeb, 0xe8, 0xff, 0xf8, 0xe9, 0xe6, 0xff, 0xf9, 0xe7, 0xe4, 0xff, 0xf8, 0xe4, 0xe2, 0xff, 0xf9, 0xe2, 0xe0, 0xff, 0xf9, 0xe0, 0xdf, 0xff, 0xfa, 0xdf, 0xde, 0xff, 0xf9, 0xdd, 0xdc, 0xff, 0xfa, 0xdc, 0xdb, 0xff, 0xf9, 0xdb, 0xda, 0xff, 0xf8, 0xdb, 0xd9, 0xff, 0xf8, 0xda, 0xd9, 0xff, 0xf8, 0xda, 0xd9, 0xff, 0xf9, 0xdb, 0xdb, 0xff, 0xf9, 0xdc, 0xdb, 0xff, 0xf9, 0xdc, 0xda, 0xff, 0xf8, 0xdc, 0xda, 0xff, 0xfa, 0xdd, 0xdb, 0xff, 0xfa, 0xdd, 0xdb, 0xff, 0xfb, 0xde, 0xdc, 0xff, 0xfa, 0xde, 0xdd, 0xff, 0xf9, 0xde, 0xdc, 0xff, 0xf9, 0xde, 0xdc, 0xff, 0xfa, 0xde, 0xdc, 0xff, 0xfa, 0xdf, 0xdb, 0xff, 0xfa, 0xde, 0xdb, 0xff, 0xf9, 0xdd, 0xdb, 0xff, 0xf9, 0xdd, 0xdb, 0xff, 0xf9, 0xdd, 0xdc, 0xff, 0xfa, 0xdd, 0xdb, 0xff, 0xf9, 0xdd, 0xdb, 0xff, 0xf9, 0xdc, 0xdb, 0xff, 0xfa, 0xdb, 0xda, 0xff, 0xfa, 0xda, 0xd8, 0xff, 0xfb, 0xd9, 0xd7, 0xff, 0xfd, 0xda, 0xd7, 0xff, 0xfe, 0xde, 0xdc, 0xff, 0xfd, 0xe1, 0xdf, 0xff, 0xfb, 0x95, 0xb1, 0xff, 0xfc, 0x31, 0x76, 0xff, 0xfd, 0x2c, 0x71, 0xff, 0xfd, 0x34, 0x73, 0xff, 0xfd, 0x32, 0x71, 0xff, 0xfc, 0x45, 0x7c, 0xff, 0xfd, 0xe4, 0xe6, 0xff, 0xfd, 0xf7, 0xf2, 0xff, 0xfa, 0xf5, 0xf0, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xff, 0xfc, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfd, 0xff, 0xfb, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfd, 0xfc, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x6e, 0x6b, 0xff, 0x4a, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff, 0x3a, 0x01, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xae, 0x1f, 0x4f, 0xff, 0x72, 0x0f, 0x24, 0xff, 0x55, 0x09, 0x13, 0xff, 0xc4, 0x2f, 0x66, 0xff, 0x46, 0x03, 0x00, 0xff, 0x4a, 0x04, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff, 0xbd, 0x89, 0x02, 0xff, 0x88, 0x4c, 0x01, 0xff, 0x38, 0x00, 0x00, 0xff, 0x85, 0x57, 0x53, 0xff, 0x79, 0x4a, 0x48, 0xff, 0x41, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff, 0x52, 0x14, 0x12, 0xff, 0xec, 0xe6, 0xe1, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xfe, 0xff, 0xf9, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf7, 0xf3, 0xee, 0xff, 0xf7, 0xf2, 0xed, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf7, 0xee, 0xeb, 0xff, 0xf8, 0xec, 0xea, 0xff, 0xf7, 0xea, 0xe8, 0xff, 0xf7, 0xe9, 0xe6, 0xff, 0xf8, 0xe7, 0xe5, 0xff, 0xf9, 0xe5, 0xe4, 0xff, 0xf8, 0xe4, 0xe3, 0xff, 0xf8, 0xe3, 0xe1, 0xff, 0xf7, 0xe2, 0xe0, 0xff, 0xf7, 0xe2, 0xdf, 0xff, 0xf7, 0xe1, 0xdf, 0xff, 0xf7, 0xe1, 0xde, 0xff, 0xf7, 0xe1, 0xdf, 0xff, 0xf7, 0xe2, 0xdf, 0xff, 0xf6, 0xe1, 0xdf, 0xff, 0xf6, 0xe1, 0xde, 0xff, 0xf6, 0xe1, 0xdf, 0xff, 0xf8, 0xe2, 0xe0, 0xff, 0xf9, 0xe3, 0xe1, 0xff, 0xf9, 0xe4, 0xe1, 0xff, 0xf8, 0xe3, 0xe1, 0xff, 0xf8, 0xe3, 0xe1, 0xff, 0xf8, 0xe3, 0xe1, 0xff, 0xf8, 0xe3, 0xe0, 0xff, 0xf8, 0xe3, 0xe0, 0xff, 0xf8, 0xe3, 0xdf, 0xff, 0xf7, 0xe2, 0xe0, 0xff, 0xf7, 0xe2, 0xe0, 0xff, 0xf8, 0xe3, 0xe0, 0xff, 0xf8, 0xe3, 0xe0, 0xff, 0xf7, 0xe2, 0xdf, 0xff, 0xf7, 0xe1, 0xdf, 0xff, 0xf8, 0xdf, 0xdd, 0xff, 0xf8, 0xdd, 0xdc, 0xff, 0xf8, 0xdc, 0xdb, 0xff, 0xfa, 0xdc, 0xdb, 0xff, 0xfb, 0xdd, 0xdb, 0xff, 0xfd, 0xe0, 0xde, 0xff, 0xfd, 0xe9, 0xe4, 0xff, 0xfc, 0xb0, 0xc3, 0xff, 0xfc, 0x3f, 0x7f, 0xff, 0xfd, 0x28, 0x6f, 0xff, 0xfd, 0x32, 0x73, 0xff, 0xfd, 0x30, 0x71, 0xff, 0xfc, 0xc7, 0xd3, 0xff, 0xfc, 0xfd, 0xf6, 0xff, 0xf9, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfb, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x78, 0x74, 0xff, 0x48, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff, 0x44, 0x03, 0x09, 0xff, 0xd0, 0x2a, 0x6a, 0xff, 0x5c, 0x09, 0x14, 0xff, 0x58, 0x09, 0x14, 0xff, 0xc2, 0x30, 0x63, 0xff, 0x45, 0x03, 0x00, 0xff, 0x49, 0x04, 0x00, 0xff, 0x3c, 0x00, 0x01, 0xff, 0xb9, 0x86, 0x02, 0xff, 0x8c, 0x50, 0x01, 0xff, 0x43, 0x00, 0x01, 0xff, 0x46, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff, 0x4a, 0x04, 0x00, 0xff, 0x4a, 0x04, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff, 0xc9, 0xb6, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf8, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf7, 0xee, 0xeb, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf6, 0xeb, 0xe8, 0xff, 0xf7, 0xea, 0xe8, 0xff, 0xf7, 0xea, 0xe7, 0xff, 0xf7, 0xe9, 0xe6, 0xff, 0xf6, 0xe8, 0xe6, 0xff, 0xf6, 0xe8, 0xe5, 0xff, 0xf7, 0xe7, 0xe4, 0xff, 0xf7, 0xe7, 0xe4, 0xff, 0xf7, 0xe7, 0xe4, 0xff, 0xf7, 0xe7, 0xe4, 0xff, 0xf6, 0xe6, 0xe3, 0xff, 0xf5, 0xe6, 0xe3, 0xff, 0xf5, 0xe7, 0xe3, 0xff, 0xf6, 0xe7, 0xe3, 0xff, 0xf8, 0xe8, 0xe4, 0xff, 0xf8, 0xe8, 0xe4, 0xff, 0xf8, 0xe8, 0xe4, 0xff, 0xf8, 0xe8, 0xe4, 0xff, 0xf8, 0xe7, 0xe5, 0xff, 0xf8, 0xe7, 0xe4, 0xff, 0xf8, 0xe7, 0xe4, 0xff, 0xf7, 0xe7, 0xe4, 0xff, 0xf6, 0xe7, 0xe4, 0xff, 0xf7, 0xe7, 0xe4, 0xff, 0xf7, 0xe8, 0xe4, 0xff, 0xf7, 0xe8, 0xe4, 0xff, 0xf6, 0xe7, 0xe4, 0xff, 0xf6, 0xe5, 0xe3, 0xff, 0xf7, 0xe4, 0xe1, 0xff, 0xf6, 0xe2, 0xe0, 0xff, 0xf7, 0xe0, 0xde, 0xff, 0xf8, 0xdf, 0xdd, 0xff, 0xf8, 0xdf, 0xdd, 0xff, 0xfa, 0xe0, 0xde, 0xff, 0xfc, 0xe3, 0xe0, 0xff, 0xfd, 0xee, 0xe8, 0xff, 0xfc, 0xd2, 0xd9, 0xff, 0xfb, 0x59, 0x8e, 0xff, 0xfd, 0x20, 0x69, 0xff, 0xfc, 0x23, 0x6c, 0xff, 0xfc, 0xc2, 0xd0, 0xff, 0xfc, 0xfe, 0xf6, 0xff, 0xfa, 0xf6, 0xf2, 0xff, 0xf9, 0xf6, 0xf2, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfd, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0x7a, 0x75, 0xff, 0x73, 0x09, 0x19, 0xff, 0xa3, 0x29, 0x5f, 0xff, 0xa5, 0x2a, 0x5e, 0xff, 0xcf, 0x31, 0x74, 0xff, 0x8f, 0x18, 0x3a, 0xff, 0x37, 0x00, 0x00, 0xff, 0x5d, 0x0b, 0x17, 0xff, 0xc5, 0x32, 0x62, 0xff, 0x48, 0x03, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff, 0x4d, 0x09, 0x01, 0xff, 0xd9, 0xab, 0x03, 0xff, 0x70, 0x33, 0x01, 0xff, 0x45, 0x00, 0x00, 0xff, 0x4a, 0x05, 0x00, 0xff, 0x49, 0x05, 0x00, 0xff, 0x4a, 0x05, 0x00, 0xff, 0x4a, 0x06, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff, 0x98, 0x74, 0x70, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf9, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf4, 0xf5, 0xf4, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf8, 0xf3, 0xef, 0xff, 0xf7, 0xf2, 0xef, 0xff, 0xf7, 0xf2, 0xed, 0xff, 0xf7, 0xf1, 0xec, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf6, 0xef, 0xeb, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xee, 0xeb, 0xff, 0xf7, 0xed, 0xea, 0xff, 0xf7, 0xed, 0xea, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf7, 0xeb, 0xe8, 0xff, 0xf6, 0xea, 0xe8, 0xff, 0xf6, 0xeb, 0xe7, 0xff, 0xf6, 0xea, 0xe7, 0xff, 0xf6, 0xea, 0xe7, 0xff, 0xf6, 0xeb, 0xe8, 0xff, 0xf6, 0xec, 0xe8, 0xff, 0xf7, 0xeb, 0xe8, 0xff, 0xf7, 0xec, 0xe8, 0xff, 0xf6, 0xec, 0xe8, 0xff, 0xf6, 0xeb, 0xe8, 0xff, 0xf6, 0xeb, 0xe8, 0xff, 0xf7, 0xeb, 0xe7, 0xff, 0xf6, 0xeb, 0xe7, 0xff, 0xf7, 0xeb, 0xe7, 0xff, 0xf7, 0xec, 0xe8, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf6, 0xec, 0xe8, 0xff, 0xf6, 0xeb, 0xe8, 0xff, 0xf6, 0xea, 0xe7, 0xff, 0xf7, 0xe9, 0xe6, 0xff, 0xf7, 0xe7, 0xe4, 0xff, 0xf7, 0xe5, 0xe2, 0xff, 0xf7, 0xe3, 0xe1, 0xff, 0xf7, 0xe2, 0xdf, 0xff, 0xf7, 0xe2, 0xe0, 0xff, 0xf9, 0xe5, 0xe2, 0xff, 0xfc, 0xe9, 0xe4, 0xff, 0xfd, 0xf3, 0xec, 0xff, 0xfb, 0xe8, 0xe7, 0xff, 0xfb, 0x98, 0xb5, 0xff, 0xfb, 0xa9, 0xc2, 0xff, 0xfb, 0xf5, 0xf2, 0xff, 0xfb, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x7e, 0x7f, 0xff, 0x51, 0x00, 0x05, 0xff, 0x6e, 0x14, 0x2d, 0xff, 0x6f, 0x14, 0x2d, 0xff, 0x5f, 0x0b, 0x1b, 0xff, 0x3c, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff, 0x63, 0x0c, 0x18, 0xff, 0xc6, 0x34, 0x61, 0xff, 0x43, 0x00, 0x00, 0xff, 0x50, 0x09, 0x01, 0xff, 0xce, 0x96, 0x03, 0xff, 0x9e, 0x67, 0x03, 0xff, 0x40, 0x00, 0x00, 0xff, 0x48, 0x05, 0x00, 0xff, 0x4a, 0x06, 0x01, 0xff, 0x50, 0x08, 0x02, 0xff, 0x57, 0x0a, 0x03, 0xff, 0x4d, 0x06, 0x01, 0xff, 0x41, 0x00, 0x00, 0xff, 0x66, 0x32, 0x30, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xfa, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf6, 0xf2, 0xed, 0xff, 0xf6, 0xf2, 0xed, 0xff, 0xf7, 0xf2, 0xed, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf7, 0xf0, 0xed, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf7, 0xef, 0xec, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf7, 0xee, 0xeb, 0xff, 0xf6, 0xee, 0xeb, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf6, 0xef, 0xea, 0xff, 0xf6, 0xee, 0xea, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf8, 0xf0, 0xeb, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf6, 0xef, 0xeb, 0xff, 0xf8, 0xee, 0xeb, 0xff, 0xf8, 0xed, 0xea, 0xff, 0xf7, 0xeb, 0xe8, 0xff, 0xf7, 0xe9, 0xe6, 0xff, 0xf8, 0xe8, 0xe5, 0xff, 0xf8, 0xe6, 0xe3, 0xff, 0xf7, 0xe5, 0xe2, 0xff, 0xf8, 0xe6, 0xe3, 0xff, 0xf8, 0xea, 0xe6, 0xff, 0xfa, 0xee, 0xea, 0xff, 0xfb, 0xf3, 0xee, 0xff, 0xfa, 0xfd, 0xf5, 0xff, 0xfa, 0xfe, 0xf6, 0xff, 0xfa, 0xf7, 0xf2, 0xff, 0xf9, 0xf7, 0xf1, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd, 0x84, 0x8f, 0xff, 0x3e, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x45, 0x02, 0x00, 0xff, 0x4b, 0x02, 0x00, 0xff, 0x87, 0x11, 0x20, 0xff, 0x4b, 0x01, 0x00, 0xff, 0x66, 0x0c, 0x18, 0xff, 0xc6, 0x31, 0x5d, 0xff, 0x40, 0x00, 0x00, 0xff, 0xc0, 0x86, 0x02, 0xff, 0xa2, 0x6d, 0x02, 0xff, 0x38, 0x00, 0x01, 0xff, 0x44, 0x03, 0x00, 0xff, 0x4d, 0x06, 0x01, 0xff, 0x57, 0x09, 0x03, 0xff, 0x56, 0x08, 0x03, 0xff, 0x54, 0x08, 0x02, 0xff, 0x51, 0x07, 0x01, 0xff, 0x46, 0x02, 0x00, 0xff, 0x45, 0x05, 0x03, 0xff, 0xdb, 0xcf, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf7, 0xf4, 0xf0, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf7, 0xf2, 0xef, 0xff, 0xf7, 0xf1, 0xee, 0xff, 0xf7, 0xf1, 0xee, 0xff, 0xf7, 0xf1, 0xee, 0xff, 0xf7, 0xf2, 0xed, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf6, 0xf1, 0xed, 0xff, 0xf6, 0xf1, 0xed, 0xff, 0xf6, 0xf1, 0xee, 0xff, 0xf6, 0xf1, 0xee, 0xff, 0xf7, 0xf1, 0xee, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf6, 0xf1, 0xed, 0xff, 0xf5, 0xf1, 0xed, 0xff, 0xf5, 0xf1, 0xec, 0xff, 0xf6, 0xf2, 0xed, 0xff, 0xf7, 0xf2, 0xed, 0xff, 0xf7, 0xf3, 0xee, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf8, 0xf2, 0xee, 0xff, 0xf8, 0xf1, 0xed, 0xff, 0xf8, 0xef, 0xec, 0xff, 0xf7, 0xed, 0xea, 0xff, 0xf7, 0xeb, 0xe8, 0xff, 0xf8, 0xea, 0xe7, 0xff, 0xf7, 0xe9, 0xe5, 0xff, 0xf6, 0xe9, 0xe6, 0xff, 0xf6, 0xeb, 0xe8, 0xff, 0xf8, 0xed, 0xeb, 0xff, 0xf9, 0xf1, 0xed, 0xff, 0xfa, 0xf3, 0xee, 0xff, 0xfa, 0xf5, 0xf0, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x84, 0x9b, 0xff, 0x4d, 0x00, 0x00, 0xff, 0x71, 0x12, 0x0f, 0xff, 0x55, 0x08, 0x03, 0xff, 0x55, 0x06, 0x07, 0xff, 0xbd, 0x21, 0x3c, 0xff, 0x4b, 0x01, 0x01, 0xff, 0x66, 0x0d, 0x17, 0xff, 0xc1, 0x30, 0x59, 0xff, 0x48, 0x0a, 0x00, 0xff, 0xd1, 0xa0, 0x02, 0xff, 0x94, 0x57, 0x02, 0xff, 0x69, 0x28, 0x01, 0xff, 0x43, 0x00, 0x00, 0xff, 0x4a, 0x05, 0x01, 0xff, 0x54, 0x08, 0x01, 0xff, 0x5f, 0x0b, 0x02, 0xff, 0x59, 0x09, 0x02, 0xff, 0x4f, 0x05, 0x01, 0xff, 0x48, 0x03, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff, 0xa2, 0x82, 0x80, 0xff, 0xff, 0xfc, 0xf9, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfb, 0xf5, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf8, 0xf3, 0xef, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf7, 0xf4, 0xf0, 0xff, 0xf6, 0xf4, 0xf0, 0xff, 0xf7, 0xf4, 0xf0, 0xff, 0xf7, 0xf4, 0xf0, 0xff, 0xf6, 0xf3, 0xf0, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf7, 0xf4, 0xf0, 0xff, 0xf7, 0xf3, 0xf0, 0xff, 0xf6, 0xf3, 0xef, 0xff, 0xf6, 0xf3, 0xef, 0xff, 0xf6, 0xf3, 0xef, 0xff, 0xf6, 0xf3, 0xef, 0xff, 0xf6, 0xf3, 0xef, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf8, 0xf3, 0xef, 0xff, 0xf7, 0xf1, 0xee, 0xff, 0xf6, 0xf0, 0xec, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xed, 0xea, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf7, 0xec, 0xe9, 0xff, 0xf7, 0xec, 0xea, 0xff, 0xf8, 0xee, 0xeb, 0xff, 0xf8, 0xf2, 0xed, 0xff, 0xf9, 0xf4, 0xee, 0xff, 0xf9, 0xf5, 0xf0, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0x8e, 0xa7, 0xff, 0x50, 0x00, 0x04, 0xff, 0x71, 0x14, 0x11, 0xff, 0x4c, 0x06, 0x02, 0xff, 0x4f, 0x05, 0x07, 0xff, 0xc2, 0x28, 0x41, 0xff, 0x45, 0x01, 0x01, 0xff, 0x6c, 0x10, 0x1a, 0xff, 0xbd, 0x31, 0x50, 0xff, 0x43, 0x0a, 0x00, 0xff, 0xc5, 0x96, 0x02, 0xff, 0xb6, 0x81, 0x02, 0xff, 0x7c, 0x3e, 0x01, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x4e, 0x06, 0x01, 0xff, 0x54, 0x08, 0x01, 0xff, 0x4a, 0x03, 0x01, 0xff, 0x4d, 0x03, 0x01, 0xff, 0x4e, 0x04, 0x01, 0xff, 0x46, 0x03, 0x01, 0xff, 0x42, 0x00, 0x00, 0xff, 0x47, 0x0a, 0x09, 0xff, 0x53, 0x1f, 0x1d, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf8, 0xf5, 0xf0, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf9, 0xf6, 0xf2, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf6, 0xf2, 0xed, 0xff, 0xf7, 0xf1, 0xec, 0xff, 0xf6, 0xf0, 0xec, 0xff, 0xf6, 0xef, 0xeb, 0xff, 0xf7, 0xef, 0xeb, 0xff, 0xf7, 0xf0, 0xec, 0xff, 0xf7, 0xf2, 0xee, 0xff, 0xf8, 0xf4, 0xef, 0xff, 0xfa, 0xf6, 0xf1, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf0, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf4, 0xee, 0xff, 0xea, 0x73, 0x93, 0xff, 0x53, 0x00, 0x0a, 0xff, 0x6b, 0x14, 0x10, 0xff, 0x4e, 0x08, 0x04, 0xff, 0x5a, 0x09, 0x0d, 0xff, 0xc5, 0x29, 0x41, 0xff, 0x3a, 0x00, 0x00, 0xff, 0x8a, 0x1f, 0x2c, 0xff, 0xa7, 0x2a, 0x3e, 0xff, 0x41, 0x0a, 0x00, 0xff, 0xc5, 0x96, 0x02, 0xff, 0xac, 0x7b, 0x02, 0xff, 0x79, 0x3b, 0x01, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x47, 0x03, 0x01, 0xff, 0x50, 0x05, 0x02, 0xff, 0x55, 0x07, 0x02, 0xff, 0x50, 0x04, 0x01, 0xff, 0x42, 0x01, 0x00, 0xff, 0x39, 0x00, 0x00, 0xff, 0x39, 0x00, 0x00, 0xff, 0x42, 0x00, 0x01, 0xff, 0x53, 0x05, 0x10, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf7, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf0, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf7, 0xf3, 0xee, 0xff, 0xf6, 0xf2, 0xee, 0xff, 0xf7, 0xf1, 0xed, 0xff, 0xf7, 0xf1, 0xee, 0xff, 0xf7, 0xf2, 0xef, 0xff, 0xf7, 0xf3, 0xef, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfe, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xdd, 0xd9, 0xff, 0x9e, 0x7b, 0x7c, 0xff, 0xb4, 0x35, 0x55, 0xff, 0xd3, 0x24, 0x54, 0xff, 0x5c, 0x0a, 0x14, 0xff, 0x63, 0x10, 0x0c, 0xff, 0x4b, 0x08, 0x02, 0xff, 0x77, 0x14, 0x1c, 0xff, 0xb2, 0x24, 0x36, 0xff, 0x32, 0x00, 0x00, 0xff, 0xbf, 0x36, 0x49, 0xff, 0x74, 0x16, 0x20, 0xff, 0x46, 0x0b, 0x00, 0xff, 0xc7, 0x92, 0x02, 0xff, 0xad, 0x7b, 0x02, 0xff, 0x79, 0x3c, 0x01, 0xff, 0x3e, 0x00, 0x01, 0xff, 0x47, 0x03, 0x01, 0xff, 0x4b, 0x04, 0x01, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff, 0x4b, 0x03, 0x08, 0xff, 0x7a, 0x16, 0x2e, 0xff, 0xb2, 0x2d, 0x5a, 0xff, 0xdf, 0x3f, 0x80, 0xff, 0xf8, 0x4b, 0x98, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf0, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf7, 0xf5, 0xf0, 0xff, 0xf7, 0xf4, 0xef, 0xff, 0xf7, 0xf4, 0xf0, 0xff, 0xf7, 0xf4, 0xf0, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf8, 0xf4, 0xf0, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xfd, 0xfd, 0xf7, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xeb, 0xf1, 0xff, 0x98, 0x78, 0x7b, 0xff, 0x45, 0x13, 0x18, 0xff, 0xb1, 0x1c, 0x44, 0xff, 0x56, 0x0b, 0x1f, 0xff, 0x8e, 0x20, 0x3d, 0xff, 0x65, 0x0e, 0x1a, 0xff, 0x5a, 0x0c, 0x07, 0xff, 0x48, 0x07, 0x01, 0xff, 0xa8, 0x25, 0x32, 0xff, 0x7c, 0x15, 0x1d, 0xff, 0x55, 0x0b, 0x0f, 0xff, 0xcf, 0x3a, 0x4f, 0xff, 0x42, 0x00, 0x02, 0xff, 0x4a, 0x0d, 0x00, 0xff, 0xc7, 0x92, 0x02, 0xff, 0xb7, 0x83, 0x02, 0xff, 0x7b, 0x40, 0x01, 0xff, 0x39, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff, 0x67, 0x0e, 0x1e, 0xff, 0xaa, 0x2a, 0x55, 0xff, 0xe6, 0x44, 0x85, 0xff, 0xff, 0x50, 0x9d, 0xff, 0xff, 0x51, 0x9f, 0xff, 0xff, 0x4e, 0x9c, 0xff, 0xff, 0x4c, 0x9c, 0xff,
0xfd, 0xfa, 0xf5, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf8, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfe, 0xfe, 0xf8, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xff, 0xa7, 0xc7, 0xff, 0xa7, 0x32, 0x55, 0xff, 0x22, 0x00, 0x00, 0xff, 0xbe, 0x2f, 0x59, 0xff, 0x62, 0x16, 0x2a, 0xff, 0x00, 0x00, 0x00, 0xff, 0x97, 0x24, 0x42, 0xff, 0x64, 0x0e, 0x1a, 0xff, 0x43, 0x02, 0x00, 0xff, 0x52, 0x08, 0x08, 0xff, 0xc9, 0x2c, 0x3d, 0xff, 0x3d, 0x02, 0x02, 0xff, 0xae, 0x2e, 0x3f, 0xff, 0x8c, 0x1f, 0x29, 0xff, 0x36, 0x00, 0x00, 0xff, 0x4d, 0x0e, 0x01, 0xff, 0xca, 0x98, 0x03, 0xff, 0x71, 0x3b, 0x01, 0xff, 0x47, 0x14, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff, 0x7a, 0x17, 0x2e, 0xff, 0xcd, 0x36, 0x70, 0xff, 0xfd, 0x4c, 0x97, 0xff, 0xff, 0x52, 0x9f, 0xff, 0xff, 0x50, 0x9b, 0xff, 0xfe, 0x50, 0x98, 0xff, 0xfd, 0x4f, 0x98, 0xff, 0xfe, 0x4d, 0x99, 0xff, 0xfe, 0x4c, 0x9a, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf5, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xfb, 0xf9, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xdb, 0xd0, 0xcd, 0xff, 0xbb, 0xa3, 0xa2, 0xff, 0xa2, 0x84, 0x82, 0xff, 0x9b, 0x7c, 0x7a, 0xff, 0xab, 0x91, 0x8f, 0xff, 0xcf, 0xc6, 0xc1, 0xff, 0xfa, 0xd6, 0xe0, 0xff, 0xff, 0x73, 0xa7, 0xff, 0xd5, 0x2e, 0x67, 0xff, 0x25, 0x00, 0x00, 0xff, 0x9b, 0x2e, 0x4e, 0xff, 0x93, 0x2d, 0x4c, 0xff, 0x00, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff, 0xa7, 0x26, 0x44, 0xff, 0x56, 0x0a, 0x11, 0xff, 0x2f, 0x00, 0x00, 0xff, 0x90, 0x1b, 0x25, 0xff, 0x9d, 0x1f, 0x2b, 0xff, 0x54, 0x0e, 0x13, 0xff, 0xd0, 0x3a, 0x4d, 0xff, 0x45, 0x03, 0x01, 0xff, 0x40, 0x01, 0x00, 0xff, 0x44, 0x04, 0x01, 0xff, 0x53, 0x1b, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff, 0x73, 0x14, 0x2f, 0xff, 0xd5, 0x3c, 0x77, 0xff, 0xff, 0x4e, 0x9e, 0xff, 0xff, 0x4e, 0xa0, 0xff, 0xfe, 0x4e, 0x9a, 0xff, 0xfd, 0x4f, 0x98, 0xff, 0xfd, 0x50, 0x98, 0xff, 0xfd, 0x50, 0x99, 0xff, 0xfc, 0x50, 0x99, 0xff, 0xfd, 0x4e, 0x9b, 0xff, 0xfe, 0x4d, 0x9c, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf5, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf4, 0xf5, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xfe, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xe6, 0xe3, 0xff, 0xa6, 0x86, 0x84, 0xff, 0x68, 0x2e, 0x2d, 0xff, 0x46, 0x03, 0x03, 0xff, 0x3b, 0x00, 0x00, 0xff, 0x39, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x84, 0x1c, 0x32, 0xff, 0xfd, 0x50, 0x8e, 0xff, 0xfd, 0x45, 0x87, 0xff, 0x5a, 0x10, 0x1f, 0xff, 0x4e, 0x0f, 0x1b, 0xff, 0xd3, 0x44, 0x75, 0xff, 0x17, 0x05, 0x07, 0xff, 0x05, 0x00, 0x00, 0xff, 0x1f, 0x04, 0x08, 0xff, 0xa5, 0x21, 0x3c, 0xff, 0x37, 0x01, 0x01, 0xff, 0x43, 0x03, 0x04, 0xff, 0xce, 0x31, 0x41, 0xff, 0x48, 0x06, 0x07, 0xff, 0xb5, 0x32, 0x40, 0xff, 0x7d, 0x19, 0x1f, 0xff, 0x3a, 0x00, 0x00, 0xff, 0x40, 0x01, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff, 0x64, 0x0e, 0x22, 0xff, 0xcc, 0x3a, 0x71, 0xff, 0xff, 0x4f, 0x9c, 0xff, 0xff, 0x51, 0x9e, 0xff, 0xfe, 0x4e, 0x9a, 0xff, 0xfd, 0x4d, 0x9a, 0xff, 0xfd, 0x4e, 0x99, 0xff, 0xfd, 0x51, 0x9a, 0xff, 0xfd, 0x51, 0x9a, 0xff, 0xfd, 0x50, 0x9a, 0xff, 0xfd, 0x50, 0x9b, 0xff, 0xfd, 0x4e, 0x9c, 0xff, 0xfe, 0x4d, 0x9d, 0xff,
0xfd, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf4, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf8, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfd, 0xfc, 0xf8, 0xff, 0xaa, 0x8b, 0x87, 0xff, 0x53, 0x15, 0x12, 0xff, 0x3c, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff, 0x44, 0x01, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff, 0x81, 0x19, 0x30, 0xff, 0xfc, 0x4a, 0x89, 0xff, 0xff, 0x4e, 0x92, 0xff, 0xb1, 0x2e, 0x57, 0xff, 0x20, 0x00, 0x00, 0xff, 0xc8, 0x39, 0x68, 0xff, 0x69, 0x1f, 0x37, 0xff, 0x03, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff, 0x57, 0x0d, 0x19, 0xff, 0x70, 0x0f, 0x1b, 0xff, 0x26, 0x00, 0x00, 0xff, 0x98, 0x20, 0x25, 0xff, 0x91, 0x1f, 0x24, 0xff, 0x6c, 0x0f, 0x16, 0xff, 0xbf, 0x2c, 0x3b, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x9e, 0x2a, 0x4e, 0xff, 0xfc, 0x53, 0x9a, 0xff, 0xff, 0x54, 0x9e, 0xff, 0xfd, 0x4e, 0x98, 0xff, 0xfd, 0x4e, 0x99, 0xff, 0xfd, 0x4e, 0x9a, 0xff, 0xfd, 0x4e, 0x9a, 0xff, 0xfd, 0x4e, 0x9b, 0xff, 0xfd, 0x50, 0x9b, 0xff, 0xfd, 0x51, 0x9c, 0xff, 0xfd, 0x51, 0x9d, 0xff, 0xfd, 0x52, 0x9e, 0xff, 0xfd, 0x50, 0x9e, 0xff, 0xfe, 0x4f, 0xa0, 0xff,
0xfd, 0xfb, 0xf7, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf4, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xe4, 0xdf, 0xff, 0x77, 0x43, 0x40, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff, 0x41, 0x00, 0x01, 0xff, 0x83, 0x30, 0x01, 0xff, 0xb0, 0x57, 0x02, 0xff, 0x43, 0x03, 0x01, 0xff, 0x33, 0x00, 0x00, 0xff, 0x70, 0x14, 0x23, 0xff, 0xf9, 0x4a, 0x87, 0xff, 0xff, 0x4f, 0x90, 0xff, 0xf8, 0x49, 0x88, 0xff, 0x48, 0x0a, 0x12, 0xff, 0x62, 0x14, 0x21, 0xff, 0xcd, 0x41, 0x70, 0xff, 0x0f, 0x01, 0x02, 0xff, 0x0c, 0x00, 0x00, 0xff, 0x1e, 0x03, 0x05, 0xff, 0x84, 0x15, 0x22, 0xff, 0x32, 0x00, 0x01, 0xff, 0x4c, 0x09, 0x09, 0xff, 0xca, 0x36, 0x38, 0xff, 0x44, 0x04, 0x04, 0xff, 0xc8, 0x2a, 0x3d, 0xff, 0x64, 0x0d, 0x11, 0xff, 0x35, 0x00, 0x00, 0xff, 0x45, 0x02, 0x02, 0xff, 0xba, 0x32, 0x5f, 0xff, 0xff, 0x55, 0xa0, 0xff, 0xff, 0x51, 0x9a, 0xff, 0xfd, 0x50, 0x97, 0xff, 0xfd, 0x4d, 0x9b, 0xff, 0xfd, 0x4c, 0x9c, 0xff, 0xfe, 0x4d, 0x9c, 0xff, 0xfe, 0x4d, 0x9d, 0xff, 0xfe, 0x4e, 0x9e, 0xff, 0xfe, 0x4f, 0x9f, 0xff, 0xfe, 0x4f, 0xa1, 0xff, 0xfe, 0x51, 0xa2, 0xff, 0xfe, 0x52, 0xa2, 0xff, 0xfe, 0x51, 0xa3, 0xff, 0xff, 0x50, 0xa5, 0xff,
0xfc, 0xfb, 0xf6, 0xff, 0xfa, 0xfb, 0xf6, 0xff, 0xf8, 0xf9, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf0, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf0, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf7, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xf9, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xda, 0xd6, 0xff, 0x5e, 0x25, 0x23, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff, 0x48, 0x01, 0x01, 0xff, 0xb3, 0x52, 0x05, 0xff, 0xd6, 0x7c, 0x04, 0xff, 0x6e, 0x2f, 0x02, 0xff, 0x2f, 0x00, 0x00, 0xff, 0x51, 0x09, 0x11, 0xff, 0xec, 0x45, 0x7d, 0xff, 0xff, 0x4f, 0x8e, 0xff, 0xff, 0x50, 0x92, 0xff, 0xae, 0x2f, 0x55, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xc7, 0x3d, 0x67, 0xff, 0x67, 0x20, 0x35, 0xff, 0x05, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x62, 0x10, 0x18, 0xff, 0x60, 0x0c, 0x12, 0xff, 0x25, 0x00, 0x00, 0xff, 0xb2, 0x2f, 0x2b, 0xff, 0x78, 0x19, 0x17, 0xff, 0x83, 0x17, 0x20, 0xff, 0xac, 0x23, 0x30, 0xff, 0x2c, 0x00, 0x00, 0xff, 0x45, 0x03, 0x04, 0xff, 0xc8, 0x37, 0x68, 0xff, 0xff, 0x51, 0x9d, 0xff, 0xfe, 0x4d, 0x96, 0xff, 0xfd, 0x4a, 0x96, 0xff, 0xfd, 0x46, 0x9f, 0xff, 0xff, 0x4c, 0xa0, 0xff, 0xff, 0x4f, 0x9e, 0xff, 0xfb, 0x4b, 0x99, 0xff, 0xf8, 0x4a, 0x97, 0xff, 0xf8, 0x4c, 0x98, 0xff, 0xf8, 0x4c, 0x9b, 0xff, 0xf8, 0x4c, 0x9d, 0xff, 0xf8, 0x4d, 0x9f, 0xff, 0xf8, 0x4e, 0xa0, 0xff, 0xfa, 0x4f, 0xa1, 0xff, 0xfa, 0x4c, 0xa0, 0xff,
0xfc, 0xfb, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf0, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xeb, 0xe4, 0xdf, 0xff, 0x5c, 0x25, 0x23, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x45, 0x00, 0x01, 0xff, 0x48, 0x02, 0x02, 0xff, 0xc6, 0x56, 0x1a, 0xff, 0xb7, 0x59, 0x10, 0xff, 0x37, 0x05, 0x01, 0xff, 0x29, 0x00, 0x00, 0xff, 0x45, 0x06, 0x05, 0xff, 0xd4, 0x3a, 0x66, 0xff, 0xff, 0x4e, 0x90, 0xff, 0xff, 0x4d, 0x8c, 0xff, 0xfa, 0x4b, 0x89, 0xff, 0x4e, 0x0b, 0x14, 0xff, 0x5a, 0x13, 0x22, 0xff, 0xd7, 0x47, 0x7a, 0xff, 0x17, 0x03, 0x05, 0xff, 0x13, 0x00, 0x00, 0xff, 0x1d, 0x01, 0x01, 0xff, 0x66, 0x10, 0x15, 0xff, 0x30, 0x00, 0x00, 0xff, 0x51, 0x0c, 0x0a, 0xff, 0xb3, 0x2e, 0x27, 0xff, 0x4a, 0x07, 0x08, 0xff, 0xce, 0x32, 0x41, 0xff, 0x46, 0x04, 0x04, 0xff, 0x3f, 0x02, 0x04, 0xff, 0xcb, 0x36, 0x69, 0xff, 0xff, 0x50, 0x9a, 0xff, 0xfe, 0x4d, 0x92, 0xff, 0xfd, 0x4a, 0x95, 0xff, 0xfd, 0x49, 0x94, 0xff, 0xff, 0x82, 0x59, 0xff, 0xf0, 0x80, 0x37, 0xff, 0xc9, 0x3b, 0x49, 0xff, 0xb4, 0x29, 0x3e, 0xff, 0xae, 0x27, 0x38, 0xff, 0xad, 0x26, 0x3a, 0xff, 0xac, 0x25, 0x3a, 0xff, 0xac, 0x25, 0x3a, 0xff, 0xaa, 0x25, 0x39, 0xff, 0xa7, 0x25, 0x38, 0xff, 0xa4, 0x23, 0x36, 0xff, 0xa3, 0x21, 0x32, 0xff,
0xfb, 0xfa, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf1, 0xf2, 0xf0, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf2, 0xf3, 0xf1, 0xff, 0xf2, 0xf3, 0xf1, 0xff, 0xf2, 0xf3, 0xf1, 0xff, 0xf2, 0xf3, 0xf1, 0xff, 0xf2, 0xf3, 0xf1, 0xff, 0xf1, 0xf2, 0xf1, 0xff, 0xf1, 0xf2, 0xf1, 0xff, 0xf3, 0xf3, 0xf0, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf5, 0xf6, 0xf0, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf5, 0xf4, 0xef, 0xff, 0xf5, 0xf4, 0xef, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf5, 0xf5, 0xf0, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xfd, 0xf9, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x77, 0x49, 0x46, 0xff, 0x3a, 0x00, 0x00, 0xff, 0x45, 0x02, 0x01, 0xff, 0x40, 0x00, 0x00, 0xff, 0xbb, 0x47, 0x1f, 0xff, 0xb0, 0x4b, 0x1e, 0xff, 0x2c, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff, 0x82, 0x1e, 0x35, 0xff, 0xff, 0x4f, 0x8e, 0xff, 0xfd, 0x4b, 0x8a, 0xff, 0xff, 0x4e, 0x91, 0xff, 0xb4, 0x30, 0x59, 0xff, 0x21, 0x00, 0x00, 0xff, 0xc1, 0x38, 0x67, 0xff, 0x83, 0x27, 0x47, 0xff, 0x09, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff, 0x35, 0x01, 0x01, 0xff, 0x34, 0x01, 0x00, 0xff, 0x42, 0x05, 0x06, 0xff, 0x52, 0x0a, 0x0a, 0xff, 0x3e, 0x01, 0x04, 0xff, 0xcd, 0x37, 0x6a, 0xff, 0xff, 0x51, 0x98, 0xff, 0xfd, 0x4b, 0x91, 0xff, 0xfd, 0x47, 0x95, 0xff, 0xfd, 0x4d, 0x8f, 0xff, 0xff, 0xa4, 0x31, 0xff, 0xdc, 0x8e, 0x0c, 0xff, 0xac, 0x2c, 0x28, 0xff, 0xa4, 0x1e, 0x2c, 0xff, 0xa2, 0x1b, 0x2c, 0xff, 0xa7, 0x20, 0x2a, 0xff, 0xa9, 0x26, 0x27, 0xff, 0xa7, 0x25, 0x27, 0xff, 0xa7, 0x26, 0x26, 0xff, 0xa8, 0x27, 0x27, 0xff, 0xa3, 0x25, 0x26, 0xff, 0x9f, 0x23, 0x23, 0xff, 0x9e, 0x21, 0x1f, 0xff,
0xfa, 0xfa, 0xf5, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf2, 0xf3, 0xf0, 0xff, 0xef, 0xf2, 0xef, 0xff, 0xee, 0xf1, 0xef, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xf0, 0xf2, 0xf0, 0xff, 0xf1, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf0, 0xf2, 0xf0, 0xff, 0xf1, 0xf2, 0xf0, 0xff, 0xef, 0xf1, 0xf0, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xf0, 0xf1, 0xef, 0xff, 0xf2, 0xf2, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf4, 0xf5, 0xf0, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf4, 0xf5, 0xf0, 0xff, 0xf4, 0xf3, 0xee, 0xff, 0xf3, 0xf2, 0xed, 0xff, 0xf2, 0xf2, 0xed, 0xff, 0xf2, 0xf2, 0xee, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf5, 0xf1, 0xff, 0xf7, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xfb, 0xf9, 0xf4, 0xff, 0xfc, 0xfa, 0xf6, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x97, 0x94, 0xff, 0x39, 0x00, 0x00, 0xff, 0x45, 0x01, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x8f, 0x2a, 0x14, 0xff, 0xc9, 0x51, 0x25, 0xff, 0x32, 0x01, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff, 0x44, 0x07, 0x0c, 0xff, 0xe9, 0x44, 0x79, 0xff, 0xff, 0x4c, 0x8a, 0xff, 0xfd, 0x4a, 0x89, 0xff, 0xff, 0x4e, 0x8f, 0xff, 0x87, 0x1f, 0x35, 0xff, 0x45, 0x06, 0x10, 0xff, 0xff, 0x4f, 0x92, 0xff, 0x7b, 0x21, 0x3f, 0xff, 0x12, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff, 0x22, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x54, 0x0b, 0x17, 0xff, 0xd5, 0x3c, 0x71, 0xff, 0xff, 0x51, 0x96, 0xff, 0xfd, 0x4d, 0x8e, 0xff, 0xfd, 0x48, 0x93, 0xff, 0xfd, 0x4c, 0x8d, 0xff, 0xff, 0xa8, 0x2a, 0xff, 0xd6, 0x82, 0x10, 0xff, 0xa3, 0x1e, 0x2f, 0xff, 0xa3, 0x1d, 0x2f, 0xff, 0xad, 0x26, 0x2c, 0xff, 0xd7, 0x6d, 0x16, 0xff, 0xec, 0x9f, 0x0a, 0xff, 0xec, 0xa9, 0x0a, 0xff, 0xec, 0xad, 0x0b, 0xff, 0xed, 0xae, 0x0a, 0xff, 0xee, 0xad, 0x0a, 0xff, 0xed, 0xac, 0x09, 0xff, 0xed, 0xac, 0x08, 0xff, 0xef, 0xa9, 0x07, 0xff,
0xf9, 0xfa, 0xf4, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf0, 0xf2, 0xf0, 0xff, 0xee, 0xf0, 0xef, 0xff, 0xee, 0xf0, 0xee, 0xff, 0xed, 0xf0, 0xee, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xf0, 0xf2, 0xef, 0xff, 0xf2, 0xf2, 0xef, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xf0, 0xff, 0xf2, 0xf4, 0xf0, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf1, 0xf3, 0xf1, 0xff, 0xf0, 0xf2, 0xf0, 0xff, 0xef, 0xf2, 0xf0, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xef, 0xf0, 0xef, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xf0, 0xf1, 0xef, 0xff, 0xf1, 0xf2, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf3, 0xf4, 0xef, 0xff, 0xf2, 0xf2, 0xee, 0xff, 0xf1, 0xf1, 0xec, 0xff, 0xf1, 0xf0, 0xec, 0xff, 0xf2, 0xf1, 0xed, 0xff, 0xf3, 0xf2, 0xee, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf7, 0xf5, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf3, 0xee, 0xea, 0xff, 0x58, 0x1e, 0x1d, 0xff, 0x40, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff, 0x56, 0x0a, 0x05, 0xff, 0xdc, 0x56, 0x2c, 0xff, 0x50, 0x11, 0x08, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x34, 0x01, 0x00, 0xff, 0x27, 0x00, 0x00, 0xff, 0xa0, 0x2b, 0x4a, 0xff, 0xff, 0x50, 0x8e, 0xff, 0xfd, 0x49, 0x85, 0xff, 0xfd, 0x48, 0x86, 0xff, 0xff, 0x47, 0x8b, 0xff, 0xe1, 0x61, 0x45, 0xff, 0xc0, 0x42, 0x46, 0xff, 0xff, 0x4c, 0x95, 0xff, 0xf6, 0x48, 0x88, 0xff, 0xca, 0x39, 0x6b, 0xff, 0xc4, 0x38, 0x69, 0xff, 0xc5, 0x38, 0x69, 0xff, 0xc6, 0x39, 0x6a, 0xff, 0xc6, 0x3a, 0x6c, 0xff, 0xc5, 0x3a, 0x6c, 0xff, 0xc4, 0x39, 0x6a, 0xff, 0xcc, 0x39, 0x6d, 0xff, 0xf7, 0x49, 0x8b, 0xff, 0xff, 0x4f, 0x94, 0xff, 0xfc, 0x4c, 0x8e, 0xff, 0xfd, 0x47, 0x92, 0xff, 0xfd, 0x52, 0x89, 0xff, 0xff, 0xae, 0x27, 0xff, 0xd3, 0x7b, 0x13, 0xff, 0xa4, 0x1c, 0x30, 0xff, 0xa1, 0x1d, 0x2d, 0xff, 0xaf, 0x28, 0x2b, 0xff, 0xec, 0x8d, 0x0f, 0xff, 0xdd, 0x87, 0x0c, 0xff, 0xaa, 0x3e, 0x1d, 0xff, 0xa2, 0x32, 0x24, 0xff, 0xa7, 0x36, 0x27, 0xff, 0xaa, 0x38, 0x27, 0xff, 0xab, 0x39, 0x27, 0xff, 0xaa, 0x39, 0x26, 0xff, 0xaa, 0x38, 0x23, 0xff, 0x84, 0x29, 0x12, 0xff,
0xfa, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf2, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xef, 0xf2, 0xef, 0xff, 0xed, 0xf0, 0xee, 0xff, 0xed, 0xef, 0xed, 0xff, 0xed, 0xef, 0xed, 0xff, 0xee, 0xf0, 0xee, 0xff, 0xef, 0xf1, 0xee, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf1, 0xf3, 0xee, 0xff, 0xf1, 0xf3, 0xee, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf2, 0xf3, 0xf1, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf1, 0xf3, 0xf1, 0xff, 0xf0, 0xf2, 0xf0, 0xff, 0xf0, 0xf2, 0xef, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xf0, 0xf1, 0xef, 0xff, 0xef, 0xf1, 0xef, 0xff, 0xf0, 0xf2, 0xef, 0xff, 0xf2, 0xf3, 0xf0, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf1, 0xf1, 0xec, 0xff, 0xf0, 0xef, 0xeb, 0xff, 0xf0, 0xf0, 0xeb, 0xff, 0xf1, 0xf1, 0xec, 0xff, 0xf2, 0xf2, 0xee, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf2, 0xf4, 0xf0, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0x9b, 0x98, 0xff, 0x3c, 0x00, 0x00, 0xff, 0x47, 0x03, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff, 0xa7, 0x35, 0x1d, 0xff, 0xa0, 0x38, 0x1e, 0xff, 0x27, 0x00, 0x00, 0xff, 0x34, 0x01, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x46, 0x09, 0x0f, 0xff, 0xf1, 0x47, 0x7e, 0xff, 0xff, 0x4b, 0x87, 0xff, 0xfd, 0x49, 0x84, 0xff, 0xfd, 0x47, 0x83, 0xff, 0xfc, 0x3f, 0x88, 0xff, 0xff, 0x94, 0x36, 0xff, 0xff, 0x73, 0x58, 0xff, 0xfc, 0x40, 0x8b, 0xff, 0xff, 0x48, 0x88, 0xff, 0xff, 0x4c, 0x8d, 0xff, 0xff, 0x4e, 0x8f, 0xff, 0xff, 0x4e, 0x91, 0xff, 0xff, 0x4f, 0x93, 0xff, 0xff, 0x4f, 0x95, 0xff, 0xff, 0x4f, 0x94, 0xff, 0xff, 0x4e, 0x94, 0xff, 0xff, 0x4d, 0x94, 0xff, 0xff, 0x4a, 0x90, 0xff, 0xfd, 0x49, 0x8e, 0xff, 0xfd, 0x44, 0x92, 0xff, 0xfd, 0x53, 0x84, 0xff, 0xff, 0xb7, 0x23, 0xff, 0xd2, 0x7a, 0x16, 0xff, 0xa3, 0x19, 0x30, 0xff, 0xa2, 0x1c, 0x2d, 0xff, 0xaf, 0x24, 0x2b, 0xff, 0xee, 0x7a, 0x1d, 0xff, 0xd0, 0x64, 0x19, 0xff, 0x90, 0x14, 0x26, 0xff, 0xa5, 0x1f, 0x2a, 0xff, 0xab, 0x27, 0x2b, 0xff, 0x99, 0x20, 0x2e, 0xff, 0x9e, 0x22, 0x2f, 0xff, 0x9f, 0x23, 0x30, 0xff, 0xa0, 0x23, 0x30, 0xff, 0x89, 0x1a, 0x23, 0xff, 0x3a, 0x00, 0x02, 0xff,
0xfa, 0xf9, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xef, 0xf1, 0xee, 0xff, 0xed, 0xef, 0xed, 0xff, 0xec, 0xee, 0xed, 0xff, 0xec, 0xef, 0xed, 0xff, 0xed, 0xef, 0xed, 0xff, 0xef, 0xf0, 0xed, 0xff, 0xf0, 0xf2, 0xed, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf1, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf0, 0xf3, 0xf0, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf0, 0xf3, 0xf0, 0xff, 0xf0, 0xf2, 0xf0, 0xff, 0xf0, 0xf2, 0xf0, 0xff, 0xf0, 0xf2, 0xef, 0xff, 0xf1, 0xf2, 0xef, 0xff, 0xf1, 0xf3, 0xef, 0xff, 0xf2, 0xf3, 0xf0, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf2, 0xee, 0xff, 0xf1, 0xf0, 0xec, 0xff, 0xf0, 0xef, 0xeb, 0xff, 0xf0, 0xef, 0xeb, 0xff, 0xf0, 0xf0, 0xec, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf2, 0xf4, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf6, 0xf5, 0xf4, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xfa, 0xf8, 0xf3, 0xff, 0xfe, 0xfc, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x75, 0x48, 0x46, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x44, 0x03, 0x00, 0xff, 0x4e, 0x06, 0x04, 0xff, 0xd8, 0x47, 0x30, 0xff, 0x4e, 0x0d, 0x08, 0xff, 0x2e, 0x00, 0x00, 0xff, 0x33, 0x01, 0x01, 0xff, 0x26, 0x00, 0x00, 0xff, 0x9a, 0x26, 0x44, 0xff, 0xff, 0x4c, 0x8b, 0xff, 0xfd, 0x48, 0x83, 0xff, 0xfe, 0x48, 0x83, 0xff, 0xfd, 0x47, 0x82, 0xff, 0xfd, 0x3f, 0x82, 0xff, 0xfc, 0xac, 0x22, 0xff, 0xf7, 0x58, 0x6a, 0xff, 0xf9, 0x34, 0x8b, 0xff, 0xfd, 0x3a, 0x89, 0xff, 0xfd, 0x3c, 0x8c, 0xff, 0xfe, 0x3d, 0x8e, 0xff, 0xfd, 0x3f, 0x90, 0xff, 0xfd, 0x3f, 0x92, 0xff, 0xfd, 0x3e, 0x93, 0xff, 0xfd, 0x3f, 0x91, 0xff, 0xfd, 0x3f, 0x90, 0xff, 0xfd, 0x40, 0x91, 0xff, 0xfd, 0x41, 0x92, 0xff, 0xfd, 0x3d, 0x95, 0xff, 0xfe, 0x50, 0x83, 0xff, 0xff, 0xb9, 0x1e, 0xff, 0xd3, 0x7b, 0x17, 0xff, 0xa7, 0x19, 0x34, 0xff, 0xa3, 0x1d, 0x2e, 0xff, 0xaa, 0x1f, 0x2d, 0xff, 0xee, 0x64, 0x2d, 0xff, 0xd6, 0x57, 0x26, 0xff, 0x95, 0x14, 0x27, 0xff, 0xb1, 0x25, 0x28, 0xff, 0xfb, 0x4e, 0x2d, 0xff, 0xd6, 0x3f, 0x2f, 0xff, 0x9c, 0x25, 0x2f, 0xff, 0xa0, 0x28, 0x2f, 0xff, 0xa3, 0x29, 0x31, 0xff, 0xa2, 0x28, 0x30, 0xff, 0x53, 0x0b, 0x0b, 0xff, 0x35, 0x00, 0x00, 0xff,
0xf9, 0xfa, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf0, 0xf1, 0xef, 0xff, 0xed, 0xef, 0xec, 0xff, 0xed, 0xee, 0xec, 0xff, 0xec, 0xee, 0xec, 0xff, 0xed, 0xef, 0xec, 0xff, 0xee, 0xf0, 0xec, 0xff, 0xef, 0xf1, 0xed, 0xff, 0xf1, 0xf2, 0xed, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf1, 0xf3, 0xee, 0xff, 0xf1, 0xf3, 0xef, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf1, 0xf4, 0xf1, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf1, 0xf3, 0xf1, 0xff, 0xf1, 0xf3, 0xf0, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf2, 0xf4, 0xf0, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf1, 0xf0, 0xec, 0xff, 0xf0, 0xef, 0xeb, 0xff, 0xf0, 0xef, 0xeb, 0xff, 0xf1, 0xf0, 0xec, 0xff, 0xf2, 0xf2, 0xee, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xee, 0xea, 0xe6, 0xff, 0x4f, 0x17, 0x16, 0xff, 0x41, 0x00, 0x00, 0xff, 0x3e, 0x01, 0x00, 0xff, 0x78, 0x17, 0x15, 0xff, 0xc4, 0x39, 0x33, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x32, 0x01, 0x01, 0xff, 0x2e, 0x00, 0x00, 0xff, 0x3d, 0x05, 0x09, 0xff, 0xe9, 0x40, 0x74, 0xff, 0xff, 0x48, 0x85, 0xff, 0xfd, 0x48, 0x82, 0xff, 0xfd, 0x47, 0x83, 0xff, 0xfd, 0x46, 0x82, 0xff, 0xfd, 0x3b, 0x83, 0xff, 0xfc, 0x92, 0x38, 0xff, 0xfb, 0xb0, 0x21, 0xff, 0xfb, 0x8e, 0x3b, 0xff, 0xfc, 0x8e, 0x3c, 0xff, 0xfc, 0x8c, 0x40, 0xff, 0xfc, 0x89, 0x45, 0xff, 0xfc, 0x88, 0x4a, 0xff, 0xfc, 0x86, 0x4b, 0xff, 0xfc, 0x7e, 0x4f, 0xff, 0xfc, 0x79, 0x53, 0xff, 0xfd, 0x79, 0x55, 0xff, 0xfd, 0x78, 0x59, 0xff, 0xfd, 0x76, 0x5c, 0xff, 0xfd, 0x7e, 0x59, 0xff, 0xff, 0xbf, 0x1e, 0xff, 0xd2, 0x77, 0x19, 0xff, 0xa3, 0x17, 0x33, 0xff, 0xa5, 0x1e, 0x30, 0xff, 0xa8, 0x1c, 0x2e, 0xff, 0xe7, 0x4e, 0x3a, 0xff, 0xd9, 0x4f, 0x34, 0xff, 0x99, 0x1a, 0x29, 0xff, 0xb5, 0x28, 0x28, 0xff, 0xfb, 0x4c, 0x2d, 0xff, 0xda, 0x40, 0x30, 0xff, 0xa0, 0x26, 0x30, 0xff, 0x9f, 0x27, 0x2f, 0xff, 0xa2, 0x29, 0x30, 0xff, 0xa6, 0x2a, 0x33, 0xff, 0x7d, 0x1c, 0x20, 0xff, 0x38, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
0xfa, 0xfa, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf1, 0xf1, 0xef, 0xff, 0xee, 0xef, 0xed, 0xff, 0xed, 0xee, 0xec, 0xff, 0xec, 0xee, 0xec, 0xff, 0xed, 0xef, 0xec, 0xff, 0xed, 0xef, 0xec, 0xff, 0xef, 0xf0, 0xec, 0xff, 0xf0, 0xf1, 0xed, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf1, 0xf3, 0xef, 0xff, 0xf1, 0xf4, 0xf0, 0xff, 0xf2, 0xf4, 0xf0, 0xff, 0xf2, 0xf4, 0xf0, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf2, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf1, 0xf1, 0xed, 0xff, 0xf0, 0xf0, 0xec, 0xff, 0xf0, 0xf0, 0xec, 0xff, 0xf1, 0xf1, 0xec, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf3, 0xf3, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xc7, 0xc4, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x42, 0x02, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff, 0x9f, 0x25, 0x30, 0xff, 0x9b, 0x25, 0x32, 0xff, 0x27, 0x00, 0x00, 0xff, 0x31, 0x00, 0x02, 0xff, 0x25, 0x00, 0x00, 0xff, 0x81, 0x1e, 0x34, 0xff, 0xff, 0x4a, 0x87, 0xff, 0xfd, 0x47, 0x81, 0xff, 0xfd, 0x47, 0x81, 0xff, 0xfd, 0x46, 0x81, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x41, 0x7e, 0xff, 0xfd, 0x42, 0x79, 0xff, 0xfd, 0x79, 0x50, 0xff, 0xfd, 0x8c, 0x43, 0xff, 0xfd, 0x8e, 0x44, 0xff, 0xfc, 0x90, 0x45, 0xff, 0xfc, 0x90, 0x44, 0xff, 0xfc, 0x92, 0x41, 0xff, 0xfc, 0x94, 0x3d, 0xff, 0xfd, 0x95, 0x3b, 0xff, 0xfd, 0x96, 0x39, 0xff, 0xfc, 0x99, 0x39, 0xff, 0xfd, 0x9f, 0x37, 0xff, 0xfd, 0xa4, 0x33, 0xff, 0xff, 0xa5, 0x37, 0xff, 0xd7, 0x60, 0x37, 0xff, 0xa6, 0x1a, 0x33, 0xff, 0xa6, 0x1e, 0x30, 0xff, 0xa4, 0x1b, 0x2e, 0xff, 0xdd, 0x3b, 0x3c, 0xff, 0xe2, 0x48, 0x3c, 0xff, 0x9b, 0x20, 0x2c, 0xff, 0x9a, 0x1f, 0x2b, 0xff, 0xe7, 0x43, 0x2c, 0xff, 0xd9, 0x3e, 0x30, 0xff, 0x9d, 0x25, 0x30, 0xff, 0x9f, 0x26, 0x30, 0xff, 0xa2, 0x29, 0x32, 0xff, 0xa4, 0x2a, 0x33, 0xff, 0xa4, 0x29, 0x32, 0xff, 0x54, 0x0b, 0x0b, 0xff, 0x3c, 0x01, 0x00, 0xff, 0x40, 0x01, 0x00, 0xff,
0xfa, 0xfa, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf2, 0xf2, 0xf0, 0xff, 0xef, 0xf0, 0xee, 0xff, 0xee, 0xef, 0xed, 0xff, 0xed, 0xef, 0xec, 0xff, 0xed, 0xef, 0xec, 0xff, 0xee, 0xf0, 0xed, 0xff, 0xef, 0xf0, 0xec, 0xff, 0xf0, 0xf1, 0xed, 0xff, 0xf1, 0xf2, 0xed, 0xff, 0xf1, 0xf3, 0xee, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf2, 0xf5, 0xf1, 0xff, 0xf2, 0xf5, 0xf1, 0xff, 0xf2, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf1, 0xf1, 0xed, 0xff, 0xf1, 0xf1, 0xed, 0xff, 0xf1, 0xf1, 0xed, 0xff, 0xf2, 0xf2, 0xee, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf5, 0xf4, 0xf1, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfa, 0xfa, 0xf4, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xb4, 0xb2, 0xff, 0x38, 0x00, 0x00, 0xff, 0x42, 0x01, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff, 0xb4, 0x2d, 0x4c, 0xff, 0x7d, 0x1c, 0x2f, 0xff, 0x26, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x01, 0xff, 0x29, 0x00, 0x00, 0xff, 0xc9, 0x36, 0x61, 0xff, 0xff, 0x48, 0x83, 0xff, 0xfd, 0x46, 0x7e, 0xff, 0xfd, 0x46, 0x7e, 0xff, 0xfd, 0x46, 0x7f, 0xff, 0xfd, 0x46, 0x7f, 0xff, 0xfd, 0x44, 0x7e, 0xff, 0xfd, 0x42, 0x7e, 0xff, 0xfd, 0x3b, 0x82, 0xff, 0xfd, 0x3b, 0x84, 0xff, 0xfd, 0x3d, 0x86, 0xff, 0xfd, 0x3e, 0x87, 0xff, 0xfd, 0x3d, 0x87, 0xff, 0xfd, 0x3a, 0x87, 0xff, 0xfc, 0x3a, 0x87, 0xff, 0xfd, 0x3c, 0x88, 0xff, 0xfd, 0x3d, 0x87, 0xff, 0xfd, 0x3c, 0x85, 0xff, 0xfd, 0x3b, 0x84, 0xff, 0xff, 0x3c, 0x87, 0xff, 0xe9, 0x2c, 0x70, 0xff, 0xa9, 0x19, 0x36, 0xff, 0xa7, 0x21, 0x31, 0xff, 0xa5, 0x1d, 0x2f, 0xff, 0xd0, 0x2e, 0x3c, 0xff, 0xeb, 0x43, 0x43, 0xff, 0xa2, 0x23, 0x2d, 0xff, 0x9c, 0x23, 0x2d, 0xff, 0x9e, 0x23, 0x2d, 0xff, 0xa7, 0x27, 0x2f, 0xff, 0xa0, 0x25, 0x31, 0xff, 0x9f, 0x27, 0x31, 0xff, 0xa1, 0x28, 0x32, 0xff, 0xa3, 0x29, 0x33, 0xff, 0xa7, 0x2a, 0x35, 0xff, 0x90, 0x21, 0x28, 0xff, 0x40, 0x03, 0x01, 0xff, 0x42, 0x03, 0x00, 0xff, 0x41, 0x02, 0x01, 0xff,
0xfa, 0xfa, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf2, 0xf3, 0xf1, 0xff, 0xf0, 0xf2, 0xef, 0xff, 0xef, 0xf1, 0xee, 0xff, 0xef, 0xf1, 0xee, 0xff, 0xef, 0xf1, 0xed, 0xff, 0xef, 0xf1, 0xed, 0xff, 0xef, 0xf1, 0xed, 0xff, 0xf0, 0xf1, 0xed, 0xff, 0xf1, 0xf2, 0xed, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf3, 0xf4, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf2, 0xf5, 0xf1, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf3, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf7, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf2, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf2, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf2, 0xee, 0xff, 0xf2, 0xf2, 0xee, 0xff, 0xf2, 0xf3, 0xef, 0xff, 0xf2, 0xf4, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf3, 0xf4, 0xf1, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf7, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xb9, 0xb5, 0xff, 0x38, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff, 0xb6, 0x2d, 0x55, 0xff, 0x71, 0x18, 0x2d, 0xff, 0x25, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff, 0x4f, 0x0d, 0x16, 0xff, 0xf9, 0x45, 0x7c, 0xff, 0xff, 0x45, 0x7d, 0xff, 0xfd, 0x44, 0x7c, 0xff, 0xfd, 0x45, 0x7d, 0xff, 0xfd, 0x46, 0x7d, 0xff, 0xfd, 0x46, 0x7e, 0xff, 0xfd, 0x44, 0x7e, 0xff, 0xfd, 0x42, 0x7e, 0xff, 0xfd, 0x41, 0x7d, 0xff, 0xfd, 0x42, 0x7e, 0xff, 0xfd, 0x44, 0x80, 0xff, 0xfd, 0x45, 0x81, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x44, 0x80, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x44, 0x80, 0xff, 0xfd, 0x44, 0x7f, 0xff, 0xfd, 0x43, 0x7f, 0xff, 0xfc, 0x40, 0x7b, 0xff, 0xb9, 0x23, 0x40, 0xff, 0xa4, 0x1f, 0x30, 0xff, 0xa5, 0x1f, 0x31, 0xff, 0xc2, 0x28, 0x39, 0xff, 0xf3, 0x40, 0x48, 0xff, 0xac, 0x25, 0x31, 0xff, 0x9a, 0x22, 0x2c, 0xff, 0x9f, 0x25, 0x2f, 0xff, 0xa0, 0x26, 0x30, 0xff, 0xa0, 0x26, 0x30, 0xff, 0xa1, 0x27, 0x31, 0xff, 0xa1, 0x28, 0x32, 0xff, 0xa3, 0x29, 0x33, 0xff, 0xa4, 0x29, 0x34, 0xff, 0xaa, 0x2b, 0x37, 0xff, 0x77, 0x17, 0x1c, 0xff, 0x3c, 0x01, 0x00, 0xff, 0x43, 0x04, 0x01, 0xff, 0x43, 0x02, 0x01, 0xff,
0xfa, 0xfa, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf1, 0xf4, 0xf1, 0xff, 0xf1, 0xf4, 0xf1, 0xff, 0xf0, 0xf3, 0xf0, 0xff, 0xf1, 0xf3, 0xef, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf1, 0xf2, 0xee, 0xff, 0xf1, 0xf2, 0xed, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf3, 0xf4, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf3, 0xf6, 0xf3, 0xff, 0xf3, 0xf6, 0xf3, 0xff, 0xf4, 0xf7, 0xf3, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf4, 0xf7, 0xf3, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf1, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf2, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf3, 0xf4, 0xf2, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf4, 0xf4, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf6, 0xf4, 0xf3, 0xff, 0xf6, 0xf4, 0xf3, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xfb, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xe4, 0xdb, 0xd7, 0xff, 0x41, 0x09, 0x09, 0xff, 0x3b, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff, 0xac, 0x26, 0x4f, 0xff, 0x7d, 0x18, 0x35, 0xff, 0x1d, 0x00, 0x00, 0xff, 0x21, 0x00, 0x00, 0xff, 0x91, 0x21, 0x3b, 0xff, 0xff, 0x47, 0x82, 0xff, 0xfd, 0x43, 0x79, 0xff, 0xfd, 0x43, 0x7a, 0xff, 0xfd, 0x44, 0x7c, 0xff, 0xfd, 0x43, 0x7d, 0xff, 0xfd, 0x44, 0x7e, 0xff, 0xfd, 0x43, 0x7d, 0xff, 0xfd, 0x42, 0x7d, 0xff, 0xfd, 0x43, 0x7d, 0xff, 0xfc, 0x44, 0x7d, 0xff, 0xfd, 0x45, 0x7f, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x46, 0x80, 0xff, 0xfd, 0x46, 0x80, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x44, 0x7f, 0xff, 0xfd, 0x42, 0x7f, 0xff, 0xfd, 0x42, 0x7e, 0xff, 0xff, 0x43, 0x81, 0xff, 0xdf, 0x32, 0x60, 0xff, 0xa5, 0x1e, 0x31, 0xff, 0xa6, 0x20, 0x33, 0xff, 0xb3, 0x22, 0x36, 0xff, 0xf4, 0x3f, 0x4b, 0xff, 0xbf, 0x2c, 0x39, 0xff, 0x9a, 0x21, 0x2d, 0xff, 0x9f, 0x25, 0x2f, 0xff, 0xa0, 0x26, 0x30, 0xff, 0xa1, 0x27, 0x31, 0xff, 0xa2, 0x27, 0x32, 0xff, 0xa3, 0x28, 0x32, 0xff, 0xa3, 0x2a, 0x33, 0xff, 0xa3, 0x2a, 0x34, 0xff, 0xa4, 0x2a, 0x34, 0xff, 0xab, 0x2b, 0x36, 0xff, 0x66, 0x11, 0x13, 0xff, 0x3c, 0x02, 0x00, 0xff, 0x42, 0x04, 0x02, 0xff, 0x42, 0x02, 0x01, 0xff,
0xfa, 0xfa, 0xf5, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf3, 0xf6, 0xf3, 0xff, 0xf2, 0xf6, 0xf3, 0xff, 0xf2, 0xf6, 0xf3, 0xff, 0xf2, 0xf6, 0xf2, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf2, 0xf4, 0xef, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf2, 0xf3, 0xee, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf3, 0xf4, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf2, 0xf5, 0xf1, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf5, 0xf8, 0xf3, 0xff, 0xf4, 0xf7, 0xf3, 0xff, 0xf4, 0xf7, 0xf3, 0xff, 0xf3, 0xf6, 0xf2, 0xff, 0xf2, 0xf5, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf0, 0xf4, 0xf1, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf2, 0xf5, 0xf3, 0xff, 0xf3, 0xf5, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf4, 0xf1, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf3, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf6, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf8, 0xf8, 0xf2, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfd, 0xfc, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0x54, 0x53, 0xff, 0x2f, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff, 0x79, 0x14, 0x2b, 0xff, 0xca, 0x28, 0x61, 0xff, 0x24, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff, 0xcd, 0x34, 0x5d, 0xff, 0xff, 0x44, 0x7c, 0xff, 0xfd, 0x43, 0x76, 0xff, 0xfd, 0x44, 0x77, 0xff, 0xfd, 0x44, 0x79, 0xff, 0xfd, 0x43, 0x7c, 0xff, 0xfd, 0x42, 0x7e, 0xff, 0xfd, 0x42, 0x7d, 0xff, 0xfd, 0x43, 0x7d, 0xff, 0xfd, 0x45, 0x7c, 0xff, 0xfd, 0x46, 0x7d, 0xff, 0xfd, 0x46, 0x7f, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x46, 0x81, 0xff, 0xfd, 0x46, 0x80, 0xff, 0xfd, 0x45, 0x80, 0xff, 0xfd, 0x44, 0x7f, 0xff, 0xfd, 0x42, 0x7d, 0xff, 0xfe, 0x42, 0x7e, 0xff, 0xfd, 0x40, 0x7c, 0xff, 0xbb, 0x25, 0x41, 0xff, 0xa5, 0x1f, 0x30, 0xff, 0xa7, 0x1e, 0x32, 0xff, 0xe4, 0x3c, 0x48, 0xff, 0xd9, 0x38, 0x44, 0xff, 0x9e, 0x21, 0x31, 0xff, 0xa1, 0x25, 0x31, 0xff, 0xa0, 0x27, 0x32, 0xff, 0xa1, 0x28, 0x32, 0xff, 0xa1, 0x28, 0x33, 0xff, 0xa1, 0x28, 0x32, 0xff, 0xa3, 0x29, 0x33, 0xff, 0xa4, 0x2a, 0x34, 0xff, 0xa3, 0x2b, 0x34, 0xff, 0xa4, 0x2b, 0x35, 0xff, 0xaa, 0x2c, 0x36, 0xff, 0x61, 0x0f, 0x11, 0xff, 0x3a, 0x01, 0x00, 0xff, 0x41, 0x04, 0x01, 0xff, 0x41, 0x02, 0x01, 0xff,
0xfa, 0xfa, 0xf5, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf3, 0xf6, 0xf4, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf4, 0xf7, 0xf5, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf4, 0xf4, 0xf0, 0xff, 0xf4, 0xf4, 0xee, 0xff, 0xf3, 0xf3, 0xee, 0xff, 0xf3, 0xf3, 0xee, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf3, 0xf5, 0xf1, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf4, 0xf7, 0xf3, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf8, 0xf4, 0xff, 0xf5, 0xf8, 0xf4, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf2, 0xf4, 0xf1, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf1, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf4, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xed, 0xdc, 0xdd, 0xff, 0x58, 0x14, 0x1d, 0xff, 0x26, 0x00, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff, 0xa9, 0x20, 0x4d, 0xff, 0xc2, 0x24, 0x5d, 0xff, 0x58, 0x0d, 0x1f, 0xff, 0xef, 0x3e, 0x6f, 0xff, 0xff, 0x43, 0x77, 0xff, 0xfd, 0x43, 0x75, 0xff, 0xfd, 0x44, 0x77, 0xff, 0xfd, 0x45, 0x78, 0xff, 0xfd, 0x44, 0x79, 0xff, 0xfd, 0x42, 0x79, 0xff, 0xfd, 0x43, 0x7a, 0xff, 0xfd, 0x44, 0x7c, 0xff, 0xfd, 0x45, 0x7c, 0xff, 0xfd, 0x46, 0x7d, 0xff, 0xfd, 0x46, 0x7d, 0xff, 0xfd, 0x45, 0x7d, 0xff, 0xfd, 0x45, 0x7e, 0xff, 0xfd, 0x46, 0x80, 0xff, 0xfd, 0x46, 0x80, 0xff, 0xfd, 0x44, 0x7e, 0xff, 0xfd, 0x41, 0x7d, 0xff, 0xff, 0x42, 0x7e, 0xff, 0xe9, 0x37, 0x68, 0xff, 0xa7, 0x1e, 0x31, 0xff, 0xa4, 0x1d, 0x2f, 0xff, 0xcb, 0x30, 0x40, 0xff, 0xef, 0x46, 0x4e, 0xff, 0xa3, 0x22, 0x32, 0xff, 0x9f, 0x24, 0x32, 0xff, 0xa2, 0x27, 0x33, 0xff, 0xa2, 0x28, 0x35, 0xff, 0xa3, 0x2a, 0x35, 0xff, 0xa4, 0x2a, 0x35, 0xff, 0xa3, 0x29, 0x33, 0xff, 0xa3, 0x29, 0x33, 0xff, 0xa3, 0x29, 0x33, 0xff, 0xa3, 0x29, 0x33, 0xff, 0xa3, 0x2a, 0x34, 0xff, 0xaa, 0x2b, 0x36, 0xff, 0x6c, 0x13, 0x16, 0xff, 0x38, 0x02, 0x00, 0xff, 0x40, 0x04, 0x02, 0xff, 0x41, 0x02, 0x01, 0xff,
0xf9, 0xfa, 0xf5, 0xff, 0xf8, 0xf9, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf5, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf4, 0xf7, 0xf5, 0xff, 0xf5, 0xf7, 0xf5, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf5, 0xf6, 0xf1, 0xff, 0xf5, 0xf5, 0xf0, 0xff, 0xf4, 0xf4, 0xef, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf4, 0xf3, 0xef, 0xff, 0xf3, 0xf3, 0xef, 0xff, 0xf3, 0xf4, 0xf0, 0xff, 0xf4, 0xf5, 0xf1, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf7, 0xf9, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf3, 0xf5, 0xf2, 0xff, 0xf2, 0xf4, 0xf2, 0xff, 0xf2, 0xf4, 0xf2, 0xff, 0xf2, 0xf4, 0xf2, 0xff, 0xf4, 0xf5, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf5, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf5, 0xff, 0xf5, 0xf6, 0xf5, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf5, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf5, 0xf4, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xfc, 0xfa, 0xf5, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xdc, 0xc4, 0xc6, 0xff, 0xcd, 0x34, 0x6e, 0xff, 0x7c, 0x16, 0x36, 0xff, 0x1f, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff, 0x79, 0x14, 0x35, 0xff, 0xd5, 0x28, 0x60, 0xff, 0xfe, 0x3f, 0x72, 0xff, 0xfd, 0x41, 0x74, 0xff, 0xfd, 0x42, 0x75, 0xff, 0xfd, 0x43, 0x76, 0xff, 0xfd, 0x43, 0x76, 0xff, 0xfd, 0x43, 0x76, 0xff, 0xfd, 0x43, 0x76, 0xff, 0xfd, 0x44, 0x78, 0xff, 0xfd, 0x44, 0x7b, 0xff, 0xfd, 0x45, 0x7b, 0xff, 0xfd, 0x46, 0x7a, 0xff, 0xfd, 0x46, 0x79, 0xff, 0xfd, 0x45, 0x7a, 0xff, 0xfd, 0x45, 0x7b, 0xff, 0xfc, 0x45, 0x7c, 0xff, 0xfd, 0x44, 0x7d, 0xff, 0xfd, 0x43, 0x7c, 0xff, 0xfd, 0x41, 0x7a, 0xff, 0xff, 0x40, 0x7b, 0xff, 0xc5, 0x29, 0x4a, 0xff, 0x9f, 0x1d, 0x2c, 0xff, 0xb1, 0x21, 0x32, 0xff, 0xf4, 0x48, 0x50, 0xff, 0xb8, 0x2e, 0x3a, 0xff, 0x9b, 0x22, 0x2f, 0xff, 0xa1, 0x26, 0x32, 0xff, 0xa1, 0x28, 0x33, 0xff, 0xa2, 0x29, 0x36, 0xff, 0xa4, 0x2a, 0x36, 0xff, 0xa5, 0x2b, 0x35, 0xff, 0xa3, 0x28, 0x32, 0xff, 0xa2, 0x24, 0x2e, 0xff, 0xa2, 0x24, 0x2e, 0xff, 0xa1, 0x26, 0x30, 0xff, 0xa1, 0x26, 0x30, 0xff, 0xa6, 0x25, 0x30, 0xff, 0x74, 0x12, 0x13, 0xff, 0x37, 0x00, 0x00, 0xff, 0x3f, 0x02, 0x01, 0xff, 0x41, 0x01, 0x00, 0xff,
0xfa, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf2, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf6, 0xf5, 0xf0, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf5, 0xf4, 0xef, 0xff, 0xf5, 0xf4, 0xef, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xf5, 0xf5, 0xf1, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf8, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf9, 0xf5, 0xff, 0xf9, 0xf9, 0xf5, 0xff, 0xf9, 0xf9, 0xf5, 0xff, 0xf8, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf4, 0xf5, 0xf2, 0xff, 0xf5, 0xf5, 0xf2, 0xff, 0xf5, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf5, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf6, 0xf4, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf5, 0xf6, 0xf4, 0xff, 0xf4, 0xf6, 0xf3, 0xff, 0xf5, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf8, 0xf7, 0xf3, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfd, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x61, 0x5c, 0xff, 0x4d, 0x00, 0x09, 0xff, 0xc6, 0x2f, 0x67, 0xff, 0xba, 0x2a, 0x62, 0xff, 0x42, 0x0a, 0x16, 0xff, 0x00, 0x00, 0x00, 0xff, 0x93, 0x21, 0x3d, 0xff, 0xff, 0x41, 0x76, 0xff, 0xfd, 0x3f, 0x71, 0xff, 0xfd, 0x40, 0x72, 0xff, 0xfd, 0x41, 0x73, 0xff, 0xfd, 0x42, 0x74, 0xff, 0xfd, 0x42, 0x74, 0xff, 0xfd, 0x44, 0x75, 0xff, 0xfd, 0x44, 0x77, 0xff, 0xfd, 0x45, 0x7a, 0xff, 0xfd, 0x46, 0x7a, 0xff, 0xfd, 0x46, 0x78, 0xff, 0xfd, 0x45, 0x77, 0xff, 0xfd, 0x44, 0x77, 0xff, 0xfd, 0x44, 0x79, 0xff, 0xfd, 0x44, 0x7a, 0xff, 0xfd, 0x43, 0x7a, 0xff, 0xfd, 0x40, 0x78, 0xff, 0xff, 0x3f, 0x78, 0xff, 0xf4, 0x37, 0x6e, 0xff, 0xa9, 0x20, 0x33, 0xff, 0x9d, 0x1d, 0x2b, 0xff, 0xd8, 0x33, 0x3c, 0xff, 0xde, 0x3c, 0x40, 0xff, 0x9b, 0x22, 0x2c, 0xff, 0x9f, 0x24, 0x30, 0xff, 0xa0, 0x26, 0x31, 0xff, 0xa1, 0x27, 0x32, 0xff, 0xa1, 0x28, 0x33, 0xff, 0xa3, 0x29, 0x34, 0xff, 0xa3, 0x27, 0x32, 0xff, 0xa8, 0x3b, 0x44, 0xff, 0xaf, 0x54, 0x5c, 0xff, 0xae, 0x4e, 0x55, 0xff, 0xaa, 0x41, 0x49, 0xff, 0xac, 0x41, 0x4a, 0xff, 0xa4, 0x44, 0x49, 0xff, 0x85, 0x32, 0x2f, 0xff, 0x65, 0x32, 0x30, 0xff, 0x43, 0x07, 0x06, 0xff, 0x40, 0x00, 0x00, 0xff,
0xfb, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf6, 0xf7, 0xf4, 0xff, 0xf6, 0xf7, 0xf5, 0xff, 0xf7, 0xf7, 0xf4, 0xff, 0xf7, 0xf8, 0xf4, 0xff, 0xf8, 0xf8, 0xf4, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf7, 0xf2, 0xff, 0xf8, 0xf7, 0xf1, 0xff, 0xf7, 0xf7, 0xf1, 0xff, 0xf7, 0xf6, 0xf1, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xf9, 0xfa, 0xf5, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf7, 0xf7, 0xf2, 0xff, 0xf6, 0xf7, 0xf2, 0xff, 0xf6, 0xf6, 0xf2, 0xff, 0xf7, 0xf7, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf9, 0xf5, 0xff, 0xf9, 0xf8, 0xf4, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xf9, 0xf9, 0xf4, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf7, 0xf8, 0xf3, 0xff, 0xf8, 0xf8, 0xf3, 0xff, 0xf9, 0xf8, 0xf2, 0xff, 0xf9, 0xf9, 0xf3, 0xff, 0xfa, 0xf9, 0xf4, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xf5, 0xf2, 0xff, 0x59, 0x24, 0x23, 0xff, 0x37, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff, 0x84, 0x18, 0x35, 0xff, 0xae, 0x20, 0x4a, 0xff, 0x24, 0x00, 0x00, 0xff, 0xb9, 0x2c, 0x4e, 0xff, 0xff, 0x3f, 0x73, 0xff, 0xfd, 0x3d, 0x6d, 0xff, 0xfd, 0x3e, 0x6e, 0xff, 0xfd, 0x3f, 0x6e, 0xff, 0xfd, 0x40, 0x70, 0xff, 0xfd, 0x41, 0x71, 0xff, 0xfd, 0x42, 0x73, 0xff, 0xfd, 0x43, 0x75, 0xff, 0xfd, 0x44, 0x77, 0xff, 0xfd, 0x45, 0x77, 0xff, 0xfd, 0x45, 0x76, 0xff, 0xfd, 0x44, 0x74, 0xff, 0xfd, 0x43, 0x74, 0xff, 0xfd, 0x43, 0x75, 0xff, 0xfd, 0x42, 0x76, 0xff, 0xfd, 0x41, 0x76, 0xff, 0xfd, 0x3f, 0x73, 0xff, 0xff, 0x3e, 0x76, 0xff, 0xd7, 0x2d, 0x55, 0xff, 0x9d, 0x1e, 0x2b, 0xff, 0xab, 0x23, 0x2f, 0xff, 0xf3, 0x45, 0x42, 0xff, 0xb3, 0x29, 0x30, 0xff, 0x9b, 0x21, 0x2c, 0xff, 0x9e, 0x24, 0x2e, 0xff, 0x9e, 0x25, 0x2f, 0xff, 0x9f, 0x26, 0x30, 0xff, 0xa0, 0x26, 0x30, 0xff, 0xa2, 0x27, 0x31, 0xff, 0xa0, 0x22, 0x2c, 0xff, 0xae, 0x51, 0x58, 0xff, 0xc2, 0x8f, 0x94, 0xff, 0xc2, 0x8d, 0x91, 0xff, 0xbc, 0x7a, 0x80, 0xff, 0xbe, 0x7c, 0x81, 0xff, 0xa6, 0x6f, 0x6e, 0xff, 0xaa, 0x79, 0x77, 0xff, 0xa8, 0x84, 0x83, 0xff, 0x47, 0x0e, 0x0e, 0xff, 0x3e, 0x00, 0x00, 0xff,
0xfc, 0xfd, 0xf8, 0xff, 0xfd, 0xfc, 0xf9, 0xff, 0xfc, 0xfc, 0xf8, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfa, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfb, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfb, 0xfa, 0xf7, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfb, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfa, 0xfa, 0xf5, 0xff, 0xfa, 0xf9, 0xf5, 0xff, 0xf9, 0xf9, 0xf5, 0xff, 0xfa, 0xfa, 0xf6, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfb, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf7, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xfc, 0xfc, 0xf7, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfc, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfc, 0xfb, 0xf5, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfc, 0xfb, 0xf6, 0xff, 0xfd, 0xfb, 0xf6, 0xff, 0xfd, 0xfc, 0xf7, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xc3, 0xc0, 0xff, 0x3d, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff, 0xa1, 0x10, 0x29, 0xff, 0xb1, 0x13, 0x31, 0xff, 0xe9, 0x37, 0x61, 0xff, 0xff, 0x3e, 0x6e, 0xff, 0xfe, 0x3c, 0x6b, 0xff, 0xfe, 0x3c, 0x6b, 0xff, 0xfd, 0x3d, 0x6b, 0xff, 0xfd, 0x3e, 0x6b, 0xff, 0xfd, 0x3f, 0x6b, 0xff, 0xfd, 0x41, 0x6d, 0xff, 0xfd, 0x42, 0x6f, 0xff, 0xfd, 0x41, 0x71, 0xff, 0xfe, 0x42, 0x72, 0xff, 0xfd, 0x43, 0x71, 0xff, 0xfd, 0x42, 0x70, 0xff, 0xfd, 0x42, 0x70, 0xff, 0xfe, 0x42, 0x71, 0xff, 0xfd, 0x41, 0x73, 0xff, 0xfd, 0x40, 0x72, 0xff, 0xfe, 0x3f, 0x71, 0xff, 0xfd, 0x3c, 0x6f, 0xff, 0xb3, 0x25, 0x39, 0xff, 0x9a, 0x1d, 0x29, 0xff, 0xca, 0x31, 0x34, 0xff, 0xe9, 0x44, 0x3b, 0xff, 0x9e, 0x1f, 0x29, 0xff, 0x9d, 0x21, 0x2b, 0xff, 0x9d, 0x22, 0x2c, 0xff, 0x9d, 0x22, 0x2d, 0xff, 0x9e, 0x23, 0x2d, 0xff, 0xa0, 0x25, 0x2e, 0xff, 0xa2, 0x25, 0x2e, 0xff, 0xa2, 0x24, 0x2d, 0xff, 0xa3, 0x2a, 0x34, 0xff, 0xa5, 0x31, 0x3b, 0xff, 0xa3, 0x31, 0x39, 0xff, 0xa4, 0x2d, 0x36, 0xff, 0x95, 0x25, 0x2b, 0xff, 0x77, 0x20, 0x1b, 0xff, 0x79, 0x22, 0x1f, 0xff, 0x7a, 0x1f, 0x1b, 0xff, 0x51, 0x09, 0x07, 0xff, 0x3d, 0x00, 0x00, 0xff,
0xfe, 0xff, 0xfc, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfd, 0xfd, 0xfa, 0xff, 0xfe, 0xfd, 0xf8, 0xff, 0xfe, 0xfc, 0xf8, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfe, 0xfd, 0xf8, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfd, 0xfa, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfd, 0xfa, 0xff, 0xfe, 0xfd, 0xf8, 0xff, 0xfd, 0xfd, 0xf8, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfd, 0xfa, 0xff, 0xfe, 0xfd, 0xfa, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xff, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfc, 0xf8, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfc, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfb, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xf9, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfe, 0xfe, 0xfa, 0xff, 0xfd, 0xfd, 0xf9, 0xff, 0xfe, 0xfd, 0xf9, 0xff, 0xfe, 0xfe, 0xfc, 0xff, 0xfe, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9d, 0x7d, 0x7b, 0xff, 0x37, 0x00, 0x00, 0xff, 0x43, 0x01, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff, 0x54, 0x05, 0x09, 0xff, 0xcf, 0x1c, 0x40, 0xff, 0xca, 0x1a, 0x3f, 0xff, 0xfb, 0x3b, 0x68, 0xff, 0xff, 0x3c, 0x6b, 0xff, 0xfe, 0x3b, 0x68, 0xff, 0xfe, 0x3a, 0x68, 0xff, 0xfe, 0x3b, 0x69, 0xff, 0xfe, 0x3c, 0x69, 0xff, 0xfe, 0x3d, 0x68, 0xff, 0xfe, 0x3e, 0x68, 0xff, 0xfe, 0x3e, 0x69, 0xff, 0xfe, 0x3d, 0x6c, 0xff, 0xfe, 0x3f, 0x6e, 0xff, 0xfe, 0x3f, 0x6e, 0xff, 0xfe, 0x3f, 0x6c, 0xff, 0xfe, 0x3f, 0x6c, 0xff, 0xfe, 0x3f, 0x6e, 0xff, 0xfd, 0x3f, 0x70, 0xff, 0xfd, 0x3f, 0x71, 0xff, 0xff, 0x40, 0x74, 0xff, 0xe8, 0x36, 0x5f, 0xff, 0x9e, 0x1f, 0x2a, 0xff, 0xa0, 0x1e, 0x2b, 0xff, 0xea, 0x42, 0x38, 0xff, 0xc7, 0x33, 0x2e, 0xff, 0x9b, 0x1e, 0x27, 0xff, 0x9d, 0x20, 0x2a, 0xff, 0x9d, 0x20, 0x2a, 0xff, 0x9d, 0x20, 0x2b, 0xff, 0x9e, 0x22, 0x2c, 0xff, 0xa0, 0x23, 0x2d, 0xff, 0xa1, 0x23, 0x2d, 0xff, 0xa1, 0x23, 0x2d, 0xff, 0xa0, 0x20, 0x2b, 0xff, 0x9f, 0x1e, 0x28, 0xff, 0x9f, 0x1e, 0x27, 0xff, 0xa1, 0x1f, 0x28, 0xff, 0x7f, 0x12, 0x13, 0xff, 0x66, 0x09, 0x04, 0xff, 0x69, 0x0a, 0x05, 0xff, 0x6b, 0x0b, 0x07, 0xff, 0x68, 0x0c, 0x08, 0xff, 0x46, 0x03, 0x02, 0xff,
};
const lv_image_dsc_t img_app_pos = {
.header.cf = LV_COLOR_FORMAT_ARGB8888,
.header.magic = LV_IMAGE_HEADER_MAGIC,
.header.w = 112,
.header.h = 112,
.data_size = 12544 * 4,
.data = output_112x112_map,
};
@@ -0,0 +1,10 @@
#ifndef VOLC_LVGL_SOURCE_H__
#define VOLC_LVGL_SOURCE_H__
#include "lvgl.h"
extern lv_font_t echoear_font_16;
extern lv_image_dsc_t img_app_pos;
#endif
@@ -0,0 +1,60 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include "volc_hal_file.h"
#include "volc_hal.h"
#include "volc_osal.h"
#include "driver/gpio.h"
#include "esp_mac.h"
#include <stdio.h>
#include "audio_processor.h"
#include "basic_board.h"
#define DEVICE_NAME_PREFIX "esp32_"
volc_hal_context_t* global_context = NULL;
basic_board_periph_t global_periph = {0};
static void __gmf_audio_init()
{
audio_manager_config_t config = DEFAULT_AUDIO_MANAGER_CONFIG();
basic_board_init(&global_periph);
config.play_dev = global_periph.play_dev;
config.rec_dev = global_periph.rec_dev;
strcpy(config.mic_layout, global_periph.mic_layout);
config.board_sample_rate = global_periph.sample_rate;
config.board_bits = global_periph.sample_bits;
config.board_channels = global_periph.channels;
audio_manager_init(&config);
}
static void __generate_device_name(char* device_name){
uint8_t mac[6] = {0};
ESP_ERROR_CHECK(esp_read_mac(mac, ESP_MAC_WIFI_STA));
// printf("WIFI_STA MAC 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x \n",
// mac[0], mac[1], mac[2],
// mac[3], mac[4], mac[5]);
snprintf(device_name,VOLC_DEVICE_NAME_LENGTH,"%s%02X%02X%02X%02X%02X%02X",DEVICE_NAME_PREFIX,mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}
int volc_hal_init(void) {
if(global_context == NULL){
global_context = (volc_hal_context_t*) volc_osal_calloc(1,sizeof(volc_hal_context_t));
}
__gmf_audio_init();
volc_hal_file_system_init();
__generate_device_name(global_context->device_name);
return 0;
}
volc_hal_context_t* volc_get_global_hal_context(){
return global_context;
}
void volc_hal_fini(void) {
volc_osal_free(global_context);
global_context = NULL;
return;
}
@@ -0,0 +1,136 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <stddef.h>
#include "volc_hal.h"
#include "volc_hal_button.h"
#include "iot_button.h"
#include "button_gpio.h"
#include "util/volc_log.h"
#include "volc_osal.h"
typedef struct {
button_handle_t btn;
volc_hal_button_config_t config;
} volc_hal_button_impl_t;
static void __button_event_cb_adapter(void* btn_handle, void* usr_data)
{
if (NULL == usr_data) {
return;
}
struct {
volc_hal_button_impl_t* button_impl;
button_event_t event;
} *adapter_data = (void*)usr_data;
if (NULL != adapter_data->button_impl && NULL != adapter_data->button_impl->config.event_cb) {
adapter_data->button_impl->config.event_cb(
(volc_hal_button_t)adapter_data->button_impl,
(volc_hal_button_event_e)adapter_data->event,
adapter_data->button_impl->config.user_data
);
}
}
volc_hal_button_t volc_hal_button_create(volc_hal_button_config_t* config)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return NULL;
}
if (NULL == config) {
LOGW("invalid input config %p", config);
return NULL;
}
volc_hal_button_impl_t *button_impl = (volc_hal_button_impl_t *)volc_osal_malloc(sizeof(volc_hal_button_impl_t));
if (NULL == button_impl) {
LOGE("memory alloc failed");
return NULL;
}
button_impl->config.gpio_num = config->gpio_num;
button_impl->config.active_level = config->active_level;
button_impl->config.long_press_ms = config->long_press_ms;
button_impl->config.short_press_ms = config->short_press_ms;
button_impl->config.enable_power_save = config->enable_power_save;
button_impl->config.user_data = config->user_data;
button_impl->config.event_cb = config->event_cb;
button_config_t btn_config = {
// .type = BUTTON_TYPE_GPIO,
// .gpio_button_config.gpio_num = button_impl->config.gpio_num,
// .gpio_button_config.active_level = button_impl->config.active_level,
.long_press_time = button_impl->config.long_press_ms,
.short_press_time = button_impl->config.short_press_ms
};
button_driver_t driver_config = {
.enable_power_save = button_impl->config.enable_power_save,
.get_key_level = NULL,
.enter_power_save = NULL,
.del = NULL,
};
iot_button_create(&btn_config,&driver_config,&button_impl->btn);
if (NULL == button_impl->btn) {
LOGE("button create failed");
volc_osal_free(button_impl);
return NULL;
}
struct {
volc_hal_button_impl_t* button_impl;
button_event_t event;
} *adapter_data = NULL;
button_event_t events[] = {
BUTTON_PRESS_DOWN,
BUTTON_PRESS_UP,
BUTTON_PRESS_REPEAT,
BUTTON_PRESS_REPEAT_DONE,
BUTTON_SINGLE_CLICK,
BUTTON_DOUBLE_CLICK,
BUTTON_MULTIPLE_CLICK,
BUTTON_LONG_PRESS_START,
BUTTON_LONG_PRESS_HOLD,
BUTTON_LONG_PRESS_UP,
BUTTON_PRESS_END
};
for (int i = 0; i < sizeof(events)/sizeof(events[0]); i++) {
adapter_data = (void*)volc_osal_malloc(sizeof(*adapter_data));
if (NULL == adapter_data) {
LOGE("Failed to allocate adapter data for event %d", events[i]);
continue;
}
adapter_data->button_impl = button_impl;
adapter_data->event = events[i];
iot_button_register_cb(button_impl->btn, events[i], NULL,__button_event_cb_adapter, adapter_data);
}
g_hal_context->button_handle = (volc_hal_button_t)button_impl;
return (volc_hal_button_t)button_impl;
}
void volc_hal_button_destroy(volc_hal_button_t button)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return;
}
if (NULL == button) {
LOGW("invalid input button %p", button);
return;
}
volc_hal_button_impl_t *button_impl = (volc_hal_button_impl_t *)button;
if (NULL != button_impl->btn) {
iot_button_delete(button_impl->btn);
button_impl->btn = NULL;
}
g_hal_context->button_handle = NULL;
volc_osal_free(button_impl);
}
@@ -0,0 +1,286 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <stddef.h>
#include "volc_hal.h"
#include "volc_hal_capture.h"
#include "volc_osal.h"
#include "audio_processor.h"
#include "av_processor_type.h"
#include "basic_board.h"
#include "esp_codec_dev.h"
#include "util/volc_log.h"
typedef enum {
WAKEUP = 0,
CAPTURE,
INITED,
} audio_pipeline_state_e;
typedef struct {
av_processor_encoder_config_t recorder_cfg;
audio_pipeline_state_e state;
} volc_hal_audio_capture_config_t;
typedef struct {
//TODO: add video capture config
void* video_capture_config;
} volc_hal_video_capture_config_t;
typedef struct {
volc_media_type_e media_type;
union {
volc_hal_audio_capture_config_t audio_capture_config;
volc_hal_video_capture_config_t video_capture_config;
};
volc_hal_capture_data_cb_t data_cb; // Data callback function
volc_hal_audio_wakeup_cb_t audio_wakeup_cb; // audio wakeup cb
void* user_data; // User data pointer
volc_osal_tid_t capture_thread;
volatile bool is_started;
} volc_hal_capture_impl_t;
extern basic_board_periph_t global_periph;
static int __volc_capture_get_default_read_size(volc_hal_capture_t capture)
{
// 60ms
#if (CONFIG_VOLC_AUDIO_G711A)
return (160*3);
#else
// 60 ms of 16 kHz mono PCM16: consume the complete encoder frame.
return 16000 * 60 / 1000 * sizeof(int16_t);
#endif
}
static void __volc_audio_capture_task(void *arg)
{
volc_hal_capture_impl_t *impl = (volc_hal_capture_impl_t *)arg;
LOGI("capture task started...");
int read_size = __volc_capture_get_default_read_size(impl);
uint8_t *read_buf = volc_osal_malloc(read_size);
// mem_assert(read_buf);
while(impl->is_started) {
int ret = audio_recorder_read_data(read_buf, read_size);
if (ret > 0 && impl->data_cb && impl->audio_capture_config.state == CAPTURE) {
#ifdef CONFIG_VOLC_AUDIO_G711A
volc_hal_frame_info_t frame_info = {
.data_type = VOLC_AUDIO_DATA_TYPE_G711A,
.user_data = impl->user_data,
};
impl->data_cb(impl, (const void *)read_buf, ret, &frame_info);
#else
volc_hal_frame_info_t frame_info = {
.data_type = VOLC_AUDIO_DATA_TYPE_PCM,
.user_data = impl->user_data,
};
impl->data_cb(impl, (const void *)read_buf, ret, &frame_info);
#endif
}
}
// audio_recorder_pause();
if (impl->capture_thread) {
volc_osal_thread_destroy(impl->capture_thread);
impl->capture_thread = NULL;
}
volc_osal_free(read_buf);
volc_osal_thread_exit(NULL);
}
volc_hal_capture_t volc_hal_capture_create(volc_hal_capture_config_t *config)
{
volc_hal_context_t *g_hal_context = volc_get_global_hal_context();
if (g_hal_context == NULL)
{
return NULL;
}
volc_hal_capture_impl_t *capture = (volc_hal_capture_impl_t *)volc_osal_calloc(1, sizeof(volc_hal_capture_impl_t));
// config
capture->is_started = false;
capture->media_type = config->media_type;
capture->data_cb = config->data_cb;
capture->audio_wakeup_cb = config->audio_wakeup_cb;
capture->user_data = config->user_data;
esp_codec_dev_set_in_gain(global_periph.rec_dev, 52.0);
switch (capture->media_type)
{
case VOLC_MEDIA_TYPE_AUDIO:
#if (CONFIG_VOLC_AUDIO_G711A)
capture->audio_capture_config.recorder_cfg.format = AV_PROCESSOR_FORMAT_ID_G711A;
#else
capture->audio_capture_config.recorder_cfg.format = AV_PROCESSOR_FORMAT_ID_PCM;
#endif
capture->audio_capture_config.recorder_cfg.params.g711.audio_info.sample_rate = 16000;
capture->audio_capture_config.recorder_cfg.params.g711.audio_info.sample_bits = 16;
capture->audio_capture_config.recorder_cfg.params.g711.audio_info.channels = 1;
capture->audio_capture_config.recorder_cfg.params.g711.audio_info.frame_duration = 60;
capture->audio_capture_config.state = INITED;
g_hal_context->capture_handle[VOLC_HAL_CAPTURE_AUDIO] = (volc_hal_capture_t)capture;
break;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video capture support
LOGE("Video capture is not supported yet");
break;
default:
break;
}
return (volc_hal_capture_t)capture;
}
static void __start_audio_capture(volc_hal_capture_impl_t *capture)
{
// audio_pipeline_unlink(impl->audio_capture_config.audio_pipeline);
av_processor_afe_config_t afe_config = DEFAULT_AV_PROCESSOR_AFE_CONFIG();
afe_config.ai_mode_wakeup = false;
audio_recorder_config_t recorder_config = DEFAULT_AUDIO_RECORDER_CONFIG();
memcpy((void *)&recorder_config.encoder_cfg, &capture->audio_capture_config.recorder_cfg, sizeof(av_processor_encoder_config_t));
memcpy(&recorder_config.afe_config, &afe_config, sizeof(av_processor_afe_config_t));
recorder_config.recorder_event_cb = capture->audio_wakeup_cb;
recorder_config.recorder_ctx = NULL;
audio_recorder_open(&recorder_config);
volc_osal_thread_param_t param = {0};
snprintf(param.name, sizeof(param.name), "%s", "volc_capture_task");
param.stack_size = 4 * 1024;
param.priority = 5;
param.stack_in_ext = 1;
capture->is_started = true;
capture->audio_capture_config.state = CAPTURE;
esp_err_t ret = volc_osal_thread_create(&capture->capture_thread, &param, __volc_audio_capture_task, capture);
LOGI("capture task start... mode: CAPTURE");
return;
}
static void __start_audio_wake(volc_hal_capture_impl_t *capture)
{
av_processor_afe_config_t afe_config = DEFAULT_AV_PROCESSOR_AFE_CONFIG();
afe_config.ai_mode_wakeup = true;
audio_recorder_config_t recorder_config = DEFAULT_AUDIO_RECORDER_CONFIG();
memcpy((void *)&recorder_config.encoder_cfg, &capture->audio_capture_config.recorder_cfg, sizeof(av_processor_encoder_config_t));
memcpy(&recorder_config.afe_config, &afe_config, sizeof(av_processor_afe_config_t));
recorder_config.recorder_event_cb = capture->audio_wakeup_cb;
recorder_config.recorder_ctx = NULL;
audio_recorder_open(&recorder_config);
volc_osal_thread_param_t param = {0};
snprintf(param.name, sizeof(param.name), "%s", "volc_capture_task");
param.stack_size = 4 * 1024;
param.priority = 5;
param.stack_in_ext = 1;
capture->is_started = true;
capture->audio_capture_config.state = WAKEUP;
esp_err_t ret = volc_osal_thread_create(&capture->capture_thread, &param, __volc_audio_capture_task, capture);
LOGI("capture task start... mode: WAKEUP");
return;
}
int volc_hal_capture_start(volc_hal_capture_t capture,volc_hal_audio_capture_mode_e mode)
{
if(capture == NULL){
return -1;
}
volc_hal_capture_impl_t *impl = (volc_hal_capture_impl_t *)capture;
if (impl->media_type == VOLC_MEDIA_TYPE_AUDIO && impl->audio_capture_config.state == INITED) {
switch (mode)
{
case VOLC_AUDIO_MODE_WAKEUP:
__start_audio_wake(impl);
break;
case VOLC_AUDIO_MODE_CAPTURE:
__start_audio_capture(impl);
break;
default:
break;
}
}
return 0;
}
int volc_hal_capture_stop(volc_hal_capture_t capture)
{
volc_hal_capture_impl_t *impl = (volc_hal_capture_impl_t *)capture;
if (!impl || !impl->is_started) {
return 0;
}
// stop thread
impl->is_started = false;
switch (impl->media_type) {
case VOLC_MEDIA_TYPE_AUDIO:
// audio_recorder_pause();
// audio_recorder_resume();
audio_recorder_close();
impl->audio_capture_config.state = INITED;
break;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video capture support
LOGE("Video capture is not supported yet");
break;
default:
break;
}
return 0;
}
void volc_hal_capture_destroy(volc_hal_capture_t capture)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return;
}
volc_hal_capture_impl_t *impl = (volc_hal_capture_impl_t *)capture;
if (!impl) {
return;
}
volc_hal_capture_stop(capture);
switch (impl->media_type) {
case VOLC_MEDIA_TYPE_AUDIO:
g_hal_context->capture_handle[VOLC_HAL_CAPTURE_AUDIO] = NULL;
break;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video capture support
LOGE("Video capture is not supported yet");
break;
default:
break;
}
volc_osal_free(impl);
}
int volc_hal_capture_update_config(volc_hal_capture_t capture, volc_hal_capture_config_t* config) {
volc_hal_capture_impl_t *impl = (volc_hal_capture_impl_t *)capture;
if (!impl || !config) {
LOGE("capture or config is NULL");
return -1;
}
if (impl->media_type != config->media_type) {
LOGE("media_type not match");
return -1;
}
if (impl->user_data != config->user_data) {
LOGE("user_data not match");
return -1;
}
if (impl->is_started) {
LOGE("capture is started, can not update config");
return -1;
}
if(config->data_cb){
impl->data_cb = config->data_cb;
}
if(config->audio_wakeup_cb){
impl->audio_wakeup_cb = config->audio_wakeup_cb;
}
return 0;
}
@@ -0,0 +1,354 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include "volc_hal.h"
#include "volc_hal_display.h"
#include "volc_lvgl_source.h"
#include "hw_init.h"
#include "esp_lcd_panel_ops.h"
#include "esp_mmap_assets.h"
#include "esp_board_manager.h"
#include "dev_display_lcd_spi.h"
#include "freertos/semphr.h"
#include "esp_heap_caps.h"
#include "dev_ledc_ctrl.h"
#include "gfx.h"
#include "lvgl.h"
#include <stddef.h>
#include "volc_osal.h"
#include <string.h>
#include "basic_board.h"
#include "mmap_generate_eaf.h"
typedef struct volc_hal_display_impl {
volatile bool is_init;
/* Global state */
esp_lcd_panel_handle_t s_panel;
mmap_assets_handle_t s_assets;
gfx_handle_t s_gfx;
gfx_obj_t *s_anim;
gfx_obj_t *s_label;
gfx_obj_t *s_subtitle;
gfx_obj_t *s_setup_hint;
esp_lcd_panel_io_handle_t display_io_handle;
SemaphoreHandle_t flush_done;
int s_current_emote;
volc_osal_tid_t display_thread;
} volc_hal_display_impl_t;
static volc_hal_display_impl_t* global_display_impl = NULL;
extern basic_board_periph_t global_periph;
static esp_lv_adapter_rotation_t __get_configured_rotation(void)
{
#if CONFIG_EXAMPLE_DISPLAY_ROTATION_0
return ESP_LV_ADAPTER_ROTATE_0;
#elif CONFIG_EXAMPLE_DISPLAY_ROTATION_90
return ESP_LV_ADAPTER_ROTATE_90;
#elif CONFIG_EXAMPLE_DISPLAY_ROTATION_180
return ESP_LV_ADAPTER_ROTATE_180;
#elif CONFIG_EXAMPLE_DISPLAY_ROTATION_270
return ESP_LV_ADAPTER_ROTATE_270;
#else
return ESP_LV_ADAPTER_ROTATE_0;
#endif
}
/* ========== Asset Management ========== */
static esp_err_t __mount_assets(void)
{
mmap_assets_config_t cfg = {
.partition_label = "eaf",
.max_files = MMAP_EAF_FILES,
.checksum = MMAP_EAF_CHECKSUM,
.flags = {
.mmap_enable = 1,
},
};
return mmap_assets_new(&cfg, &global_display_impl->s_assets);
}
/* ========== GFX Emote Engine ========== */
static bool __lcd_flush_done(esp_lcd_panel_io_handle_t io, esp_lcd_panel_io_event_data_t *event, void *context)
{
volc_hal_display_impl_t *display = context;
BaseType_t wake = pdFALSE;
xSemaphoreGiveFromISR(display->flush_done, &wake);
return wake == pdTRUE;
}
static void __gfx_flush_cb(gfx_handle_t handle, int x1, int y1, int x2, int y2, const void *data)
{
if (global_display_impl->s_panel) {
if (esp_lcd_panel_draw_bitmap(global_display_impl->s_panel, x1, y1, x2, y2, data) == ESP_OK) {
// GFX's own wait expires after 20 ms; wait here until DMA really finishes.
xSemaphoreTake(global_display_impl->flush_done, portMAX_DELAY);
}
}
gfx_emote_flush_ready(handle, true);
}
static esp_err_t __init_gfx_engine(void)
{
gfx_core_config_t cfg = {
.flush_cb = __gfx_flush_cb,
.user_data = global_display_impl->s_panel,
.flags = {
.swap = 1,
.double_buffer = 0,
.buff_dma = 1,
.buff_spiram = 0,
},
.h_res = HW_LCD_H_RES,
.v_res = HW_LCD_V_RES,
.fps = 15,
.task = {
.task_priority = 4,
.task_stack = 7168,
.task_affinity = 1,
.task_stack_caps = MALLOC_CAP_SPIRAM,
},
.buffers = {
.buf_pixels = HW_LCD_H_RES * 20,
},
};
global_display_impl->s_gfx = gfx_emote_init(&cfg);
return global_display_impl->s_gfx ? ESP_OK : ESP_FAIL;
}
static esp_err_t __create_animation(void)
{
/* Get EAF data from mmap */
const uint8_t *eaf_data = mmap_assets_get_mem(global_display_impl->s_assets, global_display_impl->s_current_emote);
int eaf_size = mmap_assets_get_size(global_display_impl->s_assets, global_display_impl->s_current_emote);
gfx_emote_lock(global_display_impl->s_gfx);
/* Create animation object */
global_display_impl->s_anim = gfx_anim_create(global_display_impl->s_gfx);
if (!global_display_impl->s_anim) {
gfx_emote_unlock(global_display_impl->s_gfx);
return ESP_FAIL;
}
/* Set animation source */
esp_err_t ret = gfx_anim_set_src(global_display_impl->s_anim, eaf_data, eaf_size);
if (ret != ESP_OK) {
gfx_obj_delete(global_display_impl->s_anim);
global_display_impl->s_anim = NULL;
gfx_emote_unlock(global_display_impl->s_gfx);
return ret;
}
gfx_anim_set_mirror(global_display_impl->s_anim, true, 50); /* Enable mirror for dual-eye display */
if(global_display_impl->s_current_emote == 0){
gfx_obj_align(global_display_impl->s_anim, GFX_ALIGN_LEFT_MID, 35, 0);
} else {
gfx_obj_align(global_display_impl->s_anim, GFX_ALIGN_CENTER, 0, 0);
}
gfx_anim_set_segment(global_display_impl->s_anim, 0, UINT32_MAX, 30, true); /* All frames, 30 FPS, loop */
gfx_emote_unlock(global_display_impl->s_gfx);
return ESP_OK;
}
static void __emote_task(void *arg)
{
/* Start animation playback */
gfx_emote_lock(global_display_impl->s_gfx);
gfx_anim_start(global_display_impl->s_anim);
gfx_emote_unlock(global_display_impl->s_gfx);
/* The display task owns animation playback for the lifetime of the app. */
while (1) {
vTaskDelay(pdMS_TO_TICKS(100));
}
}
static void __clear_panel(void)
{
const int rows = 20;
uint16_t *black = heap_caps_calloc(HW_LCD_H_RES * rows, sizeof(uint16_t), MALLOC_CAP_DMA);
if (!black) return;
for (int y = 0; y < HW_LCD_V_RES; y += rows) {
int y2 = y + rows > HW_LCD_V_RES ? HW_LCD_V_RES : y + rows;
if (esp_lcd_panel_draw_bitmap(global_display_impl->s_panel, 0, y, HW_LCD_H_RES, y2, black) != ESP_OK) break;
xSemaphoreTake(global_display_impl->flush_done, portMAX_DELAY);
}
free(black);
}
static esp_err_t __switch_animation(int emote_index)
{
if (!global_display_impl->s_anim || !global_display_impl->s_gfx) {
return ESP_FAIL;
}
/* Get new EAF data from mmap */
const uint8_t *eaf_data = mmap_assets_get_mem(global_display_impl->s_assets, emote_index);
int eaf_size = mmap_assets_get_size(global_display_impl->s_assets, emote_index);
if(global_display_impl->s_current_emote == emote_index) {
return ESP_OK;
}
gfx_emote_lock(global_display_impl->s_gfx);
/* Stop current animation */
gfx_anim_stop(global_display_impl->s_anim);
/* Update animation source */
esp_err_t ret = gfx_anim_set_src(global_display_impl->s_anim, eaf_data, eaf_size);
if (ret != ESP_OK) {
gfx_emote_unlock(global_display_impl->s_gfx);
return ret;
}
/* gfx_draw_animation() derives the object size from the decoded frame. */
global_display_impl->s_anim->width = 0;
global_display_impl->s_anim->height = 0;
gfx_anim_set_mirror(global_display_impl->s_anim, true, 50); /* Enable mirror for dual-eye display */
if(emote_index == 0){
gfx_obj_align(global_display_impl->s_anim, GFX_ALIGN_LEFT_MID, 35, 0);
} else {
gfx_obj_align(global_display_impl->s_anim, GFX_ALIGN_CENTER, 0, 0);
}
gfx_anim_set_segment(global_display_impl->s_anim, 0, UINT32_MAX, 30, true); /* All frames, 30 FPS, loop */
/* Restart animation */
gfx_anim_start(global_display_impl->s_anim);
gfx_emote_unlock(global_display_impl->s_gfx);
global_display_impl->s_current_emote = emote_index;
return ESP_OK;
}
volc_hal_display_t volc_hal_display_create(volc_hal_display_config_t* config)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return NULL;
}
global_display_impl = (volc_hal_display_impl_t*)volc_osal_calloc(1,sizeof(volc_hal_display_impl_t));
// init display
esp_lv_adapter_rotation_t rotation = __get_configured_rotation();
/* Determine tear avoid mode based on LCD interface */
#if CONFIG_EXAMPLE_LCD_INTERFACE_MIPI_DSI
esp_lv_adapter_tear_avoid_mode_t tear_avoid_mode = ESP_LV_ADAPTER_TEAR_AVOID_MODE_DEFAULT_MIPI_DSI;
#elif CONFIG_EXAMPLE_LCD_INTERFACE_RGB
esp_lv_adapter_tear_avoid_mode_t tear_avoid_mode = ESP_LV_ADAPTER_TEAR_AVOID_MODE_DEFAULT_RGB;
#else
esp_lv_adapter_tear_avoid_mode_t tear_avoid_mode = ESP_LV_ADAPTER_TEAR_AVOID_MODE_DEFAULT;
#endif
// ESP_ERROR_CHECK(hw_lcd_init(&global_display_impl->s_panel, &global_display_impl->display_io_handle, tear_avoid_mode, rotation));
global_display_impl->s_panel = global_periph.lcd_pannel;
dev_display_lcd_spi_handles_t *lcd = NULL;
ESP_ERROR_CHECK(esp_board_manager_get_device_handle("display_lcd", (void **)&lcd));
global_display_impl->display_io_handle = lcd->io_handle;
global_display_impl->flush_done = xSemaphoreCreateBinary();
if (!global_display_impl->flush_done) return NULL;
esp_lcd_panel_io_callbacks_t callbacks = {.on_color_trans_done = __lcd_flush_done};
ESP_ERROR_CHECK(esp_lcd_panel_io_register_event_callbacks(lcd->io_handle, &callbacks, global_display_impl));
__clear_panel();
ESP_ERROR_CHECK(__mount_assets());
ESP_ERROR_CHECK(__init_gfx_engine());
/*
* The upstream 360x360 boot asset is not rendered reliably on every
* EchoEar panel revision and can leave uninitialised-looking pixels at
* the bottom of the round display. Start with the compact built-in eye
* animation instead; application status text explains the setup state.
*/
global_display_impl->s_current_emote = MMAP_EAF_HAPPY_EAF;
__create_animation();
volc_osal_thread_param_t param = {0};
snprintf(param.name, sizeof(param.name), "%s", "volc_capture_task");
param.stack_size = 8 * 1024;
param.priority = 4;
param.stack_in_ext = 1;
esp_err_t ret = volc_osal_thread_create(&global_display_impl->display_thread, &param, __emote_task, NULL);
global_display_impl->is_init = true;
g_hal_context->display_handle = (volc_hal_display_t)global_display_impl;
volc_hal_display_set_brightness(global_display_impl,80);
return (volc_hal_display_t)global_display_impl;
}
int volc_hal_display_set_brightness(volc_hal_display_t display, int brightness)
{
if(display == NULL) return -1;
if (brightness > 100) {
brightness = 100;
}
if (brightness < 0) {
brightness = 0;
}
periph_ledc_handle_t *ledc_handle = NULL;
esp_board_manager_get_device_handle("lcd_brightness", (void **)&ledc_handle);
dev_ledc_ctrl_config_t *dev_ledc_cfg = NULL;
esp_err_t config_ret = esp_board_manager_get_device_config("lcd_brightness", (void*)&dev_ledc_cfg);
if (config_ret != ESP_OK) {
return -1;
}
// ESP_LOGI(TAG, "dev_ledc_cfg.ledc_name: %s, name: %s, type: %s", dev_ledc_cfg->ledc_name, dev_ledc_cfg->name, dev_ledc_cfg->type);
periph_ledc_config_t *ledc_config = NULL;
esp_board_manager_get_periph_config(dev_ledc_cfg->ledc_name, (void**)&ledc_config);
uint32_t duty = (brightness * ((1 << (uint32_t)ledc_config->duty_resolution) - 1)) / 100;
// ESP_LOGI(TAG, "duty_cycle: %" PRIu32 ", speed_mode: %d, channel: %d, duty_resolution: %d", duty, ledc_handle->speed_mode, ledc_handle->channel, ledc_config->duty_resolution);
// ESP_BOARD_RETURN_ON_ERROR(ledc_set_duty(ledc_handle->speed_mode, ledc_handle->channel, duty), TAG, "LEDC set duty failed");
ledc_set_duty(ledc_handle->speed_mode, ledc_handle->channel, duty);
// ESP_BOARD_RETURN_ON_ERROR(ledc_update_duty(ledc_handle->speed_mode, ledc_handle->channel), TAG, "LEDC update duty failed");
ledc_update_duty(ledc_handle->speed_mode, ledc_handle->channel);
return 0;
// return bsp_display_brightness_set(brightness);
}
void volc_hal_display_destroy(volc_hal_display_t display)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return;
}
volc_hal_display_impl_t* global_display_impl = (volc_hal_display_impl_t*)display;
if(global_display_impl && global_display_impl->is_init){
global_display_impl->is_init = false;
}
volc_osal_free(global_display_impl);
global_display_impl = NULL;
g_hal_context->display_handle = NULL;
return;
}
int volc_hal_display_set_content(volc_hal_display_t display, volc_hal_display_obj_e obj, volc_hal_display_type_e type, const void* content)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL || g_hal_context->display_handle == NULL){
return -1;
}
volc_hal_display_impl_t* global_display_impl = (volc_hal_display_impl_t*)(g_hal_context->display_handle);
if(obj == VOLC_DISPLAY_OBJ_STATUS && type == VOLC_DISPLAY_TEXT){
ESP_LOGI("DISPLAY", "Status: %s", (const char *)content);
}
if(obj == VOLC_DISPLAY_OBJ_SUBTITLE && type == VOLC_DISPLAY_TEXT){
ESP_LOGI("DISPLAY", "Subtitle: %s", (const char *)content);
}
if(obj == VOLC_DISPLAY_OBJ_MAIN && type == VOLC_DISPLAY_IMAGE){
int index = *((int*)content);
if(index < MMAP_EAF_FILES){
__switch_animation(index);
}
}
return 0;
}
@@ -0,0 +1,176 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include "volc_hal.h"
#include "volc_hal_display.h"
#include "volc_lvgl_source.h"
#include "lvgl.h"
#include "bsp/echoear.h"
#include <stddef.h>
#include "volc_osal.h"
#include <string.h>
#define LVGL_TASK_PRIORITY 1
#define LVGL_TASK_CORE_ID 1
#define LVGL_TASK_STACK_SIZE 8 * 1024
#define LVGL_TASK_MAX_SLEEP_MS 500
#define LVGL_TASK_TIMER_PERIOD_MS 50
#define LVGL_TIMER_INTERVAL 500
typedef struct volc_hal_display_impl {
lv_obj_t* screen;
lv_obj_t* display_obj[VOLC_DISPLAY_OBJ_MAX];
// use for display subtitle
lv_timer_t* text_timer;
char subtitle_texts[64];
char status_texts[64];
volatile bool is_init;
} volc_hal_display_impl_t;
static volc_hal_display_impl_t* global_display_impl = NULL;
volc_hal_display_t global_display = NULL;
static void __subtitle_update_cb(lv_timer_t* timer)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return;
}
volc_hal_display_impl_t* global_display_impl = (volc_hal_display_impl_t*)(g_hal_context->display_handle);
if(global_display_impl && global_display_impl->is_init){
lv_label_set_text(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_SUBTITLE], global_display_impl->subtitle_texts);
lv_label_set_text(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_STATUS], global_display_impl->status_texts);
lv_obj_remove_flag(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_SUBTITLE], LV_OBJ_FLAG_HIDDEN);
lv_obj_remove_flag(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_STATUS], LV_OBJ_FLAG_HIDDEN);
}
}
static void __status_obj_init(volc_hal_display_impl_t* global_display_impl)
{
if(global_display_impl && global_display_impl->display_obj[VOLC_DISPLAY_OBJ_STATUS] == NULL){
global_display_impl->display_obj[VOLC_DISPLAY_OBJ_STATUS] = lv_label_create(global_display_impl->screen);
lv_obj_set_style_text_font(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_STATUS], &echoear_font_16, 0);
lv_obj_align(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_STATUS], LV_ALIGN_TOP_MID, 0, 50);
lv_obj_set_height(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_STATUS], 30); // 设置固定高度度
}
}
static void __subtitle_obj_init(volc_hal_display_impl_t* global_display_impl)
{
if(global_display_impl && global_display_impl->display_obj[VOLC_DISPLAY_OBJ_SUBTITLE] == NULL){
global_display_impl->display_obj[VOLC_DISPLAY_OBJ_SUBTITLE] = lv_label_create(global_display_impl->screen);
lv_obj_set_style_text_font(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_SUBTITLE], &echoear_font_16, 0);
lv_obj_align(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_SUBTITLE], LV_ALIGN_BOTTOM_MID, 0, -50);
lv_obj_set_height(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_SUBTITLE], 30); // 设置固定高度度
}
if(global_display_impl && global_display_impl->text_timer == NULL){
global_display_impl->text_timer = lv_timer_create(__subtitle_update_cb, LVGL_TIMER_INTERVAL, NULL);
}
}
static void __main_obj_init(volc_hal_display_impl_t* global_display_impl)
{
if(global_display_impl && global_display_impl->display_obj[VOLC_DISPLAY_OBJ_MAIN] == NULL){
global_display_impl->display_obj[VOLC_DISPLAY_OBJ_MAIN] = lv_img_create(global_display_impl->screen);
// size需要调整
lv_obj_set_size(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_MAIN], 250, 250);
lv_obj_align(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_MAIN], LV_ALIGN_CENTER, 0, 0);
}
}
volc_hal_display_t volc_hal_display_create(volc_hal_display_config_t* config)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return NULL;
}
volc_hal_display_impl_t* global_display_impl = (volc_hal_display_impl_t*)volc_osal_calloc(1,sizeof(volc_hal_display_impl_t));
// init display
// bsp_display_cfg_t cfg = {
// .lvgl_port_cfg = {
// .task_priority = LVGL_TASK_PRIORITY,
// .task_stack = LVGL_TASK_STACK_SIZE,
// .task_affinity = LVGL_TASK_CORE_ID,
// .task_max_sleep_ms = LVGL_TASK_MAX_SLEEP_MS,
// .task_stack_caps = MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT,
// .timer_period_ms = LVGL_TASK_TIMER_PERIOD_MS,
// },
// .buffer_size = BSP_LCD_H_RES * 50,
// .double_buffer = true,
// .flags = {
// .buff_spiram = false,
// // .default_dummy_draw = default_dummy_draw, // Avoid white screen during initialization
// },
// };
// lv_disp_t *disp = bsp_display_start_with_config(&cfg);
// // bsp_display_brightness_init();
// bsp_display_backlight_on();
global_display_impl->screen = lv_scr_act();
// printf("global_display_impl->screen %p \n",global_display_impl->screen);
__subtitle_obj_init(global_display_impl);
__status_obj_init(global_display_impl);
__main_obj_init(global_display_impl);
global_display_impl->is_init = true;
g_hal_context->display_handle = (volc_hal_display_t)global_display_impl;
return (volc_hal_display_t)global_display_impl;
}
int volc_hal_display_set_brightness(volc_hal_display_t display, int brightness)
{
if(display == NULL) return -1;
if (brightness > 100) {
brightness = 100;
}
if (brightness < 0) {
brightness = 0;
}
return bsp_display_brightness_set(brightness);
}
void volc_hal_display_destroy(volc_hal_display_t display)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return;
}
volc_hal_display_impl_t* global_display_impl = (volc_hal_display_impl_t*)display;
if(global_display_impl && global_display_impl->is_init){
global_display_impl->is_init = false;
lv_timer_del(global_display_impl->text_timer);
lv_obj_del(global_display_impl->screen);
}
volc_osal_free(global_display_impl);
global_display_impl = NULL;
g_hal_context->display_handle = NULL;
return;
}
int volc_hal_display_set_content(volc_hal_display_t display, volc_hal_display_obj_e obj, volc_hal_display_type_e type, const void* content)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL || g_hal_context->display_handle == NULL){
return -1;
}
volc_hal_display_impl_t* global_display_impl = (volc_hal_display_impl_t*)(g_hal_context->display_handle);
if(obj == VOLC_DISPLAY_OBJ_STATUS && type == VOLC_DISPLAY_TEXT){
memset(global_display_impl->status_texts, 0, 64);
int count = strlen(content) >= 63 ? 63 : strlen(content);
memcpy(global_display_impl->status_texts,content,count);
}
if(obj == VOLC_DISPLAY_OBJ_SUBTITLE && type == VOLC_DISPLAY_TEXT){
memset(global_display_impl->subtitle_texts, 0, 64);
int count = strlen(content) >= 63 ? 63 : strlen(content);
memcpy(global_display_impl->subtitle_texts,content,count);
}
if(obj == VOLC_DISPLAY_OBJ_MAIN && type == VOLC_DISPLAY_IMAGE){
lv_image_dsc_t* img_app_pos = (lv_image_dsc_t*)content;
// lv_obj_set_size(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_MAIN], 112, 112);
lv_img_set_src(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_MAIN], img_app_pos);
lv_obj_remove_flag(global_display_impl->display_obj[VOLC_DISPLAY_OBJ_MAIN] ,LV_OBJ_FLAG_HIDDEN);
}
return 0;
}
@@ -0,0 +1,55 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <stdio.h>
#include "volc_hal_file.h"
// #include "board.h"
// #include "esp_peripherals.h"
#include "util/volc_log.h"
#include "basic_board.h"
#include "audio_processor.h"
int volc_hal_file_system_init()
{
return 0;
}
volc_hal_file_t volc_hal_file_open(char* file_name, char* mode)
{
FILE* file = fopen(file_name,mode);
if (file == NULL) {
LOGE("volc_hal_file_open failed");
return NULL;
}
return (volc_hal_file_t)file;
}
uint64_t volc_hal_file_read(volc_hal_file_t file, void *data, uint64_t size)
{
return fread(data,1,size,(FILE*)file);
}
uint64_t volc_hal_file_write(volc_hal_file_t file, void *data, uint64_t size)
{
return fwrite(data,1,size,(FILE*)file);
}
uint64_t volc_hal_file_get_size(volc_hal_file_t file)
{
uint64_t file_offset = ftell((FILE*)file);
fseek((FILE*)file, 0, SEEK_END);
uint64_t file_size_long = ftell((FILE*)file);
fseek((FILE*)file,file_offset,SEEK_SET);
return file_size_long;
}
int volc_hal_file_seek(volc_hal_file_t file,uint64_t offset)
{
return fseek((FILE*)file,offset,SEEK_SET);
}
int volc_hal_file_close(volc_hal_file_t file)
{
return fclose((FILE*)file);
}
@@ -0,0 +1,18 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include "volc_hal_led.h"
#include <stddef.h>
volc_led_t volc_led_create(volc_led_config_t* config) {
return NULL;
}
void volc_led_destroy(volc_led_t led) {
}
void volc_led_set_state(volc_led_t led, volc_led_state_e state) {
}
@@ -0,0 +1,315 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <stddef.h>
#include "volc_hal.h"
#include "volc_hal_player.h"
#include "volc_osal.h"
#include "basic_board.h"
#include "audio_processor.h"
#include "esp_codec_dev.h"
#include "util/volc_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/stream_buffer.h"
#include "freertos/semphr.h"
#include "esp_heap_caps.h"
#define DEFAULT_AUDIO_VOL 70
#define PCM_QUEUE_BYTES (256 * 1024)
#define PCM_PREBUFFER_BYTES (16000 * 2 * 750 / 1000)
#define PCM_PREBUFFER_WAIT_MS 1500
#define PCM_REPRIME_IDLE_MS 600
typedef struct {
av_processor_decoder_config_t feeder_cfg;
int volume;
} audio_player_config_t;
typedef struct {
//TODO: add video player config
void* video_player_config;
} video_player_config_t;
typedef struct {
volc_media_type_e media_type; // Media type
union {
audio_player_config_t audio_player_config;
video_player_config_t video_player_config;
};
volatile bool is_started;
StreamBufferHandle_t pcm_stream;
StaticStreamBuffer_t stream_state;
uint8_t *stream_storage;
SemaphoreHandle_t worker_stopped;
volatile bool discard_pending;
volatile bool segment_complete;
} volc_player_impl_t;
extern basic_board_periph_t global_periph;
static void pcm_playback_task(void *arg)
{
volc_player_impl_t *impl = arg;
uint8_t pcm[1024];
bool primed = false;
uint64_t first_byte_ms = 0;
uint64_t last_feed_ms = 0;
while (impl->is_started) {
if (impl->discard_pending) {
while (xStreamBufferReceive(impl->pcm_stream, pcm, sizeof(pcm), 0)) {}
impl->discard_pending = false;
impl->segment_complete = false;
primed = false;
first_byte_ms = 0;
}
size_t available = xStreamBufferBytesAvailable(impl->pcm_stream);
if (!primed) {
if (!available) {
vTaskDelay(pdMS_TO_TICKS(10));
continue;
}
if (!first_byte_ms) first_byte_ms = volc_osal_get_time_ms();
if (available < PCM_PREBUFFER_BYTES && !impl->segment_complete &&
volc_osal_get_time_ms() - first_byte_ms < PCM_PREBUFFER_WAIT_MS) {
vTaskDelay(pdMS_TO_TICKS(10));
continue;
}
primed = true;
LOGI("PLAYBACK start source=16000Hz mono PCM16 buffered=%u wait_ms=%u complete=%d",
(unsigned)available, (unsigned)(volc_osal_get_time_ms() - first_byte_ms), impl->segment_complete);
}
size_t count = xStreamBufferReceive(impl->pcm_stream, pcm, sizeof(pcm), pdMS_TO_TICKS(30));
if (!count) {
/* An empty ingress queue does not mean the speaker has run dry:
* the downstream feeder may still hold 256 ms of PCM. Keep feeding
* arriving chunks immediately instead of inserting another prefill
* delay after every short network gap. */
if (volc_osal_get_time_ms() - last_feed_ms >= PCM_REPRIME_IDLE_MS) {
primed = false;
first_byte_ms = 0;
LOGI("PLAYBACK idle after %u ms without PCM", PCM_REPRIME_IDLE_MS);
}
continue;
}
if (audio_feeder_feed_data(pcm, count) == ESP_OK) {
last_feed_ms = volc_osal_get_time_ms();
} else if (impl->is_started) {
LOGE("PLAYBACK feeder write failed");
}
}
xSemaphoreGive(impl->worker_stopped);
vTaskDelete(NULL);
}
volc_hal_player_t volc_hal_player_create(volc_hal_player_config_t* config)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return NULL;
}
volc_player_impl_t* impl = volc_osal_calloc(1, sizeof(volc_player_impl_t));
if (!impl) return NULL;
// mem_assert(impl);
impl->media_type = config->media_type;
switch (impl->media_type) {
case VOLC_MEDIA_TYPE_AUDIO:
if(global_periph.play_dev){
esp_codec_dev_set_out_vol(global_periph.play_dev, DEFAULT_AUDIO_VOL);
}
impl->audio_player_config.volume = DEFAULT_AUDIO_VOL;
#if (CONFIG_VOLC_AUDIO_G711A)
impl->audio_player_config.feeder_cfg.format = AV_PROCESSOR_FORMAT_ID_G711A;
impl->audio_player_config.feeder_cfg.params.g711.audio_info.sample_rate = 8000;
impl->audio_player_config.feeder_cfg.params.g711.audio_info.sample_bits = 16;
impl->audio_player_config.feeder_cfg.params.g711.audio_info.channels = 1;
impl->audio_player_config.feeder_cfg.params.g711.audio_info.frame_duration = 20;
#else
impl->audio_player_config.feeder_cfg.format = AV_PROCESSOR_FORMAT_ID_PCM;
/* Hardware gateway PCM16 is 16 kHz, as in the low-load SDK and
* desktop client. The underlying model's 24 kHz output is not the
* sample rate of this gateway stream. */
impl->audio_player_config.feeder_cfg.params.pcm.audio_info.sample_rate = 16000;
impl->audio_player_config.feeder_cfg.params.pcm.audio_info.sample_bits = 16;
impl->audio_player_config.feeder_cfg.params.pcm.audio_info.channels = 1;
impl->audio_player_config.feeder_cfg.params.pcm.audio_info.frame_duration = 20;
#endif
audio_feeder_config_t feeder_config = DEFAULT_AUDIO_FEEDER_CONFIG();
memcpy((void *)&feeder_config.decoder_cfg, &impl->audio_player_config.feeder_cfg, sizeof(av_processor_decoder_config_t));
if (audio_feeder_open(&feeder_config) != ESP_OK) {
volc_osal_free(impl);
return NULL;
}
impl->stream_storage = heap_caps_malloc(PCM_QUEUE_BYTES + 1, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
impl->worker_stopped = xSemaphoreCreateBinary();
if (impl->stream_storage) {
impl->pcm_stream = xStreamBufferCreateStatic(PCM_QUEUE_BYTES + 1, 1,
impl->stream_storage, &impl->stream_state);
}
if (!impl->pcm_stream || !impl->worker_stopped) {
if (impl->pcm_stream) vStreamBufferDelete(impl->pcm_stream);
if (impl->worker_stopped) vSemaphoreDelete(impl->worker_stopped);
heap_caps_free(impl->stream_storage);
audio_feeder_close();
volc_osal_free(impl);
return NULL;
}
// audio_processor_mixer_open();
impl->is_started = false;
g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO] = impl;
break;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video player support
break;
default:
break;
}
return (volc_hal_player_t)impl;
}
int volc_hal_set_audio_player_volume(volc_hal_player_t player, int volume){
volc_player_impl_t* impl = (volc_player_impl_t*)player;
if (impl == NULL) {
return -1;
}
if(impl->media_type == VOLC_MEDIA_TYPE_AUDIO){
impl->audio_player_config.volume = volume;
return esp_codec_dev_set_out_vol(global_periph.play_dev, volume);
} else if(impl->media_type == VOLC_MEDIA_TYPE_VIDEO){
LOGE("media type %d not supported set volume", impl->media_type);
return -1;
}
}
int volc_hal_get_audio_player_volume(volc_hal_player_t player){
volc_player_impl_t* impl = (volc_player_impl_t*)player;
if (impl == NULL) {
return -1;
}
return impl->audio_player_config.volume;
}
void volc_hal_player_destroy(volc_hal_player_t player)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return;
}
volc_player_impl_t* impl = (volc_player_impl_t*)player;
if (impl == NULL) {
return;
}
volc_hal_player_stop(impl);
switch (impl->media_type) {
case VOLC_MEDIA_TYPE_AUDIO:
audio_feeder_close();
vStreamBufferDelete(impl->pcm_stream);
vSemaphoreDelete(impl->worker_stopped);
heap_caps_free(impl->stream_storage);
g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO] = NULL;
break;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video player support
break;
default:
break;
}
volc_osal_free(impl);
}
int volc_hal_player_start(volc_hal_player_t player)
{
volc_player_impl_t* impl = (volc_player_impl_t*)player;
if (impl == NULL) {
LOGE("volc_hal_player_start: impl is NULL");
return -1;
}
if(impl->is_started) return 0;
switch (impl->media_type) {
case VOLC_MEDIA_TYPE_AUDIO:
if (audio_feeder_run() != ESP_OK) return -1;
xStreamBufferReset(impl->pcm_stream);
impl->is_started = true;
if (xTaskCreatePinnedToCore(pcm_playback_task, "pcm_playback", 4096, impl, 5, NULL, 1) != pdPASS) {
impl->is_started = false;
audio_feeder_stop();
return -1;
}
return 0;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video player support
break;
default:
break;
}
LOGE("media type %d not supported", impl->media_type);
return -1;
}
int volc_hal_player_stop(volc_hal_player_t player)
{
volc_player_impl_t* impl = (volc_player_impl_t*)player;
if (impl == NULL) {
LOGE("volc_hal_player_stop: impl is NULL");
return -1;
}
if(impl->is_started == false) return 0;
switch (impl->media_type) {
case VOLC_MEDIA_TYPE_AUDIO:
impl->is_started = false;
/* Stop the feeder first to release any in-flight blocking write. */
int ret = audio_feeder_stop();
xSemaphoreTake(impl->worker_stopped, portMAX_DELAY);
return ret;
break;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video player support
break;
default:
break;
}
LOGE("media type %d not supported", impl->media_type);
return -1;
}
int volc_hal_player_play_data(volc_hal_player_t player, const void* data, int len)
{
if (player == NULL || data == NULL || len <= 0) {
LOGE("player play data failed, player is %p, data is %p, len is %d", player, data, len);
return -1;
}
volc_player_impl_t* impl = (volc_player_impl_t*)player;
switch (impl->media_type) {
case VOLC_MEDIA_TYPE_AUDIO:
if (!impl->is_started || impl->discard_pending) return 0;
if ((len & 1) || xStreamBufferSpacesAvailable(impl->pcm_stream) < (size_t)len) {
LOGE("PLAYBACK queue overflow or unaligned PCM: bytes=%d free=%u", len,
(unsigned)xStreamBufferSpacesAvailable(impl->pcm_stream));
return -1;
}
impl->segment_complete = false;
return xStreamBufferSend(impl->pcm_stream, data, len, 0) == (size_t)len ? 0 : -1;
break;
case VOLC_MEDIA_TYPE_VIDEO:
// TODO: Add video player support
break;
default:
break;
}
LOGE("media type %d not supported", impl->media_type);
return -1;
}
void volc_hal_player_discard_pending(volc_hal_player_t player)
{
volc_player_impl_t *impl = player;
if (impl && impl->is_started) impl->discard_pending = true;
}
void volc_hal_player_finish_segment(volc_hal_player_t player)
{
volc_player_impl_t *impl = player;
if (impl && impl->is_started) impl->segment_complete = true;
}
@@ -0,0 +1,12 @@
# Copyright (2025) Beijing Volcano Engine Technology Ltd.
# SPDX-License-Identifier: Apache License 2.0
file(GLOB SERVICE_SRCS_COMMON "${CMAKE_CURRENT_LIST_DIR}/src/*.c")
file(GLOB SERVICE_SRCS_CONV "${CMAKE_CURRENT_LIST_DIR}/conv_service/src/*.c")
file(GLOB SERVICE_SRCS_FUNCTION_CALL "${CMAKE_CURRENT_LIST_DIR}/function_call_service/src/*.c")
set(SERVICE_SRCS ${SERVICE_SRCS_COMMON} ${SERVICE_SRCS_CONV} ${SERVICE_SRCS_FUNCTION_CALL})
set(SERVICE_INC "${CMAKE_CURRENT_LIST_DIR}/inc"
"${CMAKE_CURRENT_LIST_DIR}/conv_service/inc"
"${CMAKE_CURRENT_LIST_DIR}/function_call_service/inc")
@@ -0,0 +1,10 @@
# Service
## brief introduction
This directory presents the business module division of the Hardware Conversational Agent Development Kit for AI conversation services. All business modules are named "service", and different services communicate through event subscription (sub) and publication (pub) at the framework layer. The main modules are as follows:
- conv_service:The core module of the AI Conversational Agent, responsible for the initiation, operation, and termination of AI conversation services.
- function_call_service:Interacts with the conv\_service module, responsible for executing function calls and returning the results to the agent.
- local_logic_service:A local module based on predefined business logic (not the agent's business logic). It performs tasks such as parsing subtitles and taking certain actions based on quick responses to the subtitles (different from function calls).
- src: An externally exposed module responsible for initiating the AI conversation.
@@ -0,0 +1,11 @@
# Service
## 目录简介
本目录是硬件对话智能体开发套件对于ai对话业务进行的业务模块划分,不同的业务模块我们以service命名;不同的service通过framework层event的sub和pub进行通信。主要分为一下模块
- conv_service: 智能体ai对话的主要模块,负责ai对话业务的开始,运行,与结束。
- function_call_service: 与conv_service模块交互,负责function call的执行并将结果返回给智能体
- local_logic_service: 本地基于既定业务逻辑(非智能体的业务逻辑)的模块,例如解析字幕并根据字幕快速响应做出某些action等(区别于function call)
- src: 对外暴露的模块,负责ai对话的拉起
@@ -0,0 +1,19 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef VOLC_CONV_SERVICE_H__
#define VOLC_CONV_SERVICE_H__
#include "volc_conv_ai.h"
typedef struct {
volc_event_handler_t volc_event_handler;
volc_engine_t engine;
int wait_time;
} volc_conv_service_t;
void conv_ai_service_task(void *pvParameters);
void conv_ai_service_task_stop();
void conv_ai_service_init();
volc_conv_service_t get_conv_ai_service();
#endif /* VOLC_CONV_SERVICE_H__ */
@@ -0,0 +1,12 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef VOLC_CONV_SERVICE_MANAGER_H__
#define VOLC_CONV_SERVICE_MANAGER_H__
#include <stdio.h>
#include "aios.h"
void volc_conv_service_manager_init(void);
#endif // VOLC_CONV_SERVICE_MANAGER_H__
@@ -0,0 +1,523 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <stdio.h>
#include <string.h>
#include "aios.h"
#include "cJSON.h"
#include "volc_hal.h"
#include "volc_osal.h"
#include "util/volc_log.h"
#include "volc_service_common.h"
#include "volc_conv.h"
#include "volc_hal.h"
#include "volc_hal_capture.h"
#include "volc_hal_display.h"
#include "volc_hal_player.h"
// #include "volc_hal_file.h"
#include "volc_local_function_list.h"
#include "mmap_generate_eaf.h"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
extern int8_t get_rssi(void);
#if __cplusplus
extern "C" {
#endif
#define CONV_AI_CONFIG_FORMAT "{\
\"ver\": 1,\
\"iot\": {\
\"instance_id\": \"%s\",\
\"product_key\": \"%s\",\
\"device_secret\": \"%s\",\
\"device_name\": \"%s\"\
},\
\"rtc\": {\
\"log_level\": 3,\
\"audio\": {\
\"publish\": true,\
\"subscribe\": true,\
\"codec\": 3\
},\
\"video\": {\
\"publish\": false,\
\"subscribe\": false,\
\"codec\": 1\
},\
\"params\":[\
\"{\\\"debug\\\":{\\\"log_to_console\\\":1}}\",\
\"{\\\"rtc\\\":{\\\"access\\\":{\\\"concurrent_requests\\\":1}}}\",\
\"{\\\"rtc\\\":{\\\"ice\\\":{\\\"concurrent_agents\\\":1}}}\",\
\"{\\\"rtc\\\":{\\\"thread\\\":{\\\"stack_in_ext\\\":1}}}\",\
\"{\\\"rtc\\\":{\\\"network\\\":{\\\"enable_audio_jitter2\\\":0}}}\",\
\"{\\\"rtc\\\":{\\\"report\\\":{\\\"enable\\\":0}}}\",\
\"{\\\"audio\\\":{\\\"codec\\\":{\\\"pcma\\\":{\\\"s_samples_per_frame\\\":480}}}}\"\
]\
}\
}"
#define CONV_SERVICE_TIMEOUT 60
static char config_buf[1024] = {0};
static volc_conv_service_t conv_service = {0};
static volatile bool is_stop = false;
static volatile bool provider_disconnected = false;
static volc_hal_display_t global_display = NULL;
static bool session_started_reported = false;
static QueueHandle_t platform_report_queue;
static volatile bool diagnostic_say_pending;
void conv_ai_service_diagnostic_say(void)
{
diagnostic_say_pending = true;
aios_event_pub(VOLC_SERVICE_AI_CONVERSATION, NULL, NULL);
}
/* Implemented by the platform client in the top-level firmware component. */
extern const char *platform_runtime_instance_id(void);
extern const char *platform_runtime_product_key(void);
extern const char *platform_runtime_device_name(void);
extern const char *platform_runtime_device_secret(void);
extern int platform_conversation_begin(void);
extern const char *platform_last_error_code(void);
extern const char *platform_conversation_bot_id(void);
extern const char *platform_conversation_update_json(void);
extern int platform_conversation_started(const char *provider_connection_ref);
extern int platform_conversation_poll(void);
extern int platform_conversation_turn(const char *speaker, const char *source_id, const char *text);
extern void platform_conversation_finish(bool failed, const char *error_code);
volc_conv_service_t get_conv_ai_service()
{
return conv_service;
}
// use dump audio
// volc_hal_file_t* audioFile = NULL;
// int a_cnt = 0;
static void __audio_capture_cb(volc_hal_capture_t capture, const void* data, int len, volc_hal_frame_info_t* frame_info){
volc_audio_frame_info_t info = {0};
info.commit = false;
info.data_type = frame_info->data_type;
if(!is_stop)
{
static uint64_t report_ms, magnitude;
static unsigned samples, peak, frames, failures, max_send_ms;
const int16_t *pcm = data;
if (frame_info->data_type == VOLC_AUDIO_DATA_TYPE_PCM) {
for (int i = 0; i < len / sizeof(int16_t); ++i) {
unsigned value = pcm[i] < 0 ? -(int)pcm[i] : pcm[i];
magnitude += value;
if (value > peak) peak = value;
samples++;
}
}
uint64_t before = volc_osal_get_time_ms();
int sent = volc_send_audio_data(conv_service.engine, data, len, &info);
unsigned elapsed = volc_osal_get_time_ms() - before;
if (elapsed > max_send_ms) max_send_ms = elapsed;
frames++;
if (sent < 0) failures++;
if (before - report_ms >= 2000) {
int rssi = get_rssi();
LOGI("UPLINK mean=%u peak=%u frames=%u failed=%u max_send_ms=%u rssi=%d",
samples ? (unsigned)(magnitude / samples) : 0, peak, frames, failures, max_send_ms, rssi);
report_ms = before;
magnitude = samples = peak = frames = failures = max_send_ms = 0;
}
// if(audioFile == NULL){
// audioFile = volc_hal_file_open("/sdcard/cap.pcm","wb");
// volc_hal_file_write(audioFile,data,len);
// }
}
}
static void __on_volc_event(volc_engine_t handle, volc_event_t *event, void *user_data)
{
switch (event->code)
{
case VOLC_EV_CONNECTED:
LOGI("Volc Engine connected");
break;
case VOLC_EV_DISCONNECTED:
LOGI( "Volc Engine disconnected");
provider_disconnected = true;
is_stop = true;
break;
default:
LOGI("Volc Engine event: %d", event->code);
break;
}
}
static void __on_volc_conversation_status(volc_engine_t handle, volc_conv_status_e status, void *user_data)
{
int index = MMAP_EAF_HAPPY_EAF;
switch (status)
{
case VOLC_CONV_STATUS_LISTENING:
index = MMAP_EAF_EMOTION_BLINK_FAST_284_126_EAF;
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_MAIN,VOLC_DISPLAY_IMAGE,&index);
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_STATUS,VOLC_DISPLAY_TEXT,"智能体聆听中");
break;
case VOLC_CONV_STATUS_THINKING:
index = MMAP_EAF_EMOTION_DIZZY_284_126_EAF;
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_MAIN,VOLC_DISPLAY_IMAGE,&index);
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_STATUS,VOLC_DISPLAY_TEXT,"智能体思考中");
break;
case VOLC_CONV_STATUS_ANSWERING:
index = MMAP_EAF_HAPPY_EAF;
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_MAIN,VOLC_DISPLAY_IMAGE,&index);
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_STATUS,VOLC_DISPLAY_TEXT,"智能体说话中");
break;
case VOLC_CONV_STATUS_INTERRUPTED:
{
volc_hal_context_t *hal = volc_get_global_hal_context();
if (hal) volc_hal_player_discard_pending(hal->player_handle[VOLC_HAL_PLAYER_AUDIO]);
}
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_STATUS,VOLC_DISPLAY_TEXT,"智能体被打断");
break;
case VOLC_CONV_STATUS_ANSWER_FINISH:
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_STATUS,VOLC_DISPLAY_TEXT,"智能体说话完成");
break;
default:
break;
}
return;
}
static void __on_volc_audio_data(volc_engine_t handle, const void *data_ptr, size_t data_len, volc_audio_frame_info_t *info_ptr, void *user_data)
{
int error = 0;
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if (g_hal_context == NULL) {
LOGE("volc_get_global_hal_context failed");
return;
}
volc_hal_player_t player_handle = g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO];
if (player_handle == NULL)
{
LOGE("player pipeline is NULL");
return;
}
if(!is_stop){
volc_hal_player_play_data(player_handle, data_ptr, data_len);
}
}
static void __on_volc_video_data(volc_engine_t handle, const void *data_ptr, size_t data_len, volc_video_frame_info_t *info_ptr, void *user_data)
{
}
static int sub_offset = 0;
static void __on_subtitle_message_received(const cJSON* root) {
/*
{
"data" :
[
{
"definite" : false,
"language" : "zh",
"mode" : 1,
"paragraph" : false,
"sequence" : 0,
"text" : "\\u4f60\\u597d",
"userId" : "voiceChat_xxxxx"
}
],
"type" : "subtitle"
}
*/
cJSON * type_obj = cJSON_GetObjectItem(root, "type");
if (type_obj != NULL && strcmp("subtitle", cJSON_GetStringValue(type_obj)) == 0) {
cJSON* data_obj_arr = cJSON_GetObjectItem(root, "data");
cJSON* obji = NULL;
cJSON_ArrayForEach(obji, data_obj_arr) {
cJSON* user_id_obj = cJSON_GetObjectItem(obji, "userId");
cJSON* text_obj = cJSON_GetObjectItem(obji, "text");
cJSON* definite_obj = cJSON_GetObjectItem(obji, "definite");
char* sub = cJSON_GetStringValue(text_obj);
// print_string(sub + sub_offset -1);
if(cJSON_IsTrue(definite_obj)){
sub_offset = sub_offset == 0 ? 0 : sub_offset -1;
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_SUBTITLE,VOLC_DISPLAY_TEXT,sub + sub_offset);
sub_offset = 0;
aios_event_pub(VOLC_LOCAL_LOGIC_PROCESS_SUBTITLE, sub, NULL);
} else if(strlen(sub) - sub_offset > 18){
sub_offset = sub_offset == 0 ? 0 : sub_offset -1;
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_SUBTITLE,VOLC_DISPLAY_TEXT,sub + sub_offset);
if(strlen(sub) - sub_offset > 36){
sub_offset = strlen(sub);
}
}
}
}
}
/* HTTPS reporting must never run inside the WebSocket receive mutex. */
static void process_platform_reports(void)
{
cJSON *root;
while (platform_report_queue && xQueueReceive(platform_report_queue, &root, 0) == pdTRUE) {
cJSON *type_obj = cJSON_GetObjectItemCaseSensitive(root, "type");
const char *type = cJSON_IsString(type_obj) ? type_obj->valuestring : "";
if ((strcmp(type, "session.updated") == 0 || strcmp(type, "session.created") == 0) && !session_started_reported) {
cJSON *session = cJSON_GetObjectItemCaseSensitive(root, "session");
cJSON *id = cJSON_IsObject(session) ? cJSON_GetObjectItemCaseSensitive(session, "id") : NULL;
cJSON *job_id = cJSON_GetObjectItemCaseSensitive(root, "job_id");
const char *provider_ref = cJSON_IsString(id) && id->valuestring[0] ? id->valuestring :
(cJSON_IsString(job_id) ? job_id->valuestring : NULL);
if (provider_ref && provider_ref[0] && platform_conversation_started(provider_ref) == 0) {
session_started_reported = true;
LOGI("Platform confirmed dynamic session configuration");
}
} else if (strcmp(type, "conversation.item.input_audio_transcription.completed") == 0) {
cJSON *text = cJSON_GetObjectItemCaseSensitive(root, "transcript");
cJSON *source = cJSON_GetObjectItemCaseSensitive(root, "event_id");
if (cJSON_IsString(text) && text->valuestring[0]) {
(void)platform_conversation_turn("subject", cJSON_IsString(source) ? source->valuestring : "subject", text->valuestring);
}
} else if (strcmp(type, "response.audio_transcript.done") == 0) {
cJSON *text = cJSON_GetObjectItemCaseSensitive(root, "transcript");
cJSON *source = cJSON_GetObjectItemCaseSensitive(root, "response_id");
if (cJSON_IsString(text) && text->valuestring[0]) {
(void)platform_conversation_turn("agent", cJSON_IsString(source) ? source->valuestring : "agent", text->valuestring);
}
}
cJSON_Delete(root);
}
}
static void __on_volc_message_data(volc_engine_t handle, const void *message, size_t size, volc_message_info_t *info_ptr, void *user_data)
{
static char message_buffer[4096];
if (size > 0 && size < sizeof(message_buffer) - 1) {
memcpy(message_buffer, message, size);
message_buffer[size] = 0;
const bool standard_protocol = message_buffer[0] == '{';
if (!standard_protocol && size < 8) return;
cJSON *root = cJSON_Parse(standard_protocol ? message_buffer : message_buffer + 8);
if (root != NULL) {
if (standard_protocol) {
const char *type = cJSON_GetStringValue(cJSON_GetObjectItem(root, "type"));
if (type && (!strcmp(type, "error") || !strcmp(type, "conversation.item.created"))) {
LOGI("Provider control event: %s", message_buffer);
}
if (type && !strcmp(type, "response.audio.done") && !is_stop) {
/* Flush the final sub-frame through the PCM decoder. */
static const uint8_t silence[2048] = {0};
volc_hal_context_t *hal = volc_get_global_hal_context();
if (hal) {
volc_hal_player_t player = hal->player_handle[VOLC_HAL_PLAYER_AUDIO];
volc_hal_player_play_data(player, silence, sizeof(silence));
volc_hal_player_finish_segment(player);
}
}
if (type && (strstr(type, "speech_") || strstr(type, "response."))) {
conv_service.wait_time = 0;
}
bool report = type && (!strcmp(type, "session.created") || !strcmp(type, "session.updated") ||
!strcmp(type, "conversation.item.input_audio_transcription.completed") ||
!strcmp(type, "response.audio_transcript.done"));
if (report && platform_report_queue && xQueueSend(platform_report_queue, &root, 0) == pdTRUE) {
root = NULL; /* Conversation task owns queued messages. */
} else if (report) {
LOGE("Platform report queue unavailable or full");
}
cJSON_Delete(root);
} else if (message_buffer[0] == 's' && message_buffer[1] == 'u' && message_buffer[2] == 'b' && message_buffer[3] == 'v') {
__on_subtitle_message_received(root);
conv_service.wait_time = 0;
} else if (message_buffer[0] == 't' && message_buffer[1] == 'o' && message_buffer[2] == 'o' && message_buffer[3] == 'l') {
// function calling 消息
aios_event_pub(VOLC_FUNCTION_CALL_EXEC, root, NULL);
}else if (message_buffer[0] == 'i' && message_buffer[1] == 'n' && message_buffer[2] == 'f' && message_buffer[3] == 'o') {
aios_event_pub(VOLC_FUNCTION_CALL_TRIGGER, root, NULL);
}
}
}
}
void conv_ai_service_init()
{
if (!platform_report_queue) platform_report_queue = xQueueCreate(8, sizeof(cJSON *));
snprintf(config_buf, sizeof(config_buf), CONV_AI_CONFIG_FORMAT,
platform_runtime_instance_id(),
platform_runtime_product_key(),
platform_runtime_device_secret(),
platform_runtime_device_name());
conv_service.volc_event_handler = (volc_event_handler_t){
.on_volc_event = __on_volc_event,
.on_volc_conversation_status = __on_volc_conversation_status,
.on_volc_audio_data = __on_volc_audio_data,
.on_volc_video_data = __on_volc_video_data,
.on_volc_message_data = __on_volc_message_data,
};
int ret = volc_create(&conv_service.engine, config_buf, &conv_service.volc_event_handler, &conv_service);
if (ret != 0) {
LOGE("volc_create failed, ret: %d", ret);
return;
} else {
LOGE("volc_create success");
}
}
void conv_ai_service_task(void *pvParameters)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
char* status_str = NULL;
bool provider_started = false;
bool audio_started = false;
session_started_reported = false;
provider_disconnected = false;
if (g_hal_context == NULL) {
LOGE("volc_get_global_hal_context failed");
status_str = "系统未初始化,ai对话连接失败";
goto CONV_AI_QUIT;
}
global_display = g_hal_context->display_handle;
int ret = 0;
volc_hal_display_set_content(global_display, VOLC_DISPLAY_OBJ_STATUS,VOLC_DISPLAY_TEXT, "ai对话创建中");
ret = platform_conversation_begin();
if (ret != 0) {
LOGE("platform_conversation_begin failed, ret: %d", ret);
status_str = "平台会话创建失败";
if (strcmp(platform_last_error_code(), "FIRMWARE_UPDATE_REQUIRED") == 0) {
status_str = "平台要求更新固件";
}
goto CONV_AI_QUIT;
}
/* Capture may run while the WebSocket is still handshaking. Hold frames
* until volc_start has moved the engine into STARTED state. */
is_stop = true;
// step 1: start audio capture & play
volc_hal_capture_config_t capture_audio_config = {0};
capture_audio_config.media_type = VOLC_MEDIA_TYPE_AUDIO;
capture_audio_config.data_cb = __audio_capture_cb;
// capture_audio_config.audio_wakeup_cb = (volc_hal_audio_wakeup_cb_t)rec_engine_cb;
capture_audio_config.user_data = g_hal_context;
volc_hal_capture_t capture_handle = g_hal_context->capture_handle[VOLC_HAL_PLAYER_AUDIO];
if (g_hal_context->capture_handle[VOLC_HAL_PLAYER_AUDIO] == NULL) {
g_hal_context->capture_handle[VOLC_HAL_PLAYER_AUDIO] = volc_hal_capture_create(&capture_audio_config);
capture_handle = g_hal_context->capture_handle[VOLC_HAL_PLAYER_AUDIO];
}
audio_started = true;
volc_hal_capture_stop(g_hal_context->capture_handle[VOLC_HAL_CAPTURE_AUDIO]);
volc_hal_capture_update_config(capture_handle, &capture_audio_config);
volc_hal_capture_start(g_hal_context->capture_handle[VOLC_HAL_PLAYER_AUDIO], VOLC_AUDIO_MODE_CAPTURE);
volc_hal_player_config_t player_audio_config = {0};
player_audio_config.media_type = VOLC_MEDIA_TYPE_AUDIO;
if (g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO] == NULL) {
g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO] = volc_hal_player_create(&player_audio_config);
}
volc_hal_display_set_content(global_display, VOLC_DISPLAY_OBJ_STATUS, VOLC_DISPLAY_TEXT, "ai对话连接中");
volc_hal_player_start(g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO]);
// step 2: start ai conversation
const char *session_update = platform_conversation_update_json();
size_t params_size = strlen(session_update) + 64;
char *params = volc_osal_malloc(params_size);
if (params == NULL) {
status_str = "会话配置内存不足";
goto CONV_AI_QUIT;
}
snprintf(params, params_size, "{\"audio\":{\"codec\":0},\"session_update\":%s}", session_update);
volc_opt_t opt = {
.mode = VOLC_MODE_WS,
.bot_id = (char *)platform_conversation_bot_id(),
.params = params,
};
#if defined ENABLE_PLAY_WELCOME
aios_event_pub(VOLC_LOCAL_LOGIC_PLAY_WELCOME, NULL, NULL);
#endif
ret = volc_start(conv_service.engine, &opt);
volc_osal_free(params);
if (ret != 0) {
LOGE("volc_start failed, ret: %d", ret);
status_str = "ai对话连接失败,准备退出";
goto CONV_AI_QUIT;
}
provider_started = true;
volc_hal_display_set_content(global_display, VOLC_DISPLAY_OBJ_STATUS, VOLC_DISPLAY_TEXT, "ai对话已连接");
is_stop = false;
while (!is_stop && !provider_disconnected) {
process_platform_reports();
if (session_started_reported && platform_conversation_poll()) {
status_str = "平台已结束本次对话";
goto CONV_AI_QUIT;
}
if (diagnostic_say_pending && session_started_reported) {
diagnostic_say_pending = false;
char request[640];
snprintf(request, sizeof(request), "{\"event_id\":\"diag-%llu\",\"type\":\"conversation.item.create\",\"item\":{\"type\":\"message\",\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"请只说这句话:你好,这是语音播放测试。现在使用自然的语速,连续清楚地说完这句话。\"}],\"interrupt_mode\":1}}", (unsigned long long)volc_osal_get_time_ms());
volc_message_info_t info = {.is_binary = false};
int sent = volc_send_message(conv_service.engine, request, strlen(request), &info);
LOGI("PLAYBACK diagnostic sentence requested ret=%d", sent);
const char *respond = "{\"type\":\"response.create\",\"response\":{\"modalities\":[\"text\",\"audio\"]}}";
volc_send_message(conv_service.engine, respond, strlen(respond), &info);
conv_service.wait_time = 0;
}
sleep(1);
conv_service.wait_time++;
if(conv_service.wait_time >= CONV_SERVICE_TIMEOUT){
status_str = "ai对话已超时,准备退出";
goto CONV_AI_QUIT;
}
}
status_str = "ai对话已断开";
CONV_AI_QUIT:
is_stop = true;
// volc_hal_file_close(audioFile);
volc_stop(conv_service.engine);
process_platform_reports();
platform_conversation_finish(!provider_started || !session_started_reported,
!provider_started ? "VOLC_START_FAILED" : (!session_started_reported ? "SESSION_UPDATE_NOT_CONFIRMED" : NULL));
if (g_hal_context && audio_started) {
volc_hal_capture_stop(g_hal_context->capture_handle[VOLC_HAL_CAPTURE_AUDIO]);
if (g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO]) {
volc_hal_player_stop(g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO]);
volc_hal_player_destroy(g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO]);
g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO] = NULL;
}
}
if(status_str != NULL){
volc_hal_display_set_content(global_display, VOLC_DISPLAY_OBJ_STATUS, VOLC_DISPLAY_TEXT, status_str);
}
volc_hal_display_set_content(global_display, VOLC_DISPLAY_OBJ_SUBTITLE, VOLC_DISPLAY_TEXT, "");
conv_service.wait_time = 0;
// just show the status: Ai对话已断开
sleep(1);
if (g_hal_context && audio_started) {
volc_hal_capture_start(g_hal_context->capture_handle[VOLC_HAL_CAPTURE_AUDIO],VOLC_AUDIO_MODE_WAKEUP);
}
aios_event_pub(VOLC_SERVICE_AI_CONVERSATION_OVER, NULL, NULL);
volc_osal_thread_exit(NULL);
}
void conv_ai_service_task_stop(void)
{
// sleep for AI Agent say goodbye
sleep(1);
is_stop = true;
}
#if __cplusplus
}
#endif
@@ -0,0 +1,84 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <stdio.h>
#include "aios.h"
#include "volc_hal.h"
#include "volc_osal.h"
#include "volc_hal_display.h"
#include "volc_hal_file.h"
#include "volc_service_common.h"
#include "volc_conv_service.h"
#include "volc_conv.h"
#if __cplusplus
extern "C" {
#endif
typedef struct volc_conv_service_manager {
aios_session_t super;
volc_osal_tid_t conv_thread_id;
} volc_conv_service_manager_t;
volc_conv_service_manager_t volc_conv_service_manager;
static aios_ret_t __state_conversation(volc_conv_service_manager_t * const me, aios_event_t const * const e)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if (g_hal_context == NULL) {
return AIOS_Ret_NotHandled;
}
volc_hal_display_t global_display = g_hal_context->display_handle;
switch (e->id) {
case VOLC_SERVICE_AI_CONVERSATION_START:
if (me->conv_thread_id == NULL) {
volc_osal_thread_param_t param = {0};
volc_hal_display_set_content(global_display,VOLC_DISPLAY_OBJ_STATUS,VOLC_DISPLAY_TEXT,"ai对话启动中");
snprintf(param.name, sizeof(param.name), "%s", "conv_ai");
param.stack_size = 8*1024;
param.priority = 5;
param.stack_in_ext = 1;
volc_osal_thread_create(&me->conv_thread_id, &param, conv_ai_service_task,NULL);
}
return AIOS_Ret_Handled;
case VOLC_SERVICE_AI_CONVERSATION_INTERRUPT:
return AIOS_Ret_Handled;
// control the Ai_Conversation task quit
case VOLC_SERVICE_AI_CONVERSATION_QUIT:
if (me->conv_thread_id != NULL) {
conv_ai_service_task_stop();
me->conv_thread_id = NULL;
}
return AIOS_Ret_Handled;
// notice the Ai_Conversation over by task
case VOLC_SERVICE_AI_CONVERSATION_OVER:
if (me->conv_thread_id != NULL) {
me->conv_thread_id = NULL;
}
return AIOS_Ret_Handled;
default:
return AIOS_Ret_NotHandled;
}
}
static aios_ret_t __state_init(volc_conv_service_manager_t * const me, aios_event_t const * const e)
{
AIOS_EVENT_SUB(VOLC_SERVICE_AI_CONVERSATION_START); // 订阅事件
AIOS_EVENT_SUB(VOLC_SERVICE_AI_CONVERSATION_INTERRUPT); // 订阅事件
AIOS_EVENT_SUB(VOLC_SERVICE_AI_CONVERSATION_QUIT); // 订阅事件
AIOS_EVENT_SUB(VOLC_SERVICE_AI_CONVERSATION_OVER); // 订阅事件
me->conv_thread_id = NULL;
conv_ai_service_init();
return AIOS_TRAN(__state_conversation);
}
void volc_conv_service_manager_init(void)
{
aios_session_init(&volc_conv_service_manager.super, VOLC_SERVICE_PRIORITY_AI_CONVERSATION, NULL);
aios_session_start(&volc_conv_service_manager.super, AIOS_STATE_CAST(__state_init));
}
#if __cplusplus
}
#endif
@@ -0,0 +1,9 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef VOLC_FUNCTION_CALL_SERVICE_H__
#define VOLC_FUNCTION_CALL_SERVICE_H__
void function_call_service_init();
#endif /* VOLC_FUNCTION_CALL_SERVICE_H__ */
@@ -0,0 +1,9 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef VOLC_LOCAL_FUNCTION_LIST_H__
#define VOLC_LOCAL_FUNCTION_LIST_H__
void adjust_audio_val(const char* action);
#endif
@@ -0,0 +1,134 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <string.h>
#include "cJSON.h"
#include "volc_service_common.h"
#include "volc_conv.h"
#include "volc_function_call_service.h"
#include "volc_local_function_list.h"
#include "aios.h"
#include <stdio.h>
#if __cplusplus
extern "C" {
#endif
typedef struct volc_function_call_service {
aios_session_t super;
} volc_function_call_service_t;
volc_function_call_service_t g_volc_function_call_service;
static void __on_function_calling_message_received(const cJSON *root)
{
/*
{
"subscriber_user_id" : "",
"tool_calls" :
[
{
"function" :
{
"arguments" : "{\\"location\\": \\"\\u5317\\u4eac\\u5e02\\"}",
"name" : "get_current_weather"
},
"id" : "call_py400kek0e3pczrqdxgnb3lo",
"type" : "function"
}
]
}
*/
cJSON *tool_obj_arr = cJSON_GetObjectItem(root, "tool_calls");
cJSON *obji = NULL;
cJSON_ArrayForEach(obji, tool_obj_arr)
{
cJSON *id_obj = cJSON_GetObjectItem(obji, "id");
cJSON *function_obj = cJSON_GetObjectItem(obji, "function");
if (id_obj && function_obj)
{
cJSON *arguments_obj = cJSON_GetObjectItem(function_obj, "arguments");
cJSON *name_obj = cJSON_GetObjectItem(function_obj, "name");
char *arguments_json_str = cJSON_GetStringValue(arguments_obj);
const char *func_name = cJSON_GetStringValue(name_obj);
const char *func_id = cJSON_GetStringValue(id_obj);
if (strcmp(func_name, "adjust_audio_val") == 0 && arguments_json_str)
{
cJSON *arguments_json = cJSON_Parse(arguments_json_str);
cJSON *action_obj = cJSON_GetObjectItem(arguments_json, "action");
const char *action = (action_obj->valuestring);
adjust_audio_val(action);
volc_conv_service_t conv_service = get_conv_ai_service();
cJSON *fc_obj = cJSON_CreateObject();
cJSON_AddStringToObject(fc_obj, "ToolCallID", func_id);
cJSON_AddStringToObject(fc_obj, "Content", "音量已经调整了");
char *json_string = cJSON_Print(fc_obj);
static char fc_message_buffer[256] = {'f', 'u', 'n', 'c'};
int json_str_len = strlen(json_string);
fc_message_buffer[4] = (json_str_len >> 24) & 0xff;
fc_message_buffer[5] = (json_str_len >> 16) & 0xff;
fc_message_buffer[6] = (json_str_len >> 8) & 0xff;
fc_message_buffer[7] = (json_str_len >> 0) & 0xff;
memcpy(fc_message_buffer + 8, json_string, json_str_len);
cJSON_Delete(fc_obj);
volc_message_info_t info = {0};
info.is_binary = 1;
volc_send_message(conv_service.engine, fc_message_buffer, json_str_len + 8, &info);
}
}
}
cJSON_Delete(root);
}
void __on_function_calling_trigger(const cJSON *root)
{
/*
{
"event_type": "function_calling", // 事件类型,固定为此值
"function": "get_current_weather", // 被触发的函数名,与您在 StartVoiceChat 中定义的名称一致
"tool_call_id": "call_12345", // 本次函数调用的唯一ID,后续回传结果时需要用到
"response_id": "resp_abcde" // 本次响应的唯一ID,可用于问题排查
}
*/
cJSON *event_type_obj = cJSON_GetObjectItemCaseSensitive(root, "event_type");
if(event_type_obj && strcmp(event_type_obj->valuestring, "function_calling") == 0 ) {
cJSON *function_obj = cJSON_GetObjectItemCaseSensitive(root, "function");
if(function_obj && strcmp(function_obj->valuestring, "adjust_audio_val") == 0){
volc_conv_service_t conv_service = get_conv_ai_service();
volc_send_text_to_agent(conv_service.engine, "别着急,我来给你调整音量", VOLC_AGENT_TYPE_TTS,2);
}
}
cJSON_Delete(root);
}
static aios_ret_t __state_conversation(volc_function_call_service_t * const me, aios_event_t const * const e)
{
switch (e->id) {
case VOLC_FUNCTION_CALL_EXEC:
__on_function_calling_message_received((const cJSON *)e->data);
return AIOS_Ret_Handled;
case VOLC_FUNCTION_CALL_TRIGGER:
__on_function_calling_trigger((const cJSON *)e->data);
return AIOS_Ret_Handled;
}
}
static aios_ret_t __state_init(volc_function_call_service_t * const me, aios_event_t const * const e)
{
AIOS_EVENT_SUB(VOLC_FUNCTION_CALL_EXEC); // 订阅事件
AIOS_EVENT_SUB(VOLC_FUNCTION_CALL_TRIGGER); // 订阅事件
return AIOS_TRAN(__state_conversation);
}
void function_call_service_init(void){
aios_session_init(&g_volc_function_call_service.super, VOLC_SERVICE_PRIORITY_FUNCTION_CALL, NULL);
aios_session_start(&g_volc_function_call_service.super, AIOS_STATE_CAST(__state_init));
}
#if __cplusplus
}
#endif
@@ -0,0 +1,41 @@
#include "volc_local_function_list.h"
#include "volc_hal.h"
#include "volc_hal_player.h"
#include <string.h>
void __volc_up_audio_val()
{
volc_hal_context_t *g_hal_context = volc_get_global_hal_context();
if (g_hal_context == NULL)
{
return;
}
int volc_audio_vol = volc_hal_get_audio_player_volume(g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO]);
volc_audio_vol = (volc_audio_vol + 10) <= 100 ? (volc_audio_vol + 10) : 100;
volc_hal_set_audio_player_volume(g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO], volc_audio_vol);
}
void __volc_down_audio_val()
{
volc_hal_context_t *g_hal_context = volc_get_global_hal_context();
if (g_hal_context == NULL)
{
return;
}
int volc_audio_vol = volc_hal_get_audio_player_volume(g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO]);
volc_audio_vol = (volc_audio_vol - 10) <= 0 ? 0 : (volc_audio_vol - 10);
volc_hal_set_audio_player_volume(g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO], volc_audio_vol);
}
void adjust_audio_val(const char *action)
{
if (strcmp(action, "up") == 0)
{
__volc_up_audio_val();
}
else if (strcmp(action, "down") == 0)
{
__volc_down_audio_val();
}
}
@@ -0,0 +1,11 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef VOLC_SERVICE_MANAGER_H__
#define VOLC_SERVICE_MANAGER_H__
#include <stdbool.h>
#include "aios.h"
void volc_service_manager_init(void);
#endif /* VOLC_SERVICE_MANAGER_H__ */
@@ -0,0 +1,38 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef VOLC_CONV_COMMON_H__
#define VOLC_CONV_COMMON_H__
#include "aios.h"
enum {
VOLC_SERVICE_EVENT_TEST = Event_User,
VOLC_SERVICE_NETWORK_CONFIG,
VOLC_SERVICE_AI_CONVERSATION,
// Ai_Conversation event:
VOLC_SERVICE_AI_CONVERSATION_START = 100,
VOLC_SERVICE_AI_CONVERSATION_INTERRUPT = 101,
VOLC_SERVICE_AI_CONVERSATION_QUIT = 102, // control the Ai_Conversation task quit
VOLC_SERVICE_AI_CONVERSATION_OVER = 103, // notice the Ai_Conversation over by task
// function_call event:
VOLC_FUNCTION_CALL_EXEC = 200,
VOLC_FUNCTION_CALL_TRIGGER = 201,
// local logic event:
VOLC_LOCAL_LOGIC_PLAY_WELCOME = 300,
VOLC_LOCAL_LOGIC_PROCESS_SUBTITLE = 301,
VOLC_SERVICE_EVENT_MAX,
};
enum {
VOLC_SERVICE_PRIORITY_AI_CONVERSATION = 0,
VOLC_SERVICE_PRIORITY_FUNCTION_CALL,
VOLC_SERVICE_PRIORITY_LOCAL_LOGIC,
VOLC_SERVICE_PRIORITY_APP_MANAGER,
};
#endif /* VOLC_CONV_COMMON_H__ */
@@ -0,0 +1,9 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#ifndef VOLC_LOCAL_LOGIC_SERVICE_H__
#define VOLC_LOCAL_LOGIC_SERVICE_H__
void local_logic_service_init();
#endif /* VOLC_LOCAL_LOGIC_SERVICE_H__ */
@@ -0,0 +1,99 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include <string.h>
#include "volc_conv_ai.h"
#include "volc_service_common.h"
#include "aios.h"
#include "volc_conv.h"
#include "volc_hal.h"
#include "volc_hal_file.h"
#include "volc_hal_player.h"
#if __cplusplus
extern "C" {
#endif
static const char *welcome_audio_file_name = "/sdcard/wel.pcm";
typedef struct volc_local_logic_service {
aios_session_t super;
} volc_local_logic_service_t;
volc_local_logic_service_t g_volc_local_logic_service;
static int has_quit = 0;
static void __play_welcome(){
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL) return;
volc_hal_player_t player = g_hal_context->player_handle[VOLC_HAL_PLAYER_AUDIO];
volc_hal_file_t* audioFile = volc_hal_file_open(welcome_audio_file_name, "rb");
if(audioFile == NULL) return;
char audio_data[160];
if(player){
int offset = 0;
uint64_t size = volc_hal_file_get_size(audioFile);
while(offset < size - 160){
volc_hal_file_read(audioFile,audio_data,160);
volc_hal_player_play_data(player, audio_data, 160);
offset += 160;
}
}
volc_hal_file_close(audioFile);
return;
}
static int __has_substring(const char *haystack, const char *needle) {
// 处理边界:子串为空串,按惯例返回包含(可根据需求调整)
if (needle[0] == '\0') {
return 1;
}
// strstr 返回非 NULL 表示找到子串
return strstr(haystack, needle) != NULL ? 1 : 0;
}
static void __parser_and_process_subtitle(char *subtitle)
{
volc_conv_service_t conv_service = get_conv_ai_service();
if (__has_substring(subtitle, "退下吧") || __has_substring(subtitle, "拜拜"))
{
if (!has_quit)
{
volc_send_text_to_agent(conv_service.engine, "好的拜拜", VOLC_AGENT_TYPE_TTS, 1);
has_quit = 1;
}
}
if (__has_substring(subtitle, "好的拜拜"))
{
aios_event_pub(VOLC_SERVICE_AI_CONVERSATION_QUIT, NULL, NULL);
has_quit = 0;
}
}
static aios_ret_t __state_conversation(volc_local_logic_service_t * const me, aios_event_t const * const e)
{
switch (e->id) {
case VOLC_LOCAL_LOGIC_PLAY_WELCOME:
__play_welcome();
return AIOS_Ret_Handled;
case VOLC_LOCAL_LOGIC_PROCESS_SUBTITLE:
__parser_and_process_subtitle(e->data);
return AIOS_Ret_Handled;
}
}
static aios_ret_t __state_init(volc_local_logic_service_t * const me, aios_event_t const * const e)
{
AIOS_EVENT_SUB(VOLC_LOCAL_LOGIC_PLAY_WELCOME); // 订阅事件
AIOS_EVENT_SUB(VOLC_LOCAL_LOGIC_PROCESS_SUBTITLE); // 订阅事件
return AIOS_TRAN(__state_conversation);
}
void local_logic_service_init(void){
aios_session_init(&g_volc_local_logic_service.super, VOLC_SERVICE_PRIORITY_LOCAL_LOGIC, NULL);
aios_session_start(&g_volc_local_logic_service.super, AIOS_STATE_CAST(__state_init));
}
#if __cplusplus
}
#endif
@@ -0,0 +1,43 @@
// Copyright (2025) Beijing Volcano Engine Technology Ltd.
// SPDX-License-Identifier: Apache-2.0
#include "volc_hal.h"
#include "volc_manager_service.h"
#include "volc_conv_service.h"
#include "volc_service_common.h"
typedef struct volc_service_manager {
aios_session_t super;
} volc_service_manager_t;
volc_service_manager_t volc_service_manager;
static aios_ret_t __state_wait_service_event(volc_service_manager_t* const me, aios_event_t const * const e)
{
volc_hal_context_t* g_hal_context = volc_get_global_hal_context();
if(g_hal_context == NULL){
return AIOS_Ret_NotHandled;
}
switch ((int)e->id) {
case VOLC_SERVICE_NETWORK_CONFIG:
return AIOS_Ret_Handled;
case VOLC_SERVICE_AI_CONVERSATION:
aios_event_pub(VOLC_SERVICE_AI_CONVERSATION_START, NULL, NULL);
return AIOS_Ret_Handled;
default:
return AIOS_Ret_NotHandled;
}
}
static aios_ret_t __state_init(volc_service_manager_t* const me, aios_event_t const * const e)
{
AIOS_EVENT_SUB(VOLC_SERVICE_NETWORK_CONFIG); // 订阅事件
AIOS_EVENT_SUB(VOLC_SERVICE_AI_CONVERSATION); // 订阅事件
return AIOS_TRAN(__state_wait_service_event);
}
void volc_service_manager_init(void)
{
aios_session_init(&volc_service_manager.super, VOLC_SERVICE_PRIORITY_APP_MANAGER, NULL);
aios_session_start(&volc_service_manager.super, AIOS_STATE_CAST(__state_init));
}
@@ -0,0 +1,8 @@
#ifndef __VOLC_CONFIG_H__
#define __VOLC_CONFIG_H__
#ifndef VOLC_LCD_DISPLAY
#define VOLC_LCD_DISPLAY 1(CONFIG_)
#endif
#endif