800*320工程文件+初始demo提交

This commit is contained in:
2024-03-07 16:46:43 +08:00
parent 33e6eb45b3
commit 70ec3005bb
3306 changed files with 3374364 additions and 2563 deletions

View File

@ -0,0 +1,181 @@
/*
* FreeRTOS V202112.00
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Permission is hereby granted, 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.
*
* http://www.FreeRTOS.org
* http://aws.amazon.com/freertos
*
* 1 tab == 4 spaces!
*/
/******************************************************************************
See http://www.freertos.org/a00110.html for an explanation of the
definitions contained in this file.
******************************************************************************/
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
#include "app_config.h"
/*-----------------------------------------------------------
* Application specific definitions.
*
* These definitions should be adjusted for your particular hardware and
* application requirements.
*
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
* http://www.freertos.org/a00110.html
*----------------------------------------------------------*/
extern uint32_t SystemCoreClock;
/* Cortex M33 port configuration. */
#define configENABLE_MPU 0
#define configENABLE_FPU 1
#define configENABLE_TRUSTZONE 0
/* Constants related to the behaviour or the scheduler. */
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 1
#define configMAX_PRIORITIES ( FREERTOS_MAX_PRIORITY )
#define configIDLE_SHOULD_YIELD 1
#define configUSE_16_BIT_TICKS 0 /* Only for 8 and 16-bit hardware. */
/* Constants that describe the hardware and memory usage. */
#define configCPU_CLOCK_HZ SystemCoreClock
#define configMINIMAL_STACK_SIZE ( ( uint16_t ) 128 )
#define configMINIMAL_SECURE_STACK_SIZE ( 1024 )
#define configMAX_TASK_NAME_LEN ( 12 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 0x19400 ) )//( ( size_t ) ( 0x19000 ) )
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
/* Constants that build features in or out. */
#define configUSE_MUTEXES 1
#define configUSE_TICKLESS_IDLE 1
#define configUSE_APPLICATION_TASK_TAG 0
#define configUSE_NEWLIB_REENTRANT 0
#define configUSE_CO_ROUTINES 0
#define configUSE_COUNTING_SEMAPHORES 1
#define configUSE_RECURSIVE_MUTEXES 1
#define configUSE_QUEUE_SETS 1
#define configUSE_TASK_NOTIFICATIONS 1
#define configUSE_TRACE_FACILITY 1
/* Constants that define which hook (callback) functions should be used. */
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 1
#define configUSE_MALLOC_FAILED_HOOK 0
/* Constants provided for debugging and optimisation assistance. */
#define configCHECK_FOR_STACK_OVERFLOW 2
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
#define configQUEUE_REGISTRY_SIZE 0
/* Software timer definitions. */
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY ( 3 )
#define configTIMER_QUEUE_LENGTH 15
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE )
/* Set the following definitions to 1 to include the API function, or zero
* to exclude the API function. NOTE: Setting an INCLUDE_ parameter to 0 is
* only necessary if the linker does not automatically remove functions that are
* not referenced anyway. */
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskAbortDelay 1
#define INCLUDE_uxTaskGetStackHighWaterMark 0
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_xTaskGetHandle 1
#define INCLUDE_eTaskGetState 1
#define INCLUDE_xTaskResumeFromISR 0
#define INCLUDE_xTaskGetCurrentTaskHandle 1
#define INCLUDE_xTaskGetSchedulerState 0
#define INCLUDE_xSemaphoreGetMutexHolder 1
#define INCLUDE_xTimerPendFunctionCall 1
/* This demo makes use of one or more example stats formatting functions. These
* format the raw data provided by the uxTaskGetSystemState() function in to
* human readable ASCII form. See the notes in the implementation of vTaskList()
* within FreeRTOS/Source/tasks.c for limitations. */
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
/* Dimensions a buffer that can be used by the FreeRTOS+CLI command interpreter.
* See the FreeRTOS+CLI documentation for more information:
* http://www.FreeRTOS.org/FreeRTOS-Plus/FreeRTOS_Plus_CLI/ */
#define configCOMMAND_INT_MAX_OUTPUT_SIZE 2048
/* Interrupt priority configuration follows...................... */
/* Use the system definition, if there is one. */
#ifdef __NVIC_PRIO_BITS
#define configPRIO_BITS __NVIC_PRIO_BITS
#else
#define configPRIO_BITS 3 /* 8 priority levels. */
#endif
/* The lowest interrupt priority that can be used in a call to a "set priority"
* function. */
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0x07
/* The highest interrupt priority that can be used by any interrupt service
* routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT
* CALL INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A
* HIGHER PRIORITY THAN THIS! (higher priorities are lower numeric values). */
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 1
/* Interrupt priorities used by the kernel port layer itself. These are generic
* to all Cortex-M ports, and do not rely on any particular library functions. */
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << ( 8 - configPRIO_BITS ) )
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
* See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << ( 8 - configPRIO_BITS ) )
#if ENABLE_RTOS_MONITOR == 1
/* Constants related to the generation of run time stats. */
#define configGENERATE_RUN_TIME_STATS 1
#define configUSE_TRACE_FACILITY 1
#define configUSE_STATS_FORMATTING_FUNCTIONS 1
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
extern volatile unsigned int CPU_RunTime;
#define portGET_RUN_TIME_COUNTER_VALUE() CPU_RunTime
#define traceINCREASE_TICK_COUNT(x) do { \
void lv_tick_inc(uint32_t tick_period); \
lv_tick_inc(x); \
CPU_RunTime += x; \
} while (0)
#else
#define traceINCREASE_TICK_COUNT(x) lv_tick_inc(x)
#endif /* ENABLE_RTOS_MONITOR == 1 */
/* Enable static allocation. */
#define configSUPPORT_STATIC_ALLOCATION 0
#endif /* FREERTOS_CONFIG_H */

View File

@ -0,0 +1,312 @@
#ifndef _APP_CONFIG_H
#define _APP_CONFIG_H
// <<< Use Configuration Wizard in Context Menu >>>
/* ========================================================== */
/* ========= System configuration ========= */
/* ========================================================== */
// <h> System Configuration
#define BOARD_EVB_FR5090 1
#define BOARD_EVB_FR3092E 2
#define BOARD_EVB_FR3092E_CM 3
#define BOARD_EVB_FR3092E_RGB 4
// <o> BOARD_SEL
// <i> board EVB selection, default: BOARD_EVB_FR5090
// <1=> BOARD_EVB_FR5090
// <2=> BOARD_EVB_FR3092E
// <3=> BOARD_EVB_FR3092E_CM
#define BOARD_SEL 4
// <o> ENABLE_PSRAM
// <i> check to enable psram or not, default: No
// <0=> NO
// <1=> YES
#define ENABLE_PSRAM 0
// <o> DSP_ROM_CODE_XIP
// <i> check to choose DSP rom code running in iROM or XIP-Flash, default: iROM
// <0=> NO
// <1=> YES
#define DSP_ROM_CODE_XIP 0
#define DSP_CODE_LOAD_MODE_SDCARD 1
#define DSP_CODE_LOAD_MODE_XIP_RO 2
#define DSP_CODE_LOAD_MODE_FIX_ADDRESS 3
// <o> DSP_CODE_LOAD_MODE
// <i> choose dsp code load mode: 1. from sd card; 2. compiled into XIP bin file; 3. from fixed address in XIP flash
// <1=> DSP_CODE_LOAD_MODE_SDCARD
// <2=> DSP_CODE_LOAD_MODE_XIP_RO
// <3=> DSP_CODE_LOAD_MODE_FIX_ADDRESS
#define DSP_CODE_LOAD_MODE 2
// <o> DSP_CODE_FIX_ADDRESS
// <i> used to define where to fetch dsp code, this defination is valid when DSP_CODE_LOAD_MODE is DSP_CODE_LOAD_MODE_FIX_ADDRESS
#define DSP_CODE_FIX_ADDRESS 0x001C0000
#define CONTROLLER_CODE_LOAD_MODE_SDCARD 1
#define CONTROLLER_CODE_LOAD_MODE_XIP_RO 2
#define CONTROLLER_CODE_LOAD_MODE_FIX_ADDRESS 3
// <o> CONTROLLER_CODE_LOAD_MODE
// <i> choose dsp code load mode: 1. from sd card; 2. compiled into XIP bin file; 3. from fixed address in XIP flash
// <1=> CONTROLLER_CODE_LOAD_MODE_SDCARD
// <2=> CONTROLLER_CODE_LOAD_MODE_XIP_RO
// <3=> CONTROLLER_CODE_LOAD_MODE_FIX_ADDRESS
#define CONTROLLER_CODE_LOAD_MODE 2
// <o> CONTROLLER_CODE_INC_SENSOR_HUB
// <i> when CONTROLLER_CODE_LOAD_MODE is CONTROLLER_CODE_LOAD_MODE_XIP_RO, choose which firmware is commpiled into XIP bin file.
// <0=> NO
// <1=> YES
#define CONTROLLER_CODE_INC_SENSOR_HUB 0
// <o> CONTROLLER_CODE_FIX_ADDRESS
// <i> used to define where to fetch controller code, this defination is valid when CONTROLLER_CODE_LOAD_MODE is CONTROLLER_CODE_LOAD_MODE_FIX_ADDRESS
#define CONTROLLER_CODE_FIX_ADDRESS 0x001AC000
// </h>
/* ========================================================== */
/* ========= FreeRTOS configuration ========= */
/* ========================================================== */
// <h> FreeRTOS Configuration
// <o> ENABLE_RTOS_MONITOR
// <i> check to enable or disable RTOS monitor, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define ENABLE_RTOS_MONITOR 1
// <o> FREERTOS_MAX_PRIORITY
// <i> used to define priority of monitor task
// <1-10:1>
#define FREERTOS_MAX_PRIORITY 10
// <o> MONITOR_TASK_PRIORITY
// <i> used to define priority of monitor task, should not be larger than FREERTOS_MAX_PRIORITY
#define MONITOR_TASK_PRIORITY 1
#if MONITOR_TASK_PRIORITY > FREERTOS_MAX_PRIORITY
#error "MONITOR_TASK_PRIORITY should not be larger than FREERTOS_MAX_PRIORITY"
#endif
// <o> APP_TASK_PRIORITY
// <i> used to define priority of app task, should not be larger than FREERTOS_MAX_PRIORITY
#define APP_TASK_PRIORITY 2
#if APP_TASK_PRIORITY > FREERTOS_MAX_PRIORITY
#error "APP_TASK_PRIORITY should not be larger than FREERTOS_MAX_PRIORITY"
#endif
// <o> GUI_TASK_PRIORITY
// <i> used to define priority of gui task, should not be larger than FREERTOS_MAX_PRIORITY
#define GUI_TASK_PRIORITY 3
#if GUI_TASK_PRIORITY > FREERTOS_MAX_PRIORITY
#error "GUI_TASK_PRIORITY should not be larger than FREERTOS_MAX_PRIORITY"
#endif
// <o> SYNC_TASK_PRIORITY
// <i> used to define priority of sync task, should not be larger than FREERTOS_MAX_PRIORITY
#define SYNC_TASK_PRIORITY 3
#if SYNC_TASK_PRIORITY > FREERTOS_MAX_PRIORITY
#error "SYNC_TASK_PRIORITY should not be larger than FREERTOS_MAX_PRIORITY"
#endif
// <o> HOST_TASK_PRIORITY
// <i> used to define priority of host task, should not be larger than FREERTOS_MAX_PRIORITY
#define HOST_TASK_PRIORITY 5
#if HOST_TASK_PRIORITY > FREERTOS_MAX_PRIORITY
#error "HOST_TASK_PRIORITY should not be larger than FREERTOS_MAX_PRIORITY"
#endif
// <o> RPMSG_TASK_PRIORITY
// <i> used to define priority of rpmsg task, should not be larger than FREERTOS_MAX_PRIORITY
#define RPMSG_TASK_PRIORITY 6
#if RPMSG_TASK_PRIORITY > FREERTOS_MAX_PRIORITY
#error "RPMSG_TASK_PRIORITY should not be larger than FREERTOS_MAX_PRIORITY"
#endif
// <o> AUDIO_SCENE_TASK_PRIORITY
// <i> used to define priority of rpmsg task, should not be larger than FREERTOS_MAX_PRIORITY
#define AUDIO_SCENE_TASK_PRIORITY 6
#if AUDIO_SCENE_TASK_PRIORITY > FREERTOS_MAX_PRIORITY
#error "AUDIO_SCENE_TASK_PRIORITY should not be larger than FREERTOS_MAX_PRIORITY"
#endif
// <o> MONITOR_TASK_STACK_SIZE
// <i> used to define priority of monitor task
#define MONITOR_TASK_STACK_SIZE 128
// <o> APP_TASK_STACK_SIZE
// <i> used to define priority of APP task
#define APP_TASK_STACK_SIZE 2048 //256
// <o> GUI_TASK_STACK_SIZE
// <i> used to define priority of LVGL task
#define GUI_TASK_STACK_SIZE 2048
// <o> SYNC_TASK_STACK_SIZE
// <i> used to define priority of LVGL-SYNC task
#define SYNC_TASK_STACK_SIZE 2048
// <o> HOST_TASK_STACK_SIZE
// <i> used to define priority of btdm-host task
#define HOST_TASK_STACK_SIZE 2048
// <o> RPMSG_TASK_STACK_SIZE
// <i> used to define priority of RPMSG task
#define RPMSG_TASK_STACK_SIZE 2048
// <o> AUDIO_SCENE_TASK_STACK_SIZE
// <i> used to define priority of audio scene task
#define AUDIO_SCENE_TASK_STACK_SIZE 1024
// </h>
/* ========================================================== */
/* ========= DSP configuration ========= */
/* ========================================================== */
// <h> DSP Configuration
// <o> ENABLE_DSP
// <i> check to enable or disable DSP, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define ENABLE_DSP 1
// </h>
/* ========================================================== */
/* ========= BTDM configuration ========= */
/* ========================================================== */
// <h> BTDM STACK Configuration
// <o> BTDM_STACK_ENABLE
// <i> check to enable or disable bluetooth, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE 0
// <o> BTDM_STACK_HCI_BAUDRATE
// <i> check to enable or disable bluetooth, default: DISABLE
// <1500000=> 1500000
// <921600=> 921600
// <460800=> 460800
// <115200=> 115200
#define BTDM_STACK_HCI_BAUDRATE 1500000
// <o> BTDM_STACK_ENABLE_BT
// <i> check to enable or disable classic bluetooth, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_BT 0
// <o> BTDM_STACK_ENABLE_HF
// <i> check to enable or disable hand free, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_HF 0
// <o> BTDM_STACK_ENABLE_AG
// <i> check to enable or disable audio-gate, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_AG 0
// <o> BTDM_STACK_ENABLE_A2DP_SRC
// <i> check to enable or disable a2dp srouce, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_A2DP_SRC 0
// <o> BTDM_STACK_ENABLE_A2DP_SNK
// <i> check to enable or disable a2dp sink, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_A2DP_SNK 0
// <o> BTDM_STACK_ENABLE_AVRCP
// <i> check to enable or disable avrcp, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_AVRCP 0
// <o> BTDM_STACK_ENABLE_AAC
// <i> check to enable or disable aac codec, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_AAC 0
// <o> BTDM_STACK_ENABLE_PBAP
// <i> check to enable or disable pbap, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_PBAP 0
// <o> BTDM_STACK_ENABLE_SPP
// <i> check to enable or disable spp, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BTDM_STACK_ENABLE_SPP 0
// <o> BLE_PROFILE_ENABLE_HID
// <i> check to enable or disable hid profile, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BLE_PROFILE_HID 0
// <o> BLE_PROFILE_ENABLE_ANCS
// <i> check to enable or disable ANCS profile, default: DISABLE
// <0=> DISABLE
// <1=> ENABLE
#define BLE_PROFILE_ENABLE_ANCS 0
#if BTDM_STACK_ENABLE == 0
#if ((BTDM_STACK_ENABLE_BT == 1) \
|| (BLE_PROFILE_ENABLE_HID == 1) \
|| (BLE_PROFILE_ENABLE_ANCS == 1))
#error "BTDM_STACK_ENABLE should be set"
#endif
#endif
#if BTDM_STACK_ENABLE_BT == 0
#if ((BTDM_STACK_ENABLE_HF == 1) \
|| (BTDM_STACK_ENABLE_AG == 1) \
|| (BTDM_STACK_ENABLE_A2DP_SRC == 1) \
|| (BTDM_STACK_ENABLE_A2DP_SNK == 1) \
|| (BTDM_STACK_ENABLE_AVRCP == 1) \
|| (BTDM_STACK_ENABLE_AAC == 1))
#error "BTDM_STACK_ENABLE_BT should be set"
#endif
#endif
// </h>
/* ========================================================== */
/* ========= BTDM Address configuration ========= */
/* ========================================================== */
// <h> BTDM Address configuration
// <o> BT_ADDR_RANDOM_ENABLE
// <i> check to enable or disable random bt addr, default: ENABLE
// <0=> DISABLE
// <1=> ENABLE
#define BT_ADDR_RANDOM_ENABLE 1
// <o> BLE_ADDR_RANDOM_ENABLE
// <i> check to enable or disable random ble static addr, default: ENABLE
// <0=> DISABLE
// <1=> ENABLE
#define BLE_ADDR_RANDOM_ENABLE 1
// </h>
// <<< end of configuration section >>>
#endif // _APP_CONFIG_H

View File

@ -0,0 +1,77 @@
/*
* This file is part of the EasyLogger Library.
*
* Copyright (c) 2015-2016, Armink, <armink.ztl@gmail.com>
*
* Permission is hereby granted, 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.
*
* Function: It is the configure head file for this library.
* Created on: 2015-07-30
*/
#ifndef _ELOG_CFG_H_
#define _ELOG_CFG_H_
/*---------------------------------------------------------------------------*/
/* enable log output. */
#define ELOG_OUTPUT_ENABLE
/* setting static output log level. range: from ELOG_LVL_ASSERT to ELOG_LVL_VERBOSE */
#define ELOG_OUTPUT_LVL ELOG_LVL_VERBOSE
/* enable assert check */
#define ELOG_ASSERT_ENABLE
/* buffer size for every line's log */
#define ELOG_LINE_BUF_SIZE 512
/* output line number max length */
#define ELOG_LINE_NUM_MAX_LEN 5
/* output filter's tag max length */
#define ELOG_FILTER_TAG_MAX_LEN 20
/* output filter's keyword max length */
#define ELOG_FILTER_KW_MAX_LEN 30
/* output filter's tag level max num */
#define ELOG_FILTER_TAG_LVL_MAX_NUM 5
/* output newline sign */
#define ELOG_NEWLINE_SIGN "\r\n"
/*---------------------------------------------------------------------------*/
/* enable log color */
#define ELOG_COLOR_ENABLE
/* change the some level logs to not default color if you want */
#define ELOG_COLOR_ASSERT (F_MAGENTA B_NULL S_NORMAL)
#define ELOG_COLOR_ERROR (F_RED B_NULL S_NORMAL)
#define ELOG_COLOR_WARN (F_YELLOW B_NULL S_NORMAL)
#define ELOG_COLOR_INFO (F_CYAN B_NULL S_NORMAL)
#define ELOG_COLOR_DEBUG (F_GREEN B_NULL S_NORMAL)
#define ELOG_COLOR_VERBOSE (F_BLUE B_NULL S_NORMAL)
/*---------------------------------------------------------------------------*/
/* enable asynchronous output mode */
//#define ELOG_ASYNC_OUTPUT_ENABLE
/* the highest output level for async mode, other level will sync output */
#define ELOG_ASYNC_OUTPUT_LVL ELOG_LVL_DEBUG
/* buffer size for asynchronous output mode */
#define ELOG_ASYNC_OUTPUT_BUF_SIZE (ELOG_LINE_BUF_SIZE * 10)
/* each asynchronous output's log which must end with newline sign */
#define ELOG_ASYNC_LINE_OUTPUT
/* asynchronous output mode using POSIX pthread implementation */
///#define ELOG_ASYNC_OUTPUT_USING_PTHREAD
/*---------------------------------------------------------------------------*/
/* enable buffered output mode */
//#define ELOG_BUF_OUTPUT_ENABLE
/* buffer size for buffered output mode */
#define ELOG_BUF_OUTPUT_BUF_SIZE (ELOG_LINE_BUF_SIZE * 10)
#endif /* _ELOG_CFG_H_ */

View File

@ -0,0 +1,40 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-05-17 armink the first version
*/
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include "app_config.h"
#define FAL_DEBUG 1
#define FAL_PART_HAS_TABLE_CFG
#define FAL_USING_SFUD_PORT
#define NOR_FLASH_DEV_NAME "norflash0"
/* ===================== Flash device Configuration ========================= */
extern const struct fal_flash_dev onchip_flash;
//extern struct fal_flash_dev nor_flash0;
/* flash device table */
#define FAL_FLASH_DEV_TABLE \
{ \
&onchip_flash, \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WORD, "FlashEnv", "flashdb_onchip", CONTROLLER_CODE_FIX_ADDRESS - 12*1024, 12*1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* _FAL_CFG_H_ */

View File

@ -0,0 +1,786 @@
/**
* @file lv_conf.h
* Configuration file for v8.3.0
*/
/*
* Copy this file as `lv_conf.h`
* 1. simply next to the `lvgl` folder
* 2. or any other places and
* - define `LV_CONF_INCLUDE_SIMPLE`
* - add the path as include path
*/
/* clang-format off */
#if 1 /*Set it to "1" to enable content*/
#ifndef LV_CONF_H
#define LV_CONF_H
#include <stdint.h>
/*====================
CUSTOM SETTINGS
*====================*/
#define LVGL_AUTO_CREATE_PAGE
#define FAST_SCR_BUFFER
#ifdef FAST_SCR_BUFFER
#define BUFFER_HOR_RES_MAX (480)
#define DECODE_LINE_NUMBER (56)
#define DECODE_BUFFER_SIZE (BUFFER_HOR_RES_MAX*DECODE_LINE_NUMBER*2)
//extern uint32_t fast_scr[];
extern uint32_t display_framebuffer_block[];
#define fast_scr display_framebuffer_block
#include "fr30xx.h"
extern void extern_flash_read(uint8_t *Buffer, uint32_t flash_Address, uint32_t Length);
#define internal_flash_read(x, y, z) flash_read(QSPI0, x, y, z)
#endif
/*====================
COLOR SETTINGS
*====================*/
/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 16
/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/
#define LV_COLOR_16_SWAP 0
/*Enable features to draw on transparent background.
*It's required if opa, and transform_* style properties are used.
*Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/
#define LV_COLOR_SCREEN_TRANSP 0
/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently.
* 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */
#define LV_COLOR_MIX_ROUND_OFS 0
/*Images pixels with this color will not be drawn if they are chroma keyed)*/
#define LV_COLOR_CHROMA_KEY lv_color_hex(0x000000) /*pure green*/
/*=========================
MEMORY SETTINGS
*=========================*/
/*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/
#define LV_MEM_CUSTOM 1
#if LV_MEM_CUSTOM == 0
/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/
#define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/
/*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/
#define LV_MEM_ADR 0 /*0: unused*/
/*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/
#if LV_MEM_ADR == 0
#undef LV_MEM_POOL_INCLUDE
#undef LV_MEM_POOL_ALLOC
#endif
#else /*LV_MEM_CUSTOM*/
// #define LV_MEM_CUSTOM_INCLUDE <stdlib.h> /*Header for the dynamic memory function*/
// #define LV_MEM_CUSTOM_ALLOC malloc
// #define LV_MEM_CUSTOM_FREE free
// #define LV_MEM_CUSTOM_REALLOC realloc
#define LV_MEM_CUSTOM_INCLUDE "FreeRTOS.h" /*Header for the dynamic memory function*/
void * pvPortRealloc ( void *pv, uint32_t xNewSize );
#define LV_MEM_CUSTOM_ALLOC pvPortMalloc
#define LV_MEM_CUSTOM_FREE vPortFree
#define LV_MEM_CUSTOM_REALLOC pvPortRealloc
#endif /*LV_MEM_CUSTOM*/
/*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms.
*You will see an error log message if there wasn't enough buffers. */
#define LV_MEM_BUF_MAX_NUM 16
/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/
#define LV_MEMCPY_MEMSET_STD 0
/*====================
HAL SETTINGS
*====================*/
/*Default display refresh period. LVG will redraw changed areas with this period time*/
#define LV_DISP_DEF_REFR_PERIOD 15 /*[ms]*/
/*Input device read period in milliseconds*/
#define LV_INDEV_DEF_READ_PERIOD 15 /*[ms]*/
/*Use a custom tick source that tells the elapsed time in milliseconds.
*It removes the need to manually update the tick with `lv_tick_inc()`)*/
#define LV_TICK_CUSTOM 0
#if LV_TICK_CUSTOM
#define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/
#endif /*LV_TICK_CUSTOM*/
/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings.
*(Not so important, you can adjust it to modify default sizes and spaces)*/
#define LV_DPI_DEF 130 /*[px/inch]*/
/*=======================
* FEATURE CONFIGURATION
*=======================*/
/*-------------
* Drawing
*-----------*/
/*Enable complex draw engine.
*Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/
#define LV_DRAW_COMPLEX 1
#if LV_DRAW_COMPLEX != 0
/*Allow buffering some shadow calculation.
*LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius`
*Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/
#define LV_SHADOW_CACHE_SIZE 0
/* Set number of maximally cached circle data.
* The circumference of 1/4 circle are saved for anti-aliasing
* radius * 4 bytes are used per circle (the most often used radiuses are saved)
* 0: to disable caching */
#define LV_CIRCLE_CACHE_SIZE 4
#endif /*LV_DRAW_COMPLEX*/
/**
* "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer
* and blend it as an image with the given opacity.
* Note that `bg_opa`, `text_opa` etc don't require buffering into layer)
* The widget can be buffered in smaller chunks to avoid using large buffers.
*
* - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it
* - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes] used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated.
*
* Both buffer sizes are in bytes.
* "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers
* and can't be drawn in chunks. So these settings affects only widgets with opacity.
*/
#define LV_LAYER_SIMPLE_BUF_SIZE (24 * 1024)
#define LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024)
/*Default image cache size. Image caching keeps the images opened.
*If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added)
*With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images.
*However the opened images might consume additional RAM.
*0: to disable caching*/
#define LV_IMG_CACHE_DEF_SIZE 0
/*Number of stops allowed per gradient. Increase this to allow more stops.
*This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/
#define LV_GRADIENT_MAX_STOPS 2
/*Default gradient buffer size.
*When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again.
*LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes.
*If the cache is too small the map will be allocated only while it's required for the drawing.
*0 mean no caching.*/
#define LV_GRAD_CACHE_DEF_SIZE 0
/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display)
*LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface
*The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */
#define LV_DITHER_GRADIENT 0
#if LV_DITHER_GRADIENT
/*Add support for error diffusion dithering.
*Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing.
*The increase in memory consumption is (24 bits * object's width)*/
#define LV_DITHER_ERROR_DIFFUSION 0
#endif
/*Maximum buffer size to allocate for rotation.
*Only used if software rotation is enabled in the display driver.*/
#define LV_DISP_ROT_MAX_BUF (10*1024)
/*-------------
* GPU
*-----------*/
/*Use Arm's 2D acceleration library Arm-2D */
#define LV_USE_GPU_ARM2D 0
/*Use STM32's DMA2D (aka Chrom Art) GPU*/
#define LV_USE_GPU_STM32_DMA2D 0
#if LV_USE_GPU_STM32_DMA2D
/*Must be defined to include path of CMSIS header of target processor
e.g. "stm32f769xx.h" or "stm32f429xx.h"*/
#define LV_GPU_DMA2D_CMSIS_INCLUDE
#endif
/*Use SWM341's DMA2D GPU*/
#define LV_USE_GPU_SWM341_DMA2D 0
#if LV_USE_GPU_SWM341_DMA2D
#define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h"
#endif
/*Use NXP's PXP GPU iMX RTxxx platforms*/
#define LV_USE_GPU_NXP_PXP 0
#if LV_USE_GPU_NXP_PXP
/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c)
* and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS
* has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected.
*0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init()
*/
#define LV_USE_GPU_NXP_PXP_AUTO_INIT 0
#endif
/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/
#define LV_USE_GPU_NXP_VG_LITE 0
/*Use SDL renderer API*/
#define LV_USE_GPU_SDL 0
#if LV_USE_GPU_SDL
#define LV_GPU_SDL_INCLUDE_PATH <SDL2/SDL.h>
/*Texture cache size, 8MB by default*/
#define LV_GPU_SDL_LRU_SIZE (1024 * 1024 * 8)
/*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/
#define LV_GPU_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6))
#endif
/*-------------
* Logging
*-----------*/
/*Enable the log module*/
#define LV_USE_LOG 0
#if LV_USE_LOG
/*How important log should be added:
*LV_LOG_LEVEL_TRACE A lot of logs to give detailed information
*LV_LOG_LEVEL_INFO Log important events
*LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem
*LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail
*LV_LOG_LEVEL_USER Only logs added by the user
*LV_LOG_LEVEL_NONE Do not log anything*/
#define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
/*1: Print the log with 'printf';
*0: User need to register a callback with `lv_log_register_print_cb()`*/
#define LV_LOG_PRINTF 0
/*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/
#define LV_LOG_TRACE_MEM 1
#define LV_LOG_TRACE_TIMER 1
#define LV_LOG_TRACE_INDEV 1
#define LV_LOG_TRACE_DISP_REFR 1
#define LV_LOG_TRACE_EVENT 1
#define LV_LOG_TRACE_OBJ_CREATE 1
#define LV_LOG_TRACE_LAYOUT 1
#define LV_LOG_TRACE_ANIM 1
#endif /*LV_USE_LOG*/
/*-------------
* Asserts
*-----------*/
/*Enable asserts if an operation is failed or an invalid data is found.
*If LV_USE_LOG is enabled an error message will be printed on failure*/
#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/
#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/
#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/
#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/
#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/
/*Add a custom handler when assert happens e.g. to restart the MCU*/
#define LV_ASSERT_HANDLER_INCLUDE <stdint.h>
#define LV_ASSERT_HANDLER while(1); /*Halt by default*/
/*-------------
* Others
*-----------*/
/*1: Show CPU usage and FPS count*/
#define LV_USE_PERF_MONITOR 0
#if LV_USE_PERF_MONITOR
#define LV_USE_PERF_MONITOR_POS LV_ALIGN_TOP_LEFT
#endif
/*1: Show the used memory and the memory fragmentation
* Requires LV_MEM_CUSTOM = 0*/
#define LV_USE_MEM_MONITOR 0
#if LV_USE_MEM_MONITOR
#define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT
#endif
/*1: Draw random colored rectangles over the redrawn areas*/
#define LV_USE_REFR_DEBUG 0
/*Change the built in (v)snprintf functions*/
#define LV_SPRINTF_CUSTOM 1
#if LV_SPRINTF_CUSTOM
#define LV_SPRINTF_INCLUDE <stdio.h>
#define lv_snprintf snprintf
#define lv_vsnprintf vsnprintf
#else /*LV_SPRINTF_CUSTOM*/
#define LV_SPRINTF_USE_FLOAT 0
#endif /*LV_SPRINTF_CUSTOM*/
#define LV_USE_USER_DATA 1
/*Garbage Collector settings
*Used if lvgl is bound to higher level language and the memory is managed by that language*/
#define LV_ENABLE_GC 0
#if LV_ENABLE_GC != 0
#define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/
#endif /*LV_ENABLE_GC*/
/*=====================
* COMPILER SETTINGS
*====================*/
/*For big endian systems set to 1*/
#define LV_BIG_ENDIAN_SYSTEM 0
/*Define a custom attribute to `lv_tick_inc` function*/
#define LV_ATTRIBUTE_TICK_INC
/*Define a custom attribute to `lv_timer_handler` function*/
#define LV_ATTRIBUTE_TIMER_HANDLER
/*Define a custom attribute to `lv_disp_flush_ready` function*/
#define LV_ATTRIBUTE_FLUSH_READY
/*Required alignment size for buffers*/
#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1
/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default).
* E.g. __attribute__((aligned(4)))*/
#define LV_ATTRIBUTE_MEM_ALIGN
/*Attribute to mark large constant arrays for example font's bitmaps*/
#define LV_ATTRIBUTE_LARGE_CONST
/*Compiler prefix for a big array declaration in RAM*/
#define LV_ATTRIBUTE_LARGE_RAM_ARRAY
/*Place performance critical functions into a faster memory (e.g RAM)*/
#define LV_ATTRIBUTE_FAST_MEM __attribute__((section("ram_code")))
#define LV_IMG_FAST_MEM __attribute__((section("ram_code")))
/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/
#define LV_ATTRIBUTE_DMA
/*Export integer constant to binding. This macro is used with constants in the form of LV_<CONST> that
*should also appear on LVGL binding API such as Micropython.*/
#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/
/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/
#define LV_USE_LARGE_COORD 0
/*==================
* FONT USAGE
*===================*/
/*Montserrat fonts with ASCII range and some symbols using bpp = 4
*https://fonts.google.com/specimen/Montserrat*/
#define LV_FONT_MONTSERRAT_8 0
#define LV_FONT_MONTSERRAT_10 0
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_MONTSERRAT_14 1
#define LV_FONT_MONTSERRAT_16 1
#define LV_FONT_MONTSERRAT_18 0
#define LV_FONT_MONTSERRAT_20 0
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0
#define LV_FONT_MONTSERRAT_26 0
#define LV_FONT_MONTSERRAT_28 1
#define LV_FONT_MONTSERRAT_30 0
#define LV_FONT_MONTSERRAT_32 0
#define LV_FONT_MONTSERRAT_34 0
#define LV_FONT_MONTSERRAT_36 0
#define LV_FONT_MONTSERRAT_38 0
#define LV_FONT_MONTSERRAT_40 0
#define LV_FONT_MONTSERRAT_42 0
#define LV_FONT_MONTSERRAT_44 0
#define LV_FONT_MONTSERRAT_46 0
#define LV_FONT_MONTSERRAT_48 0
/*Demonstrate special features*/
#define LV_FONT_MONTSERRAT_12_SUBPX 0
#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/
#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/
#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/
/*Pixel perfect monospace fonts*/
#define LV_FONT_UNSCII_8 0
#define LV_FONT_UNSCII_16 0
/*Optionally declare custom fonts here.
*You can use these fonts as default font too and they will be available globally.
*E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/
#define LV_FONT_CUSTOM_DECLARE
/*Always set a default font*/
#define LV_FONT_DEFAULT &lv_font_montserrat_14
/*Enable handling large font and/or fonts with a lot of characters.
*The limit depends on the font size, font face and bpp.
*Compiler error will be triggered if a font needs it.*/
#define LV_FONT_FMT_TXT_LARGE 1
/*Enables/disables support for compressed fonts.*/
#define LV_USE_FONT_COMPRESSED 0
/*Enable subpixel rendering*/
#define LV_USE_FONT_SUBPX 0
#if LV_USE_FONT_SUBPX
/*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/
#define LV_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/
#endif
/*Enable drawing placeholders when glyph dsc is not found*/
#define LV_USE_FONT_PLACEHOLDER 1
/*=================
* TEXT SETTINGS
*=================*/
/**
* Select a character encoding for strings.
* Your IDE or editor should have the same character encoding
* - LV_TXT_ENC_UTF8
* - LV_TXT_ENC_ASCII
*/
#define LV_TXT_ENC LV_TXT_ENC_UTF8
/*Can break (wrap) texts on these chars*/
#define LV_TXT_BREAK_CHARS " ,.;:-_"
/*If a word is at least this long, will break wherever "prettiest"
*To disable, set to a value <= 0*/
#define LV_TXT_LINE_BREAK_LONG_LEN 0
/*Minimum number of characters in a long word to put on a line before a break.
*Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/
#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3
/*Minimum number of characters in a long word to put on a line after a break.
*Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/
#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3
/*The control character to use for signalling text recoloring.*/
#define LV_TXT_COLOR_CMD "#"
/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts.
*The direction will be processed according to the Unicode Bidirectional Algorithm:
*https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/
#define LV_USE_BIDI 1
#if LV_USE_BIDI
/*Set the default direction. Supported values:
*`LV_BASE_DIR_LTR` Left-to-Right
*`LV_BASE_DIR_RTL` Right-to-Left
*`LV_BASE_DIR_AUTO` detect texts base direction*/
#define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO
#endif
/*Enable Arabic/Persian processing
*In these languages characters should be replaced with an other form based on their position in the text*/
#define LV_USE_ARABIC_PERSIAN_CHARS 1
/*==================
* WIDGET USAGE
*================*/
/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/
#define LV_USE_ARC 1
#define LV_USE_BAR 1
#define LV_USE_BTN 1
#define LV_USE_BTNMATRIX 1
#define LV_USE_CANVAS 1
#define LV_USE_CHECKBOX 1
#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/
#define LV_USE_IMG 1 /*Requires: lv_label*/
#define LV_USE_LABEL 1
#if LV_USE_LABEL
#define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/
#define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/
#endif
#define LV_USE_LINE 1
#define LV_USE_ROLLER 1 /*Requires: lv_label*/
#if LV_USE_ROLLER
#define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/
#endif
#define LV_USE_SLIDER 1 /*Requires: lv_bar*/
#define LV_USE_SWITCH 1
#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/
#if LV_USE_TEXTAREA != 0
#define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/
#endif
#define LV_USE_TABLE 1
/*==================
* EXTRA COMPONENTS
*==================*/
/*-----------
* Widgets
*----------*/
#define LV_USE_ANIMIMG 1
#define LV_USE_CALENDAR 1
#if LV_USE_CALENDAR
#define LV_CALENDAR_WEEK_STARTS_MONDAY 0
#if LV_CALENDAR_WEEK_STARTS_MONDAY
#define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}
#else
#define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"}
#endif
#define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}
#define LV_USE_CALENDAR_HEADER_ARROW 1
#define LV_USE_CALENDAR_HEADER_DROPDOWN 1
#endif /*LV_USE_CALENDAR*/
#define LV_USE_CHART 1
#define LV_USE_COLORWHEEL 1
#define LV_USE_IMGBTN 1
#define LV_USE_KEYBOARD 1
#define LV_USE_LED 1
#define LV_USE_LIST 1
#define LV_USE_MENU 1
#define LV_USE_METER 1
#define LV_USE_MSGBOX 1
#define LV_USE_SPAN 1
#if LV_USE_SPAN
/*A line text can contain maximum num of span descriptor */
#define LV_SPAN_SNIPPET_STACK_SIZE 64
#endif
#define LV_USE_SPINBOX 1
#define LV_USE_SPINNER 1
#define LV_USE_TABVIEW 1
#define LV_USE_TILEVIEW 1
#define LV_USE_WIN 1
/*-----------
* Themes
*----------*/
/*A simple, impressive and very complete theme*/
#define LV_USE_THEME_DEFAULT 1
#if LV_USE_THEME_DEFAULT
/*0: Light mode; 1: Dark mode*/
#define LV_THEME_DEFAULT_DARK 0
/*1: Enable grow on press*/
#define LV_THEME_DEFAULT_GROW 1
/*Default transition time in [ms]*/
#define LV_THEME_DEFAULT_TRANSITION_TIME 80
#endif /*LV_USE_THEME_DEFAULT*/
/*A very simple theme that is a good starting point for a custom theme*/
#define LV_USE_THEME_BASIC 1
/*A theme designed for monochrome displays*/
#define LV_USE_THEME_MONO 1
/*-----------
* Layouts
*----------*/
/*A layout similar to Flexbox in CSS.*/
#define LV_USE_FLEX 1
/*A layout similar to Grid in CSS.*/
#define LV_USE_GRID 1
/*---------------------
* 3rd party libraries
*--------------------*/
/*File system interfaces for common APIs */
/*API for fopen, fread, etc*/
#define LV_USE_FS_STDIO 0
#if LV_USE_FS_STDIO
#define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/
#define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
/*API for open, read, etc*/
#define LV_USE_FS_POSIX 0
#if LV_USE_FS_POSIX
#define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/
#define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
/*API for CreateFile, ReadFile, etc*/
#define LV_USE_FS_WIN32 0
#if LV_USE_FS_WIN32
#define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/
#define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/
#define LV_USE_FS_FATFS 0
#if LV_USE_FS_FATFS
#define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
/*PNG decoder library*/
#define LV_USE_PNG 0
/*BMP decoder library*/
#define LV_USE_BMP 0
/* JPG + split JPG decoder library.
* Split JPG is a custom format optimized for embedded systems. */
#define LV_USE_SJPG 0
/*GIF decoder library*/
#define LV_USE_GIF 1
/*QR code library*/
#define LV_USE_QRCODE 1
/*FreeType library*/
#define LV_USE_FREETYPE 0
#if LV_USE_FREETYPE
/*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/
#define LV_FREETYPE_CACHE_SIZE (16 * 1024)
#if LV_FREETYPE_CACHE_SIZE >= 0
/* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */
/* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */
/* if font size >= 256, must be configured as image cache */
#define LV_FREETYPE_SBIT_CACHE 0
/* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */
/* (0:use system defaults) */
#define LV_FREETYPE_CACHE_FT_FACES 0
#define LV_FREETYPE_CACHE_FT_SIZES 0
#endif
#endif
/*Rlottie library*/
#define LV_USE_RLOTTIE 0
/*FFmpeg library for image decoding and playing videos
*Supports all major image formats so do not enable other image decoder with it*/
#define LV_USE_FFMPEG 0
#if LV_USE_FFMPEG
/*Dump input information to stderr*/
#define LV_FFMPEG_DUMP_FORMAT 0
#endif
/*-----------
* Others
*----------*/
/*1: Enable API to take snapshot for object*/
#define LV_USE_SNAPSHOT 0
/*1: Enable Monkey test*/
#define LV_USE_MONKEY 0
/*1: Enable grid navigation*/
#define LV_USE_GRIDNAV 0
/*1: Enable lv_obj fragment*/
#define LV_USE_FRAGMENT 0
/*1: Support using images as font in label or span widgets */
#define LV_USE_IMGFONT 0
/*1: Enable a published subscriber based messaging system */
#define LV_USE_MSG 0
/*1: Enable Pinyin input method*/
/*Requires: lv_keyboard*/
#define LV_USE_IME_PINYIN 0
#if LV_USE_IME_PINYIN
/*1: Use default thesaurus*/
/*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/
#define LV_IME_PINYIN_USE_DEFAULT_DICT 1
/*Set the maximum number of candidate panels that can be displayed*/
/*This needs to be adjusted according to the size of the screen*/
#define LV_IME_PINYIN_CAND_TEXT_NUM 6
/*Use 9 key input(k9)*/
#define LV_IME_PINYIN_USE_K9_MODE 1
#if LV_IME_PINYIN_USE_K9_MODE == 1
#define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3
#endif // LV_IME_PINYIN_USE_K9_MODE
#endif
/*==================
* EXAMPLES
*==================*/
/*Enable the examples to be built with the library*/
#define LV_BUILD_EXAMPLES 1
/*===================
* DEMO USAGE
====================*/
/*Show some widget. It might be required to increase `LV_MEM_SIZE` */
#define LV_USE_DEMO_WIDGETS 1
#if LV_USE_DEMO_WIDGETS
#define LV_DEMO_WIDGETS_SLIDESHOW 1
#endif
/*Demonstrate the usage of encoder and keyboard*/
#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0
/*Benchmark your system*/
#define LV_USE_DEMO_BENCHMARK 1
#if LV_USE_DEMO_BENCHMARK
/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/
#define LV_DEMO_BENCHMARK_RGB565A8 0
#endif
/*Stress test for LVGL*/
#define LV_USE_DEMO_STRESS 1
/*Music player demo*/
#define LV_USE_DEMO_MUSIC 1
#if LV_USE_DEMO_MUSIC
#define LV_DEMO_MUSIC_SQUARE 1
#define LV_DEMO_MUSIC_LANDSCAPE 1
#define LV_DEMO_MUSIC_ROUND 1
#define LV_DEMO_MUSIC_LARGE 0
#define LV_DEMO_MUSIC_AUTO_PLAY 1
#endif
/*--END OF LV_CONF_H--*/
#endif /*LV_CONF_H*/
#endif /*End of "Content enable"*/

View File

@ -0,0 +1,86 @@
/*
* Copyright (c) 2014, Mentor Graphics Corporation
* Copyright (c) 2015 Xilinx, Inc.
* Copyright (c) 2016 Freescale Semiconductor, Inc.
* Copyright 2016-2021 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef RPMSG_CONFIG_H_
#define RPMSG_CONFIG_H_
/*!
* @addtogroup config
* @{
* @file
*/
//! @name Configuration options
//@{
//! @def RL_MS_PER_INTERVAL
//!
//! Delay in milliseconds used in non-blocking API functions for polling.
//! The default value is 1.
#define RL_MS_PER_INTERVAL (1)
//! @def RL_BUFFER_PAYLOAD_SIZE
//!
//! Size of the buffer payload, it must be equal to (240, 496, 1008, ...)
//! [2^n - 16]. Ensure the same value is defined on both sides of rpmsg
//! communication. The default value is 496U.
#define RL_BUFFER_PAYLOAD_SIZE (240U)
//! @def RL_BUFFER_COUNT
//!
//! Number of the buffers, it must be power of two (2, 4, ...).
//! The default value is 2U.
//! Note this value defines the buffer count for one direction of the rpmsg
//! communication only, i.e. if the default value of 2 is used
//! in rpmsg_config.h files for the master and the remote side, 4 buffers
//! in total are created in the shared memory.
#define RL_BUFFER_COUNT (2U)
//! @def RL_API_HAS_ZEROCOPY
//!
//! Zero-copy API functions enabled/disabled.
//! The default value is 1 (enabled).
#define RL_API_HAS_ZEROCOPY (1)
//! @def RL_USE_STATIC_API
//!
//! Static API functions (no dynamic allocation) enabled/disabled.
//! The default value is 0 (static API disabled).
#define RL_USE_STATIC_API (0)
//! @def RL_CLEAR_USED_BUFFERS
//!
//! Clearing used buffers before returning back to the pool of free buffers
//! enabled/disabled.
//! The default value is 0 (disabled).
#define RL_CLEAR_USED_BUFFERS (0)
//! @def RL_USE_MCMGR_IPC_ISR_HANDLER
//!
//! When enabled IPC interrupts are managed by the Multicore Manager (IPC
//! interrupts router), when disabled RPMsg-Lite manages IPC interrupts
//! by itself.
//! The default value is 0 (no MCMGR IPC ISR handler used).
#define RL_USE_MCMGR_IPC_ISR_HANDLER (0)
//! @def RL_USE_ENVIRONMENT_CONTEXT
//!
//! When enabled the environment layer uses its own context.
//! Added for QNX port mainly, but can be used if required.
//! The default value is 0 (no context, saves some RAM).
#define RL_USE_ENVIRONMENT_CONTEXT (0)
//! @def RL_DEBUG_CHECK_BUFFERS
//!
//! Do not use in RPMsg-Lite to Linux configuration
#define RL_DEBUG_CHECK_BUFFERS (0)
//@}
#endif /* RPMSG_CONFIG_H_ */

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'Project'
* Target: 'Project'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "ARMCM33_DSP_FP.h"
/* Keil.ARM Compiler::Compiler:I/O:STDERR:Breakpoint:1.2.0 */
#define RTE_Compiler_IO_STDERR /* Compiler I/O: STDERR */
#define RTE_Compiler_IO_STDERR_BKPT /* Compiler I/O: STDERR Breakpoint */
#endif /* RTE_COMPONENTS_H */

View File

@ -0,0 +1,26 @@
import os
import shutil
def delete_files_in_current_directory(folder_name):
try:
current_directory = os.path.dirname(os.path.abspath(__file__))
folder_to_delete = os.path.join(current_directory, folder_name)
if os.path.exists(folder_to_delete):
files = os.listdir(folder_to_delete)
for file_name in files:
file_path = os.path.join(folder_to_delete, file_name)
if os.path.isfile(file_path):
os.remove(file_path)
print(f"Deleted: {file_path}")
print(f"All files in {folder_name} have been deleted.")
else:
print(f"Folder {folder_name} does not exist in {current_directory}.")
except Exception as e:
print(f"Error: {e}")
folder_name_to_delete = "Objects"
delete_files_in_current_directory(folder_name_to_delete)
folder_name_to_delete = "Listings"
delete_files_in_current_directory(folder_name_to_delete)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
import os
import struct
import zlib
import sys
def fill_header(f_in_file,
f_out_file):
code_length = os.path.getsize(f_in_file)
f_out_create = open(f_out_file, 'wb')
f_out_create.close()
f_out = open(f_out_file, 'r+b')
f_in = open(f_in_file, 'rb')
array = f_in.read(code_length)
f_out.write(array)
f_out.seek(0x150)
f_out.write(struct.pack('I', code_length))
f_out.seek(0)
arrayout = f_out.read(code_length)
image_crc = zlib.crc32(arrayout)
f_out.seek(code_length)
#f_out.write(struct.pack('I',image_crc))
f_out.write(struct.pack('B', image_crc&0xff))
f_out.write(struct.pack('B', (image_crc&0xff00)>>8))
f_out.write(struct.pack('B', (image_crc&0xff0000)>>16))
f_out.write(struct.pack('B', (image_crc&0xff000000)>>24))
if 'BAT_RUN' in os.environ:
fill_header(".\output\Project.bin", ".\output\Project_mp_burn.bin")
else:
fill_header("Project.bin", "Project_mp_burn.bin")
# if sys.argv[0].endswith('.bat'):
# fill_header(".\output\Project.bin", ".\output\Project_burn.bin")
# else:
# fill_header("Project.bin", "Project_burn.bin")

View File

@ -0,0 +1,11 @@
@echo off
if exist Project_burn.bin (
del Project_burn.bin
)
@echo off
set BAT_RUN=1
python .\output\app_post_process.py

Binary file not shown.

View File

@ -0,0 +1,801 @@
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "fr30xx.h"
#include "co_util.h"
#include "bt_types.h"
#include "me_api.h"
#include "hfg_api.h"
#include "gatt_api.h"
#include "app_at.h"
#include "app_task.h"
#include "app_ble.h"
#include "app_bt.h"
#include "app_audio.h"
#include "app_hw.h"
#include "btdm_mem.h"
#include "fdb_app.h"
#include "heap.h"
#include "app_ble.h"
#include "user_bt.h"
#include "user_ipc_st.h"
#include "dsp_mem.h"
#define AT_RECV_MAX_LEN 32
static uint8_t app_at_recv_char;
static uint8_t at_recv_buffer[AT_RECV_MAX_LEN];
static uint8_t at_recv_index = 0;
static uint8_t at_recv_state = 0;
void btdm_host_send_vendor_cmd(uint8_t type, uint8_t length, void *data);
void btdm_host_vendor_cmd_cmp_evt(uint8_t status, uint8_t len, uint8_t const *param)
{
printf("status: 0x%02x.\r\n", status);
for (uint32_t i=0; i<len; i++) {
printf("%02x ", param[i]);
}
printf("\r\n");
}
void btdm_host_recv_vendor_evt(uint8_t len, uint8_t *param)
{
if (param[1] == 0x10) {
float acc[3];
memcpy((void *)&acc[0], &param[3], sizeof(float) * 3);
printf("%0.6f, \t%0.6f, \t%0.6f\r\n", acc[0], acc[1], acc[2]);
return;
}
//gsensor event:
// if (param[1] == 0x0A) {
// _gsensor_evt *evt = (_gsensor_evt *)&param[3];
// printf("EVENT: %d step:%d calorie:%d sleep:%d action:%d \n",evt->evt_id,evt->step,evt->calorie,evt->sleep,evt->action);
// }
// printf("EVENT: ");
// for (uint32_t i=0; i<len; i++) {
// printf("%02x ", param[i]);
// }
// printf("\r\n");
// if ((param[1] | (param[2]<<8)) == 0x000c)
{
// extern void fr_system_host_recv_vendor(uint8_t *recv_data,uint8_t len);
// fr_system_host_recv_vendor(param,len);
}
}
__RAM_CODE static void app_at_recv_cmd_A(uint8_t sub_cmd, uint8_t *data)
{
switch(sub_cmd)
{
case 'A':
{
uint8_t addr = ascii_strn2val((const char *)&data[0], 16, 2);
btdm_host_send_vendor_cmd(0x00, 1, &addr);
}
printf("OK\r\n");
break;
case 'B':
{
uint8_t buffer[2];
buffer[0] = ascii_strn2val((const char *)&data[0], 16, 2);
buffer[1] = ascii_strn2val((const char *)&data[3], 16, 2);
btdm_host_send_vendor_cmd(0x01, 2, (void *)&buffer[0]);
}
printf("OK\r\n");
break;
// case 'C':
// {
// uint32_t addr = ascii_strn2val((const char *)&data[0], 16, 8);
// btdm_host_send_vendor_cmd(0x02, 4, (void *)&addr);
// }
// printf("OK\r\n");
// break;
// case 'D':
// {
// uint32_t buffer[2];
// buffer[0] = ascii_strn2val((const char *)&data[0], 16, 8);
// buffer[1] = ascii_strn2val((const char *)&data[9], 16, 8);
// btdm_host_send_vendor_cmd(0x03, 8, (void *)&buffer[0]);
// }
// printf("OK\r\n");
// break;
case 'C':
{
btdm_host_send_vendor_cmd(0x15, 0, NULL);
}
printf("OK\r\n");
break;
case 'D':
// {
// uint8_t mode = ascii_strn2val((const char *)&data[0], 16, 2);
// btdm_host_send_vendor_cmd(0x14, 1, &mode);
// }
btdm_host_send_vendor_cmd(0x17, 0, NULL);
printf("OK\r\n");
break;
case 'E':
{
uint8_t sleep_dur[2];
sleep_dur[0] = ascii_strn2val((const char *)&data[0], 16, 2);
sleep_dur[1] = ascii_strn2val((const char *)&data[3], 16, 2);
btdm_host_send_vendor_cmd(0x16, 2, &sleep_dur);
}
break;
case 'F':
{
static uint8_t hour = 0;
static uint8_t minute = 0;
static uint8_t second = 0;
static uint16_t mini_second = 0;
uint8_t gsensor_cmd[] = {0x00, 0xe7, 0x07, 0x09, 0x12, 0x14, 0x36, 0x10, 0x20, 0x00, 0x2c, 0x01};
mini_second += 200;
if (mini_second >= 1000) {
mini_second = 0;
second++;
if (second >= 60) {
second = 0;
minute++;
if (minute >= 60) {
minute = 0;
hour++;
}
}
}
gsensor_cmd[5] = hour;
gsensor_cmd[6] = minute;
gsensor_cmd[7] = second;
gsensor_cmd[8] = mini_second;
gsensor_cmd[9] = mini_second >> 8;
btdm_host_send_vendor_cmd(0x12, sizeof(gsensor_cmd), gsensor_cmd);
}
break;
case 'G':
printf("hello world!\r\n");
break;
case 'H':
printf("VAL: 0x%08x.\r\n", *(volatile uint32_t *)ascii_strn2val((const char *)&data[0], 16, 8));
break;
case 'I':
*(volatile uint32_t *)ascii_strn2val((const char *)&data[0], 16, 8) = ascii_strn2val((const char *)&data[9], 16, 8);
printf("OK\r\n");
break;
case 'J':
printf("OOL VAL: 0x%02x.\r\n", ool_read(ascii_strn2val((const char *)&data[0], 16, 2)));
break;
case 'K':
ool_write(ascii_strn2val((const char *)&data[0], 16, 2), ascii_strn2val((const char *)&data[3], 16, 2));
printf("OK\r\n");
break;
case 'L':
printf("VAL: 0x%02x.\r\n", *(volatile uint8_t *)(ascii_strn2val((const char *)&data[0], 16, 8)));
break;
case 'M':
*(volatile uint8_t *)(ascii_strn2val((const char *)&data[0], 16, 8)) = ascii_strn2val((const char *)&data[9], 16, 2);
printf("OK\r\n");
break;
// case 'P':
// co_printf("VAL: 0x%02x.\r\n", *(uint8_t *)(MODEM_BASE + ascii_strn2val((const char *)&data[0], 16, 2)));
// break;
// case 'Q':
// *(uint8_t *)(MODEM_BASE + ascii_strn2val((const char *)&data[0], 16, 2)) = ascii_strn2val((const char *)&data[3], 16, 2);
// co_printf("OK\r\n");
// break;
// case 'S':
// co_printf("VAL: 0x%02x.\r\n", frspim_rd(FR_SPI_RF_COB_CHAN, ascii_strn2val((const char *)&data[0], 16, 2), 1));
// break;
// case 'T':
// frspim_wr(FR_SPI_RF_COB_CHAN, ascii_strn2val((const char *)&data[0], 16, 2), 1, ascii_strn2val((const char *)&data[3], 16, 2));
// co_printf("OK\r\n");
// break;
case 'U':
{
uint32_t *ptr = (uint32_t *)(ascii_strn2val((const char *)&data[0], 16, 8) & (~3));
uint8_t count = ascii_strn2val((const char *)&data[9], 16, 2);
uint32_t *start = (uint32_t *)((uint32_t)ptr & (~0x0f));
for(uint8_t i=0; i<count;) {
if(((uint32_t)start & 0x0c) == 0) {
printf("0x%08x: ", (uint32_t)start);
}
if(start < ptr) {
printf(" ");
}
else {
i++;
printf("%08x", *start);
}
if(((uint32_t)start & 0x0c) == 0x0c) {
printf("\r\n");
}
else {
printf(" ");
}
start++;
}
}
break;
case 'V':
flash_erase(QSPI0, ascii_strn2val((const char *)&data[0], 16, 8), ascii_strn2val((const char *)&data[9], 16, 8));
break;
case 'W':
{
uint32_t curr_free, min_free;
dsp_mem_get_usage(&curr_free, &min_free);
printf("DSP MEM: %d, %d\r\n", curr_free, min_free);
}
break;
case 'X':
{
void system_reset(void);
system_reset();
}
break;
case 'Y':
heap_dump_used_mem(ascii_strn2val((const char *)&data[0], 16, 2));
break;
case 'Z':
printf("MEM usage\r\n \
\tHEAP_TYPE_SRAM_BLOCK: %d, %d\r\n \
\tHEAP_TYPE_DRAM_BLOCK: %d, %d\r\n \
\tHEAP_TYPE_BTDM_BLOCK: %d, %d\r\n \
\tTOTAL USAGE: %d\r\n", \
heap_get_mem_usage(HEAP_TYPE_SRAM_BLOCK), heap_get_mem_usage_single(HEAP_TYPE_SRAM_BLOCK), \
heap_get_mem_usage(HEAP_TYPE_DRAM_BLOCK), heap_get_mem_usage_single(HEAP_TYPE_DRAM_BLOCK), \
heap_get_mem_usage(HEAP_TYPE_BTDM_BLOCK), heap_get_mem_usage_single(HEAP_TYPE_BTDM_BLOCK), \
heap_get_max_mem_usage());
break;
default:
break;
}
}
static void user_hci_callback(const BtEvent *event)
{
printf("event type = %d\r\n",event->eType);
if(event->eType == BTEVENT_COMMAND_COMPLETE){
btdm_free(event->p.meToken);
}
}
__RAM_CODE static void app_at_recv_cmd_B(uint8_t sub_cmd, uint8_t *data)
{
struct gap_ble_addr peer_addr;
BD_ADDR addr;
HfgResponse *rsp;
BtStatus status;
MeCommandToken *token;
uint16_t page_timeout = 0x400;
switch(sub_cmd) {
case 'A':
// AT#BA00
//app_ble_advertising_start(ascii_strn2val((const char *)&data[0], 16, 2));
break;
case 'B':
// AT#BB01
//app_ble_advertising_stop(ascii_strn2val((const char *)&data[0], 16, 2));
break;
case 'C':
app_ble_scan_start();
break;
case 'D':
app_ble_scan_stop();
break;
case 'E':
// AT#BE0123456789ab_01
peer_addr.addr.addr[5] = ascii_strn2val((const char *)&data[0], 16, 2);
peer_addr.addr.addr[4] = ascii_strn2val((const char *)&data[2], 16, 2);
peer_addr.addr.addr[3] = ascii_strn2val((const char *)&data[4], 16, 2);
peer_addr.addr.addr[2] = ascii_strn2val((const char *)&data[6], 16, 2);
peer_addr.addr.addr[1] = ascii_strn2val((const char *)&data[8], 16, 2);
peer_addr.addr.addr[0] = ascii_strn2val((const char *)&data[10], 16, 2);
peer_addr.addr_type = ascii_strn2val((const char *)&data[13], 16, 2);
app_ble_conn_start(&peer_addr);
break;
case 'F':
app_ble_conn_stop();
break;
#if BTDM_STACK_ENABLE_BT == 1
case 'H':
ME_Inquiry(BT_IAC_GIAC, 5, 5);
break;
case 'I':
ME_CancelInquiry();
break;
case 'J':
{
BtStatus status;
addr.A[0] = ascii_strn2val((const char*)&data[0],16,2);
addr.A[1] = ascii_strn2val((const char*)&data[2],16,2);
addr.A[2] = ascii_strn2val((const char*)&data[4],16,2);
addr.A[3] = ascii_strn2val((const char*)&data[6],16,2);
addr.A[4] = ascii_strn2val((const char*)&data[8],16,2);
addr.A[5] = ascii_strn2val((const char*)&data[10],16,2);
status = HFG_CreateServiceLink(&hfg_channel[0], &addr);
if (status == BT_STATUS_PENDING) {
printf("Opening Channel...\r\n");
} else {
printf("Could not open channel, status: %d\r\n", status);
}
}
break;
case 'K':
status = BT_STATUS_NO_RESOURCES;
rsp = (HfgResponse *)btdm_malloc(sizeof(HfgResponse));
if(rsp != NULL){
status = HFG_CreateCodecConnection(&hfg_channel[0], 1, rsp);
}
if(status != BT_STATUS_PENDING){
btdm_free((void *)rsp);
}
printf("status = %d\r\n",status);
break;
case 'L':
flashdb_del(FDB_KEY_BT_LINKKEY);
break;
case 'M':
token = btdm_malloc(sizeof(MeCommandToken));
token->p.general.in.hciCommand = 0x0c18;//HCC_WRITE_PAGE_TIMEOUT;
token->p.general.in.parmLen = 2;
token->p.general.in.parms = (uint8_t *)&page_timeout;
token->callback = user_hci_callback; //token is freed at this callback
status = ME_SendHciCommandAsync(token);
printf("status = %d\r\n",status);
break;
case 'N':
{
addr.A[0] = ascii_strn2val((const char*)&data[0],16,2);
addr.A[1] = ascii_strn2val((const char*)&data[2],16,2);
addr.A[2] = ascii_strn2val((const char*)&data[4],16,2);
addr.A[3] = ascii_strn2val((const char*)&data[6],16,2);
addr.A[4] = ascii_strn2val((const char*)&data[8],16,2);
addr.A[5] = ascii_strn2val((const char*)&data[10],16,2);
user_bt_env.connect_times = 3;
status = bt_connect(&addr);
printf("status = %d\r\n",status);
}
break;
#endif
case 'O':
// {
// uint8_t battery_level[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
// struct gatt_send_event ntf[6];
// uint8_t i=0;
// for(i=0;i<6;i++){
// ntf[i].conidx = 0;
// ntf[i].svc_id = svc_id;
// ntf[i].att_idx = 2;
// ntf[i].data_len = 15;
// ntf[i].p_data = &battery_level[0];
// gatt_notification(&ntf[i]);
// }
// }
break;
case 'P':
addr.A[0] = ascii_strn2val((const char*)&data[0],16,2);
addr.A[1] = ascii_strn2val((const char*)&data[2],16,2);
addr.A[2] = ascii_strn2val((const char*)&data[4],16,2);
addr.A[3] = ascii_strn2val((const char*)&data[6],16,2);
addr.A[4] = ascii_strn2val((const char*)&data[8],16,2);
addr.A[5] = ascii_strn2val((const char*)&data[10],16,2);
bt_disconnect(&addr,false);
break;
case 'Q':
addr.A[0] = ascii_strn2val((const char*)&data[0],16,2);
addr.A[1] = ascii_strn2val((const char*)&data[2],16,2);
addr.A[2] = ascii_strn2val((const char*)&data[4],16,2);
addr.A[3] = ascii_strn2val((const char*)&data[6],16,2);
addr.A[4] = ascii_strn2val((const char*)&data[8],16,2);
addr.A[5] = ascii_strn2val((const char*)&data[10],16,2);
bt_disconnect(&addr,true);
break;
case 'R':
// ME_SetLocalDeviceName((const uint8_t *)"FR30xx_m", sizeof("FR30xx_m"));
//app_btdm_init();
break;
case 'S':
{
BtAccessModeInfo access_mode_nc = {
.inqInterval = 0x800,
.inqWindow = 0x12,
.pageInterval = 0x800,
.pageWindow = 0x12,
};
status = ME_SetAccessibleModeNC(BAM_GENERAL_ACCESSIBLE, &access_mode_nc);
printf("status = %d\r\n",status);
}
break;
case 'T':
{
status = ME_SetAccessibleModeNC(BAM_NOT_ACCESSIBLE, NULL);
printf("status = %d\r\n",status);
}
break;
}
printf("OK\r\n");
}
#include "user_bt_pbap.h"
uint8_t voltage_str[] = "AT+IPHONEACCEV=1,1,6";
uint8_t cmps_str[] = "AT+CPMS=?";
//bt hf&pbap related cmd
static void app_at_recv_cmd_C(uint8_t sub_cmd, uint8_t *data)
{
printf("%s \r\n", __func__);
BtStatus status;
uint8_t state;
BD_ADDR addr;
switch(sub_cmd) {
case 'A':
status = bt_answer_call(user_bt_env.last_active_index);
printf("status = %d\r\n",status);
break;
case 'B':
status = bt_hang_up(user_bt_env.last_active_index);
printf("status = %d\r\n",status);
break;
case 'C':
status = bt_redial(user_bt_env.last_active_index);
printf("status = %d\r\n",status);
break;
case 'D':
{
//uint8_t number[] = "15907515643";
status = bt_dial_number(user_bt_env.last_active_index,&data[1],data[0]);
printf("status = %d\r\n",status);
}
break;
case 'E':
status = bt_list_current_calls(user_bt_env.last_active_index);
printf("status = %d\r\n",status);
break;
case 'F':
status = bt_transfer_sco(user_bt_env.last_active_index);
printf("status = %d\r\n",status);
break;
case 'G':
{
uint8_t dtmf = data[0];
status = bt_send_dtmf(user_bt_env.last_active_index,dtmf);
printf("status = %d\r\n",status);
}
break;
case 'H':
{
//vol---[0x00,0x0f]
uint8_t vol = ascii_strn2val((const char*)&data[0],16,2);
status = bt_report_spk_volume(user_bt_env.last_active_index,vol);
printf("status = %d\r\n",status);
}
break;
case 'I':
{
status = bt_send_hf_cmd(user_bt_env.last_active_index,voltage_str);
printf("status = %d\r\n",status);
}
break;
case 'J':
{
uint8_t enabled = ascii_strn2val((const char*)&data[0],16,2);
status = bt_enable_voice_recognition(user_bt_env.last_active_index, enabled);
printf("status = %d\r\n",status);
}
break;
case 'K':
printf("voice recog enabled : %d\r\n",bt_is_voice_rec_active(user_bt_env.last_active_index));
break;
case 'L':
//BD_ADDR addr;
//user_bt_env.dev[0].remote_bd;
#if BTDM_STACK_ENABLE_PBAP
state = user_bt_get_state(user_bt_env.last_active_index);
if(state >=BT_STATE_CONNECTED)
{
memcpy(&addr.A[0], &user_bt_env.dev[user_bt_env.last_active_index].remote_bd, 6);
//printf("%x%x%x%x%x%x\r\n",addr.A[0],addr.A[1],addr.A[2],addr.A[3],addr.A[4],addr.A[5]);
}
else {
addr.A[0] = ascii_strn2val((const char*)&data[0],16,2);
addr.A[1] = ascii_strn2val((const char*)&data[2],16,2);
addr.A[2] = ascii_strn2val((const char*)&data[4],16,2);
addr.A[3] = ascii_strn2val((const char*)&data[6],16,2);
addr.A[4] = ascii_strn2val((const char*)&data[8],16,2);
addr.A[5] = ascii_strn2val((const char*)&data[10],16,2);
}
status = PBAP_ClientConnect(&pbap_client[0],&addr);
printf("status = %d\r\n",status);
#endif
break;
case 'M':
#if BTDM_STACK_ENABLE_PBAP
status = PBAP_ClientDisconnect(&pbap_client[0]);
printf("status = %d\r\n",status);
#endif
break;
case 'N':
{
#if BTDM_STACK_ENABLE_PBAP
uint8_t pbName[64];
PbapPullPbParms parms;
memcpy(pbName,PB_LOCAL_MCH_NAME,sizeof(PB_LOCAL_MCH_NAME));
parms.pbName = pbName;
memset(parms.filter.byte,0,PBAP_FILTER_SIZE);
parms.filter.byte[0] = 0x84;
parms.listStartOffset = 0;
parms.maxListCount = 100; //0---search missed call and total pb size
parms.format= VCARD_FORMAT_30;
status = PBAP_PullPhonebook(&pbap_client[0], &parms);
printf("status = %d\r\n",status);
#endif
}
break;
case 'O':
{
#if BTDM_STACK_ENABLE_PBAP
PbapPullVcardListingParms parms;
uint8_t search_val[12]; //= "13262651013";
memcpy(search_val,&data[0],11);
uint8_t folder[] = "telecom/pb";
parms.folderName = folder;
parms.order = VCARD_SORT_ORDER_INDEXED;
parms.listStartOffset = 0x00;
parms.maxListCount = 4;
parms.searchAttribute = VCARD_SEARCH_ATTRIB_NUMBER;
parms.searchValue = (const char *)search_val;
status = PBAP_PullVcardListing(&pbap_client[0], &parms);
printf("status = %d\r\n",status);
#endif
}
break;
case 'P':
{
#if BTDM_STACK_ENABLE_PBAP
uint8_t pbName[64];
PbapPullPbParms parms;
memcpy(pbName,PB_LOCAL_STORE_NAME,sizeof(PB_LOCAL_STORE_NAME));
parms.pbName = pbName;
memset(parms.filter.byte,0,PBAP_FILTER_SIZE);
parms.filter.byte[0] = 0x07;//0x84;
parms.listStartOffset = 0;
parms.maxListCount = 20; //0---search missed call and total pb size
parms.format= VCARD_FORMAT_30;
status = PBAP_PullPhonebook(&pbap_client[0], &parms);
printf("status = %d\r\n",status);
#endif
}
break;
case 'R':
{
user_connect_pbap_client();
}
break;
case 'T':
{
user_pull_phonebook(0,0,25);
}
break;
case 'X':
{
uint8_t mute_str[] = "AT+CMUT=1";
status = bt_send_hf_cmd(user_bt_env.last_active_index,mute_str);
printf("status = %d\r\n",status);
}
break;
case 'Y':
{
flash_wr_test();
}
break;
case 'Q':
{
user_del_pbap_info();
}
break;
default:
break;
}
printf("OK\r\n");
}
///bt media related cmd
static void app_at_recv_cmd_E(uint8_t sub_cmd, uint8_t *data)
{
BD_ADDR addr;
BtStatus status;
switch(sub_cmd) {
case 'A':
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_PLAY, TRUE);
printf("status = %d\r\n",status);
break;
case 'B':
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_PAUSE, TRUE);
printf("status = %d\r\n",status);
break;
case 'C':
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_FORWARD, TRUE);
printf("status = %d\r\n",status);
break;
case 'D':
{
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_BACKWARD, TRUE);
printf("status = %d\r\n",status);
}
break;
case 'E':
{
printf("vol %d\r\n",data[0]);
uint8_t vol = data[0];//ascii_strn2val((const char*)&data[0],16,2);
status = bt_set_media_volume(user_bt_env.last_active_index,vol);
printf("status = %d %d\r\n",status,vol);
}
break;
case 'F':
{
status = bt_get_media_info(user_bt_env.last_active_index,0x41);
printf("status = %d\r\n",status);
}
break;
case 'G':
{
status = bt_get_playstatus(user_bt_env.last_active_index);
printf("status = %d\r\n",status);
}
break;
case 'H':
#if BTDM_STACK_ENABLE_SPP
addr.A[0] = ascii_strn2val((const char*)&data[0],16,2);
addr.A[1] = ascii_strn2val((const char*)&data[2],16,2);
addr.A[2] = ascii_strn2val((const char*)&data[4],16,2);
addr.A[3] = ascii_strn2val((const char*)&data[6],16,2);
addr.A[4] = ascii_strn2val((const char*)&data[8],16,2);
addr.A[5] = ascii_strn2val((const char*)&data[10],16,2);
status = spp_connect(&spp_dev[0],&addr);
printf("status = %d\r\n",status);
#endif
break;
case 'I':
#if BTDM_STACK_ENABLE_SPP
status = spp_disconnect(&spp_dev[0]);
printf("status = %d\r\n",status);
#endif
break;
case 'J':
{
#if BTDM_STACK_ENABLE_SPP
uint8_t test_data[] = {'1','2','3','4'};
status = spp_send(&spp_dev[0],test_data,sizeof(test_data));
printf("status = %d\r\n",status);
#endif
}
break;
default:
break;
}
printf("OK\r\n");
}
__RAM_CODE static void app_at_recv_cmd_D(uint8_t sub_cmd, uint8_t *data)
{
switch(sub_cmd) {
case 'A':
flash_erase(QSPI0, ascii_strn2val((const char*)&data[0],16,8), 0x1000);
break;
default:
break;
}
printf("OK\r\n");
}
__RAM_CODE void app_at_cmd_recv_handler(uint8_t *data, uint16_t length)
{
switch(data[0])
{
case 'A':
app_at_recv_cmd_A(data[1], &data[2]);
break;
case 'B':
app_at_recv_cmd_B(data[1], &data[2]);
break;
case 'C':
app_at_recv_cmd_C(data[1], &data[2]);
break;
case 'D':
app_at_recv_cmd_D(data[1], &data[2]);
break;
case 'E':
app_at_recv_cmd_E(data[1], &data[2]);
break;
default:
break;
}
}
static void app_at_recv_c(uint8_t c)
{
switch(at_recv_state)
{
case 0:
if(c == 'A')
{
at_recv_state++;
}
break;
case 1:
if(c == 'T')
at_recv_state++;
else
at_recv_state = 0;
break;
case 2:
if(c == '#')
at_recv_state++;
else
at_recv_state = 0;
break;
case 3:
at_recv_buffer[at_recv_index++] = c;
if((c == '\n')
||(at_recv_index >= AT_RECV_MAX_LEN))
{
struct app_task_event *event;
event = app_task_event_alloc(APP_TASK_EVENT_AT_CMD, at_recv_index, false);
if(event) {
memcpy(event->param, at_recv_buffer, at_recv_index);
app_task_event_post(event, false);
}
at_recv_state = 0;
at_recv_index = 0;
}
break;
}
}
void app_at_rx_done(struct __UART_HandleTypeDef *handle)
{
app_at_recv_c(app_at_recv_char);
if (handle) {
uart_receive_IT(handle, &app_at_recv_char, 1);
}
}
void app_at_init(void)
{
hw_log_init(false);
uart_receive_IT(&uart_log_handle, &app_at_recv_char, 1);
}
void uart3_irq(void)
{
uart_IRQHandler(&uart_log_handle);
}
int fputc(int c, FILE *fp)
{
uart_transmit(&uart_log_handle, (void *)&c, 1);
return c;
}
void uart_transmit_byte(uint8_t *p,uint32_t len)
{
uart_transmit(&uart_log_handle, (void *)p, len);
}

View File

@ -0,0 +1,10 @@
#ifndef _APP_AT_H
#define _APP_AT_H
#include <stdint.h>
void app_at_cmd_recv_handler(uint8_t *data, uint16_t length);
void app_at_init(void);
#endif // _APP_AT_H

View File

@ -0,0 +1,140 @@
#include <assert.h>
#include "app_config.h"
#include "app_audio.h"
#include "dram_mem.h"
#include "audio_scene.h"
#include "co_list.h"
#include "fr_device_pa.h"
#define APP_AUDIO_DATA_READY_THD 6
#define APP_AUDIO_DATA_BUFFER_MAX 12
enum app_audio_mode_t {
APP_AUDIO_MODE_IDLE,
APP_AUDIO_MODE_A2DP_SINK,
APP_AUDIO_MODE_A2DP_SOURCE,
APP_AUDIO_MODE_SCO,
APP_AUDIO_MODE_TONE,
APP_AUDIO_MODE_VOICE_RECOGNIZE,
};
static enum app_audio_mode_t audio_mode = APP_AUDIO_MODE_IDLE;
static uint32_t audio_data_counter = 0;
static audio_scene_t *audio_scene;
static void app_audio_stop(void)
{
switch(audio_mode) {
case APP_AUDIO_MODE_A2DP_SINK:
app_audio_a2dp_sink_stop();
break;
case APP_AUDIO_MODE_SCO:
app_audio_sco_stop();
break;
default:
break;
}
}
void app_audio_a2dp_sink_start(audio_type_t audio_type, uint32_t sample_rate)
{
audio_scene_param_a2dp_sink_t param;
if (audio_mode == APP_AUDIO_MODE_A2DP_SINK) {
return;
}
if (audio_mode != APP_AUDIO_MODE_IDLE) {
app_audio_stop();
}
param.sample_rate = sample_rate;
param.channels = 2;
param.audio_type = audio_type;
param.hw_type = AUDIO_HW_TYPE_CODEC;
param.hw_base_addr = I2S0_BASE;
assert(audio_mode == APP_AUDIO_MODE_IDLE);
audio_scene = audio_scene_create(AUDIO_SCENE_TYPE_A2DP_SINK, &param);
assert(audio_scene != NULL);
audio_mode = APP_AUDIO_MODE_A2DP_SINK;
}
void app_audio_a2dp_sink_stop(void)
{
if (audio_mode == APP_AUDIO_MODE_A2DP_SINK) {
audio_scene_destroy(audio_scene);
audio_mode = APP_AUDIO_MODE_IDLE;
device_pa_disable();
}
}
void app_audio_a2dp_sink_play(uint8_t *buffer, uint32_t length)
{
if (audio_mode == APP_AUDIO_MODE_A2DP_SINK) {
if (audio_scene_dac_is_ready(audio_scene)) {
device_pa_enable();
}
audio_scene_recv_raw_data(audio_scene, true, buffer, length);
}
}
void app_audio_sco_start(audio_type_t audio_type,audio_sence_report_encoded_frame report_enc_cb, void *report_enc_arg)
{
audio_scene_param_sco_t param;
if (audio_mode == APP_AUDIO_MODE_SCO) {
return;
}
if (audio_mode != APP_AUDIO_MODE_IDLE) {
app_audio_stop();
}
if (audio_type == AUDIO_TYPE_MSBC) {
printf("SCO: msbc.\r\n");
param.sample_rate = 16000;
}
else {
printf("SCO: cvsd.\r\n");
param.sample_rate = 8000;
}
param.audio_type = audio_type;
param.hw_type = AUDIO_HW_TYPE_CODEC;
param.hw_base_addr = I2S0_BASE;
param.report_enc_cb = report_enc_cb;
param.report_enc_arg = report_enc_arg;
assert(audio_mode == APP_AUDIO_MODE_IDLE);
audio_scene = audio_scene_create(AUDIO_SCENE_TYPE_SCO, &param);
audio_mode = APP_AUDIO_MODE_SCO;
assert(audio_scene != NULL);
}
void app_audio_sco_stop(void)
{
if (audio_mode == APP_AUDIO_MODE_SCO) {
audio_scene_destroy(audio_scene);
audio_mode = APP_AUDIO_MODE_IDLE;
device_pa_disable();
}
}
void app_audio_sco_recv(bool valid, uint8_t audio_type, uint8_t *buffer, uint32_t length)
{
if (audio_mode == APP_AUDIO_MODE_SCO) {
if (audio_scene_dac_is_ready(audio_scene)) {
device_pa_enable();
}
if (audio_type == AUDIO_TYPE_MSBC) {
audio_scene_recv_raw_data(audio_scene, valid, buffer+2, length-3);
}
else {
audio_scene_recv_raw_data(audio_scene, valid, buffer, length);
}
}
}

View File

@ -0,0 +1,21 @@
#ifndef _APP_AUDIO_H
#define _APP_AUDIO_H
#include <stdint.h>
#include <stdbool.h>
#include "audio_common.h"
#include "audio_scene.h"
void app_audio_a2dp_sink_start(audio_type_t audio_type, uint32_t sample_rate);
void app_audio_a2dp_sink_stop(void);
void app_audio_a2dp_sink_play(uint8_t *buffer, uint32_t length);
void app_audio_sco_start(audio_type_t audio_type, audio_sence_report_encoded_frame report_enc_cb, void *report_enc_arg);
void app_audio_sco_stop(void);
void app_audio_sco_recv(bool valid, uint8_t audio_type, uint8_t *buffer, uint32_t length);
void app_audio_voice_recognize_start(void);
void app_audio_voice_recognize_stop(void);
#endif // _APP_AUDIO_H

View File

@ -0,0 +1,378 @@
#include <string.h>
#include "co_log.h"
#include "gap_api.h"
#include "gatt_api.h"
#include "fdb_app.h"
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#include "portable.h"
#include "btdm_mem.h"
#include "ANCS_AMS_client.h"
#include "AMS_client.h"
#include "driver_gpio.h"
#include "hid_service.h"
#include "simple_gatt_service.h"
#include "ota_service.h"
#define APP_BLE_ADV_CHN_MAX 2
static void app_ble_start_advertising(uint8_t adv_chn);
char local_device_name[] = "Smart Watch";
static adv_handle adv[APP_BLE_ADV_CHN_MAX];
static uint16_t mtu_connected[8];
extern const uint8_t ble_static_addr[];
uint8_t slave_link_conidx;
/*
* Advertising data, max size is 28 bytes
*/
static uint8_t adv_data[] = {
#if 0
/* gatt service information */
0x03, //length of this AD
GAP_ADVTYPE_16BIT_MORE, //16bit service uuid AD type
//0xff, 0xf0, //value.service uuid:0xFFF0
LO_UINT16(0XFF72),
HI_UINT16(0XFF72),
#endif
/* local device name information */
0x0C, //length of this AD
GAP_ADVTYPE_LOCAL_NAME_COMPLETE, //complete name AD type
'S','m','a','r','t',' ','W','a','t','c','h', //value.local device name
0x09, // addr mac
GAP_ADVTYPE_MANUFACTURER_SPECIFIC,
LO_UINT16(0x1671),
HI_UINT16(0x1671),
0xc2,0x12,0x12,0x12,0x00,0x13,
0x03, // length of this data
GAP_ADVTYPE_APPEARANCE,
LO_UINT16(0x03c0),
HI_UINT16(0x03c0),
#if 0
// appearance
0x03, // length of this data
GAP_ADVTYPE_APPEARANCE,
LO_UINT16(GAP_APPEARE_HID_KEYBOARD),
HI_UINT16(GAP_APPEARE_HID_KEYBOARD),
#endif
};
/*
* Advertising scan response data, max size is 31 bytes
*/
static uint8_t adv_scan_rsp_data[] = {
#if 1
0x03, // length of this data
GAP_ADVTYPE_16BIT_COMPLETE,
LO_UINT16(HID_SERV_UUID),
HI_UINT16(HID_SERV_UUID),
#endif
#if 0
// Tx power level <20><><EFBFBD><EFBFBD><E4B9A6>
0x02, // length of this data
GAP_ADVTYPE_POWER_LEVEL,
0, // 0dBm
#endif
};
uint8_t service_id;
extern uint8_t slave_link_conidx;
uint16_t app_ble_get_mtu(uint8_t conidx)
{
return mtu_connected[conidx];
}
void app_ble_set_mtu(uint8_t conidx, uint16_t mtu)
{
mtu_connected[conidx] = mtu;
}
static uint16_t gap_callback(struct gap_event *event)
{
printf("gap_callback: type = %d\r\n", event->type);
switch(event->type) {
case GATT_EVT_PROFILE_ADDED:
{
printf("gap_callback: GATT_EVT_PROFILE_ADDED: 0x%02X\r\n", event->param.profile_added_status);
/* service profile has been added successfully, then the advertising can be started */
app_ble_start_advertising(0);
}
break;
case GAP_EVT_ADV_SET_PARAM:
printf("adv param set: 0x%02X\r\n", event->param.adv_set_param.status);
break;
case GAP_EVT_ADV_SET_ADV_DATA:
printf("adv data set: 0x%02X\r\n", event->param.adv_set_adv_data.status);
break;
case GAP_EVT_ADV_SET_SCAN_RSP:
printf("adv scan rsp data set: 0x%02X\r\n", event->param.adv_set_scan_rsp.status);
break;
case GAP_EVT_ADV_START:
printf("adv start :0x%02X\r\n", event->param.adv_start.status);
break;
case GAP_EVT_ADV_END:
printf("adv end: 0x%02X\r\n", event->param.adv_end.status);
break;
case GAP_EVT_SLAVE_CONNECT:
{
//gap_get_link_version(event->param.connect.conidx);
//gap_get_link_rssi(event->param.connect.conidx);
//gap_get_link_features(event->param.connect.conidx);
printf("slave connect[%d], connect num: %d\r\n", event->param.connect.conidx, gap_get_connect_num());
slave_link_conidx = event->param.connect.conidx;
//gatt_mtu_exchange_req(hid_svc_id, event->param.connect.conidx, 247);
//gap_security_req(event->param.connect.conidx);
#if BLE_PROFILE_ENABLE_ANCS
gatt_discovery_all_peer_svc(ANCS_AMS_client_id,event->param.connect.conidx);
#endif
}
break;
case GAP_EVT_DISCONNECT:
{
printf("gap_callback: GAP_EVT_DISCONNECT, conidx:%d, reason:0x%02X\r\n", event->param.disconnect.conidx,
event->param.disconnect.reason);
app_ble_start_advertising(0);
}
break;
case GATT_EVT_MTU:
printf("gap_callback: conidx: %d, GATT_EVT_MTU: %d\r\n", event->param.mtu_ind.conidx, event->param.mtu_ind.mtu);
app_ble_set_mtu(event->param.mtu_ind.conidx, event->param.mtu_ind.mtu);
//gap_security_req(event->param.connect.conidx);
break;
case GAP_EVT_SMP_ENCRYPT_SUCCESS:
printf("gap_callback: conidx: %d, GAP_EVT_SMP_ENCRYPT_SUCCESS \r\n", event->param.mtu_ind.conidx);
break;
case GAP_EVT_SMP_BOND_SUCCESS:
printf("gap_callback: conidx: %d, GAP_EVT_SMP_BOND_SUCCESS \r\n", event->param.mtu_ind.conidx);
#if BLE_PROFILE_ENABLE_ANCS
ancs_enable_src_notify(event->param.connect.conidx);
#endif
#if (BLE_PROFILE_ENABLE_HID)
hid_service_enable(event->param.connect.conidx);
#endif
#if 0
struct gap_link_param_update_req req;
req.conidx = event->param.connect.conidx;
req.intv_max = 12;
req.intv_min = 12;
req.latency = 30;
req.time_out = 140;
gap_param_update_req(&req);
#endif
//gap_conn_param_update((uint8_t)arg, 24, 24, 33, 500);
break;
case GAP_EVT_NAME_REQ:
{
gap_name_req_rsp(event->param.name_req.conidx,
event->param.name_req.token,
sizeof(local_device_name),
(uint8_t *)local_device_name);
}
break;
case GAP_EVT_APPEARANCE_REQ:
{
gap_appearance_req_rsp(event->param.appearance_req.conidx,
event->param.appearance_req.token,
GAP_APPEARE_HID_KEYBOARD);
}
break;
case GAP_EVT_LINK_PARAM_REQ:
{
struct gap_link_param_update_rsp rsp;
rsp.accept = true;
rsp.conidx = event->param.link_param_update_req.conidx;
rsp.ce_len_max = 2;
rsp.ce_len_min = 2;
gap_param_update_rsp(&rsp);
}
break;
case GAP_EVT_LINK_PARAM_UPDATE:
{
printf("conn param update,conidx:%d, con_int:%d, latency:%d, timeout%d\r\n", event->param.link_param_update.conidx,
event->param.link_param_update.con_interval,
event->param.link_param_update.con_latency,
event->param.link_param_update.sup_to);
//gap_security_req(event->param.connect.conidx);
}
break;
case GAP_EVT_LINK_RSSI:
printf("gap_callback: conidx: %d, GAP_EVT_LINK_RSSI: %d\r\n", event->param.gap_link_rssi.conidx, event->param.gap_link_rssi.link_rssi);
break;
case GAP_EVT_PHY_IND:
printf("gap_callback: conidx: %d, GAP_EVT_PHY_IND: %d\r\n", event->param.gap_phy_ind.conidx, event->param.gap_phy_ind.tx_phy);
break;
case GAP_EVT_PHY_REJECT:
printf("gap_callback: conidx: %d, GAP_EVT_PHY_REJECT, status: %d\r\n", event->param.gap_phy_update_reject.conidx, event->param.gap_phy_update_reject.status);
break;
case GAP_EVT_LINK_VER:
printf("gap_callback: conidx: %d, GAP_EVT_LINK_VER\r\n", event->param.gap_link_ver.conidx);
break;
case GAP_EVT_LINK_FEATURE:
printf("gap_callback: conidx: %d, GAP_EVT_LINK_FEATURE:%d\r\n", event->param.gap_link_feature.conidx, event->param.gap_link_feature.features[0]);
break;
default:
break;
}
return 0;
}
void app_ble_start_advertising(uint8_t adv_chn)
{
if (adv_chn < APP_BLE_ADV_CHN_MAX) {
if (adv[adv_chn] == NULL) {
struct gap_adv_param adv_param;
adv_param.adv_mode = GAP_ADV_MODE_UNDIRECT;
adv_param.disc_mode = GAP_ADV_DISC_MODE_GEN_DISC;
adv_param.filt_policy = GAP_ADV_FILTER_SCAN_ANY_CON_ANY;
adv_param.adv_chnl_map = GAP_ADV_CHAN_ALL;
adv_param.phy_mode = GAP_PHY_TYPE_LE_1M;
adv_param.own_addr_type = GAP_ADDR_TYPE_STATIC; // GAPM_GEN_RSLV_ADDR GAPM_STATIC_ADDR
adv_param.adv_intv_min = 1600;
adv_param.adv_intv_max = 1600;
adv[adv_chn] = gap_adv_create();
gap_adv_set_param(adv[adv_chn], &adv_param);
adv_data[17] = ble_static_addr[5];
adv_data[18] = ble_static_addr[4];
adv_data[19] = ble_static_addr[3];
adv_data[20] = ble_static_addr[2];
adv_data[21] = ble_static_addr[1];
adv_data[22] = ble_static_addr[0];
gap_adv_set_adv_data(adv[adv_chn], adv_data, sizeof(adv_data));
gap_adv_set_scan_rsp(adv[adv_chn], adv_scan_rsp_data, sizeof(adv_scan_rsp_data));
}
gap_adv_start(adv[adv_chn], 0, 0);
}
}
void app_ble_init(void)
{
printf("app_ble_init\r\n");
// gap_set_dev_appearance(GAP_APPEARE_HID_KEYBOARD);
/* set GAP event callback*/
gap_set_cb_func(gap_callback);
/* set security param */
struct gap_security_param smp_param;
smp_param.mitm = true;
smp_param.secure_connection = false;
smp_param.bond = true;
smp_param.oob_used = GAP_OOB_AUTH_DATA_NOT_PRESENT;
smp_param.io_cap = GAP_IO_CAP_NO_INPUT_NO_OUTPUT;
smp_param.rsp_mode = ENABLE_AUTO_RSP;
gap_security_param_init(&smp_param);
/* add service profile, The GAP callback event is GATT_EVT_PROFILE_ADDED*/
//app_ble_add_service();
ota_gatt_add_service();
sp_gatt_add_service();
#if BLE_PROFILE_ENABLE_ANCS
ANCS_AMS_gatt_add_client();
#endif
#if BLE_PROFILE_ENABLE_HID
hid_gatt_add_service();
#endif
}
void app_ble_scan_start(void)
{
struct gap_scan_param param;
param.scan_type = GAP_SCAN_TYPE_GEN_DISC;
param.own_addr_type = GAP_ADDR_TYPE_STATIC;
param.phy_mode = GAP_PHY_TYPE_LE_1M;
param.dup_filt_pol = true;
param.scan_intv = 32;
param.scan_window = 20;
param.duration = 0;
gap_scan_start(&param);
}
void app_ble_scan_stop(void)
{
gap_scan_stop();
}
void app_ble_conn_start(struct gap_ble_addr *addr)
{
struct gap_conn_param conn_param;
conn_param.peer_addr.addr_type = addr->addr_type;
conn_param.peer_addr.addr.addr[0] = addr->addr.addr[0];
conn_param.peer_addr.addr.addr[1] = addr->addr.addr[1];
conn_param.peer_addr.addr.addr[2] = addr->addr.addr[2];
conn_param.peer_addr.addr.addr[3] = addr->addr.addr[3];
conn_param.peer_addr.addr.addr[4] = addr->addr.addr[4];
conn_param.peer_addr.addr.addr[5] = addr->addr.addr[5];
conn_param.own_addr_type = GAP_ADDR_TYPE_STATIC;
conn_param.phy_mode = GAP_PHY_TYPE_LE_1M;
conn_param.scan_intv = 32;
conn_param.scan_window = 32;
conn_param.conn_intv_min = 24;
conn_param.conn_intv_max = 24;
conn_param.supervision_to = 500;
conn_param.slave_latency = 0;
conn_param.ce_len_max = 2;
conn_param.ce_len_min = 2;
gap_conn_start(&conn_param);
}
void app_ble_conn_stop(void)
{
gap_conn_stop();
}

View File

@ -0,0 +1,19 @@
#ifndef _APP_BLE_H
#define _APP_BLE_H
#include <stdint.h>
#include "gap_api.h"
void app_ble_init(void);
void app_ble_advertising_start(uint8_t adv_chn);
void app_ble_advertising_stop(uint8_t adv_chn);
void app_ble_scan_start(void);
void app_ble_scan_stop(void);
void app_ble_conn_start(struct gap_ble_addr *addr);
void app_ble_conn_stop(void);
#endif // _APP_BLE_H

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
#ifndef _APP_BT_H
#define _APP_BT_H
#include "app_btdm.h"
#include "hf_api.h"
#include "me_api.h"
#include "a2dp_api.h"
#include "hfg_api.h"
#include "avrcp_api.h"
#include "hid_api.h"
#include "spp_api.h"
#include "pbap_api.h"
extern HfChannel *hf_channel;
extern HfgChannel *hfg_channel;
extern A2dpStream *Stream;
extern AvrcpChannel *rcpCtChannel;
extern AvrcpChannel *rcpTgChannel;
extern PbapClientSession *pbap_client;
extern SppDev *spp_dev;
uint8_t bt_get_free_hf_channel(void);
uint8_t bt_get_free_hfg_channel(void);
uint8_t bt_get_free_a2dp_stream(void);
uint8_t bt_get_free_avrcp_channel(void);
void app_bt_send_sco_data(void *channel, uint8_t seq, uint8_t *data, uint16_t length);
void app_bt_init(app_btdm_callback_t cb);
#endif // _APP_BT_H

View File

@ -0,0 +1,240 @@
#include "app_config.h"
#include "app_task.h"
#include "app_btdm.h"
#include "app_audio.h"
#include "app_ble.h"
#include "app_bt.h"
#include "user_bt.h"
#include "fr_device_pmu_io.h"
#include "fr_device_pmu_io.h"
#include "co_list.h"
#include "controller.h"
#include "host.h"
#include "btdm_mem.h"
#include "fdb_app.h"
#define SCO_DATA_BUFFER_COUNT 4
typedef int32_t app_btdm_ret_t;
struct sco_data_t {
struct co_list_hdr hdr;
void *arg;
uint16_t length;
uint8_t data[];
};
uint8_t bt_addr[] = {0x12, 0x00, 0x12, 0x12, 0x12, 0x12};
uint8_t ble_public_addr[] = {0x13, 0x00, 0x88, 0x12, 0x12, 0x12};
uint8_t ble_static_addr[] = {0x13, 0x66, 0x88, 0x12, 0x12, 0xc2};
static uint8_t sco_data_buffering = 0;
static struct co_list sco_data_list;
static void encoded_sco_frame_cb(void *arg, uint8_t *data, uint16_t length)
{
static uint16_t seq = 0;
if (sco_data_buffering) {
struct sco_data_t *sco_data;
sco_data = (void *)btdm_malloc(sizeof(struct sco_data_t) + length);
sco_data->arg = arg;
sco_data->length = length;
memcpy((void *)&sco_data->data[0], data, length);
co_list_push_back(&sco_data_list, &sco_data->hdr);
sco_data_buffering--;
if (sco_data_buffering == 0) {
sco_data = (void *)co_list_pop_front(&sco_data_list);
while (sco_data) {
//fputc('D', NULL);
app_bt_send_sco_data(sco_data->arg, seq++, sco_data->data, sco_data->length);
btdm_free((void *)sco_data);
sco_data = (void *)co_list_pop_front(&sco_data_list);
}
}
}
else {
//fputc('D', NULL);
app_bt_send_sco_data(arg, seq++, data, length);
}
}
static void btdm_callback(struct app_btdm_event_t *event)
{
switch(event->event) {
case APP_BTDM_EVT_A2DP_STREAM_STARTED:
if (event->param.a2dp_codec.codec_type == APP_BTDM_CODEC_SBC) {
app_audio_a2dp_sink_start(AUDIO_TYPE_SBC, event->param.a2dp_codec.sample_rate);
}
else if (event->param.a2dp_codec.codec_type == APP_BTDM_CODEC_AAC) {
app_audio_a2dp_sink_start(AUDIO_TYPE_AAC, event->param.a2dp_codec.sample_rate);
}
system_prevent_sleep_set(SYSTEM_PREVENT_SLEEP_A2DP_ONGOING);
break;
case APP_BTDM_EVT_A2DP_STREAM_STOPPED:
app_audio_a2dp_sink_stop();
system_prevent_sleep_clear(SYSTEM_PREVENT_SLEEP_A2DP_ONGOING);
break;
case APP_BTDM_EVT_A2DP_STREAM_DATA:
app_audio_a2dp_sink_play(event->param.a2dp_data.buffer, event->param.a2dp_data.length);
break;
case APP_BTDM_EVT_SCO_CREATED:
sco_data_buffering = SCO_DATA_BUFFER_COUNT;
{
struct sco_data_t *sco_data;
sco_data = (void *)co_list_pop_front(&sco_data_list);
while (sco_data) {
btdm_free((void *)sco_data);
sco_data = (void *)co_list_pop_front(&sco_data_list);
}
}
if (event->param.sco_codec.codec_type == APP_BTDM_CODEC_mSBC) {
app_audio_sco_start(AUDIO_TYPE_MSBC, encoded_sco_frame_cb, event->param.sco_codec.hf_channel);
}
else {
app_audio_sco_start(AUDIO_TYPE_PCM, encoded_sco_frame_cb, event->param.sco_codec.hf_channel);
}
system_prevent_sleep_set(SYSTEM_PREVENT_SLEEP_SCO_ONGOING);
break;
case APP_BTDM_EVT_SCO_REMOVED:
app_audio_sco_stop();
system_prevent_sleep_clear(SYSTEM_PREVENT_SLEEP_SCO_ONGOING);
break;
case APP_BTDM_EVT_SCO_DATA:
{
uint8_t audio_codec_type;
if (event->param.sco_data.codec_type == APP_BTDM_CODEC_mSBC) {
audio_codec_type = AUDIO_TYPE_MSBC;
}
else {
audio_codec_type = AUDIO_TYPE_PCM;
}
app_audio_sco_recv(event->param.sco_data.valid, audio_codec_type, event->param.sco_data.buffer, event->param.sco_data.length);
}
break;
default:
break;
}
}
void app_btdm_start(void)
{
app_ble_init();
#if BTDM_STACK_ENABLE_BT == 1
app_bt_init(btdm_callback);
user_bt_init();
#endif
}
void host_ready_cb(void)
{
struct app_task_event *event;
/* notify application BTDM stack is ready. */
event = app_task_event_alloc(APP_TASK_EVENT_HOST_INITED, 0, true);
app_task_event_post(event, false);
}
void app_btdm_init(void)
{
/*get bt addr*/
#if BT_ADDR_RANDOM_ENABLE | BLE_ADDR_RANDOM_ENABLE
uint8_t rand_num[4];
if(flashdb_get(FDB_KEY_USER_RANDOM_SEED, (void *)&rand_num[0], 4) != 0){
#if BT_ADDR_RANDOM_ENABLE
memcpy((void *)&bt_addr[0],rand_num,4);
#endif
#if BLE_ADDR_RANDOM_ENABLE
memcpy((void *)&ble_static_addr[0],rand_num,4);
#endif
}
#endif
/* prepare for BTDM stack */
#if CONTROLLER_CODE_LOAD_MODE == CONTROLLER_CODE_LOAD_MODE_XIP_RO
#if CONTROLLER_CODE_INC_SENSOR_HUB
extern uint8_t CONTROLLER_CODE_SPLIT_OTA_BASE;
uint32_t controller_code_base_addr = (uint32_t)&CONTROLLER_CODE_SPLIT_OTA_BASE;
#else
extern uint8_t CONTROLLER_CODE_OTA_BASE;
uint32_t controller_code_base_addr = (uint32_t)&CONTROLLER_CODE_OTA_BASE;
#endif
controller_start(BTDM_STACK_HCI_BAUDRATE, ble_public_addr, bt_addr, controller_code_base_addr);
#elif CONTROLLER_CODE_LOAD_MODE == CONTROLLER_CODE_LOAD_MODE_FIX_ADDRESS
controller_start(BTDM_STACK_HCI_BAUDRATE, ble_public_addr, bt_addr, CONTROLLER_CODE_FIX_ADDRESS | FLASH_DAC_BASE);
#else
#error "choose correct CONTROLLER_CODE_LOAD_MODE"
#endif
#if BTDM_STACK_ENABLE_BT == 1
host_btdm_start(BTDM_STACK_HCI_BAUDRATE, HOST_TASK_STACK_SIZE, HOST_TASK_PRIORITY, ble_static_addr);
#else
host_ble_start(BTDM_STACK_HCI_BAUDRATE, HOST_TASK_STACK_SIZE, HOST_TASK_PRIORITY, ble_static_addr);
#endif
/* init MCU->BT pin, configure PMU_PIN_8 output BBG_EN signal */
ool_write(PMU_REG_DIAG_CTRL, 0x82);
ool_write(PMU_REG_PIN_IOMUX_H, 0x03);
/* disable PMU pin input as default setting */
ool_write16(PMU_REG_PIN_INPUT_EN, (PMU_IO_INTTERUPT_DEFAULT<<2) | 0x0002);
/* PP1 is connected to ARST of 1010, this pin is low in sleep mode */
ool_write16(PMU_REG_PIN_PULL_EN, 0x3ffd);
ool_write16(PMU_REG_PIN_PULL_SEL, 0x3fff);
/* init BT->MCU pin, system should not enter sleep mode when this pin is low level */
system_prevent_sleep_set(SYSTEM_PREVENT_SLEEP_TYPE_HCI_RX);
pmu_gpio_int_init(PMU_PIN_9, PMU_GPIO_PULL_UP, 0);
pmu_enable_isr(PMU_GPIO_PMU_INT_MSK_BIT);
NVIC_SetPriority(PMU_IRQn, 4);
NVIC_EnableIRQ(PMU_IRQn);
}
app_btdm_ret_t app_btdm_ble_adv_start(uint16_t dur)
{
return -1;
}
app_btdm_ret_t app_btdm_ble_adv_stop(void)
{
return -1;
}
app_btdm_ret_t app_btdm_ble_disconnect(void)
{
return -1;
}
app_btdm_ret_t app_btdm_bt_access_mode_set(uint8_t mode)
{
return -1;
}
app_btdm_ret_t app_btdm_bt_scan_start(uint16_t dur)
{
return -1;
}
app_btdm_ret_t app_btdm_bt_scan_stop(void)
{
return -1;
}
app_btdm_ret_t app_btdm_bt_connect(uint8_t *peer_addr)
{
return -1;
}
app_btdm_ret_t app_btdm_bt_disconnect(void)
{
return -1;
}
app_btdm_ret_t app_btdm_bt_profile_enable(uint16_t profiles)
{
return -1;
}
const uint8_t *app_get_bt_addr(void)
{
return bt_addr;
}

View File

@ -0,0 +1,67 @@
#ifndef _APP_BTDM_H
#define _APP_BTDM_H
#include <stdint.h>
#include <stdbool.h>
enum {
APP_BTDM_EVT_BLE_CONNECTED,
APP_BTDM_EVT_BLE_DISCONNECTED,
APP_BTDM_EVT_BT_CONNECTED,
APP_BTDM_EVT_BT_DISCONNECTED,
APP_BTDM_EVT_HF_INCOMING,
APP_BTDM_EVT_HF_CALL_ACTIVE,
APP_BTDM_EVT_HF_CALL_REMOVE,
APP_BTDM_EVT_A2DP_STREAM_STARTED,
APP_BTDM_EVT_A2DP_STREAM_STOPPED,
APP_BTDM_EVT_A2DP_STREAM_DATA,
APP_BTDM_EVT_AVRCP_VOL_CHANGE,
APP_BTDM_EVT_AVRCP_NEXT,
APP_BTDM_EVT_AVRCP_PREV,
APP_BTDM_EVT_AVRCP_PAUSE,
APP_BTDM_EVT_AVRCP_FAST_FORWARD,
APP_BTDM_EVT_AVRCP_FAST_BACKWARD,
APP_BTDM_EVT_SCO_CREATED,
APP_BTDM_EVT_SCO_REMOVED,
APP_BTDM_EVT_SCO_DATA,
};
enum {
APP_BTDM_CODEC_SBC,
APP_BTDM_CODEC_AAC,
APP_BTDM_CODEC_mSBC,
APP_BTDM_CODEC_PCM,
APP_BTDM_CODEC_UNKNOWN,
};
struct app_btdm_event_t {
uint8_t event;
union {
struct {
uint8_t *buffer;
uint32_t length;
} a2dp_data;
struct {
uint8_t codec_type;
uint32_t sample_rate;
} a2dp_codec;
struct {
bool valid;
uint8_t codec_type;
uint8_t *buffer;
uint32_t length;
} sco_data;
struct {
void *hf_channel;
uint8_t codec_type;
} sco_codec;
} param;
};
typedef void (*app_btdm_callback_t)(struct app_btdm_event_t *e);
void app_btdm_start(void);
void app_btdm_init(void);
const uint8_t *app_get_bt_addr(void);
#endif // _APP_BTDM_H

View File

@ -0,0 +1,938 @@
/*
* 1. AT command and log: UART3
* 2. HCI interface: UART0, GPIO_PMU, handled by host.c.
* 3. Display: DMA1, SPIx8_0, GPIO (for cs)
* 4. Touchpad: I2C3
* 5. PSRAM: OSPI
* 6. external Flash: DMA0, SPIx8_1
* 7. DSP: IPC, RPMSG
* 8. DSP XIP Flash: QSPI1
* 9. Sensors: handled by 1010
* 10. System clock, XIP Flash: handled by sleep procedure
*/
#include "fr30xx.h"
#include "driver_display.h"
#include "driver_touchpad.h"
#include "driver_psram.h"
#include "IC_W25Qxx.h"
#include "app_config.h"
#include "app_hw.h"
struct hw_gpio_state_t {
uint16_t PortA_PullEN;
uint16_t PortB_PullEN;
uint16_t PortC_PullEN;
uint16_t PortD_PullEN;
uint16_t PortA_PullSelect;
uint16_t PortB_PullSelect;
uint16_t PortC_PullSelect;
uint16_t PortD_PullSelect;
uint32_t PortA_PullResCfg;
uint32_t PortB_PullResCfg;
uint32_t PortC_PullResCfg;
uint32_t PortD_PullResCfg;
uint32_t PortA_DriveCfg;
uint32_t PortB_DriveCfg;
uint32_t PortC_DriveCfg;
uint32_t PortD_DriveCfg;
uint32_t PortA_L_FuncMux;
uint32_t PortA_H_FuncMux;
uint32_t PortB_L_FuncMux;
uint32_t PortB_H_FuncMux;
uint32_t PortC_L_FuncMux;
uint32_t PortC_H_FuncMux;
uint32_t PortD_L_FuncMux;
uint32_t PortD_H_FuncMux;
uint32_t QSPI_PullSelect;
uint32_t QSPI_PullEN;
uint32_t OSPI_PullSelect;
uint32_t OSPI_PullEN;
uint16_t GPIOA_OutputEN;
uint16_t GPIOA_OUT_DATA;
uint16_t GPIOA_EXTI_EN;
uint16_t GPIOA_EXTI_INT_EN;
uint32_t GPIOA_EXTI_TYPE;
uint16_t GPIOB_OutputEN;
uint16_t GPIOB_OUT_DATA;
uint16_t GPIOB_EXTI_EN;
uint16_t GPIOB_EXTI_INT_EN;
uint32_t GPIOB_EXTI_TYPE;
uint16_t GPIOC_OutputEN;
uint16_t GPIOC_OUT_DATA;
uint16_t GPIOC_EXTI_EN;
uint16_t GPIOC_EXTI_INT_EN;
uint32_t GPIOC_EXTI_TYPE;
uint16_t GPIOD_OutputEN;
uint16_t GPIOD_OUT_DATA;
uint16_t GPIOD_EXTI_EN;
uint16_t GPIOD_EXTI_INT_EN;
uint32_t GPIOD_EXTI_TYPE;
};
static struct hw_gpio_state_t gpio_state;
UART_HandleTypeDef uart_log_handle;
DMA_HandleTypeDef dma_display_handle;
SPI_HandleTypeDef spi_display_handle;
I2C_HandleTypeDef i2c_touchpad_handle;
SPI_HandleTypeDef spi_flash_handle;
DMA_HandleTypeDef dma_flash_handle;
void app_at_rx_done(struct __UART_HandleTypeDef *handle);
void display_cs_set(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_5, GPIO_PIN_SET);
}
void display_cs_clear(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_5, GPIO_PIN_CLEAR);
}
#if BOARD_SEL == BOARD_EVB_FR5090
void display_reset_set(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
}
void display_reset_clear(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_14, GPIO_PIN_CLEAR);
}
void display_vci_set(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
}
void display_vci_clear(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_13, GPIO_PIN_CLEAR);
}
bool display_te_status(void)
{
return 1;
}
#elif BOARD_SEL == BOARD_EVB_FR3092E
void display_reset_set(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
}
void display_reset_clear(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_6, GPIO_PIN_CLEAR);
}
void display_vci_set(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
}
void display_vci_clear(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_CLEAR);
}
bool display_te_status(void)
{
return gpio_read_pin(GPIOC, GPIO_PIN_7);
}
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
void display_reset_set(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
}
void display_reset_clear(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_14, GPIO_PIN_CLEAR);
}
void display_vci_set(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
}
void display_vci_clear(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_13, GPIO_PIN_CLEAR);
}
bool display_te_status(void)
{
return gpio_read_pin(GPIOB, GPIO_PIN_15);
}
#elif BOARD_SEL == BOARD_EVB_FR3092E
void display_reset_set(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
}
void display_reset_clear(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_6, GPIO_PIN_CLEAR);
}
void display_vci_set(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
}
void display_vci_clear(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_CLEAR);
}
bool display_te_status(void)
{
return gpio_read_pin(GPIOC, GPIO_PIN_7);
}
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
void display_reset_set(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
}
void display_reset_clear(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_14, GPIO_PIN_CLEAR);
}
void display_vci_set(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
}
void display_vci_clear(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_13, GPIO_PIN_CLEAR);
}
bool display_te_status(void)
{
return gpio_read_pin(GPIOB, GPIO_PIN_15);
}
#else
#error "choose correct board"
#endif
void display_delay_ms(uint32_t counter)
{
system_delay_us(counter * 1000);
}
#if BOARD_SEL == BOARD_EVB_FR5090
void touchpad_reset_set(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
}
void touchpad_reset_clear(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_CLEAR);
}
#elif BOARD_SEL == BOARD_EVB_FR3092E
#if 1 //DISPLAY_TYPE_ICNA3310
void touchpad_reset_set(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);
}
void touchpad_reset_clear(void)
{
gpio_write_pin(GPIOB, GPIO_PIN_15, GPIO_PIN_CLEAR);
}
#else
void touchpad_reset_set(void)
{
gpio_write_pin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET);
}
void touchpad_reset_clear(void)
{
gpio_write_pin(GPIOA, GPIO_PIN_6, GPIO_PIN_CLEAR);
}
#endif
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
void touchpad_reset_set(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
}
void touchpad_reset_clear(void)
{
gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_CLEAR);
}
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
void touchpad_reset_set(void)
{
//gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_SET);
}
void touchpad_reset_clear(void)
{
//gpio_write_pin(GPIOC, GPIO_PIN_15, GPIO_PIN_CLEAR);
}
#else
#error "choose correct board"
#endif
void touchpad_delay_ms(uint32_t counter)
{
system_delay_us(counter * 1000);
}
__RAM_CODE void hw_log_init(bool wake_up)
{
if (wake_up == false) {
GPIO_InitTypeDef gpio_config;
/* ========================================================== */
/* ========= Uart LOG configuration ========= */
/* ========================================================== */
/* configure PB4 and PB5 to UART3 function */
gpio_config.Pin = GPIO_PIN_4 | GPIO_PIN_5;
gpio_config.Mode = GPIO_MODE_AF_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_1;
gpio_init(GPIOB, &gpio_config);
__SYSTEM_UART3_CLK_ENABLE();
/* UART3: used for Log and AT command */
uart_log_handle.UARTx = UART3;
uart_log_handle.Init.BaudRate = 921600;
uart_log_handle.Init.DataLength = UART_DATA_LENGTH_8BIT;
uart_log_handle.Init.StopBits = UART_STOPBITS_1;
uart_log_handle.Init.Parity = UART_PARITY_NONE;
uart_log_handle.Init.FIFO_Mode = UART_FIFO_ENABLE;
uart_log_handle.TxCpltCallback = NULL;
uart_log_handle.RxCpltCallback = app_at_rx_done;
uart_init(&uart_log_handle);
NVIC_EnableIRQ(UART3_IRQn);
}
else {
__SYSTEM_UART3_CLK_ENABLE();
uart_init(&uart_log_handle);
__UART_INT_RX_ENABLE(uart_log_handle.UARTx);
NVIC_EnableIRQ(UART3_IRQn);
}
}
__RAM_CODE void hw_display_init(bool wake_up)
{
if (wake_up == false) {
GPIO_InitTypeDef gpio_config;
/* ========================================================== */
/* ========= Display interface configuration ========= */
/* ========================================================== */
/* config DMA1 for display */
__SYSTEM_DMA1_CLK_ENABLE();
dma_display_handle.DMAx = DMA1;
dma_display_handle.Channel = DMA_Channel0;
dma_display_handle.Init.Data_Flow = DMA_M2P_DMAC;
dma_display_handle.Init.Request_ID = 2;
system_dmac_request_id_config(SPIMX8_0_TX, DMA1_REQUEST_ID_2);
dma_display_handle.Init.Source_Master_Sel = DMA_AHB_MASTER_3;
dma_display_handle.Init.Desination_Master_Sel = DMA_AHB_MASTER_2;
dma_display_handle.Init.Source_Inc = DMA_ADDR_INC_INC;
dma_display_handle.Init.Desination_Inc = DMA_ADDR_INC_NO_CHANGE;
dma_display_handle.Init.Source_Width = DMA_TRANSFER_WIDTH_32;
dma_display_handle.Init.Desination_Width = DMA_TRANSFER_WIDTH_32;
dma_display_handle.Init.Source_Burst_Len = DMA_BURST_LEN_4;
dma_display_handle.Init.Desination_Burst_Len = DMA_BURST_LEN_4;
dma_init(&dma_display_handle);
NVIC_EnableIRQ(DMA1_IRQn);
__SYSTEM_GPIOB_CLK_ENABLE();
__SYSTEM_GPIOC_CLK_ENABLE();
/* configure C0, C1, C2, C3, C4 to SPIx8_0 function */
gpio_config.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4;
gpio_config.Mode = GPIO_MODE_AF_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_5;
gpio_init(GPIOC, &gpio_config);
/* configure C5 to CS function */
gpio_config.Pin = GPIO_PIN_5;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOC, &gpio_config);
#if BOARD_SEL == BOARD_EVB_FR5090
/* configure B13, PB14 to VCCI function, RESET function */
gpio_config.Pin = GPIO_PIN_13 | GPIO_PIN_14;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOB, &gpio_config);
#elif BOARD_SEL == BOARD_EVB_FR3092E
/* configure PC15, PC6 to VCCI function, RESET function n*/
gpio_config.Pin = GPIO_PIN_6 | GPIO_PIN_15;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOC, &gpio_config);
/* configure GPIO_PC7 to TE functio(interrupt pin) */
gpio_config.Pin = GPIO_PIN_7;
gpio_config.Mode = GPIO_MODE_INPUT;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_config.Pull = GPIO_PULLDOWN;
gpio_init(GPIOC, &gpio_config);
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
/* configure B13, PB14 to VCCI function, RESET function */
gpio_config.Pin = GPIO_PIN_13 | GPIO_PIN_14;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOB, &gpio_config);
/* configure GPIO_PB15 to TE functio(interrupt pin) */
gpio_config.Pin = GPIO_PIN_15;
gpio_config.Mode = GPIO_MODE_INPUT;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_config.Pull = GPIO_PULLDOWN;
gpio_init(GPIOB, &gpio_config);
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
/* configure PC15, PC6 to VCCI function, RESET function n*/
gpio_config.Pin = GPIO_PIN_6 | GPIO_PIN_15;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOC, &gpio_config);
/* configure GPIO_PC7 to TE functio(interrupt pin) */
gpio_config.Pin = GPIO_PIN_7;
gpio_config.Mode = GPIO_MODE_INPUT;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_config.Pull = GPIO_PULLDOWN;
gpio_init(GPIOC, &gpio_config);
#else
#error "choose correct board"
#endif
__SYSTEM_SPI_MASTER0_X8_CLK_ENABLE();
spi_display_handle.SPIx = SPIMX8_0;
spi_display_handle.Init.Work_Mode = SPI_WORK_MODE_0;
spi_display_handle.Init.Frame_Size = SPI_FRAME_SIZE_8BIT;
#if BOARD_SEL == BOARD_EVB_FR5090
spi_display_handle.Init.BaudRate_Prescaler = 2;
#elif BOARD_SEL == BOARD_EVB_FR3092E
spi_display_handle.Init.BaudRate_Prescaler = 4;
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
spi_display_handle.Init.BaudRate_Prescaler = 4;
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
spi_display_handle.Init.BaudRate_Prescaler = 4;
#else
#error "choose correct board"
#endif
spi_display_handle.Init.TxFIFOEmpty_Threshold = 20;
spi_display_handle.Init.RxFIFOFull_Threshold = 0;
spi_master_init(&spi_display_handle);
display_cs_set();
display_init();
}
else {
__SYSTEM_DMA1_CLK_ENABLE();
system_dmac_request_id_config(SPIMX8_0_TX, DMA1_REQUEST_ID_2);
dma_init(&dma_display_handle);
NVIC_EnableIRQ(DMA1_IRQn);
__SYSTEM_GPIOB_CLK_ENABLE();
__SYSTEM_GPIOC_CLK_ENABLE();
__SYSTEM_SPI_MASTER0_X8_CLK_ENABLE();
spi_display_handle.Init.Frame_Size = SPI_FRAME_SIZE_8BIT;
spi_master_init(&spi_display_handle);
}
}
__RAM_CODE void hw_touchpad_init(bool wake_up)
{
if (wake_up == false) {
GPIO_InitTypeDef gpio_config;
/* ========================================================== */
/* ========= TP configuration ========= */
/* ========================================================== */
__SYSTEM_GPIOC_CLK_ENABLE();
#if BOARD_SEL == BOARD_EVB_FR5090
/* configure GPIO_PC6 and GPIO_PC7 to I2C3 mode */
gpio_config.Pin = GPIO_PIN_6|GPIO_PIN_7;
gpio_config.Mode = GPIO_MODE_AF_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_3;
gpio_init(GPIOC, &gpio_config);
/* configure GPIO_PC15 to reset pin */
gpio_config.Pin = GPIO_PIN_15;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOC, &gpio_config);
/* configure GPIO_PC14 to interrupt pin */
gpio_config.Pin = GPIO_PIN_14;
gpio_config.Mode = GPIO_MODE_EXTI_IT_FALLING;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_config.Pull = GPIO_PULLUP;
gpio_init(GPIOC, &gpio_config);
#elif BOARD_SEL == BOARD_EVB_FR3092E
#if 1 //DISPLAY_TYPE_ICNA3310
/* configure GPIO_PB12 and GPIO_PB13 to I2C2 mode */
gpio_config.Pin = GPIO_PIN_12|GPIO_PIN_13;
gpio_config.Mode = GPIO_MODE_AF_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_3;
gpio_init(GPIOB, &gpio_config);
/* configure GPIO_PB15 to reset pin */
gpio_config.Pin = GPIO_PIN_15;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOB, &gpio_config);
/* configure GPIO_PB14 to interrupt pin */
gpio_config.Pin = GPIO_PIN_14;
gpio_config.Mode = GPIO_MODE_EXTI_IT_FALLING;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_config.Pull = GPIO_PULLUP;
gpio_init(GPIOB, &gpio_config);
exti_interrupt_enable(GPIOB,EXTI_LINE_14);
exti_clear_LineStatus(GPIOB,EXTI_LINE_14);
NVIC_EnableIRQ(GPIOB_IRQn);
#else
/* configure GPIO_PA4 and GPIO_PA5 to I2C2 mode */
gpio_config.Pin = GPIO_PIN_4|GPIO_PIN_5;
gpio_config.Mode = GPIO_MODE_AF_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_3;
gpio_init(GPIOA, &gpio_config);
__SYSTEM_GPIOA_CLK_ENABLE();
/* configure GPIO_PA6 to reset pin */
gpio_config.Pin = GPIO_PIN_6;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOA, &gpio_config);
__SYSTEM_GPIOB_CLK_ENABLE();
/* configure GPIO_PB14 to interrupt pin */
gpio_config.Pin = GPIO_PIN_14;
gpio_config.Mode = GPIO_MODE_EXTI_IT_FALLING;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_config.Pull = GPIO_PULLUP;
gpio_init(GPIOB, &gpio_config);
#endif
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
/* configure GPIO_PC6 and GPIO_PC7 to I2C3 mode */
gpio_config.Pin = GPIO_PIN_6|GPIO_PIN_7;
gpio_config.Mode = GPIO_MODE_AF_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_3;
gpio_init(GPIOC, &gpio_config);
/* configure GPIO_PC15 to reset pin */
gpio_config.Pin = GPIO_PIN_15;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOC, &gpio_config);
/* configure GPIO_PC14 to interrupt pin */
gpio_config.Pin = GPIO_PIN_14;
gpio_config.Mode = GPIO_MODE_EXTI_IT_FALLING;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_config.Pull = GPIO_PULLUP;
gpio_init(GPIOC, &gpio_config);
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
#else
#error "choose correct board"
#endif
/* I2C Init */
#if BOARD_SEL == BOARD_EVB_FR5090
__SYSTEM_I2C3_CLK_ENABLE();
i2c_touchpad_handle.I2Cx = I2C3;
i2c_touchpad_handle.Init.I2C_Mode = I2C_MODE_MASTER_7BIT;
i2c_touchpad_handle.Init.SCL_HCNT = 220;
i2c_touchpad_handle.Init.SCL_LCNT = 230;
#elif BOARD_SEL == BOARD_EVB_FR3092E
__SYSTEM_I2C2_CLK_ENABLE();
i2c_touchpad_handle.I2Cx = I2C2;
i2c_touchpad_handle.Init.I2C_Mode = I2C_MODE_MASTER_7BIT;
i2c_touchpad_handle.Init.SCL_HCNT = 220;
i2c_touchpad_handle.Init.SCL_LCNT = 230;
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
__SYSTEM_I2C3_CLK_ENABLE();
i2c_touchpad_handle.I2Cx = I2C3;
i2c_touchpad_handle.Init.I2C_Mode = I2C_MODE_MASTER_7BIT;
i2c_touchpad_handle.Init.SCL_HCNT = 90;
i2c_touchpad_handle.Init.SCL_LCNT = 90;
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
#else
#error "choose correct board"
#endif
i2c_init(&i2c_touchpad_handle);
__TOUCHPAD_RESET_SET();
touchpad_init();
}
else {
__SYSTEM_GPIOC_CLK_ENABLE();
#if BOARD_SEL == BOARD_EVB_FR3092E
__SYSTEM_I2C2_CLK_ENABLE();
#else
__SYSTEM_I2C3_CLK_ENABLE();
#endif
i2c_init(&i2c_touchpad_handle);
}
}
__RAM_CODE void hw_psram_init(bool wake_up)
{
uint32_t reg_value;
__SYSTEM_OSPI_CLK_SELECT_AUPLL();
__SYSTEM_OSPI_CLK_ENABLE();
__SYSTEM_AHBC_CLK_ENABLE();
__CACHE_FLUSH(CACHE);
__CACHE_WR_MODE_SET(CACHE, CACHE_WR_WRITE_THROUGH);
__CACHE_ADDR_RANGEx_BANK_SET(CACHE, 0, 0 >> 16);
__CACHE_ADDR_RANGEx_MASK_SET(CACHE, 0, 0x001F);
__CACHE_ADDR_RANGEx_POL_SET(CACHE, 0, CACHE_POL_CACHABLE);
__CACHE_ADDR_RANGEx_ENABLE(CACHE, 0);
__CACHE_ENABLE(CACHE);
if (wake_up == false) {
/* setup PSRAM OSPI RESET pin */
SYSTEM->OspiPadConfig.OSPI_FuncMux |= 0x00300000;
SYSTEM->OspiOutEN &= (~(1<<10));
SYSTEM->OspiData |= (1<<10);
system_delay_us(200); // tPU > 150us
SYSTEM->OspiData &= (~(1<<10));
system_delay_us(10); // tRP > 1us
SYSTEM->OspiData |= (1<<10);
system_delay_us(600); // tDPDp > 500us
system_delay_us(300); // tHSPU > 1ms, from power up to fully access
}
/* configure OSPI pad to OSPI 4-line mode function */
reg_value = SYSTEM->OspiPadConfig.OSPI_FuncMux;
reg_value &= 0xfcf00ffc;
reg_value |= 0x01055001;
SYSTEM->OspiPadConfig.OSPI_FuncMux = reg_value;
psram_init(wake_up == false);
}
__RAM_CODE void hw_external_flash_init(bool wake_up)
{
if (wake_up == false) {
GPIO_InitTypeDef gpio_config;
/* ========================================================== */
/* ========= External Flash interface configuration ======== */
/* ========================================================== */
/* config GPIO for external flash */
gpio_config.Pin = GPIO_PIN_8 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
gpio_config.Mode = GPIO_MODE_AF_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_7;
gpio_init(GPIOC, &gpio_config);
/* CS of external flash is controllerd by software */
__SYSTEM_GPIOC_CLK_ENABLE();
gpio_config.Pin = GPIO_PIN_9;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Pull = GPIO_PULLUP;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOC, &gpio_config);
/* config DMA0 for external flash */
__SYSTEM_DMA0_CLK_ENABLE();
dma_flash_handle.DMAx = DMA0;
dma_flash_handle.Channel = DMA_Channel0;
dma_flash_handle.Init.Data_Flow = DMA_P2M_DMAC;
dma_flash_handle.Init.Request_ID = 2;
system_dmac_request_id_config(SPIMX8_1_RX, DMA0_REQUEST_ID_2);
dma_flash_handle.Init.Source_Master_Sel = DMA_AHB_MASTER_1;
dma_flash_handle.Init.Desination_Master_Sel = DMA_AHB_MASTER_4;
dma_flash_handle.Init.Source_Inc = DMA_ADDR_INC_NO_CHANGE;
dma_flash_handle.Init.Desination_Inc = DMA_ADDR_INC_INC;
dma_flash_handle.Init.Source_Width = DMA_TRANSFER_WIDTH_32;
dma_flash_handle.Init.Desination_Width = DMA_TRANSFER_WIDTH_32;
dma_flash_handle.Init.Source_Burst_Len = DMA_BURST_LEN_4;
dma_flash_handle.Init.Desination_Burst_Len = DMA_BURST_LEN_4;
dma_init(&dma_flash_handle);
/* Initial SPIx8_1 for extern flash */
__SYSTEM_SPI_MASTER1_X8_CLK_ENABLE();
spi_flash_handle.SPIx = SPIMX8_1;
spi_flash_handle.Init.Work_Mode = SPI_WORK_MODE_3;
spi_flash_handle.Init.Frame_Size = SPI_FRAME_SIZE_8BIT;
spi_flash_handle.Init.BaudRate_Prescaler = 2;
spi_flash_handle.Init.TxFIFOEmpty_Threshold = 20;
spi_flash_handle.Init.RxFIFOFull_Threshold = 4;
spi_master_init(&spi_flash_handle);
__SPI_RX_SAMPLE_DLY(spi_flash_handle.SPIx, 2);
__SPI_CS_Release();
IC_W25Qxx_QuadConfig(true);
NVIC_EnableIRQ(DMA0_IRQn);
NVIC_EnableIRQ(SPIMX8_1_IRQn);
}
else {
__SYSTEM_GPIOC_CLK_ENABLE();
__SYSTEM_DMA0_CLK_ENABLE();
system_dmac_request_id_config(SPIMX8_1_RX, DMA0_REQUEST_ID_2);
dma_init(&dma_flash_handle);
__SYSTEM_SPI_MASTER1_X8_CLK_ENABLE();
spi_master_init(&spi_flash_handle);
__SPI_RX_SAMPLE_DLY(spi_flash_handle.SPIx, 2);
NVIC_EnableIRQ(DMA0_IRQn);
NVIC_EnableIRQ(SPIMX8_1_IRQn);
}
}
__RAM_CODE void hw_dsp_xip_flash_init(bool wake_up)
{
uint32_t reg_value;
/* init QSPI1 for DSP XIP flash */
__SYSTEM_QSPI1_CLK_SELECT_AUPLL();
__SYSTEM_QSPI1_CLK_ENABLE();
/* configure OSPI pad to DSP XIP flash function */
reg_value = SYSTEM->OspiPadConfig.OSPI_FuncMux;
reg_value &= 0xc3fff033;
reg_value |= 0x14000544;
SYSTEM->OspiPadConfig.OSPI_FuncMux = reg_value;
/* power on DSP flash */
ool_write(0xfc, ool_read(0xfc) | 0x01);
/* configure DSP XIP controller */
flash_enable_quad(QSPI1);
flash_init_controller(QSPI1, FLASH_RD_TYPE_QUAD_FAST, FLASH_WR_TYPE_SINGLE);
flash_set_baudrate(QSPI1, QSPI_BAUDRATE_DIV_4);
}
__RAM_CODE void hw_dsp_restore(void)
{
}
__RAM_CODE __attribute__((noinline)) static void rise_qspi_clock(void)
{
__SYSTEM_QSPI0_CLK_SELECT_AUPLL();
__QSPI_DELAY_CS_START_SET(QSPI0, 4);
__QSPI_DELAY_CS_END_SET(QSPI0, 4);
__QSPI_DELAY_CS_DESSERT_SET(QSPI0, 8);
__QSPI_READ_CAPTURE_DELAY_SET(QSPI0, 3); // FLASH_ID_PUYA_P25Q32: 4 when div is 2
// FLASH_ID_XMC_XM25LU32: 3 when div is 2
// FLASH_ID_GIANTEC_GT25Q16A: 1 when div is 4
// FLASH_ID_GIANTEC_GT25Q16A: 4 when div is 2
system_delay_us(1000);
}
__RAM_CODE void hw_xip_flash_init(bool wake_up)
{
// init internal flash
__SYSTEM_PFC_CLK_ENABLE();
__SYSTEM_QSPI0_CLK_ENABLE();
__SYSTEM_APB_CLK_ENABLE();
__SYSTEM_APB1_CLK_ENABLE();
system_cache_enable(true);
flash_enable_quad(QSPI0);
SYSTEM->QspiPadConfig.QSPI_FuncMux = 0x00000500;
flash_init_controller(QSPI0, FLASH_RD_TYPE_QUAD_FAST, FLASH_WR_TYPE_SINGLE);
if (wake_up == false) {
flash_set_IO_DRV(QSPI0, 3);
}
flash_set_baudrate(QSPI0, QSPI_BAUDRATE_DIV_2);
rise_qspi_clock();
}
__RAM_CODE void hw_gpio_save(void)
{
gpio_state.PortA_PullEN = SYSTEM->PortA_PullEN;
gpio_state.PortB_PullEN = SYSTEM->PortB_PullEN;
gpio_state.PortC_PullEN = SYSTEM->PortC_PullEN;
gpio_state.PortD_PullEN = SYSTEM->PortD_PullEN;
gpio_state.PortA_PullSelect = SYSTEM->PortA_PullSelect;
gpio_state.PortB_PullSelect = SYSTEM->PortB_PullSelect;
gpio_state.PortC_PullSelect = SYSTEM->PortC_PullSelect;
gpio_state.PortD_PullSelect = SYSTEM->PortD_PullSelect;
gpio_state.PortA_PullResCfg = SYSTEM->PortA_PullResCfg;
gpio_state.PortB_PullResCfg = SYSTEM->PortB_PullResCfg;
gpio_state.PortC_PullResCfg = SYSTEM->PortC_PullResCfg;
gpio_state.PortD_PullResCfg = SYSTEM->PortD_PullResCfg;
gpio_state.PortA_DriveCfg = SYSTEM->PortA_DriveCfg;
gpio_state.PortB_DriveCfg = SYSTEM->PortB_DriveCfg;
gpio_state.PortC_DriveCfg = SYSTEM->PortC_DriveCfg;
gpio_state.PortD_DriveCfg = SYSTEM->PortD_DriveCfg;
gpio_state.PortA_L_FuncMux = SYSTEM->PortA_L_FuncMux;
gpio_state.PortA_H_FuncMux = SYSTEM->PortA_H_FuncMux;
gpio_state.PortB_L_FuncMux = SYSTEM->PortB_L_FuncMux;
gpio_state.PortB_H_FuncMux = SYSTEM->PortB_H_FuncMux;
gpio_state.PortC_L_FuncMux = SYSTEM->PortC_L_FuncMux;
gpio_state.PortC_H_FuncMux = SYSTEM->PortC_H_FuncMux;
gpio_state.PortD_L_FuncMux = SYSTEM->PortD_L_FuncMux;
gpio_state.PortD_H_FuncMux = SYSTEM->PortD_H_FuncMux;
gpio_state.QSPI_PullSelect = SYSTEM->QspiPadConfig.QSPI_PullSelect;
gpio_state.QSPI_PullEN = SYSTEM->QspiPadConfig.QSPI_PullEN;
gpio_state.OSPI_PullSelect = SYSTEM->OspiPadConfig.OSPI_PullSelect;
gpio_state.OSPI_PullEN = SYSTEM->OspiPadConfig.OSPI_PullEN;
__SYSTEM_GPIOA_CLK_ENABLE();
__SYSTEM_GPIOB_CLK_ENABLE();
__SYSTEM_GPIOC_CLK_ENABLE();
__SYSTEM_GPIOD_CLK_ENABLE();
gpio_state.GPIOA_OutputEN = GPIOA->GPIO_OutputEN;
gpio_state.GPIOA_OUT_DATA = GPIOA->GPIO_OUT_DATA;
gpio_state.GPIOA_EXTI_EN = GPIOA->EXTI_EN;
gpio_state.GPIOA_EXTI_INT_EN= GPIOA->EXTI_INT_EN;
gpio_state.GPIOA_EXTI_TYPE = GPIOA->EXTI_TYPE;
gpio_state.GPIOB_OutputEN = GPIOB->GPIO_OutputEN;
gpio_state.GPIOB_OUT_DATA = GPIOB->GPIO_OUT_DATA;
gpio_state.GPIOB_EXTI_EN = GPIOB->EXTI_EN;
gpio_state.GPIOB_EXTI_INT_EN= GPIOB->EXTI_INT_EN;
gpio_state.GPIOB_EXTI_TYPE = GPIOB->EXTI_TYPE;
gpio_state.GPIOC_OutputEN = GPIOC->GPIO_OutputEN;
gpio_state.GPIOC_OUT_DATA = GPIOC->GPIO_OUT_DATA;
gpio_state.GPIOC_EXTI_EN = GPIOC->EXTI_EN;
gpio_state.GPIOC_EXTI_INT_EN= GPIOC->EXTI_INT_EN;
gpio_state.GPIOC_EXTI_TYPE = GPIOC->EXTI_TYPE;
gpio_state.GPIOD_OutputEN = GPIOD->GPIO_OutputEN;
gpio_state.GPIOD_OUT_DATA = GPIOD->GPIO_OUT_DATA;
gpio_state.GPIOD_EXTI_EN = GPIOD->EXTI_EN;
gpio_state.GPIOD_EXTI_INT_EN= GPIOD->EXTI_INT_EN;
gpio_state.GPIOD_EXTI_TYPE = GPIOD->EXTI_TYPE;
}
__RAM_CODE void hw_gpio_restore(void)
{
SYSTEM->PortA_PullEN = gpio_state.PortA_PullEN;
SYSTEM->PortB_PullEN = gpio_state.PortB_PullEN;
SYSTEM->PortC_PullEN = gpio_state.PortC_PullEN;
SYSTEM->PortD_PullEN = gpio_state.PortD_PullEN;
SYSTEM->PortA_PullSelect = gpio_state.PortA_PullSelect;
SYSTEM->PortB_PullSelect = gpio_state.PortB_PullSelect;
SYSTEM->PortC_PullSelect = gpio_state.PortC_PullSelect;
SYSTEM->PortD_PullSelect = gpio_state.PortD_PullSelect;
SYSTEM->PortA_PullResCfg = gpio_state.PortA_PullResCfg;
SYSTEM->PortB_PullResCfg = gpio_state.PortB_PullResCfg;
SYSTEM->PortC_PullResCfg = gpio_state.PortC_PullResCfg;
SYSTEM->PortD_PullResCfg = gpio_state.PortD_PullResCfg;
SYSTEM->PortA_DriveCfg = gpio_state.PortA_DriveCfg;
SYSTEM->PortB_DriveCfg = gpio_state.PortB_DriveCfg;
SYSTEM->PortC_DriveCfg = gpio_state.PortC_DriveCfg;
SYSTEM->PortD_DriveCfg = gpio_state.PortD_DriveCfg;
SYSTEM->PortA_L_FuncMux = gpio_state.PortA_L_FuncMux;
SYSTEM->PortA_H_FuncMux = gpio_state.PortA_H_FuncMux;
SYSTEM->PortB_L_FuncMux = gpio_state.PortB_L_FuncMux;
SYSTEM->PortB_H_FuncMux = gpio_state.PortB_H_FuncMux;
SYSTEM->PortC_L_FuncMux = gpio_state.PortC_L_FuncMux;
SYSTEM->PortC_H_FuncMux = gpio_state.PortC_H_FuncMux;
SYSTEM->PortD_L_FuncMux = gpio_state.PortD_L_FuncMux;
SYSTEM->PortD_H_FuncMux = gpio_state.PortD_H_FuncMux;
SYSTEM->QspiPadConfig.QSPI_PullSelect = gpio_state.QSPI_PullSelect;
SYSTEM->QspiPadConfig.QSPI_PullEN = gpio_state.QSPI_PullEN;
SYSTEM->OspiPadConfig.OSPI_PullSelect = gpio_state.OSPI_PullSelect;
SYSTEM->OspiPadConfig.OSPI_PullEN = gpio_state.OSPI_PullEN;
__SYSTEM_GPIOA_CLK_ENABLE();
__SYSTEM_GPIOB_CLK_ENABLE();
__SYSTEM_GPIOC_CLK_ENABLE();
__SYSTEM_GPIOD_CLK_ENABLE();
GPIOA->GPIO_OutputEN = gpio_state.GPIOA_OutputEN;
GPIOA->GPIO_OUT_DATA = gpio_state.GPIOA_OUT_DATA;
GPIOA->EXTI_EN = gpio_state.GPIOA_EXTI_EN;
GPIOA->EXTI_INT_EN = gpio_state.GPIOA_EXTI_INT_EN;
GPIOA->EXTI_TYPE = gpio_state.GPIOA_EXTI_TYPE;
GPIOB->GPIO_OutputEN = gpio_state.GPIOB_OutputEN;
GPIOB->GPIO_OUT_DATA = gpio_state.GPIOB_OUT_DATA;
GPIOB->EXTI_EN = gpio_state.GPIOB_EXTI_EN;
GPIOB->EXTI_INT_EN = gpio_state.GPIOB_EXTI_INT_EN;
GPIOB->EXTI_TYPE = gpio_state.GPIOB_EXTI_TYPE;
GPIOC->GPIO_OutputEN = gpio_state.GPIOC_OutputEN;
GPIOC->GPIO_OUT_DATA = gpio_state.GPIOC_OUT_DATA;
GPIOC->EXTI_EN = gpio_state.GPIOC_EXTI_EN;
GPIOC->EXTI_INT_EN = gpio_state.GPIOC_EXTI_INT_EN;
GPIOC->EXTI_TYPE = gpio_state.GPIOC_EXTI_TYPE;
GPIOD->GPIO_OutputEN = gpio_state.GPIOD_OutputEN;
GPIOD->GPIO_OUT_DATA = gpio_state.GPIOD_OUT_DATA;
GPIOD->EXTI_EN = gpio_state.GPIOD_EXTI_EN;
GPIOD->EXTI_INT_EN = gpio_state.GPIOD_EXTI_INT_EN;
GPIOD->EXTI_TYPE = gpio_state.GPIOD_EXTI_TYPE;
}
__RAM_CODE void hw_clock_init(void)
{
System_ClkConfig_t sys_clk_cfg;
sys_clk_cfg.AUPLL_CFG.PLL_N = 8;
sys_clk_cfg.AUPLL_CFG.PLL_M = 0;
sys_clk_cfg.AUPLL_CFG.PowerEn = 1;
sys_clk_cfg.SPLL_CFG.PLL_N = 8;
sys_clk_cfg.SPLL_CFG.PLL_M = 0;
sys_clk_cfg.SPLL_CFG.PowerEn = 1;
sys_clk_cfg.MCU_Clock_Source = MCU_CLK_SEL_SPLL_CLK;
sys_clk_cfg.SOC_DIV = 1;
sys_clk_cfg.MCU_DIV = 1;
sys_clk_cfg.APB0_DIV = 1;
sys_clk_cfg.APB1_DIV = 1;
sys_clk_cfg.APB2_DIV = 1;
sys_clk_cfg.APB3_DIV = 1;
System_AUPLL_config(&sys_clk_cfg.AUPLL_CFG, 1000);
System_SPLL_config(&sys_clk_cfg.SPLL_CFG, 1000);
System_MCU_clock_Config(&sys_clk_cfg);
__SYSTEM_SPI_MASTER0_X8_CLK_SELECT_AUPLL();
__SYSTEM_SPI_MASTER1_X8_CLK_SELECT_AUPLL();
__SYSTEM_I2C_CLK_SELECT_SPLL();
__SYSTEM_BLEND_CLK_SELECT_SPLL();
__SYSTEM_UART_CLK_SELECT_SPLL();
}

View File

@ -0,0 +1,28 @@
#ifndef __APP_HW_H__
#define __APP_HW_H__
#include "fr30xx.h"
extern UART_HandleTypeDef uart_log_handle;
extern DMA_HandleTypeDef dma_display_handle;
extern SPI_HandleTypeDef spi_display_handle;
extern I2C_HandleTypeDef i2c_touchpad_handle;
extern SPI_HandleTypeDef spi_flash_handle;
extern DMA_HandleTypeDef dma_flash_handle;
void hw_log_init(bool wake_up);
void hw_display_init(bool wake_up);
void hw_touchpad_init(bool wake_up);
void hw_psram_init(bool wake_up);
void hw_external_flash_init(bool wake_up);
void hw_xip_flash_init(bool wake_up);
void hw_dsp_xip_flash_init(bool wake_up);
void hw_clock_init(void);
void hw_gpio_save(void);
void hw_gpio_restore(void);
void hw_dsp_restore(void);
#endif // __APP_HW_H__

View File

@ -0,0 +1,38 @@
#include <stdio.h>
#include "co_log.h"
#include <stdarg.h>
#include "FreeRTOS.h"
#include "semphr.h"
static SemaphoreHandle_t printMutex;
void init_printf_mutex(void)
{
printMutex = xSemaphoreCreateMutex();
if (printMutex == NULL) {
}
}
//线程安全打印接口
void thread_safe_printf(const char *format, ...)
{
va_list args;
va_start(args, format);
if(xPortIsInsideInterrupt()) {
if (xSemaphoreTakeFromISR(printMutex, NULL)) {
vprintf(format, args);
xSemaphoreGiveFromISR(printMutex, NULL);
}
}else
{
if (xSemaphoreTake(printMutex, portMAX_DELAY)) {
vprintf(format, args);
xSemaphoreGive(printMutex);
}
}
va_end(args);
}

View File

@ -0,0 +1,12 @@
#ifndef _APP_LOG_H
#define _APP_LOG_H
void init_printf_mutex(void);
void thread_safe_printf(const char *format, ...) ;
#define app_printf thread_safe_printf
#endif

View File

@ -0,0 +1,930 @@
#include "fr30xx.h"
#include "driver_display.h"
#include "driver_touchpad.h"
#include "driver_psram.h"
/* FreeRTOS kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "co_util.h"
/* little file system */
#include "lfs_port.h"
/* LVGL includes */
#include "demos/lv_demos.h"
#include "app_config.h"
#include "app_lvgl.h"
#include "app_hw.h"
#include "fr_device_rtc.h"
#include "fr_device_encode.h"
#include "fr_device_vbat.h"
//task queue
#define GUI_TASK_QUEUE_LENGTH ( 64 )
#define SYS_TASK_QUEUE_LENGTH ( 64 )
//lvgl define
#if BOARD_SEL == BOARD_EVB_FR5090
#define LCD_HOR_SIZE (466)
#define LCD_VER_SIZE (466)
#elif BOARD_SEL == BOARD_EVB_FR3092E
#if 0 //DISPLAY_TYPE_ICNA3310
#define LCD_HOR_SIZE (466)
#define LCD_VER_SIZE (466)
#else
#define LCD_HOR_SIZE (368)
#define LCD_VER_SIZE (448)
#endif
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
#define LCD_HOR_SIZE (368)
#define LCD_VER_SIZE (448)
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
#define LCD_HOR_SIZE (480)
#define LCD_VER_SIZE (272)
#else
#error "choose correct board"
#endif
/* Maximal horizontal and vertical resolution to support by the library.*/
#define LV_HOR_RES_MAX (480)
#define LV_VER_RES_MAX (272)
#if (((LCD_HOR_SIZE - LV_HOR_RES_MAX) / 2 ) & 0x01)
#define HOR_OFFSET (((LCD_HOR_SIZE - LV_HOR_RES_MAX) / 2 ) + 0x01)
#else
#define HOR_OFFSET (((LCD_HOR_SIZE - LV_HOR_RES_MAX) / 2 ) + 0x00)
#endif
#if (((LCD_VER_SIZE - LV_VER_RES_MAX) / 2 ) & 0x01)
#define VER_OFFSET (((LCD_VER_SIZE - LV_VER_RES_MAX) / 2 ) + 0x01)
#else
#define VER_OFFSET (((LCD_VER_SIZE - LV_VER_RES_MAX) / 2 ) + 0x00)
#endif
#define LV_HOR_RES_MAX_ZOOM 258
#define LV_VER_RES_MAX_ZOOM 314
//#define IMG_BUFFER_VER 262
//#define DISPLAY_BUFFER_SIZE LV_HOR_RES_MAX*IMG_BUFFER_VER*LV_COLOR_DEPTH/8/sizeof(uint32_t)
#define DISPLAY_BUFFER_SIZE LV_HOR_RES_MAX*LV_VER_RES_MAX*LV_COLOR_DEPTH/8/sizeof(uint32_t)
#define DISPLAY_PSRAM_SIZE LV_HOR_RES_MAX*LV_VER_RES_MAX*LV_COLOR_DEPTH/8
#define DISPLAY_BLOCK_LINE DECODE_LINE_NUMBER
#define DISPLAY_BUFFER_20_LINE LV_HOR_RES_MAX*DISPLAY_BLOCK_LINE*LV_COLOR_DEPTH/8/sizeof(uint32_t)
DMA_HandleTypeDef dma_psram_handle;
/* used for DMA display */
static volatile bool display_dma_ongoing = false;
/* LVGL display buf enviroment */
static lv_disp_draw_buf_t disp_buf;
static lv_disp_drv_t * last_disp;
lv_indev_t * indev_keypad;
uint8_t key_code;
uint32_t display_framebuffer_block[DISPLAY_BUFFER_20_LINE+16];
uint32_t framebuffer_block_len = (DISPLAY_BUFFER_20_LINE+16) << 2;
//uint32_t display_framebuffer_bk[LV_HOR_RES_MAX*LV_VER_RES_MAX/2];
uint32_t display_framebuffer[DISPLAY_BUFFER_SIZE];
uint32_t display_framebuffer1[DISPLAY_BUFFER_SIZE];
//#define display_framebuffer1 display_framebuffer
#define LOAD_ORIG_FRAMEBUFFER (void *)PSRAM_DAC_BASE
#define LOAD_LEFT_FRAMEBUFFER (void *)(PSRAM_DAC_BASE + DISPLAY_PSRAM_SIZE)
#define LOAD_RIGHT_FRAMEBUFFER (void *)(PSRAM_DAC_BASE + DISPLAY_PSRAM_SIZE*2)
static QueueHandle_t gui_queue_handle;
static QueueHandle_t app_queue_handle;
static TaskHandle_t gui_task_Handle = NULL;
//过场特效的背景对<E699AF>?
const lv_img_dsc_t fetch_orig_img = {
.header.always_zero = 0,
.header.w = LV_HOR_RES_MAX,
.header.h = LV_VER_RES_MAX,
.data_size = LV_HOR_RES_MAX * LV_VER_RES_MAX * LV_COLOR_SIZE / 8,
.header.cf = LV_IMG_CF_TRUE_COLOR,
.header.reserved = 0,
.data = (const uint8_t *)display_framebuffer1,//(void *)PSRAM_DAC_BASE,
};
const lv_img_dsc_t fetch_orig_zoom_img = {
.header.always_zero = 0,
.header.w = LV_HOR_RES_MAX_ZOOM,
.header.h = LV_VER_RES_MAX_ZOOM,
.data_size = LV_HOR_RES_MAX_ZOOM * LV_VER_RES_MAX_ZOOM * LV_COLOR_SIZE / 8,
.header.cf = LV_IMG_CF_TRUE_COLOR,
.header.reserved = 0,
.data = (const uint8_t *)display_framebuffer1,//(void *)PSRAM_DAC_BASE,
};
const lv_img_dsc_t fetch_left_img = {
.header.always_zero = 0,
.header.w = LV_HOR_RES_MAX,
.header.h = LV_VER_RES_MAX,
.data_size = LV_HOR_RES_MAX * LV_VER_RES_MAX * LV_COLOR_SIZE / 8,
.header.cf = LV_IMG_CF_TRUE_COLOR,
.header.reserved = 0,
.data = LOAD_LEFT_FRAMEBUFFER,
};
const lv_img_dsc_t fetch_right_img = {
.header.always_zero = 0,
.header.w = LV_HOR_RES_MAX,
.header.h = LV_VER_RES_MAX,
.data_size = LV_HOR_RES_MAX * LV_VER_RES_MAX * LV_COLOR_SIZE / 8,
.header.cf = LV_IMG_CF_TRUE_COLOR,
.header.reserved = 0,
.data = LOAD_RIGHT_FRAMEBUFFER,
};
const lv_img_dsc_t fetch_disp_buf_img = {
.header.always_zero = 0,
.header.w = LV_HOR_RES_MAX,
.header.h = LV_VER_RES_MAX,
.data_size = LV_HOR_RES_MAX * LV_VER_RES_MAX * LV_COLOR_SIZE / 8,
.header.cf = LV_IMG_CF_TRUE_COLOR,
.header.reserved = 0,
.data = (const uint8_t *)display_framebuffer,
};
const lv_img_dsc_t fetch_disp_buf_zoom_img = {
.header.always_zero = 0,
.header.w = LV_HOR_RES_MAX_ZOOM,
.header.h = LV_VER_RES_MAX_ZOOM,
.data_size = LV_HOR_RES_MAX_ZOOM * LV_VER_RES_MAX_ZOOM * LV_COLOR_SIZE / 8,
.header.cf = LV_IMG_CF_TRUE_COLOR,
.header.reserved = 0,
.data = (const uint8_t *)display_framebuffer1 + (LV_HOR_RES_MAX * LV_VER_RES_MAX)
};
extern bool fetch_orig_buffer_flag;
extern bool fetch_orig_buffer_zoom_flag;
extern bool exit_disp_flush_flag;
extern bool fetch_disp_buffer_flag;
extern bool fetch_disp_buffer_zoom_flag;
void fr_app_mainUI0_func(lv_obj_t *parent);
void lv_prj_main(void);
static void setup_gui_running(void);
//----------------------------------------------------
//lvgl function
//----------------------------------------------------
// this function is when frame data is flushed
static void my_disp_flush_done(void)
{
lv_disp_flush_ready(last_disp);
}
void lv_disp_draw_buf_sw(bool sw)
{
lv_disp_t *disp = lv_disp_get_default();
if(disp == NULL) return;
disp->driver->full_refresh = 1;
if(sw)
{
lv_disp_draw_buf_init(&disp_buf, (void *)display_framebuffer, NULL, LV_HOR_RES_MAX * LV_VER_RES_MAX);
//printf("display_framebuffer \n");
}
else
{
lv_disp_draw_buf_init(&disp_buf, (void *)display_framebuffer_block, NULL, LV_HOR_RES_MAX * DISPLAY_BLOCK_LINE);
//printf("display_framebuffer_block \n");
}
lv_disp_drv_update(disp, disp->driver);
}
void lv_disp_buffer_copy(void)
{
//fputc('<', NULL);
volatile uint32_t * dst = display_framebuffer1;
volatile uint32_t * src = display_framebuffer;
for (uint32_t i=0; i<DISPLAY_PSRAM_SIZE/sizeof(uint32_t); i++) {
*dst++ = *src++;
}
//fputc('>', NULL);
}
bool lv_fetch_disp_buffer_func(const lv_area_t * area)
{
volatile uint32_t *dst ;
volatile uint32_t *src ;
// uint8_t * b_dst;
// uint8_t * b_src;
uint32_t i,j;
if(fetch_orig_buffer_zoom_flag)
{
//printf("disp w:%d,x:%d, h:%d,y:%d \n",(area->x2-area->x1+1),area->x1,(area->y2 - area->y1+1),area->y1);
//fputc('[', NULL);
// b_dst = (uint8_t *)display_framebuffer1;
// b_src = (uint8_t *)display_framebuffer;
// b_src += (LV_HOR_RES_MAX * ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2) + ((LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM)/ 2)) * 2;
// for (i = 0; i < LV_VER_RES_MAX_ZOOM; i++)
// {
// memcpy(b_dst, b_src, LV_HOR_RES_MAX_ZOOM * 2);
// b_src += LV_HOR_RES_MAX * 2;
// b_dst += LV_HOR_RES_MAX_ZOOM * 2;
// }
dst = display_framebuffer1;
src = display_framebuffer;
src += (LV_HOR_RES_MAX * ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2) + ((LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM)/ 2)) / 2;
for (i = 0; i < LV_VER_RES_MAX_ZOOM; i++)
{
for (j=0; j < LV_HOR_RES_MAX_ZOOM / 2; j++)
{
*dst++ = *src++;
}
src += (LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM) / 2;
}
//fputc(']', NULL);
}
if(fetch_disp_buffer_flag)
{
//printf("disp w:%d,x:%d, h:%d,y:%d \n",(area->x2-area->x1+1),area->x1,(area->y2 - area->y1+1),area->y1);
//printf("load disp buffer \n");
// dst = LOAD_LEFT_FRAMEBUFFER;
// src = display_framebuffer;
// for (i=0; i<DISPLAY_PSRAM_SIZE/sizeof(uint32_t); i++) {
// *dst++ = *src++;
// }
}
if(fetch_disp_buffer_zoom_flag)
{
//fputc('(', NULL);
// //img 2 address offset
// b_dst = (uint8_t *)display_framebuffer1;
// b_dst += (LV_HOR_RES_MAX * LV_VER_RES_MAX);
// b_src = (uint8_t *)display_framebuffer_block;
// uint16_t h = (area->y2 - area->y1 + 1);
// // printf("1 addr :%x \n",b_src);
// if(area->y1 <= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2))
// {
// b_src += (LV_HOR_RES_MAX * ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2) + ((LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM)/ 2)) * 2;
// h -= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2);
// }
// else
// {
// // printf("dst height :%d \n",(area->y1 - ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2)));
// b_dst += (LV_HOR_RES_MAX_ZOOM * (area->y1 - ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2)) * 2);
// b_src += (LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM);
// if((area->y2 - ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2)) >= LV_VER_RES_MAX_ZOOM)
// {
// if(h >= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2))
// {
// h -= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2);
// }
// else
// {
// h = 0;
// }
// }
// }
// // printf("next w:%d,x:%d, h:%d,y1:%d y2:%d, h:%d\n",(area->x2-area->x1+1),area->x1,(area->y2 - area->y1+1),area->y1,area->y2, h);
// // printf("2 addr :%x d addr %d\n",b_src, b_dst);
// for (i = 0; i < h; i++)
// {
// memcpy(b_dst, b_src, LV_HOR_RES_MAX_ZOOM * 2);
// b_src += LV_HOR_RES_MAX * 2;
// b_dst += LV_HOR_RES_MAX_ZOOM * 2;
// }
dst = display_framebuffer1;
dst += (LV_HOR_RES_MAX * LV_VER_RES_MAX) / 4;
src = display_framebuffer_block;
int16_t h = (area->y2 - area->y1 + 1);
// printf("1 addr :%x \n",b_src);
if(area->y1 <= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2))
{
src += (LV_HOR_RES_MAX * ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2) + ((LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM)/ 2)) / 2;
h -= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2);
}
else
{
// printf("dst height :%d \n",(area->y1 - ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2)));
dst += (LV_HOR_RES_MAX_ZOOM * (area->y1 - ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2)) / 2);
src += (LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM) / 4;
if((area->y2 - ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2)) >= LV_VER_RES_MAX_ZOOM)
{
if(h >= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2))
{
h -= ((LV_VER_RES_MAX - LV_VER_RES_MAX_ZOOM)/ 2);
}
else
{
h = 0;
}
}
}
// printf("next w:%d,x:%d, h:%d,y1:%d y2:%d, h:%d\n",(area->x2-area->x1+1),area->x1,(area->y2 - area->y1+1),area->y1,area->y2, h);
// printf("2 addr :%x d addr %d\n",b_src, b_dst);
for (i = 0; i < h; i++)
{
for (j=0; j < LV_HOR_RES_MAX_ZOOM / 2; j++)
{
*dst++ = *src++;
}
src += (LV_HOR_RES_MAX - LV_HOR_RES_MAX_ZOOM) / 2;
}
//fputc(')', NULL);
}
if(fetch_disp_buffer_flag || fetch_orig_buffer_flag ||fetch_orig_buffer_zoom_flag ||fetch_disp_buffer_zoom_flag)
{
if(fetch_disp_buffer_flag)
{
lv_disp_draw_buf_sw(0);
}
else if(fetch_disp_buffer_zoom_flag)
{
if(area->y2 + 1 != LV_VER_RES_MAX)
{
return false;
}
else
{
lv_disp_draw_buf_sw(1);
}
}
fetch_disp_buffer_flag = false;
fetch_orig_buffer_flag = false;
fetch_orig_buffer_zoom_flag = false;
fetch_disp_buffer_zoom_flag = false;
return false;
}
if(exit_disp_flush_flag)
{
return false;
}
return true;
}
void* get_display_buffer1(void)
{
return display_framebuffer1;
}
extern bool display_te_status(void);
extern uint8_t volatile te_sign;
#include <stdio.h>
__RAM_CODE void convert_rgb565_to_bgr565(const uint16_t* rgb565_data, uint16_t* bgr565_data, uint32_t num_pixels) {
for (uint32_t i = 0; i < num_pixels; i++) {
uint16_t pixel = rgb565_data[i];
uint16_t bgr_pixel = ((pixel & 0x001F) << 11) | ((pixel & 0x07E0)) | ((pixel & 0xF800) >> 11);
bgr565_data[i] = bgr_pixel;
}
}
uint32_t last_time=0;
extern void uart_transmit_byte(uint8_t *buf,uint32_t len);
extern uint32_t get_system_dwt_value(void);
static void my_disp_flush(lv_disp_drv_t * disp, const lv_area_t * area, lv_color_t * color_p)
{
static uint8_t flags=0;
#if 1
//printf("t:%d\r\n",(get_system_dwt_value()-last_time)/192);
#if BOARD_SEL == BOARD_EVB_FR3092E_RGB
if(area->y1 == 0)
{
while(!te_sign)
{
// vTaskDelay(1);
}
}
uint32_t time1 = get_system_dwt_value();
#if 0
for(int i=area->y1; i<= area->y2; i++) //19ms
{
uint16_t *pColor = &(((uint16_t*)display_framebuffer1)[i*480]);
for(int j=area->x1; j<= area->x2; j++)
{
pColor[j] = rgb565_to_bgr(color_p[(i-area->y1)*(area->x2-area->x1+1)+(j-area->x1)].full);
//pColor[j] =(color_p[(i-area->y1)*(area->x2-area->x1+1)+(j-area->x1)].full);
}
}
#else
//memcpy((uint8_t*)display_framebuffer1,(uint8_t*)color_p,(area->x2+1-area->x1)*(area->y2+1-area->y1)*2); //3ms
convert_rgb565_to_bgr565((uint16_t*)color_p,(uint16_t*)display_framebuffer1,(area->x2+1-area->x1)*(area->y2+1-area->y1));//9ms
uint32_t time2 = get_system_dwt_value();
//printf("time:%d\r\n",(time2-time1)/192);
#endif
//printf("disp %d,%d,%d,%d\r\n", area->x1, area->x2, area->y1, area->y2);
lv_disp_flush_ready(disp);
//last_time = get_system_dwt_value();
#else
if(!lv_fetch_disp_buffer_func(area))
{
lv_disp_flush_ready(disp);
return;
}
while(display_dma_ongoing);
system_prevent_sleep_set(SYSTEM_PREVENT_SLEEP_DISPLAY_ONGOING);
display_dma_ongoing = true;
last_disp = disp;
while(!display_te_status());
display_set_window(HOR_OFFSET+area->x1,
HOR_OFFSET+area->x2,
VER_OFFSET+area->y1,
VER_OFFSET+area->y2);
#if LV_COLOR_DEPTH == 16
display_update_dma((area->x2+1-area->x1)*(area->y2+1-area->y1), 16, (void *)color_p);
#elif LV_COLOR_DEPTH == 32
display_update_dma((area->x2+1-area->x1)*(area->y2+1-area->y1), 32, (void *)color_p);
#endif
#endif
#else
display_set_window(HOR_OFFSET+area->x1,
HOR_OFFSET+area->x2,
VER_OFFSET+area->y1,
VER_OFFSET+area->y2);
#if LV_COLOR_DEPTH == 16
display_update((area->x2+1-area->x1)*(area->y2+1-area->y1), 16, (void *)color_p);
#elif LV_COLOR_DEPTH == 32
display_update((area->x2+1-area->x1)*(area->y2+1-area->y1), 32, (void *)color_p);
#endif
lv_disp_flush_ready(disp);
#endif
}
static void my_touchpad_read(struct _lv_indev_drv_t * indev, lv_indev_data_t * data)
{
// uint8_t buffer[8];
//
// touchpad_read_data_raw(buffer, 8);
// data->state = (buffer[2] != 0) ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;
// if(data->state == LV_INDEV_STATE_PR) {
// data->point.x = ((buffer[3]&0x0f)<<8) | buffer[4];
// data->point.y = ((buffer[5]&0x0f)<<8) | buffer[6];
// }
int16_t x, y;
bool pressed;
pressed = touchpad_read(&x, &y);
if (pressed) {
if ((x < HOR_OFFSET)
|| (x >= HOR_OFFSET + LV_HOR_RES_MAX)
|| (y < VER_OFFSET)
|| (y >= (VER_OFFSET + LV_VER_RES_MAX))) {
data->state = LV_INDEV_STATE_REL;
}
else {
data->state = LV_INDEV_STATE_PR;
data->point.x = x - HOR_OFFSET;
data->point.y = y - VER_OFFSET;
//printf("x:%d,y:%d\n",data->point.x,data->point.y);
}
setup_gui_running();
}
else
{
data->state = LV_INDEV_STATE_REL;
}
}
static uint32_t keypad_get_key(void)
{
/*Your code comes here*/
return key_code;
}
/*Will be called by the library to read the mouse*/
static void keypad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
static uint32_t last_key = 0;
/*Get the current x and y coordinates*/
//mouse_get_xy(&data->point.x, &data->point.y);
/*Get whether the a key is pressed and save the pressed key*/
uint32_t act_key = keypad_get_key();
if(act_key != 0) {
data->state = LV_INDEV_STATE_PR;
/*Translate the keys to LVGL control characters according to your key definitions*/
switch(act_key) {
case 1:
act_key = LV_KEY_NEXT;
break;
case 2:
act_key = LV_KEY_PREV;
break;
case 3:
act_key = LV_KEY_LEFT;
break;
case 4:
act_key = LV_KEY_RIGHT;
break;
case 5:
act_key = LV_KEY_ENTER;
break;
}
last_key = act_key;
//printf("%d keydown \n",last_key);
} else {
data->state = LV_INDEV_STATE_REL;
}
data->key = last_key;
}
bool touchpad_state(void)
{
int16_t x, y;
return touchpad_read(&x, &y);
}
static void lvgl_init(void)
{
lv_init();
lv_disp_draw_buf_init(&disp_buf, (void *)display_framebuffer, NULL, LV_HOR_RES_MAX * LV_VER_RES_MAX); /*Initialize the display buffer*/
/* Implement and register a function which can copy the rendered image to an area of your display */
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
disp_drv.flush_cb = my_disp_flush; /*Set your driver function*/
disp_drv.draw_buf = &disp_buf; /*Assign the buffer to the display*/
disp_drv.hor_res = LV_HOR_RES_MAX;
disp_drv.ver_res = LV_VER_RES_MAX;
disp_drv.physical_hor_res = -1;
disp_drv.physical_ver_res = -1;
disp_drv.offset_x = 0;
disp_drv.offset_y = 0;
disp_drv.full_refresh = 1;
lv_disp_drv_register(&disp_drv); /*Finally register the driver*/
/* Implement and register a function which can read an input device. E.g. for a touch pad */
// static lv_indev_drv_t indev_drv; /*Descriptor of a input device driver*/
// lv_indev_drv_init(&indev_drv); /*Basic initialization*/
// indev_drv.type = LV_INDEV_TYPE_POINTER; /*Touch pad is a pointer-like device*/
// indev_drv.read_cb = my_touchpad_read; /*Set your driver function*/
// lv_indev_drv_register(&indev_drv); /*Finally register the driver*/
#if 1
/*------------------
* Keypad
* -----------------*/
static lv_indev_drv_t indev_drv1;
/*Initialize your keypad or keyboard if you have*/
//keypad_init();
/*Register a keypad input device*/
lv_indev_drv_init(&indev_drv1);
indev_drv1.type = LV_INDEV_TYPE_KEYPAD;
indev_drv1.read_cb = keypad_read;
indev_keypad = lv_indev_drv_register(&indev_drv1);
/*Later you should create group(s) with `lv_group_t * group = lv_group_create()`,
*add objects to the group with `lv_group_add_obj(group, obj)`
*and assign this input device to group to navigate in it:
*`lv_indev_set_group(indev_keypad, group);`*/
#endif
// lv_demo_benchmark();
// lv_demo_stress();
// lv_demo_widgets();
// lv_demo_music();
//lv_demo_benchmark();
lv_prj_main();
}
//----------------------------------------------------
//end
//----------------------------------------------------
int gui_task_msg_send(uint16_t msg_type,
void *header,
uint16_t header_length,
uint8_t *payload,
uint16_t payload_length,
ipc_tx_callback callback)
{
gui_task_msg_t queue_event;
queue_event.msg_type = msg_type;
queue_event.param_len = header_length+payload_length;
memcpy(queue_event.param, header, header_length);
memcpy(queue_event.param+header_length, payload, payload_length);
//if (portNVIC_INT_CTRL_REG & 0xff)
if(xPortIsInsideInterrupt())
{
BaseType_t xTaskWokenByPost = pdFALSE;
if (xQueueSendFromISR(gui_queue_handle, &queue_event, &xTaskWokenByPost) == errQUEUE_FULL )
{
return -1;
}
else
{
portYIELD_FROM_ISR(xTaskWokenByPost);
}
}
else
{
if (xQueueSend(gui_queue_handle, &queue_event, ( TickType_t ) 0) != pdPASS)
{
return -1;
}
}
return 0;
}
int sync_task_msg_send(uint16_t msg_type,
void *header,
uint16_t header_length,
uint8_t *payload,
uint16_t payload_length,
ipc_tx_callback callback)
{
gui_task_msg_t queue_event;
queue_event.msg_type = msg_type;
queue_event.param_len = header_length+payload_length;
memcpy(queue_event.param, header, header_length);
memcpy(queue_event.param+header_length, payload, payload_length);
//if (portNVIC_INT_CTRL_REG & 0xff)
if(xPortIsInsideInterrupt())
{
BaseType_t xTaskWokenByPost = pdFALSE;
if (xQueueSendFromISR(app_queue_handle, &queue_event, &xTaskWokenByPost) == errQUEUE_FULL )
{
return -1;
}
else
{
portYIELD_FROM_ISR(xTaskWokenByPost);
}
}
else
{
if (xQueueSend(app_queue_handle, &queue_event, ( TickType_t ) 0) != pdPASS)
{
return -1;
}
}
return 0;
}
uint32_t gui_running_last_time;
bool gui_task_resume_flag = false;
bool gui_task_suspend_flag = false;
static void setup_gui_running(void)
{
gui_running_last_time = portGET_RUN_TIME_COUNTER_VALUE();
}
static uint32_t get_gui_running_basetime(void)
{
uint32_t cur_base_time = portGET_RUN_TIME_COUNTER_VALUE();
uint32_t diff;
if(cur_base_time >= gui_running_last_time)
diff = cur_base_time - gui_running_last_time;
else
diff = (((uint32_t)0xFFFFFFFF) - gui_running_last_time) + cur_base_time + 1;
return diff;
}
bool screensaver_lock_flags = false;
static void gui_task_auto_suspend(void)
{
if(get_gui_running_basetime() > (10 * 1000) || gui_task_suspend_flag)
{
lv_obj_add_flag(lv_scr_act(),LV_OBJ_FLAG_HIDDEN);
while(display_dma_ongoing)
{
vTaskDelay(1);
}
setup_gui_running();
display_power_off();
touchpad_sleep();
vTaskSuspend(gui_task_Handle);
gui_task_suspend_flag = false;
}
// //表盘动画启动
// if(get_gui_running_basetime() > (4 * 1000))
// {
// if(!screensaver_lock_flags)
// {
// gui_task_msg_send(SCREENSAVER_IN_EVT,NULL,0,NULL,0,NULL);
// }
// }
if(gui_task_resume_flag)
{
gui_task_resume_flag = false;
lv_obj_clear_flag(lv_scr_act(),LV_OBJ_FLAG_HIDDEN);
}
}
bool gui_task_suspend_state(void)
{
return gui_task_suspend_flag;
}
void gui_task_suspend(void)
{
//vTaskSuspend(gui_task_Handle);
gui_task_suspend_flag = true;
}
void * gui_task_handle_is_active(void)
{
return gui_task_Handle;
}
bool gui_task_resume(void)
{
setup_gui_running();
if( eTaskGetState( gui_task_Handle ) == eSuspended)
{
touchpad_init();
display_power_on();
vTaskResume(gui_task_Handle);
gui_task_resume_flag = true;
return true;
}
return false;
}
//gui task
static void gui_task(void *arg)
{
gui_task_msg_t queue_event;
printf("gui_task \r\n");
/* lfs init */
//lfs_custom_init();
//lfs_custom_test_write_file();
//dev_rtc_time_init();
vTaskDelay(200);
lvgl_init();
// Create queue for gui task
gui_queue_handle = xQueueCreate(GUI_TASK_QUEUE_LENGTH, sizeof(gui_task_msg_t));
//battery detect
// adc_vbat_start_detect();
setup_gui_running();
printf("gui_task run\r\n");
while(1) {
vTaskDelay(1);
lv_timer_handler();
// rtc_running();
// encode_key_release();
if (xQueueReceive(gui_queue_handle, &queue_event, 0) == pdPASS)
{
gui_task_queue_callback(&queue_event);
}
if(lv_tick_get()%1000==0)
{
printf("lvgl tick\r\n");
}
// gui_task_auto_suspend();
}
}
static void sync_task(void *arg)
{
uint32_t sync_counter = 0;
gui_task_msg_t queue_event;
printf("sync_task \r\n");
// Create queue for sync task
app_queue_handle = xQueueCreate(SYS_TASK_QUEUE_LENGTH, sizeof(gui_task_msg_t));
while(1) {
if (xQueueReceive(app_queue_handle, &queue_event, 0) == pdPASS)
{
}
}
}
void app_lvgl_init(void)
{
memset((uint8_t*)display_framebuffer1,0xff,480*272*2);
#if (BOARD_SEL == BOARD_EVB_FR3092E_RGB)
display_init();
#else
hw_display_init(false);
hw_touchpad_init(false);
#endif
#if ENABLE_PSRAM
hw_psram_init(false);
printf("PSRAM ID is 0x%08x.\r\n", psram_read_id());
#endif
/* create gui relative task. */
xTaskCreate( gui_task, "gui_task", GUI_TASK_STACK_SIZE, NULL, GUI_TASK_PRIORITY, &gui_task_Handle );
//xTaskCreate( sync_task, "sync_task", SYNC_TASK_STACK_SIZE, NULL, SYNC_TASK_PRIORITY, NULL );
}
void dma1_irq(void)
{
if (dma_get_tfr_Status(&dma_display_handle)) {
display_update_dma_isr();
display_dma_ongoing = false;
my_disp_flush_done();
system_prevent_sleep_clear(SYSTEM_PREVENT_SLEEP_DISPLAY_ONGOING);
}
}
void gpiob_irq(void)
{
//printf("this is gpiob irq\r\n");
// if(exti_get_LineStatus(GPIOB,0xFFFF))
// {
// exti_clear_LineStatus(GPIOB,0xFFFF);
// }
if(exti_get_LineStatus(GPIOB,EXTI_LINE_14))
{
exti_clear_LineStatus(GPIOB,EXTI_LINE_14);
//printf("this is portb exti line 14 \r\n");
// int16_t x, y;
// touchpad_read(&x, &y);
// printf("tp x:%d,y%d\n",x,y)
}
}
uint32_t *user_get_display_framebuffer(void)
{
memset((void*)display_framebuffer1,0,DISPLAY_BUFFER_SIZE);
return (uint32_t *)display_framebuffer1;
}

View File

@ -0,0 +1,55 @@
#ifndef _APP_LVGL_H
#define _APP_LVGL_H
#include "stdint.h"
typedef struct
{
uint16_t msg_type;
uint16_t param_len;
uint8_t param[32 - 4];
}gui_task_msg_t;
typedef enum
{
BUTTON_KEY_EVT = 0,
ENCODE_KEY_EVT,
BUTTON_KEY1_EVT,
BUTTON_KEY2_EVT,
MESSAGE_IN_EVT,
PHONE_CALL_IN_EVT,
PHONE_CALL_OK_EVT,
PHONE_CALL_REJECT_EVT,
MUSIC_CONTROL_EVT,
POWER_CHARGE_IN_EVT,
POWER_CHARGE_OUT_EVT,
SCREENSAVER_IN_EVT,
}user_msg_type_t;
typedef void (*ipc_tx_callback)(uint8_t chn);
void app_lvgl_init(void);
void lv_disp_draw_buf_sw(bool sw);
int gui_task_msg_send(uint16_t msg_type,
void *header,
uint16_t header_length,
uint8_t *payload,
uint16_t payload_length,
ipc_tx_callback callback);
void gui_task_queue_callback(gui_task_msg_t * event);
bool gui_task_suspend_state(void);
void gui_task_suspend(void);
bool gui_task_resume(void);
void * gui_task_handle_is_active(void);
#endif // _APP_LVGL_H

View File

@ -0,0 +1,143 @@
#include "fr30xx.h"
/* FreeRTOS kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "rpmsg.h"
#include "rpmsg_lite.h"
#include "rpmsg_queue.h"
#include "rpmsg_ns.h"
#include "dsp.h"
#include "app_config.h"
#include "app_task.h"
#include "app_rpmsg.h"
/* Remote rpmsg instance */
static struct rpmsg_lite_instance *remote_rpmsg;
static TaskHandle_t rpmsg_task_handle;
static void rpmsg_recv(struct rpmsg_lite_instance *rpmsg, struct rpmsg_msg_t *msg)
{
// printf("rpmsg_recv: msg_type = %d.\r\n", msg->msg_type);
switch (msg->msg_type) {
case RPMSG_MSG_TYPE_SYNC_INVOKE:
if (msg->p.sync_func.func_id == RPMSG_SYNC_FUNC_SUM) {
uint32_t address = (uint32_t)msg->p.sync_func.param;
struct rpmsg_sync_msg_sum_t *param = msg->p.sync_func.param;
if (address >= DSP_DRAM_BASE_ADDR) {
address = DSP_DRAM_2_MCU_SRAM(address);
}
param = (void *)address;
rpmsg_send_sync_ret(rpmsg, 0, param->x + param->y);
}
else {
rpmsg_send_sync_ret(rpmsg, 0xffffffff, 0);
}
break;
case RPMSG_MSG_TYPE_ASYNC_MSG:
break;
default:
break;
}
}
static void rpmsg_task(void *arg)
{
struct app_task_event *event;
struct rpmsg_msg_t *msg;
uint32_t msg_len;
uint32_t src_addr;
uint32_t length;
dsp_prepare();
#if DSP_CODE_LOAD_MODE == DSP_CODE_LOAD_MODE_SDCARD
if (dsp_load_code_from_fs("4:\\dsp\\demos.bin") == false) {
#elif DSP_CODE_LOAD_MODE == DSP_CODE_LOAD_MODE_XIP_RO
#if DSP_ROM_CODE_XIP == 1
extern uint8_t DSP_CODE_FLASH_BASE, DSP_CODE_FLASH_END;
src_addr = (uint32_t)&DSP_CODE_FLASH_BASE;
length = (uint32_t)&DSP_CODE_FLASH_END - (uint32_t)&DSP_CODE_FLASH_BASE;
#else
extern uint8_t DSP_CODE_ROM_BASE, DSP_CODE_ROM_END;
src_addr = (uint32_t)&DSP_CODE_ROM_BASE;
length = (uint32_t)&DSP_CODE_ROM_END - (uint32_t)&DSP_CODE_ROM_BASE;
#endif
if (dsp_load_code_from_internal_flash(src_addr, length) == false) {
#elif DSP_CODE_LOAD_MODE == DSP_CODE_LOAD_MODE_FIX_ADDRESS
src_addr = (uint32_t)((DSP_CODE_FIX_ADDRESS + 0x10) | FLASH_DAC_BASE);
length = *(volatile uint32_t *)((DSP_CODE_FIX_ADDRESS + 0x08) | FLASH_DAC_BASE);
if (dsp_load_code_from_internal_flash(src_addr, length) == false) {
#else
#error "choose correct DSP code load mode"
{
#endif
printf("DSP image load failed.\r\n");
while(1);
}
printf("DSP is released.\r\n");
#if DSP_ROM_CODE_XIP == 0
__SYSTEM_LIBRARY_ROM_CLK_ENABLE();
#endif
remote_rpmsg = rpmsg_remote_init(rpmsg_recv);
dsp_run(0x78400660);
system_prevent_sleep_set(SYSTEM_PREVENT_SLEEP_TYPE_DSP);
rpmsg_wait_master_ready(remote_rpmsg);
system_prevent_sleep_clear(SYSTEM_PREVENT_SLEEP_TYPE_DSP);
printf("DSP is ready.\r\n");
/* notice APP that rpmsg is ready. */
event = app_task_event_alloc(APP_TASK_EVENT_RPMSG_INITED, 0, true);
app_task_event_post(event, false);
while (1) {
src_addr = rpmsg_recv_msg(remote_rpmsg, &msg, &msg_len);
rpmsg_recv(remote_rpmsg, msg);
rpmsg_lite_release_rx_buffer(remote_rpmsg, msg);
}
}
void app_rpmsg_init(void)
{
/* create rpmsg task. */
xTaskCreate(rpmsg_task, "RPMSG_TASK", RPMSG_TASK_STACK_SIZE, NULL, RPMSG_TASK_PRIORITY, &rpmsg_task_handle);
}
void app_rpmsg_recover(void)
{
dsp_prepare();
uint32_t src_addr;
uint32_t length;
#if DSP_CODE_LOAD_MODE == DSP_CODE_LOAD_MODE_XIP_RO
#if DSP_ROM_CODE_XIP == 1
extern uint8_t DSP_CODE_FLASH_BASE, DSP_CODE_FLASH_END;
src_addr = (uint32_t)&DSP_CODE_FLASH_BASE;
length = (uint32_t)&DSP_CODE_FLASH_END - (uint32_t)&DSP_CODE_FLASH_BASE;
#else
extern uint8_t DSP_CODE_ROM_BASE, DSP_CODE_ROM_END;
src_addr = (uint32_t)&DSP_CODE_ROM_BASE;
length = (uint32_t)&DSP_CODE_ROM_END - (uint32_t)&DSP_CODE_ROM_BASE;
#endif
dsp_load_rw_from_internal_flash(src_addr, length);
#elif DSP_CODE_LOAD_MODE == DSP_CODE_LOAD_MODE_FIX_ADDRESS
src_addr = (uint32_t)((DSP_CODE_FIX_ADDRESS + 0x10) | FLASH_DAC_BASE);
length = *(volatile uint32_t *)((DSP_CODE_FIX_ADDRESS + 0x08) | FLASH_DAC_BASE);
dsp_load_rw_from_internal_flash(src_addr, length);
#else
#error "choose correct DSP code load mode"
#endif
#if DSP_ROM_CODE_XIP == 0
__SYSTEM_LIBRARY_ROM_CLK_ENABLE();
#endif
dsp_run(0x78400660);
rpmsg_remote_recover();
}

View File

@ -0,0 +1,7 @@
#ifndef _APP_RPMSG_H
#define _APP_RPMSG_H
void app_rpmsg_init(void);
void app_rpmsg_recover(void);
#endif // _APP_RPMSG_H

View File

@ -0,0 +1,178 @@
#include "FreeRTOS.h"
#include "task.h"
#include "app_config.h"
#include "app_at.h"
#include "app_task.h"
#include "app_bt.h"
#include "app_ble.h"
#include "app_btdm.h"
#include "app_lvgl.h"
#include "app_rpmsg.h"
#include "fr_device_charge.h"
#include "fr_device_pmu_io.h"
#include "fr_device_button.h"
#include "fr_device_pa.h"
#include "fr_device_encode.h"
#include "fr_device_vbat.h"
static struct co_list event_list;
static TaskHandle_t app_task_handle;
void hci_controller_read(void);
void hci_host_read(void);
static void app_task_event_handler(void)
{
struct app_task_event *event = NULL;
vTaskSuspendAll();
event = (struct app_task_event *)co_list_pop_front(&event_list);
xTaskResumeAll();
//printf("%s %x\r\n",__func__, (uint32_t)&event);
if(event) {
switch(event->event_type) {
case APP_TASK_EVENT_AT_CMD:
app_at_cmd_recv_handler(event->param, event->param_len);
break;
case APP_TASK_EVENT_RPMSG_INITED:
#if BTDM_STACK_ENABLE == 1
app_btdm_init();
break;
#endif
case APP_TASK_EVENT_HOST_INITED:
app_lvgl_init();
// break;
#if BTDM_STACK_ENABLE == 1
case APP_TASK_EVENT_LVGL_INITED:
app_btdm_start();
#endif
break;
case APP_TASK_EVENT_BTN_TOGGLE:
{
button_toggle_handler(*(uint32_t *)event->param);
}
break;
case APP_TASK_EVENT_BTN_OUTPUT:
{
button_event_handler(event->param);
}
break;
case APP_TASK_EVENT_ENCODE_TOGGLE:
{
encode_event_handle(*(uint32_t *)event->param);
}
break;
case APP_TASK_EVENT_ADC_VBAT_DETECT:
{
adc_vbat_event_handle();
}
break;
case APP_TASK_EVENT_CHARGE_OUTPUT:
{
charge_event_handle(*(uint8_t *)event->param);
}
break;
default:
break;
}
vPortFree((void *)event);
}
}
void app_task_event_post(struct app_task_event *event, bool high)
{
uint32_t old_basepri;
if(xPortIsInsideInterrupt()) {
old_basepri = taskENTER_CRITICAL_FROM_ISR();
if(high) {
co_list_push_front(&event_list, &event->hdr);
}
else {
co_list_push_back(&event_list, &event->hdr);
}
taskEXIT_CRITICAL_FROM_ISR(old_basepri);
vTaskNotifyGiveFromISR(app_task_handle, NULL);
}
else {
taskENTER_CRITICAL();
if(high) {
co_list_push_front(&event_list, &event->hdr);
}
else {
co_list_push_back(&event_list, &event->hdr);
}
taskEXIT_CRITICAL();
xTaskNotifyGive(app_task_handle);
}
}
struct app_task_event *app_task_event_alloc(uint8_t event_type, uint32_t param_len, bool block)
{
struct app_task_event *event = NULL;
while(event == NULL) {
event = pvPortMalloc(sizeof(struct app_task_event) + param_len);
if (event == NULL) {
if (block) {
vTaskDelay(10);
}
else {
return NULL;
}
}
}
event->event_type = event_type;
event->param_len = param_len;
return event;
}
static void app_task(void *arg)
{
struct app_task_event *event;
printf("app_task\r\n");
#if ENABLE_DSP == 1
app_rpmsg_init();
#else
event = app_task_event_alloc(APP_TASK_EVENT_RPMSG_INITED, 0, true);
app_task_event_post(event, false);
#endif
device_pa_init();
device_charge_init();
#if BOARD_SEL == BOARD_EVB_FR5090
button_init(BUTTON_PIN_NUM|SOS_KEY_PIN_NUM|KEY1_PIN_NUM);
#elif BOARD_SEL == BOARD_EVB_FR3092E
button_init(BUTTON_PIN_NUM|SOS_KEY_PIN_NUM);
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
button_init(BUTTON_PIN_NUM|SOS_KEY_PIN_NUM|KEY1_PIN_NUM);
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
// button_init(BUTTON_PIN_NUM|SOS_KEY_PIN_NUM);
#else
#error "choose correct board"
#endif
device_pmu_io_init();
while(1) {
ulTaskNotifyTake(pdFALSE, portMAX_DELAY);
app_task_event_handler();
}
}
void app_task_init(void)
{
xTaskCreate(app_task, "app", APP_TASK_STACK_SIZE, NULL, APP_TASK_PRIORITY, &app_task_handle);
}

View File

@ -0,0 +1,34 @@
#ifndef _APP_TASK_H
#define _APP_TASK_H
#include <stdint.h>
#include <stdbool.h>
#include "co_list.h"
#define APP_TASK_EVENT_AT_CMD 0x00
#define APP_TASK_EVENT_RPMSG_INITED 0x01
#define APP_TASK_EVENT_HOST_INITED 0x02
#define APP_TASK_EVENT_LVGL_INITED 0x03
#define APP_TASK_EVENT_BTN_OUTPUT 0x04
#define APP_TASK_EVENT_BTN_TOGGLE 0x05
#define APP_TASK_EVENT_ENCODE_TOGGLE 0x06
#define APP_TASK_EVENT_ADC_VBAT_DETECT 0x07
#define APP_TASK_EVENT_CHARGE_OUTPUT 0x08
struct app_task_event {
struct co_list_hdr hdr;
uint8_t event_type;
uint16_t param_len;
uint8_t param[];
};
void app_task_event_post(struct app_task_event *event, bool high);
struct app_task_event *app_task_event_alloc(uint8_t event_type, uint32_t param_len, bool block);
void app_task_init(void);
#endif // _APP_TASK_H

View File

@ -0,0 +1,451 @@
/*-----------------------------------------------------------------------*/
/* Low level disk I/O module SKELETON for FatFs (C)ChaN, 2019 */
/*-----------------------------------------------------------------------*/
/* If a working storage control module is available, it should be */
/* attached to the FatFs via a glue function rather than modifying it. */
/* This is an example of glue functions to attach various exsisting */
/* storage control modules to the FatFs module with a defined API. */
/*-----------------------------------------------------------------------*/
#include <string.h>
#include "fr30xx.h"
#include "ff.h" /* Obtains integer types */
#include "diskio.h" /* Declarations of disk functions */
/* Definitions of physical drive number for each drive */
#define DEV_RAM 0 /* Example: Map Ramdisk to physical drive 0 */
#define DEV_MMC 1 /* Example: Map MMC to physical drive 1 */
#define DEV_SPI_FLASH 2 /* Example: Map SPI Flash to physical drive 2 */
#define DEV_NAND_FLASH 3 /* Example: Map Nand Flash to physical drive 3 */
#define DEV_SD_CARD 4 /* Example: Map SD Card to physical drive 4 */
#define RAM_SECTOR_SIZE 512
#define RAM_SECTOR_COUNT (16*48)
#define RAM_BLOCK_SIZE 4096
#define RAM_DISK_SIZE (RAM_SECTOR_SIZE * RAM_SECTOR_COUNT)
#define SD_CARD_SECTOR_SIZE 512
#define SD_CARD_BLOCK_SIZE 4096
#define SPI_FLASH_SECTOR_SIZE 512
#define SPI_FLASH_BLOCK_SIZE 4096
#define SPI_FLASH_SECTOR_COUNT (2*1024*4)
__ALIGNED(4) static uint8_t ram_disk_space[RAM_DISK_SIZE];
static uint8_t spi_flash_poll[4096];
extern SD_HandleTypeDef sdio_handle;
static DSTATUS RAM_disk_status(void)
{
return RES_OK;
}
static DSTATUS MMC_disk_status(void)
{
return RES_OK;
}
static DSTATUS SPI_flash_status(void)
{
return RES_OK;
}
static DSTATUS SD_Card_status(void)
{
return RES_OK;
}
static DSTATUS RAM_disk_initialize(void)
{
// memset(ram_disk_space, 0, RAM_DISK_SIZE);
return RES_OK;
}
static DSTATUS MMC_disk_initialize(void)
{
return RES_ERROR;
}
static DSTATUS SPI_flash_initialize(void)
{
return RES_OK;
}
static DSTATUS SD_Card_initialize(void)
{
// uint32_t EER;
//
// EER = SDCard_Init(&SDIO);
// if (EER != INT_NO_ERR) {
// return RES_ERROR;
// }
// EER = SDCard_BusWidth_Select(&SDIO, SDIO_BUS_WIDTH_4BIT);
// if (EER != INT_NO_ERR) {
// return RES_ERROR;
// }
return RES_OK;
}
static DSTATUS RAM_disk_read(BYTE *buff, LBA_t sector, UINT count)
{
return RES_ERROR;
}
static DSTATUS SPI_flash_read(BYTE *buff, LBA_t sector, UINT count)
{
return RES_ERROR;
}
static DSTATUS MMC_disk_read(BYTE *buff, LBA_t sector, UINT count)
{
return RES_ERROR;
}
static DSTATUS SD_Card_read(BYTE *buff, LBA_t sector, UINT count)
{
SDCard_ReadBolcks(&sdio_handle, (uint32_t *)buff, sector, count);
return RES_OK;
}
static DSTATUS RAM_disk_write(const BYTE *buff, LBA_t sector, UINT count)
{
return RES_ERROR;
}
static DSTATUS MMC_disk_write(const BYTE *buff, LBA_t sector, UINT count)
{
return RES_ERROR;
}
static DSTATUS SPI_flash_write(const BYTE *buff, LBA_t sector, UINT count)
{
return RES_ERROR;
}
static DSTATUS SD_Card_write(const BYTE *buff, LBA_t sector, UINT count)
{
SDCard_WriteBolcks(&sdio_handle, (uint32_t *)buff, sector, count);
return RES_OK;
}
/*-----------------------------------------------------------------------*/
/* Get Drive Status */
/*-----------------------------------------------------------------------*/
DSTATUS disk_status (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
DSTATUS stat;
switch (pdrv) {
case DEV_RAM :
stat = RAM_disk_status();
// translate the reslut code here
return stat;
case DEV_MMC :
stat = MMC_disk_status();
// translate the reslut code here
return stat;
case DEV_SPI_FLASH :
stat = SPI_flash_status();
// translate the reslut code here
return stat;
case DEV_SD_CARD :
stat = SD_Card_status();
// translate the reslut code here
return stat;
}
return STA_NOINIT;
}
/*-----------------------------------------------------------------------*/
/* Inidialize a Drive */
/*-----------------------------------------------------------------------*/
DSTATUS disk_initialize (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
DSTATUS stat;
switch (pdrv) {
case DEV_RAM :
stat = RAM_disk_initialize();
// translate the reslut code here
return stat;
case DEV_MMC :
stat = MMC_disk_initialize();
// translate the reslut code here
return stat;
case DEV_SPI_FLASH :
stat = SPI_flash_initialize();
// translate the reslut code here
return stat;
case DEV_SD_CARD :
stat = SD_Card_initialize();
// translate the reslut code here
return stat;
}
return STA_NOINIT;
}
/*-----------------------------------------------------------------------*/
/* Read Sector(s) */
/*-----------------------------------------------------------------------*/
DRESULT disk_read (
BYTE pdrv, /* Physical drive nmuber to identify the drive */
BYTE *buff, /* Data buffer to store read data */
LBA_t sector, /* Start sector in LBA */
UINT count /* Number of sectors to read */
)
{
DRESULT res;
switch (pdrv) {
case DEV_RAM :
// translate the arguments here
res = RAM_disk_read(buff, sector, count);
// translate the reslut code here
return res;
case DEV_MMC :
// translate the arguments here
res = MMC_disk_read(buff, sector, count);
// translate the reslut code here
return res;
case DEV_SPI_FLASH :
// translate the arguments here
res = SPI_flash_read(buff, sector, count);
// translate the reslut code here
return res;
case DEV_SD_CARD :
// translate the arguments here
res = SD_Card_read(buff, sector, count);
// translate the reslut code here
return res;
}
return RES_PARERR;
}
/*-----------------------------------------------------------------------*/
/* Write Sector(s) */
/*-----------------------------------------------------------------------*/
#if FF_FS_READONLY == 0
DRESULT disk_write (
BYTE pdrv, /* Physical drive nmuber to identify the drive */
const BYTE *buff, /* Data to be written */
LBA_t sector, /* Start sector in LBA */
UINT count /* Number of sectors to write */
)
{
DRESULT res;
switch (pdrv) {
case DEV_RAM :
// translate the arguments here
res = RAM_disk_write(buff, sector, count);
// translate the reslut code here
return res;
case DEV_MMC :
// translate the arguments here
res = MMC_disk_write(buff, sector, count);
// translate the reslut code here
return res;
case DEV_SPI_FLASH :
// translate the arguments here
res = SPI_flash_write(buff, sector, count);
// translate the reslut code here
return res;
case DEV_SD_CARD :
// translate the arguments here
res = SD_Card_write(buff, sector, count);
// translate the reslut code here
return res;
}
return RES_PARERR;
}
#endif
/*-----------------------------------------------------------------------*/
/* Miscellaneous Functions */
/*-----------------------------------------------------------------------*/
DRESULT disk_ioctl (
BYTE pdrv, /* Physical drive nmuber (0..) */
BYTE cmd, /* Control code */
void *buff /* Buffer to send/receive control data */
)
{
DRESULT res = RES_PARERR;
switch (pdrv) {
case DEV_RAM :
// Process of the command for the RAM drive
switch(cmd)
{
case CTRL_SYNC:
res = RES_OK;
break;
case GET_SECTOR_SIZE:
*(WORD*)buff = RAM_SECTOR_SIZE;
res = RES_OK;
break;
case GET_BLOCK_SIZE:
*(WORD*)buff = RAM_BLOCK_SIZE;
res = RES_OK;
break;
case GET_SECTOR_COUNT:
*(DWORD*)buff = RAM_SECTOR_COUNT;
res = RES_OK;
break;
case CTRL_TRIM:
res = RES_OK;
break;
default:
res = RES_PARERR;
break;
}
return res;
case DEV_MMC :
// Process of the command for the MMC/SD card
return res;
case DEV_SPI_FLASH :
// Process of the command for the MMC/SD card
switch(cmd)
{
case CTRL_SYNC:
res = RES_OK;
break;
case GET_SECTOR_SIZE:
*(WORD*)buff = SPI_FLASH_SECTOR_SIZE;
res = RES_OK;
break;
case GET_BLOCK_SIZE:
*(WORD*)buff = SPI_FLASH_BLOCK_SIZE;
res = RES_OK;
break;
case GET_SECTOR_COUNT:
*(DWORD*)buff = SPI_FLASH_SECTOR_COUNT;
res = RES_OK;
break;
case CTRL_TRIM:
res = RES_OK;
break;
default:
res = RES_PARERR;
break;
}
return res;
case DEV_SD_CARD :
// Process of the command for the RAM drive
switch(cmd)
{
case CTRL_SYNC:
res = RES_OK;
break;
case GET_SECTOR_SIZE:
*(WORD*)buff = SD_CARD_SECTOR_SIZE;
res = RES_OK;
break;
case GET_BLOCK_SIZE:
*(WORD*)buff = SD_CARD_BLOCK_SIZE;
res = RES_OK;
break;
case GET_SECTOR_COUNT:
*(DWORD*)buff = SDCard_Get_Block_count(&sdio_handle);
res = RES_OK;
break;
case CTRL_TRIM:
res = RES_OK;
break;
default:
res = RES_PARERR;
break;
}
return res;
}
return RES_PARERR;
}

View File

@ -0,0 +1,28 @@
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include "heap.h"
#include "dram_mem.h"
#define configTOTAL_DRAM_HEAP_SIZE ( ( 12 * 1024 ) )
static bool is_mem_poll_inited = false;
__attribute__((section("dram_section"))) static uint32_t ucHeap[ (configTOTAL_DRAM_HEAP_SIZE >> 2) + 0x10];
void * dram_malloc( uint32_t xWantedSize )
{
if (is_mem_poll_inited == false) {
is_mem_poll_inited = true;
heap_mem_init(HEAP_TYPE_DRAM_BLOCK, (void *)ucHeap, configTOTAL_DRAM_HEAP_SIZE);
}
return heap_mem_alloc(HEAP_TYPE_DRAM_BLOCK, xWantedSize);
}
void dram_free( void * pv )
{
heap_mem_free(pv);
}

View File

@ -0,0 +1,9 @@
#ifndef __BTDM_MEM_H__
#define __BTDM_MEM_H__
#include <stdint.h>
void * dram_malloc( uint32_t xWantedSize );
void dram_free( void * pv );
#endif // __BTDM_MEM_H__

View File

@ -0,0 +1,191 @@
/*
* This file is part of the EasyLogger Library.
*
* Copyright (c) 2015, Armink, <armink.ztl@gmail.com>
*
* Permission is hereby granted, 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.
*
* Function: Portable interface for each platform.
* Created on: 2015-04-28
*/
#include <elog.h>
#include "fr30xx.h"
extern UART_HandleTypeDef uart_log_handle;
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
static SemaphoreHandle_t xSemaphore_lock;
static SemaphoreHandle_t xSemaphore_notice;
#else
static uint32_t prim;
#endif
/**
* EasyLogger port initialize
*
* @return result
*/
ElogErrCode elog_port_init(void) {
ElogErrCode result = ELOG_NO_ERR;
/* add your code here */
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
xSemaphore_lock = xSemaphoreCreateBinary();
xSemaphore_notice = xSemaphoreCreateBinary();
xSemaphoreGive(xSemaphore_lock);
xSemaphoreGive(xSemaphore_notice);
#endif
return result;
}
/**
* output log port interface
*
* @param log output of log
* @param size log size
*/
void elog_port_output(const char *log, size_t size) {
/* add your code here */
uart_transmit(&uart_log_handle, (uint8_t *)log, size);
}
/**
* output lock
*/
void elog_port_output_lock(void) {
/* add your code here */
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
xSemaphoreTake(xSemaphore_lock, portMAX_DELAY);
#else
prim = __get_PRIMASK();
__disable_irq();
#endif
}
/**
* output unlock
*/
void elog_port_output_unlock(void) {
/* add your code here */
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
xSemaphoreGive(xSemaphore_lock);
#else
if(!prim)
{
__enable_irq();
}
#endif
}
/**
* get current time interface
*
* @return current time
*/
const char *elog_port_get_time(void) {
/* add your code here */
return "2023/2/2";
}
/**
* get current process name interface
*
* @return current process name
*/
const char *elog_port_get_p_info(void) {
/* add your code here */
return "";
}
/**
* get current thread name interface
*
* @return current thread name
*/
const char *elog_port_get_t_info(void) {
/* add your code here */
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
return "";
#else
return "";
#endif
}
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
void elog_async_output_notice(void)
{
xSemaphoreGive(xSemaphore_notice);
}
void async_output_task(void *arg)
{
size_t get_log_size = 0;
static char poll_get_buf[ELOG_LINE_BUF_SIZE - 4];
while(true)
{
/* waiting log */
xSemaphoreTake(xSemaphore_notice, portMAX_DELAY);
/* polling gets and outputs the log */
while(true)
{
#ifdef ELOG_ASYNC_LINE_OUTPUT
get_log_size = elog_async_get_line_log(poll_get_buf, sizeof(poll_get_buf));
#else
get_log_size = elog_async_get_log(poll_get_buf, sizeof(poll_get_buf));
#endif
if (get_log_size)
{
elog_port_output_lock();
elog_port_output(poll_get_buf, get_log_size);
elog_port_output_unlock();
}
else
{
break;
}
}
}
}
#endif

View File

@ -0,0 +1,101 @@
#include "user_bt_a2dp.h"
#include "lvgl.h"
#include "FreeRTOS.h"
#include "app_lvgl.h"
#include "app_bt.h"
#include "user_bt.h"
#define BT_MUSIC_LOG printf
user_bt_media_t bt_media;
void user_bt_music_control(bt_enum_music_t control)
{
BtStatus status;
switch(control)
{
case BT_ENUM_MUSIC_PLAY:
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_PLAY, TRUE);
break;
case BT_ENUM_MUSIC_PAUSE:
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_PAUSE, TRUE);
break;
case BT_ENUM_MUSIC_PREVIOUS:
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_FORWARD, TRUE);
break;
case BT_ENUM_MUSIC_NEXT:
status = AVRCP_SetPanelKey(user_bt_env.dev[user_bt_env.last_active_index].rcp_chan, AVRCP_POP_BACKWARD, TRUE);
break;
default:
break;
}
BT_MUSIC_LOG("%s %d\r\n",__func__, status);
}
void user_bt_sync_music_volume(uint8_t vol)
{
uint8_t buf[3];
printf("%s %d %d\r\n", __func__, vol,__LINE__);
buf[0] = 'E';
buf[1] = 'E';
buf[2] = vol * 127/ 100;
printf("%s %d %d\r\n", __func__, __LINE__,buf[2]);
app_at_cmd_recv_handler(buf,NULL);
}
void user_bt_set_music_playstatus(bool status)
{
bt_media.play_status = status;
}
bool user_bt_get_music_playstatus(void)
{
return bt_media.play_status;
}
uint8_t user_bt_get_music_vol(void)
{
return bt_media.vol;
}
void user_bt_set_music_vol(uint8_t vol)
{
bt_media.vol = vol;
}
uint8_t *user_bt_get_music_songname(void)
{
return &bt_media.song[0];
}
void user_bt_song_lyric_notify(void)
{
gui_task_msg_send(MUSIC_CONTROL_EVT,NULL,0,NULL,0,NULL);
}
void user_bt_get_media_info(void)
{
BtStatus status;
status = bt_get_media_info(user_bt_env.last_active_index,0x41);
BT_MUSIC_LOG("%s %d\r\n",__func__, status);
}

View File

@ -0,0 +1,47 @@
#ifndef __USER_BT_A2DP_H
#define __USER_BT_A2DP_H
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "app_at.h"
typedef enum{
BT_ENUM_MUSIC_PLAY,
BT_ENUM_MUSIC_PAUSE,
BT_ENUM_MUSIC_PREVIOUS,
BT_ENUM_MUSIC_NEXT,
//BT_ENUM_MUSIC_VOLUME_INC,
//BT_ENUM_MUSIC_VOLUME_DEC,
}bt_enum_music_t;
typedef struct
{
bool play_status;
uint8_t vol;
uint16_t playlen;
uint16_t playpos;
uint8_t song[100];
}user_bt_media_t;
extern user_bt_media_t bt_media;
extern void user_bt_music_control(uint8_t control);
extern void user_bt_sync_music_volume(uint8_t vol);
extern void user_bt_set_music_playstatus(bool status);
extern bool user_bt_get_music_playstatus(void);
extern uint8_t user_bt_get_music_vol(void);
extern void user_bt_set_music_vol(uint8_t vol);
extern uint8_t *user_bt_get_music_songname(void);
extern void user_bt_song_lyric_notify(void);
extern void user_bt_get_media_info(void);
#endif /* __USER_BT_A2DP_H */

View File

@ -0,0 +1,197 @@
#include "user_bt_call.h"
#include "FreeRTOS.h"
#include "user_bt_common.h"
#include "app_lvgl.h"
#include "task.h"
#include "timers.h"
#include "app_bt.h"
#include "user_bt.h"
#define BT_CALL_LOG printf
#define BT_LOG_ENABLE 1
#if BT_LOG_ENABLE
#define BT_LOG printf
#else
#define BT_LOG
#endif
call_info_t bt_call;
//bool call_flag = 0;
uint8_t call_incoming = 0; //呼入呼出状态
bool call_complete = 0; //接通状态
xTimerHandle user_bt_call_timer;
//0呼出1接通2静音3通话结束
//4拨出失败5来电显示
uint8_t call_mode;
void user_set_call_mode(uint8_t mode)
{
call_mode = mode;
}
uint8_t user_get_call_mode(void)
{
return call_mode;
}
void bt_hf_call_outgoing(uint8_t *number, uint8_t len)
{
BtStatus status;
status = bt_dial_number(user_bt_env.last_active_index,&number[1],number[0]);
BT_CALL_LOG("%s %d \r\n", __func__,status);
}
void bt_hf_call_hangup(void)
{
BtStatus status;
status = bt_hang_up(user_bt_env.last_active_index);
BT_CALL_LOG("%s %d \r\n", __func__,status);
}
void bt_hf_call_answer(void)
{
BtStatus status;
status = bt_answer_call(user_bt_env.last_active_index);
BT_CALL_LOG("%s %d \r\n", __func__,status);
}
void user_bt_hf_mic_mute(bool mute)
{
if(mute)
{
__CODEC_SET_ADC_VOLUME(0);
}else {
__CODEC_SET_ADC_VOLUME(0x8000);
}
}
void user_bt_hfcall_handle(uint8_t hf_call)
{
if(hf_call == 0) //挂断
{
if(call_complete)
{
call_complete = 0;
gui_task_msg_send(PHONE_CALL_REJECT_EVT,NULL,0,NULL,0,NULL);
}
}
else if(hf_call == 1) //接通
{
user_set_call_mode(HF_ENUM_CALL_CONNECTING);
call_incoming = 0;
call_complete = 1; //接通状态
gui_task_msg_send(PHONE_CALL_OK_EVT,NULL,0,NULL,0,NULL);
}
}
void user_bt_callsetup_handle(uint8_t hf_callsetup)
{
if(hf_callsetup == 0)
{
if(call_incoming == 1 || call_incoming == 2) //
{
call_incoming = 0;
gui_task_msg_send(PHONE_CALL_REJECT_EVT,NULL,0,NULL,0,NULL);
}
}
else if(hf_callsetup == 1) /* incoming call */
{
call_incoming = 1; //来电状态置1
user_set_call_mode(5);
}
else if(hf_callsetup == 2) /* outgoing call */
{
call_incoming = 2; //呼出状态
user_set_call_mode(0);
}
}
void user_bt_set_calling_num(const char *num, uint8_t len)
{
bt_call.number_len = len;
memset(&bt_call.call_namber[0], 0, sizeof(bt_call.call_namber));
memcpy(&bt_call.call_namber[0], num, len);
if(call_incoming)
{
gui_task_msg_send(PHONE_CALL_IN_EVT,NULL,0,NULL,0,NULL);
}
}
void user_bt_get_calling_info(call_info_t * call)
{
#if 1
call->number_len = bt_call.number_len;
memset(call->call_namber,0,32);
memcpy(call->call_namber,bt_call.call_namber,call->number_len);
//call->name_len = call_context[call->number_len] + 1;
//memset(call->call_name,0,128);
//memcpy(call->call_name, call_context+call->number_len+1, call->name_len);
#else
if(call_context[0] > 0)
{
call->number_len = call_context[0];
memset(call->call_namber,0,32);
memcpy(call->call_namber,call_context+1,call->number_len);
call->name_len = call_context[call->number_len] + 1;
memset(call->call_name,0,128);
memcpy(call->call_name, call_context+call->number_len+1, call->name_len);
}
#endif
}
static void user_bt_timer_call_handler( TimerHandle_t xTimer)
{
BT_LOG("%s \r\n",__func__);
}
void user_bt_timer_call_init(void)
{
user_bt_call_timer = xTimerCreate("user_bt_call_timer", 100 , pdFALSE, NULL, user_bt_timer_call_handler);
//xTimerStart(user_bt_call_timer,0);
}
void user_bt_hf_set_volume(uint8_t lev)
{
if(lev == 0){
user_bt_set_local_volume(BT_VOL_HFP, 1);
}else{
user_bt_set_local_volume(BT_VOL_HFP, lev);
}
BT_LOG("%s %d \r\n", __func__, lev);
}

View File

@ -0,0 +1,53 @@
#ifndef __USER_BT_CALL_H
#define __USER_BT_CALL_H
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "driver_codec.h"
#include "app_at.h"
#include "fr_watch.h"
typedef struct
{
uint8_t num_len;
uint8_t num[15];
}user_bt_call_t;
//0呼出1接通2静音3通话结束
//4拨出失败5来电显示
typedef enum
{
HF_ENUM_OUTGOING = 0,
HF_ENUM_CALL_CONNECTING = 1,
HF_ENUM_INCOMING = 5,
}call_enum_state_t;
//mic mute
enum{
ENUM_MIC_CLOSE,
ENUM_MIC_OPEN,
};
extern void bt_hf_call_outgoing(uint8_t *number, uint8_t len);
extern void bt_hf_call_hangup(void);
extern void bt_hf_call_answer(void);
extern void user_bt_set_calling_num(const char *num, uint8_t len);
extern void user_set_call_mode(uint8_t mode);
extern uint8_t user_get_call_mode(void);
extern void user_bt_get_calling_info(call_info_t * call);
extern void user_bt_callsetup_handle(uint8_t hf_callsetup);
extern void user_bt_hfcall_handle(uint8_t hf_call);
extern void user_bt_hf_mic_mute(bool mute);
extern void user_bt_timer_call_init(void);
extern void user_bt_hf_mic_mute(bool mute);
extern void user_bt_hf_set_volume(uint8_t lev);
#endif /* __USER_BT_CALL_H */

View File

@ -0,0 +1,222 @@
#include "user_bt_common.h"
#include "lvgl.h"
#include "FreeRTOS.h"
#define BT_COMM_ENABLE 1
#if BT_COMM_ENABLE
#define BT_COMM_LOG printf
#else
#define BT_COMM_LOG
#endif
user_bt_vol_t user_bt_volum;
bool system_bt_module = 0; //0:close 1:start
/*
change phone volume to local spk vol
*/
bool user_bt_set_local_volume(enum bt_volume_type_t type,uint16_t vol)
{
uint16_t avrcp_vol,hf_vol;
if((type >= BT_VOL_MAX)||(vol > 0xFFFF)){
return false;
}
if(type == BT_VOL_HFP){
if(user_bt_env.dev[user_bt_env.last_active_index].conFlags&LINK_STATUS_SCO_CONNECTED){
if(vol == 0){
hf_vol = 0;
}
else{
hf_vol = 0 + (USER_BT_HF_VOLUME_MAX*vol)/15;
}
BT_COMM_LOG("%s %d %d \r\n",__func__,vol,hf_vol);
codec_Set_DAC_Volume(hf_vol);
}
}
else if(type == BT_VOL_MEDIA){
if(user_bt_env.dev[user_bt_env.last_active_index].conFlags&LINK_STATUS_MEDIA_PLAYING){
if(vol >= USER_BT_VOLUM_MAX){
avrcp_vol = 127;
}
else{
avrcp_vol = (USER_BT_VOLUM_MAX*vol)/127;
}
BT_COMM_LOG("%s %d %d \r\n",__func__,vol,avrcp_vol);
codec_Set_DAC_Volume(avrcp_vol);
}else{
}
}
else if(type == BT_VOL_TONE){
}
return true;
}
/*
local change volume send to phone
*/
bool user_bt_set_spk_volume(enum bt_volume_type_t type,uint16_t vol)
{
uint16_t avrcp_vol,hf_vol;
if((type >= BT_VOL_MAX)||(vol > 0xFFFF)){
return false;
}
if(type == BT_VOL_HFP){
if(user_bt_env.dev[user_bt_env.last_active_index].conFlags&LINK_STATUS_SCO_CONNECTED){
if(vol == 0){
hf_vol = + (USER_BT_HF_VOLUME_MAX * 1)/15;
vol = 1;
}
else{
hf_vol = 0 + (USER_BT_HF_VOLUME_MAX*vol)/15;
}
BT_COMM_LOG("%s %d %d \r\n",__func__,vol,hf_vol);
bt_report_spk_volume(user_bt_env.last_active_index,vol);
codec_Set_DAC_Volume(hf_vol);
}
}
else if(type == BT_VOL_MEDIA){
if(user_bt_env.dev[user_bt_env.last_active_index].conFlags&LINK_STATUS_MEDIA_PLAYING){
if(vol == 0x3f){
avrcp_vol = USER_BT_VOLUM_MAX;
}
else{
avrcp_vol = (USER_BT_VOLUM_MAX*vol)/127;
}
bt_set_media_volume(user_bt_env.last_active_index, vol);
codec_Set_DAC_Volume(avrcp_vol);
}else{
}
}
else if(type == BT_VOL_TONE){
}
return true;
}
user_bt_vol_t *user_bt_get_volume(void)
{
return (user_bt_vol_t *)&user_bt_volum.vol;
}
uint8_t user_bt_volume_lev_convert(enum bt_volume_type_t type,uint8_t lev)
{
uint8_t vol;
if(type == BT_VOL_MEDIA)
{
vol = (lev * 127 / 100);
}
else if(type == BT_VOL_HFP)
{
vol = (lev * 15 / 100);
}
printf("%s %d \r\n", __func__,vol);
return vol;
}
uint8_t *user_bt_get_local_name(void)
{
extern uint8_t default_name[];
return default_name;
}
uint8_t *user_bt_get_mac(void)
{
extern uint8_t bt_addr[];
return bt_addr;
}
char *user_ble_get_local_name(void)
{
extern char local_device_name[];
return local_device_name;
}
uint8_t *user_ble_get_mac(void)
{
extern uint8_t ble_static_addr[];
return ble_static_addr;
}
/*
bt module enable/disable api
system_bt_module param
0:close
1:start
*/
void user_bt_set_module(bool sat)
{
system_bt_module = sat;
}
bool user_bt_get_module(void)
{
return system_bt_module;
}
void user_bt_disconnect(void)
{
BtStatus status;
status = bt_disconnect(&user_bt_env.dev[0].remote_bd, true); //强制断开bt
BT_COMM_LOG("%s %d %d\r\n", __func__,__LINE__,status);
}
void user_bt_off(void)
{
BtStatus status;
status = bt_disconnect(&user_bt_env.dev[0].remote_bd, true); //强制断开bt
BT_COMM_LOG("%s %d %d\r\n", __func__,__LINE__,status);
status = bt_exit_pairing();
user_bt_set_module(false);
BT_COMM_LOG("%s %d %d\r\n", __func__,__LINE__,status);
}
void user_bt_on(void)
{
BtStatus status;
BtAccessModeInfo access_mode_nc = {
.inqInterval = 0x800,
.inqWindow = 0x12,
.pageInterval = 0x800,
.pageWindow = 0x12,
};
status = bt_enter_pairing(BAM_GENERAL_ACCESSIBLE, &access_mode_nc);
user_bt_env.connect_times = 3;
BT_COMM_LOG("bt reconnect addr %x %x %x %x %x %x \r\n",user_bt_env.last_dev_addr.A[0],
user_bt_env.last_dev_addr.A[1],
user_bt_env.last_dev_addr.A[2],
user_bt_env.last_dev_addr.A[3],
user_bt_env.last_dev_addr.A[4],
user_bt_env.last_dev_addr.A[5]);
status = bt_connect(&user_bt_env.last_dev_addr);
user_bt_set_module(true);
BT_COMM_LOG("status = %d\r\n",status);
}

View File

@ -0,0 +1,48 @@
#ifndef __USER_BT_COMMON_H
#define __USER_BT_COMMON_H
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "driver_codec.h"
#include "app_at.h"
#include "user_bt.h"
#define USER_BT_VOLUM_MAX (0x1000)
#define USER_BT_HF_VOLUME_MAX (0x2000)
#define USER_BT_NAME "freq_bt"
typedef struct
{
uint8_t vol;
uint8_t lev;
}user_bt_vol_t;
enum bt_volume_type_t{
BT_VOL_HFP, //设置通话音量
BT_VOL_MEDIA, //设置媒体音量
BT_VOL_TONE, //设置提示音量
BT_VOL_MAX,
};
extern void user_bt_set_volume(uint8_t vol);
extern uint8_t user_bt_volume_lev_convert(enum bt_volume_type_t type,uint8_t lev);
extern uint8_t *user_bt_get_local_name(void);
extern uint8_t *user_bt_get_mac(void);
extern char *user_ble_get_local_name(void);
extern uint8_t *user_ble_get_mac(void);
extern bool user_bt_set_spk_volume(enum bt_volume_type_t type,uint16_t vol);
extern bool user_bt_set_local_volume(enum bt_volume_type_t type,uint16_t vol);
extern void user_bt_disconnect(void);
extern void user_bt_off(void);
extern void user_bt_on(void);
extern void user_bt_set_module(bool sat);
extern bool user_bt_get_module(void);
#endif /* __USER_BT_COMMON_H */

View File

@ -0,0 +1,36 @@
#include "user_bt_voice_recognition.h"
#include "user_bt.h"
#include "app_bt.h"
#define BT_VOICE_LOG printf
bool voice_active = 0;
void user_bt_voice_start_active(bool type)
{
BtStatus status;
if(type)
{
//memcpy(event->param, (void *)"CJ01", sizeof("CJ01"));
status = bt_enable_voice_recognition(user_bt_env.last_active_index, true);
}else {
//memcpy(event->param, (void *)"CJ00", sizeof("CJ01"));
status = bt_enable_voice_recognition(user_bt_env.last_active_index, false);
}
BT_VOICE_LOG("status = %d\r\n",status);
}
bool user_bt_get_voice_active(void)
{
return voice_active;
}
void user_bt_set_voice_active(bool active)
{
voice_active = active;
}

View File

@ -0,0 +1,22 @@
#ifndef __USER_BT_VOICE_RECONGNITION_H
#define __USER_BT_VOICE_RECONGNITION_H
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "driver_codec.h"
#include "app_at.h"
#include "fr_watch.h"
#include "FreeRTOS.h"
#include "app_lvgl.h"
#include "task.h"
#include "timers.h"
#include "app_task.h"
extern bool voice_active;
extern void user_bt_voice_start_active(bool type);
extern bool user_bt_get_voice_active(void);
extern void user_bt_set_voice_active(bool active);
#endif /* __USER_BT_VOICE_RECONGNITION_H */

View File

@ -0,0 +1,547 @@
#include <stdint.h>
#include <stddef.h>
#include "driver_gpio.h"
#include "fr30xx.h"
#include "app_task.h"
#include "fr_device_pmu_io.h"
#include "fr_device_button.h"
#include "app_lvgl.h"
/* FreeRTOS kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
#define BUTTON_IDX_MAX 1
#define BUTTON_SHORT_DURING 0x08 // x10ms
#define BUTTON_LONG_DURING 0x14 // x100ms
#define BUTTON_LONG_LONG_DURING 0x28 // x100ms
#define BUTTON_MULTI_INTERVAL 0x14 // x10ms
#define BUTTON_LONG_PRESSING_INTERVAL 0x1e // x10ms
uint8_t current_state = BUTTON_WORKING_STATE_IDLE;
uint16_t button_task_id;
xTimerHandle button_anti_shake_timer;
xTimerHandle button_pressing_timer;
xTimerHandle button_state_timer;
/* which io is enabled for button function */
uint32_t button_io_mask = 0;
uint32_t curr_button_before_anti_shake = 0;
uint32_t current_pressed_button = 0;
uint32_t last_saved_button = 0;
uint32_t button_to_be_send = 0; //for multi click
uint8_t pressed_cnt = 0; //for multi click
void button_toggle_detected(uint32_t curr_button)
{
if(button_io_mask != 0) {
curr_button_before_anti_shake = curr_button & button_io_mask;
if(xPortIsInsideInterrupt())
xTimerStartFromISR( button_anti_shake_timer, NULL );
else
xTimerStart(button_anti_shake_timer, 0);
}
}
void button_int_isr(uint32_t changed_button)
{
uint32_t curr_button;
curr_button = current_pressed_button ^ changed_button;
struct app_task_event *event;
event = app_task_event_alloc(APP_TASK_EVENT_BTN_TOGGLE, sizeof(uint32_t), false);
if(event)
{
memcpy(event->param, (void *)&curr_button, sizeof(uint32_t));
event->param_len = sizeof(uint32_t);
app_task_event_post(event, false);
}
}
void button_send_event(uint8_t event, uint32_t button, uint8_t cnt)
{
struct button_msg_t msg;
msg.button_index = button;
msg.button_type = event;
msg.button_cnt = cnt;
struct app_task_event *toggle_event;
toggle_event = app_task_event_alloc(APP_TASK_EVENT_BTN_OUTPUT, sizeof(msg), false);
if(toggle_event)
{
memcpy(toggle_event->param, (void *)&msg, sizeof(msg));
toggle_event->param_len = sizeof(msg);
app_task_event_post(toggle_event, false);
}
pressed_cnt = 0;
}
static void button_idle(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_SINGLE_PRESSED)
{
current_state = BUTTON_WORKING_STATE_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
}
}
static void button_just_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
current_state = BUTTON_WORKING_STATE_IDLE;
xTimerStop(button_state_timer,0);
button_send_event(BUTTON_RELEASED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_TIME_OUT)
{
current_state = BUTTON_WORKING_STATE_PRESSED;
xTimerChangePeriod(button_state_timer, (BUTTON_LONG_DURING*10-BUTTON_SHORT_DURING)*10,0);
xTimerStart(button_state_timer,0);
}
}
static void button_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
if(0/*__jump_table.button_disable_multi_click*/ & last_saved_button)
{
current_state = BUTTON_WORKING_STATE_IDLE;
button_send_event(BUTTON_SHORT_PRESSED, last_saved_button, 0);
}
else
{
//TBD<42><44><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
current_state = BUTTON_WORKING_STATE_WAIT_MULTI;
button_to_be_send = last_saved_button;
pressed_cnt++;
xTimerChangePeriod(button_state_timer,BUTTON_MULTI_INTERVAL*10,0);
xTimerStart(button_state_timer,0);
}
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_TIME_OUT)
{
current_state = BUTTON_WORKING_STATE_LONG_PRESSED;
xTimerChangePeriod(button_state_timer, ((BUTTON_LONG_LONG_DURING-BUTTON_LONG_DURING)*10)*10,0);
xTimerStart(button_state_timer,0);
xTimerChangePeriod(button_pressing_timer, BUTTON_LONG_PRESSING_INTERVAL*10,0);
xTimerStart(button_pressing_timer,0);
button_send_event(BUTTON_LONG_PRESSED, current_pressed_button, pressed_cnt);
}
}
static void button_wait_multi(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_SINGLE_PRESSED)
{
if(current_pressed_button != button_to_be_send)
{
if(pressed_cnt > 1)
{
button_send_event(BUTTON_MULTI_PRESSED, button_to_be_send, pressed_cnt);
}
else
{
button_send_event(BUTTON_SHORT_PRESSED, button_to_be_send, pressed_cnt);
}
button_send_event(BUTTON_PRESSED, current_pressed_button, pressed_cnt);
}
current_state = BUTTON_WORKING_STATE_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
button_send_event(BUTTON_SHORT_PRESSED, button_to_be_send, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_TIME_OUT)
{
current_state = BUTTON_WORKING_STATE_IDLE;
if(pressed_cnt > 1)
{
button_send_event(BUTTON_MULTI_PRESSED, button_to_be_send, pressed_cnt);
}
else
{
button_send_event(BUTTON_SHORT_PRESSED, button_to_be_send, pressed_cnt);
}
}
}
static void button_long_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
current_state = BUTTON_WORKING_STATE_IDLE;
xTimerStop(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_LONG_RELEASED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
button_send_event(BUTTON_LONG_RELEASED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_TIME_OUT)
{
current_state = BUTTON_WORKING_STATE_LONG_LONG_PRESSED;
button_send_event(BUTTON_LONG_LONG_PRESSED, current_pressed_button, pressed_cnt);
}
}
static void button_long_long_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
xTimerStop(button_pressing_timer,0);
current_state = BUTTON_WORKING_STATE_IDLE;
button_send_event(BUTTON_LONG_LONG_RELEASED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
button_send_event(BUTTON_LONG_LONG_RELEASED, last_saved_button, pressed_cnt);
}
}
static void button_comb_just_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
current_state = BUTTON_WORKING_STATE_IDLE;
xTimerStop(button_state_timer,0);
button_send_event(BUTTON_COMB_RELEASED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_SINGLE_PRESSED)
{
current_state = BUTTON_WORKING_STATE_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_RELEASED, last_saved_button, pressed_cnt);
button_send_event(BUTTON_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_TIME_OUT)
{
current_state = BUTTON_WORKING_STATE_COMB_PRESSED;
xTimerChangePeriod(button_state_timer, (BUTTON_LONG_DURING*10-BUTTON_SHORT_DURING)*10,0);
xTimerStart(button_state_timer,0);
}
}
static void button_comb_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
current_state = BUTTON_WORKING_STATE_IDLE;
xTimerStop(button_state_timer,0);
button_send_event(BUTTON_COMB_SHORT_PRESSED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_SINGLE_PRESSED)
{
current_state = BUTTON_WORKING_STATE_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_SHORT_PRESSED, last_saved_button, pressed_cnt);
button_send_event(BUTTON_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
button_send_event(BUTTON_COMB_SHORT_PRESSED, last_saved_button, pressed_cnt);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_TIME_OUT)
{
current_state = BUTTON_WORKING_STATE_COMB_LONG_PRESSED;
xTimerChangePeriod(button_state_timer, ((BUTTON_LONG_LONG_DURING-BUTTON_LONG_DURING)*10)*10,0);
xTimerStart(button_state_timer,0);
xTimerChangePeriod(button_pressing_timer, BUTTON_LONG_PRESSING_INTERVAL*10,0);
xTimerStart(button_pressing_timer,0);
button_send_event(BUTTON_COMB_LONG_PRESSED, current_pressed_button, pressed_cnt);
}
}
static void button_comb_long_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
current_state = BUTTON_WORKING_STATE_IDLE;
xTimerStop(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_LONG_RELEASED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_SINGLE_PRESSED)
{
current_state = BUTTON_WORKING_STATE_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_LONG_RELEASED, last_saved_button, pressed_cnt);
button_send_event(BUTTON_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_LONG_RELEASED, last_saved_button, pressed_cnt);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_TIME_OUT)
{
current_state = BUTTON_WORKING_STATE_COMB_LONG_LONG_PRESSED;
button_send_event(BUTTON_COMB_LONG_LONG_PRESSED, current_pressed_button, pressed_cnt);
}
}
static void button_comb_long_long_pressed(uint8_t event)
{
if(event == BUTTON_WORKING_EVENT_RELEASED)
{
current_state = BUTTON_WORKING_STATE_IDLE;
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_LONG_LONG_RELEASED, last_saved_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_SINGLE_PRESSED)
{
current_state = BUTTON_WORKING_STATE_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_LONG_LONG_RELEASED, last_saved_button, pressed_cnt);
button_send_event(BUTTON_PRESSED, current_pressed_button, pressed_cnt);
}
else if(event == BUTTON_WORKING_EVENT_COMB_PRESSED)
{
current_state = BUTTON_WORKING_STATE_COMB_JUST_PRESSED;
xTimerChangePeriod(button_state_timer, BUTTON_SHORT_DURING*10,0);
xTimerStart(button_state_timer,0);
xTimerStop(button_pressing_timer,0);
button_send_event(BUTTON_COMB_LONG_LONG_RELEASED, last_saved_button, pressed_cnt);
button_send_event(BUTTON_COMB_PRESSED, current_pressed_button, pressed_cnt);
}
}
void (*const button_statemachines[BUTTON_WORKING_STATE_MAX])(uint8_t) =
{
button_idle,
button_just_pressed,
button_pressed,
button_wait_multi,
button_long_pressed,
button_long_long_pressed,
button_comb_just_pressed,
button_comb_pressed,
button_comb_long_pressed,
button_comb_long_long_pressed,
};
//one or more button is released or pressed
int button_toggle_handler(uint32_t curr_button)
{
enum button_working_event_t event;
current_pressed_button = curr_button;
if(last_saved_button != current_pressed_button)
{
if(current_pressed_button == 0)
{
event = BUTTON_WORKING_EVENT_RELEASED;
}
else
{
if((current_pressed_button & (current_pressed_button-1)) == 0)
{
event = BUTTON_WORKING_EVENT_SINGLE_PRESSED;
}
else
{
event = BUTTON_WORKING_EVENT_COMB_PRESSED;
}
}
button_statemachines[current_state](event);
last_saved_button = current_pressed_button;
}
return 0;
}
static void button_timeout_handler( TimerHandle_t xTimer)
{
button_statemachines[current_state](BUTTON_WORKING_EVENT_TIME_OUT);
}
static void button_pressing_timeout_handler( TimerHandle_t xTimer )
{
enum button_type_t event;
if((current_pressed_button & (current_pressed_button - 1)) == 0)
{
event = BUTTON_LONG_PRESSING;
}
else
{
event = BUTTON_COMB_LONG_PRESSING;
}
button_send_event(event, current_pressed_button, pressed_cnt);
xTimerChangePeriod(button_pressing_timer, BUTTON_LONG_PRESSING_INTERVAL*10,0);
xTimerStart(button_pressing_timer,0);
}
static void button_anti_shake_timeout_handler( TimerHandle_t xTimer )
{
uint32_t curr_button;
curr_button = ool_read16(PMU_REG_PIN_DATA);
curr_button &= button_io_mask;
if(curr_button == curr_button_before_anti_shake)
{
curr_button ^= button_io_mask;
struct app_task_event *event;
event = app_task_event_alloc(APP_TASK_EVENT_BTN_TOGGLE, sizeof(uint32_t), false);
if(event)
{
memcpy(event->param, (void *)&curr_button, sizeof(uint32_t));
event->param_len = sizeof(uint32_t);
app_task_event_post(event, false);
}
}
}
void button_event_handler(void * param)
{
struct button_msg_t *button_msg;
const char *button_type_str[] = {
"BUTTON_PRESSED",
"BUTTON_RELEASED",
"BUTTON_SHORT_PRESSED",
"BUTTON_MULTI_PRESSED",
"BUTTON_LONG_PRESSED",
"BUTTON_LONG_PRESSING",
"BUTTON_LONG_RELEASED",
"BUTTON_LONG_LONG_PRESSED",
"BUTTON_LONG_LONG_RELEASED",
"BUTTON_COMB_PRESSED",
"BUTTON_COMB_RELEASED",
"BUTTON_COMB_SHORT_PRESSED",
"BUTTON_COMB_LONG_PRESSED",
"BUTTON_COMB_LONG_PRESSING",
"BUTTON_COMB_LONG_RELEASED",
"BUTTON_COMB_LONG_LONG_PRESSED",
"BUTTON_COMB_LONG_LONG_RELEASED",
};
button_msg = (struct button_msg_t *)param;
printf("KEY 0x%08x, TYPE %s. %d\r\n", button_msg->button_index, button_type_str[button_msg->button_type],button_msg->button_type);
if(button_msg->button_type == BUTTON_SHORT_PRESSED) //short button
{
if(button_msg->button_index == BUTTON_PIN_NUM)
{
if(!gui_task_resume())
gui_task_msg_send(BUTTON_KEY_EVT,NULL,0,NULL,0,NULL);
}
else if(button_msg->button_index == SOS_KEY_PIN_NUM)
{
// if(!gui_task_resume())
// {
// gui_task_msg_send(BUTTON_KEY2_EVT,NULL,0,NULL,0,NULL);
// }
}
else if(button_msg->button_index == KEY1_PIN_NUM)
{
if(!gui_task_resume())
{
gui_task_msg_send(BUTTON_KEY1_EVT,NULL,0,NULL,0,NULL);
}
}
}
else if(button_msg->button_type == BUTTON_LONG_PRESSED)//long
{
if(button_msg->button_index == BUTTON_PIN_NUM)
{
}
else if(button_msg->button_index == SOS_KEY_PIN_NUM)
{
}
}
}
void button_init(uint32_t enable_io)
{
button_io_mask = enable_io;
button_anti_shake_timer = xTimerCreate("button_anti_shake_timer", 10, pdFALSE, NULL, button_anti_shake_timeout_handler);
button_pressing_timer = xTimerCreate("button_pressing_timer", BUTTON_LONG_PRESSING_INTERVAL * 10, pdFALSE, NULL, button_pressing_timeout_handler);
button_state_timer = xTimerCreate("button_state_timer", 10 , pdFALSE, NULL, button_timeout_handler);
}

View File

@ -0,0 +1,81 @@
#ifndef _BUTTON_H
#define _BUTTON_H
#include <stdint.h>
enum button_event_t
{
BUTTON_TOGGLE,
BUTTON_PRESSED_EVENT,
BUTTON_TIMER_TO_TIMER,
BUTTON_PRESSING_TO_TIMER,
BUTTON_ANTI_SHAKE_TO_TIMER,
};
enum button_type_t
{
BUTTON_PRESSED,
BUTTON_RELEASED,
BUTTON_SHORT_PRESSED,
BUTTON_MULTI_PRESSED,
BUTTON_LONG_PRESSED,
BUTTON_LONG_PRESSING,
BUTTON_LONG_RELEASED,
BUTTON_LONG_LONG_PRESSED,
BUTTON_LONG_LONG_RELEASED,
BUTTON_COMB_PRESSED,
BUTTON_COMB_RELEASED,
BUTTON_COMB_SHORT_PRESSED,
BUTTON_COMB_LONG_PRESSED,
BUTTON_COMB_LONG_PRESSING,
BUTTON_COMB_LONG_RELEASED,
BUTTON_COMB_LONG_LONG_PRESSED,
BUTTON_COMB_LONG_LONG_RELEASED,
};
enum button_working_state_t
{
BUTTON_WORKING_STATE_IDLE,
BUTTON_WORKING_STATE_JUST_PRESSED,
BUTTON_WORKING_STATE_PRESSED,
BUTTON_WORKING_STATE_WAIT_MULTI,
BUTTON_WORKING_STATE_LONG_PRESSED,
BUTTON_WORKING_STATE_LONG_LONG_PRESSED,
BUTTON_WORKING_STATE_COMB_JUST_PRESSED,
BUTTON_WORKING_STATE_COMB_PRESSED,
BUTTON_WORKING_STATE_COMB_LONG_PRESSED,
BUTTON_WORKING_STATE_COMB_LONG_LONG_PRESSED,
BUTTON_WORKING_STATE_MAX,
};
enum button_working_event_t
{
BUTTON_WORKING_EVENT_RELEASED,
BUTTON_WORKING_EVENT_SINGLE_PRESSED,
BUTTON_WORKING_EVENT_COMB_PRESSED,
BUTTON_WORKING_EVENT_TIME_OUT,
};
struct button_toggle_param_t
{
uint32_t curr_button;
uint32_t timestamp;
};
struct button_msg_t
{
uint32_t button_index;
uint8_t button_type;
uint8_t button_cnt; // only for multi click
};
void button_toggle_detected(uint32_t curr_button);
void button_int_isr(uint32_t changed_button);
void button_init(uint32_t enable_io);
int button_toggle_handler(uint32_t curr_button);
void button_event_handler(void *param);
#endif //_BUTTON_H

View File

@ -0,0 +1,188 @@
#include "fr_device_charge.h"
#include "app_lvgl.h"
static uint8_t charge_status = CHARGING_IDLE;
/************************************************************************************
* @fn charge init
*
* @brief charge init
*/
void device_charge_init(void)
{
uint32_t timeout_count = 10;
/* enable charge function, and set charge current & voltage. */
pmu_charge_enable(PMU_CHG_CUR_88mA, PMU_CHG_END_VOL_4_1);
#if 1
while(timeout_count)
{
/* Check that the charger is connected */
if (read_analog_status() & PMU_CHG_ACOK_STATUS_BIT)
{ /* filter */
//system_delay_us(100);
if (read_analog_status() & PMU_CHG_ACOK_STATUS_BIT)
{ /* The charger is connected. Check out action */
pmu_charge_monitor_en(PMU_CHARGING_OUT);
/* Check that the battery is full */
pmu_battery_full_monitor_en(PMU_BATTERY_FULL);
printf("charge config 1 \r\n");
charge_status = CHARGING_IN;
charge_vbat_toggle_detected(charge_status);
break;
}
}
else
{ /* filter */
//system_delay_us(100);
if ((read_analog_status() & PMU_CHG_ACOK_STATUS_BIT) == 0)
{ /* The charger not connected. Check in action */
pmu_charge_monitor_en(PMU_CHARGING_IN);
printf("charge config 2 \r\n");
charge_status = CHARGING_IDLE;
charge_vbat_toggle_detected(charge_status);
break;
}
}
timeout_count--;
if (timeout_count == 0)
printf("ACOK status timeout");
}
NVIC_EnableIRQ(PMU_IRQn);
#endif
//while(1);
}
void PMU_Charge_Monitor_IRQHandler(void)
{
if (read_analog_status() & PMU_CHG_ACOK_STATUS_BIT)
{
//printf("charge in...\r\n");
/* The charger is connected. Check out action */
pmu_charge_monitor_en(PMU_CHARGING_OUT);
/* Check that the battery is full */
pmu_battery_full_monitor_en(PMU_BATTERY_FULL);
charge_status = CHARGING_IN;
}
else
{
//printf("charge out...\r\n");
/* The charger not connected. Check in action */
pmu_charge_monitor_en(PMU_CHARGING_IN);
charge_status = CHARGING_OUT;
}
charge_vbat_toggle_detected(charge_status);
}
void PMU_Battery_Full_IRQHandler(void)
{
if (read_analog_status() & PMU_BATFULL_STATUS_BIT)
{
//printf("full...\r\n");
/* The battery is full. Check that the battery not full */
pmu_battery_full_monitor_en(PMU_BATTERY_NOT_FULL);
charge_status = CHARGING_FULL;
}
else
{
//printf("not full\r\n");
/* The battery not full. Check that the battery is full */
pmu_battery_full_monitor_en(PMU_BATTERY_FULL);
charge_status = CHARGING_NOT_FULL;
}
charge_vbat_toggle_detected(charge_status);
}
/*
send vbat charge status
*/
void charge_vbat_toggle_detected(uint8_t sat)
{
struct app_task_event *event;
event = app_task_event_alloc(APP_TASK_EVENT_CHARGE_OUTPUT, sizeof(uint8_t), false);
if(event)
{
memcpy(event->param, (void *)&sat, sizeof(uint8_t));
event->param_len = sizeof(uint8_t);
app_task_event_post(event, false);
}
}
void charge_event_handle(uint8_t param)
{
printf("%s param=%d \r\n",__func__,param);
switch(param)
{
case CHARGING_IDLE:
printf("---> CHARGING_IDLE \r\n");
break;
case CHARGING_IN:
printf("---> CHARGING_IN \r\n");
if(gui_task_handle_is_active() == NULL)
return;
gui_task_resume();
gui_task_msg_send(POWER_CHARGE_IN_EVT,NULL,0,NULL,0,NULL);
break;
case CHARGING_OUT:
printf("---> CHARGING_OUT \r\n");
if(gui_task_handle_is_active() == NULL)
return;
gui_task_resume();
gui_task_msg_send(POWER_CHARGE_OUT_EVT,NULL,0,NULL,0,NULL);
break;
case CHARGING_FULL:
printf("---> CHARGING_FULL \r\n");
break;
case CHARGING_NOT_FULL:
printf("---> CHARGING_NOT_FULL \r\n");
break;
}
}
uint8_t get_charge_status(void)
{
return charge_status;
}

View File

@ -0,0 +1,33 @@
#ifndef __FR_DEVICE_CHARGE__
#define __FR_DEVICE_CHARGE__
#ifdef __cplusplus
extern "C" {
#endif
#include "fr30xx.h"
#include "app_task.h"
#define read_analog_status() ool_read(PMU_REG_ANA_STATUS)
typedef enum
{
CHARGING_IDLE = 0,
CHARGING_IN,
CHARGING_OUT,
CHARGING_FULL,
CHARGING_NOT_FULL,
}enum_charge_type_t;
extern void device_charge_init(void);
extern void charge_vbat_toggle_detected(uint8_t sat);
extern void charge_event_handle(uint8_t param);
extern uint8_t get_charge_status(void);
#ifdef __cplusplus
}
#endif
#endif /* __FR_DEVICE_CHARGE__ */

View File

@ -0,0 +1,264 @@
#include <stdint.h>
#include <stddef.h>
#include "driver_gpio.h"
#include "fr30xx.h"
#include "app_task.h"
#include "fr_device_pmu_io.h"
#include "fr_device_encode.h"
#include "app_lvgl.h"
/* FreeRTOS kernel includes. */
#include "FreeRTOS.h"
#include "task.h"
#include "timers.h"
extern uint8_t key_code;
#define ENCODE_FILO_LEN 16
static uint8_t encode_bit_status = 0;
static uint8_t encode_bit_code = 0;
encode_type_t encode_table_filo[ENCODE_FILO_LEN];
uint8_t encode_table_key[ENCODE_FILO_LEN];
uint8_t key_release_flag = 0;
const uint8_t encode_table_value[8][5] =
{
{0x01, 0x00, 0x02, 0x03, 0x01},
{0x02, 0x03, 0x01, 0x00, 0x01},
{0x03, 0x01, 0x00, 0x02, 0x01},
{0x00, 0x02, 0x03, 0x01, 0x01},
{0x02, 0x00, 0x01, 0x03, 0x02},
{0x01, 0x03, 0x02, 0x00, 0x02},
{0x03, 0x02, 0x00, 0x01, 0x02},
{0x00, 0x01, 0x03, 0x02, 0x02},
};
uint32_t encode_last_time;
static uint32_t get_encode_basetime(void)
{
uint32_t cur_base_time = portGET_RUN_TIME_COUNTER_VALUE();
uint32_t diff;
if(cur_base_time >= encode_last_time)
diff = cur_base_time - encode_last_time;
else
diff = (((uint32_t)0xFFFFFFFF) - encode_last_time) + cur_base_time + 1;
encode_last_time = cur_base_time;
return diff;
}
uint32_t encode_release_last_time;
static uint32_t get_encode_release_basetime(void)
{
uint32_t cur_base_time = portGET_RUN_TIME_COUNTER_VALUE();
uint32_t diff;
if(cur_base_time >= encode_release_last_time)
diff = cur_base_time - encode_release_last_time;
else
diff = (((uint32_t)0xFFFFFFFF) - encode_release_last_time) + cur_base_time + 1;
return diff;
}
void clear_encode_fifo(void)
{
encode_last_time = portGET_RUN_TIME_COUNTER_VALUE();
memset(encode_table_filo,0,ENCODE_FILO_LEN*2);
}
void encode_push_key(uint8_t key_value)
{
uint8_t i;
uint32_t time;
time = get_encode_basetime();
if(time <= 3)
{
time += encode_table_filo[0].time;
if(time > 0xff)
time = 0xff;
encode_table_filo[0].time = time;
encode_table_filo[0].keyvalue = key_value;
// printf("fiter");
}
else
{
for(i = ENCODE_FILO_LEN - 1; i > 0; i -- )
{
encode_table_filo[i] = encode_table_filo[i - 1];
}
encode_table_filo[0].keyvalue = key_value;
if(time > 255)
{
encode_table_filo[0].time = 0xff;
// printf("\n");
// printf("\n");
// printf("\n");
// printf("\n");
// printf("\n");
// printf("\n");
}
else
encode_table_filo[0].time = time;
}
// printf("keyvlue:");
// for(i = 0; i < 15; i ++ )
// {
// printf("%d/", encode_table_filo[i].keyvalue);
// printf("%d ", encode_table_filo[i].time);
// }
// printf("\n");
}
uint8_t get_encode_start(void)
{
uint8_t i = 0;
while(i < ENCODE_FILO_LEN)
{
if(encode_table_filo[i].time == 0xff)
{
i ++;
break;
}
i ++;
}
return i;
}
void encode_event_handle(uint8_t key_value)
{
uint8_t len;
uint8_t start;
uint8_t i,j;
// if (get_charte_state())
// return;
// if (system_enter_music_flag)
// return;
//printf("value %d\n", key_value);
start = get_encode_start();
len = start;
for(i = 0; i < len; i++)
{
encode_table_key[i] = encode_table_filo[start - 1].keyvalue;
start --;
}
if(len > 4)
{
j = 0;
while(j < (len-4))
{
i = 0;
while(i < 8)
{
if(memcmp(&encode_table_value[i][0],encode_table_key+j,4) == 0)
{
//if(!key_release_flag)
{
//os_timer_stop(&encode_release_timer);
encode_bit_code = encode_table_value[i][4];
//printf("code %d \n",encode_bit_code);
key_release_flag = 1;
if(!gui_task_resume())
{
encode_release_last_time = portGET_RUN_TIME_COUNTER_VALUE();
encode_bit_code |= 0x80;
gui_task_msg_send(ENCODE_KEY_EVT,(void *)&encode_bit_code,1,NULL,0,NULL);
}
return;
}
}
i ++;
}
j++;
}
}
else if((len >= 2) && (len <= 4))
{
i = 0;
while(i < 8)
{
if(memcmp(&encode_table_value[i][0],encode_table_key,len) == 0)
{
//if(!key_release_flag)
{
//os_timer_stop(&encode_release_timer);
encode_bit_code = encode_table_value[i][4];
//printf("code %d \n",encode_bit_code);
key_release_flag = 1;
if(!gui_task_resume())
{
encode_release_last_time = portGET_RUN_TIME_COUNTER_VALUE();
encode_bit_code |= 0x80;
gui_task_msg_send(ENCODE_KEY_EVT,(void *)&encode_bit_code,1,NULL,0,NULL);
}
return;
}
}
i ++;
}
}
}
bool encode_key_release(void)
{
if(get_encode_release_basetime() > 10)
{
key_code = 0;
return true;
}
return false;
}
void encode_toggle_detected(uint8_t curr_encode)
{
//printf("encode %d \n",curr_encode);
if(encode_bit_status != curr_encode)
{
encode_bit_status = curr_encode;
encode_push_key(curr_encode);
struct app_task_event *event;
event = app_task_event_alloc(APP_TASK_EVENT_ENCODE_TOGGLE, sizeof(uint8_t), false);
if(event)
{
memcpy(event->param, (void *)&curr_encode, sizeof(uint8_t));
event->param_len = sizeof(uint8_t);
app_task_event_post(event, false);
}
}
}

View File

@ -0,0 +1,21 @@
#ifndef __FR_DEVICE_ENCODE_H__
#define __FR_DEVICE_ENCODE_H__
#include <stdint.h>
typedef struct
{
uint8_t keyvalue;
uint8_t time; //1 ms as unit
}encode_type_t;
bool encode_key_release(void);
void encode_toggle_detected(uint8_t curr_encode);
void encode_event_handle(uint8_t key_value);
#endif //__FR_DEVICE_ENCODE_H__

View File

@ -0,0 +1,38 @@
#include "fr_device_pa.h"
bool pa_enable_flag = false;
void device_pa_init(void)
{
GPIO_InitTypeDef gpio_config;
__SYSTEM_GPIOA_CLK_ENABLE();
gpio_config.Pin = GPIO_PIN_6;
gpio_config.Mode = GPIO_MODE_OUTPUT_PP;
gpio_config.Pull = GPIO_PULLDOWN;
gpio_config.Alternate = GPIO_FUNCTION_0;
gpio_init(GPIOA, &gpio_config);
pa_enable_flag = false;
gpio_write_pin(GPIOA, GPIO_PIN_6, GPIO_PIN_CLEAR); //defaultoutput low
}
void device_pa_enable(void)
{
if(pa_enable_flag == false){
printf("PA enable\r\n");
pa_enable_flag = true;
gpio_write_pin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET); //output high
}
}
void device_pa_disable(void)
{
if(pa_enable_flag == true){
printf("PA disable\r\n");
pa_enable_flag = false;
gpio_write_pin(GPIOA, GPIO_PIN_6, GPIO_PIN_CLEAR); //output low
}
}

View File

@ -0,0 +1,21 @@
#ifndef __FR_DEVICE_PA__
#define __FR_DEVICE_PA__
#ifdef __cplusplus
extern "C" {
#endif
#include "fr30xx.h"
#include "app_task.h"
extern void device_pa_init(void);
extern void device_pa_enable(void);
extern void device_pa_disable(void);
#ifdef __cplusplus
}
#endif
#endif /* __FR_DEVICE_PA__ */

View File

@ -0,0 +1,118 @@
/*********************
* INCLUDES
*********************/
#include "driver_gpio.h"
#include "fr30xx.h"
#include "app_lvgl.h"
#include "fr_device_pmu_io.h"
#include "fr_device_button.h"
#include "fr_device_encode.h"
/*********************
* DEFINES
*********************/
#define BUTTON_DEBUG(fmt,arg...) printf("[BUTTON]"fmt,##arg)
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
/**********************
* VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* EXTERN FUNCTIONS
**********************/
/**********************
* FUNCTIONS
**********************/
void device_pmu_io_init(void)
{
pmu_gpio_int_init(BUTTON_PIN_NUM, PMU_GPIO_PULL_UP, 1);
pmu_gpio_int_init(SOS_KEY_PIN_NUM, PMU_GPIO_PULL_UP, 1);
pmu_gpio_int_init(KEY1_PIN_NUM, PMU_GPIO_PULL_UP, 1);
pmu_gpio_int_init(ENCONDED_A_PIN_NUM, PMU_GPIO_PULL_UP, 1);
pmu_gpio_int_init(ENCONDED_B_PIN_NUM, PMU_GPIO_PULL_UP, 1);
pmu_enable_isr(PMU_GPIO_PMU_INT_MSK_BIT);
NVIC_SetPriority(PMU_IRQn, 4);
NVIC_EnableIRQ(PMU_IRQn);
}
void PMU_GPIO_PMU_IRQHandler(void)
{
uint16_t data = ool_read16(PMU_REG_PIN_DATA);
uint16_t result = ool_read16(PMU_REG_PIN_XOR_RESULT);
/* update last value with latest data */
ool_write16(PMU_REG_PIN_LAST_V, data);
/* clear last XOR result */
ool_write16(PMU_REG_PIN_XOR_CLR, result);
// printf("PMU IO: 0x%04x, 0x%04x\r\n", data, result);
if (data & PMU_PIN_9) {
system_prevent_sleep_clear(SYSTEM_PREVENT_SLEEP_TYPE_HCI_RX);
}
else {
system_prevent_sleep_set(SYSTEM_PREVENT_SLEEP_TYPE_HCI_RX);
}
if (result & (ENCONDED_A_PIN_NUM | ENCONDED_B_PIN_NUM)) {
uint8_t encode_bit_status;
if (!(data & ENCONDED_A_PIN_NUM))
{
encode_bit_status |= 0x02;
}
else
{
encode_bit_status &= 0xFD;
}
if (!(data & ENCONDED_B_PIN_NUM))
{
encode_bit_status |= 0x01;
}
else
{
encode_bit_status &= 0xFE;
}
encode_toggle_detected(encode_bit_status);
}
if (result & (BUTTON_PIN_NUM | SOS_KEY_PIN_NUM | KEY1_PIN_NUM)) {
button_toggle_detected(data);
}
}

View File

@ -0,0 +1,108 @@
#ifndef __FR_DEVICE_PMU_IO_H__
#define __FR_DEVICE_PMU_IO_H__
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
#include "app_config.h"
/*********************
* DEFINES
*********************/
#if BOARD_SEL == BOARD_EVB_FR5090
#define BUTTON_PIN_NUM PMU_PIN_7
#define SOS_KEY_PIN_NUM PMU_PIN_5
#define KEY1_PIN_NUM PMU_PIN_4
#define ENCONDED_A_PIN_NUM PMU_PIN_2
#define ENCONDED_B_PIN_NUM PMU_PIN_3
#define PMU_IO_INTTERUPT_DEFAULT (BUTTON_PIN_NUM|SOS_KEY_PIN_NUM|KEY1_PIN_NUM|ENCONDED_A_PIN_NUM|ENCONDED_B_PIN_NUM)
#elif BOARD_SEL == BOARD_EVB_FR3092E
#define BUTTON_PIN_NUM PMU_PIN_7
#define SOS_KEY_PIN_NUM PMU_PIN_5
#define KEY1_PIN_NUM PMU_PIN_4
#define ENCONDED_A_PIN_NUM PMU_PIN_2
#define ENCONDED_B_PIN_NUM PMU_PIN_3
#define PMU_IO_INTTERUPT_DEFAULT (BUTTON_PIN_NUM|SOS_KEY_PIN_NUM|ENCONDED_A_PIN_NUM|ENCONDED_B_PIN_NUM)
#elif BOARD_SEL == BOARD_EVB_FR3092E_CM
#define BUTTON_PIN_NUM PMU_PIN_4
#define SOS_KEY_PIN_NUM PMU_PIN_5
#define KEY1_PIN_NUM PMU_PIN_3
#define ENCONDED_A_PIN_NUM PMU_PIN_7
#define ENCONDED_B_PIN_NUM PMU_PIN_6
#define PMU_IO_INTTERUPT_DEFAULT (BUTTON_PIN_NUM|SOS_KEY_PIN_NUM|KEY1_PIN_NUM|ENCONDED_A_PIN_NUM|ENCONDED_B_PIN_NUM)
#elif BOARD_SEL == BOARD_EVB_FR3092E_RGB
#define BUTTON_PIN_NUM PMU_PIN_7
#define SOS_KEY_PIN_NUM PMU_PIN_5
#define KEY1_PIN_NUM PMU_PIN_4
#define ENCONDED_A_PIN_NUM PMU_PIN_2
#define ENCONDED_B_PIN_NUM PMU_PIN_3
#define PMU_IO_INTTERUPT_DEFAULT (BUTTON_PIN_NUM|SOS_KEY_PIN_NUM|ENCONDED_A_PIN_NUM|ENCONDED_B_PIN_NUM)
#else
#error "choose correct board"
#endif
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
/**********************
* VARIABLES
**********************/
/**********************
* MACROS
**********************/
//default Time zone
/**********************
* EXTERN FUNCTIONS
**********************/
void device_pmu_io_init(void);
/**********************
* FUNCTIONS
**********************/
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif

View File

@ -0,0 +1,396 @@
/**
* @file fr_device_rtc.c
*
* @author tangzheng
*/
/*********************
* INCLUDES
*********************/
/* Standard includes. */
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "fr30xx.h"
#include "FreeRTOS.h"
#include "lvgl.h"
#include "fr_device_rtc.h"
#include "fr_watch.h"
/*********************
* DEFINES
*********************/
#define RTC_DEBUG(fmt,arg...) printf("[RTC]"fmt,##arg)
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
#define BLE_BASETIMECNT_MASK ((uint32_t)0xFFFFFFFF) //((uint32_t)0x4FFFFFF)
uint32_t system_rtc_tick = 0;
uint32_t last_ke_time;
/**********************
* VARIABLES
**********************/
const unsigned char g_day_per_mon[MONTH_PER_YEAR] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
time_rtc_t rtc_time = {
.ucYear = 2023,
.ucMonth = 10,
.ucDate = 1,
.ucHour = 12,
.ucMinute = 0,
.ucSecond = 0,
};
time_zone_t gSysTimeZone = {
.h = 8,
.m = 0,
};
static uint32_t sys_utc_time;
/**********************
* MACROS
**********************/
/**********************
* EXTERN FUNCTIONS
**********************/
/**********************
* FUNCTIONS
**********************/
unsigned char applib_dt_is_leap_year(unsigned short year)
{
if((year % 400) == 0)
{
return 1;
}
else if((year % 100) == 0)
{
return 0;
}
else if((year % 4) == 0)
{
return 1;
}
else
{
return 0;
}
}
unsigned char applib_dt_last_day_of_mon(unsigned char month, unsigned short year)
{
if((month == 0) || (month > 12))
{
return g_day_per_mon[1] + applib_dt_is_leap_year(year);
}
if(month != 2)
{
return g_day_per_mon[month - 1];
}
else
{
return g_day_per_mon[1] + applib_dt_is_leap_year(year);
}
}
unsigned int CalcWeekday(time_rtc_t time)
{
char century_code, year_code, month_code, day_code;
int week = 0;
century_code = year_code = month_code = day_code = 0;
if(time.ucMonth == 1 || time.ucMonth == 2)
{
century_code = (time.ucYear - 1) / 100;
year_code = (time.ucYear - 1) % 100;
month_code = time.ucMonth + 12;
day_code = time.ucDate;
}
else
{
century_code = time.ucYear / 100;
year_code = time.ucYear % 100;
month_code = time.ucMonth;
day_code = time.ucDate;
}
week = year_code + year_code / 4 + century_code / 4 - 2 * century_code + 26 * (month_code + 1) / 10 + day_code - 1;
week = week > 0 ? (week % 7) : ((week % 7) + 7);
return week;
}
unsigned int utc_time_to_sec(time_rtc_t* currTime)
{
unsigned short i;
unsigned int no_of_days = 0;
int utc_time;
if(currTime->ucYear < UTC_BASE_YEAR)
{
return 0;
}
/* year */
for(i = UTC_BASE_YEAR; i < currTime->ucYear; i++)
{
no_of_days += (DAY_PER_YEAR + applib_dt_is_leap_year(i));
}
/* month */
for(i = 1; i < currTime->ucMonth; i++)
{
no_of_days += applib_dt_last_day_of_mon((unsigned char) i, currTime->ucYear);
}
/* day */
no_of_days += (currTime->ucDate - 1);
#if 0
/* sec */
//utc_time = (unsigned int) no_of_days * SEC_PER_DAY + (unsigned int)(currTime->ucHour * SEC_PER_HOUR +
// currTime->ucMinute * SEC_PER_MIN + currTime->ucSecond);
utc_time = (unsigned int) no_of_days * SEC_PER_DAY + (unsigned int)((currTime->ucHour-8) * SEC_PER_HOUR +
currTime->ucMinute * SEC_PER_MIN + currTime->ucSecond);
#else
utc_time = (unsigned int) no_of_days * SEC_PER_DAY + (unsigned int)(currTime->ucHour * SEC_PER_HOUR +
currTime->ucMinute * SEC_PER_MIN + currTime->ucSecond);
utc_time -= (gSysTimeZone.h * 3600 + gSysTimeZone.m * 60);
#endif
return utc_time;
}
void utc_sec_to_time(unsigned int utc_sec, time_rtc_t* result)
{
int sec, day;
unsigned short y;
unsigned char m;
unsigned short d;
//unsigned char dst;
#if 0
if(daylightSaving)
{
utc_sec += SEC_PER_HOUR;
}
#endif
utc_sec = utc_sec + gSysTimeZone.h * 3600 + gSysTimeZone.m * 60;
/* hour, min, sec */
/* hour */
sec = utc_sec % SEC_PER_DAY;
result->ucHour = sec / SEC_PER_HOUR;
/* min */
sec %= SEC_PER_HOUR;
result->ucMinute = sec / SEC_PER_MIN;
/* sec */
result->ucSecond = sec % SEC_PER_MIN;
/* year, month, day */
/* year */
/* year */
day = utc_sec / SEC_PER_DAY;
for(y = UTC_BASE_YEAR; day > 0; y++)
{
d = (DAY_PER_YEAR + applib_dt_is_leap_year(y));
if(day >= d)
{
day -= d;
}
else
{
break;
}
}
result->ucYear = y;
for(m = 1; m < MONTH_PER_YEAR; m++)
{
d = applib_dt_last_day_of_mon(m, y);
if(day >= d)
{
day -= d;
}
else
{
break;
}
}
result->ucMonth = m;
result->ucDate = (unsigned char)(day + 1);
//result->DayIndex = applib_dt_dayindex(result->ncYear, result->ucMonth, result->ucDate);
}
unsigned char system_time_set_time_zone(time_zone_t set)
{
if(gSysTimeZone.h == set.h && gSysTimeZone.m == set.m)
{
return 0;
}
gSysTimeZone = set;
return 1;
}
void system_time_set(time_rtc_t set)
{
rtc_time = set;
}
time_rtc_t *system_time_get(void)
{
return &rtc_time;
}
time_zone_t *system_time_get_timeZone(void)
{
return &gSysTimeZone;
}
//date & time
bool CalcDoYear(uint16_t ucYear)
{
if((ucYear % 400 == 0)
||((ucYear % 4 == 0) && (ucYear % 100 != 0)))
{
return 1; //run nian
}
return 0;
}
uint8_t CalcMaxDate(time_rtc_t time)
{
uint8_t dates;
switch(time.ucMonth)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dates = 31;
break;
case 2:
if(CalcDoYear(time.ucYear))
dates = 29; //run nian
else
dates = 28;
break;
case 4:
case 6:
case 9:
case 11:
dates = 30;
break;
}
return dates;
}
uint32_t system_get_curr_time(void)
{
return portGET_RUN_TIME_COUNTER_VALUE();
//return system_rtc_tick;
}
static uint32_t get_sys_ke_basetime(void)
{
uint32_t cur_base_time = system_get_curr_time();
uint32_t diff;
if(cur_base_time >= last_ke_time)
diff = cur_base_time - last_ke_time;
else
diff = (BLE_BASETIMECNT_MASK - last_ke_time) + cur_base_time + 1;
return diff;
}
void dev_rtc_time_init(void)
{
sys_utc_time = utc_time_to_sec(&rtc_time);
last_ke_time = system_get_curr_time();
}
unsigned int get_sys_utc_time(void)
{
return sys_utc_time;
}
void fr_system_update_utc_time(time_rtc_t *cur_time)
{
sys_utc_time = utc_time_to_sec(cur_time);
}
void rtc_running(void)
{
uint32_t diff = get_sys_ke_basetime();
if( diff > 1000 )
{
uint32_t temp_time_value=0;
temp_time_value = diff / 1000;
last_ke_time += temp_time_value*1000;
//if( last_ke_time > BLE_BASETIMECNT_MASK)
// last_ke_time -= (BLE_BASETIMECNT_MASK+1);
sys_utc_time += temp_time_value;
utc_sec_to_time(sys_utc_time,&sync_cm3_data.time);
}
}

View File

@ -0,0 +1,83 @@
/**
* @file fr_device_rtc.h
*
* @author tangzheng
*/
#ifndef __FR_DEVICE_RTC_H__
#define __FR_DEVICE_RTC_H__
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
typedef struct {
signed char h;
signed char m;
}time_zone_t;
/**********************
* STATIC PROTOTYPES
**********************/
/**********************
* STATIC VARIABLES
**********************/
/**********************
* VARIABLES
**********************/
/**********************
* MACROS
**********************/
#define UTC_BASE_YEAR 1970
#define MONTH_PER_YEAR 12
#define DAY_PER_YEAR 365
#define SEC_PER_DAY 86400
#define SEC_PER_HOUR 3600
#define SEC_PER_MIN 60
//default Time zone
#define DEFAULT_TIME_ZONE {8, 00}
/**********************
* EXTERN FUNCTIONS
**********************/
extern void rtc_running(void);
extern void dev_rtc_time_init(void);
extern unsigned int get_sys_utc_time(void);
/**********************
* FUNCTIONS
**********************/
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif

View File

@ -0,0 +1,386 @@
#include "fr_device_vbat.h"
#include "fr_device_charge.h"
#include "fr_watch.h"
uint16_t CH_Data[10];
uint8_t Bat_voltage = 0;
bool bat_filo_init_flag = false;
/************************************************************************************
* @fn adc vbat start
*
* @brief adc vbat start
*/
void device_vbat_init(enum_ADC_Demo_t fe_demo)
{
adc_InitConfig_t ADC_Config;
__SYSTEM_ADC_CLK_ENABLE();
pmu_adc_power_ctrl(true);
pmu_vbe_power_ctrl(true);
switch(0)
{
case ADC_SOFTWARE_TRIGGER_MODE:
{
ADC_Config.ADC_Reference = ADC_REF_IOLDO;
ADC_Config.ADC_TriggerMode = ADC_SOFTWARE_TRIGGER;
#if 0
adc_set_channel_maping(0, ADC_CHANNEL_MAP_PMU_P4);
adc_set_channel_maping(1, ADC_CHANNEL_MAP_PMU_P5);
adc_set_channel_maping(2, ADC_CHANNEL_MAP_PMU_P6);
adc_set_channel_maping(3, ADC_CHANNEL_MAP_PMU_P7);
adc_set_channel_maping(4, ADC_CHANNEL_MAP_VABT);
adc_set_channel_maping(5, ADC_CHANNEL_MAP_VBE);
#else
adc_set_channel_maping(4, ADC_CHANNEL_MAP_VBAT);
#endif
adc_init(ADC_Config);
adc_soft_trigger_convert(4);
while(!adc_get_channel_valid_status(4));
uint16_t adc_result = adc_get_channel_data(4);
uint16_t vbat_vol = adc_result * 4 * 3300 / 1023;
//init filo
if(!bat_filo_init_flag)
{
battery_value_fifo_init(vbat_vol);
bat_filo_init_flag = true;
}
//transform to precentage
//Bat_voltage = transform_battery(vbat_vol);
Bat_voltage = battery_value_fifo_inc(transform_battery(vbat_vol));
sync_cm3_data.battery.battery_value = Bat_voltage;
printf("adc %d vol %d prec %d \r\n",adc_result,vbat_vol,Bat_voltage);
}
break;
#if 0
case ADC_HARDWARE_TRIGGER_LOOP_MODE:
{
ADC_Config.ADC_Reference = ADC_REF_IOLDO;
ADC_Config.ADC_TriggerMode = ADC_HARDWARE_TRIGGER;
ADC_Config.HardTriggerConfig.ADC_Channel_Max = 6;
ADC_Config.HardTriggerConfig.ADC_Convert_Mode = ADC_LOOP_MODE;
adc_init(ADC_Config);
adc_set_channel_maping(0, ADC_CHANNEL_MAP_PMU_P4);
adc_set_channel_maping(1, ADC_CHANNEL_MAP_PMU_P5);
adc_set_channel_maping(2, ADC_CHANNEL_MAP_PMU_P6);
adc_set_channel_maping(3, ADC_CHANNEL_MAP_PMU_P7);
adc_set_channel_maping(4, ADC_CHANNEL_MAP_VABT);
adc_set_channel_maping(5, ADC_CHANNEL_MAP_VBE);
adc_convert_start();
while(1)
{
for (int i = 0; i < 6; i++)
{
if (adc_get_channel_valid_status(i))
{
CH_Data[i] = adc_get_channel_data(i);
printf("Channel:%d, DATA:%d\r\n", i, CH_Data[i]);
}
}
}
}break;
case ADC_HARDWARE_TRIGGER_IT_MODE:
{
ADC_Config.ADC_Reference = ADC_REF_IOLDO;
ADC_Config.ADC_TriggerMode = ADC_HARDWARE_TRIGGER;
ADC_Config.HardTriggerConfig.ADC_Channel_Max = 6;
ADC_Config.HardTriggerConfig.ADC_Convert_Mode = ADC_LOOP_MODE;
adc_init(ADC_Config);
adc_set_channel_maping(0, ADC_CHANNEL_MAP_PMU_P4);
adc_set_channel_maping(1, ADC_CHANNEL_MAP_PMU_P5);
adc_set_channel_maping(2, ADC_CHANNEL_MAP_PMU_P6);
adc_set_channel_maping(3, ADC_CHANNEL_MAP_PMU_P7);
adc_set_channel_maping(4, ADC_CHANNEL_MAP_VABT);
adc_set_channel_maping(5, ADC_CHANNEL_MAP_VBE);
adc_convert_start_IT();
NVIC_EnableIRQ(ADC_IRQn);
while(1);
}break;
#endif
}
}
/*
get vbat voltage
*/
uint16_t device_get_vbat(void)
{
return Bat_voltage;
}
/*
adc vbat event handle
*/
void adc_vbat_event_handle(void)
{
device_vbat_init(ADC_SOFTWARE_TRIGGER_MODE);
}
/*
adc vbat start detect
*/
void adc_vbat_start_detect(void)
{
struct app_task_event *event;
event = app_task_event_alloc(APP_TASK_EVENT_ADC_VBAT_DETECT, 0, false);
if(event)
{
//memcpy(event->param, (void *)&curr_button, sizeof(uint32_t));
//event->param_len = sizeof(uint32_t);
app_task_event_post(event, false);
}
}
/*
adc isr
*/
void adc_irq(void)
{
for (int i = 0; i < 6; i++)
{
if (adc_get_channel_valid_status(i))
{
//printf("int channel: %d, DATA:%d\r\n", i, adc_get_channel_data(i));
}
}
}
const uint16_t g_battery_table[] =
{
//0-10 //3405
3405,
3410,
3415,
3420,
3425,
3430,
3435,
3440,
3446,
3452,
//10-20 //3458
3458,
3464,
3470,
3476,
3482,
3488,
3494,
3500,
3506,
3512,
//20-30 //3519
3516,
3520,
3524,
3528,
3532,
3536,
3540,
3544,
3548,
3552,
//30-40 //3555
3556,
3560,
3564,
3568,
3572,
3576,
3579,
3582,
3585,
3588,
//40-50 //3590
3591,
3594,
3597,
3602,
3605,
3608,
3611,
3614,
3617,
3620,
// 3800 --> 50% //3623
//50-60
3623,
3627,
3631,
3635,
3639,
3643,
3647,
3652,
3657,
3662,
// 3844
//60-70 //3667
3667,
3673,
3679,
3685,
3691,
3697,
3703,
3710,
3717,
3724,
// 3920
//70-80 //3731
3731,
3739,
3747,
3755,
3763,
3771,
3779,
3787,
3795,
3803,
//3980
//80-90 //3812
3811,
3819,
3827,
3835,
3843,
3851,
3859,
3867,
3875,
3883,
//4040
//90-100 //3830
3900,
3915,
3930,
3945,
3960,
3975,
3990,
4005,
4020,
4050,
};
uint8_t transform_battery(uint16_t battery_value)
{
uint8_t i = 100;
while(i > 0)
{
if(battery_value >= g_battery_table[i - 1])
{
break;
}
i --;
}
return i;
}
#define BATTERY_FIFO_MAX 20
uint8_t battery_detect_fifo[BATTERY_FIFO_MAX];
void battery_value_fifo_init(uint16_t value)
{
uint8_t voltage = transform_battery(value);
for(uint8_t i = 0; i < BATTERY_FIFO_MAX; i ++ )
{
battery_detect_fifo[i] = voltage;
}
Bat_voltage = voltage;
}
uint8_t battery_value_fifo_inc(uint8_t value)
{
for(uint8_t i = 0; i < (BATTERY_FIFO_MAX - 1); i ++ )
{
battery_detect_fifo[(BATTERY_FIFO_MAX - 1) - i] = battery_detect_fifo[(BATTERY_FIFO_MAX - 2) - i];
}
battery_detect_fifo[0] = value;
uint32_t battery_total = 0;
for(uint8_t i = 0; i < BATTERY_FIFO_MAX; i ++ )
{
battery_total += battery_detect_fifo[i];
}
uint8_t averages = battery_total / BATTERY_FIFO_MAX;
if(get_charge_status() == CHARGING_IN)
{
return averages;
}
else
{
if(averages > Bat_voltage)
{
return Bat_voltage;
}
else
{
return averages;
}
}
}

View File

@ -0,0 +1,32 @@
#ifndef __FR_DEVICE_BATTERY__
#define __FR_DEVICE_BATTERY__
#ifdef __cplusplus
extern "C" {
#endif
#include "fr30xx.h"
#include "app_task.h"
/* ADC demo select */
typedef enum
{
ADC_SOFTWARE_TRIGGER_MODE,
ADC_HARDWARE_TRIGGER_LOOP_MODE,
ADC_HARDWARE_TRIGGER_IT_MODE,
}enum_ADC_Demo_t;
/* Exported functions --------------------------------------------------------*/
extern void device_vbat_init(enum_ADC_Demo_t fe_demo);
extern void adc_vbat_event_handle(void);
extern void adc_vbat_start_detect(void);
extern uint8_t transform_battery(uint16_t battery_value);
extern uint8_t battery_value_fifo_inc(uint8_t value);
extern void battery_value_fifo_init(uint16_t value);
#ifdef __cplusplus
}
#endif
#endif /* __FR_DEVICE_BATTERY__ */

View File

@ -0,0 +1,514 @@
/**
*********************************************************************************************************
* @file lfs_port.c
* @brief
* @details
* @author tang zheng
* @date 2022-08-27
* @version v0.1
* *********************************************************************************************************
*/
#include "fr30xx.h"
#include "lfs_port.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#define ACCESS_EXTERN_FLASH_WIDTH_32BITS 1
lfs_t lfs;
QueueHandle_t lfs_semaphore;
volatile bool lfs_flash_read_dma_int = true;
void lfs_flash_read_callback(void)
{
lfs_flash_read_dma_int = false;
}
static int lfs_custom_flash_read(const struct lfs_config *c, lfs_block_t block,
lfs_off_t off, void *buffer, lfs_size_t size)
{
#ifdef LFS_EXT_FLASH
//IC_W25Qxx_Read_Data((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
//IC_W25Qxx_Read_Dual_Output((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
#if ACCESS_EXTERN_FLASH_WIDTH_32BITS == 0
IC_W25Qxx_Read_Quad_Output((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
#else
assert((size & 0x03) == 0);
assert(((uint32_t)buffer & 0x03) == 0);
__SPI_DISABLE(spi_flash_handle.SPIx);
__SPI_DATA_FRAME_SIZE(spi_flash_handle.SPIx, SPI_FRAME_SIZE_32BIT);
__SPI_RX_ENDIAN_SET(spi_flash_handle.SPIx, TX_RX_Endian_1234);
IC_W25Qxx_Read_Quad_Output((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size>>2);
__SPI_DISABLE(spi_flash_handle.SPIx);
__SPI_DATA_FRAME_SIZE(spi_flash_handle.SPIx, SPI_FRAME_SIZE_8BIT);
__SPI_RX_ENDIAN_SET(spi_flash_handle.SPIx, TX_RX_Endian_4321);
#endif
#if 0
//printf("E ................\r\n");
lfs_flash_read_dma_int = true;
IC_W25Qxx_Set_Read_Callback(lfs_flash_read_callback);
//IC_W25Qxx_Read_Dual_Output_DMA((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
IC_W25Qxx_Read_Quad_Output_DMA((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
while(lfs_flash_read_dma_int)
{
vTaskDelay(1);
printf("f w \r\n");
}
#endif
#if 0
lfs_flash_read_dma_int = true;
IC_W25Qxx_Set_Read_Callback(lfs_flash_read_callback);
//IC_W25Qxx_Read_Data_IT
//IC_W25Qxx_Read_Dual_Output_IT
//IC_W25Qxx_Read_Quad_Output_IT
IC_W25Qxx_Read_Quad_Output_IT((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
while(lfs_flash_read_dma_int)
{
//vTaskDelay(1);
printf("f w \r\n");
}
#endif
#else
flash_read(LFS_FLASH_START_ADRRESS+(block * c->block_size)+off,size,(uint8_t *)buffer);
#endif
return 0;
}
static int lfs_custom_flash_write(const struct lfs_config *c, lfs_block_t block,
lfs_off_t off, const void *buffer, lfs_size_t size)
{
#ifdef LFS_EXT_FLASH
//IC_W25Qxx_PageProgram((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
IC_W25Qxx_PageProgram_Quad((uint8_t *)buffer, LFS_FLASH_START_ADRRESS+(block * c->block_size), size);
#else
flash_write(LFS_FLASH_START_ADRRESS+(block * c->block_size)+off,size,(uint8_t *)buffer);
#endif
return 0;
}
static int lfs_custom_flash_erase(const struct lfs_config *c, lfs_block_t block)
{
#ifdef LFS_EXT_FLASH
IC_W25Qxx_EraseSector(LFS_FLASH_START_ADRRESS+(block * c->block_size));
#else
flash_erase(LFS_FLASH_START_ADRRESS+(block * c->block_size), HAL_FLASH_BLOCK_4K);
#endif
return 0;
}
static int lfs_custom_flash_sync(const struct lfs_config *c)
{
return 0;
}
int32_t lfs_free_size(void)
{
int16_t block;
block=LFS_FLASH_SIZE/HAL_FLASH_BLOCK_4K-lfs_fs_size(&lfs);
if(block >= 0)
{
return block*HAL_FLASH_BLOCK_4K;
}
else
{
return -1;
}
}
int lfs_port_lock(const struct lfs_config *c)
{
uint32_t time_out_counter = 0;
while(xSemaphoreTake( lfs_semaphore, 0 ) != pdPASS)
{
vTaskDelay(1);
time_out_counter ++;
if(time_out_counter >= 1000)
return -1;
}
return 0;
// if( xSemaphoreTake( lfs_semaphore, 0 ) != pdPASS )
// {
// return -1;
// }
// else
// {
// return 0;
// }
}
int lfs_port_unlock(const struct lfs_config *c)
{
if( xSemaphoreGive( lfs_semaphore ) != pdPASS )
{
return -1;
}
else
{
return 0;
}
}
int extern_flash_lock(void)
{
if( xSemaphoreTake( lfs_semaphore, 0 ) != pdPASS )
{
return -1;
}
else
{
return 0;
}
}
int extern_flash_unlock(void)
{
if( xSemaphoreGive( lfs_semaphore ) != pdPASS )
{
return -1;
}
else
{
return 0;
}
}
void extern_flash_read(uint8_t *Buffer, uint32_t flash_Address, uint32_t Length)
{
while(extern_flash_lock())
{
vTaskDelay(1);
}
//IC_W25Qxx_Read_Quad_Output(Buffer, (flash_Address & 0x3fffffff), Length);
// while (Length) {
// uint32_t read_length;
// read_length = Length > 64 ? 64 : Length;
// IC_W25Qxx_Read_Quad_Output(Buffer, (flash_Address & 0x3fffffff), read_length);
// Buffer += read_length;
// flash_Address += read_length;
// Length -= read_length;
// }
//DMA
#if ACCESS_EXTERN_FLASH_WIDTH_32BITS == 0
lfs_flash_read_dma_int = true;
IC_W25Qxx_Set_Read_Callback(lfs_flash_read_callback);
IC_W25Qxx_Read_Quad_Output_DMA(Buffer, (flash_Address & 0x3fffffff), Length);
while(lfs_flash_read_dma_int)
{
vTaskDelay(1);
}
#else
__SPI_DISABLE(spi_flash_handle.SPIx);
__SPI_DATA_FRAME_SIZE(spi_flash_handle.SPIx, SPI_FRAME_SIZE_32BIT);
__SPI_RX_ENDIAN_SET(spi_flash_handle.SPIx, TX_RX_Endian_1234);
while (Length) {
#define MAX_READ_FRAME_SIZE (64*4*1)
uint32_t single_length;
if (Length >= MAX_READ_FRAME_SIZE) {
single_length = MAX_READ_FRAME_SIZE;
lfs_flash_read_dma_int = true;
IC_W25Qxx_Set_Read_Callback(lfs_flash_read_callback);
IC_W25Qxx_Read_Quad_Output_DMA(Buffer, (flash_Address & 0x3fffffff), single_length>>2);
while(lfs_flash_read_dma_int)
{
// vTaskDelay(1);
}
}
else {
single_length = Length & (~0x03);
if (single_length) {
lfs_flash_read_dma_int = true;
IC_W25Qxx_Set_Read_Callback(lfs_flash_read_callback);
IC_W25Qxx_Read_Quad_Output_DMA(Buffer, (flash_Address & 0x3fffffff), single_length>>2);
while(lfs_flash_read_dma_int)
{
// vTaskDelay(1);
}
Buffer += single_length;
flash_Address += single_length;
Length -= single_length;
}
single_length = Length;
if (single_length) {
uint32_t value;
IC_W25Qxx_Read_Quad_Output((void *)&value, (flash_Address & 0x3fffffff), sizeof(uint32_t)>>2);
memcpy(Buffer, (void *)&value, single_length);
}
break;
}
Buffer += single_length;
flash_Address += single_length;
Length -= single_length;
}
__SPI_DISABLE(spi_flash_handle.SPIx);
__SPI_DATA_FRAME_SIZE(spi_flash_handle.SPIx, SPI_FRAME_SIZE_8BIT);
__SPI_RX_ENDIAN_SET(spi_flash_handle.SPIx, TX_RX_Endian_4321);
#endif
extern_flash_unlock();
}
#if 0
void extern_flash_write(uint8_t *Buffer, uint32_t flash_Address, uint32_t Length)
{
while(extern_flash_lock())
{
vTaskDelay(1);
}
//IC_W25Qxx_PageProgram_Quad((uint8_t *)Buffer, (flash_Address & 0x3fffffff), Length);
IC_W25Qxx_PageProgram((uint8_t *)Buffer, (flash_Address & 0x3fffffff), Length);
extern_flash_unlock();
}
#endif
void extern_flash_write(uint8_t *Buffer, uint32_t flash_Address, uint32_t Length)
{
while(extern_flash_lock())
{
vTaskDelay(1);
}
uint32_t Page_aligned=0;
Page_aligned=256-(flash_Address%256);
if(Length<=Page_aligned)
Page_aligned=Length;
while(1)
{
IC_W25Qxx_PageProgram(Buffer,flash_Address,Page_aligned);
if(Length==Page_aligned)
{
break;
}
else
{
Buffer+=Page_aligned;
flash_Address+=Page_aligned;
Length-=Page_aligned;
if(Length>256)
Page_aligned=256;
else
Page_aligned=Length;
}
vTaskDelay(1);
};
extern_flash_unlock();
}
void extern_flash_erase(uint32_t flash_Address)
{
while(extern_flash_lock())
{
vTaskDelay(1);
}
IC_W25Qxx_EraseSector(flash_Address & 0x3fffffff);
extern_flash_unlock();
}
void extern_flash_erase_ex(uint32_t flash_Address,uint32_t len)
{
while(extern_flash_lock())
{
vTaskDelay(1);
}
for (uint32_t i = 0; i < len; i += 4096)
{
IC_W25Qxx_EraseSector((flash_Address+i) & 0x3fffffff);
vTaskDelay(1);
}
extern_flash_unlock();
}
// configuration of the filesystem is provided by this struct
static const struct lfs_config cfg = {
// block device operations
.read = lfs_custom_flash_read,
.prog = lfs_custom_flash_write,
.erase = lfs_custom_flash_erase,
.sync = lfs_custom_flash_sync,
//thread safe
.lock = lfs_port_lock,
.unlock = lfs_port_unlock,
#if 1
// block device configuration
.read_size = 256,
.prog_size = 256,
.block_size = HAL_FLASH_BLOCK_4K,
.block_count = LFS_FLASH_SIZE/HAL_FLASH_BLOCK_4K, //1M
.block_cycles = 100,
.cache_size = 256,
.lookahead_size = 128,
#endif
#if 0
.read_size = 16,
.prog_size = 16,
.block_size = HAL_FLASH_BLOCK_4K,
.block_count = LFS_FLASH_SIZE/HAL_FLASH_BLOCK_4K, //100K
.cache_size = 16,
.lookahead_size = 16,
.block_cycles = 500,
#endif
};
static int lfs_port_traverse_cb(void *data, lfs_block_t block)
{
return 0;
}
void lfs_custom_init(void)
{
//create semaphroe for littlefs lock
lfs_semaphore = xQueueGenericCreate(( UBaseType_t ) 1,
semSEMAPHORE_QUEUE_ITEM_LENGTH,
queueQUEUE_TYPE_BINARY_SEMAPHORE);
xSemaphoreGive( lfs_semaphore );
int err = lfs_mount(&lfs, &cfg);
// reformat if we can't mount the filesystem
// this should only happen on the first boot
if (err)
{
lfs_format(&lfs, &cfg);
err = lfs_mount(&lfs, &cfg);
printf("lfs mount result:%d\r\n", err);
}
if(lfs_fs_traverse(&lfs, lfs_port_traverse_cb, NULL))
{
printf("lfs traverse fail \r\n");
lfs_format(&lfs, &cfg);
err = lfs_mount(&lfs, &cfg);
}
//printf("lfs fs size %d Byte %d\r\n",lfs_free_size(),lfs_fs_size(&lfs)*4096);
// lfs_larger_test();
}
void lfs_custom_format(void)
{
lfs_format(&lfs, &cfg);
}
void lfs_custom_test(void)
{
lfs_file_t file;
// read current count
uint32_t boot_count = 0;
lfs_file_open(&lfs, &file, "boot_count", LFS_O_RDWR | LFS_O_CREAT);
lfs_file_read(&lfs, &file, &boot_count, sizeof(boot_count));
printf("boot_count %d\r\n",boot_count);
// update boot count
boot_count += 1;
lfs_file_rewind(&lfs, &file);
lfs_file_write(&lfs, &file, &boot_count, sizeof(boot_count));
//printf("lfs fs size %d Byte %d\r\n",lfs_free_size(),lfs_fs_size(&lfs)*4096);
// remember the storage is not updated until the file is closed successfully
lfs_file_close(&lfs, &file);
}
void lfs_custom_test_write_file(void)
{
lfs_file_t file;
// read current count
uint8_t str[] = "abcdefj12321321asdfkjlfalsjdfksajflqwpojdkfjqpwjklsdflq;wfqwefqweqw";
lfs_file_open(&lfs, &file, "img", LFS_O_RDWR | LFS_O_CREAT);
lfs_file_write(&lfs, &file, str, sizeof(str));
//printf("lfs fs size %d Byte %d\r\n",lfs_free_size(),lfs_fs_size(&lfs)*4096);
// remember the storage is not updated until the file is closed successfully
lfs_file_close(&lfs, &file);
}
uint8_t testbuff[256];
void lfs_custom_test_read_file(void)
{
lfs_file_t file;
lfs_file_open(&lfs, &file, "img", LFS_O_RDONLY);
lfs_file_read(&lfs, &file, testbuff, 256);
printf("file: %s\r\n",testbuff);
//printf("lfs fs size %d Byte %d\r\n",lfs_free_size(),lfs_fs_size(&lfs)*4096);
// remember the storage is not updated until the file is closed successfully
lfs_file_close(&lfs, &file);
}

View File

@ -0,0 +1,53 @@
/**
*********************************************************************************************************
* @file lfs_port.h
* @brief
* @details
* @author tang zheng
* @date 2022-08-27
* @version v0.1
* *********************************************************************************************************
*/
#include "lfs.h"
#define LFS_EXT_FLASH 1
#ifdef LFS_EXT_FLASH
#include "IC_W25Qxx.h"
#define LFS_FLASH_START_ADRRESS 0xFC0000 //#define LFS_FLASH_START_ADRRESS 0xF80000
#define LFS_FLASH_SIZE 0x040000
#define HAL_FLASH_BLOCK_4K 0x1000
#else
#define FR5090_BUS_START_ADDRESS 0x08000000
#define LFS_FLASH_START_ADRRESS FR5090_BUS_START_ADDRESS + 0x40000
#define LFS_FLASH_SIZE 0x20000
#define HAL_FLASH_BLOCK_4K 0x1000
#endif
extern lfs_t lfs;
void lfs_custom_init(void);
int32_t lfs_free_size(void);
void lfs_custom_test(void);
void lfs_custom_test_write_file(void);
void lfs_custom_test_read_file(void);
void extern_flash_read(uint8_t *Buffer, uint32_t flash_Address, uint32_t Length);
void extern_flash_write(uint8_t *Buffer, uint32_t flash_Address, uint32_t Length);
void extern_flash_erase(uint32_t flash_Address);
void extern_flash_erase_ex(uint32_t flash_Address,uint32_t len);

View File

@ -0,0 +1,139 @@
/*******************************************************************************
* Size: 128 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_128px.c --bpp 4 --size 128 -r 0x30-0x39 -r 0x2d-0x2f -r 0x3a -r 0x25 -r 0x47 -r 0x4F
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_128PX
#define NUMBER_HARMONYOS_BPP4_128PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_128PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint16_t unicode_list_0[] = {
0x0, 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe,
0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x22,
0x2a
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 43, .glyph_id_start = 1,
.unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 17, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4,
4, 16,
4, 17,
16, 2,
16, 3,
17, 3,
17, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-37, -119, -77, -31, -31, 1, 15, -36,
-30
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 9,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_128px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_128px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 39,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_128px = {
#else
lv_font_t Number_HarmonyOS_bpp4_128px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 98, /*The maximum line height required by the font*/
.base_line = 2, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -10,
.underline_thickness = 6,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_128PX*/

View File

@ -0,0 +1,996 @@
/*******************************************************************************
* Size: 12 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_12px.c --bpp 4 --size 12 -r 0x20-0x7f
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_12PX
#define NUMBER_HARMONYOS_BPP4_12PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_12PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+0020 " " */
/* U+0021 "!" */
0x2f, 0x12, 0xf0, 0x1f, 0x1, 0xf0, 0x1f, 0x0,
0xf0, 0xe, 0x0, 0x20, 0x1a, 0x2, 0xe1,
/* U+0022 "\"" */
0x25, 0x16, 0x5b, 0x3d, 0x5b, 0x3d, 0x4b, 0x3c,
/* U+0023 "#" */
0x0, 0x1f, 0x2, 0xf0, 0x0, 0x4d, 0x5, 0xc0,
0x0, 0x7a, 0x8, 0xa0, 0xf, 0xff, 0xff, 0xfc,
0x3, 0xe6, 0x3f, 0x52, 0x3, 0xe0, 0x4e, 0x0,
0xdf, 0xff, 0xff, 0xf0, 0x2b, 0x93, 0xc8, 0x30,
0xd, 0x40, 0xe3, 0x0, 0xf, 0x11, 0xf0, 0x0,
/* U+0024 "$" */
0x0, 0x7, 0x10, 0x0, 0x0, 0xf2, 0x0, 0x2,
0xaf, 0xb3, 0x1, 0xec, 0xfd, 0xf1, 0x5e, 0xf,
0x2b, 0x35, 0xf1, 0xf2, 0x0, 0xc, 0xef, 0x30,
0x0, 0x7, 0xff, 0x80, 0x0, 0xf, 0x7f, 0x66,
0x70, 0xf2, 0xb8, 0x5f, 0x5f, 0x5e, 0x50, 0x8f,
0xff, 0xa0, 0x0, 0x1f, 0x30, 0x0, 0x0, 0xf2,
0x0,
/* U+0025 "%" */
0x1c, 0xf6, 0x0, 0x8c, 0x0, 0x9a, 0x4f, 0x11,
0xf4, 0x0, 0xb5, 0xd, 0x38, 0xb0, 0x0, 0xa8,
0x1f, 0x3f, 0x30, 0x0, 0x2e, 0xf8, 0x9b, 0x0,
0x0, 0x0, 0x12, 0xf2, 0x0, 0x0, 0x0, 0xa,
0xa1, 0xbe, 0x80, 0x0, 0x2f, 0x29, 0xb3, 0xe4,
0x0, 0xb9, 0x9, 0xa1, 0xd4, 0x3, 0xf1, 0x1,
0xce, 0x90,
/* U+0026 "&" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xef, 0x70,
0x0, 0x3, 0xf6, 0x6f, 0x30, 0x0, 0x5f, 0x0,
0xf4, 0x0, 0x1, 0xf9, 0xcb, 0x0, 0x0, 0x1c,
0xfa, 0x4, 0x90, 0xd, 0xb8, 0xe2, 0x8b, 0x6,
0xf0, 0xa, 0xdd, 0x60, 0x7e, 0x0, 0xd, 0xf1,
0x3, 0xf7, 0x25, 0xff, 0x90, 0x6, 0xdf, 0xd5,
0x3f, 0x60,
/* U+0027 "'" */
0x25, 0x5b, 0x5b, 0x4b,
/* U+0028 "(" */
0x0, 0x3, 0x0, 0x9, 0x90, 0x3, 0xf1, 0x0,
0xa9, 0x0, 0xe, 0x50, 0x1, 0xf2, 0x0, 0x3f,
0x10, 0x2, 0xf1, 0x0, 0x1f, 0x30, 0x0, 0xd6,
0x0, 0x9, 0xb0, 0x0, 0x2f, 0x20, 0x0, 0x7b,
0x0,
/* U+0029 ")" */
0x21, 0x0, 0x5d, 0x0, 0xc, 0x70, 0x5, 0xe0,
0x1, 0xf3, 0x0, 0xe5, 0x0, 0xd7, 0x0, 0xd6,
0x0, 0xe5, 0x1, 0xf2, 0x6, 0xd0, 0xd, 0x60,
0x7b, 0x0,
/* U+002A "*" */
0x0, 0xd1, 0x6, 0xcd, 0x9a, 0x9, 0xfc, 0x6,
0xcd, 0xaa, 0x0, 0xd1, 0x10, 0x0, 0x0,
/* U+002B "+" */
0x0, 0x5, 0x0, 0x0, 0x1, 0xf0, 0x0, 0x0,
0x1f, 0x0, 0x6, 0xff, 0xff, 0xf6, 0x13, 0x4f,
0x33, 0x10, 0x1, 0xf0, 0x0, 0x0, 0x1f, 0x0,
0x0,
/* U+002C "," */
0xa, 0x21, 0xe6, 0x8, 0x43, 0x90, 0x0, 0x0,
/* U+002D "-" */
0x4f, 0xff, 0xf2, 0x2, 0x22, 0x20,
/* U+002E "." */
0x1a, 0x2, 0xe1,
/* U+002F "/" */
0x0, 0xb, 0x80, 0x1, 0xf2, 0x0, 0x5d, 0x0,
0xb, 0x80, 0x0, 0xf2, 0x0, 0x5d, 0x0, 0xa,
0x80, 0x0, 0xf3, 0x0, 0x5d, 0x0, 0xa, 0x80,
0x0,
/* U+0030 "0" */
0x2, 0xcf, 0xc1, 0x0, 0xcc, 0x5d, 0xb0, 0x2f,
0x30, 0x4f, 0x25, 0xf0, 0x0, 0xf5, 0x6f, 0x0,
0xf, 0x66, 0xf0, 0x0, 0xf6, 0x5f, 0x0, 0xf,
0x52, 0xf3, 0x4, 0xf2, 0xc, 0xc5, 0xdc, 0x0,
0x2c, 0xfc, 0x10,
/* U+0031 "1" */
0x3, 0xdb, 0x7f, 0xeb, 0xb4, 0x9b, 0x0, 0x9b,
0x0, 0x9b, 0x0, 0x9b, 0x0, 0x9b, 0x0, 0x9b,
0x0, 0x9b, 0x0, 0x9b,
/* U+0032 "2" */
0x3, 0xcf, 0xc2, 0x1, 0xea, 0x5d, 0xc0, 0x2b,
0x0, 0x5f, 0x0, 0x0, 0x6, 0xf0, 0x0, 0x0,
0xda, 0x0, 0x0, 0x8f, 0x20, 0x0, 0x5f, 0x50,
0x0, 0x2f, 0x80, 0x0, 0x1d, 0xd4, 0x44, 0x16,
0xff, 0xff, 0xf5,
/* U+0033 "3" */
0x4, 0xdf, 0xc2, 0x1, 0xf9, 0x5d, 0xc0, 0x17,
0x0, 0x6f, 0x0, 0x0, 0x1c, 0xc0, 0x0, 0x7f,
0xf3, 0x0, 0x1, 0x4c, 0xe0, 0x0, 0x0, 0x2f,
0x42, 0x90, 0x2, 0xf4, 0x2f, 0x94, 0xbe, 0x0,
0x4d, 0xfc, 0x30,
/* U+0034 "4" */
0x0, 0x9, 0xc0, 0x0, 0x1, 0xf5, 0x0, 0x0,
0x7e, 0x0, 0x0, 0xe, 0x70, 0x0, 0x5, 0xf1,
0x97, 0x0, 0xc9, 0xb, 0x90, 0x3f, 0x20, 0xb9,
0x8, 0xff, 0xff, 0xfc, 0x13, 0x33, 0xca, 0x20,
0x0, 0xb, 0x90,
/* U+0035 "5" */
0x7, 0xff, 0xfe, 0x0, 0x9b, 0x33, 0x30, 0xa,
0x90, 0x0, 0x0, 0xc7, 0x0, 0x0, 0xe, 0xef,
0xd3, 0x0, 0xe8, 0x4b, 0xe0, 0x0, 0x0, 0x2f,
0x30, 0x30, 0x2, 0xf3, 0xf, 0x94, 0xce, 0x0,
0x4d, 0xfc, 0x20,
/* U+0036 "6" */
0x0, 0x8, 0xd0, 0x0, 0x2, 0xf5, 0x0, 0x0,
0xad, 0x0, 0x0, 0x3f, 0x50, 0x0, 0xb, 0xff,
0xe5, 0x2, 0xfa, 0x49, 0xf2, 0x4f, 0x10, 0xf,
0x64, 0xf1, 0x0, 0xf6, 0xe, 0xb5, 0xaf, 0x10,
0x2c, 0xfd, 0x40,
/* U+0037 "7" */
0x5f, 0xff, 0xff, 0x41, 0x33, 0x37, 0xf1, 0x0,
0x0, 0xab, 0x0, 0x0, 0xf, 0x50, 0x0, 0x5,
0xf0, 0x0, 0x0, 0xba, 0x0, 0x0, 0x1f, 0x40,
0x0, 0x7, 0xe0, 0x0, 0x0, 0xc9, 0x0, 0x0,
0x2f, 0x40, 0x0,
/* U+0038 "8" */
0x3, 0xcf, 0xc2, 0x0, 0xeb, 0x4b, 0xd0, 0x1f,
0x30, 0x3f, 0x0, 0xe9, 0x19, 0xd0, 0x4, 0xff,
0xf4, 0x1, 0xea, 0x4a, 0xe0, 0x5f, 0x0, 0xf,
0x56, 0xf0, 0x0, 0xf5, 0x2f, 0xa4, 0xaf, 0x10,
0x4d, 0xfd, 0x40,
/* U+0039 "9" */
0x4, 0xdf, 0xc2, 0x1, 0xfa, 0x5c, 0xd0, 0x6f,
0x0, 0x2f, 0x37, 0xe0, 0x1, 0xf4, 0x3f, 0x71,
0x9f, 0x10, 0x8f, 0xff, 0xb0, 0x0, 0x16, 0xf2,
0x0, 0x0, 0xca, 0x0, 0x0, 0x5f, 0x10, 0x0,
0xd, 0x80, 0x0,
/* U+003A ":" */
0x1e, 0x30, 0xa2, 0x0, 0x0, 0x0, 0x0, 0x0,
0xa1, 0x1e, 0x30,
/* U+003B ";" */
0xd, 0x40, 0x93, 0x0, 0x0, 0x0, 0x0, 0x0,
0xa3, 0xe, 0x80, 0x75, 0x2a, 0x0, 0x0,
/* U+003C "<" */
0x0, 0x0, 0x29, 0x50, 0x3, 0xaf, 0xb2, 0x2c,
0xfa, 0x30, 0x5, 0xfc, 0x30, 0x0, 0x3, 0xaf,
0xb4, 0x0, 0x0, 0x29, 0xf5, 0x0, 0x0, 0x1,
0x20,
/* U+003D "=" */
0x6f, 0xff, 0xff, 0x61, 0x33, 0x33, 0x31, 0x0,
0x0, 0x0, 0x6, 0xff, 0xff, 0xf6, 0x13, 0x33,
0x33, 0x10,
/* U+003E ">" */
0x59, 0x20, 0x0, 0x2, 0xcf, 0xa3, 0x0, 0x0,
0x3a, 0xfb, 0x20, 0x0, 0x3c, 0xf5, 0x4, 0xbf,
0xa3, 0x6, 0xf9, 0x20, 0x0, 0x21, 0x0, 0x0,
0x0,
/* U+003F "?" */
0x1, 0xbf, 0xe5, 0x0, 0xcc, 0x5a, 0xf2, 0x6,
0x10, 0x2f, 0x30, 0x0, 0x9, 0xd0, 0x0, 0x8,
0xd1, 0x0, 0x1, 0xf2, 0x0, 0x0, 0x1f, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x10, 0x0,
0x1, 0xe3, 0x0,
/* U+0040 "@" */
0x0, 0x4, 0xbd, 0xec, 0x60, 0x0, 0x0, 0x8e,
0x73, 0x36, 0xdb, 0x0, 0x6, 0xd1, 0x0, 0x0,
0xc, 0x80, 0xe, 0x30, 0x9f, 0xc9, 0x82, 0xe0,
0x3d, 0x6, 0xe4, 0x6f, 0x80, 0xd3, 0x5a, 0xb,
0x80, 0xb, 0x80, 0xb5, 0x6a, 0xb, 0x70, 0xa,
0x80, 0xc4, 0x4c, 0x7, 0xc1, 0x2e, 0xa1, 0xf1,
0xf, 0x20, 0xbf, 0xe5, 0xef, 0x80, 0x8, 0xb0,
0x1, 0x0, 0x1, 0x0, 0x0, 0xcc, 0x40, 0x4,
0x70, 0x0, 0x0, 0x8, 0xef, 0xfe, 0x70, 0x0,
0x0, 0x0, 0x1, 0x10, 0x0, 0x0,
/* U+0041 "A" */
0x0, 0xb, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x10,
0x0, 0x0, 0x5c, 0xc7, 0x0, 0x0, 0xb, 0x77,
0xd0, 0x0, 0x1, 0xf2, 0x2f, 0x20, 0x0, 0x6d,
0x0, 0xc8, 0x0, 0xb, 0xff, 0xff, 0xd0, 0x1,
0xf5, 0x33, 0x4f, 0x30, 0x6d, 0x0, 0x0, 0xc9,
0xc, 0x80, 0x0, 0x7, 0xe0,
/* U+0042 "B" */
0xff, 0xfe, 0xa1, 0xf, 0x73, 0x5d, 0xb0, 0xf4,
0x0, 0x6f, 0xf, 0x40, 0x1c, 0xc0, 0xff, 0xff,
0xf4, 0xf, 0x62, 0x3a, 0xf2, 0xf4, 0x0, 0xf,
0x6f, 0x40, 0x0, 0xf6, 0xf7, 0x34, 0xaf, 0x2f,
0xff, 0xfc, 0x40,
/* U+0043 "C" */
0x0, 0x4c, 0xfd, 0x60, 0x5, 0xf9, 0x58, 0xf5,
0xe, 0x90, 0x0, 0x63, 0x4f, 0x20, 0x0, 0x0,
0x6f, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x0,
0x4f, 0x20, 0x0, 0x0, 0xe, 0x90, 0x0, 0x62,
0x5, 0xf9, 0x58, 0xf5, 0x0, 0x4c, 0xfd, 0x60,
/* U+0044 "D" */
0xff, 0xfe, 0x81, 0x0, 0xf7, 0x46, 0xed, 0x0,
0xf4, 0x0, 0x1e, 0x80, 0xf4, 0x0, 0x7, 0xe0,
0xf4, 0x0, 0x5, 0xf0, 0xf4, 0x0, 0x5, 0xf0,
0xf4, 0x0, 0x7, 0xe0, 0xf4, 0x0, 0x1e, 0x80,
0xf7, 0x46, 0xed, 0x0, 0xff, 0xfe, 0x91, 0x0,
/* U+0045 "E" */
0xff, 0xff, 0xf8, 0xf7, 0x44, 0x42, 0xf4, 0x0,
0x0, 0xf5, 0x0, 0x0, 0xff, 0xff, 0xf1, 0xf7,
0x33, 0x30, 0xf4, 0x0, 0x0, 0xf4, 0x0, 0x0,
0xf7, 0x44, 0x42, 0xff, 0xff, 0xfa,
/* U+0046 "F" */
0xff, 0xff, 0xf8, 0xf7, 0x44, 0x42, 0xf4, 0x0,
0x0, 0xf4, 0x0, 0x0, 0xf5, 0x0, 0x0, 0xff,
0xff, 0xf1, 0xf7, 0x33, 0x30, 0xf4, 0x0, 0x0,
0xf4, 0x0, 0x0, 0xf4, 0x0, 0x0,
/* U+0047 "G" */
0x0, 0x3c, 0xfe, 0x80, 0x4, 0xfa, 0x57, 0xf9,
0xe, 0x90, 0x0, 0x44, 0x3f, 0x20, 0x0, 0x0,
0x6f, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x2f, 0xff,
0x3f, 0x20, 0x3, 0x7f, 0xe, 0xa0, 0x0, 0x5f,
0x4, 0xfb, 0x55, 0xcd, 0x0, 0x3b, 0xfe, 0xa1,
/* U+0048 "H" */
0xf4, 0x0, 0x3, 0xf0, 0xf4, 0x0, 0x3, 0xf0,
0xf4, 0x0, 0x3, 0xf0, 0xf5, 0x0, 0x4, 0xf0,
0xff, 0xff, 0xff, 0xf0, 0xf7, 0x33, 0x36, 0xf0,
0xf4, 0x0, 0x3, 0xf0, 0xf4, 0x0, 0x3, 0xf0,
0xf4, 0x0, 0x3, 0xf0, 0xf4, 0x0, 0x3, 0xf0,
/* U+0049 "I" */
0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
0xf4, 0xf4,
/* U+004A "J" */
0x0, 0x7, 0xd0, 0x0, 0x7d, 0x0, 0x7, 0xd0,
0x0, 0x7d, 0x0, 0x7, 0xd0, 0x0, 0x7d, 0x0,
0x7, 0xd2, 0x0, 0x8b, 0xda, 0x5e, 0x73, 0xdf,
0xa0,
/* U+004B "K" */
0xf4, 0x0, 0x1e, 0x90, 0xf4, 0x0, 0xcc, 0x0,
0xf4, 0xa, 0xd1, 0x0, 0xf4, 0x6f, 0x20, 0x0,
0xf8, 0xfc, 0x0, 0x0, 0xff, 0xaf, 0x60, 0x0,
0xfa, 0x9, 0xe1, 0x0, 0xf4, 0x0, 0xeb, 0x0,
0xf4, 0x0, 0x4f, 0x50, 0xf4, 0x0, 0xa, 0xe1,
/* U+004C "L" */
0xf4, 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf4, 0x0,
0x0, 0xf4, 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf4,
0x0, 0x0, 0xf4, 0x0, 0x0, 0xf4, 0x0, 0x0,
0xf7, 0x44, 0x42, 0xff, 0xff, 0xf8,
/* U+004D "M" */
0xf5, 0x0, 0x0, 0xd, 0x6f, 0xe0, 0x0, 0x6,
0xf6, 0xff, 0x70, 0x0, 0xef, 0x6f, 0x9f, 0x10,
0x8c, 0xd6, 0xf3, 0xc9, 0x1f, 0x3d, 0x6f, 0x33,
0xfb, 0xa0, 0xd6, 0xf3, 0xa, 0xf1, 0xd, 0x6f,
0x30, 0x14, 0x0, 0xd6, 0xf3, 0x0, 0x0, 0xd,
0x6f, 0x30, 0x0, 0x0, 0xd6,
/* U+004E "N" */
0xf6, 0x0, 0x4, 0xff, 0xe1, 0x0, 0x4f, 0xfe,
0xa0, 0x4, 0xff, 0x6f, 0x40, 0x4f, 0xf3, 0x9d,
0x4, 0xff, 0x30, 0xe8, 0x4f, 0xf3, 0x5, 0xf6,
0xff, 0x30, 0xa, 0xff, 0xf3, 0x0, 0x1f, 0xff,
0x30, 0x0, 0x6f,
/* U+004F "O" */
0x0, 0x4c, 0xfd, 0x70, 0x0, 0x5f, 0x95, 0x7f,
0x90, 0xe, 0x90, 0x0, 0x5f, 0x24, 0xf2, 0x0,
0x0, 0xe7, 0x6f, 0x0, 0x0, 0xb, 0x96, 0xf0,
0x0, 0x0, 0xb9, 0x4f, 0x20, 0x0, 0xe, 0x70,
0xe9, 0x0, 0x5, 0xf2, 0x5, 0xf9, 0x57, 0xf8,
0x0, 0x5, 0xcf, 0xd7, 0x0,
/* U+0050 "P" */
0xff, 0xfe, 0x80, 0xf, 0x73, 0x6f, 0x90, 0xf4,
0x0, 0x7e, 0xf, 0x40, 0x6, 0xf0, 0xf4, 0x3,
0xdb, 0xf, 0xff, 0xfc, 0x10, 0xf7, 0x31, 0x0,
0xf, 0x40, 0x0, 0x0, 0xf4, 0x0, 0x0, 0xf,
0x40, 0x0, 0x0,
/* U+0051 "Q" */
0x0, 0x4c, 0xfd, 0x70, 0x0, 0x5, 0xf9, 0x57,
0xf8, 0x0, 0xe, 0x90, 0x0, 0x5f, 0x20, 0x4f,
0x20, 0x0, 0xe, 0x70, 0x6f, 0x0, 0x0, 0xb,
0x90, 0x6f, 0x0, 0x0, 0xb, 0x90, 0x4f, 0x20,
0x0, 0xe, 0x70, 0xe, 0x90, 0x0, 0x5f, 0x20,
0x5, 0xf9, 0x57, 0xf9, 0x0, 0x0, 0x5c, 0xff,
0xd0, 0x0, 0x0, 0x0, 0x3, 0xeb, 0x0, 0x0,
0x0, 0x0, 0x2d, 0xc1,
/* U+0052 "R" */
0xff, 0xfe, 0x80, 0xf, 0x73, 0x6f, 0x90, 0xf4,
0x0, 0x7e, 0xf, 0x40, 0x6, 0xf0, 0xf4, 0x3,
0xdb, 0xf, 0xff, 0xfc, 0x10, 0xf7, 0x3d, 0x90,
0xf, 0x40, 0x4f, 0x40, 0xf4, 0x0, 0xad, 0xf,
0x40, 0x1, 0xe8,
/* U+0053 "S" */
0x5, 0xdf, 0xd6, 0x2, 0xf9, 0x48, 0xf4, 0x6f,
0x0, 0x6, 0x15, 0xf6, 0x0, 0x0, 0x9, 0xfe,
0x81, 0x0, 0x2, 0x8e, 0xe2, 0x0, 0x0, 0x1e,
0x98, 0x80, 0x0, 0xc9, 0x5f, 0x95, 0x7f, 0x50,
0x5d, 0xfd, 0x60,
/* U+0054 "T" */
0xef, 0xff, 0xff, 0xd3, 0x46, 0xf5, 0x43, 0x0,
0x2f, 0x20, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2f,
0x20, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2f, 0x20,
0x0, 0x2, 0xf2, 0x0, 0x0, 0x2f, 0x20, 0x0,
0x2, 0xf2, 0x0,
/* U+0055 "U" */
0x1f, 0x30, 0x0, 0x5f, 0x1f, 0x30, 0x0, 0x5f,
0x1f, 0x30, 0x0, 0x5f, 0x1f, 0x30, 0x0, 0x5f,
0x1f, 0x30, 0x0, 0x5f, 0x1f, 0x30, 0x0, 0x5f,
0xf, 0x40, 0x0, 0x6e, 0xd, 0x90, 0x0, 0xbb,
0x6, 0xf8, 0x59, 0xf4, 0x0, 0x6d, 0xfd, 0x50,
/* U+0056 "V" */
0xcb, 0x0, 0x0, 0x7d, 0x6, 0xf0, 0x0, 0xc,
0x80, 0x1f, 0x50, 0x1, 0xf3, 0x0, 0xba, 0x0,
0x6d, 0x0, 0x5, 0xf0, 0xb, 0x80, 0x0, 0xf,
0x50, 0xf3, 0x0, 0x0, 0xaa, 0x5d, 0x0, 0x0,
0x4, 0xfb, 0x80, 0x0, 0x0, 0xe, 0xf3, 0x0,
0x0, 0x0, 0x9d, 0x0, 0x0,
/* U+0057 "W" */
0xc9, 0x0, 0xb, 0x90, 0x0, 0xb8, 0x7d, 0x0,
0xf, 0xd0, 0x0, 0xf4, 0x3f, 0x10, 0x3f, 0xf2,
0x3, 0xf0, 0xe, 0x60, 0x7a, 0xd6, 0x7, 0xb0,
0xa, 0xa0, 0xb6, 0x9a, 0xb, 0x70, 0x5, 0xe0,
0xf2, 0x4f, 0xf, 0x20, 0x1, 0xf7, 0xd0, 0xf,
0x7e, 0x0, 0x0, 0xce, 0x90, 0xb, 0xea, 0x0,
0x0, 0x8f, 0x50, 0x7, 0xf5, 0x0, 0x0, 0x3f,
0x10, 0x3, 0xf1, 0x0,
/* U+0058 "X" */
0x7f, 0x20, 0x0, 0xd9, 0xd, 0xb0, 0x8, 0xe0,
0x3, 0xf5, 0x2f, 0x50, 0x0, 0x9e, 0xcb, 0x0,
0x0, 0xe, 0xf1, 0x0, 0x0, 0x1f, 0xf2, 0x0,
0x0, 0xac, 0xbc, 0x0, 0x4, 0xf2, 0x2f, 0x60,
0xe, 0x80, 0x8, 0xf1, 0x8e, 0x0, 0x0, 0xda,
/* U+0059 "Y" */
0xad, 0x0, 0x2, 0xf4, 0x2f, 0x60, 0x9, 0xc0,
0x9, 0xe0, 0x2f, 0x40, 0x1, 0xf8, 0xac, 0x0,
0x0, 0x7f, 0xf3, 0x0, 0x0, 0xe, 0xb0, 0x0,
0x0, 0xc, 0x80, 0x0, 0x0, 0xc, 0x80, 0x0,
0x0, 0xc, 0x80, 0x0, 0x0, 0xc, 0x80, 0x0,
/* U+005A "Z" */
0x5f, 0xff, 0xff, 0x81, 0x44, 0x49, 0xf2, 0x0,
0x0, 0xe8, 0x0, 0x0, 0x7e, 0x10, 0x0, 0x1f,
0x60, 0x0, 0x9, 0xd0, 0x0, 0x2, 0xf4, 0x0,
0x0, 0xbb, 0x0, 0x0, 0x4f, 0x74, 0x44, 0x3b,
0xff, 0xff, 0xfb,
/* U+005B "[" */
0x0, 0x0, 0xff, 0xf0, 0xf6, 0x30, 0xf3, 0x0,
0xf3, 0x0, 0xf3, 0x0, 0xf3, 0x0, 0xf3, 0x0,
0xf3, 0x0, 0xf3, 0x0, 0xf3, 0x0, 0xf4, 0x0,
0xff, 0xf0, 0x33, 0x30,
/* U+005C "\\" */
0xa8, 0x0, 0x5, 0xd0, 0x0, 0xf, 0x30, 0x0,
0xa8, 0x0, 0x5, 0xd0, 0x0, 0xf, 0x20, 0x0,
0xb8, 0x0, 0x5, 0xd0, 0x0, 0x1f, 0x20, 0x0,
0xb8,
/* U+005D "]" */
0x0, 0x0, 0xcf, 0xf4, 0x23, 0xf4, 0x0, 0xf4,
0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4,
0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4, 0x0, 0xf4,
0xcf, 0xf4, 0x23, 0x30,
/* U+005E "^" */
0x0, 0xdb, 0x0, 0x3, 0xff, 0x10, 0xa, 0x9a,
0x80, 0x1f, 0x24, 0xe0, 0x7c, 0x0, 0xd5,
/* U+005F "_" */
0xff, 0xff, 0xf3, 0x22, 0x22, 0x20,
/* U+0060 "`" */
0xe, 0x40, 0x4, 0xc0,
/* U+0061 "a" */
0x4, 0xdf, 0xa1, 0xe, 0x73, 0xd9, 0x1, 0x0,
0x7c, 0x6, 0xcd, 0xdd, 0x4f, 0x42, 0x8d, 0x5e,
0x10, 0xbd, 0x9, 0xed, 0x9d,
/* U+0062 "b" */
0x2f, 0x10, 0x0, 0x2, 0xf1, 0x0, 0x0, 0x2f,
0x10, 0x0, 0x2, 0xf6, 0xee, 0x70, 0x2f, 0xd5,
0x7f, 0x52, 0xf4, 0x0, 0x9b, 0x2f, 0x20, 0x7,
0xd2, 0xf4, 0x0, 0x9b, 0x2f, 0xd4, 0x6f, 0x52,
0xf5, 0xee, 0x80,
/* U+0063 "c" */
0x2, 0xcf, 0xc2, 0xe, 0xa4, 0xa8, 0x5f, 0x0,
0x0, 0x7d, 0x0, 0x0, 0x5f, 0x0, 0x0, 0xe,
0xa4, 0xa8, 0x3, 0xcf, 0xc2,
/* U+0064 "d" */
0x0, 0x0, 0xb, 0x70, 0x0, 0x0, 0xb7, 0x0,
0x0, 0xb, 0x70, 0x3d, 0xf9, 0xb7, 0x1e, 0xa4,
0xaf, 0x75, 0xf0, 0x0, 0xe7, 0x7d, 0x0, 0xc,
0x75, 0xe0, 0x0, 0xe7, 0x1e, 0x81, 0x8f, 0x70,
0x3d, 0xfa, 0xa7,
/* U+0065 "e" */
0x3, 0xcf, 0xc2, 0x0, 0xea, 0x3b, 0xc0, 0x5f,
0x0, 0x2f, 0x27, 0xfe, 0xee, 0xf3, 0x5e, 0x11,
0x11, 0x0, 0xe9, 0x37, 0xa0, 0x3, 0xcf, 0xd4,
0x0,
/* U+0066 "f" */
0x0, 0x0, 0x0, 0x1c, 0xf7, 0x9, 0xc4, 0x20,
0xb8, 0x0, 0xdf, 0xff, 0x22, 0xc9, 0x20, 0xb,
0x80, 0x0, 0xb8, 0x0, 0xb, 0x80, 0x0, 0xb8,
0x0, 0xb, 0x80, 0x0,
/* U+0067 "g" */
0x3, 0xdf, 0x9a, 0x71, 0xea, 0x4a, 0xf7, 0x5f,
0x0, 0xe, 0x77, 0xd0, 0x0, 0xc7, 0x5e, 0x0,
0xe, 0x71, 0xea, 0x49, 0xf7, 0x3, 0xdf, 0x9c,
0x70, 0x10, 0x0, 0xe5, 0x1f, 0x74, 0x9f, 0x10,
0x5d, 0xfc, 0x30,
/* U+0068 "h" */
0x2f, 0x10, 0x0, 0x2, 0xf1, 0x0, 0x0, 0x2f,
0x10, 0x0, 0x2, 0xf7, 0xee, 0x50, 0x2f, 0xd5,
0x9f, 0x12, 0xf3, 0x0, 0xf3, 0x2f, 0x10, 0xf,
0x42, 0xf1, 0x0, 0xf4, 0x2f, 0x10, 0xf, 0x42,
0xf1, 0x0, 0xf4,
/* U+0069 "i" */
0x2e, 0x21, 0xa1, 0x0, 0x2, 0xf1, 0x2f, 0x12,
0xf1, 0x2f, 0x12, 0xf1, 0x2f, 0x12, 0xf1,
/* U+006A "j" */
0x0, 0x2e, 0x10, 0x1, 0xa0, 0x0, 0x0, 0x0,
0x2, 0xf1, 0x0, 0x2f, 0x10, 0x2, 0xf1, 0x0,
0x2f, 0x10, 0x2, 0xf1, 0x0, 0x2f, 0x10, 0x2,
0xf1, 0x0, 0x2f, 0x10, 0x59, 0xe0, 0x4e, 0xe4,
0x0,
/* U+006B "k" */
0x2f, 0x10, 0x0, 0x2, 0xf1, 0x0, 0x0, 0x2f,
0x10, 0x0, 0x2, 0xf1, 0x9, 0xd0, 0x2f, 0x15,
0xe2, 0x2, 0xf4, 0xf4, 0x0, 0x2f, 0xef, 0x50,
0x2, 0xfa, 0x8e, 0x10, 0x2f, 0x20, 0xd9, 0x2,
0xf1, 0x4, 0xf3,
/* U+006C "l" */
0x2f, 0x12, 0xf1, 0x2f, 0x12, 0xf1, 0x2f, 0x12,
0xf1, 0x2f, 0x12, 0xf1, 0x2f, 0x12, 0xf1,
/* U+006D "m" */
0x2f, 0x7f, 0xd3, 0xaf, 0xa0, 0x2f, 0xa2, 0xcf,
0x63, 0xf5, 0x2f, 0x20, 0x7e, 0x0, 0xb8, 0x2f,
0x10, 0x6d, 0x0, 0xa8, 0x2f, 0x10, 0x6d, 0x0,
0xa8, 0x2f, 0x10, 0x6d, 0x0, 0xa8, 0x2f, 0x10,
0x6d, 0x0, 0xa8,
/* U+006E "n" */
0x2f, 0x6e, 0xe5, 0x2, 0xfb, 0x27, 0xf1, 0x2f,
0x30, 0xf, 0x32, 0xf1, 0x0, 0xf4, 0x2f, 0x10,
0xf, 0x42, 0xf1, 0x0, 0xf4, 0x2f, 0x10, 0xf,
0x40,
/* U+006F "o" */
0x2, 0xbf, 0xc3, 0x0, 0xeb, 0x49, 0xf1, 0x5f,
0x0, 0xe, 0x77, 0xd0, 0x0, 0xb9, 0x5f, 0x0,
0xd, 0x70, 0xea, 0x49, 0xf1, 0x2, 0xcf, 0xc3,
0x0,
/* U+0070 "p" */
0x2f, 0x6e, 0xe7, 0x2, 0xfc, 0x24, 0xf5, 0x2f,
0x40, 0x9, 0xb2, 0xf2, 0x0, 0x7d, 0x2f, 0x40,
0x9, 0xb2, 0xfd, 0x56, 0xf5, 0x2f, 0x6e, 0xe8,
0x2, 0xf1, 0x0, 0x0, 0x2f, 0x10, 0x0, 0x2,
0xf1, 0x0, 0x0,
/* U+0071 "q" */
0x3, 0xdf, 0x9a, 0x71, 0xea, 0x4a, 0xf7, 0x5f,
0x0, 0xe, 0x77, 0xd0, 0x0, 0xc7, 0x5f, 0x0,
0xe, 0x71, 0xea, 0x4a, 0xf7, 0x3, 0xdf, 0x9c,
0x70, 0x0, 0x0, 0xb7, 0x0, 0x0, 0xb, 0x70,
0x0, 0x0, 0xb7,
/* U+0072 "r" */
0x2f, 0x7f, 0x82, 0xfb, 0x21, 0x2f, 0x30, 0x2,
0xf1, 0x0, 0x2f, 0x10, 0x2, 0xf1, 0x0, 0x2f,
0x10, 0x0,
/* U+0073 "s" */
0x8, 0xee, 0x60, 0x5e, 0x46, 0xd0, 0x6f, 0x40,
0x0, 0x8, 0xee, 0x60, 0x0, 0x6, 0xf1, 0x8b,
0x36, 0xf1, 0x1b, 0xfe, 0x60,
/* U+0074 "t" */
0xd, 0x60, 0x0, 0xd6, 0x0, 0xef, 0xff, 0x32,
0xd7, 0x20, 0xd, 0x60, 0x0, 0xd6, 0x0, 0xd,
0x60, 0x0, 0xbb, 0x41, 0x3, 0xdf, 0x50,
/* U+0075 "u" */
0x3f, 0x0, 0x1f, 0x33, 0xf0, 0x1, 0xf3, 0x3f,
0x0, 0x1f, 0x33, 0xf0, 0x1, 0xf3, 0x2f, 0x10,
0x2f, 0x30, 0xf8, 0x2b, 0xf3, 0x5, 0xee, 0x7f,
0x30,
/* U+0076 "v" */
0xba, 0x0, 0x2f, 0x15, 0xf0, 0x7, 0xb0, 0xe,
0x50, 0xd5, 0x0, 0x9b, 0x2f, 0x0, 0x3, 0xf8,
0xa0, 0x0, 0xd, 0xf4, 0x0, 0x0, 0x7e, 0x0,
0x0,
/* U+0077 "w" */
0xb8, 0x0, 0xd7, 0x0, 0xe4, 0x6d, 0x1, 0xfc,
0x2, 0xe0, 0x1f, 0x26, 0xcf, 0x17, 0xa0, 0xc,
0x7a, 0x5c, 0x5c, 0x40, 0x6, 0xce, 0x17, 0xbf,
0x0, 0x1, 0xfb, 0x2, 0xfa, 0x0, 0x0, 0xc6,
0x0, 0xc5, 0x0,
/* U+0078 "x" */
0x9d, 0x0, 0xab, 0x0, 0xe8, 0x5f, 0x10, 0x4,
0xfe, 0x60, 0x0, 0xc, 0xe0, 0x0, 0x4, 0xfe,
0x60, 0x0, 0xd7, 0x6f, 0x10, 0x9d, 0x0, 0xbb,
0x0,
/* U+0079 "y" */
0xca, 0x0, 0x1f, 0x25, 0xf0, 0x7, 0xc0, 0xf,
0x50, 0xc6, 0x0, 0x9b, 0x1f, 0x10, 0x3, 0xf8,
0xb0, 0x0, 0xd, 0xf5, 0x0, 0x0, 0x7f, 0x0,
0x0, 0x9, 0x90, 0x0, 0x45, 0xf3, 0x0, 0xb,
0xf8, 0x0, 0x0,
/* U+007A "z" */
0x6f, 0xff, 0xf2, 0x1, 0x1b, 0xb0, 0x0, 0x4f,
0x20, 0x0, 0xe7, 0x0, 0x8, 0xd0, 0x0, 0x2f,
0x62, 0x20, 0x9f, 0xff, 0xf5,
/* U+007B "{" */
0x0, 0x0, 0x0, 0x8, 0xf5, 0x2, 0xf7, 0x10,
0x3f, 0x0, 0x4, 0xf0, 0x0, 0x4f, 0x0, 0x1a,
0xd0, 0x9, 0xf4, 0x0, 0x3b, 0xc0, 0x0, 0x4f,
0x0, 0x4, 0xf0, 0x0, 0x3f, 0x30, 0x0, 0xcf,
0x50, 0x0, 0x21,
/* U+007C "|" */
0x12, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
/* U+007D "}" */
0x0, 0x0, 0xb, 0xd3, 0x0, 0x2c, 0xb0, 0x0,
0x7d, 0x0, 0x6, 0xd0, 0x0, 0x6e, 0x0, 0x3,
0xf5, 0x0, 0xb, 0xf2, 0x3, 0xf7, 0x0, 0x6e,
0x0, 0x6, 0xd0, 0x0, 0x9c, 0x0, 0xcf, 0x60,
0x2, 0x10, 0x0,
/* U+007E "~" */
0x0, 0x0, 0x0, 0x0, 0xaf, 0x91, 0xe3, 0x3e,
0x1b, 0xfc, 0x1, 0x20, 0x2, 0x0
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 52, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 47, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 15, .adv_w = 72, .box_w = 4, .box_h = 4, .ofs_x = 0, .ofs_y = 7},
{.bitmap_index = 23, .adv_w = 127, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 63, .adv_w = 111, .box_w = 7, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 112, .adv_w = 153, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 162, .adv_w = 138, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 212, .adv_w = 39, .box_w = 2, .box_h = 4, .ofs_x = 0, .ofs_y = 7},
{.bitmap_index = 216, .adv_w = 69, .box_w = 5, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 249, .adv_w = 69, .box_w = 4, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 275, .adv_w = 84, .box_w = 5, .box_h = 6, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 290, .adv_w = 111, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 315, .adv_w = 49, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 323, .adv_w = 94, .box_w = 6, .box_h = 2, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 329, .adv_w = 46, .box_w = 3, .box_h = 2, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 332, .adv_w = 77, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 357, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 392, .adv_w = 111, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 412, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 447, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 482, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 517, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 552, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 587, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 622, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 657, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 692, .adv_w = 51, .box_w = 3, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 703, .adv_w = 53, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 718, .adv_w = 111, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 743, .adv_w = 111, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 761, .adv_w = 111, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 786, .adv_w = 86, .box_w = 7, .box_h = 10, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 821, .adv_w = 188, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 899, .adv_w = 131, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 944, .adv_w = 127, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 979, .adv_w = 127, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1019, .adv_w = 139, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1059, .adv_w = 115, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1089, .adv_w = 109, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1119, .adv_w = 136, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1159, .adv_w = 145, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1199, .adv_w = 53, .box_w = 2, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1209, .adv_w = 92, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1234, .adv_w = 134, .box_w = 8, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1274, .adv_w = 110, .box_w = 6, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1304, .adv_w = 167, .box_w = 9, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1349, .adv_w = 143, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1384, .adv_w = 148, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1429, .adv_w = 117, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1464, .adv_w = 148, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1524, .adv_w = 126, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1559, .adv_w = 111, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1594, .adv_w = 112, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1629, .adv_w = 142, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1669, .adv_w = 130, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1714, .adv_w = 188, .box_w = 12, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1774, .adv_w = 130, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1814, .adv_w = 122, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1854, .adv_w = 112, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1889, .adv_w = 68, .box_w = 4, .box_h = 14, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 1917, .adv_w = 77, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1942, .adv_w = 68, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 1970, .adv_w = 94, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 5},
{.bitmap_index = 1985, .adv_w = 84, .box_w = 6, .box_h = 2, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 1991, .adv_w = 61, .box_w = 4, .box_h = 2, .ofs_x = 0, .ofs_y = 8},
{.bitmap_index = 1995, .adv_w = 106, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2016, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2051, .adv_w = 95, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2072, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2107, .adv_w = 106, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2132, .adv_w = 69, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2160, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2195, .adv_w = 113, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2230, .adv_w = 48, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2245, .adv_w = 48, .box_w = 5, .box_h = 13, .ofs_x = -2, .ofs_y = -3},
{.bitmap_index = 2278, .adv_w = 104, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2313, .adv_w = 48, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2328, .adv_w = 165, .box_w = 10, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2363, .adv_w = 113, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2388, .adv_w = 114, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2413, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2448, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2483, .adv_w = 75, .box_w = 5, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2501, .adv_w = 88, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2522, .adv_w = 74, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2545, .adv_w = 113, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2570, .adv_w = 102, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2595, .adv_w = 152, .box_w = 10, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2630, .adv_w = 98, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2655, .adv_w = 103, .box_w = 7, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2690, .adv_w = 92, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2711, .adv_w = 74, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2746, .adv_w = 38, .box_w = 2, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 2759, .adv_w = 74, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2794, .adv_w = 111, .box_w = 7, .box_h = 4, .ofs_x = 0, .ofs_y = 3}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 95, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 0, 1, 0, 0, 0, 0,
1, 2, 3, 0, 4, 0, 4, 0,
5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4,
6, 7, 8, 9, 10, 7, 11, 12,
13, 14, 14, 15, 16, 17, 14, 14,
7, 18, 0, 19, 20, 21, 15, 5,
22, 23, 24, 25, 2, 8, 3, 0,
0, 0, 26, 27, 28, 29, 30, 31,
32, 26, 0, 33, 34, 29, 26, 26,
27, 27, 0, 35, 36, 37, 32, 38,
38, 39, 38, 40, 2, 0, 3, 4
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 1, 0, 2, 0, 0, 0, 0,
2, 0, 3, 0, 4, 5, 4, 5,
6, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 4, 0, 0,
7, 8, 6, 9, 8, 9, 9, 9,
8, 9, 9, 10, 9, 9, 9, 9,
8, 9, 8, 9, 11, 12, 13, 14,
15, 16, 17, 18, 0, 14, 3, 0,
5, 0, 19, 20, 21, 21, 21, 22,
21, 20, 0, 23, 20, 20, 24, 24,
21, 0, 21, 24, 25, 26, 27, 28,
28, 29, 30, 31, 0, 0, 3, 4
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 0, 0, 0, 0, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 4, 0, 4, 4,
2, 0, 3, 0, 0, 13, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -10, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -8, 3, 4, -8,
-27, -18, 4, -7, 0, -23, -2, 4,
0, 0, 0, 0, 0, 0, -15, 0,
-14, -5, 0, -9, -11, -1, -9, -9,
-11, -9, -10, 0, 0, 0, -6, -19,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -4, 0, 0, -8, -7,
0, 0, 0, -7, 0, -6, 0, -7,
-4, -7, -11, -4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -8, -22, 0, -12, 5, 0, -13,
-7, 0, 0, 0, -16, -3, -18, -13,
0, -21, 4, 0, 0, -2, 0, 0,
0, 0, 0, 0, -8, 0, -8, 0,
0, -2, 0, 0, 0, -3, 0, 0,
0, 3, 0, -7, 0, -9, -3, 0,
-11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
2, 0, -6, 4, 0, 6, -3, 0,
0, 0, 1, 0, -1, 0, 0, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -4, 0, -4, 0, 0, 0,
0, 0, 2, 0, 2, -2, 0, 2,
0, 0, 0, -2, 0, 0, -2, 0,
-2, 0, -2, -3, 0, 0, -2, -2,
-2, -4, -2, -4, 0, -2, 5, 0,
1, -25, -11, 8, -1, 0, -27, 0,
4, 0, 0, 0, 0, 0, 0, -8,
0, -5, -2, 0, -3, 0, -2, 0,
-4, -7, -4, -5, 0, 0, 0, 0,
3, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -6, -3,
0, 0, 0, -6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -8, 0, 0, -21, 3, 0, -1,
-11, -3, 0, -3, 0, -5, 0, 0,
0, 0, 0, -6, 0, -7, -8, 0,
-3, -3, -8, -8, -13, -7, -13, 0,
-10, -20, 0, -17, 5, 0, -14, -9,
0, 3, -2, -25, -8, -28, -21, 0,
-34, 0, -1, 0, -4, -4, 0, 0,
0, -5, -5, -18, 0, -18, 0, -2,
2, 0, 2, -28, -16, 3, 0, 0,
-31, 0, 0, 0, -1, -1, -5, 0,
-6, -6, 0, -6, 0, 0, 0, 0,
0, 0, 2, 0, 2, 0, 0, -2,
0, -2, 7, 0, -1, -2, 0, 0,
1, -2, -2, -5, -3, 0, -9, 0,
0, 0, -2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 0, 4,
0, 0, -3, 0, 0, -4, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -6, 6, 0, -15,
-22, -16, 7, -6, 0, -27, 0, 4,
0, 4, 4, 0, 0, 0, -23, 0,
-21, -9, 0, -18, -21, -6, -17, -20,
-21, -20, -17, -2, 3, 0, -5, -15,
-13, 0, -4, 0, -14, 0, 4, 0,
0, 0, 0, 0, 0, -15, 0, -12,
-3, 0, -8, -9, 0, -7, -4, -6,
-4, -7, 0, 0, 4, -18, 2, 0,
2, -7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -5, 0, -7, 0,
0, -3, -3, -6, -6, -12, 0, -12,
0, -6, 3, 4, -14, -26, -21, 2,
-11, 0, -26, -5, 0, 0, 0, 0,
0, 0, 0, -22, 0, -21, -10, 0,
-16, -18, -7, -15, -14, -13, -14, -15,
0, 0, 2, -9, 4, 0, 2, -5,
0, 0, -2, 0, 0, 0, 0, 0,
0, 0, -1, 0, -3, 0, 0, 0,
0, 0, 0, -6, 0, -6, 0, 0,
-8, 0, 0, 0, 0, -6, 0, 0,
0, 0, -17, 0, -14, -13, -2, -19,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -2, 0, -2, 0, 0, -10,
0, -2, -6, 0, -8, 0, 0, 0,
0, -21, 0, -14, -12, -7, -21, 0,
-2, 0, 0, -2, 0, 0, 0, -1,
0, -4, -5, -4, -4, 0, 1, 0,
3, 5, 0, -2, 0, 0, 0, 0,
-15, 0, -10, -7, 3, -15, 0, 0,
0, -1, 2, 0, 0, 0, 4, 0,
0, 1, 0, 3, 0, 0, 3, 0,
0, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 3, -1,
0, -5, 0, 0, 0, 0, -14, 0,
-12, -9, -3, -18, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 0, -1,
0, 0, 0, 9, 0, -1, -15, 0,
9, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -5, 0, -5, 0,
0, 0, 0, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -5,
0, 0, 0, 0, -18, 0, -9, -8,
0, -16, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 8, 0,
0, 0, 0, 0, 0, 0, 0, -4,
0, 0, -5, 5, 0, -9, 0, 0,
0, 0, -18, 0, -12, -11, 0, -16,
0, -6, 0, -4, 0, 0, 0, -2,
0, -2, 0, 0, 0, 0, 0, 5,
0, 2, -21, -9, -6, 0, 0, -23,
0, 0, 0, -8, 0, -10, -14, 0,
-8, 0, -6, 0, 0, 0, -1, 6,
0, 0, 0, 0, 0, 0, -6, 0,
0, 0, 0, -6, 0, 0, 0, 0,
-19, 0, -14, -10, -1, -20, 0, 0,
0, 0, 0, 0, 0, 2, 0, 0,
-2, 0, -2, 2, 0, -1, 2, 0,
5, 0, -5, 0, 0, 0, 0, -13,
0, -9, 0, 0, -13, 0, 0, 0,
-2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -17,
-8, -5, 0, 0, -15, 0, -20, 0,
-9, -4, -12, -14, 0, -4, 0, -4,
0, 0, 0, -2, 0, 0, 0, 0,
0, 0, 0, 0, 0, -4, 2, 0,
-8, 0, 0, 0, 0, -21, 0, -11,
-6, 0, -13, 0, -3, 0, -5, 0,
0, 0, 0, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, 0, -6,
0, 0, 0, 0, -19, 0, -11, -6,
0, -14, 0, -3, 0, -4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 40,
.right_class_cnt = 31,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_12px = {
#else
lv_font_t Number_HarmonyOS_bpp4_12px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 15, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -1,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_12PX*/

View File

@ -0,0 +1,309 @@
/*******************************************************************************
* Size: 12 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_12px.c --bpp 4 --size 12 -r 0x20-0x7f
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_12PX
#define NUMBER_HARMONYOS_BPP4_12PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_12PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 95, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 0, 1, 0, 0, 0, 0,
1, 2, 3, 0, 4, 0, 4, 0,
5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4,
6, 7, 8, 9, 10, 7, 11, 12,
13, 14, 14, 15, 16, 17, 14, 14,
7, 18, 0, 19, 20, 21, 15, 5,
22, 23, 24, 25, 2, 8, 3, 0,
0, 0, 26, 27, 28, 29, 30, 31,
32, 26, 0, 33, 34, 29, 26, 26,
27, 27, 0, 35, 36, 37, 32, 38,
38, 39, 38, 40, 2, 0, 3, 4
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 1, 0, 2, 0, 0, 0, 0,
2, 0, 3, 0, 4, 5, 4, 5,
6, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 4, 0, 0,
7, 8, 6, 9, 8, 9, 9, 9,
8, 9, 9, 10, 9, 9, 9, 9,
8, 9, 8, 9, 11, 12, 13, 14,
15, 16, 17, 18, 0, 14, 3, 0,
5, 0, 19, 20, 21, 21, 21, 22,
21, 20, 0, 23, 20, 20, 24, 24,
21, 0, 21, 24, 25, 26, 27, 28,
28, 29, 30, 31, 0, 0, 3, 4
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 0, 0, 0, 0, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 4, 0, 4, 4,
2, 0, 3, 0, 0, 13, 0, 0,
3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -10, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -8, 3, 4, -8,
-27, -18, 4, -7, 0, -23, -2, 4,
0, 0, 0, 0, 0, 0, -15, 0,
-14, -5, 0, -9, -11, -1, -9, -9,
-11, -9, -10, 0, 0, 0, -6, -19,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -4, 0, 0, -8, -7,
0, 0, 0, -7, 0, -6, 0, -7,
-4, -7, -11, -4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -8, -22, 0, -12, 5, 0, -13,
-7, 0, 0, 0, -16, -3, -18, -13,
0, -21, 4, 0, 0, -2, 0, 0,
0, 0, 0, 0, -8, 0, -8, 0,
0, -2, 0, 0, 0, -3, 0, 0,
0, 3, 0, -7, 0, -9, -3, 0,
-11, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
2, 0, -6, 4, 0, 6, -3, 0,
0, 0, 1, 0, -1, 0, 0, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -4, 0, -4, 0, 0, 0,
0, 0, 2, 0, 2, -2, 0, 2,
0, 0, 0, -2, 0, 0, -2, 0,
-2, 0, -2, -3, 0, 0, -2, -2,
-2, -4, -2, -4, 0, -2, 5, 0,
1, -25, -11, 8, -1, 0, -27, 0,
4, 0, 0, 0, 0, 0, 0, -8,
0, -5, -2, 0, -3, 0, -2, 0,
-4, -7, -4, -5, 0, 0, 0, 0,
3, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -6, -3,
0, 0, 0, -6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -8, 0, 0, -21, 3, 0, -1,
-11, -3, 0, -3, 0, -5, 0, 0,
0, 0, 0, -6, 0, -7, -8, 0,
-3, -3, -8, -8, -13, -7, -13, 0,
-10, -20, 0, -17, 5, 0, -14, -9,
0, 3, -2, -25, -8, -28, -21, 0,
-34, 0, -1, 0, -4, -4, 0, 0,
0, -5, -5, -18, 0, -18, 0, -2,
2, 0, 2, -28, -16, 3, 0, 0,
-31, 0, 0, 0, -1, -1, -5, 0,
-6, -6, 0, -6, 0, 0, 0, 0,
0, 0, 2, 0, 2, 0, 0, -2,
0, -2, 7, 0, -1, -2, 0, 0,
1, -2, -2, -5, -3, 0, -9, 0,
0, 0, -2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 0, 4,
0, 0, -3, 0, 0, -4, 1, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -6, 6, 0, -15,
-22, -16, 7, -6, 0, -27, 0, 4,
0, 4, 4, 0, 0, 0, -23, 0,
-21, -9, 0, -18, -21, -6, -17, -20,
-21, -20, -17, -2, 3, 0, -5, -15,
-13, 0, -4, 0, -14, 0, 4, 0,
0, 0, 0, 0, 0, -15, 0, -12,
-3, 0, -8, -9, 0, -7, -4, -6,
-4, -7, 0, 0, 4, -18, 2, 0,
2, -7, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -5, 0, -7, 0,
0, -3, -3, -6, -6, -12, 0, -12,
0, -6, 3, 4, -14, -26, -21, 2,
-11, 0, -26, -5, 0, 0, 0, 0,
0, 0, 0, -22, 0, -21, -10, 0,
-16, -18, -7, -15, -14, -13, -14, -15,
0, 0, 2, -9, 4, 0, 2, -5,
0, 0, -2, 0, 0, 0, 0, 0,
0, 0, -1, 0, -3, 0, 0, 0,
0, 0, 0, -6, 0, -6, 0, 0,
-8, 0, 0, 0, 0, -6, 0, 0,
0, 0, -17, 0, -14, -13, -2, -19,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -2, 0, -2, 0, 0, -10,
0, -2, -6, 0, -8, 0, 0, 0,
0, -21, 0, -14, -12, -7, -21, 0,
-2, 0, 0, -2, 0, 0, 0, -1,
0, -4, -5, -4, -4, 0, 1, 0,
3, 5, 0, -2, 0, 0, 0, 0,
-15, 0, -10, -7, 3, -15, 0, 0,
0, -1, 2, 0, 0, 0, 4, 0,
0, 1, 0, 3, 0, 0, 3, 0,
0, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 3, -1,
0, -5, 0, 0, 0, 0, -14, 0,
-12, -9, -3, -18, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 0, -1,
0, 0, 0, 9, 0, -1, -15, 0,
9, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -5, 0, -5, 0,
0, 0, 0, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -5,
0, 0, 0, 0, -18, 0, -9, -8,
0, -16, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 2, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 8, 0,
0, 0, 0, 0, 0, 0, 0, -4,
0, 0, -5, 5, 0, -9, 0, 0,
0, 0, -18, 0, -12, -11, 0, -16,
0, -6, 0, -4, 0, 0, 0, -2,
0, -2, 0, 0, 0, 0, 0, 5,
0, 2, -21, -9, -6, 0, 0, -23,
0, 0, 0, -8, 0, -10, -14, 0,
-8, 0, -6, 0, 0, 0, -1, 6,
0, 0, 0, 0, 0, 0, -6, 0,
0, 0, 0, -6, 0, 0, 0, 0,
-19, 0, -14, -10, -1, -20, 0, 0,
0, 0, 0, 0, 0, 2, 0, 0,
-2, 0, -2, 2, 0, -1, 2, 0,
5, 0, -5, 0, 0, 0, 0, -13,
0, -9, 0, 0, -13, 0, 0, 0,
-2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -17,
-8, -5, 0, 0, -15, 0, -20, 0,
-9, -4, -12, -14, 0, -4, 0, -4,
0, 0, 0, -2, 0, 0, 0, 0,
0, 0, 0, 0, 0, -4, 2, 0,
-8, 0, 0, 0, 0, -21, 0, -11,
-6, 0, -13, 0, -3, 0, -5, 0,
0, 0, 0, 2, 0, 0, 0, 0,
0, 0, 0, 0, 0, 2, 0, -6,
0, 0, 0, 0, -19, 0, -11, -6,
0, -14, 0, -3, 0, -4, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 40,
.right_class_cnt = 31,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_12px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_12px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_12px = {
#else
lv_font_t Number_HarmonyOS_bpp4_12px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 15, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -1,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_12PX*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,309 @@
/*******************************************************************************
* Size: 16 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_16px.c --bpp 4 --size 16 -r 0x20-0x7f
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_16PX
#define NUMBER_HARMONYOS_BPP4_16PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_16PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 95, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 0, 1, 0, 0, 0, 0,
1, 2, 3, 0, 4, 0, 4, 0,
5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4,
6, 7, 8, 9, 10, 7, 11, 12,
13, 14, 14, 15, 16, 17, 14, 14,
7, 18, 0, 19, 20, 21, 15, 5,
22, 23, 24, 25, 2, 8, 3, 0,
0, 0, 26, 27, 28, 29, 30, 31,
32, 26, 0, 33, 34, 29, 26, 26,
27, 27, 0, 35, 36, 37, 32, 38,
38, 39, 38, 40, 2, 0, 3, 4
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 1, 0, 2, 0, 0, 0, 0,
2, 0, 3, 0, 4, 5, 4, 5,
6, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 4, 0, 0,
7, 8, 6, 9, 8, 9, 9, 9,
8, 9, 9, 10, 9, 9, 9, 9,
8, 9, 8, 9, 11, 12, 13, 14,
15, 16, 17, 18, 0, 14, 3, 0,
5, 0, 19, 20, 21, 21, 21, 22,
21, 20, 0, 23, 20, 20, 24, 24,
21, 0, 21, 24, 25, 26, 27, 28,
28, 29, 30, 31, 0, 0, 3, 4
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 0, 0, 0, 0, 4, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 5, 0, 5, 5,
3, 0, 4, 0, 0, 18, 0, 0,
5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -14, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -10, 5, 5, -11,
-36, -24, 6, -9, 0, -31, -3, 5,
0, 0, 0, 0, 0, 0, -19, 0,
-19, -6, 0, -12, -15, -2, -12, -12,
-14, -12, -14, 0, 0, 0, -8, -26,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -6, 0, 0, -11, -9,
0, 0, 0, -9, 0, -8, 0, -9,
-5, -9, -14, -6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -10, -30, 0, -16, 7, 0, -17,
-9, 0, 0, 0, -22, -4, -24, -18,
0, -28, 5, 0, 0, -3, 0, 0,
0, 0, 0, 0, -11, 0, -11, 0,
0, -3, 0, 0, 0, -4, 0, 0,
0, 4, 0, -9, 0, -12, -4, 0,
-15, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
3, 0, -8, 6, 0, 8, -4, 0,
0, 0, 1, 0, -1, 0, 0, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -6, 0, -6, 0, 0, 0,
0, 0, 3, 0, 3, -3, 0, 3,
0, 0, 0, -3, 0, 0, -3, 0,
-3, 0, -3, -4, 0, 0, -2, -3,
-2, -5, -2, -5, 0, -3, 7, 0,
2, -34, -15, 10, -1, 0, -36, 0,
6, 0, 0, 0, 0, 0, 0, -10,
0, -7, -2, 0, -5, 0, -3, 0,
-6, -9, -6, -6, 0, 0, 0, 0,
5, 0, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -8, -4,
0, 0, 0, -8, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -10, 0, 0, -28, 5, 0, -2,
-15, -4, 0, -4, 0, -7, 0, 0,
0, 0, 0, -7, 0, -9, -10, 0,
-4, -4, -10, -11, -17, -9, -17, 0,
-13, -26, 0, -23, 7, 0, -18, -12,
0, 4, -2, -34, -11, -38, -28, 0,
-46, 0, -2, 0, -5, -5, 0, -1,
0, -7, -7, -24, 0, -24, 0, -3,
3, 0, 3, -37, -21, 4, 0, 0,
-41, 0, 0, 0, -1, -1, -6, 0,
-8, -8, 0, -8, 0, 0, 0, 0,
0, 0, 3, 0, 3, 0, 0, -3,
0, -2, 10, 0, -1, -3, 0, 0,
2, -3, -3, -7, -5, 0, -13, 0,
0, 0, -3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 0, 6,
0, 0, -4, 0, 0, -6, 2, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -8, 8, 0, -20,
-29, -22, 9, -8, 0, -36, 0, 6,
0, 5, 5, 0, 0, 0, -30, 0,
-28, -12, 0, -24, -28, -8, -23, -27,
-27, -27, -22, -3, 5, 0, -6, -20,
-18, 0, -5, 0, -19, -1, 5, 0,
0, 0, 0, 0, 0, -20, 0, -16,
-4, 0, -11, -12, 0, -9, -6, -8,
-6, -9, 0, 0, 5, -24, 3, 0,
3, -9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -6, 0, -9, 0,
0, -4, -5, -8, -8, -16, 0, -16,
0, -8, 4, 5, -18, -35, -28, 2,
-14, 0, -35, -6, 0, 0, 0, 0,
0, 0, 0, -29, 0, -27, -13, 0,
-22, -24, -9, -20, -19, -18, -19, -20,
0, 0, 3, -12, 5, 0, 3, -7,
0, 0, -3, 0, 0, 0, 0, 0,
0, 0, -1, 0, -4, 0, 0, 0,
0, 0, 0, -8, 0, -8, 0, 0,
-10, 0, -1, 0, 0, -8, 0, 0,
0, 0, -22, 0, -19, -17, -2, -26,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -3, 0, -3, 0, 0, -13,
0, -3, -8, 0, -10, 0, 0, 0,
0, -28, 0, -19, -16, -9, -27, 0,
-3, 0, 0, -2, 0, 0, 0, -1,
0, -5, -6, -5, -6, 0, 1, 0,
5, 6, 0, -3, 0, 0, 0, 0,
-20, 0, -13, -9, 5, -20, 0, 1,
0, -1, 3, 0, 0, 0, 6, 0,
0, 2, 0, 4, 0, 0, 4, 0,
0, 0, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -1, 0, 4, -1,
0, -6, 0, 0, 0, 0, -18, 0,
-17, -13, -4, -24, 0, 0, 0, 0,
0, 0, 0, 3, 0, 0, -1, -2,
-1, 0, 0, 12, 0, -2, -20, 0,
12, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -7, 0, -6, 1,
0, 0, 0, 4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -7,
0, 0, 0, 0, -24, 0, -12, -11,
0, -22, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 11, 0,
0, 0, 0, 0, 0, 0, 0, -6,
0, 0, -7, 6, 0, -12, 0, 0,
0, 0, -24, 0, -16, -14, 0, -22,
0, -7, 0, -6, 0, 0, 0, -3,
0, -2, 0, 0, 0, 0, 0, 6,
0, 2, -28, -12, -7, 0, 0, -30,
0, 0, 0, -11, 0, -13, -19, 0,
-11, 0, -8, 0, 0, 0, -2, 7,
0, 0, 0, 0, 0, 0, -7, 0,
0, 0, 0, -8, 0, 0, 0, 0,
-26, 0, -18, -13, -1, -27, 0, 0,
0, 0, 0, 0, 0, 2, 0, 0,
-2, 0, -2, 3, 0, -2, 3, -1,
7, 0, -6, 0, 0, 0, 0, -18,
0, -12, 0, -1, -17, 0, 0, 0,
-2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -23,
-11, -7, 0, 0, -20, 0, -27, 0,
-12, -6, -16, -19, 0, -5, 0, -5,
0, 0, 0, -3, 0, 0, 0, 0,
0, 0, 0, 0, 0, -5, 2, 0,
-10, 0, 0, 0, 0, -27, 0, -14,
-8, 0, -18, 0, -4, 0, -6, 0,
0, 0, 0, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 3, 0, -8,
0, 0, 0, 0, -25, 0, -14, -8,
0, -19, 0, -4, 0, -6, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 40,
.right_class_cnt = 31,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_16px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_16px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_16px = {
#else
lv_font_t Number_HarmonyOS_bpp4_16px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 19, /*The maximum line height required by the font*/
.base_line = 4, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -1,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_16PX*/

View File

@ -0,0 +1,128 @@
/*******************************************************************************
* Size: 180 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_180px.c --bpp 4 --size 180 -r 0x30-0x39 -r 0x2d-0x2f -r 0x3a
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_180PX
#define NUMBER_HARMONYOS_BPP4_180PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_180PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 45, .range_length = 14, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
3, 1,
3, 2,
3, 3
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-37, -119, -77
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_180px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_180px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 55,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_180px = {
#else
lv_font_t Number_HarmonyOS_bpp4_180px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 137, /*The maximum line height required by the font*/
.base_line = 2, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -13,
.underline_thickness = 9,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_180PX*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,315 @@
/*******************************************************************************
* Size: 20 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_20px.c --bpp 4 --size 20 -r 0x00-0x7f
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_20PX
#define NUMBER_HARMONYOS_BPP4_20PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_20PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 0, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 32, .range_length = 95, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 0, 0, 1, 0, 0, 0,
0, 1, 2, 3, 0, 4, 0, 4,
0, 5, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
4, 6, 7, 8, 9, 10, 7, 11,
12, 13, 14, 14, 15, 16, 17, 14,
14, 7, 18, 0, 19, 20, 21, 15,
5, 22, 23, 24, 25, 2, 8, 3,
0, 0, 0, 26, 27, 28, 29, 30,
31, 32, 26, 0, 33, 34, 29, 26,
26, 27, 27, 0, 35, 36, 37, 32,
38, 38, 39, 38, 40, 2, 0, 3,
4
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 0, 1, 0, 2, 0, 0, 0,
0, 2, 0, 3, 0, 4, 5, 4,
5, 6, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 4, 0,
0, 7, 8, 6, 9, 8, 9, 9,
9, 8, 9, 9, 10, 9, 9, 9,
9, 8, 9, 8, 9, 11, 12, 13,
14, 15, 16, 17, 18, 0, 14, 3,
0, 5, 0, 19, 20, 21, 21, 21,
22, 21, 20, 0, 23, 20, 20, 24,
24, 21, 0, 21, 24, 25, 26, 27,
28, 28, 29, 30, 31, 0, 0, 3,
4
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 0, 0, 0, 0, 5, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 6, 0, 6, 6,
3, 0, 4, 0, 0, 22, 0, 0,
6, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -17, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -13, 6, 6, -14,
-45, -29, 7, -12, 0, -39, -3, 6,
0, 0, 0, 0, 0, 0, -24, 0,
-24, -8, 0, -15, -19, -2, -15, -14,
-18, -14, -17, 0, 0, 0, -11, -32,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -7, 0, 0, -14, -12,
0, 0, 0, -12, 0, -10, 0, -12,
-6, -11, -18, -7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -13, -37, 0, -20, 8, 0, -22,
-12, 0, 0, 0, -27, -5, -29, -22,
0, -36, 7, 0, 0, -4, 0, 0,
0, 0, 0, 0, -14, 0, -14, 0,
0, -4, 0, 0, 0, -5, 0, 0,
0, 4, 0, -11, 0, -14, -5, 0,
-18, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
3, 0, -10, 7, 0, 11, -5, 0,
0, 0, 2, 0, -1, 0, 0, -1,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -7, 0, -7, 0, 0, 0,
0, 0, 3, 0, 4, -3, 0, 4,
0, 0, 0, -4, 0, 0, -4, 0,
-3, 0, -4, -4, 0, 0, -3, -3,
-3, -7, -3, -7, 0, -3, 8, 0,
2, -42, -19, 13, -2, 0, -44, 0,
7, 0, 0, 0, 0, 0, 0, -13,
0, -9, -3, 0, -6, 0, -4, 0,
-7, -12, -7, -8, 0, 0, 0, 0,
6, 0, 4, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 2, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -10, -5,
0, 0, 0, -10, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -13, 0, 0, -35, 6, 0, -2,
-19, -5, 0, -5, 0, -8, 0, 0,
0, 0, 0, -9, 0, -11, -13, 0,
-5, -5, -13, -13, -21, -11, -21, 0,
-16, -33, 0, -29, 8, 0, -23, -15,
0, 5, -3, -42, -14, -47, -35, 0,
-57, 0, -2, 0, -6, -6, 0, -1,
0, -9, -8, -30, 0, -30, 0, -3,
3, 0, 4, -46, -26, 5, 0, 0,
-51, 0, 0, 0, -1, -2, -8, 0,
-10, -11, 0, -10, 0, 0, 0, 0,
0, 0, 4, 0, 4, 0, 0, -4,
0, -3, 12, 0, -1, -3, 0, 0,
2, -4, -4, -9, -6, 0, -16, 0,
0, 0, -4, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 3, 0, 0, 0, 7,
0, 0, -5, 0, 0, -7, 2, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -10, 10, 0, -26,
-36, -27, 12, -10, 0, -45, 0, 7,
0, 6, 6, 0, 0, 0, -38, 0,
-36, -14, 0, -29, -36, -11, -28, -34,
-34, -34, -28, -3, 6, 0, -8, -25,
-22, 0, -6, 0, -23, -1, 6, 0,
0, 0, 0, 0, 0, -25, 0, -20,
-5, 0, -14, -15, 0, -11, -7, -11,
-7, -11, 0, 0, 6, -29, 3, 0,
4, -11, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -8, 0, -11, 0,
0, -5, -6, -10, -10, -20, 0, -20,
0, -10, 4, 6, -23, -44, -36, 3,
-18, 0, -44, -8, 0, 0, 0, 0,
0, 0, 0, -36, 0, -34, -16, 0,
-27, -30, -11, -25, -24, -22, -24, -25,
0, 0, 3, -15, 6, 0, 3, -9,
0, 0, -3, 0, 0, 0, 0, 0,
0, 0, -2, 0, -5, 0, 0, 0,
0, 0, 0, -11, 0, -11, 0, 0,
-13, 0, -1, 0, 0, -10, 0, 0,
0, 0, -28, 0, -24, -21, -3, -32,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -4, 0, -4, 0, 0, -16,
0, -3, -10, 0, -13, 0, 0, 0,
0, -36, 0, -24, -20, -11, -34, 0,
-3, 0, 0, -3, 0, 0, 0, -2,
0, -7, -8, -7, -7, 0, 1, 0,
6, 8, 0, -4, 0, 0, 0, 0,
-25, 0, -17, -11, 6, -25, 0, 1,
0, -1, 4, 0, 0, 0, 7, 0,
0, 2, 0, 4, 0, 0, 4, 0,
0, 0, 4, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -2, 0, 5, -1,
0, -8, 0, 0, 0, 0, -23, 0,
-21, -16, -4, -29, 0, 0, 0, 0,
0, 0, 0, 4, 0, 0, -1, -2,
-1, 0, 0, 15, 0, -2, -25, 0,
14, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, -9, 0, -8, 1,
0, 0, 0, 4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -9,
0, 0, 0, 0, -29, 0, -15, -14,
0, -27, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 4, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 13, 0,
0, 0, 0, 0, 0, 0, 0, -7,
0, 0, -9, 8, 0, -15, 0, 0,
0, 0, -29, 0, -20, -18, 0, -27,
0, -9, 0, -7, 0, 0, 0, -4,
0, -3, 0, 0, 0, 0, 0, 8,
0, 3, -35, -15, -9, 0, 0, -38,
0, 0, 0, -14, 0, -16, -24, 0,
-13, 0, -11, 0, 0, 0, -2, 9,
0, 0, 0, 0, 0, 0, -9, 0,
0, 0, 0, -10, 0, 0, 0, 0,
-32, 0, -23, -16, -1, -34, 0, 0,
0, 0, 0, 0, 0, 3, 0, 0,
-3, 0, -3, 4, 0, -2, 3, -1,
9, 0, -8, 0, 0, 0, 0, -22,
0, -15, 0, -1, -22, 0, 0, 0,
-3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -29,
-14, -9, 0, 0, -26, 0, -34, 0,
-14, -7, -20, -24, 0, -6, 0, -7,
0, 0, 0, -3, 0, 0, 0, 0,
0, 0, 0, 0, 0, -6, 3, 0,
-13, 0, 0, 0, 0, -34, 0, -18,
-11, 0, -22, 0, -5, 0, -8, 0,
0, 0, 0, 4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 3, 0, -10,
0, 0, 0, 0, -31, 0, -18, -10,
0, -24, 0, -5, 0, -7, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 40,
.right_class_cnt = 31,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_20px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_20px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_20px = {
#else
lv_font_t Number_HarmonyOS_bpp4_20px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 23, /*The maximum line height required by the font*/
.base_line = 5, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -1,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_20PX*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,295 @@
/*******************************************************************************
* Size: 36 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font D:\code\lv_font_conv\lv_font_convert_tools\HarmonyOS_Sans_SC_Medium.ttf -o D:\code\lv_font_conv\lv_font_convert_tools\Number_HarmonyOS_bpp4_36px.c --bpp 4 --size 36 --symbols <20><><EFBFBD>H%:-GOQWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm/.+ -r 0x25-0x3A
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_36PX
#define NUMBER_HARMONYOS_BPP4_36PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_36PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
static const uint16_t unicode_list_3[] = {
0x0, 0x6
};
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 22, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 65, .range_length = 26, .glyph_id_start = 23,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 97, .range_length = 26, .glyph_id_start = 49,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 8451, .range_length = 7, .glyph_id_start = 75,
.unicode_list = unicode_list_3, .glyph_id_ofs_list = NULL, .list_length = 2, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 0, 0, 1, 2, 0, 0,
0, 0, 0, 3, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4,
5, 6, 7, 8, 9, 10, 0, 0,
11, 12, 13, 0, 0, 7, 14, 0,
15, 16, 17, 11, 3, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28,
22, 0, 29, 30, 25, 22, 22, 23,
23, 0, 31, 32, 33, 28, 34, 34,
35, 34, 36, 6, 9
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 0, 0, 1, 0, 2, 0, 3,
4, 3, 4, 5, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 5,
6, 7, 6, 6, 6, 7, 6, 6,
8, 6, 6, 6, 6, 7, 6, 7,
6, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 19, 19, 20, 19,
18, 0, 21, 18, 18, 22, 22, 19,
0, 19, 22, 23, 24, 25, 26, 26,
27, 28, 29, 0, 0
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 12, 0, 12, 12, 6,
0, 8, 0, 0, 40, 0, 0, 10,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 14, 0, 0, 0, 0, 0, 0,
0, 0, 10, 12, -25, -82, -53, 0,
-21, -70, -6, 11, 0, 0, 0, 0,
0, 0, -44, 0, -43, -14, 0, -28,
-34, -4, -28, -26, -32, -26, -31, -67,
0, -36, 15, 0, 0, -21, 0, 0,
-48, -9, -53, -40, 0, -64, 12, 0,
0, -6, 0, 0, 0, 0, 0, 0,
-25, 0, -25, 0, -7, 0, 0, 0,
-9, 0, 0, 8, 0, -20, 0, -26,
-9, 0, -33, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 6, 0, -18, 13, 0, 0, -9,
0, 0, 3, 0, -2, 0, 0, -2,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -13, 0, -13, 0, -13, 0,
0, -25, -21, 0, 0, -21, 0, -18,
0, -21, -12, -20, -32, -13, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 6, 0,
0, -6, 6, 0, 0, 0, -6, 0,
0, -7, 0, -6, 0, -6, -8, 0,
0, -5, -6, -5, -12, -5, -12, 0,
15, 0, 3, -75, -33, 0, -3, -80,
0, 13, 0, 0, 0, 0, 0, 0,
-23, 0, -16, -5, 0, -10, 0, -7,
0, -13, -21, -13, -14, 0, 0, 1,
10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -17, -9, 0,
0, -17, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, -63, 10, 0, -9, -33, 0, -9,
0, -15, 0, 0, 0, 0, 0, -17,
0, -20, -24, 0, -9, -9, -24, -24,
-39, -20, -39, 0, -59, 0, -52, 15,
0, 0, -28, 10, -5, -75, -25, -85,
-63, 0, -103, 0, -4, 0, -12, -11,
0, -1, 1, -16, -15, -55, 0, -55,
0, 6, 0, 7, -83, -47, 0, 0,
-92, 0, 0, 0, -2, -3, -14, 0,
-17, -19, 0, -17, 0, 0, 0, 0,
0, 0, 6, 0, 6, 0, -6, 0,
-5, 22, 0, 0, -6, 0, 4, -7,
-7, -16, -10, 0, -28, 0, 0, 0,
-7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 13, 0, 0, -9, 0,
0, -13, 3, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
17, 0, -46, -66, -48, 0, -18, -81,
0, 13, 0, 11, 12, 0, 0, 0,
-69, 0, -64, -26, 0, -53, -64, -19,
-51, -61, -62, -61, -50, 10, 0, -14,
-44, -40, 0, -12, -42, -1, 12, 0,
0, 0, 0, 0, 0, -44, 0, -36,
-9, 0, -25, -26, 0, -20, -13, -19,
-13, -20, 0, 12, -53, 6, 0, 0,
-20, 0, 0, 0, 0, 0, 0, 0,
0, 0, -14, 0, -20, 0, 0, -10,
-10, -18, -18, -35, 0, -35, 0, 8,
12, -41, -79, -64, 0, -32, -79, -14,
0, 0, 0, 0, 0, 0, 0, -65,
0, -62, -29, 0, -49, -54, -20, -45,
-43, -40, -43, -44, 0, 6, -26, 12,
0, 0, -16, 0, -6, 0, 0, 0,
0, 0, 0, 0, -3, 0, -9, 0,
0, 0, 0, 0, 0, -19, 0, -19,
0, -24, 0, -1, 0, 0, 0, 0,
0, 0, -50, 0, -43, -38, -5, -58,
0, 0, 0, 0, 0, 0, 0, 0,
-1, 0, -7, 0, -7, 0, -29, 0,
-6, -18, 0, 0, 0, 0, 0, -64,
0, -43, -36, -20, -62, 0, -6, 0,
0, -5, 0, 0, 0, -3, 0, -12,
-14, -12, -13, 2, 0, 10, 14, 0,
0, 0, 0, 0, -45, 0, -30, -20,
10, -44, 0, 1, 0, -2, 7, 0,
0, 0, 13, 0, 0, 4, 0, 8,
0, 8, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, -3, 0, 9,
-2, 0, 0, 0, 0, 0, -41, 0,
-37, -28, -8, -53, 0, 0, 0, 0,
0, 0, 0, 6, 0, 0, -1, -4,
-1, 0, 27, 0, -4, -44, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, -16, 0, -14, 1, 0, 0,
0, 8, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
-53, 0, -28, -25, 0, -49, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 7, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
24, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -16, 14, 0, 0, 0,
0, 0, -53, 0, -35, -32, 0, -49,
0, -17, 0, -13, 0, 0, 0, -6,
0, -5, 0, 0, 0, 0, 14, 0,
5, -62, -27, 0, 0, -68, 0, 0,
0, -25, 0, -29, -43, 0, -24, 0,
-19, 0, 0, 0, -3, 17, 0, 0,
0, 0, 0, -17, 0, 0, 0, 0,
0, 0, 0, 0, -58, 0, -41, -29,
-2, -60, 0, 0, 0, 0, 0, 0,
0, 5, 0, 0, -5, 0, -5, 7,
-4, 6, -1, 16, 0, 0, 0, 0,
0, -40, 0, -27, 0, -1, -39, 0,
0, 0, -5, 0, 0, 0, 0, 0,
0, -1, 0, 0, 0, 0, 0, 0,
-52, -25, 0, 0, -46, 0, -61, 0,
-26, -13, -35, -43, 0, -11, 0, -12,
0, 0, 0, -6, 0, 0, 0, 0,
0, -1, 0, 0, -12, 5, 0, 0,
0, 0, 0, -62, 0, -32, -19, 0,
-40, 0, -9, 0, -14, 0, 0, 0,
0, 7, 0, 0, 0, 0, 0, 0,
0, 0, 6, 0, 0, 0, 0, 0,
-56, 0, -32, -18, 0, -43, 0, -9,
0, -13, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 36,
.right_class_cnt = 29,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_36px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_36px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 4,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_36px = {
#else
lv_font_t Number_HarmonyOS_bpp4_36px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 39, /*The maximum line height required by the font*/
.base_line = 8, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -3,
.underline_thickness = 2,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_36PX*/

View File

@ -0,0 +1,751 @@
/*******************************************************************************
* Size: 44 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_44px.c --bpp 4 --size 44 -r 0x30-0x39 -r 0x2d-0x2f -r 0x3a -r 0x25
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_44PX
#define NUMBER_HARMONYOS_BPP4_44PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_44PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+0025 "%" */
0x0, 0x0, 0x0, 0x46, 0x75, 0x20, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xb2,
0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff,
0x40, 0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xff,
0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff,
0xff, 0xa0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
0xff, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0,
0xbf, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x6, 0xff,
0xff, 0x92, 0x26, 0xef, 0xff, 0xc0, 0x0, 0x0,
0x0, 0x4f, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0,
0xcf, 0xff, 0x80, 0x0, 0x2, 0xff, 0xff, 0x20,
0x0, 0x0, 0xd, 0xff, 0xfd, 0x0, 0x0, 0x0,
0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0xa, 0xff,
0xf6, 0x0, 0x0, 0x7, 0xff, 0xff, 0x40, 0x0,
0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, 0x0,
0x7f, 0xff, 0x70, 0x0, 0x2, 0xff, 0xff, 0xa0,
0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xf0, 0x0,
0x0, 0x8, 0xff, 0xf7, 0x0, 0x0, 0xbf, 0xff,
0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
0x40, 0x0, 0x0, 0xdf, 0xff, 0x40, 0x0, 0x4f,
0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9,
0xff, 0xfd, 0x20, 0x0, 0x9f, 0xff, 0xe0, 0x0,
0xd, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x2f, 0xff, 0xff, 0xcb, 0xef, 0xff, 0xf8,
0x0, 0x7, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x0, 0x2, 0xff, 0xff, 0xa0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff,
0xff, 0xfa, 0x0, 0x0, 0xbf, 0xff, 0xf1, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17,
0xce, 0xfd, 0xa4, 0x0, 0x0, 0x4f, 0xff, 0xf7,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff,
0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x2, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xbf, 0xff, 0xf1, 0x0, 0x0, 0x37,
0x99, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xf7, 0x0, 0x3,
0xdf, 0xff, 0xff, 0xfc, 0x20, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xd, 0xff, 0xfd, 0x0,
0x5, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
0x40, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff,
0xff, 0xa0, 0x0, 0xbf, 0xff, 0xe5, 0x1, 0x6f,
0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xbf, 0xff, 0xf1, 0x0, 0x1f, 0xff, 0xf4, 0x0,
0x0, 0x5f, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x4f, 0xff, 0xf7, 0x0, 0x4, 0xff, 0xfc,
0x0, 0x0, 0x0, 0xef, 0xff, 0x20, 0x0, 0x0,
0x0, 0x0, 0xd, 0xff, 0xfd, 0x0, 0x0, 0x6f,
0xff, 0x90, 0x0, 0x0, 0xb, 0xff, 0xf4, 0x0,
0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0x30, 0x0,
0x5, 0xff, 0xfb, 0x0, 0x0, 0x0, 0xdf, 0xff,
0x30, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xa0,
0x0, 0x0, 0x3f, 0xff, 0xf1, 0x0, 0x0, 0x2f,
0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
0xf1, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xb0, 0x0,
0x1c, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x4f,
0xff, 0xf7, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
0xea, 0xbf, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
0xd, 0xff, 0xfd, 0x0, 0x0, 0x0, 0x0, 0xa,
0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0,
0x0, 0x8, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0x70, 0x0,
0x0, 0x0, 0x2, 0xff, 0xff, 0xa0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x3, 0x9d, 0xfe, 0xd8, 0x20,
0x0, 0x0,
/* U+002D "-" */
0x3b, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
0x95, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfd,
/* U+002E "." */
0x2, 0xab, 0x70, 0x1, 0xef, 0xff, 0xa0, 0x6f,
0xff, 0xff, 0x17, 0xff, 0xff, 0xf1, 0x2f, 0xff,
0xfc, 0x0, 0x4d, 0xfa, 0x10,
/* U+002F "/" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff,
0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef,
0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4,
0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0,
0xa, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xf, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x6f, 0xff, 0xf1, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xcf, 0xff, 0xa0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0x40, 0x0,
0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xfe, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xf8,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0,
0x6, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xc, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x2f, 0xff, 0xf4, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x8f, 0xff, 0xe0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0x80, 0x0,
0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0x20,
0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xfc,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff,
0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xdf, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x3, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0,
0x0, 0x9, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xe, 0xff, 0xf8, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x5f, 0xff, 0xf2, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xc0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x60,
0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xff,
0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f,
0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+0030 "0" */
0x0, 0x0, 0x0, 0x0, 0x46, 0x77, 0x52, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9f, 0xff,
0xff, 0xff, 0xd5, 0x0, 0x0, 0x0, 0x0, 0x0,
0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x0,
0x0, 0x0, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff,
0xfe, 0xcd, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0,
0xaf, 0xff, 0xff, 0x60, 0x0, 0x2a, 0xff, 0xff,
0xf3, 0x0, 0x2, 0xff, 0xff, 0xf4, 0x0, 0x0,
0x0, 0xbf, 0xff, 0xfb, 0x0, 0x9, 0xff, 0xff,
0x90, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0x20,
0xe, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0xa,
0xff, 0xff, 0x70, 0x3f, 0xff, 0xfd, 0x0, 0x0,
0x0, 0x0, 0x4, 0xff, 0xff, 0xc0, 0x6f, 0xff,
0xf9, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff,
0xf0, 0x8f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
0x0, 0xef, 0xff, 0xf2, 0xbf, 0xff, 0xf4, 0x0,
0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf4, 0xdf,
0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf,
0xff, 0xf6, 0xdf, 0xff, 0xf1, 0x0, 0x0, 0x0,
0x0, 0x0, 0x9f, 0xff, 0xf7, 0xef, 0xff, 0xf1,
0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xf7,
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x8f, 0xff, 0xf8, 0xff, 0xff, 0xf1, 0x0, 0x0,
0x0, 0x0, 0x0, 0x8f, 0xff, 0xf8, 0xef, 0xff,
0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
0xf7, 0xdf, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
0x0, 0x9f, 0xff, 0xf6, 0xcf, 0xff, 0xf3, 0x0,
0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xf5, 0xaf,
0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
0xff, 0xf3, 0x7f, 0xff, 0xf7, 0x0, 0x0, 0x0,
0x0, 0x0, 0xff, 0xff, 0xf0, 0x5f, 0xff, 0xfb,
0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xe0,
0x1f, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x6,
0xff, 0xff, 0x90, 0xb, 0xff, 0xff, 0x50, 0x0,
0x0, 0x0, 0xc, 0xff, 0xff, 0x40, 0x6, 0xff,
0xff, 0xd0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff,
0x0, 0x0, 0xef, 0xff, 0xfa, 0x0, 0x0, 0x3,
0xef, 0xff, 0xf7, 0x0, 0x0, 0x6f, 0xff, 0xff,
0xd6, 0x45, 0x9f, 0xff, 0xff, 0xe0, 0x0, 0x0,
0xb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x40, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x8,
0xff, 0xff, 0xff, 0xff, 0xfd, 0x30, 0x0, 0x0,
0x0, 0x0, 0x0, 0x17, 0xce, 0xff, 0xda, 0x50,
0x0, 0x0, 0x0,
/* U+0031 "1" */
0x0, 0x0, 0x0, 0x0, 0x4d, 0xff, 0xf6, 0x0,
0x0, 0x0, 0x2b, 0xff, 0xff, 0xf6, 0x0, 0x0,
0x19, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x7, 0xef,
0xff, 0xff, 0xff, 0xf6, 0x4, 0xdf, 0xff, 0xff,
0xff, 0xff, 0xf6, 0xaf, 0xff, 0xff, 0xfe, 0xcf,
0xff, 0xf6, 0xdf, 0xff, 0xff, 0x91, 0x6f, 0xff,
0xf6, 0xdf, 0xff, 0xb2, 0x0, 0x6f, 0xff, 0xf6,
0xdf, 0xd4, 0x0, 0x0, 0x6f, 0xff, 0xf6, 0xb6,
0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0,
0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6,
0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0,
0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0,
0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6,
0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0,
0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0,
0x0, 0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0,
0x6f, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
0xf6, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf6,
/* U+0032 "2" */
0x0, 0x0, 0x0, 0x0, 0x46, 0x77, 0x52, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xaf, 0xff,
0xff, 0xff, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0,
0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x0,
0x0, 0x0, 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfe, 0x20, 0x0, 0x0, 0xdf, 0xff, 0xff,
0xfd, 0xce, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x9,
0xff, 0xff, 0xf8, 0x10, 0x0, 0x3c, 0xff, 0xff,
0xf6, 0x0, 0x1f, 0xff, 0xff, 0x40, 0x0, 0x0,
0x0, 0xcf, 0xff, 0xfc, 0x0, 0x7f, 0xff, 0xf6,
0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0x10,
0x4d, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xe,
0xff, 0xff, 0x30, 0x0, 0x6e, 0x50, 0x0, 0x0,
0x0, 0x0, 0xb, 0xff, 0xff, 0x40, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xd, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x2f, 0xff, 0xff, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xff,
0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x3, 0xff, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x1d, 0xff, 0xff, 0xb0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x9, 0xff, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0x90, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff,
0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x4f, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x3, 0xff, 0xff, 0xfd, 0x10, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xff, 0xff,
0xe2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1,
0xdf, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xc, 0xff, 0xff, 0xf4, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff,
0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x8f, 0xff, 0xff, 0x80, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff, 0xfa,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x5f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf4, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf4, 0xcf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4,
0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf4,
/* U+0033 "3" */
0x0, 0x0, 0x0, 0x0, 0x15, 0x67, 0x75, 0x20,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xdf,
0xff, 0xff, 0xff, 0xd6, 0x0, 0x0, 0x0, 0x0,
0x0, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x20, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfe, 0x10, 0x0, 0x0, 0x2f,
0xff, 0xff, 0xfe, 0xcb, 0xdf, 0xff, 0xff, 0xfd,
0x0, 0x0, 0xb, 0xff, 0xff, 0xe5, 0x0, 0x0,
0x2c, 0xff, 0xff, 0xf5, 0x0, 0x3, 0xff, 0xff,
0xd1, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0xb0,
0x0, 0x7f, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0,
0x4f, 0xff, 0xfe, 0x0, 0x0, 0x4d, 0xf8, 0x0,
0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0,
0x0, 0x6, 0x20, 0x0, 0x0, 0x0, 0x0, 0xf,
0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x3, 0xff, 0xff, 0xd0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xaf, 0xff,
0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x7f, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x25, 0xcf, 0xff, 0xff, 0x80,
0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0,
0xc, 0xff, 0xff, 0xff, 0xfe, 0x30, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff, 0xff,
0xfe, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x1, 0x23, 0x59, 0xff, 0xff,
0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x1, 0xaf, 0xff, 0xff, 0x30, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xff,
0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x2, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff,
0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xdf, 0xff, 0xf2, 0x0, 0x8, 0xe0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff, 0x20,
0x6e, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x3,
0xff, 0xff, 0xf0, 0xd, 0xff, 0xff, 0x40, 0x0,
0x0, 0x0, 0x0, 0xbf, 0xff, 0xfc, 0x0, 0x7f,
0xff, 0xff, 0x60, 0x0, 0x0, 0x0, 0x9f, 0xff,
0xff, 0x60, 0x0, 0xdf, 0xff, 0xff, 0xd7, 0x32,
0x37, 0xdf, 0xff, 0xff, 0xd0, 0x0, 0x2, 0xef,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2,
0x0, 0x0, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0, 0x7e,
0xff, 0xff, 0xff, 0xff, 0xff, 0x91, 0x0, 0x0,
0x0, 0x0, 0x0, 0x5, 0xad, 0xef, 0xfd, 0xa6,
0x10, 0x0, 0x0, 0x0,
/* U+0034 "4" */
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xff,
0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x7, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff, 0xff,
0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x8f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xe1,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x9, 0xff, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x2f, 0xff, 0xfe, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xaf, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xd0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
0xff, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xfb, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf,
0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x6, 0xff, 0xff, 0xa0, 0x0, 0x13,
0x33, 0x31, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff,
0xff, 0x20, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x7f, 0xff, 0xf9, 0x0, 0x0, 0x4f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff,
0xf1, 0x0, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x8, 0xff, 0xff, 0x70, 0x0, 0x0, 0x4f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xfe,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0xaf, 0xff, 0xf6, 0x0, 0x0, 0x0, 0x4f,
0xff, 0xf6, 0x0, 0x0, 0x3, 0xff, 0xff, 0xd0,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
0xb, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x4f,
0xff, 0xf6, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x4f, 0xff, 0xf6, 0x0, 0x0,
/* U+0035 "5" */
0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xf9, 0x0, 0x0, 0x5, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x7,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9,
0x0, 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf9, 0x0, 0x0, 0xb, 0xff, 0xfd,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xd, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xf, 0xff, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xff,
0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x4f, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xf1, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xaf, 0xff, 0xd4, 0x9d, 0xff, 0xeb,
0x71, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0,
0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x10, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x0, 0x2, 0xff, 0xff,
0xfd, 0x74, 0x24, 0x8f, 0xff, 0xff, 0xf8, 0x0,
0x4, 0xff, 0xff, 0x80, 0x0, 0x0, 0x1, 0xdf,
0xff, 0xff, 0x10, 0x0, 0x4c, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x1f, 0xff, 0xff, 0x70, 0x0, 0x0,
0x30, 0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff,
0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x3, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x40,
0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xff, 0xe0,
0x0, 0x3c, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x7,
0xff, 0xff, 0xa0, 0x9, 0xff, 0xfc, 0x0, 0x0,
0x0, 0x0, 0x1e, 0xff, 0xff, 0x50, 0xa, 0xff,
0xff, 0xa0, 0x0, 0x0, 0x1, 0xcf, 0xff, 0xfe,
0x0, 0x3, 0xff, 0xff, 0xfd, 0x73, 0x24, 0x8e,
0xff, 0xff, 0xf5, 0x0, 0x0, 0x8f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0,
0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8,
0x0, 0x0, 0x0, 0x0, 0x5d, 0xff, 0xff, 0xff,
0xff, 0xfd, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0,
0x5a, 0xdf, 0xff, 0xd9, 0x40, 0x0, 0x0, 0x0,
/* U+0036 "6" */
0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff,
0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x4f, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xef, 0xff, 0xf4, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xff, 0xff,
0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x3f, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xcf, 0xff, 0xf6, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff,
0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x2f, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xbf, 0xff, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xff,
0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x1e, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x9f, 0xff, 0xf8, 0x1, 0x10,
0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
0xfd, 0xff, 0xff, 0xc7, 0x10, 0x0, 0x0, 0x0,
0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6,
0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0xef, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0,
0x7, 0xff, 0xff, 0xff, 0x83, 0x0, 0x27, 0xff,
0xff, 0xff, 0x40, 0xe, 0xff, 0xff, 0xe2, 0x0,
0x0, 0x0, 0x2d, 0xff, 0xff, 0xd0, 0x3f, 0xff,
0xff, 0x30, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
0xf4, 0x7f, 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0,
0x0, 0xaf, 0xff, 0xf8, 0x9f, 0xff, 0xf7, 0x0,
0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfb, 0xaf,
0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f,
0xff, 0xfc, 0x9f, 0xff, 0xf5, 0x0, 0x0, 0x0,
0x0, 0x0, 0x4f, 0xff, 0xfc, 0x8f, 0xff, 0xf7,
0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xfa,
0x4f, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0,
0xcf, 0xff, 0xf7, 0xf, 0xff, 0xff, 0x50, 0x0,
0x0, 0x0, 0x4, 0xff, 0xff, 0xf2, 0x8, 0xff,
0xff, 0xf4, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xff,
0xa0, 0x1, 0xef, 0xff, 0xff, 0xb5, 0x33, 0x5a,
0xff, 0xff, 0xff, 0x20, 0x0, 0x3f, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0, 0x0,
0x3, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x50, 0x0, 0x0, 0x0, 0x1a, 0xff, 0xff, 0xff,
0xff, 0xff, 0xb2, 0x0, 0x0, 0x0, 0x0, 0x0,
0x27, 0xbe, 0xff, 0xec, 0x82, 0x0, 0x0, 0x0,
/* U+0037 "7" */
0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xf0, 0x9f, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x9f, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf0, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0x50, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xff,
0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x5f, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xcf, 0xff, 0xf2, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff,
0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x9, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xfe, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f,
0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xdf, 0xff, 0xf2, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xb0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa,
0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x1f, 0xff, 0xfe, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf8,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xef, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x5, 0xff, 0xff, 0xb0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff,
0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x2f, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x9f, 0xff, 0xf8, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff,
0xf1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x6, 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xc, 0xff, 0xff, 0x40, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff,
0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xaf, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xf1, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff,
0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xd, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, 0xfd, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbf,
0xff, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/* U+0038 "8" */
0x0, 0x0, 0x0, 0x1, 0x46, 0x77, 0x63, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xbf, 0xff,
0xff, 0xff, 0xe9, 0x10, 0x0, 0x0, 0x0, 0x0,
0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x0,
0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0x60, 0x0, 0x0, 0x9f, 0xff, 0xff,
0xea, 0x88, 0xbf, 0xff, 0xff, 0xf2, 0x0, 0x3,
0xff, 0xff, 0xf9, 0x0, 0x0, 0x2, 0xdf, 0xff,
0xfa, 0x0, 0x9, 0xff, 0xff, 0xa0, 0x0, 0x0,
0x0, 0x1f, 0xff, 0xff, 0x0, 0xc, 0xff, 0xff,
0x30, 0x0, 0x0, 0x0, 0x9, 0xff, 0xff, 0x30,
0xd, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x6,
0xff, 0xff, 0x40, 0xc, 0xff, 0xff, 0x20, 0x0,
0x0, 0x0, 0x7, 0xff, 0xff, 0x30, 0x9, 0xff,
0xff, 0x60, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff,
0x0, 0x3, 0xff, 0xff, 0xe2, 0x0, 0x0, 0x0,
0x7f, 0xff, 0xfa, 0x0, 0x0, 0x9f, 0xff, 0xfe,
0x72, 0x0, 0x3a, 0xff, 0xff, 0xe2, 0x0, 0x0,
0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x30, 0x0, 0x0, 0x0, 0x6e, 0xff, 0xff, 0xff,
0xff, 0xff, 0xc2, 0x0, 0x0, 0x0, 0x0, 0x8f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x0, 0x0,
0x0, 0x1d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x80, 0x0, 0x1, 0xdf, 0xff, 0xff, 0x94,
0x23, 0x5b, 0xff, 0xff, 0xf7, 0x0, 0xa, 0xff,
0xff, 0xd1, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff,
0x30, 0x3f, 0xff, 0xfe, 0x10, 0x0, 0x0, 0x0,
0x6, 0xff, 0xff, 0xb0, 0x8f, 0xff, 0xf8, 0x0,
0x0, 0x0, 0x0, 0x0, 0xef, 0xff, 0xf1, 0xcf,
0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f,
0xff, 0xf5, 0xef, 0xff, 0xf1, 0x0, 0x0, 0x0,
0x0, 0x0, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0xf1,
0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xf7,
0xef, 0xff, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0,
0x9f, 0xff, 0xf6, 0xbf, 0xff, 0xf7, 0x0, 0x0,
0x0, 0x0, 0x0, 0xdf, 0xff, 0xf4, 0x7f, 0xff,
0xfe, 0x10, 0x0, 0x0, 0x0, 0x6, 0xff, 0xff,
0xf0, 0x1f, 0xff, 0xff, 0xc1, 0x0, 0x0, 0x0,
0x4f, 0xff, 0xff, 0x90, 0x8, 0xff, 0xff, 0xff,
0x84, 0x23, 0x5b, 0xff, 0xff, 0xfe, 0x10, 0x0,
0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf5, 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x6e,
0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x0, 0x0,
0x0, 0x0, 0x0, 0x49, 0xce, 0xff, 0xeb, 0x82,
0x0, 0x0, 0x0,
/* U+0039 "9" */
0x0, 0x0, 0x0, 0x0, 0x14, 0x67, 0x75, 0x20,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xcf,
0xff, 0xff, 0xff, 0xd6, 0x0, 0x0, 0x0, 0x0,
0x0, 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd,
0x30, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x1e,
0xff, 0xff, 0xff, 0xcb, 0xcf, 0xff, 0xff, 0xff,
0x30, 0x0, 0xb, 0xff, 0xff, 0xf8, 0x10, 0x0,
0x7, 0xff, 0xff, 0xfd, 0x0, 0x4, 0xff, 0xff,
0xf6, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xf5,
0x0, 0xaf, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0,
0x8, 0xff, 0xff, 0xb0, 0xe, 0xff, 0xff, 0x30,
0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0x1,
0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xdf, 0xff, 0xf2, 0x2f, 0xff, 0xfe, 0x0, 0x0,
0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0x32, 0xff,
0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf,
0xff, 0xf3, 0x1f, 0xff, 0xff, 0x0, 0x0, 0x0,
0x0, 0x0, 0xe, 0xff, 0xff, 0x20, 0xef, 0xff,
0xf5, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
0xf0, 0xa, 0xff, 0xff, 0xd0, 0x0, 0x0, 0x0,
0x0, 0xbf, 0xff, 0xfb, 0x0, 0x4f, 0xff, 0xff,
0xa0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0x60,
0x0, 0xbf, 0xff, 0xff, 0xd5, 0x10, 0x14, 0xbf,
0xff, 0xff, 0xe0, 0x0, 0x1, 0xef, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0,
0x3, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfd, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0,
0x0, 0x39, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xa0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11,
0xef, 0xff, 0xf1, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xaf, 0xff, 0xf7, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff,
0xfd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0xd, 0xff, 0xff, 0x30, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0x90,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2,
0xff, 0xff, 0xe1, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xcf, 0xff, 0xf5, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff,
0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x1f, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0xb, 0xff, 0xff, 0x80,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5,
0xff, 0xff, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0xef, 0xff, 0xf4, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0,
/* U+003A ":" */
0x0, 0x26, 0x50, 0x0, 0x4f, 0xff, 0xd1, 0xd,
0xff, 0xff, 0x80, 0xff, 0xff, 0xfa, 0xc, 0xff,
0xff, 0x70, 0x2e, 0xff, 0xb0, 0x0, 0x3, 0x20,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x5, 0xa9, 0x20, 0x7,
0xff, 0xff, 0x20, 0xef, 0xff, 0xf9, 0xf, 0xff,
0xff, 0xa0, 0xaf, 0xff, 0xf5, 0x0, 0xae, 0xd6,
0x0
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 562, .box_w = 35, .box_h = 33, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 578, .adv_w = 344, .box_w = 17, .box_h = 4, .ofs_x = 2, .ofs_y = 11},
{.bitmap_index = 612, .adv_w = 170, .box_w = 7, .box_h = 6, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 633, .adv_w = 284, .box_w = 18, .box_h = 32, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 921, .adv_w = 408, .box_w = 22, .box_h = 33, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1284, .adv_w = 408, .box_w = 14, .box_h = 32, .ofs_x = 4, .ofs_y = 0},
{.bitmap_index = 1508, .adv_w = 408, .box_w = 22, .box_h = 33, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1871, .adv_w = 408, .box_w = 23, .box_h = 33, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2251, .adv_w = 408, .box_w = 24, .box_h = 32, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2635, .adv_w = 408, .box_w = 22, .box_h = 32, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 2987, .adv_w = 408, .box_w = 22, .box_h = 32, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 3339, .adv_w = 408, .box_w = 22, .box_h = 32, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 3691, .adv_w = 408, .box_w = 22, .box_h = 33, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 4054, .adv_w = 408, .box_w = 23, .box_h = 33, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 4434, .adv_w = 187, .box_w = 7, .box_h = 23, .ofs_x = 2, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 45, .range_length = 14, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-31, -100, -65
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_44px = {
#else
lv_font_t Number_HarmonyOS_bpp4_44px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 33, /*The maximum line height required by the font*/
.base_line = 0, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -3,
.underline_thickness = 2,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_44PX*/

View File

@ -0,0 +1,132 @@
/*******************************************************************************
* Size: 44 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_44px.c --bpp 4 --size 44 -r 0x30-0x39 -r 0x2d-0x2f -r 0x3a -r 0x25
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_44PX
#define NUMBER_HARMONYOS_BPP4_44PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_44PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 45, .range_length = 14, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-31, -100, -65
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_44px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_44px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_44px = {
#else
lv_font_t Number_HarmonyOS_bpp4_44px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 33, /*The maximum line height required by the font*/
.base_line = 0, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -3,
.underline_thickness = 2,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_44PX*/

View File

@ -0,0 +1,132 @@
/*******************************************************************************
* Size: 46 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_46px.c --bpp 4 --size 46 -r 0x30-0x39 -r 0x2d-0x2f -r 0x25 -r 0x3a
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_46PX
#define NUMBER_HARMONYOS_BPP4_46PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_46PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 45, .range_length = 14, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-32, -105, -68
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_46px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_46px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_46px = {
#else
lv_font_t Number_HarmonyOS_bpp4_46px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 36, /*The maximum line height required by the font*/
.base_line = 1, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -3,
.underline_thickness = 2,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_46PX*/

View File

@ -0,0 +1,132 @@
/*******************************************************************************
* Size: 50 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_50px.c --bpp 4 --size 50 -r 0x30-0x39 -r 0x2d-0x2f -r 0x25 -r 0x3a
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_50PX
#define NUMBER_HARMONYOS_BPP4_50PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_50PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 45, .range_length = 14, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-35, -114, -74
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_50px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_50px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_50px = {
#else
lv_font_t Number_HarmonyOS_bpp4_50px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 39, /*The maximum line height required by the font*/
.base_line = 1, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -4,
.underline_thickness = 3,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_50PX*/

View File

@ -0,0 +1,132 @@
/*******************************************************************************
* Size: 62 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_62px.c --bpp 4 --size 62 -r 0x30-0x39 -r 0x2d-0x2f -r 0x3a -r 0x25
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_62PX
#define NUMBER_HARMONYOS_BPP4_62PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_62PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 45, .range_length = 14, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-37, -119, -77
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_62px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_62px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 19,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_62px = {
#else
lv_font_t Number_HarmonyOS_bpp4_62px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 47, /*The maximum line height required by the font*/
.base_line = 1, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -5,
.underline_thickness = 3,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_62PX*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,132 @@
/*******************************************************************************
* Size: 80 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_80px.c --bpp 4 --size 80 -r 0x30-0x39 -r 0x2d-0x2f -r 0x25 -r 0x3a
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_80PX
#define NUMBER_HARMONYOS_BPP4_80PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_80PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 45, .range_length = 14, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-36, -116, -75
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_80px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_80px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 25,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_80px = {
#else
lv_font_t Number_HarmonyOS_bpp4_80px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 62, /*The maximum line height required by the font*/
.base_line = 1, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -6,
.underline_thickness = 4,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_80PX*/

View File

@ -0,0 +1,132 @@
/*******************************************************************************
* Size: 92 px
* Bpp: 4
* Opts: --no-compress --format lvgl --font HarmonyOS_Sans_SC_Medium.ttf -o Number_HarmonyOS_bpp4_92px.c --bpp 4 --size 92 -r 0x30-0x39 -r 0x2d-0x2f -r 0x3a -r 0x25
******************************************************************************/
#ifdef LV_LVGL_H_INCLUDE_SIMPLE
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef NUMBER_HARMONYOS_BPP4_92PX
#define NUMBER_HARMONYOS_BPP4_92PX 1
#endif
#if NUMBER_HARMONYOS_BPP4_92PX
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
#include "bin_font.h"
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 37, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 45, .range_length = 14, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Pair left and right glyphs for kerning*/
static const uint8_t kern_pair_glyph_ids[] =
{
4, 2,
4, 3,
4, 4
};
/* Kerning between the respective left and right glyphs
* 4.4 format which needs to scaled with `kern_scale`*/
static const int8_t kern_pair_values[] =
{
-37, -119, -77
};
/*Collect the kern pair's data in one place*/
static const lv_font_fmt_txt_kern_pair_t kern_pairs =
{
.glyph_ids = kern_pair_glyph_ids,
.values = kern_pair_values,
.pair_cnt = 3,
.glyph_ids_size = 0
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = Number_HarmonyOS_bpp4_92px_glyph_bitmap,
.glyph_dsc = Number_HarmonyOS_bpp4_92px_glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_pairs,
.kern_scale = 28,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LVGL_VERSION_MAJOR >= 8
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t Number_HarmonyOS_bpp4_92px = {
#else
lv_font_t Number_HarmonyOS_bpp4_92px = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 70, /*The maximum line height required by the font*/
.base_line = 1, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -7,
.underline_thickness = 5,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if NUMBER_HARMONYOS_BPP4_92PX*/

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,282 @@
#if 1
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif
#ifndef LV_ATTRIBUTE_IMG_BATT_FULL_GREN
#define LV_ATTRIBUTE_IMG_BATT_FULL_GREN
#endif
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BATT_FULL_GREN uint8_t batt_full_gren_map[] = {
#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
/*Pixel format: Alpha 8 bit, Red: 3 bit, Green: 3 bit, Blue: 2 bit*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x24, 0x44, 0x24, 0x51, 0x25, 0x42, 0x25, 0x44, 0x25, 0x44, 0x25, 0x44, 0x25, 0x42, 0x24, 0x5d, 0x24, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x20, 0x24, 0x61, 0x00, 0x1f, 0x00, 0x1d, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x1a, 0x00, 0x40, 0x24, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0a, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x02, 0xdb, 0x60, 0xff, 0x71, 0xff, 0x66, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xfb, 0x77, 0x8e, 0x87, 0xb2, 0x61, 0xfb, 0x61, 0xdb, 0x61, 0xdb, 0x61, 0xfb, 0x61, 0xd7, 0x61, 0x8e, 0x6c, 0x92, 0x81, 0xff, 0x67, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xff, 0x64, 0xff, 0x64, 0xff, 0x67, 0xd7, 0x71, 0xb7, 0x40, 0x00, 0x00,
0xff, 0x02, 0xff, 0xba, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xf4, 0xdf, 0xec, 0xdf, 0xeb, 0xdf, 0xec, 0xdf, 0xec, 0xdf, 0xec, 0xdf, 0xe5, 0xff, 0xdf, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xe8, 0xff, 0xe1, 0xdf, 0xeb, 0xdf, 0xec, 0xdf, 0xec, 0xdf, 0xec, 0xdf, 0xec, 0xdf, 0xef, 0xbf, 0xf3, 0xdf, 0xfa, 0xfb, 0xf0, 0xff, 0x6f,
0xff, 0x72, 0x9a, 0xff, 0x31, 0xf7, 0x15, 0xfc, 0x15, 0xfc, 0x19, 0xfb, 0x19, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x9e, 0xfb, 0x9f, 0xfb, 0x9e, 0xfb, 0x9e, 0xfb, 0xbf, 0xfb, 0x7e, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfb, 0x1d, 0xfc, 0x1d, 0xf7, 0x3d, 0xf9, 0x9a, 0xe0,
0xbb, 0xde, 0x0c, 0xff, 0x10, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x9e, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x7e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf7,
0x31, 0xf6, 0x10, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf4,
0x11, 0xf2, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf0, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf1, 0x11, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x11, 0xf2, 0x10, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xf2,
0x55, 0xf1, 0x0c, 0xff, 0x15, 0xff, 0x15, 0xff, 0x19, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x3d, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x9e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xfe,
0xff, 0xbb, 0x31, 0xff, 0x10, 0xff, 0x14, 0xff, 0x18, 0xff, 0x19, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x9e, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0x9f, 0xff, 0xbf, 0xff, 0x7e, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x1d, 0xff, 0x59, 0xd9,
0xff, 0x3e, 0xdb, 0xff, 0x76, 0xfe, 0x76, 0xe7, 0x56, 0xd9, 0x56, 0xcb, 0x7a, 0xc6, 0x7a, 0xc8, 0x7a, 0xc8, 0x5a, 0xc8, 0x7a, 0xc8, 0x9a, 0xc8, 0xbb, 0xc8, 0x9a, 0xc8, 0x9a, 0xc8, 0xbb, 0xc8, 0x9a, 0xc8, 0x5a, 0xc8, 0x5a, 0xc8, 0x7a, 0xc8, 0x7a, 0xc8, 0x7a, 0xc8, 0x7a, 0xc8, 0x7a, 0xc7, 0x7a, 0xc9, 0x5a, 0xcd, 0x5a, 0xd2, 0x59, 0xd3, 0x55, 0xeb, 0xb7, 0xa9,
0x00, 0x00, 0xff, 0x6e, 0xff, 0xcc, 0xfb, 0xbe, 0xfb, 0xa7, 0xfb, 0x99, 0xfb, 0x95, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x96, 0xfb, 0x97, 0xf7, 0x9b, 0xf7, 0xa1, 0xd7, 0xb1, 0xd7, 0xa7, 0xff, 0x36,
#endif
#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP == 0
/*Pixel format: Alpha 8 bit, Red: 5 bit, Green: 6 bit, Blue: 5 bit*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe4, 0x20, 0x44, 0x04, 0x21, 0x51, 0x04, 0x21, 0x42, 0x04, 0x21, 0x44, 0x04, 0x21, 0x44, 0x04, 0x21, 0x44, 0x04, 0x21, 0x42, 0xe4, 0x20, 0x5d, 0xe4, 0x20, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x18, 0x20, 0xc3, 0x18, 0x61, 0x41, 0x08, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1a, 0x61, 0x08, 0x40, 0xe3, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x31, 0x0a, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0x18, 0xce, 0x60, 0xdd, 0xee, 0x71, 0x7f, 0xff, 0x66, 0x3e, 0xff, 0x63, 0x1e, 0xff, 0x63, 0x1e, 0xff, 0x63, 0xfe, 0xfe, 0x63, 0xff, 0xff, 0x63, 0x1a, 0xde, 0x77, 0x2e, 0x73, 0x87, 0x72, 0x9c, 0x61, 0x3a, 0xd6, 0x61, 0xd9, 0xcd, 0x61, 0xd8, 0xcd, 0x61, 0x1a, 0xd6, 0x61, 0x98, 0xcd, 0x61, 0x70, 0x8b, 0x6c, 0x91, 0x8b, 0x81, 0xfe, 0xfe, 0x67, 0xdf, 0xff, 0x63, 0xdd, 0xf6, 0x63, 0xfe, 0xfe, 0x63, 0xfe, 0xfe, 0x64, 0xfe, 0xf6, 0x64, 0x3f, 0xff, 0x67, 0x17, 0xbd, 0x71, 0x35, 0xad, 0x40, 0x00, 0x00, 0x00,
0xff, 0xff, 0x02, 0xff, 0xff, 0xba, 0x5d, 0xef, 0xff, 0xb8, 0xc6, 0xff, 0xb8, 0xbe, 0xf4, 0xd8, 0xc6, 0xec, 0xf9, 0xbe, 0xeb, 0xf8, 0xc6, 0xec, 0xf8, 0xc6, 0xec, 0xf8, 0xbe, 0xec, 0x9b, 0xd7, 0xe5, 0xff, 0xf7, 0xdf, 0xff, 0xf7, 0xec, 0xdd, 0xef, 0xec, 0xdd, 0xef, 0xec, 0xde, 0xef, 0xec, 0xdd, 0xe7, 0xec, 0xfc, 0xdf, 0xec, 0xfe, 0xe7, 0xe8, 0xfd, 0xe7, 0xe1, 0x7a, 0xcf, 0xeb, 0xf8, 0xbe, 0xec, 0x19, 0xc7, 0xec, 0x19, 0xc7, 0xec, 0xf8, 0xc6, 0xec, 0xd8, 0xbe, 0xef, 0xb7, 0xb6, 0xf3, 0xf8, 0xbe, 0xfa, 0x5a, 0xde, 0xf0, 0xdf, 0xfe, 0x6f,
0xff, 0xff, 0x72, 0x91, 0x7d, 0xff, 0x85, 0x1c, 0xf7, 0xc4, 0x04, 0xfc, 0x66, 0x05, 0xfc, 0xe6, 0x05, 0xfb, 0x87, 0x06, 0xfb, 0xe7, 0x06, 0xfb, 0x48, 0x0f, 0xfb, 0x87, 0x07, 0xfb, 0x89, 0x17, 0xfb, 0xd4, 0x87, 0xfb, 0xd5, 0x8f, 0xfb, 0xd4, 0x87, 0xfb, 0xd4, 0x87, 0xfb, 0xd5, 0x97, 0xfb, 0xb2, 0x6f, 0xfb, 0x87, 0x07, 0xfb, 0x88, 0x07, 0xfb, 0x88, 0x0f, 0xfb, 0x88, 0x0f, 0xfb, 0x88, 0x0f, 0xfb, 0x88, 0x0f, 0xfb, 0x88, 0x0f, 0xfb, 0x88, 0x0f, 0xfb, 0x88, 0x07, 0xfb, 0x88, 0x07, 0xfc, 0xa8, 0x07, 0xf7, 0x09, 0x27, 0xf9, 0x13, 0x8e, 0xe0,
0x14, 0x9e, 0xde, 0x20, 0x03, 0xff, 0x42, 0x04, 0xff, 0x05, 0x05, 0xff, 0x86, 0x05, 0xff, 0x06, 0x06, 0xff, 0x87, 0x06, 0xff, 0x07, 0x07, 0xff, 0x68, 0x07, 0xff, 0xa7, 0x07, 0xff, 0xc9, 0x0f, 0xff, 0xf4, 0x87, 0xff, 0xf5, 0x97, 0xff, 0xf4, 0x8f, 0xff, 0xf4, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xf2, 0x6f, 0xff, 0xa7, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xa8, 0x07, 0xff, 0xc8, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xa7, 0x07, 0xf7,
0x26, 0x14, 0xf6, 0xa2, 0x03, 0xff, 0xa6, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x17, 0xff, 0xa8, 0x0f, 0xf4,
0x04, 0x04, 0xf2, 0x05, 0x04, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf0, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x25, 0x0c, 0xf1, 0x04, 0x04, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0x04, 0x0c, 0xf2, 0xe4, 0x03, 0xff, 0x85, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xf2,
0xcc, 0x4c, 0xf1, 0x60, 0x03, 0xff, 0xa6, 0x0c, 0xff, 0x06, 0x0d, 0xff, 0x87, 0x0d, 0xff, 0x07, 0x0e, 0xff, 0x88, 0x0e, 0xff, 0x08, 0x0f, 0xff, 0x69, 0x0f, 0xff, 0xa8, 0x07, 0xff, 0xaa, 0x17, 0xff, 0xd4, 0x87, 0xff, 0xd5, 0x97, 0xff, 0xd5, 0x8f, 0xff, 0xd5, 0x8f, 0xff, 0xf6, 0x9f, 0xff, 0xd2, 0x77, 0xff, 0xa8, 0x0f, 0xff, 0xa8, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x0f, 0xff, 0xa9, 0x17, 0xff, 0xc9, 0x0f, 0xff, 0xe8, 0x07, 0xfe,
0x1c, 0xe7, 0xbb, 0x05, 0x14, 0xff, 0x00, 0x04, 0xff, 0xe3, 0x04, 0xff, 0xa4, 0x05, 0xff, 0x44, 0x06, 0xff, 0xc5, 0x06, 0xff, 0x46, 0x07, 0xff, 0xc6, 0x07, 0xff, 0xe5, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xf4, 0x7f, 0xff, 0xf5, 0x8f, 0xff, 0xf4, 0x87, 0xff, 0xf4, 0x87, 0xff, 0xf6, 0x97, 0xff, 0xf2, 0x6f, 0xff, 0xe6, 0x07, 0xff, 0xe6, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe7, 0x07, 0xff, 0xe6, 0x07, 0xff, 0x4b, 0x36, 0xd9,
0xff, 0xff, 0x3e, 0x79, 0xc6, 0xff, 0x2f, 0x75, 0xfe, 0x2d, 0x5d, 0xe7, 0x2d, 0x55, 0xd9, 0x4d, 0x55, 0xcb, 0xad, 0x55, 0xc6, 0xee, 0x55, 0xc8, 0x2e, 0x56, 0xc8, 0x2d, 0x4e, 0xc8, 0x2e, 0x5e, 0xc8, 0x53, 0x96, 0xc8, 0x54, 0x9e, 0xc8, 0x54, 0x96, 0xc8, 0x54, 0x96, 0xc8, 0x54, 0x9e, 0xc8, 0x53, 0x86, 0xc8, 0x2e, 0x56, 0xc8, 0x2e, 0x56, 0xc8, 0x2e, 0x56, 0xc8, 0x2e, 0x56, 0xc8, 0x2e, 0x56, 0xc8, 0x2e, 0x56, 0xc8, 0x2e, 0x56, 0xc7, 0x2e, 0x56, 0xc9, 0x0d, 0x4e, 0xcd, 0xcc, 0x45, 0xd2, 0xcc, 0x45, 0xd3, 0xaa, 0x44, 0xeb, 0xb5, 0xac, 0xa9,
0x00, 0x00, 0x00, 0xdf, 0xff, 0x6e, 0xde, 0xf6, 0xcc, 0x7c, 0xee, 0xbe, 0x1b, 0xe6, 0xa7, 0xfb, 0xe5, 0x99, 0xfb, 0xe5, 0x95, 0xfb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xb9, 0xcd, 0x96, 0xb8, 0xcd, 0x96, 0xb9, 0xcd, 0x96, 0xb9, 0xcd, 0x96, 0xb8, 0xcd, 0x96, 0xb9, 0xd5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xdb, 0xe5, 0x96, 0xbb, 0xe5, 0x97, 0x9a, 0xdd, 0x9b, 0x59, 0xdd, 0xa1, 0xd7, 0xc4, 0xb1, 0xf7, 0xc4, 0xa7, 0xbf, 0xff, 0x36,
#endif
#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP != 0
/*Pixel format: Alpha 8 bit, Red: 5 bit, Green: 6 bit, Blue: 5 bit BUT the 2 color bytes are swapped*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x20, 0xe4, 0x44, 0x21, 0x04, 0x51, 0x21, 0x04, 0x42, 0x21, 0x04, 0x44, 0x21, 0x04, 0x44, 0x21, 0x04, 0x44, 0x21, 0x04, 0x42, 0x20, 0xe4, 0x5d, 0x20, 0xe4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x20, 0x18, 0xc3, 0x61, 0x08, 0x41, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1a, 0x08, 0x61, 0x40, 0x18, 0xe3, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xa6, 0x0a, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0xce, 0x18, 0x60, 0xee, 0xdd, 0x71, 0xff, 0x7f, 0x66, 0xff, 0x3e, 0x63, 0xff, 0x1e, 0x63, 0xff, 0x1e, 0x63, 0xfe, 0xfe, 0x63, 0xff, 0xff, 0x63, 0xde, 0x1a, 0x77, 0x73, 0x2e, 0x87, 0x9c, 0x72, 0x61, 0xd6, 0x3a, 0x61, 0xcd, 0xd9, 0x61, 0xcd, 0xd8, 0x61, 0xd6, 0x1a, 0x61, 0xcd, 0x98, 0x61, 0x8b, 0x70, 0x6c, 0x8b, 0x91, 0x81, 0xfe, 0xfe, 0x67, 0xff, 0xdf, 0x63, 0xf6, 0xdd, 0x63, 0xfe, 0xfe, 0x63, 0xfe, 0xfe, 0x64, 0xf6, 0xfe, 0x64, 0xff, 0x3f, 0x67, 0xbd, 0x17, 0x71, 0xad, 0x35, 0x40, 0x00, 0x00, 0x00,
0xff, 0xff, 0x02, 0xff, 0xff, 0xba, 0xef, 0x5d, 0xff, 0xc6, 0xb8, 0xff, 0xbe, 0xb8, 0xf4, 0xc6, 0xd8, 0xec, 0xbe, 0xf9, 0xeb, 0xc6, 0xf8, 0xec, 0xc6, 0xf8, 0xec, 0xbe, 0xf8, 0xec, 0xd7, 0x9b, 0xe5, 0xf7, 0xff, 0xdf, 0xf7, 0xff, 0xec, 0xef, 0xdd, 0xec, 0xef, 0xdd, 0xec, 0xef, 0xde, 0xec, 0xe7, 0xdd, 0xec, 0xdf, 0xfc, 0xec, 0xe7, 0xfe, 0xe8, 0xe7, 0xfd, 0xe1, 0xcf, 0x7a, 0xeb, 0xbe, 0xf8, 0xec, 0xc7, 0x19, 0xec, 0xc7, 0x19, 0xec, 0xc6, 0xf8, 0xec, 0xbe, 0xd8, 0xef, 0xb6, 0xb7, 0xf3, 0xbe, 0xf8, 0xfa, 0xde, 0x5a, 0xf0, 0xfe, 0xdf, 0x6f,
0xff, 0xff, 0x72, 0x7d, 0x91, 0xff, 0x1c, 0x85, 0xf7, 0x04, 0xc4, 0xfc, 0x05, 0x66, 0xfc, 0x05, 0xe6, 0xfb, 0x06, 0x87, 0xfb, 0x06, 0xe7, 0xfb, 0x0f, 0x48, 0xfb, 0x07, 0x87, 0xfb, 0x17, 0x89, 0xfb, 0x87, 0xd4, 0xfb, 0x8f, 0xd5, 0xfb, 0x87, 0xd4, 0xfb, 0x87, 0xd4, 0xfb, 0x97, 0xd5, 0xfb, 0x6f, 0xb2, 0xfb, 0x07, 0x87, 0xfb, 0x07, 0x88, 0xfb, 0x0f, 0x88, 0xfb, 0x0f, 0x88, 0xfb, 0x0f, 0x88, 0xfb, 0x0f, 0x88, 0xfb, 0x0f, 0x88, 0xfb, 0x0f, 0x88, 0xfb, 0x07, 0x88, 0xfb, 0x07, 0x88, 0xfc, 0x07, 0xa8, 0xf7, 0x27, 0x09, 0xf9, 0x8e, 0x13, 0xe0,
0x9e, 0x14, 0xde, 0x03, 0x20, 0xff, 0x04, 0x42, 0xff, 0x05, 0x05, 0xff, 0x05, 0x86, 0xff, 0x06, 0x06, 0xff, 0x06, 0x87, 0xff, 0x07, 0x07, 0xff, 0x07, 0x68, 0xff, 0x07, 0xa7, 0xff, 0x0f, 0xc9, 0xff, 0x87, 0xf4, 0xff, 0x97, 0xf5, 0xff, 0x8f, 0xf4, 0xff, 0x8f, 0xf4, 0xff, 0x9f, 0xf6, 0xff, 0x6f, 0xf2, 0xff, 0x07, 0xa7, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xa8, 0xff, 0x07, 0xc8, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xa7, 0xf7,
0x14, 0x26, 0xf6, 0x03, 0xa2, 0xff, 0x0c, 0xa6, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x17, 0xa9, 0xff, 0x0f, 0xa8, 0xf4,
0x04, 0x04, 0xf2, 0x04, 0x05, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf0, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x25, 0xf1, 0x04, 0x04, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x0c, 0x04, 0xf2, 0x03, 0xe4, 0xff, 0x0c, 0x85, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xf2,
0x4c, 0xcc, 0xf1, 0x03, 0x60, 0xff, 0x0c, 0xa6, 0xff, 0x0d, 0x06, 0xff, 0x0d, 0x87, 0xff, 0x0e, 0x07, 0xff, 0x0e, 0x88, 0xff, 0x0f, 0x08, 0xff, 0x0f, 0x69, 0xff, 0x07, 0xa8, 0xff, 0x17, 0xaa, 0xff, 0x87, 0xd4, 0xff, 0x97, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x8f, 0xd5, 0xff, 0x9f, 0xf6, 0xff, 0x77, 0xd2, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa8, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x0f, 0xa9, 0xff, 0x17, 0xa9, 0xff, 0x0f, 0xc9, 0xff, 0x07, 0xe8, 0xfe,
0xe7, 0x1c, 0xbb, 0x14, 0x05, 0xff, 0x04, 0x00, 0xff, 0x04, 0xe3, 0xff, 0x05, 0xa4, 0xff, 0x06, 0x44, 0xff, 0x06, 0xc5, 0xff, 0x07, 0x46, 0xff, 0x07, 0xc6, 0xff, 0x07, 0xe5, 0xff, 0x07, 0xe7, 0xff, 0x7f, 0xf4, 0xff, 0x8f, 0xf5, 0xff, 0x87, 0xf4, 0xff, 0x87, 0xf4, 0xff, 0x97, 0xf6, 0xff, 0x6f, 0xf2, 0xff, 0x07, 0xe6, 0xff, 0x07, 0xe6, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe7, 0xff, 0x07, 0xe6, 0xff, 0x36, 0x4b, 0xd9,
0xff, 0xff, 0x3e, 0xc6, 0x79, 0xff, 0x75, 0x2f, 0xfe, 0x5d, 0x2d, 0xe7, 0x55, 0x2d, 0xd9, 0x55, 0x4d, 0xcb, 0x55, 0xad, 0xc6, 0x55, 0xee, 0xc8, 0x56, 0x2e, 0xc8, 0x4e, 0x2d, 0xc8, 0x5e, 0x2e, 0xc8, 0x96, 0x53, 0xc8, 0x9e, 0x54, 0xc8, 0x96, 0x54, 0xc8, 0x96, 0x54, 0xc8, 0x9e, 0x54, 0xc8, 0x86, 0x53, 0xc8, 0x56, 0x2e, 0xc8, 0x56, 0x2e, 0xc8, 0x56, 0x2e, 0xc8, 0x56, 0x2e, 0xc8, 0x56, 0x2e, 0xc8, 0x56, 0x2e, 0xc8, 0x56, 0x2e, 0xc7, 0x56, 0x2e, 0xc9, 0x4e, 0x0d, 0xcd, 0x45, 0xcc, 0xd2, 0x45, 0xcc, 0xd3, 0x44, 0xaa, 0xeb, 0xac, 0xb5, 0xa9,
0x00, 0x00, 0x00, 0xff, 0xdf, 0x6e, 0xf6, 0xde, 0xcc, 0xee, 0x7c, 0xbe, 0xe6, 0x1b, 0xa7, 0xe5, 0xfb, 0x99, 0xe5, 0xfb, 0x95, 0xe5, 0xfb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xcd, 0xb9, 0x96, 0xcd, 0xb8, 0x96, 0xcd, 0xb9, 0x96, 0xcd, 0xb9, 0x96, 0xcd, 0xb8, 0x96, 0xd5, 0xb9, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xdb, 0x96, 0xe5, 0xbb, 0x97, 0xdd, 0x9a, 0x9b, 0xdd, 0x59, 0xa1, 0xc4, 0xd7, 0xb1, 0xc4, 0xf7, 0xa7, 0xff, 0xbf, 0x36,
#endif
#if LV_COLOR_DEPTH == 32
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1e, 0x1e, 0x1e, 0x44, 0x1f, 0x1f, 0x1f, 0x51, 0x22, 0x22, 0x22, 0x42, 0x21, 0x21, 0x21, 0x44, 0x21, 0x21, 0x21, 0x44, 0x21, 0x21, 0x21, 0x44, 0x22, 0x22, 0x22, 0x42, 0x1e, 0x1e, 0x1e, 0x5d, 0x1e, 0x1e, 0x1e, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x17, 0x17, 0x20, 0x1a, 0x1a, 0x1a, 0x61, 0x08, 0x08, 0x08, 0x1f, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1a, 0x0b, 0x0b, 0x0b, 0x40, 0x1c, 0x1c, 0x1c, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x0a, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x02, 0xc4, 0xbf, 0xc7, 0x60, 0xe8, 0xda, 0xec, 0x71, 0xfa, 0xeb, 0xff, 0x66, 0xf2, 0xe5, 0xf9, 0x63, 0xf2, 0xe2, 0xf9, 0x63, 0xf2, 0xe0, 0xf7, 0x63, 0xf2, 0xdd, 0xf7, 0x63, 0xff, 0xff, 0xff, 0x63, 0xd2, 0xc0, 0xd8, 0x77, 0x71, 0x66, 0x73, 0x87, 0x93, 0x8b, 0x95, 0x61, 0xcd, 0xc5, 0xd2, 0x61, 0xc5, 0xba, 0xc7, 0x61, 0xc2, 0xb8, 0xc5, 0x61, 0xcd, 0xc2, 0xd2, 0x61, 0xc2, 0xb0, 0xca, 0x61, 0x81, 0x6e, 0x88, 0x6c, 0x86, 0x72, 0x8c, 0x81, 0xf0, 0xde, 0xf7, 0x67, 0xff, 0xf7, 0xff, 0x63, 0xec, 0xda, 0xf4, 0x63, 0xf2, 0xdd, 0xf7, 0x63, 0xf2, 0xdd, 0xf7, 0x64, 0xef, 0xdb, 0xf4, 0x64, 0xfa, 0xe6, 0xff, 0x67, 0xb6, 0xa2, 0xbb, 0x71, 0xab, 0xa3, 0xab, 0x40, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x02, 0xff, 0xfd, 0xff, 0xba, 0xea, 0xea, 0xea, 0xff, 0xc3, 0xd6, 0xc0, 0xff, 0xc2, 0xd5, 0xbb, 0xf4, 0xc3, 0xd8, 0xbd, 0xec, 0xc5, 0xdb, 0xbc, 0xeb, 0xc4, 0xdd, 0xbd, 0xec, 0xc4, 0xdd, 0xbd, 0xec, 0xc2, 0xdc, 0xb7, 0xec, 0xd9, 0xf1, 0xd0, 0xe5, 0xf9, 0xfe, 0xf3, 0xdf, 0xf8, 0xff, 0xf4, 0xec, 0xea, 0xf8, 0xe6, 0xec, 0xeb, 0xf9, 0xe8, 0xec, 0xed, 0xf9, 0xea, 0xec, 0xe8, 0xf8, 0xe1, 0xec, 0xe1, 0xfc, 0xd9, 0xec, 0xed, 0xff, 0xe3, 0xe8, 0xea, 0xff, 0xe1, 0xe1, 0xd2, 0xeb, 0xc8, 0xeb, 0xc1, 0xdb, 0xb8, 0xec, 0xc5, 0xdf, 0xbd, 0xec, 0xc5, 0xdf, 0xbd, 0xec, 0xc4, 0xde, 0xbd, 0xec, 0xc2, 0xda, 0xb7, 0xef, 0xb7, 0xd5, 0xaf, 0xf3, 0xc0, 0xdb, 0xb9, 0xfa, 0xd4, 0xc7, 0xd8, 0xf0, 0xf5, 0xda, 0xff, 0x6f,
0xff, 0xff, 0xff, 0x72, 0x8a, 0xb1, 0x79, 0xff, 0x2c, 0x8f, 0x18, 0xf7, 0x22, 0x99, 0x00, 0xfc, 0x2d, 0xae, 0x01, 0xfc, 0x32, 0xbe, 0x03, 0xfb, 0x37, 0xcf, 0x03, 0xfb, 0x3c, 0xde, 0x04, 0xfb, 0x40, 0xea, 0x05, 0xfb, 0x39, 0xf1, 0x00, 0xfb, 0x49, 0xf2, 0x0d, 0xfb, 0x9d, 0xf8, 0x7d, 0xfb, 0xa6, 0xf7, 0x8c, 0xfb, 0x9f, 0xf7, 0x82, 0xfb, 0x9f, 0xf7, 0x82, 0xfb, 0xac, 0xf8, 0x93, 0xfb, 0x8e, 0xf6, 0x6a, 0xfb, 0x3c, 0xf1, 0x00, 0xfb, 0x3d, 0xf1, 0x00, 0xfb, 0x43, 0xf1, 0x05, 0xfb, 0x42, 0xf1, 0x05, 0xfb, 0x42, 0xf1, 0x05, 0xfb, 0x42, 0xf1, 0x05, 0xfb, 0x42, 0xf1, 0x05, 0xfb, 0x42, 0xf1, 0x05, 0xfb, 0x42, 0xf0, 0x04, 0xfb, 0x3f, 0xf1, 0x02, 0xfc, 0x3d, 0xf3, 0x02, 0xf7, 0x4b, 0xe1, 0x1e, 0xf9, 0x98, 0xc1, 0x8a, 0xe0,
0xa3, 0xbf, 0x98, 0xde, 0x00, 0x66, 0x00, 0xff, 0x12, 0x87, 0x00, 0xff, 0x2a, 0xa0, 0x00, 0xff, 0x2d, 0xb0, 0x00, 0xff, 0x31, 0xc1, 0x00, 0xff, 0x36, 0xd2, 0x00, 0xff, 0x3c, 0xe1, 0x01, 0xff, 0x3f, 0xee, 0x02, 0xff, 0x39, 0xf6, 0x00, 0xff, 0x47, 0xf7, 0x0a, 0xff, 0x9f, 0xfc, 0x7f, 0xff, 0xaa, 0xfc, 0x8e, 0xff, 0xa3, 0xfc, 0x85, 0xff, 0xa3, 0xfc, 0x85, 0xff, 0xb0, 0xfd, 0x95, 0xff, 0x90, 0xfb, 0x6c, 0xff, 0x3c, 0xf6, 0x00, 0xff, 0x3d, 0xf6, 0x00, 0xff, 0x41, 0xf6, 0x02, 0xff, 0x41, 0xf6, 0x02, 0xff, 0x41, 0xf6, 0x02, 0xff, 0x41, 0xf6, 0x02, 0xff, 0x41, 0xf6, 0x02, 0xff, 0x41, 0xf6, 0x02, 0xff, 0x41, 0xf6, 0x02, 0xff, 0x42, 0xf6, 0x03, 0xff, 0x43, 0xf7, 0x03, 0xff, 0x36, 0xff, 0x00, 0xff, 0x3c, 0xf6, 0x00, 0xf7,
0x30, 0x83, 0x13, 0xf6, 0x0f, 0x76, 0x00, 0xff, 0x2d, 0x93, 0x08, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x4a, 0xf3, 0x0e, 0xff, 0x43, 0xf5, 0x05, 0xf4,
0x23, 0x81, 0x03, 0xf2, 0x26, 0x80, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe1, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe1, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2c, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe1, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2c, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe1, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe1, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe1, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb1, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x2b, 0x85, 0x0c, 0xf0, 0x22, 0x7e, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x28, 0x84, 0x08, 0xf1, 0x24, 0x7f, 0x02, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe1, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0b, 0xf2,
0x24, 0x80, 0x05, 0xf2, 0x1f, 0x7e, 0x01, 0xff, 0x2b, 0x92, 0x07, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x47, 0xf4, 0x0a, 0xf2,
0x5e, 0x99, 0x49, 0xf1, 0x00, 0x6d, 0x00, 0xff, 0x2d, 0x93, 0x06, 0xff, 0x30, 0xa1, 0x08, 0xff, 0x35, 0xb2, 0x09, 0xff, 0x39, 0xc2, 0x0a, 0xff, 0x3e, 0xd2, 0x0a, 0xff, 0x43, 0xe0, 0x0b, 0xff, 0x46, 0xed, 0x0c, 0xff, 0x40, 0xf4, 0x02, 0xff, 0x4e, 0xf5, 0x14, 0xff, 0xa1, 0xfa, 0x83, 0xff, 0xac, 0xfa, 0x91, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xa5, 0xfa, 0x88, 0xff, 0xb1, 0xfb, 0x98, 0xff, 0x93, 0xf9, 0x71, 0xff, 0x43, 0xf4, 0x06, 0xff, 0x44, 0xf4, 0x07, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf4, 0x0c, 0xff, 0x48, 0xf3, 0x0d, 0xff, 0x49, 0xf7, 0x0c, 0xff, 0x3f, 0xff, 0x00, 0xfe,
0xe2, 0xe2, 0xdf, 0xbb, 0x27, 0x7f, 0x12, 0xff, 0x00, 0x80, 0x00, 0xff, 0x15, 0x9c, 0x00, 0xff, 0x1f, 0xb3, 0x00, 0xff, 0x24, 0xc7, 0x00, 0xff, 0x29, 0xd9, 0x00, 0xff, 0x2f, 0xea, 0x00, 0xff, 0x33, 0xf9, 0x00, 0xff, 0x2c, 0xff, 0x00, 0xff, 0x3c, 0xff, 0x00, 0xff, 0x9f, 0xff, 0x7b, 0xff, 0xac, 0xff, 0x8c, 0xff, 0xa4, 0xff, 0x81, 0xff, 0xa4, 0xff, 0x81, 0xff, 0xb2, 0xff, 0x94, 0xff, 0x8e, 0xff, 0x66, 0xff, 0x2f, 0xff, 0x00, 0xff, 0x30, 0xff, 0x00, 0xff, 0x35, 0xff, 0x00, 0xff, 0x35, 0xff, 0x00, 0xff, 0x35, 0xff, 0x00, 0xff, 0x35, 0xff, 0x00, 0xff, 0x35, 0xff, 0x00, 0xff, 0x35, 0xff, 0x00, 0xff, 0x37, 0xff, 0x00, 0xff, 0x39, 0xff, 0x00, 0xff, 0x39, 0xff, 0x00, 0xff, 0x34, 0xff, 0x00, 0xff, 0x59, 0xca, 0x31, 0xd9,
0xff, 0xff, 0xff, 0x3e, 0xc8, 0xcb, 0xc3, 0xff, 0x75, 0xa4, 0x6f, 0xfe, 0x66, 0xa3, 0x57, 0xe7, 0x66, 0xa4, 0x4f, 0xd9, 0x65, 0xa9, 0x4d, 0xcb, 0x6a, 0xb5, 0x51, 0xc6, 0x6d, 0xbc, 0x51, 0xc8, 0x6e, 0xc3, 0x51, 0xc8, 0x6c, 0xc5, 0x4c, 0xc8, 0x72, 0xc6, 0x55, 0xc8, 0x9c, 0xc9, 0x8d, 0xc8, 0xa1, 0xc9, 0x95, 0xc8, 0x9f, 0xc9, 0x90, 0xc8, 0x9f, 0xc9, 0x90, 0xc8, 0xa4, 0xc9, 0x97, 0xc8, 0x96, 0xc9, 0x84, 0xc8, 0x6d, 0xc5, 0x4f, 0xc8, 0x6d, 0xc5, 0x50, 0xc8, 0x70, 0xc5, 0x51, 0xc8, 0x70, 0xc5, 0x51, 0xc8, 0x70, 0xc5, 0x51, 0xc8, 0x70, 0xc5, 0x51, 0xc8, 0x70, 0xc6, 0x53, 0xc7, 0x6e, 0xc4, 0x51, 0xc9, 0x68, 0xbf, 0x4a, 0xcd, 0x62, 0xb9, 0x44, 0xd2, 0x5e, 0xb7, 0x3d, 0xd3, 0x54, 0x93, 0x41, 0xeb, 0xa5, 0x93, 0xac, 0xa9,
0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0xff, 0x6e, 0xed, 0xd9, 0xf1, 0xcc, 0xe4, 0xce, 0xea, 0xbe, 0xda, 0xc1, 0xe1, 0xa7, 0xd5, 0xbc, 0xdf, 0x99, 0xd9, 0xbc, 0xe3, 0x95, 0xd7, 0xbb, 0xe3, 0x96, 0xd6, 0xb7, 0xe2, 0x96, 0xd7, 0xb7, 0xe3, 0x96, 0xd6, 0xb7, 0xe0, 0x96, 0xc5, 0xb5, 0xcc, 0x96, 0xc3, 0xb5, 0xc8, 0x96, 0xc5, 0xb5, 0xca, 0x96, 0xc5, 0xb5, 0xca, 0x96, 0xc3, 0xb5, 0xc8, 0x96, 0xc8, 0xb5, 0xcf, 0x96, 0xd7, 0xb7, 0xe3, 0x96, 0xd7, 0xb7, 0xe3, 0x96, 0xd6, 0xb7, 0xe2, 0x96, 0xd6, 0xb7, 0xe2, 0x96, 0xd6, 0xb7, 0xe2, 0x96, 0xd6, 0xb7, 0xe2, 0x96, 0xd7, 0xb7, 0xe3, 0x96, 0xd6, 0xb6, 0xe0, 0x97, 0xcf, 0xb0, 0xda, 0x9b, 0xca, 0xa9, 0xd5, 0xa1, 0xb8, 0x97, 0xc3, 0xb1, 0xb8, 0x9b, 0xc1, 0xa7, 0xfa, 0xf5, 0xfa, 0x36,
#endif
};
const lv_img_dsc_t batt_full_gren = {
.header.always_zero = 0,
.header.w = 30,
.header.h = 62,
.data_size = 1860 * LV_IMG_PX_SIZE_ALPHA_BYTE,
.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,
.data = batt_full_gren_map,
};

View File

@ -0,0 +1,282 @@
#if 1
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif
#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif
#ifndef LV_ATTRIBUTE_IMG_BATT_FULL_YELLOW
#define LV_ATTRIBUTE_IMG_BATT_FULL_YELLOW
#endif
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_BATT_FULL_YELLOW uint8_t batt_full_yellow_map[] = {
#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8
/*Pixel format: Alpha 8 bit, Red: 3 bit, Green: 3 bit, Blue: 2 bit*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x24, 0x44, 0x24, 0x51, 0x25, 0x42, 0x25, 0x44, 0x25, 0x44, 0x25, 0x44, 0x25, 0x42, 0x24, 0x5d, 0x24, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x20, 0x24, 0x61, 0x00, 0x1f, 0x00, 0x1d, 0x00, 0x21, 0x00, 0x21, 0x00, 0x21, 0x00, 0x1a, 0x00, 0x40, 0x24, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0a, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x02, 0xdb, 0x60, 0xff, 0x71, 0xff, 0x66, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xdb, 0x77, 0x6e, 0x87, 0x92, 0x61, 0xdb, 0x61, 0xdb, 0x61, 0xdb, 0x61, 0xdb, 0x61, 0xbb, 0x61, 0x72, 0x6c, 0x92, 0x81, 0xff, 0x67, 0xff, 0x63, 0xff, 0x63, 0xff, 0x63, 0xff, 0x64, 0xff, 0x64, 0xff, 0x67, 0xb7, 0x71, 0xb7, 0x40, 0x00, 0x00,
0xff, 0x02, 0xff, 0xba, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf4, 0xff, 0xec, 0xff, 0xeb, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xe5, 0xff, 0xdf, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xe8, 0xff, 0xe1, 0xff, 0xeb, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xec, 0xff, 0xef, 0xfb, 0xf3, 0xff, 0xfa, 0xdb, 0xf0, 0xff, 0x6f,
0xff, 0x72, 0xd6, 0xff, 0x90, 0xf7, 0xb0, 0xfc, 0xb0, 0xfc, 0xd4, 0xfb, 0xd4, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xfe, 0xfb, 0xfe, 0xfb, 0xfe, 0xfb, 0xfe, 0xfb, 0xfe, 0xfb, 0xfe, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfb, 0xf8, 0xfc, 0xf8, 0xf7, 0xf8, 0xf9, 0xda, 0xe0,
0xda, 0xde, 0x68, 0xff, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf7,
0x8c, 0xf6, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf4,
0x8c, 0xf2, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf0, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf1, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0x8c, 0xf2, 0x8c, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xf2,
0xb1, 0xf1, 0x68, 0xff, 0xb0, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xfe,
0xff, 0xbb, 0x8c, 0xff, 0x8c, 0xff, 0xb0, 0xff, 0xd0, 0xff, 0xd4, 0xff, 0xf4, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xfc, 0xff, 0xf8, 0xff, 0xd5, 0xd9,
0xff, 0x3e, 0xdb, 0xff, 0xb6, 0xfe, 0xb5, 0xe7, 0xb5, 0xd9, 0xb5, 0xcb, 0xd5, 0xc6, 0xd5, 0xc8, 0xd5, 0xc8, 0xd5, 0xc8, 0xd5, 0xc8, 0xda, 0xc8, 0xda, 0xc8, 0xda, 0xc8, 0xda, 0xc8, 0xda, 0xc8, 0xda, 0xc8, 0xd5, 0xc8, 0xd5, 0xc8, 0xd5, 0xc8, 0xd5, 0xc8, 0xd5, 0xc8, 0xd5, 0xc8, 0xd5, 0xc7, 0xd5, 0xc9, 0xd5, 0xcd, 0xd5, 0xd2, 0xd5, 0xd3, 0xb1, 0xeb, 0xb7, 0xa9,
0x00, 0x00, 0xff, 0x6e, 0xff, 0xcc, 0xdf, 0xbe, 0xdb, 0xa7, 0xdb, 0x99, 0xdb, 0x95, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x96, 0xdb, 0x97, 0xbb, 0x9b, 0xbb, 0xa1, 0xb7, 0xb1, 0xb7, 0xa7, 0xff, 0x36,
#endif
#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP == 0
/*Pixel format: Alpha 8 bit, Red: 5 bit, Green: 6 bit, Blue: 5 bit*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe4, 0x20, 0x44, 0x04, 0x21, 0x51, 0x04, 0x21, 0x42, 0x04, 0x21, 0x44, 0x04, 0x21, 0x44, 0x04, 0x21, 0x44, 0x04, 0x21, 0x42, 0xe4, 0x20, 0x5d, 0xe4, 0x20, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x18, 0x20, 0xc3, 0x18, 0x61, 0x41, 0x08, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1a, 0x61, 0x08, 0x40, 0xe3, 0x18, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x31, 0x0a, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0x19, 0xc6, 0x60, 0x1d, 0xdf, 0x71, 0x9f, 0xef, 0x66, 0x5f, 0xef, 0x63, 0x5f, 0xe7, 0x63, 0x3f, 0xe7, 0x63, 0x1f, 0xe7, 0x63, 0xff, 0xff, 0x63, 0x3b, 0xc6, 0x77, 0x4e, 0x6b, 0x87, 0x73, 0x8c, 0x61, 0x5a, 0xce, 0x61, 0xf9, 0xbd, 0x61, 0xf9, 0xbd, 0x61, 0x3a, 0xc6, 0x61, 0x99, 0xb5, 0x61, 0xb1, 0x73, 0x6c, 0xd1, 0x73, 0x81, 0x3f, 0xe7, 0x67, 0xff, 0xff, 0x63, 0x1e, 0xdf, 0x63, 0x1f, 0xe7, 0x63, 0x1f, 0xe7, 0x64, 0x1e, 0xdf, 0x64, 0x7f, 0xef, 0x67, 0x38, 0xa5, 0x71, 0x35, 0xa5, 0x40, 0x00, 0x00, 0x00,
0xff, 0xff, 0x02, 0xff, 0xff, 0xba, 0x5d, 0xef, 0xff, 0x98, 0xde, 0xff, 0x97, 0xde, 0xf4, 0x98, 0xde, 0xec, 0xb7, 0xde, 0xeb, 0xd8, 0xe6, 0xec, 0xd8, 0xe6, 0xec, 0xb7, 0xde, 0xec, 0x5a, 0xf7, 0xe5, 0xfe, 0xff, 0xdf, 0xfe, 0xff, 0xec, 0xbd, 0xff, 0xec, 0xbd, 0xff, 0xec, 0xdd, 0xff, 0xec, 0xbc, 0xff, 0xec, 0xbb, 0xff, 0xec, 0xfc, 0xff, 0xe8, 0xfc, 0xff, 0xe1, 0x39, 0xef, 0xeb, 0xb7, 0xde, 0xec, 0xd8, 0xe6, 0xec, 0xd8, 0xe6, 0xec, 0xd8, 0xe6, 0xec, 0xb7, 0xde, 0xef, 0x76, 0xde, 0xf3, 0xb7, 0xde, 0xfa, 0x5b, 0xce, 0xf0, 0x1f, 0xdf, 0x6f,
0xff, 0xff, 0x72, 0x2f, 0xb5, 0xff, 0xa3, 0x93, 0xf7, 0xc0, 0x9b, 0xfc, 0x40, 0xb4, 0xfc, 0xc0, 0xc4, 0xfb, 0x20, 0xd5, 0xfb, 0x80, 0xe5, 0xfb, 0xe1, 0xed, 0xfb, 0x00, 0xf6, 0xfb, 0x22, 0xf6, 0xfb, 0x10, 0xff, 0xfb, 0x11, 0xff, 0xfb, 0x10, 0xff, 0xfb, 0x10, 0xff, 0xfb, 0x32, 0xff, 0xfb, 0xed, 0xfe, 0xfb, 0x00, 0xf6, 0xfb, 0x00, 0xf6, 0xfb, 0x21, 0xf6, 0xfb, 0x21, 0xf6, 0xfb, 0x21, 0xf6, 0xfb, 0x21, 0xf6, 0xfb, 0x21, 0xf6, 0xfb, 0x21, 0xf6, 0xfb, 0x00, 0xf6, 0xfb, 0x00, 0xf6, 0xfc, 0x20, 0xf6, 0xf7, 0xc4, 0xe5, 0xf9, 0xb1, 0xc5, 0xe0,
0xd3, 0xc5, 0xde, 0x20, 0x6a, 0xff, 0x40, 0x8b, 0xff, 0x00, 0xa4, 0xff, 0x60, 0xb4, 0xff, 0xc0, 0xc4, 0xff, 0x40, 0xd5, 0xff, 0xa0, 0xe5, 0xff, 0x00, 0xf6, 0xff, 0x20, 0xfe, 0xff, 0x41, 0xfe, 0xff, 0x30, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0x0d, 0xff, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x20, 0xfe, 0xff, 0x40, 0xfe, 0xff, 0x20, 0xfe, 0xf7,
0x62, 0x83, 0xf6, 0xe0, 0x7a, 0xff, 0xc1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x22, 0xf6, 0xff, 0x21, 0xfe, 0xf4,
0x40, 0x83, 0xf2, 0x40, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x61, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x61, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x61, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x61, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x61, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x61, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x61, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf0, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x61, 0x8b, 0xf1, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x41, 0x83, 0xf2, 0x20, 0x83, 0xff, 0xa1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xf2,
0x49, 0x9c, 0xf1, 0x60, 0x72, 0xff, 0xc1, 0x93, 0xff, 0x21, 0xa4, 0xff, 0x81, 0xb4, 0xff, 0xe1, 0xc4, 0xff, 0x41, 0xd5, 0xff, 0xa1, 0xe5, 0xff, 0x01, 0xf6, 0xff, 0x20, 0xf6, 0xff, 0x42, 0xfe, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0xee, 0xfe, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x21, 0xf6, 0xff, 0x22, 0xf6, 0xff, 0x41, 0xfe, 0xff, 0x60, 0xfe, 0xfe,
0x1c, 0xe7, 0xbb, 0x42, 0x83, 0xff, 0xe0, 0x82, 0xff, 0xc0, 0x9b, 0xff, 0x60, 0xb4, 0xff, 0xe0, 0xcc, 0xff, 0x40, 0xdd, 0xff, 0xc0, 0xed, 0xff, 0x20, 0xfe, 0xff, 0x40, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x6f, 0xff, 0xff, 0x91, 0xff, 0xff, 0x70, 0xff, 0xff, 0x70, 0xff, 0xff, 0x92, 0xff, 0xff, 0x4d, 0xff, 0xff, 0x40, 0xfe, 0xff, 0x40, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x80, 0xfe, 0xff, 0x60, 0xfe, 0xff, 0x66, 0xcd, 0xd9,
0xff, 0xff, 0x3e, 0x58, 0xce, 0xff, 0xce, 0xa4, 0xfe, 0x8b, 0xa4, 0xe7, 0x8a, 0xa4, 0xd9, 0xca, 0xac, 0xcb, 0x0a, 0xbd, 0xc6, 0x4a, 0xbd, 0xc8, 0x6a, 0xc5, 0xc8, 0x69, 0xcd, 0xc8, 0x8b, 0xcd, 0xc8, 0xf2, 0xcd, 0xc8, 0x13, 0xce, 0xc8, 0xf2, 0xcd, 0xc8, 0xf2, 0xcd, 0xc8, 0x13, 0xce, 0xc8, 0xf0, 0xcd, 0xc8, 0x6a, 0xcd, 0xc8, 0x6a, 0xcd, 0xc8, 0x6a, 0xcd, 0xc8, 0x6a, 0xcd, 0xc8, 0x6a, 0xcd, 0xc8, 0x6a, 0xcd, 0xc8, 0x8a, 0xcd, 0xc7, 0x6a, 0xc5, 0xc9, 0x49, 0xc5, 0xcd, 0x08, 0xbd, 0xd2, 0x08, 0xbd, 0xd3, 0x28, 0x94, 0xeb, 0xd5, 0x94, 0xa9,
0x00, 0x00, 0x00, 0xdf, 0xff, 0x6e, 0xfe, 0xde, 0xcc, 0xbd, 0xd6, 0xbe, 0x5c, 0xc6, 0xa7, 0x3c, 0xbe, 0x99, 0x3c, 0xbe, 0x95, 0x1c, 0xbe, 0x96, 0x1c, 0xbe, 0x96, 0x1c, 0xbe, 0x96, 0xfc, 0xbd, 0x96, 0xd9, 0xbd, 0x96, 0xd9, 0xbd, 0x96, 0xd9, 0xbd, 0x96, 0xd9, 0xbd, 0x96, 0xd9, 0xbd, 0x96, 0xfa, 0xbd, 0x96, 0x1c, 0xbe, 0x96, 0x1c, 0xbe, 0x96, 0xfc, 0xbd, 0x96, 0xfc, 0xbd, 0x96, 0xfc, 0xbd, 0x96, 0xfc, 0xbd, 0x96, 0x1c, 0xbe, 0x96, 0xfc, 0xb5, 0x97, 0xdb, 0xb5, 0x9b, 0x9b, 0xad, 0xa1, 0xf8, 0x9c, 0xb1, 0x38, 0x9d, 0xa7, 0xbf, 0xff, 0x36,
#endif
#if LV_COLOR_DEPTH == 16 && LV_COLOR_16_SWAP != 0
/*Pixel format: Alpha 8 bit, Red: 5 bit, Green: 6 bit, Blue: 5 bit BUT the 2 color bytes are swapped*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x20, 0xe4, 0x44, 0x21, 0x04, 0x51, 0x21, 0x04, 0x42, 0x21, 0x04, 0x44, 0x21, 0x04, 0x44, 0x21, 0x04, 0x44, 0x21, 0x04, 0x42, 0x20, 0xe4, 0x5d, 0x20, 0xe4, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc2, 0x20, 0x18, 0xc3, 0x61, 0x08, 0x41, 0x1f, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x21, 0x00, 0x00, 0x1a, 0x08, 0x61, 0x40, 0x18, 0xe3, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xa6, 0x0a, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0xc6, 0x19, 0x60, 0xdf, 0x1d, 0x71, 0xef, 0x9f, 0x66, 0xef, 0x5f, 0x63, 0xe7, 0x5f, 0x63, 0xe7, 0x3f, 0x63, 0xe7, 0x1f, 0x63, 0xff, 0xff, 0x63, 0xc6, 0x3b, 0x77, 0x6b, 0x4e, 0x87, 0x8c, 0x73, 0x61, 0xce, 0x5a, 0x61, 0xbd, 0xf9, 0x61, 0xbd, 0xf9, 0x61, 0xc6, 0x3a, 0x61, 0xb5, 0x99, 0x61, 0x73, 0xb1, 0x6c, 0x73, 0xd1, 0x81, 0xe7, 0x3f, 0x67, 0xff, 0xff, 0x63, 0xdf, 0x1e, 0x63, 0xe7, 0x1f, 0x63, 0xe7, 0x1f, 0x64, 0xdf, 0x1e, 0x64, 0xef, 0x7f, 0x67, 0xa5, 0x38, 0x71, 0xa5, 0x35, 0x40, 0x00, 0x00, 0x00,
0xff, 0xff, 0x02, 0xff, 0xff, 0xba, 0xef, 0x5d, 0xff, 0xde, 0x98, 0xff, 0xde, 0x97, 0xf4, 0xde, 0x98, 0xec, 0xde, 0xb7, 0xeb, 0xe6, 0xd8, 0xec, 0xe6, 0xd8, 0xec, 0xde, 0xb7, 0xec, 0xf7, 0x5a, 0xe5, 0xff, 0xfe, 0xdf, 0xff, 0xfe, 0xec, 0xff, 0xbd, 0xec, 0xff, 0xbd, 0xec, 0xff, 0xdd, 0xec, 0xff, 0xbc, 0xec, 0xff, 0xbb, 0xec, 0xff, 0xfc, 0xe8, 0xff, 0xfc, 0xe1, 0xef, 0x39, 0xeb, 0xde, 0xb7, 0xec, 0xe6, 0xd8, 0xec, 0xe6, 0xd8, 0xec, 0xe6, 0xd8, 0xec, 0xde, 0xb7, 0xef, 0xde, 0x76, 0xf3, 0xde, 0xb7, 0xfa, 0xce, 0x5b, 0xf0, 0xdf, 0x1f, 0x6f,
0xff, 0xff, 0x72, 0xb5, 0x2f, 0xff, 0x93, 0xa3, 0xf7, 0x9b, 0xc0, 0xfc, 0xb4, 0x40, 0xfc, 0xc4, 0xc0, 0xfb, 0xd5, 0x20, 0xfb, 0xe5, 0x80, 0xfb, 0xed, 0xe1, 0xfb, 0xf6, 0x00, 0xfb, 0xf6, 0x22, 0xfb, 0xff, 0x10, 0xfb, 0xff, 0x11, 0xfb, 0xff, 0x10, 0xfb, 0xff, 0x10, 0xfb, 0xff, 0x32, 0xfb, 0xfe, 0xed, 0xfb, 0xf6, 0x00, 0xfb, 0xf6, 0x00, 0xfb, 0xf6, 0x21, 0xfb, 0xf6, 0x21, 0xfb, 0xf6, 0x21, 0xfb, 0xf6, 0x21, 0xfb, 0xf6, 0x21, 0xfb, 0xf6, 0x21, 0xfb, 0xf6, 0x00, 0xfb, 0xf6, 0x00, 0xfc, 0xf6, 0x20, 0xf7, 0xe5, 0xc4, 0xf9, 0xc5, 0xb1, 0xe0,
0xc5, 0xd3, 0xde, 0x6a, 0x20, 0xff, 0x8b, 0x40, 0xff, 0xa4, 0x00, 0xff, 0xb4, 0x60, 0xff, 0xc4, 0xc0, 0xff, 0xd5, 0x40, 0xff, 0xe5, 0xa0, 0xff, 0xf6, 0x00, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x41, 0xff, 0xff, 0x30, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xff, 0x0d, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x40, 0xff, 0xfe, 0x20, 0xf7,
0x83, 0x62, 0xf6, 0x7a, 0xe0, 0xff, 0x93, 0xc1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x22, 0xff, 0xfe, 0x21, 0xf4,
0x83, 0x40, 0xf2, 0x83, 0x40, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x61, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x61, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x61, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x61, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x61, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x61, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x61, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf0, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x8b, 0x61, 0xf1, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x83, 0x41, 0xf2, 0x83, 0x20, 0xff, 0x93, 0xa1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xf2,
0x9c, 0x49, 0xf1, 0x72, 0x60, 0xff, 0x93, 0xc1, 0xff, 0xa4, 0x21, 0xff, 0xb4, 0x81, 0xff, 0xc4, 0xe1, 0xff, 0xd5, 0x41, 0xff, 0xe5, 0xa1, 0xff, 0xf6, 0x01, 0xff, 0xf6, 0x20, 0xff, 0xfe, 0x42, 0xff, 0xff, 0x10, 0xff, 0xff, 0x32, 0xff, 0xff, 0x31, 0xff, 0xff, 0x31, 0xff, 0xff, 0x53, 0xff, 0xfe, 0xee, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x21, 0xff, 0xf6, 0x22, 0xff, 0xfe, 0x41, 0xff, 0xfe, 0x60, 0xfe,
0xe7, 0x1c, 0xbb, 0x83, 0x42, 0xff, 0x82, 0xe0, 0xff, 0x9b, 0xc0, 0xff, 0xb4, 0x60, 0xff, 0xcc, 0xe0, 0xff, 0xdd, 0x40, 0xff, 0xed, 0xc0, 0xff, 0xfe, 0x20, 0xff, 0xfe, 0x40, 0xff, 0xfe, 0x60, 0xff, 0xff, 0x6f, 0xff, 0xff, 0x91, 0xff, 0xff, 0x70, 0xff, 0xff, 0x70, 0xff, 0xff, 0x92, 0xff, 0xff, 0x4d, 0xff, 0xfe, 0x40, 0xff, 0xfe, 0x40, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x60, 0xff, 0xfe, 0x80, 0xff, 0xfe, 0x60, 0xff, 0xcd, 0x66, 0xd9,
0xff, 0xff, 0x3e, 0xce, 0x58, 0xff, 0xa4, 0xce, 0xfe, 0xa4, 0x8b, 0xe7, 0xa4, 0x8a, 0xd9, 0xac, 0xca, 0xcb, 0xbd, 0x0a, 0xc6, 0xbd, 0x4a, 0xc8, 0xc5, 0x6a, 0xc8, 0xcd, 0x69, 0xc8, 0xcd, 0x8b, 0xc8, 0xcd, 0xf2, 0xc8, 0xce, 0x13, 0xc8, 0xcd, 0xf2, 0xc8, 0xcd, 0xf2, 0xc8, 0xce, 0x13, 0xc8, 0xcd, 0xf0, 0xc8, 0xcd, 0x6a, 0xc8, 0xcd, 0x6a, 0xc8, 0xcd, 0x6a, 0xc8, 0xcd, 0x6a, 0xc8, 0xcd, 0x6a, 0xc8, 0xcd, 0x6a, 0xc8, 0xcd, 0x8a, 0xc7, 0xc5, 0x6a, 0xc9, 0xc5, 0x49, 0xcd, 0xbd, 0x08, 0xd2, 0xbd, 0x08, 0xd3, 0x94, 0x28, 0xeb, 0x94, 0xd5, 0xa9,
0x00, 0x00, 0x00, 0xff, 0xdf, 0x6e, 0xde, 0xfe, 0xcc, 0xd6, 0xbd, 0xbe, 0xc6, 0x5c, 0xa7, 0xbe, 0x3c, 0x99, 0xbe, 0x3c, 0x95, 0xbe, 0x1c, 0x96, 0xbe, 0x1c, 0x96, 0xbe, 0x1c, 0x96, 0xbd, 0xfc, 0x96, 0xbd, 0xd9, 0x96, 0xbd, 0xd9, 0x96, 0xbd, 0xd9, 0x96, 0xbd, 0xd9, 0x96, 0xbd, 0xd9, 0x96, 0xbd, 0xfa, 0x96, 0xbe, 0x1c, 0x96, 0xbe, 0x1c, 0x96, 0xbd, 0xfc, 0x96, 0xbd, 0xfc, 0x96, 0xbd, 0xfc, 0x96, 0xbd, 0xfc, 0x96, 0xbe, 0x1c, 0x96, 0xb5, 0xfc, 0x97, 0xb5, 0xdb, 0x9b, 0xad, 0x9b, 0xa1, 0x9c, 0xf8, 0xb1, 0x9d, 0x38, 0xa7, 0xff, 0xbf, 0x36,
#endif
#if LV_COLOR_DEPTH == 32
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1e, 0x1e, 0x1e, 0x44, 0x1f, 0x1f, 0x1f, 0x51, 0x22, 0x22, 0x22, 0x42, 0x21, 0x21, 0x21, 0x44, 0x21, 0x21, 0x21, 0x44, 0x21, 0x21, 0x21, 0x44, 0x22, 0x22, 0x22, 0x42, 0x1e, 0x1e, 0x1e, 0x5d, 0x1e, 0x1e, 0x1e, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x17, 0x17, 0x20, 0x1a, 0x1a, 0x1a, 0x61, 0x08, 0x08, 0x08, 0x1f, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1a, 0x0b, 0x0b, 0x0b, 0x40, 0x1c, 0x1c, 0x1c, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x0a, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x02, 0xc7, 0xbf, 0xbf, 0x60, 0xec, 0xdf, 0xda, 0x71, 0xff, 0xf0, 0xeb, 0x66, 0xf9, 0xe7, 0xe5, 0x63, 0xf9, 0xe7, 0xe2, 0x63, 0xf7, 0xe5, 0xe0, 0x63, 0xf7, 0xe2, 0xdd, 0x63, 0xff, 0xff, 0xff, 0x63, 0xd8, 0xc5, 0xc0, 0x77, 0x73, 0x69, 0x66, 0x87, 0x95, 0x8d, 0x8b, 0x61, 0xd2, 0xc7, 0xc5, 0x61, 0xc7, 0xbd, 0xba, 0x61, 0xc5, 0xbd, 0xba, 0x61, 0xd2, 0xc5, 0xc2, 0x61, 0xca, 0xb2, 0xb0, 0x61, 0x88, 0x73, 0x6e, 0x6c, 0x8c, 0x78, 0x72, 0x81, 0xf7, 0xe3, 0xde, 0x67, 0xff, 0xfc, 0xf7, 0x63, 0xf4, 0xe0, 0xda, 0x63, 0xf7, 0xe2, 0xdd, 0x63, 0xf7, 0xe2, 0xdd, 0x64, 0xf4, 0xe0, 0xdb, 0x64, 0xff, 0xeb, 0xe6, 0x67, 0xbd, 0xa6, 0xa2, 0x71, 0xab, 0xa3, 0xa3, 0x40, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0x02, 0xff, 0xff, 0xfd, 0xba, 0xea, 0xea, 0xea, 0xff, 0xc0, 0xd1, 0xd6, 0xff, 0xbb, 0xcf, 0xd5, 0xf4, 0xbd, 0xd2, 0xd8, 0xec, 0xbc, 0xd4, 0xdb, 0xeb, 0xbd, 0xd7, 0xdd, 0xec, 0xbd, 0xd7, 0xdd, 0xec, 0xb7, 0xd4, 0xdc, 0xec, 0xd0, 0xea, 0xf1, 0xe5, 0xf3, 0xfe, 0xfe, 0xdf, 0xf4, 0xff, 0xff, 0xec, 0xe6, 0xf5, 0xf8, 0xec, 0xe8, 0xf6, 0xf9, 0xec, 0xea, 0xf7, 0xf9, 0xec, 0xe2, 0xf4, 0xf8, 0xec, 0xd9, 0xf6, 0xfc, 0xec, 0xe3, 0xff, 0xff, 0xe8, 0xe1, 0xfd, 0xff, 0xe1, 0xc8, 0xe4, 0xeb, 0xeb, 0xb8, 0xd3, 0xdb, 0xec, 0xbd, 0xd9, 0xdf, 0xec, 0xbd, 0xd9, 0xdf, 0xec, 0xbd, 0xd8, 0xde, 0xec, 0xb8, 0xd4, 0xda, 0xef, 0xaf, 0xcc, 0xd5, 0xf3, 0xb9, 0xd4, 0xdb, 0xfa, 0xd8, 0xca, 0xc7, 0xf0, 0xff, 0xe1, 0xda, 0x6f,
0xff, 0xff, 0xff, 0x72, 0x79, 0xa6, 0xb1, 0xff, 0x18, 0x73, 0x8f, 0xf7, 0x00, 0x7a, 0x99, 0xfc, 0x01, 0x8a, 0xad, 0xfc, 0x03, 0x99, 0xbe, 0xfb, 0x03, 0xa5, 0xcf, 0xfb, 0x04, 0xb2, 0xde, 0xfb, 0x05, 0xbc, 0xea, 0xfb, 0x00, 0xc1, 0xf1, 0xfb, 0x0d, 0xc5, 0xf2, 0xfb, 0x7d, 0xdf, 0xf8, 0xfb, 0x8c, 0xe2, 0xf7, 0xfb, 0x82, 0xdf, 0xf7, 0xfb, 0x82, 0xdf, 0xf7, 0xfb, 0x93, 0xe3, 0xf8, 0xfb, 0x6a, 0xdb, 0xf6, 0xfb, 0x00, 0xc2, 0xf1, 0xfb, 0x00, 0xc2, 0xf1, 0xfb, 0x05, 0xc3, 0xf1, 0xfb, 0x05, 0xc3, 0xf1, 0xfb, 0x05, 0xc3, 0xf1, 0xfb, 0x05, 0xc3, 0xf1, 0xfb, 0x05, 0xc3, 0xf1, 0xfb, 0x05, 0xc3, 0xf1, 0xfb, 0x04, 0xc2, 0xf0, 0xfb, 0x02, 0xc2, 0xf1, 0xfc, 0x02, 0xc4, 0xf3, 0xf7, 0x1e, 0xb9, 0xe1, 0xf9, 0x8a, 0xb6, 0xc1, 0xe0,
0x98, 0xb8, 0xbf, 0xde, 0x00, 0x46, 0x66, 0xff, 0x00, 0x68, 0x87, 0xff, 0x00, 0x80, 0xa0, 0xff, 0x00, 0x8d, 0xb0, 0xff, 0x00, 0x9a, 0xc1, 0xff, 0x00, 0xa8, 0xd2, 0xff, 0x01, 0xb4, 0xe1, 0xff, 0x02, 0xc0, 0xee, 0xff, 0x00, 0xc3, 0xf6, 0xff, 0x0a, 0xc7, 0xf7, 0xff, 0x7f, 0xe3, 0xfc, 0xff, 0x8e, 0xe6, 0xfc, 0xff, 0x85, 0xe4, 0xfc, 0xff, 0x85, 0xe4, 0xfc, 0xff, 0x95, 0xe8, 0xfd, 0xff, 0x6c, 0xdf, 0xfb, 0xff, 0x00, 0xc4, 0xf6, 0xff, 0x00, 0xc4, 0xf6, 0xff, 0x02, 0xc5, 0xf6, 0xff, 0x02, 0xc5, 0xf6, 0xff, 0x02, 0xc5, 0xf6, 0xff, 0x02, 0xc5, 0xf6, 0xff, 0x02, 0xc5, 0xf6, 0xff, 0x02, 0xc5, 0xf6, 0xff, 0x02, 0xc6, 0xf6, 0xff, 0x03, 0xc6, 0xf6, 0xff, 0x03, 0xc6, 0xf7, 0xff, 0x00, 0xca, 0xff, 0xff, 0x00, 0xc5, 0xf6, 0xf7,
0x13, 0x6d, 0x83, 0xf6, 0x00, 0x5b, 0x76, 0xff, 0x08, 0x78, 0x93, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9e, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc1, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0e, 0xc6, 0xf3, 0xff, 0x05, 0xc5, 0xf5, 0xf4,
0x03, 0x69, 0x81, 0xf2, 0x02, 0x67, 0x80, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9e, 0xc2, 0xff, 0x0a, 0xab, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc1, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x66, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc1, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xab, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xab, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9e, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9e, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xab, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xab, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x66, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc1, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9e, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9e, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xab, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x66, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xab, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc1, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc1, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x0c, 0x6e, 0x85, 0xf0, 0x02, 0x65, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x08, 0x6b, 0x85, 0xf1, 0x02, 0x66, 0x7f, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0b, 0xc6, 0xf4, 0xf2,
0x05, 0x68, 0x80, 0xf2, 0x01, 0x64, 0x7e, 0xff, 0x07, 0x76, 0x92, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb2, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe1, 0xff, 0x0c, 0xc0, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0a, 0xc6, 0xf4, 0xf2,
0x49, 0x88, 0x99, 0xf1, 0x00, 0x4e, 0x6d, 0xff, 0x06, 0x78, 0x93, 0xff, 0x08, 0x83, 0xa1, 0xff, 0x09, 0x90, 0xb1, 0xff, 0x0a, 0x9d, 0xc2, 0xff, 0x0a, 0xaa, 0xd2, 0xff, 0x0b, 0xb6, 0xe0, 0xff, 0x0c, 0xc1, 0xed, 0xff, 0x02, 0xc4, 0xf4, 0xff, 0x14, 0xc8, 0xf5, 0xff, 0x83, 0xe2, 0xfa, 0xff, 0x91, 0xe5, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x88, 0xe3, 0xfa, 0xff, 0x98, 0xe7, 0xfb, 0xff, 0x71, 0xde, 0xf9, 0xff, 0x06, 0xc5, 0xf4, 0xff, 0x07, 0xc5, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0c, 0xc6, 0xf4, 0xff, 0x0d, 0xc5, 0xf3, 0xff, 0x0c, 0xc8, 0xf7, 0xff, 0x00, 0xcd, 0xff, 0xfe,
0xdf, 0xe2, 0xe2, 0xbb, 0x12, 0x68, 0x7f, 0xff, 0x00, 0x5e, 0x80, 0xff, 0x00, 0x78, 0x9c, 0xff, 0x00, 0x8b, 0xb3, 0xff, 0x00, 0x9b, 0xc7, 0xff, 0x00, 0xaa, 0xd9, 0xff, 0x00, 0xb8, 0xea, 0xff, 0x00, 0xc4, 0xf9, 0xff, 0x00, 0xc8, 0xff, 0xff, 0x00, 0xcd, 0xff, 0xff, 0x7b, 0xec, 0xff, 0xff, 0x8c, 0xf0, 0xff, 0xff, 0x81, 0xed, 0xff, 0xff, 0x81, 0xed, 0xff, 0xff, 0x94, 0xf2, 0xff, 0xff, 0x66, 0xe7, 0xff, 0xff, 0x00, 0xca, 0xff, 0xff, 0x00, 0xca, 0xff, 0xff, 0x00, 0xcb, 0xff, 0xff, 0x00, 0xcb, 0xff, 0xff, 0x00, 0xcb, 0xff, 0xff, 0x00, 0xcb, 0xff, 0xff, 0x00, 0xcb, 0xff, 0xff, 0x00, 0xcb, 0xff, 0xff, 0x00, 0xcd, 0xff, 0xff, 0x00, 0xce, 0xff, 0xff, 0x00, 0xd2, 0xff, 0xff, 0x00, 0xcd, 0xff, 0xff, 0x31, 0xab, 0xca, 0xd9,
0xff, 0xff, 0xff, 0x3e, 0xc3, 0xca, 0xcb, 0xff, 0x6f, 0x97, 0xa4, 0xfe, 0x57, 0x92, 0xa3, 0xe7, 0x4f, 0x92, 0xa4, 0xd9, 0x4d, 0x97, 0xa9, 0xcb, 0x51, 0xa0, 0xb5, 0xc6, 0x51, 0xa8, 0xbc, 0xc8, 0x51, 0xac, 0xc3, 0xc8, 0x4c, 0xad, 0xc5, 0xc8, 0x55, 0xaf, 0xc6, 0xc8, 0x8d, 0xbc, 0xc9, 0xc8, 0x95, 0xbf, 0xc9, 0xc8, 0x90, 0xbd, 0xc9, 0xc8, 0x90, 0xbd, 0xc9, 0xc8, 0x97, 0xc0, 0xc9, 0xc8, 0x84, 0xbb, 0xc9, 0xc8, 0x4f, 0xae, 0xc5, 0xc8, 0x50, 0xae, 0xc5, 0xc8, 0x51, 0xae, 0xc5, 0xc8, 0x51, 0xae, 0xc5, 0xc8, 0x51, 0xae, 0xc5, 0xc8, 0x51, 0xae, 0xc5, 0xc8, 0x53, 0xaf, 0xc6, 0xc7, 0x51, 0xad, 0xc4, 0xc9, 0x4a, 0xa7, 0xbf, 0xcd, 0x44, 0xa2, 0xb9, 0xd2, 0x3d, 0xa0, 0xb7, 0xd3, 0x41, 0x83, 0x93, 0xeb, 0xac, 0x98, 0x93, 0xa9,
0x00, 0x00, 0x00, 0x00, 0xff, 0xfa, 0xf8, 0x6e, 0xf1, 0xde, 0xd9, 0xcc, 0xea, 0xd5, 0xce, 0xbe, 0xe1, 0xc9, 0xc1, 0xa7, 0xdf, 0xc3, 0xbc, 0x99, 0xe1, 0xc4, 0xbc, 0x95, 0xe3, 0xc1, 0xbb, 0x96, 0xe2, 0xc1, 0xb7, 0x96, 0xe3, 0xc0, 0xb7, 0x96, 0xe0, 0xbe, 0xb7, 0x96, 0xcc, 0xb9, 0xb5, 0x96, 0xc8, 0xb9, 0xb5, 0x96, 0xca, 0xb9, 0xb5, 0x96, 0xca, 0xb9, 0xb5, 0x96, 0xc8, 0xb9, 0xb5, 0x96, 0xcf, 0xbb, 0xb5, 0x96, 0xe3, 0xc0, 0xb7, 0x96, 0xe3, 0xc0, 0xb7, 0x96, 0xe2, 0xbe, 0xb7, 0x96, 0xe2, 0xbe, 0xb7, 0x96, 0xe2, 0xbe, 0xb7, 0x96, 0xe2, 0xbe, 0xb7, 0x96, 0xe3, 0xc0, 0xb7, 0x96, 0xe0, 0xbe, 0xb4, 0x97, 0xda, 0xb8, 0xb0, 0x9b, 0xd5, 0xb2, 0xa9, 0xa1, 0xc3, 0x9e, 0x95, 0xb1, 0xc1, 0xa3, 0x9b, 0xa7, 0xfa, 0xf5, 0xf5, 0x36,
#endif
};
const lv_img_dsc_t batt_full_yellow = {
.header.always_zero = 0,
.header.w = 30,
.header.h = 62,
.data_size = 1860 * LV_IMG_PX_SIZE_ALPHA_BYTE,
.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,
.data = batt_full_yellow_map,
};

View File

@ -0,0 +1,18 @@
#ifndef BIN_OFFSETS_H
#define BIN_OFFSETS_H
#define Number_HarmonyOS_bpp4_20px_glyph_bitmap (const uint8_t *)0xa02000
#define Number_HarmonyOS_bpp4_20px_glyph_dsc (const lv_font_fmt_txt_glyph_dsc_t *)0xa02af8
#define Number_HarmonyOS_bpp4_12px_glyph_bitmap (const uint8_t *)0xa02000
#define Number_HarmonyOS_bpp4_12px_glyph_dsc (const lv_font_fmt_txt_glyph_dsc_t *)0xa02af8
#define Number_HarmonyOS_bpp4_16px_glyph_bitmap (const uint8_t *)0xa030f8
#define Number_HarmonyOS_bpp4_16px_glyph_dsc (const lv_font_fmt_txt_glyph_dsc_t *)0xa04264
#define Number_HarmonyOS_bpp4_36px_glyph_bitmap (const uint8_t *)0xa04864
#define Number_HarmonyOS_bpp4_36px_glyph_dsc (const lv_font_fmt_txt_glyph_dsc_t *)0xa08cba
#define Number_HarmonyOS_bpp4_44px_glyph_bitmap (const uint8_t *)0xa0918a
#define Number_HarmonyOS_bpp4_44px_glyph_dsc (const lv_font_fmt_txt_glyph_dsc_t *)0xa0a32d
#define TOTAL_SIZE 10527789
#endif

View File

@ -0,0 +1,141 @@
#ifndef __FR_LV_APP_PAGE_H__
#define __FR_LV_APP_PAGE_H__
void fr_lv_alarm_setting_func(lv_obj_t *parent, lv_point_t *top); // 闹钟首页设置
void fr_lv_alarm_upper_limit_func(lv_obj_t *parent, lv_point_t *top); // 闹钟添加到上限
void fr_lv_alarm_repeat_func(lv_obj_t *parent, lv_point_t *top) ;//设置闹钟重复日期
void fr_lv_alarm_edit_func(lv_obj_t *parent, lv_point_t *top); // 闹钟编辑界面
void fr_lv_del_alarm_hint_func(lv_obj_t *parent, lv_point_t *top) ;//删除闹钟提示
void fr_lv_alarm_bell_func(lv_obj_t *parent, lv_point_t *top);//闹钟响铃提示
void fr_lv_app_downkey_func(lv_obj_t *parent, lv_point_t *top);//下键设置列表
void fr_lv_app_exercise_func(lv_obj_t *parent, lv_point_t *top);//每日活动/运动界面
void fr_lv_blood_oxygen_measure_func(lv_obj_t *parent, lv_point_t *top); //血氧测量主界面
void fr_lv_blood_oxygen_show_func(lv_obj_t *parent, lv_point_t *top); //血氧测量完成显示
void fr_lv_blood_pressure_measure_func(lv_obj_t *parent, lv_point_t *top) ;//血压测量完成显示
void fr_lv_blood_sugar_measure_func(lv_obj_t *parent, lv_point_t *top) ;//血糖测量界面
void fr_lv_body_temperature_display_func(lv_obj_t *parent, lv_point_t *top); //体温测量显示
void fr_lv_body_temperature_func(lv_obj_t *parent, lv_point_t *top) ;//体温测量主页
void fr_lv_body_temperature_warn_func(lv_obj_t *parent, lv_point_t *top);//体温过高警告
void fr_lv_breath_training_home_func(lv_obj_t *parent, lv_point_t *top) ;// 呼吸训练主界面
void fr_lv_breath_setting_func(lv_obj_t *parent, lv_point_t *top) ;//呼吸训练设置目标
void fr_lv_breath_training_finish_func(lv_obj_t *parent, lv_point_t *top); // 呼吸训练完成显示
void fr_lv_breath_training_display_func(lv_obj_t *parent, lv_point_t *top); // 呼吸训练动画显示
void fr_lv_bright_time_func(lv_obj_t *parent, lv_point_t *top) ;// 亮屏时长设置
void fr_lv_bright_home_func(lv_obj_t *parent, lv_point_t *top) ;// 亮度&时长调节主页面
void fr_lv_bright_adjust_func(lv_obj_t *parent, lv_point_t *top);//亮度调节字页面
void fr_lv_dial_preview_func(lv_obj_t* parent,lv_point_t *top);/*表盘预览界面*/
void fr_lv_screen_off_dial_func(lv_obj_t *parent, lv_point_t *top) ;//熄屏表盘设置
void fr_lv_theme_select_func(lv_obj_t *parent, lv_point_t *top) ;// 风格主题选择界面
void fr_lv_raise_wake_hint_func(lv_obj_t *parent, lv_point_t *top);//开启抬腕亮屏设置
void fr_lv_effective_time_home_func(lv_obj_t *parent, lv_point_t *top); //生效时间主页
void fr_lv_dorp_down_func(lv_obj_t *parent, lv_point_t *top);//主页下拉菜单
void fr_lv_pressure_emotion_func(lv_obj_t *parent, lv_point_t *top) ;//情绪测量
void fr_lv_app_exercise_classify_list_func(lv_obj_t *parent, lv_point_t *top);//运动分类列表
void fr_lv_app_exercise_default_list_func(lv_obj_t *parent, lv_point_t *top);//默认运动列表
void fr_lv_exercise_detection_func(lv_obj_t *parent, lv_point_t *top) ;// 运动识别界面
void fr_lv_exercise_detection_hint_func(lv_obj_t *parent, lv_point_t *top) ;//运动识别提示界面
void fr_lv_exercise_over_hint_func(lv_obj_t *parent, lv_point_t *top);// 运动结束提示
void fr_lv_exercise_distance_short_hint_func(lv_obj_t *parent, lv_point_t *top);//距离过短提示
void fr_lv_exercise_time_short_hint_func(lv_obj_t *parent, lv_point_t *top);//时间过短提示
void fr_lv_exercise_long_info_func(lv_obj_t *parent, lv_point_t *top);//运动长信息界面
void fr_lv_exercise_short_info_func(lv_obj_t *parent, lv_point_t *top);//运动短信息界面 根据实际需要显示的信息选择
void fr_lv_exercise_record_func_ex(lv_obj_t *parent, lv_point_t *top) ;//运动记录长页面
void fr_lv_exercise_record_func(lv_obj_t *parent, lv_point_t *top) ;//运动记录短页面
void fr_lv_exercise_app_disc_func(lv_obj_t *parent, lv_point_t *top);//app断开提示
void fr_lv_bluetooth_connect_succ_func(lv_obj_t *parent, lv_point_t *top);//蓝牙连接成功提示
void fr_lv_bluetooth_connect_fail_func(lv_obj_t *parent, lv_point_t *top);//蓝牙连接失败提示
void fr_lv_exercise_start_func(lv_obj_t *parent, lv_point_t *top);//运动开始倒计时
void fr_lv_exercise_sub_list_func(lv_obj_t *parent, lv_point_t *top);//运动选项子类列表 总共7个子类列表
void fr_lv_exercise_start_hint_func(lv_obj_t *parent, lv_point_t *top);//运动开始提示设置
void fr_lv_target_setting_func(lv_obj_t *parent, lv_point_t *top);//运动目标设置时间卡路里公里
void fr_lv_select_target_func(lv_obj_t *parent, lv_point_t *top);//运动设置项选择
void fr_lv_target_setting_func_ex(lv_obj_t *parent, lv_point_t *top);//运动目标设置 距离
void fr_lv_female_health_func(lv_obj_t *parent, lv_point_t *top);//女性健康页面
void fr_lv_find_phone_display_func(lv_obj_t *parent, lv_point_t *top); // 查找手机动画显示
void fr_lv_flashlight_func(lv_obj_t *parent, lv_point_t *top); // 手电筒
void fr_lv_heart_rate_list_func(lv_obj_t *parent, lv_point_t *top);//心率列表
void fr_lv_heart_rate_curve_func(lv_obj_t *parent, lv_point_t *top); //心率监测曲线
void fr_lv_heart_rate_quietness_func(lv_obj_t *parent, lv_point_t *top); //静息心率
void fr_lv_heart_rate_warning_func(lv_obj_t *parent, lv_point_t *top); //心率预警
void fr_lv_alarm_close_hint_func(lv_obj_t *parent, lv_point_t *top); // 闹钟关闭提醒
void fr_lv_alarm_resound_hint_func(lv_obj_t *parent, lv_point_t *top) ;// 闹钟十分钟后再响提醒
void fr_lv_sedentary_hint_func(lv_obj_t *parent, lv_point_t *top); // 久坐提醒
void fr_lv_target_finish_hint_func(lv_obj_t *parent, lv_point_t *top); // 目标达成提示界面
void fr_lv_low_battery_func(lv_obj_t *parent, lv_point_t *top) ;// 低电量提醒
void fr_lv_power_saving_mode_func(lv_obj_t *parent, lv_point_t *top); // 省电模式是否开启
void fr_lv_poweroff_hint_func(lv_obj_t *parent, lv_point_t *top); // 关机提醒
void fr_lv_dev_bind_hint_func(lv_obj_t *parent, lv_point_t *top) ;// 绑定状态显示
void fr_lv_dev_bind_func(lv_obj_t *parent, lv_point_t *top);//是否绑定选择
void fr_lv_home_short_menu_func(lv_obj_t *parent, lv_point_t *top);//主页快捷菜单
void fr_lv_language_setting_func(lv_obj_t *parent, lv_point_t *top);//语言设置
void fr_lv_list_menu_func(lv_obj_t *parent, lv_point_t *top); //长列表菜单
void fr_lv_arc_list_func(lv_obj_t *parent, lv_point_t *top); //弧形列表菜单
void fr_lv_main_clock0_func(lv_obj_t *parent, lv_point_t *top);//主时钟表盘界面
void fr_lv_main_clock1_func(lv_obj_t *parent, lv_point_t *top);//主时钟表盘界面
void fr_lv_main_clock2_func(lv_obj_t *parent, lv_point_t *top);//主时钟表盘界面
void fr_lv_main_clock3_func(lv_obj_t *parent, lv_point_t *top);//主时钟表盘界面
void fr_lv_main_clock4_func(lv_obj_t *parent, lv_point_t *top);//主时钟表盘界面
void fr_lv_main_clock5_func(lv_obj_t *parent, lv_point_t *top);//主时钟表盘界面
void fr_lv_message_hint_page_func(lv_obj_t *parent, lv_point_t *top);//消息主界面
void fr_lv_message_details_page_func(lv_obj_t *parent, lv_point_t *top); //显示对应消息条目详情
void fr_lv_not_disturb_func(lv_obj_t *parent, lv_point_t *top) ;// 勿扰设置
void fr_lv_not_disturb_hint_func(lv_obj_t *parent, lv_point_t *top);//开启勿扰模式提示
void fr_lv_offscreen_dial_func(lv_obj_t *parent, lv_point_t *top); //熄屏表盘
void fr_lv_ota_firmware_func(lv_obj_t *parent, lv_point_t *top); // ota界面
void fr_lv_ota_result_func(lv_obj_t *parent, lv_point_t *top); // 升级结束显示
void fr_lv_add_cards_page_func(lv_obj_t *parent, lv_point_t *top);//主页添加主题提示界面
void fr_lv_themepage_select_func(lv_obj_t *parent, lv_point_t *top);//主页主题选择设置界面
void fr_lv_password_home_func(lv_obj_t *parent, lv_point_t *top);//锁屏 密码主界面
void fr_lv_password_succ_hint_func(lv_obj_t *parent, lv_point_t *top);//密码修改成功提示界面
void fr_lv_password_input_func(lv_obj_t *parent, lv_point_t *top) ;//密码输入提示界面
void fr_lv_about_page_func(lv_obj_t *parent, lv_point_t *top) ;//关于界面
void fr_lv_pressure_measure_func(lv_obj_t *parent, lv_point_t *top) ;//压力测量完成显示
void fr_lv_qrcode_page_func(lv_obj_t *parent, lv_point_t *top);//二维码
void fr_lv_respiratory_rate_func(lv_obj_t *parent, lv_point_t *top); //呼吸率测量
void fr_lv_set_time_select_func(lv_obj_t *parent, lv_point_t *top); //时间设置选择页面
void fr_lv_date_select_func(lv_obj_t *parent, lv_point_t *top) ;// 日期设置选择 页面
void fr_lv_setting_list_func(lv_obj_t *parent, lv_point_t *top); //默认设置列表
void fr_lv_dial_theme_setting_func(lv_obj_t *parent, lv_point_t *top); //表盘主题设置
void fr_lv_more_list_func(lv_obj_t *parent, lv_point_t *top);//更多设置列表
void fr_lv_sleep_page_func(lv_obj_t *parent, lv_point_t *top); //睡眠主界面
void fr_lv_soundvibration_home_func(lv_obj_t *parent, lv_point_t *top); // 声音与振动主页面
void fr_lv_sound_adjust_func(lv_obj_t *parent, lv_point_t *top); // 声音音量调节子界面
void fr_lv_vibration_select_func(lv_obj_t *parent, lv_point_t *top); // 振动强度选择 页面
void fr_lv_stop_watch_func(lv_obj_t *parent, lv_point_t *top); // 秒表
void fr_lv_system_menu_func(lv_obj_t *parent, lv_point_t *top) ; //系统菜单
void fr_lv_system_menu_hint_func(lv_obj_t *parent, lv_point_t *top);//重启 关机 恢复出厂设置 提示页面
void fr_lv_time_date_home_func(lv_obj_t *parent, lv_point_t *top); // 时间与日期主界面
void fr_lv_universal_time_func(lv_obj_t *parent, lv_point_t *top); //世界时间主界面
void fr_lv_add_city_func(lv_obj_t *parent, lv_point_t *top); //添加城市界面
void fr_lv_del_city_hint_func(lv_obj_t *parent, lv_point_t *top);//是否删除当前城市
void fr_lv_wear_detection_func(lv_obj_t *parent, lv_point_t *top); //佩戴检测
void fr_lv_wear_detection_func_ex(lv_obj_t *parent, lv_point_t *top); //佩戴提醒
void fr_lv_weather_report_func(lv_obj_t *parent, lv_point_t *top); //天气预报界面
void fr_lv_voice_assistant_func(lv_obj_t *parent, lv_point_t *top);//语音助手界面
void fr_lv_power_ctrl_func(lv_obj_t *parent, lv_point_t *top); // 电源控制界面
void fr_lv_exercise_main_info_func(lv_obj_t *parent,lv_point_t *top);//运动信息显示界面
void fr_lv_app_circle_func(lv_obj_t *parent,lv_point_t *top);//单圆样式界面
void fr_lv_app_dia_func(lv_obj_t *parent,lv_point_t *top);//电话相关界面
void fr_lv_app_dial_phone_book(lv_obj_t *parent,lv_point_t *top);//电话本界面
void fr_lv_app_dial_call_history(lv_obj_t *parent,lv_point_t *top);//通话记录界面
void fr_lv_app_dial_dial(lv_obj_t *parent,lv_point_t *top);//拨号盘界面
void fr_lv_timer_count_start_func(lv_obj_t *parent, lv_point_t *top);//计时器开始界面
void fr_lv_timer_custom_func(lv_obj_t *parent, lv_point_t *top);//自定义计数参数界面
void fr_lv_app_timer_func(lv_obj_t *parent, lv_point_t *top);//计时器界面
void fr_lv_photograph_func(lv_obj_t *parent, lv_point_t *top);//点击拍照界面
void fr_lv_app_calculator(lv_obj_t *parent, lv_point_t *top);//计算器界面
void fr_lv_app_music_control_func(lv_obj_t *parent, lv_point_t *top);//音乐界面
void fr_lv_screensaver_func(lv_obj_t *parent, lv_point_t *top) ;
void fr_lv_flexible_msg_func(lv_obj_t *parent, lv_point_t *top);//灵动岛消息
void fr_flexible_msg_set_type(uint8_t type);
#endif

View File

@ -0,0 +1,224 @@
#include "lvgl.h"
#include "fr_lv_public_func.h"
#include "lv_user_sqlist.h"
#define PAGE_MAX_LENGTH 15
#define CUSTOM_UI_ARRY_NUMBER 12
SqlistType_t page_list;
ElemType_t page_sqlist_space[PAGE_MAX_LENGTH]={0};
/*
page_list define:
0:ui_clock_group,
1-(PAGE_MAX_LENGTH-1):custom_ui_arry
*/
extern void fr_load_watch_face_from_ext_flash(lv_obj_t *parent,void *arg);
static const ui_func custom_ui_arry[CUSTOM_UI_ARRY_NUMBER]=
{
fr_lv_add_cards_page_func,
//---------------------------
fr_lv_app_exercise_func,
fr_lv_sleep_page_func,
fr_lv_weather_report_func,
fr_lv_pressure_measure_func,
fr_lv_heart_rate_list_func,
fr_lv_blood_oxygen_measure_func,
fr_lv_blood_pressure_measure_func,
fr_lv_app_exercise_default_list_func,
//---------------------------
fr_lv_pressure_emotion_func,
fr_lv_respiratory_rate_func,
fr_lv_body_temperature_display_func,
//fr_load_watch_face_from_ext_flash,
//---------------------------
};
static LV_ATTRIBUTE_LARGE_CONST const ui_func ui_clock_group[] =
{
fr_lv_main_clock2_func,
fr_lv_main_clock1_func,
fr_lv_main_clock0_func,
fr_lv_main_clock3_func,
fr_lv_main_clock4_func,
fr_lv_main_clock5_func,
NULL, //*entry_main
};
//==============================================================
//==============================================================
//==============================================================
uint8_t fr_ui_watchface_total(void)
{
return sizeof(ui_clock_group) / 4;
}
ui_func fr_ui_get_watchface(void)
{
uint8_t ui_face_id = fr_system_get_watch_face();
ui_func func = ui_clock_group[ui_face_id];
return func;
}
void fr_lv_custom_page_set_watch_face(uint8_t watch_face_id)
{
watch_face_id |= 0xc0;
lv_user_list_replace(&page_list,0,watch_face_id);
}
bool fr_lv_is_ui_index_in_list(uint8_t custom_ui_arry_index)
{
custom_ui_arry_index |= 0x80;
uint8_t elem_id = lv_user_list_get_elem_id(&page_list,custom_ui_arry_index);
if(elem_id != 0xff)
{
return 1;
}
else
return 0;
}
bool fr_lv_custom_page_add(uint8_t custom_ui_arry_index)
{
custom_ui_arry_index |= 0x80;
uint8_t elem_id = lv_user_list_get_elem_id(&page_list,custom_ui_arry_index);
if( elem_id == 0xff)
{
printf("add elem!!\r\n");
//列表中无该元素,则添加
//放在添加页面之前,添加页面永远在最后
uint8_t len = lv_user_list_get_sqlist_length(&page_list);
if(len == 0)
lv_user_list_insert(&page_list,len,custom_ui_arry_index);
else
lv_user_list_insert(&page_list,len-1,custom_ui_arry_index);
return 1;
}
return 0;
}
bool fr_lv_custom_page_delete(uint8_t custom_ui_arry_index)
{
custom_ui_arry_index |= 0x80;
uint8_t elem_id = lv_user_list_get_elem_id(&page_list,custom_ui_arry_index);
if(elem_id != 0xff)
{
lv_user_list_delete(&page_list,elem_id);
return 1;
}
else
return 0;
}
uint8_t fr_lv_get_custom_page_length(void)
{
return page_list.length;
}
uint8_t *fr_lv_get_custom_page_data(void)
{
return (uint8_t *)page_list.data;
}
ui_func fr_lv_get_prev_custom_page(uint8_t index)
{
ElemType_t prev_page = lv_user_list_get_prev_elem(&page_list,index);
if((prev_page & 0xc0) == 0xc0)
{
prev_page &= 0x3f;
return ui_clock_group[prev_page];
}
else
{
prev_page &= 0x7f;
return custom_ui_arry[prev_page];
}
}
ui_func fr_lv_get_next_custom_page(uint8_t index)
{
ElemType_t next_page = lv_user_list_get_next_elem(&page_list,index);
if((next_page & 0xc0) == 0xc0)
{
next_page &= 0x3f;
return ui_clock_group[next_page];
}
else
{
next_page &= 0x7f;
return custom_ui_arry[next_page];
}
}
ui_func fr_lv_get_cur_custom_page(uint8_t index)
{
ElemType_t cur_page = lv_user_list_get_cur_elem(&page_list,index);
if((cur_page&0xc0) == 0xc0)
{
cur_page &= 0x3f;
return ui_clock_group[cur_page];
}
else
{
cur_page &= 0x7f;
return custom_ui_arry[cur_page];
}
}
uint8_t splist_get_elem_number(void)
{
uint8_t len = 0;
uint8_t *custom_mode = fr_system_get_custom_page_mode();
for (uint8_t i = 0; i < CUSTOM_ID_ARRY_NUMBER; i++)
{
if ((custom_mode[i] != 0) && (custom_mode[i] <= CUSTOM_ID_ARRY_NUMBER))
{
len++;
}
}
return len;
}
//--
ui_func get_prior_element(uint8_t index)
{
return fr_lv_get_prev_custom_page(index);
}
ui_func get_next_element(uint8_t index)
{
return fr_lv_get_next_custom_page(index);
}
ui_func get_cur_element(uint8_t index)
{
return fr_lv_get_cur_custom_page(index);
}
//---
void page_list_traverser(void)
{
ListTraverse(&page_list);
}
void fr_lv_custom_page_init(void)
{
page_list.data = page_sqlist_space;
page_list.length = 0;
//----------------------------------
uint8_t elem_len = splist_get_elem_number();
if (elem_len == 0) // list is empty;
{
//clock0 and fr_lv_add_cards_page_func
fr_lv_custom_page_add(0);
fr_lv_custom_page_add(1);
fr_lv_custom_page_set_watch_face(0);
//---------------------------------
fr_lv_custom_page_add(1);
fr_lv_custom_page_add(2);
fr_lv_custom_page_add(3);
fr_lv_custom_page_add(4);
fr_system_set_custom_page_mode();
}
else
{
uint8_t *custom_mode = fr_system_get_custom_page_mode();
for (uint8_t i = 0; i < elem_len; i++)
{
fr_lv_custom_page_add(custom_mode[i]);
}
}
}

View File

@ -0,0 +1,23 @@
#ifndef __FR_LV_CUSTOMER_PAGE_H__
#define __FR_LV_CUSTOMER_PAGE_H__
#include "lvgl.h"
#include "fr_lv_public_func.h"
uint8_t fr_ui_watchface_total(void);
ui_func fr_ui_get_watchface(void);
bool fr_lv_is_ui_index_in_list(uint8_t custom_ui_arry_index);
void fr_lv_custom_page_set_watch_face(uint8_t watch_face_id);
bool fr_lv_custom_page_add(uint8_t custom_ui_arry_index);
bool fr_lv_custom_page_delete(uint8_t custom_ui_arry_index);
uint8_t fr_lv_get_custom_page_length(void);
uint8_t *fr_lv_get_custom_page_data(void);
ui_func fr_lv_get_prev_custom_page(uint8_t index);
ui_func fr_lv_get_next_custom_page(uint8_t index);
ui_func fr_lv_get_cur_custom_page(uint8_t index);
uint8_t splist_get_elem_number(void);
ui_func get_prior_element(uint8_t index);
ui_func get_next_element(uint8_t index);
ui_func get_cur_element(uint8_t index);
void page_list_traverser(void);
void fr_lv_custom_page_init(void);
#endif

View File

@ -0,0 +1,696 @@
#include "lvgl.h"
#include "img_def.h"
#include "lv_common_function.h"
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_20px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_16px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_12px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_36px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_44px);
#define LV_FONT_SMALL_NUMBER_20PX &Number_HarmonyOS_bpp4_20px
#define LV_FONT_SMALL_NUMBER_16PX &Number_HarmonyOS_bpp4_16px
#define LV_FONT_SMALL_NUMBER_12PX &Number_HarmonyOS_bpp4_12px
#define LV_FONT_BIG_NUMBER_44PX &Number_HarmonyOS_bpp4_44px
#define LV_FONT_MEDIUM_NUMBER_36PX &Number_HarmonyOS_bpp4_36px
static lv_timer_t *refresh_timer=NULL;
static uint8_t background_style = 1;
LV_ATTRIBUTE_LARGE_CONST static const lv_img_dsc_t* panel_bg1_src[6] =
{
IMG_INSTRUMENT_BG1_1,
IMG_INSTRUMENT_BG1_2,
IMG_INSTRUMENT_BG1_3,
IMG_INSTRUMENT_BG1_4,
IMG_INSTRUMENT_BG1_5,
};
LV_ATTRIBUTE_LARGE_CONST static const lv_img_dsc_t* panel_bg2_src[6] =
{
IMG_INSTRUMENT_BG2_1,
IMG_INSTRUMENT_BG2_2,
IMG_INSTRUMENT_BG2_3,
IMG_INSTRUMENT_BG2_4,
IMG_INSTRUMENT_BG2_5,
};
LV_ATTRIBUTE_LARGE_CONST static const lv_img_dsc_t* left_img_src[2] =
{
IMG_INSTRUMENT_ICO13,
IMG_INSTRUMENT_ICO14,
};
LV_ATTRIBUTE_LARGE_CONST static const lv_img_dsc_t* right_img_src[2] =
{
IMG_INSTRUMENT_ICO9,
IMG_INSTRUMENT_ICO10,
};
LV_ATTRIBUTE_LARGE_CONST static const lv_img_dsc_t* batt_black_img_src[5] =
{
IMG_INSTRUMENT_BATT_ICO1,
IMG_INSTRUMENT_BATT_ICO2,
IMG_INSTRUMENT_BATT_ICO3,
IMG_INSTRUMENT_BATT_ICO4,
IMG_INSTRUMENT_BATT_ICO5
};
static uint32_t odb_val = 660;
static uint32_t trip_val = 1770;
static uint8_t dir_sw_flags=0;
static uint8_t dir_cnt=0;
static uint8_t speed_val=50;
static uint8_t right_battery_val=20;
static uint8_t left_battery_val=20;
static int speed_angle=2400;
static uint32_t background_sw =0 ;
void fr_lv_instrument_panel_func(lv_obj_t *parent, lv_point_t *top);
void lv_img_big_disp(lv_obj_t* parent, const lv_img_dsc_t **src , lv_coord_t x, lv_coord_t y,uint8_t img_num,uint8_t start)
{
lv_obj_t *cont1 = lv_obj_create(parent);
lv_obj_remove_style_all(cont1);
lv_obj_clear_flag(cont1, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_scrollbar_mode(cont1, LV_SCROLLBAR_MODE_OFF);
//lv_obj_set_size(cont1,LV_PCT(100),LV_PCT(100));
lv_obj_set_style_bg_color(cont1,lv_color_black(),0);
lv_obj_set_size(cont1,LV_SIZE_CONTENT,LV_SIZE_CONTENT);
lv_obj_align(cont1,LV_ALIGN_TOP_LEFT,x,y);
lv_obj_t *old_obj = NULL;
for (uint8_t i = 0; i < img_num; i++)
{
lv_obj_t *img1 = lv_img_create(cont1);
lv_img_set_src(img1,src[start+i]);
if(i == 0)
lv_obj_set_pos(img1,0,0);
else
lv_obj_align_to(img1,old_obj,LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
old_obj = img1;
}
lv_obj_clear_flag(cont1,LV_OBJ_FLAG_CLICKABLE);
}
lv_obj_t* lv_img_big_create(lv_obj_t* parent, const lv_img_dsc_t **src , lv_coord_t x, lv_coord_t y,uint8_t img_num,uint8_t start)
{
lv_obj_t *cont1 = lv_obj_create(parent);
lv_obj_remove_style_all(cont1);
lv_obj_clear_flag(cont1, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_scrollbar_mode(cont1, LV_SCROLLBAR_MODE_OFF);
//lv_obj_set_size(cont1,LV_PCT(100),LV_PCT(100));
lv_obj_set_style_bg_color(cont1,lv_color_black(),0);
lv_obj_set_size(cont1,LV_SIZE_CONTENT,LV_SIZE_CONTENT);
//lv_obj_align(cont1,LV_ALIGN_TOP_LEFT,x,y);
lv_obj_t *old_obj = NULL;
for(uint8_t i = 0; i < img_num; i++)
{
lv_obj_t *img1 = lv_img_create(cont1);
lv_img_set_src(img1,src[start+i]);
if(i == 0)
lv_obj_set_pos(img1,0,0);
else
lv_obj_align_to(img1,old_obj,LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
old_obj = img1;
}
return cont1;
}
void refresh_timer_cb(lv_timer_t *t)
{
lv_obj_t *parent = t->user_data;
if(!lv_obj_is_valid(parent))
return;
if(++background_sw>100)
{
background_sw = 0;
background_style^=1;
lv_timer_del(refresh_timer);
refresh_timer = NULL;
lv_obj_clean(parent);
fr_lv_instrument_panel_func(parent,NULL);
return;
}
lv_obj_t *left_img = lv_obj_get_child(parent,1);
lv_obj_t *right_img = lv_obj_get_child(parent,2);
lv_obj_t *odb_lab = lv_obj_get_child(parent,6);
lv_obj_t *trip_lab = lv_obj_get_child(parent,7);
lv_obj_t *wiper_img = lv_obj_get_child(parent,3);//5
lv_obj_t *led_ico1_img = lv_obj_get_child(parent,4);//6
lv_obj_t *led_ico2_img = lv_obj_get_child(parent,5);//7
lv_obj_t * hand_img = lv_obj_get_child(parent, lv_obj_get_child_cnt(parent)-4);
lv_obj_t *speed_lab = lv_obj_get_child(parent,lv_obj_get_child_cnt(parent)-2);
lv_obj_t *right_slider_battery = lv_obj_get_child(parent,10);//10
lv_obj_t *left_slider_battery = lv_obj_get_child(parent,11);//11
lv_img_set_angle(hand_img,speed_angle);
speed_angle+=100;
if(speed_angle>4800)
speed_angle=2400;
if(!dir_sw_flags)
{
lv_img_set_src(left_img,left_img_src[1]);
lv_img_set_src(right_img,right_img_src[0]);
lv_obj_add_flag(wiper_img,LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(led_ico1_img,LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(led_ico2_img,LV_OBJ_FLAG_HIDDEN);
}else{
lv_img_set_src(left_img,left_img_src[0]);
lv_img_set_src(right_img,right_img_src[1]);
lv_obj_clear_flag(wiper_img,LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(led_ico1_img,LV_OBJ_FLAG_HIDDEN);
lv_obj_clear_flag(led_ico2_img,LV_OBJ_FLAG_HIDDEN);
}
if(++dir_cnt>15)
{
dir_cnt = 0;
dir_sw_flags^=1;
odb_val++;
trip_val++;
}
lv_label_set_text_fmt(speed_lab,"%d",speed_val);
lv_label_set_text_fmt(odb_lab,"%d",odb_val);
lv_label_set_text_fmt(trip_lab,"%d",trip_val);
lv_slider_set_value(left_slider_battery, left_battery_val, LV_ANIM_OFF);
lv_slider_set_value(right_slider_battery, right_battery_val, LV_ANIM_OFF);
lv_label_set_text_fmt(lv_obj_get_child(parent,13),"%d%%",(int)right_battery_val);
lv_label_set_text_fmt(lv_obj_get_child(parent,12),"%d%%",(int)left_battery_val);
left_battery_val+=5;
left_battery_val%=100;
right_battery_val+=5;
right_battery_val%=100;
//speed_val++;
//speed_val%=100;
speed_val = (speed_angle-2400)/24;
}
static inline lv_color_t get_label_color(void)
{
if(background_style==0)
{
return lv_color_hex(0xffffff);
}
else{
return lv_color_hex(0x00);
}
}
#define M_PI 3.14
static int center_x = 242, center_y = 119;
static int radius = 51;
static double start_angle = 0;
static double end_angle = 0;
static float progress =0.0;
#define TEST_FUN 0
void move_arrow_task_cb(lv_timer_t *t) {
start_angle = atan2(center_y - 143, 199 - center_x) * 180 / M_PI;
end_angle = atan2(center_y - 143, 284 - center_x) * 180 / M_PI;
lv_obj_t *parent = t->user_data;
if(!lv_obj_is_valid(parent))
return;
//current_angle-=1;
int current_angle = start_angle - progress * (start_angle + 390);
int x = center_x + radius * cos(current_angle * M_PI / 180.0);
int y = center_y - radius * sin(current_angle * M_PI / 180.0);
lv_obj_t *arrow = lv_obj_get_child(parent, 4);
lv_obj_set_pos(arrow, x, y);
printf("current_angle:%d x:%d y:%d\r\n",current_angle,x,y);
progress += 0.01;
if (progress > 1.0) {
progress = 0.0;
}
}
static void slider1_change_cb(lv_event_t *e)
{
lv_obj_t *slider = lv_event_get_target(e);
lv_event_code_t event = lv_event_get_code(e);
lv_obj_t *label = e->user_data;
if(!lv_obj_is_valid(slider)||!lv_obj_is_valid(label))
return;
if(event == LV_EVENT_VALUE_CHANGED)
{
lv_label_set_text_fmt(label,"%d%%",(int)lv_slider_get_value(slider));
printf("event_slider:%d \n", (int)lv_slider_get_value(slider));
}
}
static void slider2_change_cb(lv_event_t *e)
{
lv_obj_t *slider = lv_event_get_target(e);
lv_event_code_t event = lv_event_get_code(e);
lv_obj_t *label = e->user_data;
if(!lv_obj_is_valid(slider)||!lv_obj_is_valid(label))
return;
if(event == LV_EVENT_VALUE_CHANGED)
{
lv_label_set_text_fmt(label,"%d%%",(int)lv_slider_get_value(slider));
printf("event_slider:%d \n", (int)lv_slider_get_value(slider));
}
}
#if 1
LV_IMG_DECLARE(batt_full_gren);
LV_IMG_DECLARE(batt_full_yellow);
void fr_lv_instrument_panel_func(lv_obj_t *parent, lv_point_t *top)
{
if(!lv_obj_is_valid(parent))
return;
UI_PARENT_INIT(parent);
if(background_style==0)
{
lv_obj_t* panel_bg_img = lv_img_big_create(parent,panel_bg1_src,0,0,5,0);//0
}
else{
lv_obj_t* panel_bg_img = lv_img_big_create(parent,panel_bg2_src,0,0,5,0);//0
}
lv_obj_t *left_img = lv_img_create(parent);//1
lv_img_set_src(left_img,left_img_src[1]);
lv_obj_align(left_img,LV_ALIGN_TOP_LEFT,50,10);
lv_obj_t *right_img = lv_img_create(parent);//2
lv_img_set_src(right_img,right_img_src[1]);
lv_obj_align(right_img,LV_ALIGN_TOP_RIGHT,-50,10);
#if(TEST_FUN==1)
lv_obj_t *dot_obj = lv_btn_create(parent);
lv_obj_set_size(dot_obj,3,3);
lv_obj_set_style_pad_all(dot_obj,0,0);
lv_obj_set_style_radius(dot_obj,1,0);
lv_obj_set_style_bg_color(dot_obj,lv_color_make(0xff, 0, 0),0);
lv_obj_set_pos(dot_obj,197,145);
//lv_obj_add_flag(dot_obj,LV_OBJ_FLAG_HIDDEN);
lv_timer_create(move_arrow_task_cb,100,parent);
return;
#endif
lv_obj_t *wiper_img = lv_img_create(parent);//3
lv_img_set_src(wiper_img,IMG_INSTRUMENT_ICO3);
lv_obj_align_to(wiper_img,left_img,LV_ALIGN_OUT_RIGHT_MID,20,0);
lv_obj_t *led_ico1_img = lv_img_create(parent);//4
lv_img_set_src(led_ico1_img,IMG_INSTRUMENT_ICO11);
lv_obj_align_to(led_ico1_img,right_img,LV_ALIGN_OUT_LEFT_MID,-10,0);
lv_obj_t *led_ico2_img = lv_img_create(parent);//5
lv_img_set_src(led_ico2_img,IMG_INSTRUMENT_ICO7);
lv_obj_align_to(led_ico2_img,led_ico1_img,LV_ALIGN_OUT_LEFT_MID,-10,0);
lv_obj_t * trip_lab = lv_label_create(parent);//6
lv_obj_set_style_text_color(trip_lab,get_label_color(),0);
lv_obj_set_style_text_font(trip_lab,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(trip_lab, LV_ALIGN_BOTTOM_MID, 140, -10);
lv_label_set_text_fmt(trip_lab,"%d",trip_val);
lv_obj_t * odb_lab = lv_label_create(parent);//7
lv_obj_set_style_text_color(odb_lab,get_label_color(),0);
lv_obj_set_style_text_font(odb_lab,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(odb_lab, LV_ALIGN_BOTTOM_LEFT, 110, -10);
lv_label_set_text_fmt(odb_lab,"%d",odb_val);
lv_obj_t *left_batt_img = lv_img_create(parent);//8
lv_img_set_src(left_batt_img,IMG_BATT_EMPTY);
lv_obj_align(left_batt_img,LV_ALIGN_LEFT_MID,55,0);
lv_obj_t *right_batt_img = lv_img_create(parent);//9
lv_img_set_src(right_batt_img,IMG_BATT_EMPTY);
lv_obj_align(right_batt_img,LV_ALIGN_RIGHT_MID,-55,0);
lv_obj_t *right_slider_battery = lv_slider_create(parent);//10
lv_slider_set_value(right_slider_battery, 50, LV_ANIM_OFF);
if(lv_slider_get_mode(right_slider_battery) == LV_SLIDER_MODE_RANGE)
lv_slider_set_left_value(right_slider_battery, 0,LV_ANIM_OFF);
lv_obj_set_width(right_slider_battery, 30);
lv_obj_set_height(right_slider_battery, 62);
lv_obj_align(right_slider_battery,LV_ALIGN_RIGHT_MID,-55,0);
lv_obj_set_style_radius(right_slider_battery,0,LV_PART_MAIN);
lv_obj_set_style_radius(right_slider_battery,0,LV_PART_INDICATOR);
//lv_obj_set_align(ui_Slider_Battery, LV_ALIGN_CENTER);
lv_obj_set_style_bg_color(right_slider_battery, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(right_slider_battery, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(right_slider_battery, lv_color_hex(0xFFFFFF), LV_PART_INDICATOR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(right_slider_battery, 0, LV_PART_INDICATOR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_img_src(right_slider_battery, &batt_full_gren, LV_PART_INDICATOR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(right_slider_battery, lv_color_hex(0xFFFFFF), LV_PART_KNOB | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(right_slider_battery, 0, LV_PART_KNOB | LV_STATE_DEFAULT);
lv_obj_t *left_slider_battery = lv_slider_create(parent);//11
lv_slider_set_value(left_slider_battery, 20, LV_ANIM_OFF);
if(lv_slider_get_mode(left_slider_battery) == LV_SLIDER_MODE_RANGE)
lv_slider_set_left_value(left_slider_battery, 0,LV_ANIM_OFF);
lv_obj_set_width(left_slider_battery, 30);
lv_obj_set_height(left_slider_battery, 62);
lv_obj_align(left_slider_battery,LV_ALIGN_LEFT_MID,55,0);
lv_obj_set_style_radius(left_slider_battery,0,LV_PART_MAIN);
lv_obj_set_style_radius(left_slider_battery,0,LV_PART_INDICATOR);
lv_obj_set_style_bg_color(left_slider_battery, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(left_slider_battery, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(left_slider_battery, lv_color_hex(0xFFFFFF), LV_PART_INDICATOR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(left_slider_battery, 0, LV_PART_INDICATOR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_img_src(left_slider_battery, &batt_full_yellow, LV_PART_INDICATOR | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(left_slider_battery, lv_color_hex(0xFFFFFF), LV_PART_KNOB | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(left_slider_battery, 0, LV_PART_KNOB | LV_STATE_DEFAULT);
lv_obj_t * left_batt_val = lv_label_create(parent);//12
lv_obj_set_style_text_color(left_batt_val,lv_color_make(250,198,13),0);
lv_obj_set_style_text_font(left_batt_val,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(left_batt_val, left_batt_img,LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
lv_label_set_text_fmt(left_batt_val,"%d%%",20);
lv_obj_t * right_batt_val = lv_label_create(parent);//13
lv_obj_set_style_text_color(right_batt_val,lv_color_make(8,255,74),0);
lv_obj_set_style_text_font(right_batt_val,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(right_batt_val, right_batt_img,LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
lv_label_set_text_fmt(right_batt_val,"%d%%",50);
lv_obj_add_event_cb(right_slider_battery, slider1_change_cb, LV_EVENT_VALUE_CHANGED, (void*)right_batt_val);
lv_obj_add_event_cb(left_slider_battery, slider2_change_cb, LV_EVENT_VALUE_CHANGED, (void*)left_batt_val);
lv_obj_t * sta_lab = lv_label_create(parent);//10
lv_obj_set_style_text_color(sta_lab,lv_color_make(11,250,73),0);
lv_obj_set_style_text_font(sta_lab,LV_FONT_MEDIUM_NUMBER_36PX,0);
lv_obj_align(sta_lab, LV_ALIGN_CENTER, 0, 55);
lv_label_set_text(sta_lab,"R");
lv_obj_t * ecu_label = lv_label_create(parent);//10
lv_obj_set_style_text_color(ecu_label,lv_color_hex(0x00ff00),0);
lv_obj_set_style_text_font(ecu_label,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(ecu_label, LV_ALIGN_BOTTOM_LEFT, 10, -10);
lv_label_set_text(ecu_label,"ECU");
lv_obj_t * odb_label = lv_label_create(parent);//11
lv_obj_set_style_text_color(odb_label,get_label_color(),0);
lv_obj_set_style_text_font(odb_label,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(odb_label,ecu_label, LV_ALIGN_OUT_RIGHT_BOTTOM, 10, 0);
lv_label_set_text(odb_label,"ODB");
lv_obj_t * ready_label = lv_label_create(parent);//12
lv_obj_set_style_text_color(ready_label,lv_color_hex(0x00ff00),0);
lv_obj_set_style_text_font(ready_label,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(ready_label, LV_ALIGN_BOTTOM_MID, 0, -15);
lv_label_set_text(ready_label,"READY");
lv_obj_t * trip_label = lv_label_create(parent);//
lv_obj_set_style_text_color(trip_label,get_label_color(),0);
lv_obj_set_style_text_font(trip_label,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align(trip_label, LV_ALIGN_BOTTOM_MID, 80, -10);
lv_label_set_text(trip_label,"TRIP");
lv_obj_t * trip_uint = lv_label_create(parent);//
lv_obj_set_style_text_color(trip_uint,get_label_color(),0);
lv_obj_set_style_text_font(trip_uint,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(trip_uint,trip_lab, LV_ALIGN_OUT_RIGHT_BOTTOM, 10, -2);
lv_label_set_text(trip_uint,"KM");
lv_obj_t * odb_uint = lv_label_create(parent);//
lv_obj_set_style_text_color(odb_uint,get_label_color(),0);
lv_obj_set_style_text_font(odb_uint,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(odb_uint,odb_lab, LV_ALIGN_OUT_RIGHT_BOTTOM, 15, -2);
lv_label_set_text(odb_uint,"KM");
lv_obj_t * left_batt_lab = lv_label_create(parent);//
lv_obj_set_style_text_color(left_batt_lab,lv_color_make(137,137,137),0);
lv_obj_set_style_text_font(left_batt_lab,LV_FONT_SMALL_NUMBER_12PX,0);
lv_obj_align_to(left_batt_lab, left_batt_img,LV_ALIGN_OUT_TOP_MID, 0, -5);
lv_label_set_text(left_batt_lab,"BAT1");
lv_obj_t * right_batt_lab= lv_label_create(parent);//
lv_obj_set_style_text_color(right_batt_lab,lv_color_make(137,137,137),0);
lv_obj_set_style_text_font(right_batt_lab,LV_FONT_SMALL_NUMBER_12PX,0);
lv_obj_align_to(right_batt_lab, right_batt_img,LV_ALIGN_OUT_TOP_MID, 0, -5);
lv_label_set_text(right_batt_lab,"BAT2");
lv_obj_t *left_ico1 = lv_img_create(parent);
lv_img_set_src(left_ico1,IMG_INSTRUMENT_ICO1);
lv_obj_align(left_ico1,LV_ALIGN_LEFT_MID,100,-25);
lv_obj_t *left_ico2 = lv_img_create(parent);
lv_img_set_src(left_ico2,IMG_INSTRUMENT_ICO5);
lv_obj_align_to(left_ico2,left_ico1,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *left_ico3 = lv_img_create(parent);
lv_img_set_src(left_ico3,IMG_INSTRUMENT_ICO2);
lv_obj_align_to(left_ico3,left_ico2,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *right_ico1 = lv_img_create(parent);
lv_img_set_src(right_ico1,IMG_INSTRUMENT_ICO6);
lv_obj_align(right_ico1,LV_ALIGN_RIGHT_MID,-100,-25);
lv_obj_t *right_ico2 = lv_img_create(parent);
lv_img_set_src(right_ico2,IMG_INSTRUMENT_ICO12);
lv_obj_align_to(right_ico2,right_ico1,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *right_ico3 = lv_img_create(parent);
lv_img_set_src(right_ico3,IMG_INSTRUMENT_ICO4);
lv_obj_align_to(right_ico3,right_ico2,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *hand_img = lv_img_create(parent);//4
lv_img_set_src(hand_img,IMG_CENTER_ARROWS);
lv_obj_align(hand_img,LV_ALIGN_CENTER,0,-50);
lv_img_set_pivot(hand_img, 5, 70);
lv_img_set_angle(hand_img, 3200);
// lv_obj_t *dot2_obj = lv_btn_create(parent);
// lv_obj_set_size(dot2_obj,10,10);
// lv_obj_set_style_pad_all(dot2_obj,0,0);
// lv_obj_set_style_radius(dot2_obj,5,0);
// lv_obj_set_style_bg_color(dot2_obj,lv_color_make(0x0, 0xff, 0),0);
// lv_obj_set_pos(dot2_obj,242-5,119);
lv_obj_t *arc_img = lv_img_create(parent);
lv_obj_set_pos(arc_img,185,65);
if(background_style==0)
{
lv_img_set_src(arc_img,IMG_CIRCULAR_BLACK);
}else{
lv_img_set_src(arc_img,IMG_CIRCULAR_WHITE);
}
lv_obj_t * speed_lab= lv_label_create(parent);//3
lv_obj_set_style_text_color(speed_lab,lv_color_make(216,38,44),0);
lv_obj_set_style_text_font(speed_lab,LV_FONT_BIG_NUMBER_44PX,0);
lv_obj_align(speed_lab,LV_ALIGN_CENTER, 0, -20);
lv_label_set_text_fmt(speed_lab,"%d",100);
lv_obj_t * speed_uint = lv_label_create(parent);//
lv_obj_set_style_text_color(speed_uint,get_label_color(),0);
lv_obj_set_style_text_font(speed_uint,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align(speed_uint, LV_ALIGN_CENTER, 0, +10);
lv_label_set_text(speed_uint,"km/h");
refresh_timer = lv_timer_create(refresh_timer_cb,10,parent);
}
#else
void fr_lv_instrument_panel_func(lv_obj_t *parent, lv_point_t *top)
{
//start_angle = -atan2(143 - center_y, 199 - center_x) * 180 / M_PI + 360; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
// end_angle = -atan2(143 - center_y, 284 - center_x) * 180 / M_PI + 360; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
//start_angle = -atan2(143 - center_y, 199 - center_x) * 180 / M_PI + 360; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
//end_angle = -atan2(143 - center_y, 284 - center_x) * 180 / M_PI + 360; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
start_angle = atan2(center_y - 143, 199 - center_x) * 180 / M_PI; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
end_angle = atan2(center_y - 143, 284 - center_x) * 180 / M_PI; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
start_angle = -150;
// start_angle = atan2(143 - center_y, 199 - center_x) * 180 / M_PI; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
// end_angle = atan2(143 - center_y, 284 - center_x) * 180 / M_PI; // <20>Զ<EFBFBD>Ϊ<EFBFBD><CEAA>λ
// if (start_angle < 0) start_angle += 360;
// if (end_angle < 0) end_angle += 360;
printf("<EFBFBD><EFBFBD>ʼ<EFBFBD>Ƕȣ<EFBFBD>%lf <20><>\n", start_angle);
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕȣ<EFBFBD>%lf <20><>\n", end_angle);
if(!lv_obj_is_valid(parent))
return;
UI_PARENT_INIT(parent);
if(background_style==0)
{
lv_obj_t* panel_bg_img = lv_img_big_create(parent,panel_bg1_src,0,0,5,0);//0
}
else{
lv_obj_t* panel_bg_img = lv_img_big_create(parent,panel_bg2_src,0,0,5,0);//0
}
lv_obj_t *left_img = lv_img_create(parent);//1
lv_img_set_src(left_img,left_img_src[1]);
lv_obj_align(left_img,LV_ALIGN_TOP_LEFT,50,10);
lv_obj_t *right_img = lv_img_create(parent);//2
lv_img_set_src(right_img,right_img_src[1]);
lv_obj_align(right_img,LV_ALIGN_TOP_RIGHT,-50,10);
lv_obj_t * speed_lab= lv_label_create(parent);//3
lv_obj_set_style_text_color(speed_lab,lv_color_make(216,38,44),0);
lv_obj_set_style_text_font(speed_lab,LV_FONT_BIG_NUMBER_44PX,0);
lv_obj_align(speed_lab,LV_ALIGN_CENTER, 0, -20);
lv_label_set_text_fmt(speed_lab,"%d",100);
#if(TEST_FUN==1)
lv_obj_t *dot_obj = lv_btn_create(parent);
lv_obj_set_size(dot_obj,3,3);
lv_obj_set_style_pad_all(dot_obj,0,0);
lv_obj_set_style_radius(dot_obj,1,0);
lv_obj_set_style_bg_color(dot_obj,lv_color_make(0xff, 0, 0),0);
lv_obj_set_pos(dot_obj,197,145);
#else
lv_obj_t *arrows_img = lv_img_create(parent);//4
lv_img_set_src(arrows_img,IMG_INSTRUMENT_ICO8);
lv_obj_set_pos(arrows_img,197,145);
//lv_img_set_pivot(arrows_img, 50, 15);
lv_timer_create(move_arrow_task_cb,100,parent);
#endif
lv_obj_t *wiper_img = lv_img_create(parent);//5
lv_img_set_src(wiper_img,IMG_INSTRUMENT_ICO3);
lv_obj_align_to(wiper_img,left_img,LV_ALIGN_OUT_RIGHT_MID,20,0);
lv_obj_t *led_ico1_img = lv_img_create(parent);//6
lv_img_set_src(led_ico1_img,IMG_INSTRUMENT_ICO11);
lv_obj_align_to(led_ico1_img,right_img,LV_ALIGN_OUT_LEFT_MID,-10,0);
lv_obj_t *led_ico2_img = lv_img_create(parent);//7
lv_img_set_src(led_ico2_img,IMG_INSTRUMENT_ICO7);
lv_obj_align_to(led_ico2_img,led_ico1_img,LV_ALIGN_OUT_LEFT_MID,-10,0);
lv_obj_t * trip_lab = lv_label_create(parent);//8
lv_obj_set_style_text_color(trip_lab,get_label_color(),0);
lv_obj_set_style_text_font(trip_lab,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(trip_lab, LV_ALIGN_BOTTOM_MID, 140, -10);
lv_label_set_text_fmt(trip_lab,"%d",trip_val);
lv_obj_t * odb_lab = lv_label_create(parent);//9
lv_obj_set_style_text_color(odb_lab,get_label_color(),0);
lv_obj_set_style_text_font(odb_lab,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(odb_lab, LV_ALIGN_BOTTOM_LEFT, 110, -10);
lv_label_set_text_fmt(odb_lab,"%d",odb_val);
lv_obj_t * sta_lab = lv_label_create(parent);//10
lv_obj_set_style_text_color(sta_lab,lv_color_make(11,250,73),0);
lv_obj_set_style_text_font(sta_lab,LV_FONT_MEDIUM_NUMBER_36PX,0);
lv_obj_align(sta_lab, LV_ALIGN_CENTER, 0, 55);
lv_label_set_text(sta_lab,"R");
lv_obj_t * ecu_label = lv_label_create(parent);//10
lv_obj_set_style_text_color(ecu_label,lv_color_hex(0x00ff00),0);
lv_obj_set_style_text_font(ecu_label,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(ecu_label, LV_ALIGN_BOTTOM_LEFT, 10, -10);
lv_label_set_text(ecu_label,"ECU");
lv_obj_t * odb_label = lv_label_create(parent);//11
lv_obj_set_style_text_color(odb_label,get_label_color(),0);
lv_obj_set_style_text_font(odb_label,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(odb_label,ecu_label, LV_ALIGN_OUT_RIGHT_BOTTOM, 10, 0);
lv_label_set_text(odb_label,"ODB");
lv_obj_t * ready_label = lv_label_create(parent);//12
lv_obj_set_style_text_color(ready_label,lv_color_hex(0x00ff00),0);
lv_obj_set_style_text_font(ready_label,LV_FONT_SMALL_NUMBER_20PX,0);
lv_obj_align(ready_label, LV_ALIGN_BOTTOM_MID, 0, -15);
lv_label_set_text(ready_label,"READY");
lv_obj_t * trip_label = lv_label_create(parent);//
lv_obj_set_style_text_color(trip_label,get_label_color(),0);
lv_obj_set_style_text_font(trip_label,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align(trip_label, LV_ALIGN_BOTTOM_MID, 80, -10);
lv_label_set_text(trip_label,"TRIP");
lv_obj_t * trip_uint = lv_label_create(parent);//
lv_obj_set_style_text_color(trip_uint,get_label_color(),0);
lv_obj_set_style_text_font(trip_uint,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(trip_uint,trip_lab, LV_ALIGN_OUT_RIGHT_BOTTOM, 10, -2);
lv_label_set_text(trip_uint,"KM");
lv_obj_t * odb_uint = lv_label_create(parent);//
lv_obj_set_style_text_color(odb_uint,get_label_color(),0);
lv_obj_set_style_text_font(odb_uint,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(odb_uint,odb_lab, LV_ALIGN_OUT_RIGHT_BOTTOM, 15, -2);
lv_label_set_text(odb_uint,"KM");
lv_obj_t *left_batt_img = lv_img_create(parent);
lv_img_set_src(left_batt_img,batt_black_img_src[2]);
lv_obj_align(left_batt_img,LV_ALIGN_LEFT_MID,55,0);
lv_obj_t *right_batt_img = lv_img_create(parent);
lv_img_set_src(right_batt_img,batt_black_img_src[3]);
lv_obj_align(right_batt_img,LV_ALIGN_RIGHT_MID,-55,0);
lv_obj_t * left_batt_val = lv_label_create(parent);//
lv_obj_set_style_text_color(left_batt_val,lv_color_make(250,198,13),0);
lv_obj_set_style_text_font(left_batt_val,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(left_batt_val, left_batt_img,LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
lv_label_set_text_fmt(left_batt_val,"%d%%",50);
lv_obj_t * right_batt_val = lv_label_create(parent);//
lv_obj_set_style_text_color(right_batt_val,lv_color_make(8,255,74),0);
lv_obj_set_style_text_font(right_batt_val,LV_FONT_SMALL_NUMBER_16PX,0);
lv_obj_align_to(right_batt_val, right_batt_img,LV_ALIGN_OUT_BOTTOM_MID, 0, 5);
lv_label_set_text_fmt(right_batt_val,"%d%%",90);
lv_obj_t * left_batt_lab = lv_label_create(parent);//
lv_obj_set_style_text_color(left_batt_lab,lv_color_make(137,137,137),0);
lv_obj_set_style_text_font(left_batt_lab,LV_FONT_SMALL_NUMBER_12PX,0);
lv_obj_align_to(left_batt_lab, left_batt_img,LV_ALIGN_OUT_TOP_MID, 0, -5);
lv_label_set_text(left_batt_lab,"BAT1");
lv_obj_t * right_batt_lab= lv_label_create(parent);//
lv_obj_set_style_text_color(right_batt_lab,lv_color_make(137,137,137),0);
lv_obj_set_style_text_font(right_batt_lab,LV_FONT_SMALL_NUMBER_12PX,0);
lv_obj_align_to(right_batt_lab, right_batt_img,LV_ALIGN_OUT_TOP_MID, 0, -5);
lv_label_set_text(right_batt_lab,"BAT2");
// lv_obj_t * arc = lv_arc_create(parent);//<2F><><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// lv_obj_set_size(arc,105,105);
// lv_arc_set_rotation(arc,0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
// lv_arc_set_bg_angles(arc,0,360); //<2F><><EFBFBD>ýǶ<C3BD>
// lv_arc_set_range(arc,0,270);
// lv_arc_set_change_rate(arc,1);
// lv_obj_set_style_arc_width(arc, 2, LV_PART_MAIN); // <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>״̬<D7B4>µĿ<C2B5><C4BF><EFBFBD>
// lv_obj_set_style_arc_color(arc, lv_color_make(0,0,255), LV_PART_MAIN);
// lv_obj_remove_style(arc,NULL,LV_PART_KNOB); //<2F>Ƴ<EFBFBD><C6B3><EFBFBD>ʽ
// lv_obj_clear_flag(arc,LV_OBJ_FLAG_CLICKABLE);//<2F><><EFBFBD><EFBFBD><EFBFBD>־λ
// lv_obj_align(arc,LV_ALIGN_CENTER,0,-18);
lv_obj_t *left_ico1 = lv_img_create(parent);
lv_img_set_src(left_ico1,IMG_INSTRUMENT_ICO1);
lv_obj_align(left_ico1,LV_ALIGN_LEFT_MID,100,-25);
lv_obj_t *left_ico2 = lv_img_create(parent);
lv_img_set_src(left_ico2,IMG_INSTRUMENT_ICO5);
lv_obj_align_to(left_ico2,left_ico1,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *left_ico3 = lv_img_create(parent);
lv_img_set_src(left_ico3,IMG_INSTRUMENT_ICO2);
lv_obj_align_to(left_ico3,left_ico2,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *right_ico1 = lv_img_create(parent);
lv_img_set_src(right_ico1,IMG_INSTRUMENT_ICO6);
lv_obj_align(right_ico1,LV_ALIGN_RIGHT_MID,-100,-25);
lv_obj_t *right_ico2 = lv_img_create(parent);
lv_img_set_src(right_ico2,IMG_INSTRUMENT_ICO12);
lv_obj_align_to(right_ico2,right_ico1,LV_ALIGN_OUT_BOTTOM_MID,0,10);
lv_obj_t *right_ico3 = lv_img_create(parent);
lv_img_set_src(right_ico3,IMG_INSTRUMENT_ICO4);
lv_obj_align_to(right_ico3,right_ico2,LV_ALIGN_OUT_BOTTOM_MID,0,10);
// refresh_timer = lv_timer_create(refresh_timer_cb,20,parent);
}
#endif

View File

@ -0,0 +1,665 @@
#include "lvgl.h"
#include "fr_lv_public_func.h"
const lv_img_dsc_t* switch_ico_img[2] =
{
IMG_SWITCH_OFF_ICO,
IMG_SWITCH_ON_ICO,
};
// const uint16_t format_12hour_str[2]=
// {
// STR_ID_AM,
// STR_ID_PM,
// };
const uint16_t week_str[7]= //周日->周一
{
STR_ID_SUM,
STR_ID_MON,
STR_ID_TUE,
STR_ID_WED,
STR_ID_THU,
STR_ID_FRI,
STR_ID_SAT,
};
const lv_img_dsc_t* exercise_type_img[115] =
{
IMG_EXERCISE_SMALL_001_OUTDOOR_RUNNING ,
IMG_EXERCISE_SMALL_002_OUTDOOR_CYCLING ,
IMG_EXERCISE_SMALL_003_SKIPPING ,
IMG_EXERCISE_SMALL_004_SWIMMING ,
IMG_EXERCISE_SMALL_005_BADMINTON ,
IMG_EXERCISE_SMALL_006_TABLE_TENNIS ,
IMG_EXERCISE_SMALL_007_TENNIS ,
IMG_EXERCISE_SMALL_008_CLIMBING ,
IMG_EXERCISE_SMALL_009_HIKING ,
IMG_EXERCISE_SMALL_010_BASKETBALL ,
IMG_EXERCISE_SMALL_011_SOCCER ,
IMG_EXERCISE_SMALL_012_BASEBALL ,
IMG_EXERCISE_SMALL_013_VOLLEYBALL ,
IMG_EXERCISE_SMALL_014_CRICKET ,
IMG_EXERCISE_SMALL_015_RUGBY ,
IMG_EXERCISE_SMALL_016_HOCKEY ,
IMG_EXERCISE_SMALL_017_DANCE ,
IMG_EXERCISE_SMALL_018_INDOOR_CYCLING ,
IMG_EXERCISE_SMALL_019_YOGA ,
IMG_EXERCISE_SMALL_020_SIT_UPS ,
IMG_EXERCISE_SMALL_021_TREADMILL ,
IMG_EXERCISE_SMALL_022_GYMNASTICS ,
IMG_EXERCISE_SMALL_023_ROWING ,
IMG_EXERCISE_SMALL_024_JUMPING_JACK ,
IMG_EXERCISE_SMALL_025_FREE_TRAINING ,
IMG_EXERCISE_SMALL_026_OUTDOOR_WALKING ,
IMG_EXERCISE_SMALL_027_INDOOR_RUN ,
IMG_EXERCISE_SMALL_028_STRENGTH_TRAINING ,
IMG_EXERCISE_SMALL_029_STEPPING ,
IMG_EXERCISE_SMALL_030_HORSE_RIDING ,
IMG_EXERCISE_SMALL_031_ELLIPTICAL_TRAINER ,
IMG_EXERCISE_SMALL_032_TAI_CHI ,
IMG_EXERCISE_SMALL_033_SHUTTLECOCK ,
IMG_EXERCISE_SMALL_034_BOXING ,
IMG_EXERCISE_SMALL_035_OUTDOOR_WALK ,
IMG_EXERCISE_SMALL_036_CROSS_COUNTRY_RUNNING ,
IMG_EXERCISE_SMALL_037_SKIING ,
IMG_EXERCISE_SMALL_038_ICE_HOCKEY ,
IMG_EXERCISE_SMALL_039_TAEKWONDO ,
IMG_EXERCISE_SMALL_040_VO2MAX_TEST ,
IMG_EXERCISE_SMALL_041_ROWING_MACHING ,
IMG_EXERCISE_SMALL_042_STROLLER ,
IMG_EXERCISE_SMALL_043_ATHLETICS ,// 占位 复用图标代替
IMG_EXERCISE_SMALL_043_ATHLETICS ,
IMG_EXERCISE_SMALL_044_WAIST_AND_ABDOMINAL_TRAINING,
IMG_EXERCISE_SMALL_045_KARATE ,
IMG_EXERCISE_SMALL_046_RELAXATION ,
IMG_EXERCISE_SMALL_047_CROSS_TRAINING ,
IMG_EXERCISE_SMALL_048_PILATES ,
IMG_EXERCISE_SMALL_049_CROSS_FIT ,
IMG_EXERCISE_SMALL_050_FUNCTIONAL_TRAINING ,
IMG_EXERCISE_SMALL_051_PHYSICAL_TRAINING ,
IMG_EXERCISE_SMALL_052_ARCHERY ,
IMG_EXERCISE_SMALL_053_FLEXIBILITY ,
IMG_EXERCISE_SMALL_054_MIXED_AEROBIC ,
IMG_EXERCISE_SMALL_055_LATIN_DANCE ,
IMG_EXERCISE_SMALL_056_STREET_DANCE ,
IMG_EXERCISE_SMALL_057_FREE_BOXING ,
IMG_EXERCISE_SMALL_058_BALLET ,
IMG_EXERCISE_SMALL_059_AUSTRALIAN_SOCCER ,
IMG_EXERCISE_SMALL_060_MARTIAL_ARTS ,
IMG_EXERCISE_SMALL_061_STAIR_CLIMBING ,
IMG_EXERCISE_SMALL_062_HANDBALL ,
IMG_EXERCISE_SMALL_063_BOWLING ,
IMG_EXERCISE_SMALL_064_SQUASH ,
IMG_EXERCISE_SMALL_065_CURLING ,
IMG_EXERCISE_SMALL_066_HUNTING ,
IMG_EXERCISE_SMALL_067_SNOWBOARDING ,
IMG_EXERCISE_SMALL_068_LEISURE_SPORTS ,
IMG_EXERCISE_SMALL_069_AMERICAN_FOOTBALL ,
IMG_EXERCISE_SMALL_070_HAND_CYCLING ,
IMG_EXERCISE_SMALL_071_FISHING ,
IMG_EXERCISE_SMALL_072_FRISBEE ,
IMG_EXERCISE_SMALL_072_FRISBEE , //占位 复用图标代替
IMG_EXERCISE_SMALL_073_GOLF ,
IMG_EXERCISE_SMALL_074_FOLK_DANCE ,
IMG_EXERCISE_SMALL_075_DOWNHILL_SKIING ,
IMG_EXERCISE_SMALL_076_SNOW_SPORTS ,
IMG_EXERCISE_SMALL_077_CLAM_MEDIATION_SPORTS ,
IMG_EXERCISE_SMALL_078_CORE_TRAINING ,
IMG_EXERCISE_SMALL_079_ICE_SKATING ,
IMG_EXERCISE_SMALL_080_FITNESS_GAMES ,
IMG_EXERCISE_SMALL_081_GYMNASTICS ,
IMG_EXERCISE_SMALL_082_GROUP_TRAINING ,
IMG_EXERCISE_SMALL_083_KICKBOXING ,
IMG_EXERCISE_SMALL_084_LACROSSE ,
IMG_EXERCISE_SMALL_085_FOAM_ROLLING ,
IMG_EXERCISE_SMALL_086_WRESTLING ,
IMG_EXERCISE_SMALL_087_FENCING ,
IMG_EXERCISE_SMALL_088_SOFTBALL ,
IMG_EXERCISE_SMALL_089_SINGLE_BAR ,
IMG_EXERCISE_SMALL_090_PARALLEL_BARS ,
IMG_EXERCISE_SMALL_091_ROLLER_SKATING ,
IMG_EXERCISE_SMALL_092_HULA_HOOP ,
IMG_EXERCISE_SMALL_093_DARTS ,
IMG_EXERCISE_SMALL_094_PICKLEBALL ,
IMG_EXERCISE_SMALL_095_HIIT ,
IMG_EXERCISE_SMALL_096_SHOOTING ,
IMG_EXERCISE_SMALL_097_JUDO ,
IMG_EXERCISE_SMALL_098_TRAMPOLINE ,
IMG_EXERCISE_SMALL_099_SKATEBOARDING ,
IMG_EXERCISE_SMALL_100_HOVERBOARD ,
IMG_EXERCISE_SMALL_101_BLADING ,
IMG_EXERCISE_SMALL_102_PARKOUR ,
IMG_EXERCISE_SMALL_103_DIVING ,
IMG_EXERCISE_SMALL_104_SURFING ,
IMG_EXERCISE_SMALL_105_SNORKELING ,
IMG_EXERCISE_SMALL_106_PULL_UPS ,
IMG_EXERCISE_SMALL_107_PUSH_UPS ,
IMG_EXERCISE_SMALL_108_PLANKING ,
IMG_EXERCISE_SMALL_109_ROCK_CLIMBING ,
IMG_EXERCISE_SMALL_110_HIGH_JUMP ,
IMG_EXERCISE_SMALL_111_BUNGEE_JUMP ,
IMG_EXERCISE_SMALL_112_LONG_JUMP ,
IMG_EXERCISE_SMALL_113_MARATHON ,
};
const uint16_t exercise_type_str[115] =
{
STR_ID_OUTDOOR_RUN ,
STR_ID_OUTDOOR_CYCLE ,
STR_ID_JUMP_ROPE ,
STR_ID_SWIM ,
STR_ID_BADMINTON ,
STR_ID_TABLE_TENNIS ,
STR_ID_TENNIS ,
STR_ID_MOUNTAINEERING ,
STR_ID_HIKING ,
STR_ID_BASKETBALL ,
STR_ID_FOOTBALL ,
STR_ID_BASEBALL ,
STR_ID_VOLLEYBALL ,
STR_ID_CRICKET ,
STR_ID_RUGBY ,
STR_ID_HOCKEY ,
STR_ID_DANCE ,
STR_ID_INDOOR_CYCLE ,
STR_ID_YOGA ,
STR_ID_SIT_UP ,
STR_ID_TREADMILL ,
STR_ID_GYMNASTICS ,
STR_ID_BOATING ,
STR_ID_JUMPING_JACK ,
STR_ID_FREE_TRAINING ,
STR_ID_OUTDOOR_WALK ,
STR_ID_INDOOR_RUN ,
STR_ID_STRENGTH_TRAINING ,
STR_ID_STEP_TRAINING ,
STR_ID_HORSE_RIDING ,
STR_ID_ELLIPTICAL_TRAINER ,
STR_ID_TAI_CHI ,
STR_ID_SHUTTLECOCK ,
STR_ID_BOXING ,
STR_ID_INDOOR_WALK ,
STR_ID_TRAIL_RUNNING ,
STR_ID_SKIING ,
STR_ID_ICE_HOCKEY ,
STR_ID_TAEKWONDO ,
STR_ID_VO2MAX_TEST ,
STR_ID_ROWING_MACHING ,
STR_ID_AIR_WALKER ,
STR_ID_HIKING ,
STR_ID_ATHLETICS ,
STR_ID_WAIST_TRAINING ,
STR_ID_KARATE ,
STR_ID_COOLDOWN ,
STR_ID_CROSS_TRAINING ,
STR_ID_PILATES ,
STR_ID_CROSS_FIT ,
STR_ID_FUNCTIONAL_TRAINING ,
STR_ID_PHYSICAL_TRAINING ,
STR_ID_ARCHERY ,
STR_ID_FLEXIBILITY ,
STR_ID_MIXED_CARDIO ,
STR_ID_LATIN_DANCE ,
STR_ID_STREET_DANCE ,
STR_ID_KICKBOXING ,
STR_ID_BALLET ,
STR_ID_AUSTRALIAN_FOOTBALL ,
STR_ID_MARTIAL_ARTS ,
STR_ID_STAIRS ,
STR_ID_HANDBALL ,
STR_ID_BOWLING ,
STR_ID_RACQUETBALL ,
STR_ID_CURLING ,
STR_ID_HUNTING ,
STR_ID_SNOWBOARDING ,
STR_ID_PLAY ,
STR_ID_AMERICAN_FOOTBALL ,
STR_ID_HAND_CYCLING ,
STR_ID_FISHING ,
STR_ID_DISC_SPORTS ,
STR_ID_RUGBY ,
STR_ID_GOLF ,
STR_ID_FOLK_DANCE ,
STR_ID_DOWNHILL_SKIING ,
STR_ID_SNOW_SPORTS ,
STR_ID_MIND_AND_BODY ,
STR_ID_CORE_TRAINING ,
STR_ID_SKATING ,
STR_ID_FITNESS_GAMING ,
STR_ID_AEROBICS ,
STR_ID_GROUP_TRAINING ,
STR_ID_KENDO ,
STR_ID_LACROSSE ,
STR_ID_ROLLING ,
STR_ID_WRESTLING ,
STR_ID_FENCING ,
STR_ID_SOFTBALL ,
STR_ID_SINGLE_BAR ,
STR_ID_PARALLEL_BARS ,
STR_ID_ROLLER_SKATING ,
STR_ID_HULA_HOOP ,
STR_ID_DARTS ,
STR_ID_PICKLEBALL ,
STR_ID_HIIT ,
STR_ID_SHOOTING ,
STR_ID_JUDO ,
STR_ID_TRAMPOLINE ,
STR_ID_SKATEBOARD ,
STR_ID_HOVERBOARD ,
STR_ID_BLADING ,
STR_ID_PARKOUR ,
STR_ID_DIVING ,
STR_ID_SURFING ,
STR_ID_SNORKELING ,
STR_ID_PULL_UP ,
STR_ID_PUSH_UP ,
STR_ID_PLANKING ,
STR_ID_ROCK_CLIMBING ,
STR_ID_HIGHT_JUMP ,
STR_ID_BUNGEE_JUMPING ,
STR_ID_LONG_JUMP ,
STR_ID_MARATHON ,
};
const uint16_t measure_text_str[3]=
{
STR_ID_START_MEASURING,
STR_ID_MEASURING,
STR_ID_MEASURE_AGAIN,
};
void lv_img_big_disp(lv_obj_t* parent, const lv_img_dsc_t **src , lv_coord_t x, lv_coord_t y,uint8_t img_num,uint8_t start)
{
lv_obj_t *cont1 = lv_obj_create(parent);
lv_obj_remove_style_all(cont1);
lv_obj_clear_flag(cont1, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_scrollbar_mode(cont1, LV_SCROLLBAR_MODE_OFF);
lv_obj_set_style_bg_color(cont1,lv_color_black(),0);
//lv_obj_set_size(cont1,LV_PCT(100),LV_PCT(100));
lv_obj_set_size(cont1,LV_SIZE_CONTENT,LV_SIZE_CONTENT);
lv_obj_align(cont1,LV_ALIGN_TOP_LEFT,x,y);
lv_obj_t *old_obj = NULL;
for (uint8_t i = 0; i < img_num; i++)
{
lv_obj_t *img1 = lv_img_create(cont1);
lv_img_set_src(img1,src[start+i]);
if(i == 0)
lv_obj_set_pos(img1,0,0);
else
lv_obj_align_to(img1,old_obj,LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
old_obj = img1;
}
//lv_obj_clear_flag(cont1,LV_OBJ_FLAG_CLICKABLE);
}
lv_obj_t* lv_img_big_create(lv_obj_t* parent, const lv_img_dsc_t **src , lv_coord_t x, lv_coord_t y,uint8_t img_num,uint8_t start)
{
lv_obj_t *cont1 = lv_obj_create(parent);
lv_obj_remove_style_all(cont1);
lv_obj_clear_flag(cont1, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_scrollbar_mode(cont1, LV_SCROLLBAR_MODE_OFF);
lv_obj_set_size(cont1,LV_SIZE_CONTENT,LV_SIZE_CONTENT);
//lv_obj_align(cont1,LV_ALIGN_TOP_LEFT,x,y);
lv_obj_t *old_obj = NULL;
for(uint8_t i = 0; i < img_num; i++)
{
lv_obj_t *img1 = lv_img_create(cont1);
lv_img_set_src(img1,src[start+i]);
if(i == 0)
lv_obj_set_pos(img1,0,0);
else
lv_obj_align_to(img1,old_obj,LV_ALIGN_OUT_BOTTOM_LEFT,0,0);
old_obj = img1;
}
//lv_obj_clear_flag(cont1,LV_OBJ_FLAG_CLICKABLE);
return cont1;
}
lv_obj_t* lv_title_text_create(lv_obj_t* parent ,const char *str,lv_color_t value, uint8_t hour,uint8_t minute)
{
lv_obj_t *cont1 = lv_obj_create(parent);
lv_obj_remove_style_all(cont1);
lv_obj_set_size(cont1,LV_PCT(100),50);
lv_obj_t* title_label = lv_label_create(cont1);
lv_label_set_text_fmt(title_label,"%s",str);
lv_obj_set_style_text_font (title_label, LV_FONT_OSD_MEDIUM_32PX, 0);
lv_obj_set_style_text_color (title_label, value,0);
lv_obj_align (title_label, LV_ALIGN_LEFT_MID, 50, 0);
//时间标签
lv_obj_t* top_time = lv_label_create(cont1);
lv_label_set_text_fmt (top_time, "%02d:%02d",hour,minute);
lv_obj_set_style_text_color (top_time, lv_color_hex(0xffffff),0);
lv_obj_set_style_text_font (top_time,LV_FONT_MEDIUM_NUMBER_36PX, 0);
lv_obj_align (top_time, LV_ALIGN_RIGHT_MID, -50, 0);
return cont1;
}
void lv_img_change_big_img_src(lv_obj_t* parent, const lv_img_dsc_t **src ,uint8_t img_num,uint8_t start)
{
for (uint8_t i = 0; i < img_num; i++)
{
lv_obj_t *img1 = lv_obj_get_child(parent,i);
lv_img_set_src(img1,src[start+i]);
}
}
void convertTo12HourFormat(uint8_t *hours, uint8_t *isAM) {
if (*hours == 0) {
*hours = 12;
*isAM = 1;
} else if (*hours == 12) {
*isAM = 0;
} else if (*hours > 12) {
*hours -= 12;
*isAM = 0;
} else {
*isAM = 1;
}
}
uint8_t get_language_id(void)
{
// return 1;
return fr_system_get_language();
}
uint8_t get_system_curr_time_hour(void)
{
//return 12;
return fr_system_get_time_hour();
}
uint8_t get_system_curr_time_min(void)
{
//return 20;
return fr_system_get_time_minute();
}
void roller_mask_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t * obj = lv_event_get_target(e);
static int16_t mask_top_id = -1;
static int16_t mask_bottom_id = -1;
if (code == LV_EVENT_COVER_CHECK) {
lv_event_set_cover_res(e, LV_COVER_RES_MASKED);
} else if (code == LV_EVENT_DRAW_MAIN_BEGIN) {
/* add mask */
const lv_font_t * font = lv_obj_get_style_text_font(obj, LV_PART_MAIN);
lv_coord_t line_space = lv_obj_get_style_text_line_space(obj, LV_PART_MAIN);
lv_coord_t font_h = lv_font_get_line_height(font);
lv_area_t roller_coords;
lv_obj_get_coords(obj, &roller_coords);
lv_area_t rect_area;
rect_area.x1 = roller_coords.x1;
rect_area.x2 = roller_coords.x2;
rect_area.y1 = roller_coords.y1;
rect_area.y2 = roller_coords.y1 + (lv_obj_get_height(obj) - font_h - line_space) / 2;
lv_draw_mask_fade_param_t * fade_mask_top = lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));
lv_draw_mask_fade_init(fade_mask_top, &rect_area, LV_OPA_TRANSP, rect_area.y1, LV_OPA_COVER, rect_area.y2);
mask_top_id = lv_draw_mask_add(fade_mask_top, NULL);
rect_area.y1 = rect_area.y2 + font_h + line_space - 1;
rect_area.y2 = roller_coords.y2;
lv_draw_mask_fade_param_t * fade_mask_bottom =lv_mem_buf_get(sizeof(lv_draw_mask_fade_param_t));
lv_draw_mask_fade_init(fade_mask_bottom, &rect_area, LV_OPA_COVER, rect_area.y1, LV_OPA_TRANSP, rect_area.y2);
mask_bottom_id = lv_draw_mask_add(fade_mask_bottom, NULL);
} else if (code == LV_EVENT_DRAW_POST_END) {
lv_draw_mask_fade_param_t * fade_mask_top = lv_draw_mask_remove_id(mask_top_id);
lv_draw_mask_fade_param_t * fade_mask_bottom = lv_draw_mask_remove_id(mask_bottom_id);
lv_mem_buf_release(fade_mask_top);
lv_mem_buf_release(fade_mask_bottom);
mask_top_id = -1;
mask_bottom_id = -1;
}
}
uint8_t get_time_format_flag(void) //返回时间格式
{
uint8_t time_format_flag =0; //0 24小时制 1 12小时制
return time_format_flag;
}
lv_obj_t * draw_dashed_line(lv_obj_t *parent, lv_coord_t x, lv_coord_t y)
{
static lv_point_t line_points[] ={{0, 2}, {290, 2}};
lv_obj_t *line = lv_line_create(parent);
lv_obj_set_style_line_width(line,1,0);
lv_obj_set_style_line_dash_width(line,4,0);
lv_obj_set_style_line_dash_gap(line, 4,0);
lv_obj_set_pos(line, x, y);
//lv_obj_set_style_border_color(line,lv_color_hex(0x727272),0);
lv_obj_set_style_line_color(line,lv_color_hex(0x727272),0);
lv_line_set_points(line,line_points,2);
return line;
}
//w=368 h=202
lv_obj_t *lv_user_create_chart(lv_obj_t *parent,lv_coord_t x, lv_coord_t y,uint8_t *value,uint32_t *color_buff,uint16_t num)
{
lv_obj_t *obj_cont = lv_obj_create(parent);
lv_obj_set_size(obj_cont,368,202);
lv_obj_set_style_bg_color(obj_cont,lv_color_hex(0x00),0);
lv_obj_set_style_pad_all(obj_cont,0,0);
// lv_obj_set_style_border_width(obj_cont,0,0);
//lv_obj_set_style_border_color(obj_cont,lv_color_hex(0x292929),0);
lv_obj_set_style_border_color(obj_cont,lv_color_black(),0);
lv_obj_set_style_border_width(obj_cont,2,0);
lv_obj_set_scrollbar_mode(obj_cont, LV_SCROLLBAR_MODE_OFF);
lv_obj_set_pos(obj_cont,x,y);
lv_obj_clear_flag(obj_cont,LV_OBJ_FLAG_SCROLLABLE);
static lv_point_t line_points[] ={{0, 20}, {290, 20}};
lv_obj_t * line1;
line1 = lv_line_create(obj_cont);
lv_line_set_points(line1, line_points, 2); /*Set the points*/
lv_obj_set_style_border_color(line1,lv_color_hex(0x666666),0);
lv_obj_align(line1,LV_ALIGN_BOTTOM_LEFT,59,-30);
draw_dashed_line(obj_cont,58,131);//绘制虚线
draw_dashed_line(obj_cont,58,91);
draw_dashed_line(obj_cont,58,51);
draw_dashed_line(obj_cont,58,11);
lv_obj_t *old_obj ;
for(int i = 0; i <num;i++)
{
lv_obj_t *series_obj = lv_obj_create(obj_cont);
lv_obj_set_style_border_color(series_obj,lv_color_hex(color_buff[i]),0);
uint16_t ser_val = (uint16_t)((value[i]*3)/2+3);
lv_obj_set_size(series_obj,8,ser_val);
lv_obj_set_style_pad_all(series_obj,0,0);
lv_obj_set_style_radius(series_obj,5,0);
lv_obj_set_style_bg_color(series_obj,lv_color_hex(color_buff[i]),0);
if(i==0)
{
lv_obj_align_to(series_obj,line1,LV_ALIGN_OUT_LEFT_BOTTOM,10,-1);
}
else{
lv_obj_align_to(series_obj,old_obj,LV_ALIGN_OUT_RIGHT_BOTTOM,4,0);
}
old_obj = series_obj;
//printf("index:%d\r\n",value[i]);
}
lv_obj_t* start_time = lv_label_create(obj_cont);
lv_obj_set_style_text_font(start_time,LV_FONT_SMALL_NUMBER_20PX,0);
lv_label_set_text_fmt(start_time,"%02d:%02d",0,0);
lv_obj_set_style_text_color(start_time, lv_color_hex(0x666666),0);
lv_obj_align(start_time,LV_ALIGN_BOTTOM_LEFT,20,-5);
lv_obj_t* end_time = lv_label_create(obj_cont);
lv_obj_set_style_text_font(end_time,LV_FONT_SMALL_NUMBER_20PX,0);
lv_label_set_text_fmt(end_time,"%02d:%02d",8,0);
lv_obj_set_style_text_color(end_time, lv_color_hex(0x666666),0);
lv_obj_align(end_time,LV_ALIGN_BOTTOM_RIGHT,-20,-5);
lv_obj_t* y_label1 = lv_label_create(obj_cont);
lv_obj_set_style_text_font(y_label1,LV_FONT_SMALL_NUMBER_20PX,0);
lv_label_set_text_fmt(y_label1,"%d",100);
lv_obj_set_style_text_color(y_label1, lv_color_hex(0x666666),0);
lv_obj_align(y_label1,LV_ALIGN_TOP_LEFT,17,2);
lv_obj_t* y_label2 = lv_label_create(obj_cont);
lv_obj_set_style_text_font(y_label2,LV_FONT_SMALL_NUMBER_20PX,0);
lv_label_set_text_fmt(y_label2,"%d",75);
lv_obj_set_style_text_color(y_label2, lv_color_hex(0x666666),0);
lv_obj_align_to(y_label2,y_label1,LV_ALIGN_OUT_BOTTOM_LEFT,0,18);
lv_obj_t* y_label3 = lv_label_create(obj_cont);
lv_obj_set_style_text_font(y_label3,LV_FONT_SMALL_NUMBER_20PX,0);
lv_label_set_text_fmt(y_label3,"%d",50);
lv_obj_set_style_text_color(y_label3, lv_color_hex(0x666666),0);
lv_obj_align_to(y_label3,y_label2,LV_ALIGN_OUT_BOTTOM_LEFT,0,18);
lv_obj_t* y_label4 = lv_label_create(obj_cont);
lv_obj_set_style_text_font(y_label4,LV_FONT_SMALL_NUMBER_20PX,0);
lv_label_set_text_fmt(y_label4,"%d",25);
lv_obj_set_style_text_color(y_label4, lv_color_hex(0x666666),0);
lv_obj_align_to(y_label4,y_label3,LV_ALIGN_OUT_BOTTOM_LEFT,0,18);
return obj_cont;
}
bool lv_ui_node_return_to_prev_node(void)
{
//退到上一级节点
lv_ui_node_t e_cur;
if(!lv_ui_node_pop_ex(&e_cur))
{
return false;
}
lv_refr_now(NULL);
extern uint8_t lv_ui_node_depth(void);
if(lv_ui_node_depth() == 0)
{
extern void lv_ui_node_hor_return_head(lv_obj_t *parent, lv_ui_node_t *e);
lv_ui_node_hor_return_head(prj_prev_cont,&e_cur);
}
else
{
lv_obj_remove_event_cb(prj_prev_cont,NULL);
lv_obj_clean(prj_prev_cont);
lv_ui_node_func(prj_prev_cont,&e_cur);
}
return true;
}
#define ENCODE_OFFSET 120
// int16_t encoder_y_pos;
lv_coord_t top_pos;
static bool setting_timer_flag;
static bool user_click_flag;
static void setting_list_timer_cb(lv_timer_t *t)
{
lv_timer_del(t);
setting_timer_flag = false;
lv_obj_t *obj = t->user_data;
lv_obj_scroll_by(obj, 0, top_pos, LV_ANIM_ON);
}
void fr_lv_encoder_obj_event_cb(lv_event_t *e)
{
lv_obj_t *target = e->target;
lv_event_code_t code = e->code;
uint8_t child_cn = lv_obj_get_child_cnt(target);
if (!lv_obj_is_valid(target))
return;
if(code == LV_EVENT_KEY)
{
uint32_t *key = lv_event_get_param(e);
uint32_t input_key = *key;
// printf("key:%d\r\n",input_key);
lv_coord_t obj_y;
#if 0
if(input_key == 130)
{
lv_obj_t *lastest_child_obj = lv_obj_get_child(target,-1);
obj_y = lv_obj_get_style_y(lastest_child_obj,0)-lv_obj_get_height(lastest_child_obj)*2;
printf("obj_y:%d\r\n",obj_y);
if((encoder_y_pos+ENCODE_OFFSET) < obj_y)
encoder_y_pos += ENCODE_OFFSET;
else
encoder_y_pos = obj_y;
}
else if(input_key == 129)
{
if((encoder_y_pos-ENCODE_OFFSET) > 0)
encoder_y_pos -= ENCODE_OFFSET;
else
encoder_y_pos = 0;
}
#else
if(setting_timer_flag == false)
{
if(input_key == 130)
{
lv_obj_scroll_by(target, 0, ENCODE_OFFSET, LV_ANIM_ON);
user_click_flag = true;
}
else if(input_key == 129)
{
lv_obj_scroll_by(target, 0, -ENCODE_OFFSET, LV_ANIM_ON);
user_click_flag = true;
}
}
#endif
}
else if (code == LV_EVENT_DELETE)
{
lv_group_remove_obj(target);
group_tail_obj = lv_group_get_focused(prj_group);
// printf("list,group remove\r\n");
}
else if(code == LV_EVENT_SCROLL_END)
{
if(user_click_flag == false)
return;
user_click_flag = false;
lv_coord_t top = lv_obj_get_scroll_top(target);
lv_obj_t *obj = lv_obj_get_child(target,-1);
// printf("top:%d\r\n",top);
if(top < 0)
{
// printf("in the top!\r\n");
if(setting_timer_flag == false)
{
top_pos = top;
lv_timer_create(setting_list_timer_cb,100,target);
setting_timer_flag = true;
}
}
else if((obj->coords.y1+lv_obj_get_height(obj)) <= 448)
{
// printf("in the botom\r\n!");
if(setting_timer_flag == false)
{
top_pos = 448 - (obj->coords.y1+lv_obj_get_height(obj));
top_pos -= lv_obj_get_style_pad_bottom(target,0);
lv_timer_create(setting_list_timer_cb,100,target);
setting_timer_flag = true;
}
}
}
}
//uint16_t get_curr_screen_width(void)
//{
// lv_coord_t hor_res = lv_disp_get_hor_res(lv_disp_get_default()); // 获取屏幕宽度
// lv_coord_t ver_res = lv_disp_get_ver_res(lv_disp_get_default()); // 获取屏幕高度
// // 打印屏幕宽度和高度
// printf("Screen width: %d\n", hor_res);
// printf("Screen height: %d\n", ver_res);
//}

View File

@ -0,0 +1,251 @@
#ifndef __FR_LV_PUBLIC_FUNC_H__
#define __FR_LV_PUBLIC_FUNC_H__
#include "img_def.h"
#include "lv_common_function.h"
#include "fr_ui_node.h"
enum
{
Exercise_Type_Outdoor_Running = 0x1 , //户外跑步
Exercise_Type_Outdoor_Cycling = 0x2 , //户外骑行
Exercise_Type_Skipping = 0x3 , //跳绳
Exercise_Type_Swimming = 0x4 , //游泳
Exercise_Type_Badminton = 0x5 , //羽毛球
Exercise_Type_Table_Tennis = 0x6 , //乒乓球
Exercise_Type_Tennis = 0x7 , //网球
Exercise_Type_Climbing = 0x8 , //登山
Exercise_Type_Hiking = 0x9 , //徒步
Exercise_Type_Basketball = 0xa , //篮球
Exercise_Type_Soccer = 0xb , //足球
Exercise_Type_Baseball = 0xc , //棒球
Exercise_Type_Volleyball = 0xd , //排球
Exercise_Type_Cricket = 0xe , //板球
Exercise_Type_Rugby = 0xf , //橄榄球
Exercise_Type_Hockey = 0x10, //曲棍球
Exercise_Type_Dance = 0x11, //舞蹈
Exercise_Type_Indoor_Cycling = 0x12, //室内骑行
Exercise_Type_Yoga = 0x13, //瑜伽
Exercise_Type_Sit_ups = 0x14, //仰卧起坐
Exercise_Type_Treadmill = 0x15, //跑步机
Exercise_Type_Gymnastics = 0x16, //体操
Exercise_Type_Rowing = 0x17, //划船
Exercise_Type_Jumping_Jack = 0x18, //开合跳
Exercise_Type_Free_training = 0x19, //自由训练
Exercise_Type_Outdoor_Walking = 0x1A, //户外健走
Exercise_Type_Indoor_Run = 0x1B, //室内跑步
Exercise_Type_Strength_Training = 0x1C, //力量训练
Exercise_Type_Stepping = 0x1D, //踏步
Exercise_Type_Horse_Riding = 0x1E, //骑马
Exercise_Type_Elliptical_Trainer = 0x1F, //椭圆机
Exercise_Type_Tai_Chi = 0x20, //太极
Exercise_Type_Shuttlecock = 0x21, //毽球
Exercise_Type_Boxing = 0x22, //拳击
Exercise_Type_Outdoor_Walk = 0x23, //室内走路
Exercise_Type_Cross_country_Running = 0x24, //越野跑
Exercise_Type_Skiing = 0x25, //滑雪
Exercise_Type_Ice_Hockey = 0x26, //冰球
Exercise_Type_Taekwondo = 0x27, //跆拳道
Exercise_Type_VO2max_test = 0x28, //最大摄氧量测试
Exercise_Type_Rowing_Maching = 0x29, //划船机
Exercise_Type_Stroller = 0x2A, //漫步机
Exercise_Type_Hiking_Unused = 0x2B, //原本地就有(徒步)
Exercise_Type_Athletics = 0x2C, //田径
Exercise_Type_Waist_and_Abdominal_Training = 0x2D, //腰腹训练
Exercise_Type_Karate = 0x2E, //空手道
Exercise_Type_Relaxation = 0x2F, //整理放松
Exercise_Type_Cross_Training = 0x30, //交叉训练
Exercise_Type_Pilates = 0x31, //普拉提
Exercise_Type_Cross_Fit = 0x32, //交叉配合
Exercise_Type_Functional_Training = 0x33, //功能性训练
Exercise_Type_Physical_Training = 0x34, //体能训练
Exercise_Type_Archery = 0x35, //射箭
Exercise_Type_Flexibility = 0x36, //柔韧度
Exercise_Type_Mixed_Aerobic = 0x37, //混合有氧
Exercise_Type_Latin_Dance = 0x38, //拉丁舞
Exercise_Type_Street_Dance = 0x39, //街舞
Exercise_Type_Free_Boxing = 0x3A, //自由搏击
Exercise_Type_Ballet = 0x3B, //芭蕾
Exercise_Type_Australian_Soccer = 0x3C, //澳式足球
Exercise_Type_Martial_Arts = 0x3D, //武术
Exercise_Type_Stair_Climbing = 0x3E, //爬楼
Exercise_Type_Handball = 0x3F, //手球
Exercise_Type_Bowling = 0x40, //保龄球
Exercise_Type_Squash = 0x41, //壁球
Exercise_Type_Curling = 0x42, //冰壶
Exercise_Type_Hunting = 0x43, //打猎
Exercise_Type_Snowboarding = 0x44, //单板滑雪
Exercise_Type_Leisure_Sports = 0x45, //休闲运动
Exercise_Type_American_Football = 0x46, //美式橄榄球
Exercise_Type_Hand_Cycling = 0x47, //手摇车
Exercise_Type_Fishing = 0x48, //钓鱼
Exercise_Type_Frisbee = 0x49, //飞盘
Exercise_Type_Rugby_Unused = 0x4A, //原本地就有(橄榄球)
Exercise_Type_Golf = 0x4B, //高尔夫
Exercise_Type_Folk_Dance = 0x4C, //民族舞
Exercise_Type_Downhill_Skiing = 0x4D, //高山滑雪
Exercise_Type_Snow_Sports = 0x4E, //雪上运动
Exercise_Type_Clam_Mediation_Sports = 0x4F, //舒缓冥想类运动
Exercise_Type_Core_Training = 0x50, //核心训练
Exercise_Type_Ice_Skating = 0x51, //滑冰
Exercise_Type_Fitness_Games = 0x52, //健身游戏
Exercise_Type_Gymnastics_Unused = 0x53, //健身操
Exercise_Type_Group_Training = 0x54, //团体操
Exercise_Type_Kickboxing = 0x55, //搏击操
Exercise_Type_Lacrosse = 0x56, //长曲棍球
Exercise_Type_Foam_Rolling = 0x57, //泡沫轴筋膜放松
Exercise_Type_Wrestling = 0x58, //摔跤
Exercise_Type_Fencing = 0x59, //击剑
Exercise_Type_Softball = 0x5A, //垒球
Exercise_Type_Single_Bar = 0x5B, //单杠
Exercise_Type_Parallel_Bars = 0x5C, //双杠
Exercise_Type_Roller_Skating = 0x5D, //轮滑
Exercise_Type_Hula_Hoop = 0x5E, //呼啦圈
Exercise_Type_Darts = 0x5F, //飞镖
Exercise_Type_Pickleball = 0x60, //匹克球
Exercise_Type_HIIT = 0x61, //HIIT
Exercise_Type_Shooting = 0x62, //射击
Exercise_Type_Judo = 0x63, //柔道
Exercise_Type_Trampoline = 0x64, //蹦床
Exercise_Type_Skateboarding = 0x65, //滑板
Exercise_Type_Hoverboard = 0x66, //平衡车
Exercise_Type_Blading = 0x67, //溜旱冰
Exercise_Type_Parkour = 0x68, //跑酷
Exercise_Type_Diving = 0x69, //跳水
Exercise_Type_Surfing = 0x6A, //冲浪
Exercise_Type_Snorkeling = 0x6B, //浮潜
Exercise_Type_Pull_ups = 0x6C, //引体向上
Exercise_Type_Push_ups = 0x6D, //俯卧撑
Exercise_Type_Planking = 0x6E, //平板支撑
Exercise_Type_Rock_Climbing = 0x6F, //攀岩
Exercise_Type_High_Jump = 0x70, //跳高
Exercise_Type_Bungee_Jump = 0x71, //蹦极
Exercise_Type_Long_Jump = 0x72, //跳远
Exercise_Type_Marathon = 0x73, //马拉松
};
#define BODY_BUILDING_NUM 41 //健身类
#define DANCE_SPORTS_NUM 4 //舞蹈类
#define RELATIVE_SPORTS_NUM 18 //休闲运动
#define BALL_GAME_NUM 19 //球类
#define ICE_SPORTS_NUM 7 //水上运动
#define WATER_SPORTS_NUM 4 //冰上运动
#define EXTREMITY_SPORTS_NUM 4 //极限运动
enum
{
Exercise_List_Type_BodyBuilding=0x00, //健身类
Exercise_List_Type_Dance=0x01,//舞蹈类
Exercise_List_Type_Relative=0x02,//休闲运动
Exercise_List_Type_Ball=0x03,//球类
Exercise_List_Type_ICE=0x04,//水上运动
Exercise_List_Type_Water=0x05,//冰上运动
Exercise_List_Type_Extremity=0x06,//极限运动
};
enum
{
Information_App_call=0x01,
Information_App_facebook=0x02,
Information_App_flickr=0x03,
Information_App_gmail=0x04,
Information_App_googleplus=0x05,
Information_App_hangouts ,
Information_App_ins ,
Information_App_kakao ,
Information_App_line ,
Information_App_link ,
Information_App_message ,
Information_App_messenger ,
Information_App_other ,
Information_App_pinterest ,
Information_App_QQ ,
Information_App_skype ,
Information_App_snapchat ,
Information_App_telegram ,
Information_App_tumblr ,
Information_App_twitter ,
Information_App_viber ,
Information_App_vkontakte ,
Information_App_wechat ,
Information_App_whatsapp ,
Information_App_youtube ,
Information_App_ZALO ,
};
typedef enum {
FLEXIBLE_PHONE_CALL=0,
FLEXIBLE_RECORD=1,
FLEXIBLE_MUSIC=2,
FLEXIBLE_MESSAGE=3,
FLEXIBLE_HEADSET=4,
FLEXIBLE_EXERCISE=5,
FLEXIBLE_TEMP_WARNING=6,
FLEXIBLE_POWER_LOW_WARNING=7,
}FLEXIBLE_MSG_TYPE;
#define OK_BTN_ICO_SMALL_IMG IMG_OK_GREY_54X54 //灰色
#define CLEAR_BTN_ICO_SMALL_IMG IMG_CANCELLATION_WHITE_54X54
#define OK_BTN_ICO_WHITE_SMALL IMG_OK_WHITE_58X58 //白色
void convertTo12HourFormat(uint8_t *hours, uint8_t *isAM);
void lv_img_change_big_img_src(lv_obj_t* parent, const lv_img_dsc_t **src ,uint8_t img_num,uint8_t start);
void lv_img_big_disp(lv_obj_t* parent, const lv_img_dsc_t **src , lv_coord_t x, lv_coord_t y,uint8_t img_num,uint8_t start);
lv_obj_t* lv_img_big_create(lv_obj_t* parent, const lv_img_dsc_t **src , lv_coord_t x, lv_coord_t y,uint8_t img_num,uint8_t start);
lv_obj_t* lv_title_text_create(lv_obj_t* parent ,const char *str,lv_color_t value, uint8_t hour,uint8_t minute);
void roller_mask_event_cb(lv_event_t * e);
lv_obj_t *lv_user_create_chart(lv_obj_t *parent,lv_coord_t x, lv_coord_t y,uint8_t *value,uint32_t *color_buff,uint16_t num);
extern const lv_img_dsc_t* exercise_type_img[115];
extern const uint16_t exercise_type_str[115] ;
extern const uint16_t measure_text_str[3];
extern const lv_img_dsc_t* switch_ico_img[2];
//const uint16_t format_12hour_str[2];
extern const uint16_t week_str[7];
extern lv_obj_t* cont_parent;
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_180px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_128px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_92px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_80px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_62px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_50px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_46px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_44px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_36px);
LV_FONT_DECLARE(Number_HarmonyOS_bpp4_20px);
//LV_FONT_DECLARE(OSD_arialuni_bbp4_36px);
LV_FONT_DECLARE(OSD_arialuni_bbp4_32px);
LV_FONT_DECLARE(arialuni_bbp1_32px);
#define LV_FONT_BIG_NUMBER_180PX &Number_HarmonyOS_bpp4_180px
#define LV_FONT_BIG_NUMBER_128PX &Number_HarmonyOS_bpp4_128px
#define LV_FONT_BIG_NUMBER_92PX &Number_HarmonyOS_bpp4_92px
#define LV_FONT_BIG_NUMBER_80PX &Number_HarmonyOS_bpp4_80px
#define LV_FONT_BIG_NUMBER_62PX &Number_HarmonyOS_bpp4_62px
#define LV_FONT_BIG_NUMBER_50PX &Number_HarmonyOS_bpp4_50px
#define LV_FONT_BIG_NUMBER_46PX &Number_HarmonyOS_bpp4_46px
#define LV_FONT_BIG_NUMBER_44PX &Number_HarmonyOS_bpp4_44px
#define LV_FONT_SMALL_NUMBER_20PX &Number_HarmonyOS_bpp4_20px
#define LV_FONT_MEDIUM_NUMBER_36PX &Number_HarmonyOS_bpp4_36px
#define LV_FONT_OSD_MEDIUM_32PX &OSD_arialuni_bbp4_32px//&OSD_arialuni_bbp4_32px
#define LV_FONT_OSD_MEDIUM_36PX &OSD_arialuni_bbp4_32px//&OSD_arialuni_bbp4_32px
#define LV_FONT_ARIALUNI_ALL_32PX &arialuni_bbp1_32px
uint8_t get_language_id(void);
uint8_t get_system_curr_time_hour(void);
uint8_t get_system_curr_time_min(void);
uint8_t get_time_format_flag(void);
bool lv_ui_node_return_to_prev_node(void);
void fr_lv_encoder_obj_event_cb(lv_event_t *e);
#endif

View File

@ -0,0 +1,47 @@
#ifndef __IMG_DEF_H__
#define __IMG_DEF_H__
#define img_head_address 0x813a000
#define IMG_BATT_EMPTY (const lv_img_dsc_t *)(img_head_address + 0x0)
#define IMG_BATT_FULL (const lv_img_dsc_t *)(img_head_address + 0xba0)
#define IMG_BATT_FULL_GREN (const lv_img_dsc_t *)(img_head_address + 0x18c4)
#define IMG_BATT_FULL_YELLOW (const lv_img_dsc_t *)(img_head_address + 0x29fc)
#define IMG_CENTER_ARROWS (const lv_img_dsc_t *)(img_head_address + 0x3a00)
#define IMG_CIRCULAR_BLACK (const lv_img_dsc_t *)(img_head_address + 0x3cd0)
#define IMG_CIRCULAR_WHITE (const lv_img_dsc_t *)(img_head_address + 0x647c)
#define IMG_INSTRUMENT_BATT_ICO1 (const lv_img_dsc_t *)(img_head_address + 0x8b38)
#define IMG_INSTRUMENT_BATT_ICO2 (const lv_img_dsc_t *)(img_head_address + 0x926c)
#define IMG_INSTRUMENT_BATT_ICO3 (const lv_img_dsc_t *)(img_head_address + 0x9b44)
#define IMG_INSTRUMENT_BATT_ICO4 (const lv_img_dsc_t *)(img_head_address + 0xa5bc)
#define IMG_INSTRUMENT_BATT_ICO5 (const lv_img_dsc_t *)(img_head_address + 0xb1ac)
#define IMG_INSTRUMENT_BG1_1 (const lv_img_dsc_t *)(img_head_address + 0xbed0)
#define IMG_INSTRUMENT_BG1_2 (const lv_img_dsc_t *)(img_head_address + 0xe688)
#define IMG_INSTRUMENT_BG1_3 (const lv_img_dsc_t *)(img_head_address + 0x14464)
#define IMG_INSTRUMENT_BG1_4 (const lv_img_dsc_t *)(img_head_address + 0x18994)
#define IMG_INSTRUMENT_BG1_5 (const lv_img_dsc_t *)(img_head_address + 0x1c9d0)
#define IMG_INSTRUMENT_BG2_1 (const lv_img_dsc_t *)(img_head_address + 0x1d94c)
#define IMG_INSTRUMENT_BG2_2 (const lv_img_dsc_t *)(img_head_address + 0x20220)
#define IMG_INSTRUMENT_BG2_3 (const lv_img_dsc_t *)(img_head_address + 0x25b70)
#define IMG_INSTRUMENT_BG2_4 (const lv_img_dsc_t *)(img_head_address + 0x2a238)
#define IMG_INSTRUMENT_BG2_5 (const lv_img_dsc_t *)(img_head_address + 0x2da34)
#define IMG_INSTRUMENT_ICO1 (const lv_img_dsc_t *)(img_head_address + 0x2e7fc)
#define IMG_INSTRUMENT_ICO10 (const lv_img_dsc_t *)(img_head_address + 0x2eabc)
#define IMG_INSTRUMENT_ICO11 (const lv_img_dsc_t *)(img_head_address + 0x2ed98)
#define IMG_INSTRUMENT_ICO12 (const lv_img_dsc_t *)(img_head_address + 0x2f12c)
#define IMG_INSTRUMENT_ICO13 (const lv_img_dsc_t *)(img_head_address + 0x2f564)
#define IMG_INSTRUMENT_ICO14 (const lv_img_dsc_t *)(img_head_address + 0x2f820)
#define IMG_INSTRUMENT_ICO2 (const lv_img_dsc_t *)(img_head_address + 0x2faf4)
#define IMG_INSTRUMENT_ICO3 (const lv_img_dsc_t *)(img_head_address + 0x2fd6c)
#define IMG_INSTRUMENT_ICO4 (const lv_img_dsc_t *)(img_head_address + 0x30208)
#define IMG_INSTRUMENT_ICO5 (const lv_img_dsc_t *)(img_head_address + 0x30470)
#define IMG_INSTRUMENT_ICO6 (const lv_img_dsc_t *)(img_head_address + 0x307b4)
#define IMG_INSTRUMENT_ICO7 (const lv_img_dsc_t *)(img_head_address + 0x30b7c)
#define IMG_INSTRUMENT_ICO8 (const lv_img_dsc_t *)(img_head_address + 0x31058)
#define IMG_INSTRUMENT_ICO9 (const lv_img_dsc_t *)(img_head_address + 0x311d4)
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,482 @@
#ifndef __LAN_STR_TABLE_H__
#define __LAN_STR_TABLE_H__
#define LAN_STR_TABLE_NUM 15
extern const char * const lan_str_table[][15];
typedef enum{
STR_ID_ENGLISH,
STR_ID_TRADITIONAL_CHINESE,
STR_ID_APP_SCANNING_BINDING,
STR_ID_APP_ABOUT,
STR_ID_DEVICE_NAME,
STR_ID_EQUIPMENT_TYPE,
STR_ID_BLUETOOTH_ADDRESS,
STR_ID_BIND_OR_NOT,
STR_ID_BINDING_SUCCESSFUL,
STR_ID_BINDING_FAILURE,
STR_ID_DAILY_EXERCISE,
STR_ID_CALORIES,
STR_ID_KCAL,
STR_ID_STEPS,
STR_ID_STEP,
STR_ID_DISTANCE,
STR_ID_KM,
STR_ID_DAILY_STEPS,
STR_ID_STEPS_PER_WEEK,
STR_ID_COMMUNICATE_BY_TELEPHONE,
STR_ID_HEART_RATE,
STR_ID_EXERCISE_RECORD,
STR_ID_SHORT_MESSAGE,
STR_ID_BLOOD_OXYGEN,
STR_ID_SLEEP,
STR_ID_STRESS,
STR_ID_BREATH_RATE,
STR_ID_BREATHING_TRAINING,
STR_ID_WOMEN_HEALTH,
STR_ID_BLOOD_PRESSURE,
STR_ID_VOICE_ASSISTANT,
STR_ID_BODY_TEMPERATURE,
STR_ID_BODY_WEATHER,
STR_ID_MOOD,
STR_ID_MUSIC,
STR_ID_ALARM_CLOCK,
STR_ID_SOS,
STR_ID_GAME,
STR_ID_MORE,
STR_ID_SETTINGS,
STR_ID_AM,
STR_ID_PM,
STR_ID_SUM,
STR_ID_MON,
STR_ID_TUE,
STR_ID_WED,
STR_ID_THU,
STR_ID_FRI,
STR_ID_SAT,
STR_ID_POWER_SAVING_REMINDER,
STR_ID_BPM,
STR_ID_CURRENT_HEART_RATE,
STR_ID_RESTING_HEART_RATE,
STR_ID_LAST_7_DAYS_AVG_RESTING_HEART,
STR_ID_HIGH_HEART,
STR_ID_LOW_HEART,
STR_ID_PLEACE_WEAR,
STR_ID_WEAR_AND_HOLD_STILL,
STR_ID_MEASUREMENT_UNSUCCESSFUL,
STR_ID_MEASURING,
STR_ID_MEASURE_AGAIN,
STR_ID_DEEP_SLEEP,
STR_ID_LIGHT_SLEEP,
STR_ID_REM,
STR_ID_AWAKE,
STR_ID_START_MEASURING,
STR_ID_EASY,
STR_ID_NORMAL,
STR_ID_ON_THE_HIGH_SIDE,
STR_ID_POSITIVE,
STR_ID_NEGATIVE,
STR_ID_PEACEFUL,
STR_ID_THE_SLOW,
STR_ID_TOO_FAST,
STR_ID_NO_DATA,
STR_ID_WEAR_TIME_TOOL_SHOURT,
STR_ID_HYPERTHERMIA,
STR_ID_BREATH_TRAINING,
STR_ID_EXERCISE_DURATION,
STR_ID_DURATION,
STR_ID_BREATHING_TEMPO,
STR_ID_TIME,
STR_ID_MIN,
STR_ID_SLOW,
STR_ID_FAST,
STR_ID_WORKOUT_COMPLETE,
STR_ID_BREATHING_IN,
STR_ID_BREATHING_OUT,
STR_ID_STOPWATCH,
STR_ID_COUNTDOWN,
STR_ID_FLASHLIGHT,
STR_ID_FIND_PHONE,
STR_ID_REMOTE_CAMERA,
STR_ID_UNIVERSAL_TIME,
STR_ID_CALCULATOR,
STR_ID_TIMER,
STR_ID_CUSTOM,
STR_ID_TIME_ENDS,
STR_ID_EVERY_DAY,
STR_ID_SET_TIME,
STR_ID_REPEAT,
STR_ID_ALARMS_UPPER_LIMIT,
STR_ID_ALARMS_CLOCK_EDITING,
STR_ID_EDIT_ALARMS_CLOCK,
STR_ID_OR_NOT_DELETE_ALARM,
STR_ID_RING_AGAIN_TEN_MINUTES,
STR_ID_MOSCOW,
STR_ID_TOKYO,
STR_ID_YESTERDAY_7HOURS,
STR_ID_TODAY_7HOURS,
STR_ID_CITIES_APP_SETTINGS,
STR_ID_OR_NOT_DELETE_CURRENT_CITY,
STR_ID_RINGING,
STR_ID_BLUETOOTH_UNCONNECTED,
STR_ID_CLICK_PHOTO,
STR_ID_APP_OPEN_CAMERA,
STR_ID_CONTACTS,
STR_ID_CALL_LOGS,
STR_ID_DIAL_PAD,
STR_ID_NO_CONTACT,
STR_ID_EXHALING,
STR_ID_MESSAGE,
STR_ID_NO_MESSAGE,
STR_ID_UNKNOWN,
STR_ID_SUNNY,
STR_ID_CLOUDY,
STR_ID_OVERCAST,
STR_ID_SHOWER,
STR_ID_T_STORM,
STR_ID_RAIN_PLUS_SNOW,
STR_ID_LIGHT_RAIN,
STR_ID_HEAVY_RAIN,
STR_ID_SNOW,
STR_ID_SANDSTORM,
STR_ID_FOG,
STR_ID_WIND,
STR_ID_CLOUDY_DAY,
STR_ID_CLOUDY_NIGHT,
STR_ID_HAZE,
STR_ID_SHADE,
STR_ID_DAYTIME_SHOWERS,
STR_ID_NIGHT_SHOWERS,
STR_ID_HUMIDNESS,
STR_ID_ULTRAVIOLET_LIGHT,
STR_ID_NOT_WEATHER_CONNECT_APP,
STR_ID_UNCONNECTED,
STR_ID_MOBILE_MUSIC,
STR_ID_CALL_ENDED,
STR_ID_CALL_FAILURE,
STR_ID_CALL_DISCONNECTED,
STR_ID_CALL_BLUETOOTH_CALL_UNCONNECTED,
STR_ID_UPDATE_TIME,
STR_ID_WATCH_AND_THEME,
STR_ID_DISPLAY_AND_BRIGHT,
STR_ID_BRIGHT,
STR_ID_SOUND_AND_VIBRATION,
STR_ID_VIBRATION_INTENSITY,
STR_ID_TIME_AND_DATE,
STR_ID_PASSWORD,
STR_ID_NOT_DISTURB_MODE,
STR_ID_RAISE_TO_WAKE,
STR_ID_KEY_SETTING,
STR_ID_MOTION_RECOGNITION,
STR_ID_SYSTEM_MENU,
STR_ID_QR_CODE,
STR_ID_SCREEN_DISPLAY,
STR_ID_WATCH_SCREEN_DISPLAY,
STR_ID_EFFECTIVE_PERIOD,
STR_ID_AUTO_DIAL_SWITCHING,
STR_ID_THEME,
STR_ID_POINTER,
STR_ID_DIGITAL,
STR_ID_GRID,
STR_ID_LIST,
STR_ID_NEST,
STR_ID_AUTOMATICALLY_SWITCH_MAIN_WATCH,
STR_ID_SHORTEN_BATTERY_LIFE,
STR_ID_START_TIME,
STR_ID_END_TIME,
STR_ID_SCREEN_TIME,
STR_ID_RINGTONE_VOLUME,
STR_ID_MEDIA_AUDIO,
STR_ID_MUTE,
STR_ID_LOW,
STR_ID_MODERATE,
STR_ID_HIGH,
STR_ID_MUTE_INCOMING_WITHOUT_RINGING,
STR_ID_SYNC_APP,
STR_ID_24HOUR_SYSTEM,
STR_ID_DATE,
STR_ID_CHANGE_PASSWORD,
STR_ID_ENTER_PASSWORD,
STR_ID_ENTER_CURRENT_PASSWORD,
STR_ID_CONFIRM_PASSWORD,
STR_ID_ENTER_ERROR,
STR_ID_SUCCESSFULLY_MODIFIED,
STR_ID_NOT_DISTURB,
STR_ID_ALL_DAY,
STR_ID_TIMED_ON,
STR_ID_INCOMING_CALLS_AND_NOTIFICATIONS_MUTED,
STR_ID_INCOMING_CALLS_AND_NOTIFICATIONS_MUTED_NOT_VIBRATION,
STR_ID_EXERCISE_REMINDER,
STR_ID_WHETHER_TO_START_EXERCISE,
STR_ID_CAMPAIGN_OVER,
STR_ID_RESTART,
STR_ID_POWER_OFF,
STR_ID_FACTORY_DATA_RESET,
STR_ID_RESTARTED,
STR_ID_OFF,
STR_ID_RESTORING_FACTORY_SETTINGS,
STR_ID_APP_DOWNLOAD,
STR_ID_APP_SYNCHRONOUS_DATA,
STR_ID_MENSTRUAL_PERIOD,
STR_ID_EASY_PREGNANCY,
STR_ID_SECURITY_PERIOD,
STR_ID_TARGET_CLOSED,
STR_ID_GET_UP_AND_MOVE,
STR_ID_GOAL_ACHIEVEMENT,
STR_ID_CHARGE_AS_SOON_AS_POSSIBLE,
STR_ID_UPGRADING,
STR_ID_UPGRADE_SUCCESSFULLY,
STR_ID_UPGRADE_FAILURE,
STR_ID_ENTER_RESTART,
STR_ID_CONNECT_APP_TRY_AGAIN,
STR_ID_REBOOTING,
STR_ID_IN_SYNC,
STR_ID_SYNCHRONIZATION_SUCCEEDED,
STR_ID_CARD_SCALING,
STR_ID_OUTDOOR_RUN,
STR_ID_OUTDOOR_CYCLE,
STR_ID_JUMP_ROPE,
STR_ID_SWIM,
STR_ID_BADMINTON,
STR_ID_TABLE_TENNIS,
STR_ID_TENNIS,
STR_ID_MOUNTAINEERING,
STR_ID_HIKING,
STR_ID_BASKETBALL,
STR_ID_FOOTBALL,
STR_ID_BASEBALL,
STR_ID_VOLLEYBALL,
STR_ID_CRICKET,
STR_ID_RUGBY,
STR_ID_HOCKEY,
STR_ID_DANCE,
STR_ID_INDOOR_CYCLE,
STR_ID_YOGA,
STR_ID_SIT_UP,
STR_ID_TREADMILL,
STR_ID_GYMNASTICS,
STR_ID_BOATING,
STR_ID_JUMPING_JACK,
STR_ID_FREE_TRAINING,
STR_ID_OUTDOOR_WALK,
STR_ID_INDOOR_RUN,
STR_ID_STRENGTH_TRAINING,
STR_ID_STEP_TRAINING,
STR_ID_HORSE_RIDING,
STR_ID_ELLIPTICAL_TRAINER,
STR_ID_TAI_CHI,
STR_ID_SHUTTLECOCK,
STR_ID_BOXING,
STR_ID_INDOOR_WALK,
STR_ID_TRAIL_RUNNING,
STR_ID_SKIING,
STR_ID_ICE_HOCKEY,
STR_ID_TAEKWONDO,
STR_ID_VO2MAX_TEST,
STR_ID_ROWING_MACHING,
STR_ID_AIR_WALKER,
STR_ID_ATHLETICS,
STR_ID_WAIST_TRAINING,
STR_ID_KARATE,
STR_ID_COOLDOWN,
STR_ID_CROSS_TRAINING,
STR_ID_PILATES,
STR_ID_CROSS_FIT,
STR_ID_FUNCTIONAL_TRAINING,
STR_ID_PHYSICAL_TRAINING,
STR_ID_ARCHERY,
STR_ID_FLEXIBILITY,
STR_ID_MIXED_CARDIO,
STR_ID_LATIN_DANCE,
STR_ID_STREET_DANCE,
STR_ID_KICKBOXING,
STR_ID_BALLET,
STR_ID_AUSTRALIAN_FOOTBALL,
STR_ID_MARTIAL_ARTS,
STR_ID_STAIRS,
STR_ID_HANDBALL,
STR_ID_BOWLING,
STR_ID_RACQUETBALL,
STR_ID_CURLING,
STR_ID_HUNTING,
STR_ID_SNOWBOARDING,
STR_ID_PLAY,
STR_ID_AMERICAN_FOOTBALL,
STR_ID_HAND_CYCLING,
STR_ID_FISHING,
STR_ID_DISC_SPORTS,
STR_ID_GOLF,
STR_ID_FOLK_DANCE,
STR_ID_DOWNHILL_SKIING,
STR_ID_SNOW_SPORTS,
STR_ID_MIND_AND_BODY,
STR_ID_CORE_TRAINING,
STR_ID_SKATING,
STR_ID_FITNESS_GAMING,
STR_ID_AEROBICS,
STR_ID_GROUP_TRAINING,
STR_ID_KENDO,
STR_ID_LACROSSE,
STR_ID_ROLLING,
STR_ID_WRESTLING,
STR_ID_FENCING,
STR_ID_SOFTBALL,
STR_ID_SINGLE_BAR,
STR_ID_PARALLEL_BARS,
STR_ID_ROLLER_SKATING,
STR_ID_HULA_HOOP,
STR_ID_DARTS,
STR_ID_PICKLEBALL,
STR_ID_HIIT,
STR_ID_SHOOTING,
STR_ID_JUDO,
STR_ID_TRAMPOLINE,
STR_ID_SKATEBOARD,
STR_ID_HOVERBOARD,
STR_ID_BLADING,
STR_ID_PARKOUR,
STR_ID_DIVING,
STR_ID_SURFING,
STR_ID_SNORKELING,
STR_ID_PULL_UP,
STR_ID_PUSH_UP,
STR_ID_PLANKING,
STR_ID_ROCK_CLIMBING,
STR_ID_HIGHT_JUMP,
STR_ID_BUNGEE_JUMPING,
STR_ID_LONG_JUMP,
STR_ID_MARATHON,
STR_ID_GOAL,
STR_ID_NO_GOAL,
STR_ID_SPORT,
STR_ID_MI,
STR_ID_PHONE_DISCONNECTED,
STR_ID_BLU_CONNECTION_FAILED,
STR_ID_BLU_CONNECTION_SUCCESSFUL,
STR_ID_TRY_RECONNECT,
STR_ID_MOVEMENT_SHORT_DISTANCE,
STR_ID_EXERCISE_TIME_SHORT,
STR_ID_RECOMMENDED_EXERCISE,
STR_ID_SPORTS_REACHED_UPPER_LIMIT,
STR_ID_NO_RECORD,
STR_ID_DETAILS_APP_VIEW,
STR_ID_TIMES,
STR_ID_DECOMPRESSION,
STR_ID_FAT_BURNING,
STR_ID_ANAEROBIC,
STR_ID_HEART_LUNG,
STR_ID_LIMIT,
STR_ID_HEART_RATE_INTERVAL,
STR_ID_JANUARY,
STR_ID_FEBRUARY,
STR_ID_MARCH,
STR_ID_APRIL,
STR_ID_MAY,
STR_ID_JUNE,
STR_ID_JULY,
STR_ID_AUGUST,
STR_ID_SEPTEMBER,
STR_ID_OCTOBER,
STR_ID_NOVEMBER,
STR_ID_DECEMBER,
STR_ID_ECG,
STR_ID_SINUS,
STR_ID_TACHYCARDIA,
STR_ID_MILDNESS,
STR_ID_INTERMITTENT_HEART_RATE,
STR_ID_CONTINUOUS_HEART_RATE,
STR_ID_SEVERE_HEART_RATE,
STR_ID_FUTURE_WEATHER,
STR_ID_STEPS_DETAILS,
STR_ID_UPDATE,
STR_ID_VERY_HIGH,
STR_ID_STRONG,
STR_ID_MEDIUM,
STR_ID_WEAK,
STR_ID_VERY_LOW,
STR_ID_NAP,
STR_ID_SLEEP_SCHEDULES,
STR_ID_FOCUS_BREATHING,
STR_ID_MM_HG,
STR_ID_DIASTOLIC_PRESSURE,
STR_ID_SYSTOLIC_PRESSURE,
STR_ID_A_MINUTE_AGO,
STR_ID_TEST_UNSUCCESSFUL,
STR_ID_PLEASE,
STR_ID_SECOND,
STR_ID_HOUR,
STR_ID_MINUTE,
STR_ID_FINISH,
STR_ID_SPORT_HEART_RATE,
STR_ID_BPM_MINUTES_AGO,
STR_ID_AVERAGE_SEVEN_DAYS,
STR_ID_WATCH_DIAL,
STR_ID_CONSTANT_HIGH_DURATION,
STR_ID_SCREEN_DURATION,
STR_ID_PHONE_SETTINGS,
STR_ID_ACOUSTICAL_VIBRATION,
STR_ID_LANGUAGE_SETTINGS,
STR_ID_CONNECT_PHONE,
STR_ID_RESETTING,
STR_ID_RHYTHM,
STR_ID_RING_STOP,
STR_ID_FITNESS_CLASS,
STR_ID_DANCE_CLASS,
STR_ID_BALL_CLASS,
STR_ID_WATER_SPORTS,
STR_ID_ICE_SPORTS,
STR_ID_EXTREME_SPORTS,
STR_ID_EXTREME_TYPE,
STR_ID_CHINESE,
STR_ID_KOREAN,
STR_ID_JAPANESE,
STR_ID_GERMAN,
STR_ID_SPANISH,
STR_ID_FRENCH,
STR_ID_ITALIAN,
STR_ID_PORTUGUESE,
STR_ID_ARABIC,
STR_ID_INDIA,
STR_ID_HINDI,
STR_ID_POLISH_LANGUAGE,
STR_ID_RUSSIAN,
STR_ID_DUTCH_LANGUAGE,
STR_ID_TURKISH_LANGUAGE,
STR_ID_BENGALI_LANGUAGE,
STR_ID_URDU,
STR_ID_INDONESIAN_LANGUAGE,
STR_ID_PUNJABI_LANGUAGE,
STR_ID_THAI,
STR_ID_CZECH_LANGUAGE,
STR_ID_CLOUDY_DURING_THE_DAY,
STR_ID_CLOUDY_AT_NIGHT,
STR_ID_YIN,
STR_ID_DUST_STORM,
STR_ID_RAIN_AND_SNOW_MIXED,
STR_ID_CLEAR_AT_NIGHT,
STR_ID_THUNDER_SHOWER,
STR_ID_MORE_EXERCISE,
STR_ID_WECHAT,
STR_ID_NO_CLEAR,
STR_ID_ADD_CITY,
STR_ID_ONE_HOUR,
STR_ID_TODAY,
STR_ID_YESTERDAY,
STR_ID_OVERLOOK,
STR_ID_SYNCHRONIZATION_FAIL,
STR_ID_BATTERY_IS_ONLY_POWER_MODE,
STR_ID_PREVIOUS_PAGE,
STR_ID_NEXT_PAGE,
STR_ID_CLICK_START,
STR_ID_LAN_STR_TABLEMAX,
}LAN_STR_ID;
#endif

Some files were not shown because too many files have changed in this diff Show More